diff --git a/.gitignore b/.gitignore index 2fcade0..3296c96 100644 --- a/.gitignore +++ b/.gitignore @@ -7,4 +7,5 @@ projects/*/bin .architectury-transformer .vscode -.idea \ No newline at end of file +.idea +.eclipse \ No newline at end of file diff --git a/build.gradle.kts b/build.gradle.kts new file mode 100644 index 0000000..46abfe5 --- /dev/null +++ b/build.gradle.kts @@ -0,0 +1,18 @@ +plugins { + id("com.matyrobbrt.mc.registrationutils") version "1.21.0-0.2.2" +} + +registrationUtils { + group("li.cil.ocreloaded.minecraft.registration") + projects { + create("Fabric") { + type("Fabric") + } + create("NeoForge") { + type("NeoForge") + } + create("Minecraft") { + type("Common") + } + } +} \ No newline at end of file diff --git a/buildSrc/src/main/kotlin/oc-common.gradle.kts b/buildSrc/src/main/kotlin/oc-common.gradle.kts index c6d3458..465d8a9 100644 --- a/buildSrc/src/main/kotlin/oc-common.gradle.kts +++ b/buildSrc/src/main/kotlin/oc-common.gradle.kts @@ -13,4 +13,7 @@ repositories { maven("https://maven.parchmentmc.org") { name = "ParchmentMC" } + maven("https://maven.blamejared.com") { + name = "BlameJared's maven" + } } \ No newline at end of file diff --git a/buildSrc/src/main/kotlin/oc-loader.gradle.kts b/buildSrc/src/main/kotlin/oc-loader.gradle.kts index 02eed0a..737d992 100644 --- a/buildSrc/src/main/kotlin/oc-loader.gradle.kts +++ b/buildSrc/src/main/kotlin/oc-loader.gradle.kts @@ -2,20 +2,6 @@ plugins { id("oc-common") } -configurations { - create("commonJava") { - isCanBeResolved = true - } - create("commonResources") { - isCanBeResolved = true - } -} - -tasks.named("compileJava") { - dependsOn(configurations["commonJava"]) - source(configurations["commonJava"]) -} - tasks.withType { val properties = mapOf( "neoforgeVersionRange" to rootProject.properties["neo_loader_version_range"], @@ -29,4 +15,14 @@ tasks.withType { filesMatching(listOf("META-INF/neoforge.mods.toml", "pack.mcmeta", "fabric.mod.json")) { expand(properties) } +} + +tasks.named("processResources") { + duplicatesStrategy = DuplicatesStrategy.EXCLUDE + from(rootProject.file("libs/lua53")) { + into("data/ocreloaded/libs/lua53") + } + from(rootProject.file("libs/lua52")) { + into("data/ocreloaded/libs/lua52") + } } \ No newline at end of file diff --git a/projects/Core/build.gradle.kts b/projects/Core/build.gradle.kts index fc72190..b244ce4 100644 --- a/projects/Core/build.gradle.kts +++ b/projects/Core/build.gradle.kts @@ -6,19 +6,9 @@ repositories { mavenCentral() } -configurations { - create("coreJava") { - isCanBeResolved = false - isCanBeConsumed = true - } -} - -artifacts { - add("coreJava", sourceSets["main"].java.sourceDirectories.singleFile) -} - dependencies { - implementation(libs.typesafeConfig) - implementation(libs.slf4j) - implementation(files("../../libs/OpenComputers-JNLua.jar", "../../libs/OpenComputers-LuaJ.jar")) + compileOnly(libs.slf4j) + + api(libs.typesafeConfig) + api(files("../../libs/OpenComputers-JNLua.jar", "../../libs/OpenComputers-LuaJ.jar")) } \ No newline at end of file diff --git a/projects/Fabric/build.gradle.kts b/projects/Fabric/build.gradle.kts index a875a11..2a35734 100644 --- a/projects/Fabric/build.gradle.kts +++ b/projects/Fabric/build.gradle.kts @@ -1,12 +1,13 @@ +import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar +import net.fabricmc.loom.task.RemapJarTask + +evaluationDependsOn(":Minecraft") + plugins { id("oc-loader") alias(libs.plugins.loom) } -loom { - -} - dependencies { minecraft("com.mojang:minecraft:${libs.versions.minecraft.get()}") mappings(loom.layered { @@ -15,8 +16,37 @@ dependencies { }) modImplementation("net.fabricmc:fabric-loader:${libs.versions.fabricLoader.get()}") modImplementation("net.fabricmc.fabric-api:fabric-api:${libs.versions.fabricApi.get()}") + modImplementation("mysticdrew:common-networking-fabric:1.0.20-1.21.1") + + implementation(project(":Core")) + implementation(project(":Minecraft")) +} + +sourceSets.main { + resources { + srcDir(project(":Minecraft").sourceSets.main.get().resources.srcDirs) + } +} + +tasks.withType { + duplicatesStrategy = DuplicatesStrategy.EXCLUDE + from(project(":Core").sourceSets.main.get().output) + from(project(":Minecraft").sourceSets.main.get().output) + + dependencies { + include(dependency(libs.typesafeConfig)) + include(dependency(files("../../libs/OpenComputers-JNLua.jar", "../../libs/OpenComputers-LuaJ.jar"))) + } + + relocate("com.typesafe.config", "li.cil.ocreloaded.lib.config") + archiveClassifier.set("all") +} + +tasks.withType { + inputFile.set(tasks.shadowJar.get().archiveFile) + archiveClassifier.set("") +} - compileOnly(project(":Minecraft")) - commonJava(project(path = ":Minecraft", configuration = "commonJava")) - commonResources(project(path = ":Minecraft", configuration = "commonResources")) +tasks.build { + dependsOn(tasks.remapJar) } \ No newline at end of file diff --git a/projects/Fabric/src/main/java/li/cil/ocreloaded/fabric/client/OCReloadedClient.java b/projects/Fabric/src/main/java/li/cil/ocreloaded/fabric/client/OCReloadedClient.java index 1434693..8d0aa2d 100644 --- a/projects/Fabric/src/main/java/li/cil/ocreloaded/fabric/client/OCReloadedClient.java +++ b/projects/Fabric/src/main/java/li/cil/ocreloaded/fabric/client/OCReloadedClient.java @@ -1,13 +1,44 @@ package li.cil.ocreloaded.fabric.client; +import li.cil.ocreloaded.minecraft.client.ColorHandlers; import li.cil.ocreloaded.minecraft.client.CommonClientHooks; import li.cil.ocreloaded.minecraft.client.registry.ClientRegistered; +import li.cil.ocreloaded.minecraft.client.renderer.entity.CaseRenderer; +import li.cil.ocreloaded.minecraft.client.renderer.entity.screen.ScreenRenderer; +import li.cil.ocreloaded.minecraft.client.screen.CaseScreen; +import li.cil.ocreloaded.minecraft.client.screen.ScreenScreen; +import li.cil.ocreloaded.minecraft.common.registry.CommonRegistered; import net.fabricmc.api.ClientModInitializer; +import net.fabricmc.fabric.api.client.rendering.v1.ColorProviderRegistry; +import net.minecraft.client.gui.screens.MenuScreens; +import net.minecraft.client.renderer.blockentity.BlockEntityRenderers; public class OCReloadedClient implements ClientModInitializer { @Override public void onInitializeClient() { ClientRegistered.setup(); CommonClientHooks.setup(); + registerClientStuff(); } -} + + public void registerClientStuff() { + registerColorHandlers(); + registerBERenderers(); + registerMenuScreens(); + } + + public void registerColorHandlers() { + ColorHandlers.registerBlockColorHandlers((block, blockColor) -> ColorProviderRegistry.BLOCK.register(blockColor, block)); + ColorHandlers.registerItemColorHandlers((item, itemColor) -> ColorProviderRegistry.ITEM.register(itemColor, item)); + } + + public void registerBERenderers() { + BlockEntityRenderers.register(CommonRegistered.CASE_BLOCK_ENTITY.get(), CaseRenderer::new); + BlockEntityRenderers.register(CommonRegistered.SCREEN_BLOCK_ENTITY.get(), ScreenRenderer::new); + } + + public void registerMenuScreens() { + MenuScreens.register(CommonRegistered.CASE_MENU_TYPE.get(), CaseScreen::new); + MenuScreens.register(CommonRegistered.SCREEN_MENU_TYPE.get(), ScreenScreen::new); + } +} \ No newline at end of file diff --git a/projects/Fabric/src/main/java/li/cil/ocreloaded/fabric/common/FabricPlatformMenuHelper.java b/projects/Fabric/src/main/java/li/cil/ocreloaded/fabric/common/FabricPlatformMenuHelper.java new file mode 100644 index 0000000..f6372d1 --- /dev/null +++ b/projects/Fabric/src/main/java/li/cil/ocreloaded/fabric/common/FabricPlatformMenuHelper.java @@ -0,0 +1,41 @@ +package li.cil.ocreloaded.fabric.common; + +import java.util.function.Consumer; + +import li.cil.ocreloaded.minecraft.common.util.IPlatformMenuHelper; +import net.fabricmc.fabric.api.networking.v1.PacketByteBufs; +import net.fabricmc.fabric.api.screenhandler.v1.ExtendedScreenHandlerFactory; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.network.chat.Component; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.MenuProvider; +import net.minecraft.world.entity.player.Inventory; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.inventory.AbstractContainerMenu; + +public class FabricPlatformMenuHelper implements IPlatformMenuHelper { + @Override + public void openExtendedMenu(ServerPlayer serverPlayer, MenuProvider menuProvider, Consumer byteBufConsumer) { + serverPlayer.openMenu(new ExtendedScreenHandlerFactory() { + + @Override + public Component getDisplayName() { + return menuProvider.getDisplayName(); + } + + @Override + public AbstractContainerMenu createMenu(int containerId, Inventory playerInventory, Player player) { + return menuProvider.createMenu(containerId, playerInventory, player); + } + + @Override + public FriendlyByteBuf getScreenOpeningData(ServerPlayer player) { + FriendlyByteBuf byteBuf = PacketByteBufs.create(); + byteBufConsumer.accept(byteBuf); + return byteBuf; + } + + }); + } + +} diff --git a/projects/Fabric/src/main/java/li/cil/ocreloaded/fabric/common/FabricPlatformRegistryHelper.java b/projects/Fabric/src/main/java/li/cil/ocreloaded/fabric/common/FabricPlatformRegistryHelper.java new file mode 100644 index 0000000..76247c5 --- /dev/null +++ b/projects/Fabric/src/main/java/li/cil/ocreloaded/fabric/common/FabricPlatformRegistryHelper.java @@ -0,0 +1,39 @@ +package li.cil.ocreloaded.fabric.common; + +import io.netty.buffer.Unpooled; +import li.cil.ocreloaded.minecraft.common.registry.IPlatformRegistryHelper; +import net.fabricmc.fabric.api.itemgroup.v1.FabricItemGroup; +import net.fabricmc.fabric.api.screenhandler.v1.ExtendedScreenHandlerType; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.network.codec.StreamCodec; +import net.minecraft.world.inventory.AbstractContainerMenu; +import net.minecraft.world.inventory.MenuType; +import net.minecraft.world.item.CreativeModeTab; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.BlockEntityType; + +public class FabricPlatformRegistryHelper implements IPlatformRegistryHelper { + @Override + public CreativeModeTab.Builder constructTabBuilder() { + return FabricItemGroup.builder(); + } + + @Override + public BlockEntityType createBlockEntityType(BlockEntityConstructor constructor, Block... blocks) { + return BlockEntityType.Builder.of(constructor::get, blocks).build(); + } + + @Override + public MenuType registerMenuType(TypedMenuConstructor menuConstructor) { + ExtendedScreenHandlerType.ExtendedFactory screenFactory = menuConstructor::createMenu; + + return new ExtendedScreenHandlerType<>(screenFactory, StreamCodec.of((dest, src) -> { + dest.writeBytes(src); + }, s -> { + FriendlyByteBuf byteBuf = new FriendlyByteBuf(Unpooled.buffer()); + byteBuf.writeBytes(s); + return byteBuf; + })); + } +} diff --git a/projects/Fabric/src/main/resources/META-INF/services/li.cil.ocreloaded.minecraft.common.registry.IPlatformRegistryHelper b/projects/Fabric/src/main/resources/META-INF/services/li.cil.ocreloaded.minecraft.common.registry.IPlatformRegistryHelper new file mode 100644 index 0000000..e150e86 --- /dev/null +++ b/projects/Fabric/src/main/resources/META-INF/services/li.cil.ocreloaded.minecraft.common.registry.IPlatformRegistryHelper @@ -0,0 +1 @@ +li.cil.ocreloaded.fabric.common.FabricPlatformRegistryHelper \ No newline at end of file diff --git a/projects/Fabric/src/main/resources/META-INF/services/li.cil.ocreloaded.minecraft.common.util.IPlatformMenuHelper b/projects/Fabric/src/main/resources/META-INF/services/li.cil.ocreloaded.minecraft.common.util.IPlatformMenuHelper new file mode 100644 index 0000000..da91f4d --- /dev/null +++ b/projects/Fabric/src/main/resources/META-INF/services/li.cil.ocreloaded.minecraft.common.util.IPlatformMenuHelper @@ -0,0 +1 @@ +li.cil.ocreloaded.fabric.common.FabricPlatformMenuHelper \ No newline at end of file diff --git a/projects/Fabric/src/main/resources/fabric.mod.json b/projects/Fabric/src/main/resources/fabric.mod.json index a75ef10..335e308 100644 --- a/projects/Fabric/src/main/resources/fabric.mod.json +++ b/projects/Fabric/src/main/resources/fabric.mod.json @@ -18,7 +18,7 @@ }, "depends": { "fabricloader": ">=0.16.0", - "minecraft": "~{minecraftVersion}", + "minecraft": "~${minecraftVersion}", "java": ">=21", "fabric-api": "*" } diff --git a/projects/Minecraft/build.gradle.kts b/projects/Minecraft/build.gradle.kts index 1d2dce5..17b47c1 100644 --- a/projects/Minecraft/build.gradle.kts +++ b/projects/Minecraft/build.gradle.kts @@ -6,46 +6,12 @@ neoForge { neoFormVersion = libs.versions.neoForm.get() } -configurations { - create("commonJava") { - isCanBeResolved = false - isCanBeConsumed = true - } - create("commonResources") { - isCanBeResolved = false - isCanBeConsumed = true - } -} - dependencies { - compileOnly(project(":Core")) - coreJava(project(path= ":Core", configuration= "coreJava")) - - implementation(libs.typesafeConfig) - implementation(files("../../libs/OpenComputers-JNLua.jar", "../../libs/OpenComputers-LuaJ.jar")) -} - -artifacts { - add("commonJava", sourceSets["main"].java.sourceDirectories.singleFile) - add("commonResources", sourceSets["main"].resources.sourceDirectories.singleFile) -} - -tasks.named("compileJava") { - dependsOn(configurations["coreJava"]) - source(configurations["coreJava"]) + api(project(":Core")) + implementation("mysticdrew:common-networking-common:1.0.20-1.21.1") } tasks.register("copyResources") { - copy { - from("${rootProject.projectDir}/libs/lua52") - into(file("build/resources/main/data/ocreloaded/libs/lua52")) - } - - copy { - from("${rootProject.projectDir}/libs/lua53") - into(file("build/resources/main/data/ocreloaded/libs/lua53")) - } - copy { from("${projectDir}/src/generated/resources/") into(file("build/resources/main/")) diff --git a/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/client/ColorHandlers.java b/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/client/ColorHandlers.java index 709cb82..9aeb967 100644 --- a/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/client/ColorHandlers.java +++ b/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/client/ColorHandlers.java @@ -1,26 +1,35 @@ package li.cil.ocreloaded.minecraft.client; -import dev.architectury.registry.client.rendering.ColorHandlerRegistry; import li.cil.ocreloaded.minecraft.common.block.TieredBlock; import li.cil.ocreloaded.minecraft.common.registry.CommonRegistered; import li.cil.ocreloaded.minecraft.common.util.Colors; +import net.minecraft.client.color.block.BlockColor; +import net.minecraft.client.color.item.ItemColor; import net.minecraft.world.item.BlockItem; import net.minecraft.world.item.Item; import net.minecraft.world.level.block.Block; +import java.util.function.BiConsumer; + public final class ColorHandlers { - - private static final int[] TIER_COLORS = new int[] { - Colors.LIGHT_GRAY, - Colors.YELLOW, - Colors.CYAN, - Colors.MAGENTA + private static final int[] TIER_COLORS = new int[]{ + Colors.LIGHT_GRAY, + Colors.YELLOW, + Colors.CYAN, + Colors.MAGENTA }; - private ColorHandlers() {} + private static final Item[] ITEMS = new Item[]{ + CommonRegistered.CASE_BLOCK_ITEM_TIER_1.get(), + CommonRegistered.CASE_BLOCK_ITEM_TIER_2.get(), + CommonRegistered.CASE_BLOCK_ITEM_TIER_3.get(), + CommonRegistered.CASE_BLOCK_ITEM_CREATIVE.get(), + CommonRegistered.SCREEN_BLOCK_ITEM_TIER_1.get(), + CommonRegistered.SCREEN_BLOCK_ITEM_TIER_2.get(), + CommonRegistered.SCREEN_BLOCK_ITEM_TIER_3.get() + }; - public static void setup() { - registerBlockColorHandlers( + private static final Block[] BLOCKS = new Block[]{ CommonRegistered.CASE_BLOCK_TIER_1.get(), CommonRegistered.CASE_BLOCK_TIER_2.get(), CommonRegistered.CASE_BLOCK_TIER_3.get(), @@ -28,40 +37,36 @@ public static void setup() { CommonRegistered.SCREEN_BLOCK_TIER_1.get(), CommonRegistered.SCREEN_BLOCK_TIER_2.get(), CommonRegistered.SCREEN_BLOCK_TIER_3.get() - ); + }; - registerItemColorHandlers( - CommonRegistered.CASE_BLOCK_ITEM_TIER_1.get(), - CommonRegistered.CASE_BLOCK_ITEM_TIER_2.get(), - CommonRegistered.CASE_BLOCK_ITEM_TIER_3.get(), - CommonRegistered.CASE_BLOCK_ITEM_CREATIVE.get(), - CommonRegistered.SCREEN_BLOCK_ITEM_TIER_1.get(), - CommonRegistered.SCREEN_BLOCK_ITEM_TIER_2.get(), - CommonRegistered.SCREEN_BLOCK_ITEM_TIER_3.get() - ); + private ColorHandlers() { } - private static void registerBlockColorHandlers(Block... blocks) { - ColorHandlerRegistry.registerBlockColors((blockState, blockAndTintGetter, blockPos, tintIndex) -> { - if (blockState.getBlock() instanceof TieredBlock tieredBlock && tieredBlock.getTier() <= TIER_COLORS.length) { - return TIER_COLORS[tieredBlock.getTier() - 1]; - } - - return Colors.WHITE; - }, blocks); - } + public static void registerBlockColorHandlers(BiConsumer registerFunc) { + for (Block block : BLOCKS) { + registerFunc.accept(block, (blockState, blockAndTintGetter, blockPos, i) -> { + if (blockState.getBlock() instanceof TieredBlock tieredBlock && tieredBlock.getTier() <= TIER_COLORS.length) { + return TIER_COLORS[tieredBlock.getTier() - 1]; + } - private static void registerItemColorHandlers(Item... items) { - ColorHandlerRegistry.registerItemColors((stack, tintIndex) -> { - if (stack.getItem() instanceof TieredBlock tieredBlock && tieredBlock.getTier() <= TIER_COLORS.length) { - return TIER_COLORS[tieredBlock.getTier() - 1]; - } - if (stack.getItem() instanceof BlockItem blockItem && blockItem.getBlock() instanceof TieredBlock tieredBlock && tieredBlock.getTier() <= TIER_COLORS.length) { - return TIER_COLORS[tieredBlock.getTier() - 1]; - } - - return Colors.WHITE; - }, items); + return Colors.WHITE; + }); + } } + public static void registerItemColorHandlers(BiConsumer registerFunc) { + for (Item item : ITEMS) { + registerFunc.accept(item, (itemStack, tintIndex) -> { + if (itemStack.getItem() instanceof TieredBlock tieredBlock && tieredBlock.getTier() <= TIER_COLORS.length) { + return TIER_COLORS[tieredBlock.getTier() - 1]; + } + + if (itemStack.getItem() instanceof BlockItem blockItem && blockItem.getBlock() instanceof TieredBlock tieredBlock && tieredBlock.getTier() <= TIER_COLORS.length) { + return TIER_COLORS[tieredBlock.getTier() - 1]; + } + + return Colors.WHITE; + }); + } + } } diff --git a/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/client/CommonClientHooks.java b/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/client/CommonClientHooks.java index 347d41a..11b93e2 100644 --- a/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/client/CommonClientHooks.java +++ b/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/client/CommonClientHooks.java @@ -9,9 +9,6 @@ public final class CommonClientHooks { private CommonClientHooks() {} public static void setup() { - ColorHandlers.setup(); - ClientBridge.getInstance().registerClient(SoundPlayerProvider.class, new SoundPlayer()); } - } diff --git a/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/client/assets/ClientTextures.java b/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/client/assets/ClientTextures.java index 05de1cd..8822c1e 100644 --- a/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/client/assets/ClientTextures.java +++ b/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/client/assets/ClientTextures.java @@ -5,17 +5,17 @@ public class ClientTextures { // GUI textures - public static final ResourceLocation BACKGROUND = new ResourceLocation("ocreloaded", "textures/gui/background.png"); - public static final ResourceLocation BORDERS = new ResourceLocation("ocreloaded", "textures/gui/borders.png"); - public static final ResourceLocation COMPUTER = new ResourceLocation("ocreloaded", "textures/gui/computer.png"); - public static final ResourceLocation POWER_BUTTON = new ResourceLocation("ocreloaded", "textures/gui/button_power.png"); - public static final ResourceLocation SLOT = new ResourceLocation("ocreloaded", "textures/gui/slot.png"); + public static final ResourceLocation BACKGROUND = ResourceLocation.fromNamespaceAndPath("ocreloaded", "textures/gui/background.png"); + public static final ResourceLocation BORDERS = ResourceLocation.fromNamespaceAndPath("ocreloaded", "textures/gui/borders.png"); + public static final ResourceLocation COMPUTER = ResourceLocation.fromNamespaceAndPath("ocreloaded", "textures/gui/computer.png"); + public static final ResourceLocation POWER_BUTTON = ResourceLocation.fromNamespaceAndPath("ocreloaded", "textures/gui/button_power.png"); + public static final ResourceLocation SLOT = ResourceLocation.fromNamespaceAndPath("ocreloaded", "textures/gui/slot.png"); // Block textures - public static final ResourceLocation CASE_FRONT_RUNNING = new ResourceLocation("ocreloaded", "block/overlay/case_front_running"); + public static final ResourceLocation CASE_FRONT_RUNNING = ResourceLocation.fromNamespaceAndPath("ocreloaded", "block/overlay/case_front_running"); // Font textures - public static final ResourceLocation FONT_NONE = new ResourceLocation("ocreloaded", "block/overlay/term_blank"); - public static final ResourceLocation FONT = new ResourceLocation("ocreloaded", "block/overlay/term_font"); + public static final ResourceLocation FONT_NONE = ResourceLocation.fromNamespaceAndPath("ocreloaded", "block/overlay/term_blank"); + public static final ResourceLocation FONT = ResourceLocation.fromNamespaceAndPath("ocreloaded", "block/overlay/term_font"); } diff --git a/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/client/registry/ClientRegistered.java b/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/client/registry/ClientRegistered.java index c0bb467..16202af 100644 --- a/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/client/registry/ClientRegistered.java +++ b/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/client/registry/ClientRegistered.java @@ -1,21 +1,7 @@ package li.cil.ocreloaded.minecraft.client.registry; -import dev.architectury.registry.client.rendering.BlockEntityRendererRegistry; -import dev.architectury.registry.menu.MenuRegistry; -import li.cil.ocreloaded.minecraft.client.renderer.entity.CaseRenderer; -import li.cil.ocreloaded.minecraft.client.renderer.entity.screen.ScreenRenderer; -import li.cil.ocreloaded.minecraft.client.screen.CaseScreen; -import li.cil.ocreloaded.minecraft.client.screen.ScreenScreen; -import li.cil.ocreloaded.minecraft.common.registry.CommoznRegistered; - public class ClientRegistered { - public static void setup() { - CommonRegistered.CASE_MENU_TYPE.listen(menu -> MenuRegistry.registerScreenFactory(menu, CaseScreen::new)); - CommonRegistered.SCREEN_MENU_TYPE.listen(menu -> MenuRegistry.registerScreenFactory(menu, ScreenScreen::new)); - CommonRegistered.CASE_BLOCK_ENTITY.listen(blockEntityType -> BlockEntityRendererRegistry.register(blockEntityType, CaseRenderer::new)); - CommonRegistered.SCREEN_BLOCK_ENTITY.listen(blockEntityType -> BlockEntityRendererRegistry.register(blockEntityType, ScreenRenderer::new)); } - } diff --git a/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/client/renderer/entity/CaseRenderer.java b/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/client/renderer/entity/CaseRenderer.java index d7e2979..9a251cc 100644 --- a/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/client/renderer/entity/CaseRenderer.java +++ b/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/client/renderer/entity/CaseRenderer.java @@ -1,5 +1,7 @@ package li.cil.ocreloaded.minecraft.client.renderer.entity; +import javax.annotation.Nonnull; + import org.joml.Quaternionf; import com.mojang.blaze3d.vertex.PoseStack; @@ -18,7 +20,10 @@ public class CaseRenderer implements BlockEntityRenderer { public CaseRenderer(BlockEntityRendererProvider.Context context) {} @Override - public void render(CaseBlockEntity blockEntity, float partialTick, PoseStack poseStack, MultiBufferSource bufferSource, int combinedLight, int combinedOverlay) { + public void render( + @Nonnull CaseBlockEntity blockEntity, float partialTick, @Nonnull PoseStack poseStack, + @Nonnull MultiBufferSource bufferSource, int combinedLight, int combinedOverlay + ) { poseStack.pushPose(); poseStack.translate(.5, .5, 0.5); diff --git a/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/client/renderer/entity/RenderUtil.java b/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/client/renderer/entity/RenderUtil.java index a1bfc88..5abb4be 100644 --- a/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/client/renderer/entity/RenderUtil.java +++ b/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/client/renderer/entity/RenderUtil.java @@ -49,12 +49,11 @@ public static void renderSideTexture( private static void putVertexWithAO(VertexConsumer vertexConsumer, Matrix4f matrix, float x, float y, TextureAtlasSprite sprite, float brightness, int lightmap) { vertexConsumer - .vertex(matrix, x, y, 0) - .color((int) (brightness * 255), (int) (brightness * 255), (int) (brightness * 255), 255) - .uv(sprite.getU(x > 0 ? 1 : 0), sprite.getV(y > 0 ? 0 : 1)) - .uv2(lightmap) - .normal(0, 0, 0) - .endVertex(); + .addVertex(matrix, x, y, 0) + .setColor((int) (brightness * 255), (int) (brightness * 255), (int) (brightness * 255), 255) + .setUv(sprite.getU(x > 0 ? 1 : 0), sprite.getV(y > 0 ? 0 : 1)) + .setLight(lightmap) + .setNormal(0, 0, 0); } private static float getVertexPosX(int vertexIndex) { diff --git a/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/client/renderer/entity/screen/GuiGraphicsDrawingContext.java b/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/client/renderer/entity/screen/GuiGraphicsDrawingContext.java index 30fea41..51de9b1 100644 --- a/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/client/renderer/entity/screen/GuiGraphicsDrawingContext.java +++ b/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/client/renderer/entity/screen/GuiGraphicsDrawingContext.java @@ -26,7 +26,7 @@ public void blit( ResourceLocation textureLocation, int adjustedDestX, int adjustedDestY, int adjustedDestW, int adjustedDestH, int srcX, int srcY, int srcW, int srcH, int textureWidth, int textureHeight ) { - ResourceLocation adjustedTextureLocation = new ResourceLocation(textureLocation.getNamespace(), "textures/" + textureLocation.getPath() + ".png"); + ResourceLocation adjustedTextureLocation = ResourceLocation.fromNamespaceAndPath(textureLocation.getNamespace(), "textures/" + textureLocation.getPath() + ".png"); this.graphics.blit(adjustedTextureLocation, adjustedDestX, adjustedDestY, adjustedDestW, adjustedDestH, srcX, srcY, srcW, srcH, textureWidth, textureHeight); } diff --git a/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/client/renderer/entity/screen/MultiBufferSourceDrawingContext.java b/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/client/renderer/entity/screen/MultiBufferSourceDrawingContext.java index c914559..b88e226 100644 --- a/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/client/renderer/entity/screen/MultiBufferSourceDrawingContext.java +++ b/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/client/renderer/entity/screen/MultiBufferSourceDrawingContext.java @@ -64,22 +64,20 @@ public void blit( private void putVertexWithAO(VertexConsumer vertexConsumer, Matrix4f matrix, float x, float y, float u, float v, TextureAtlasSprite sprite) { vertexConsumer - .vertex(matrix, x, y, 0) - .color((int) (color[0] * 255), (int) (color[1] * 255), (int) (color[2] * 255), (int) (color[3] * 255)) - .uv(sprite.getU(u), sprite.getV(v)) - .uv2(0xF000F0) - .normal(0, 0, 0) - .endVertex(); + .addVertex(matrix, x, y, 0) + .setColor((int) (color[0] * 255), (int) (color[1] * 255), (int) (color[2] * 255), (int) (color[3] * 255)) + .setUv(sprite.getU(u), sprite.getV(v)) + .setLight(0xF000F0) + .setNormal(0, 0, 0); } private void putFillVertexWithAO(VertexConsumer vertexConsumer, Matrix4f matrix, float x, float y, float u, float v, TextureAtlasSprite sprite, int myColor) { vertexConsumer - .vertex(matrix, x, y, .001f) - .color((myColor >> 16) & 0xFF, (myColor >> 8) & 0xFF, myColor & 0xFF, (myColor >> 24) & 0xFF) - .uv(sprite.getU(u), sprite.getV(v)) - .uv2(0xF000F0) - .normal(0, 0, 0) - .endVertex(); + .addVertex(matrix, x, y, .001f) + .setColor((myColor >> 16) & 0xFF, (myColor >> 8) & 0xFF, myColor & 0xFF, (myColor >> 24) & 0xFF) + .setUv(sprite.getU(u), sprite.getV(v)) + .setLight(0xF000F0) + .setNormal(0, 0, 0); } } diff --git a/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/client/renderer/entity/screen/ScreenRenderer.java b/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/client/renderer/entity/screen/ScreenRenderer.java index ff97e0d..cc06b90 100644 --- a/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/client/renderer/entity/screen/ScreenRenderer.java +++ b/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/client/renderer/entity/screen/ScreenRenderer.java @@ -1,5 +1,7 @@ package li.cil.ocreloaded.minecraft.client.renderer.entity.screen; +import javax.annotation.Nonnull; + import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.math.Axis; @@ -22,8 +24,8 @@ public ScreenRenderer(BlockEntityRendererProvider.Context context) {} @Override public void render( - ScreenBlockEntity blockEntity, float partialTick, PoseStack poseStack, - MultiBufferSource bufferSource, int combinedLight, int combinedOverlay + @Nonnull ScreenBlockEntity blockEntity, float partialTick, @Nonnull PoseStack poseStack, + @Nonnull MultiBufferSource bufferSource, int combinedLight, int combinedOverlay ) { int[] bufferSize = blockEntity.getScreenBuffer().viewport(); float totalWidth = bufferSize[0] * ScreenDisplayRenderer.CELL_WIDTH; diff --git a/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/client/screen/CaseScreen.java b/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/client/screen/CaseScreen.java index a14eaea..1e0c875 100644 --- a/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/client/screen/CaseScreen.java +++ b/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/client/screen/CaseScreen.java @@ -2,6 +2,8 @@ import java.util.List; +import javax.annotation.Nonnull; + import com.mojang.blaze3d.platform.GlStateManager.DestFactor; import com.mojang.blaze3d.platform.GlStateManager.SourceFactor; import com.mojang.blaze3d.systems.RenderSystem; @@ -36,7 +38,7 @@ protected void init() { } @Override - protected void renderBg(GuiGraphics guiGraphics, float partialTicks, int mouseX, int mouseY) { + protected void renderBg(@Nonnull GuiGraphics guiGraphics, float partialTicks, int mouseX, int mouseY) { int x = (this.width - this.imageWidth) / 2; int y = (this.height - this.imageHeight) / 2; guiGraphics.blit(ClientTextures.BACKGROUND, x, y, 0, 0, this.imageWidth, this.imageHeight); @@ -46,7 +48,7 @@ protected void renderBg(GuiGraphics guiGraphics, float partialTicks, int mouseX, } @Override - public void render(GuiGraphics guiGraphics, int mouseX, int mouseY, float partialTicks) { + public void render(@Nonnull GuiGraphics guiGraphics, int mouseX, int mouseY, float partialTicks) { super.render(guiGraphics, mouseX, mouseY, partialTicks); for (Slot slot: ComponentHighlightHint.findHighlightHintSlots(this.menu.slots, this.hoveredSlot)) { renderSlotHighlight(guiGraphics, slot.x + (this.width - this.imageWidth) / 2, slot.y + (this.height - this.imageHeight) / 2, 0); diff --git a/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/client/screen/ScreenScreen.java b/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/client/screen/ScreenScreen.java index c73c77b..d5322b4 100644 --- a/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/client/screen/ScreenScreen.java +++ b/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/client/screen/ScreenScreen.java @@ -1,5 +1,7 @@ package li.cil.ocreloaded.minecraft.client.screen; +import javax.annotation.Nonnull; + import org.lwjgl.glfw.GLFW; import com.mojang.blaze3d.platform.InputConstants; @@ -37,7 +39,7 @@ public ScreenScreen(ScreenMenu screenMenu, Inventory inventory, Component compon } @Override - protected void renderBg(GuiGraphics guiGraphics, float partialTicks, int mouseX, int mouseY) { + protected void renderBg(@Nonnull GuiGraphics guiGraphics, float partialTicks, int mouseX, int mouseY) { ScreenBlockEntity blockEntity = this.menu.getBlockEntity(); TextModeBuffer textModeBuffer = blockEntity.getScreenBuffer(); int[] resolution = textModeBuffer.viewport(); @@ -64,7 +66,7 @@ protected void renderBg(GuiGraphics guiGraphics, float partialTicks, int mouseX, } @Override - public void render(GuiGraphics guiGraphics, int mouseX, int mouseY, float partialTicks) { + public void render(@Nonnull GuiGraphics guiGraphics, int mouseX, int mouseY, float partialTicks) { renderBackground(guiGraphics, mouseX, mouseY, partialTicks); ScreenBlockEntity blockEntity = this.menu.getBlockEntity(); @@ -74,6 +76,7 @@ public void render(GuiGraphics guiGraphics, int mouseX, int mouseY, float partia } @Override + @SuppressWarnings("null") // Linter being not smart public boolean keyPressed(int keyCode, int scanCode, int modifiers) { if (keyCode == InputConstants.KEY_ESCAPE) { this.onClose(); diff --git a/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/client/screen/widget/ButtonWidget.java b/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/client/screen/widget/ButtonWidget.java index f4b1ab4..fb2cf57 100644 --- a/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/client/screen/widget/ButtonWidget.java +++ b/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/client/screen/widget/ButtonWidget.java @@ -1,5 +1,7 @@ package li.cil.ocreloaded.minecraft.client.screen.widget; +import javax.annotation.Nonnull; + import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.components.AbstractButton; import net.minecraft.client.gui.narration.NarrationElementOutput; @@ -36,13 +38,13 @@ public void onPress() { } @Override - protected void updateWidgetNarration(NarrationElementOutput narrationElementOutput) { + protected void updateWidgetNarration(@Nonnull NarrationElementOutput narrationElementOutput) { // TODO Auto-generated method stub // throw new UnsupportedOperationException("Unimplemented method 'updateWidgetNarration'"); } @Override - public void renderWidget(GuiGraphics guiGraphics, int mouseX, int mouseY, float partialTicks) { + public void renderWidget(@Nonnull GuiGraphics guiGraphics, int mouseX, int mouseY, float partialTicks) { if (!this.isPressed() && !this.isHovered) { guiGraphics.blit(texture, this.x, this.y, 0, 0, this.width, this.height, TEXTURE_WIDTH, TEXTURE_HEIGHT); } else if (!this.isPressed() && this.isHovered) { diff --git a/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/client/sound/BeepSound.java b/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/client/sound/BeepSound.java index 949aa8e..5218d93 100644 --- a/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/client/sound/BeepSound.java +++ b/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/client/sound/BeepSound.java @@ -5,6 +5,7 @@ import java.nio.ByteOrder; import java.util.concurrent.CompletableFuture; +import javax.annotation.Nonnull; import javax.sound.sampled.AudioFormat; import net.minecraft.client.Minecraft; @@ -57,10 +58,10 @@ public ByteBuffer read(int capacity) throws IOException { } @Override - public WeighedSoundEvents resolve(SoundManager soundManager) { + public WeighedSoundEvents resolve(@Nonnull SoundManager soundManager) { float volume = Minecraft.getInstance().options.getSoundSourceVolume(SoundSource.BLOCKS); this.sound = new Sound( - new ResourceLocation("minecraft", "intentionally_empty").toString(), + ResourceLocation.fromNamespaceAndPath("minecraft", "intentionally_empty"), (SampledFloat) ConstantFloat.of(volume), (SampledFloat) ConstantFloat.of(1.0f), 1, Sound.Type.FILE, true, false, 16); return new WeighedSoundEvents(getLocation(), null); } diff --git a/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/client/sound/SoundPlayer.java b/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/client/sound/SoundPlayer.java index d15732d..ce774c6 100644 --- a/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/client/sound/SoundPlayer.java +++ b/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/client/sound/SoundPlayer.java @@ -9,7 +9,7 @@ public class SoundPlayer implements SoundPlayerProvider { @Override public void playBeepSound(BlockPos position, short frequency, short duration) { - ResourceLocation resourceLocation = new ResourceLocation("ocreloaded", "beep"); + ResourceLocation resourceLocation = ResourceLocation.fromNamespaceAndPath("ocreloaded", "beep"); BeepSound beepSound = new BeepSound(resourceLocation, position, frequency, duration); Minecraft.getInstance().getSoundManager().play(beepSound); } diff --git a/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/assets/SharedTextures.java b/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/assets/SharedTextures.java index 15ee373..da189c6 100644 --- a/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/assets/SharedTextures.java +++ b/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/assets/SharedTextures.java @@ -4,15 +4,15 @@ public class SharedTextures { - public static final ResourceLocation EEPROM_ICON = new ResourceLocation("ocreloaded", "textures/item/icon/eeprom.png"); - public static final ResourceLocation CARD_ICON = new ResourceLocation("ocreloaded", "textures/item/icon/card.png"); - public static final ResourceLocation CPU_ICON = new ResourceLocation("ocreloaded", "textures/item/icon/cpu.png"); - public static final ResourceLocation HDD_ICON = new ResourceLocation("ocreloaded", "textures/item/icon/hdd.png"); - public static final ResourceLocation MEMORY_ICON = new ResourceLocation("ocreloaded", "textures/item/icon/memory.png"); - public static final ResourceLocation FLOPPY_ICON = new ResourceLocation("ocreloaded", "textures/item/icon/floppy.png"); + public static final ResourceLocation EEPROM_ICON = ResourceLocation.fromNamespaceAndPath("ocreloaded", "textures/item/icon/eeprom.png"); + public static final ResourceLocation CARD_ICON = ResourceLocation.fromNamespaceAndPath("ocreloaded", "textures/item/icon/card.png"); + public static final ResourceLocation CPU_ICON = ResourceLocation.fromNamespaceAndPath("ocreloaded", "textures/item/icon/cpu.png"); + public static final ResourceLocation HDD_ICON = ResourceLocation.fromNamespaceAndPath("ocreloaded", "textures/item/icon/hdd.png"); + public static final ResourceLocation MEMORY_ICON = ResourceLocation.fromNamespaceAndPath("ocreloaded", "textures/item/icon/memory.png"); + public static final ResourceLocation FLOPPY_ICON = ResourceLocation.fromNamespaceAndPath("ocreloaded", "textures/item/icon/floppy.png"); - public static final ResourceLocation TIER1_ICON = new ResourceLocation("ocreloaded", "textures/item/icon/tier0.png"); - public static final ResourceLocation TIER2_ICON = new ResourceLocation("ocreloaded", "textures/item/icon/tier1.png"); - public static final ResourceLocation TIER3_ICON = new ResourceLocation("ocreloaded", "textures/item/icon/tier2.png"); + public static final ResourceLocation TIER1_ICON = ResourceLocation.fromNamespaceAndPath("ocreloaded", "textures/item/icon/tier0.png"); + public static final ResourceLocation TIER2_ICON = ResourceLocation.fromNamespaceAndPath("ocreloaded", "textures/item/icon/tier1.png"); + public static final ResourceLocation TIER3_ICON = ResourceLocation.fromNamespaceAndPath("ocreloaded", "textures/item/icon/tier2.png"); } diff --git a/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/block/CaseBlock.java b/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/block/CaseBlock.java index dde8ae6..e30ade1 100644 --- a/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/block/CaseBlock.java +++ b/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/block/CaseBlock.java @@ -1,13 +1,15 @@ package li.cil.ocreloaded.minecraft.common.block; -import dev.architectury.registry.menu.MenuRegistry; +import javax.annotation.Nonnull; +import javax.annotation.Nullable; + import li.cil.ocreloaded.minecraft.common.entity.CaseBlockEntity; +import li.cil.ocreloaded.minecraft.common.util.IPlatformMenuHelper; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.Containers; -import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; @@ -44,47 +46,48 @@ public int getTier() { } @Override - public InteractionResult use(BlockState state, Level level, BlockPos pos, Player player, InteractionHand hand, BlockHitResult hit) { + public InteractionResult useWithoutItem(@Nonnull BlockState state, @Nonnull Level level, @Nonnull BlockPos pos, @Nonnull Player player, @Nonnull BlockHitResult hit) { if (level.isClientSide()) { return InteractionResult.SUCCESS; } BlockEntity blockEntity = level.getBlockEntity(pos); if (blockEntity instanceof CaseBlockEntity caseBlockEntity && player instanceof ServerPlayer serverPlayer) { - MenuRegistry.openExtendedMenu(serverPlayer, caseBlockEntity, caseBlockEntity::writeData); + IPlatformMenuHelper.INSTANCE.openExtendedMenu(serverPlayer, caseBlockEntity, caseBlockEntity::writeData); } return InteractionResult.CONSUME; } - @SuppressWarnings("deprecation") @Override - public void onRemove(BlockState blockState, Level level, BlockPos blockPos, BlockState blockState2, boolean bl) { + public void onRemove(@Nonnull BlockState blockState, @Nonnull Level level, @Nonnull BlockPos blockPos, @Nonnull BlockState blockState2, boolean bl) { Containers.dropContentsOnDestroy(blockState, blockState2, level, blockPos); super.onRemove(blockState, level, blockPos, blockState2, bl); } @Override - public void playerDestroy(Level level, Player player, BlockPos blockPos, BlockState blockState, BlockEntity blockEntity, ItemStack itemStack) { + public void playerDestroy( + @Nonnull Level level, @Nonnull Player player, @Nonnull BlockPos blockPos, + @Nonnull BlockState blockState, @Nullable BlockEntity blockEntity, @Nonnull ItemStack itemStack + ) { super.playerDestroy(level, player, blockPos, blockState, blockEntity, itemStack); popResource(level, blockPos, new ItemStack(this)); // TODO: How to instead use loot table and respect tier? } @Override - public BlockEntity newBlockEntity(BlockPos blockPos, BlockState blockState) { + public BlockEntity newBlockEntity(@Nonnull BlockPos blockPos, @Nonnull BlockState blockState) { return new CaseBlockEntity(blockPos, blockState); } @Override - protected void createBlockStateDefinition(StateDefinition.Builder builder) { + protected void createBlockStateDefinition(@Nonnull StateDefinition.Builder builder) { builder.add(FACING); builder.add(RUNNING); } @Override - public BlockState getStateForPlacement(BlockPlaceContext context) { + public BlockState getStateForPlacement(@Nonnull BlockPlaceContext context) { return this.defaultBlockState().setValue(FACING, context.getHorizontalDirection().getOpposite()); } - } diff --git a/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/block/KeyboardBlock.java b/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/block/KeyboardBlock.java index 591c774..f139ffa 100644 --- a/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/block/KeyboardBlock.java +++ b/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/block/KeyboardBlock.java @@ -1,5 +1,7 @@ package li.cil.ocreloaded.minecraft.common.block; +import javax.annotation.Nonnull; + import li.cil.ocreloaded.minecraft.common.entity.KeyboardBlockEntity; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; @@ -28,13 +30,15 @@ public KeyboardBlock(Properties properties) { } @Override - protected void createBlockStateDefinition(StateDefinition.Builder builder) { + protected void createBlockStateDefinition(@Nonnull StateDefinition.Builder builder) { builder.add(FACING); builder.add(ATTACH_FACE); } @Override - public VoxelShape getShape(BlockState blockState, BlockGetter blockGetter, BlockPos blockPos, CollisionContext collisionContext) { + public VoxelShape getShape( + @Nonnull BlockState blockState, @Nonnull BlockGetter blockGetter, @Nonnull BlockPos blockPos, @Nonnull CollisionContext collisionContext + ) { return switch (blockState.getValue(ATTACH_FACE)) { case CEILING -> switch (blockState.getValue(FACING)) { case NORTH, SOUTH -> Block.box(1.0, 0.0, 4.0, 15.0, 1.0, 12.0); @@ -54,7 +58,7 @@ public VoxelShape getShape(BlockState blockState, BlockGetter blockGetter, Block } @Override - public BlockState getStateForPlacement(BlockPlaceContext context) { + public BlockState getStateForPlacement(@Nonnull BlockPlaceContext context) { BlockState blockState = this.defaultBlockState(); Direction facingDirection = context.getHorizontalDirection().getOpposite(); @@ -70,7 +74,7 @@ public BlockState getStateForPlacement(BlockPlaceContext context) { } @Override - public BlockEntity newBlockEntity(BlockPos blockPos, BlockState blockState) { + public BlockEntity newBlockEntity(@Nonnull BlockPos blockPos, @Nonnull BlockState blockState) { return new KeyboardBlockEntity(blockPos, blockState); } diff --git a/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/block/ScreenBlock.java b/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/block/ScreenBlock.java index 85e711a..a0137ae 100644 --- a/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/block/ScreenBlock.java +++ b/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/block/ScreenBlock.java @@ -1,12 +1,14 @@ package li.cil.ocreloaded.minecraft.common.block; -import dev.architectury.registry.menu.MenuRegistry; +import javax.annotation.Nonnull; +import javax.annotation.Nullable; + import li.cil.ocreloaded.minecraft.common.entity.ScreenBlockEntity; import li.cil.ocreloaded.minecraft.common.menu.provider.ScreenMenuProvider; +import li.cil.ocreloaded.minecraft.common.util.IPlatformMenuHelper; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.server.level.ServerPlayer; -import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; import net.minecraft.world.MenuProvider; import net.minecraft.world.entity.player.Player; @@ -19,11 +21,7 @@ import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.StateDefinition; -import net.minecraft.world.level.block.state.properties.AttachFace; -import net.minecraft.world.level.block.state.properties.BlockStateProperties; -import net.minecraft.world.level.block.state.properties.BooleanProperty; -import net.minecraft.world.level.block.state.properties.DirectionProperty; -import net.minecraft.world.level.block.state.properties.EnumProperty; +import net.minecraft.world.level.block.state.properties.*; import net.minecraft.world.phys.BlockHitResult; public class ScreenBlock extends Block implements EntityBlock, TieredBlock { @@ -53,14 +51,19 @@ public int getTier() { } @Override - public void playerDestroy(Level level, Player player, BlockPos blockPos, BlockState blockState, BlockEntity blockEntity, ItemStack itemStack) { + public void playerDestroy( + @Nonnull Level level, @Nonnull Player player, @Nonnull BlockPos blockPos, + @Nonnull BlockState blockState, @Nullable BlockEntity blockEntity, @Nonnull ItemStack itemStack + ) { super.playerDestroy(level, player, blockPos, blockState, blockEntity, itemStack); popResource(level, blockPos, new ItemStack(this)); // TODO: How to instead use loot table and respect tier? } @Override - public InteractionResult use(BlockState state, Level level, BlockPos pos, Player player, InteractionHand hand, BlockHitResult hit) { + public InteractionResult useWithoutItem( + @Nonnull BlockState state, @Nonnull Level level, @Nonnull BlockPos pos, @Nonnull Player player, @Nonnull BlockHitResult hitResult + ) { if (!level.isClientSide()) { MenuProvider menuProvider = state.getMenuProvider(level, pos); if ( @@ -68,7 +71,7 @@ public InteractionResult use(BlockState state, Level level, BlockPos pos, Player && player instanceof ServerPlayer serverPlayer && isKeyboardConnected(level, pos) ) { - MenuRegistry.openExtendedMenu(serverPlayer, menuProvider, screenMenuProvider::writeData); + IPlatformMenuHelper.INSTANCE.openExtendedMenu(serverPlayer, menuProvider, screenMenuProvider::writeData); return InteractionResult.CONSUME; } } @@ -77,17 +80,17 @@ && isKeyboardConnected(level, pos) } @Override - public MenuProvider getMenuProvider(BlockState state, Level level, BlockPos pos) { + public MenuProvider getMenuProvider(@Nonnull BlockState state, @Nonnull Level level, @Nonnull BlockPos pos) { return new ScreenMenuProvider(pos, tier); } @Override - public BlockEntity newBlockEntity(BlockPos blockPos, BlockState blockState) { + public BlockEntity newBlockEntity(@Nonnull BlockPos blockPos, @Nonnull BlockState blockState) { return new ScreenBlockEntity(blockPos, blockState); } @Override - protected void createBlockStateDefinition(StateDefinition.Builder builder) { + protected void createBlockStateDefinition(@Nonnull StateDefinition.Builder builder) { builder.add(FACING); builder.add(ATTACH_FACE); for (BooleanProperty side : SIDES) { @@ -96,7 +99,7 @@ protected void createBlockStateDefinition(StateDefinition.Builder var1) { + protected void setItems(@Nonnull NonNullList var1) { assert var1.size() == 10; for (int i = 0; i < 10; i++) { this.items.set(i, var1.get(i)); @@ -146,13 +148,14 @@ protected net.minecraft.network.chat.Component getDefaultName() { } @Override - protected AbstractContainerMenu createMenu(int windowId, Inventory playerInventory) { + protected AbstractContainerMenu createMenu(int windowId, @Nonnull Inventory playerInventory) { FriendlyByteBuf data = new FriendlyByteBuf(Unpooled.buffer()); writeData(data); return new CaseMenu(windowId, playerInventory, data); } @Override + @SuppressWarnings("null") // Linting being not smart public void onItemChange(int slot, ItemStack oldStack, ItemStack newStack) { if (level == null || level.isClientSide) return; NetworkNode oldNode = loadedComponents.remove(oldStack); @@ -198,6 +201,7 @@ public void setPowered(boolean b) { updateBlockState(); } + @SuppressWarnings("null") // Linting being not smart private void updateBlockState() { if (this.level == null || level.isClientSide) return; if (!(this.level.isLoaded(this.worldPosition) && this.getBlockState().getBlock() instanceof CaseBlock)) return; @@ -249,9 +253,12 @@ private void loadComponent(ItemStack itemStack, Map comp if (!networkNode.component().isPresent()) return; Component component = networkNode.component().get(); - CompoundTag tag = itemStack.getOrCreateTag(); + // TODO: Better way to save and load (needs to save on shutdown too) + CompoundTag tag = itemStack.get(CommonRegistered.NBT_DATA_TYPE.get()); + if (tag == null) tag = new CompoundTag(); component.load(new NBTPersistenceHolder(tag, SettingsConstants.namespace)); component.save(new NBTPersistenceHolder(tag, SettingsConstants.namespace)); + itemStack.set(CommonRegistered.NBT_DATA_TYPE.get(), tag); // TODO: Reset component on fresh boot if tmp is not persistant components.put(itemStack, networkNode); @@ -277,12 +284,13 @@ private Optional createMachine() { .flatMap(entry -> entry.createMachine(parameters)); } + @SuppressWarnings("null") // Linting being not smart private void beep(short frequency, short duration) { + if (level == null) return; ChunkPos chunkPos = new ChunkPos(worldPosition); - List chunkTrackingPlayers = ((ServerLevel) level).getPlayers( - player -> player.getChunkTrackingView().contains(chunkPos) - ); - NetworkUtil.getInstance().messageManyClients(SoundNetworkMessage.createBeepMessage(worldPosition, frequency, duration), chunkTrackingPlayers); + List chunkTrackingPlayers = ((ServerLevel) level).getPlayers(player -> player.getChunkTrackingView().contains(chunkPos)); + + Dispatcher.sendToClients(SoundPacket.createBeepMessage(worldPosition, frequency, duration), chunkTrackingPlayers); } } diff --git a/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/entity/KeyboardBlockEntity.java b/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/entity/KeyboardBlockEntity.java index 26ec10f..8bc214d 100644 --- a/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/entity/KeyboardBlockEntity.java +++ b/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/entity/KeyboardBlockEntity.java @@ -1,5 +1,7 @@ package li.cil.ocreloaded.minecraft.common.entity; +import javax.annotation.Nonnull; + import li.cil.ocreloaded.core.component.KeyboardComponent; import li.cil.ocreloaded.core.network.NetworkNode; import li.cil.ocreloaded.core.network.NetworkNode.Visibility; @@ -9,6 +11,7 @@ import li.cil.ocreloaded.minecraft.common.persistence.NBTPersistenceHolder; import li.cil.ocreloaded.minecraft.common.registry.CommonRegistered; import net.minecraft.core.BlockPos; +import net.minecraft.core.HolderLookup; import net.minecraft.nbt.CompoundTag; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.entity.BlockEntity; @@ -36,29 +39,28 @@ public void setRemoved() { } @Override - public void load(CompoundTag compoundTag) { - super.load(compoundTag); + public void loadAdditional(@Nonnull CompoundTag compoundTag, @Nonnull HolderLookup.Provider registries) { + super.loadAdditional(compoundTag, registries); networkNode.load(new NBTPersistenceHolder(compoundTag, SettingsConstants.namespace)); } @Override - public void saveAdditional(CompoundTag compoundTag) { - super.saveAdditional(compoundTag); + public void saveAdditional(@Nonnull CompoundTag compoundTag, @Nonnull HolderLookup.Provider registries) { + super.saveAdditional(compoundTag, registries); networkNode.save(new NBTPersistenceHolder(compoundTag, SettingsConstants.namespace)); } // TODO: Find a simpler way to do this than needing both setLevel and a ticker @Override - public void setLevel(Level level) { + public void setLevel(@Nonnull Level level) { super.setLevel(level); - if (level == null) return; - if (!level.isClientSide()) { level.addBlockEntityTicker(new BlockEntityTicker(this)); } } @Override + @SuppressWarnings("null") // Linting being not smart public void tick() { if (level == null || level.isClientSide) return; if (!initialized) { diff --git a/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/entity/ScreenBlockEntity.java b/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/entity/ScreenBlockEntity.java index 8308551..4781679 100644 --- a/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/entity/ScreenBlockEntity.java +++ b/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/entity/ScreenBlockEntity.java @@ -2,6 +2,9 @@ import java.util.List; +import javax.annotation.Nonnull; +import commonnetwork.api.Dispatcher; +import li.cil.ocreloaded.minecraft.common.network.packets.ScreenPacket; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -16,13 +19,12 @@ import li.cil.ocreloaded.minecraft.common.component.ComponentNetworkNode; import li.cil.ocreloaded.minecraft.common.component.ComponentNetworkUtil; import li.cil.ocreloaded.minecraft.common.item.GraphicsCardItem; -import li.cil.ocreloaded.minecraft.common.network.NetworkUtil; -import li.cil.ocreloaded.minecraft.common.network.screen.NetworkedTextModeBufferProxy; -import li.cil.ocreloaded.minecraft.common.network.screen.ScreenNetworkInputMessages; -import li.cil.ocreloaded.minecraft.common.network.screen.ScreenNetworkMessage; +import li.cil.ocreloaded.minecraft.common.network.packets.screen.NetworkedTextModeBufferProxy; +import li.cil.ocreloaded.minecraft.common.network.packets.screen.ScreenNetworkInputMessages; import li.cil.ocreloaded.minecraft.common.persistence.NBTPersistenceHolder; import li.cil.ocreloaded.minecraft.common.registry.CommonRegistered; import net.minecraft.core.BlockPos; +import net.minecraft.core.HolderLookup; import net.minecraft.nbt.CompoundTag; import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerPlayer; @@ -60,9 +62,8 @@ public void setRemoved() { } @Override - public void setLevel(Level level) { + public void setLevel(@Nonnull Level level) { super.setLevel(level); - if (level == null) return; ScreenBlock block = (ScreenBlock) getBlockState().getBlock(); int[] maxResolution = GraphicsCardItem.TIER_RESOLUTIONS[block.getTier() - 1]; @@ -77,8 +78,9 @@ public void setLevel(Level level) { } @Override - public void load(CompoundTag compoundTag) { - super.load(compoundTag); + @SuppressWarnings("null") // Linting being not smart + public void loadAdditional(@Nonnull CompoundTag compoundTag, @Nonnull HolderLookup.Provider registries) { + super.loadAdditional(compoundTag, registries); networkNode.load(new NBTPersistenceHolder(compoundTag, SettingsConstants.namespace)); if (this.level == null || level.isClientSide) return; @@ -86,12 +88,13 @@ public void load(CompoundTag compoundTag) { } @Override - public void saveAdditional(CompoundTag compoundTag) { - super.saveAdditional(compoundTag); + public void saveAdditional(@Nonnull CompoundTag compoundTag, @Nonnull HolderLookup.Provider registries) { + super.saveAdditional(compoundTag, registries); networkNode.save(new NBTPersistenceHolder(compoundTag, SettingsConstants.namespace)); } @Override + @SuppressWarnings("null") // Linting being not smart public void tick() { if (level == null || level.isClientSide()) return; if (!initialized) { @@ -107,10 +110,7 @@ public void tick() { NetworkedTextModeBufferProxy proxy = (NetworkedTextModeBufferProxy) screenBuffer; if (!proxy.hasChanges()) return; ByteBuf changeBuffer = proxy.getBuffer(); - NetworkUtil.getInstance().messageManyClients( - new ScreenNetworkMessage(worldPosition, changeBuffer, ScreenNetworkMessage.TEXT_MODE_BUFFER_CHANNEL), - chunkTrackingPlayers - ); + Dispatcher.sendToClients(new ScreenPacket(worldPosition, ScreenPacket.TEXT_MODE_BUFFER_CHANNEL, changeBuffer.array()), chunkTrackingPlayers); } public void onKeyPressed(int charCode, int keyCode, Player player) { @@ -151,5 +151,4 @@ public void onMouseInput(int type, int button, double x, double y, Player player public TextModeBuffer getScreenBuffer() { return screenBuffer; } - } diff --git a/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/integration/vanilla/VanillaRecipes.java b/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/integration/vanilla/VanillaRecipes.java index a71805d..93c4809 100644 --- a/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/integration/vanilla/VanillaRecipes.java +++ b/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/integration/vanilla/VanillaRecipes.java @@ -23,6 +23,8 @@ import net.minecraft.world.item.crafting.SmeltingRecipe; public final class VanillaRecipes { + + // TODO: COMEBACK private VanillaRecipes() {} @@ -64,10 +66,10 @@ private static void addShapedRecipe(RecipeRegistrationDelegate registrationDeleg ShapedRecipePattern shapedRecipePattern = ShapedRecipePattern.of(input, shape); ShapedRecipe shapedRecipe = new ShapedRecipe("", CraftingBookCategory.EQUIPMENT, shapedRecipePattern, itemStack); - ResourceLocation resourceLocation = itemStack.getItem().arch$registryName(); + //ResourceLocation resourceLocation = itemStack.getItem().arch$registryName(); // TODO: What is the correct group - registrationDelegate.registerRecipe(resourceLocation, shapedRecipe, RecipeType.CRAFTING); + //registrationDelegate.registerRecipe(resourceLocation, shapedRecipe, RecipeType.CRAFTING); } @@ -78,8 +80,8 @@ private static void addShapelessRecipe(RecipeRegistrationDelegate registrationDe itemStack.setCount(Recipes.tryGetCount(recipe)); ShapelessRecipe shapelessRecipe = new ShapelessRecipe("", CraftingBookCategory.EQUIPMENT, itemStack, ingredients); - ResourceLocation resourceLocation = itemStack.getItem().arch$registryName(); - registrationDelegate.registerRecipe(resourceLocation, shapelessRecipe, RecipeType.CRAFTING); + //ResourceLocation resourceLocation = itemStack.getItem().arch$registryName(); + //registrationDelegate.registerRecipe(resourceLocation, shapelessRecipe, RecipeType.CRAFTING); } private static void addFurnaceRecipe(RecipeRegistrationDelegate registrationDelegate, ItemStack itemStack, Config recipe) { @@ -87,8 +89,8 @@ private static void addFurnaceRecipe(RecipeRegistrationDelegate registrationDele itemStack.setCount(Recipes.tryGetCount(recipe)); SmeltingRecipe smeltingRecipe = new SmeltingRecipe("", CookingBookCategory.MISC, input, itemStack, 0.0f, 200); - ResourceLocation resourceLocation = itemStack.getItem().arch$registryName(); - registrationDelegate.registerRecipe(resourceLocation, smeltingRecipe, RecipeType.SMELTING); + //ResourceLocation resourceLocation = itemStack.getItem().arch$registryName(); + //registrationDelegate.registerRecipe(resourceLocation, smeltingRecipe, RecipeType.SMELTING); } } diff --git a/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/menu/CaseMenu.java b/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/menu/CaseMenu.java index bf7abdb..fe37ec3 100644 --- a/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/menu/CaseMenu.java +++ b/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/menu/CaseMenu.java @@ -1,18 +1,11 @@ package li.cil.ocreloaded.minecraft.common.menu; -import java.util.List; - +import commonnetwork.api.Dispatcher; import li.cil.ocreloaded.minecraft.common.assets.SharedTextures; import li.cil.ocreloaded.minecraft.common.container.BasicContainer; import li.cil.ocreloaded.minecraft.common.entity.CaseBlockEntity; -import li.cil.ocreloaded.minecraft.common.item.CPUItem; -import li.cil.ocreloaded.minecraft.common.item.GraphicsCardItem; -import li.cil.ocreloaded.minecraft.common.item.EepromItem; -import li.cil.ocreloaded.minecraft.common.item.FloppyDiskItem; -import li.cil.ocreloaded.minecraft.common.item.HardDiskItem; -import li.cil.ocreloaded.minecraft.common.item.MemoryItem; -import li.cil.ocreloaded.minecraft.common.network.NetworkUtil; -import li.cil.ocreloaded.minecraft.common.network.power.PowerNetworkMessage; +import li.cil.ocreloaded.minecraft.common.item.*; +import li.cil.ocreloaded.minecraft.common.network.packets.PowerPacket; import li.cil.ocreloaded.minecraft.common.registry.CommonRegistered; import net.minecraft.core.BlockPos; import net.minecraft.network.FriendlyByteBuf; @@ -26,6 +19,10 @@ import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; +import java.util.List; + +import javax.annotation.Nonnull; + public class CaseMenu extends AbstractContainerMenu { private static final List> COMPONENT_SLOTS = List.of( @@ -94,12 +91,12 @@ public CaseMenu(int id, Inventory inventory, FriendlyByteBuf data) { } @Override - public boolean stillValid(Player player) { + public boolean stillValid(@Nonnull Player player) { return inventory.stillValid(player); } @Override - public ItemStack quickMoveStack(Player player, int index) { + public ItemStack quickMoveStack(@Nonnull Player player, int index) { return ComponentQuickMove.quickMoveStack(slots, player, index); } @@ -119,7 +116,7 @@ public DataSlot getPower() { public void sendServerPowerState() { BlockPos targetBlockPos = blockEntity.getBlockPos(); - NetworkUtil.getInstance().messageServer(new PowerNetworkMessage(targetBlockPos, power.get() == 1)); + Dispatcher.sendToServer(new PowerPacket(targetBlockPos, power.get() == 1)); } private void addContainerSlots() { diff --git a/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/menu/ComponentSlot.java b/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/menu/ComponentSlot.java index d6fb318..62f548a 100644 --- a/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/menu/ComponentSlot.java +++ b/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/menu/ComponentSlot.java @@ -1,5 +1,7 @@ package li.cil.ocreloaded.minecraft.common.menu; +import javax.annotation.Nonnull; + import li.cil.ocreloaded.minecraft.common.item.TieredItem; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.Container; @@ -25,7 +27,7 @@ public ComponentSlot(Container container, int index, int x, int y, Class 1; + return blockEntity.getBlockState().getBlock() instanceof ScreenBlock screenBlock && screenBlock.getTier() > 1; } - public void onKeyboardClipboard(String clipboard) { - NetworkUtil.getInstance().messageServer( - ScreenNetworkInputMessages.createClipboardPasteMessage(blockEntity.getBlockPos(), clipboard)); + Dispatcher.sendToServer(ScreenNetworkInputMessages.createClipboardPasteMessage(blockEntity.getBlockPos(), clipboard)); } - } diff --git a/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/menu/provider/ScreenMenuProvider.java b/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/menu/provider/ScreenMenuProvider.java index 4fff54c..8ecdf32 100644 --- a/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/menu/provider/ScreenMenuProvider.java +++ b/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/menu/provider/ScreenMenuProvider.java @@ -1,5 +1,7 @@ package li.cil.ocreloaded.minecraft.common.menu.provider; +import javax.annotation.Nonnull; + import io.netty.buffer.Unpooled; import li.cil.ocreloaded.minecraft.common.menu.ScreenMenu; import net.minecraft.core.BlockPos; @@ -28,7 +30,7 @@ public Component getDisplayName() { } @Override - public AbstractContainerMenu createMenu(int windowId, Inventory playerInventory, Player player) { + public AbstractContainerMenu createMenu(int windowId, @Nonnull Inventory playerInventory, @Nonnull Player player) { FriendlyByteBuf data = new FriendlyByteBuf(Unpooled.buffer()); writeData(data); return new ScreenMenu(windowId, playerInventory, data); diff --git a/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/network/ClientNetworkMessageContext.java b/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/network/ClientNetworkMessageContext.java deleted file mode 100644 index ba51b45..0000000 --- a/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/network/ClientNetworkMessageContext.java +++ /dev/null @@ -1,7 +0,0 @@ -package li.cil.ocreloaded.minecraft.common.network; - -import net.minecraft.world.entity.player.Player; - -public record ClientNetworkMessageContext(Player player) { - -} diff --git a/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/network/NetworkHandler.java b/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/network/NetworkHandler.java deleted file mode 100644 index 7b2daaf..0000000 --- a/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/network/NetworkHandler.java +++ /dev/null @@ -1,19 +0,0 @@ -package li.cil.ocreloaded.minecraft.common.network; - -import net.minecraft.network.FriendlyByteBuf; - -public interface NetworkHandler { - - String getType(); - - Class getMessageType(); - - void encode(FriendlyByteBuf buffer, T message); - - T decode(FriendlyByteBuf buffer); - - default void handleClient(T message, ClientNetworkMessageContext context) {} - - default void handleServer(T message, ServerNetworkMessageContext context) {} - -} diff --git a/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/network/NetworkInterface.java b/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/network/NetworkInterface.java deleted file mode 100644 index 8329831..0000000 --- a/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/network/NetworkInterface.java +++ /dev/null @@ -1,13 +0,0 @@ -package li.cil.ocreloaded.minecraft.common.network; - -import net.minecraft.world.entity.player.Player; - -public interface NetworkInterface { - - void registerNetworkHandler(NetworkHandler handler); - - void messageClient(NetworkMessage message, Player recipient); - - void messageServer(NetworkMessage message); - -} diff --git a/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/network/NetworkMessage.java b/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/network/NetworkMessage.java deleted file mode 100644 index 5396872..0000000 --- a/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/network/NetworkMessage.java +++ /dev/null @@ -1,7 +0,0 @@ -package li.cil.ocreloaded.minecraft.common.network; - -public interface NetworkMessage { - - String getType(); - -} diff --git a/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/network/NetworkUtil.java b/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/network/NetworkUtil.java index 7f1de62..8ccaaa3 100644 --- a/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/network/NetworkUtil.java +++ b/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/network/NetworkUtil.java @@ -1,93 +1,19 @@ package li.cil.ocreloaded.minecraft.common.network; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import dev.architectury.networking.NetworkManager; -import io.netty.buffer.Unpooled; -import li.cil.ocreloaded.minecraft.common.OCReloadedCommon; -import net.minecraft.network.FriendlyByteBuf; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.server.level.ServerPlayer; -import net.minecraft.world.entity.player.Player; +import commonnetwork.api.Network; +import li.cil.ocreloaded.minecraft.common.network.packets.PowerPacket; +import li.cil.ocreloaded.minecraft.common.network.packets.ScreenPacket; +import li.cil.ocreloaded.minecraft.common.network.packets.SoundPacket; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; public class NetworkUtil { - - public static final NetworkUtil INSTANCE = new NetworkUtil(); - - private final Map> HANDLERS = new HashMap<>(); - + public static final Logger LOGGER = LoggerFactory.getLogger(NetworkUtil.class); private NetworkUtil() {} - public void messageClient(NetworkMessage message, Player player) { - if (player instanceof ServerPlayer serverPlayer) { - ResourceLocation location = new ResourceLocation(OCReloadedCommon.MOD_ID, message.getType()); - FriendlyByteBuf buffer = encodeMessage(message); - NetworkManager.sendToPlayer(serverPlayer, location, buffer); - } else { - throw new IllegalArgumentException("Player is not a server player."); - } - } - - public void messageServer(NetworkMessage message) { - ResourceLocation location = new ResourceLocation(OCReloadedCommon.MOD_ID, message.getType()); - FriendlyByteBuf buffer = encodeMessage(message); - NetworkManager.sendToServer(location, buffer); - } - - public void messageManyClients(NetworkMessage message, List players) { - ResourceLocation location = new ResourceLocation(OCReloadedCommon.MOD_ID, message.getType()); - FriendlyByteBuf buffer = encodeMessage(message); - NetworkManager.sendToPlayers(players, location, buffer); - } - - @SuppressWarnings("unchecked") - public void registerHandler(String type, NetworkHandler handler) { - HANDLERS.put(type, handler); - - ResourceLocation location = new ResourceLocation(OCReloadedCommon.MOD_ID, handler.getType()); - NetworkManager.registerReceiver(NetworkManager.Side.S2C, location, (buffer, context) -> { - context.queue(() -> { - NetworkHandler messageHandler = (NetworkHandler) HANDLERS.get(location.toString()); - if (messageHandler == null) { - throw new IllegalArgumentException("No handler for message type: " + location); - } - - NetworkMessage message = messageHandler.decode(buffer); - messageHandler.handleClient(message, new ClientNetworkMessageContext(context.getPlayer())); - }); - }); - - NetworkManager.registerReceiver(NetworkManager.Side.C2S, location, (buffer, context) -> { - context.queue(() -> { - NetworkHandler messageHandler = (NetworkHandler) HANDLERS.get(location.toString()); - if (messageHandler == null) { - throw new IllegalArgumentException("No handler for message type: " + location); - } - - NetworkMessage message = messageHandler.decode(buffer); - messageHandler.handleServer(message, new ServerNetworkMessageContext(context.getPlayer())); - }); - }); - } - - @SuppressWarnings("unchecked") - private FriendlyByteBuf encodeMessage(NetworkMessage message) { - ResourceLocation location = new ResourceLocation(OCReloadedCommon.MOD_ID, message.getType()); - NetworkHandler handler = (NetworkHandler) HANDLERS.get(location.toString()); - if (handler == null) { - throw new IllegalArgumentException("No handler for message type: " + location); - } - - FriendlyByteBuf buffer = new FriendlyByteBuf(Unpooled.buffer()); - handler.encode(buffer, message); - - return buffer; + public static void initialize() { + Network.registerPacket(PowerPacket.type(), PowerPacket.class, PowerPacket.STREAM_CODEC, PowerPacket::handle); + Network.registerPacket(ScreenPacket.type(), ScreenPacket.class, ScreenPacket.STREAM_CODEC, ScreenPacket::handle); + Network.registerPacket(SoundPacket.type(), SoundPacket.class, SoundPacket.STREAM_CODEC, SoundPacket::handle); } - - public static NetworkUtil getInstance() { - return INSTANCE; - } - } diff --git a/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/network/ServerNetworkMessageContext.java b/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/network/ServerNetworkMessageContext.java deleted file mode 100644 index d97ce98..0000000 --- a/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/network/ServerNetworkMessageContext.java +++ /dev/null @@ -1,7 +0,0 @@ -package li.cil.ocreloaded.minecraft.common.network; - -import net.minecraft.world.entity.player.Player; - -public record ServerNetworkMessageContext(Player sender) { - -} diff --git a/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/network/packets/PowerPacket.java b/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/network/packets/PowerPacket.java new file mode 100644 index 0000000..7398829 --- /dev/null +++ b/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/network/packets/PowerPacket.java @@ -0,0 +1,64 @@ +package li.cil.ocreloaded.minecraft.common.network.packets; + +import commonnetwork.api.Dispatcher; +import commonnetwork.networking.data.PacketContext; +import commonnetwork.networking.data.Side; +import li.cil.ocreloaded.minecraft.common.OCReloadedCommon; +import li.cil.ocreloaded.minecraft.common.WorldUtil; +import li.cil.ocreloaded.minecraft.common.entity.CaseBlockEntity; +import net.minecraft.client.Minecraft; +import net.minecraft.core.BlockPos; +import net.minecraft.network.RegistryFriendlyByteBuf; +import net.minecraft.network.codec.ByteBufCodecs; +import net.minecraft.network.codec.StreamCodec; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.level.Level; + +public record PowerPacket(BlockPos pos, boolean powerState) { + public static final ResourceLocation CHANNEL = ResourceLocation.fromNamespaceAndPath(OCReloadedCommon.MOD_ID, "power_packet"); + public static final StreamCodec STREAM_CODEC = StreamCodec.composite( + BlockPos.STREAM_CODEC, + PowerPacket::pos, + ByteBufCodecs.BOOL, + PowerPacket::powerState, + PowerPacket::new); + + public static CustomPacketPayload.Type type() { + return new CustomPacketPayload.Type<>(CHANNEL); + } + + public static void handle(PacketContext ctx) { + if (ctx.side().equals(Side.CLIENT)) + handleClient(ctx); + else + handleServer(ctx); + } + + private static void handleClient(PacketContext ctx) { + PowerPacket packet = ctx.message(); + + BlockPos position = packet.pos; + Level level = Minecraft.getInstance().player.level(); + + if (!level.isLoaded(position)) return; + if (level.getBlockEntity(position) instanceof CaseBlockEntity entity) entity.setPowered(packet.powerState); + } + + private static void handleServer(PacketContext ctx) { + PowerPacket packet = ctx.message(); + + Player player = ctx.sender(); + Level level = player.level(); + + if (!level.isLoaded(packet.pos)) return; + if (!WorldUtil.isPlayerCloseEnough(player, packet.pos)) return; + + if (level.getBlockEntity(packet.pos) instanceof CaseBlockEntity entity) { + entity.setPowered(packet.powerState); + Dispatcher.sendToClientsInLevel(packet, (ServerLevel) level); + } + } +} diff --git a/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/network/packets/ScreenPacket.java b/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/network/packets/ScreenPacket.java new file mode 100644 index 0000000..e6d9efc --- /dev/null +++ b/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/network/packets/ScreenPacket.java @@ -0,0 +1,62 @@ +package li.cil.ocreloaded.minecraft.common.network.packets; + +import commonnetwork.networking.data.PacketContext; +import commonnetwork.networking.data.Side; +import li.cil.ocreloaded.core.graphics.TextModeBuffer; +import li.cil.ocreloaded.minecraft.common.OCReloadedCommon; +import li.cil.ocreloaded.minecraft.common.entity.ScreenBlockEntity; +import li.cil.ocreloaded.minecraft.common.network.NetworkUtil; +import li.cil.ocreloaded.minecraft.common.network.packets.screen.NetworkedTextModeBufferProxy; +import li.cil.ocreloaded.minecraft.common.network.packets.screen.ScreenNetworkInputMessages; +import net.minecraft.client.Minecraft; +import net.minecraft.core.BlockPos; +import net.minecraft.network.RegistryFriendlyByteBuf; +import net.minecraft.network.codec.ByteBufCodecs; +import net.minecraft.network.codec.StreamCodec; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.level.Level; + +public record ScreenPacket(BlockPos pos, int channel, byte[] deltaBuffer) { + public static final ResourceLocation CHANNEL = ResourceLocation.fromNamespaceAndPath(OCReloadedCommon.MOD_ID, "screen_packet"); + public static final StreamCodec STREAM_CODEC = StreamCodec.composite(BlockPos.STREAM_CODEC, ScreenPacket::pos, ByteBufCodecs.INT, ScreenPacket::channel, ByteBufCodecs.BYTE_ARRAY, ScreenPacket::deltaBuffer, ScreenPacket::new); + + public static final int TEXT_MODE_BUFFER_CHANNEL = 0; + public static final int INPUT_CHANNEL = 1; + + public static CustomPacketPayload.Type type() { + return new CustomPacketPayload.Type<>(CHANNEL); + } + + public static void handle(PacketContext ctx) { + ScreenPacket packet = ctx.message(); + + Player player; + if (ctx.side().equals(Side.CLIENT)) player = Minecraft.getInstance().player; + else player = ctx.sender(); + + Level level = player.level(); + + if (!level.isLoaded(packet.pos)) return; + if (!(level.getBlockEntity(packet.pos) instanceof ScreenBlockEntity entity)) return; + + if (ctx.side().equals(Side.CLIENT)) { + if (packet.channel == TEXT_MODE_BUFFER_CHANNEL) + writeScreenChanges(entity.getScreenBuffer(), packet.deltaBuffer); + else nagAboutUnknownChannel(packet.channel); + } else { + if (packet.channel == INPUT_CHANNEL) + ScreenNetworkInputMessages.handleInput(entity, packet.deltaBuffer, player); + else nagAboutUnknownChannel(packet.channel); + } + } + + private static void nagAboutUnknownChannel(int channel) { + NetworkUtil.LOGGER.warn("Received unknown channel: {}", channel); + } + + private static void writeScreenChanges(TextModeBuffer screenBuffer, byte[] changeBuffer) { + NetworkedTextModeBufferProxy.writeTextModeBuffer(screenBuffer, changeBuffer); + } +} diff --git a/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/network/packets/SoundPacket.java b/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/network/packets/SoundPacket.java new file mode 100644 index 0000000..766018c --- /dev/null +++ b/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/network/packets/SoundPacket.java @@ -0,0 +1,72 @@ +package li.cil.ocreloaded.minecraft.common.network.packets; + +import commonnetwork.networking.data.PacketContext; +import commonnetwork.networking.data.Side; +import io.netty.buffer.ByteBuf; +import io.netty.buffer.Unpooled; +import li.cil.ocreloaded.minecraft.common.OCReloadedCommon; +import li.cil.ocreloaded.minecraft.common.network.NetworkUtil; +import li.cil.ocreloaded.minecraft.common.registry.ClientBridge; +import li.cil.ocreloaded.minecraft.common.sound.SoundPlayerProvider; +import net.minecraft.client.Minecraft; +import net.minecraft.core.BlockPos; +import net.minecraft.network.RegistryFriendlyByteBuf; +import net.minecraft.network.codec.ByteBufCodecs; +import net.minecraft.network.codec.StreamCodec; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.level.Level; + +import java.nio.ByteBuffer; + +public record SoundPacket(BlockPos pos, int channel, byte[] deltaBuffer) { + public static final ResourceLocation CHANNEL = ResourceLocation.fromNamespaceAndPath(OCReloadedCommon.MOD_ID, "sound_packet"); + public static final StreamCodec STREAM_CODEC = StreamCodec.composite( + BlockPos.STREAM_CODEC, + SoundPacket::pos, + ByteBufCodecs.INT, + SoundPacket::channel, + ByteBufCodecs.BYTE_ARRAY, + SoundPacket::deltaBuffer, + SoundPacket::new); + public static final int BEEP_CHANNEL = 0; + + public static CustomPacketPayload.Type type() { + return new CustomPacketPayload.Type<>(CHANNEL); + } + + public static void handle(PacketContext ctx) { + if (!ctx.side().equals(Side.CLIENT)) + return; + SoundPacket packet = ctx.message(); + + Level level = Minecraft.getInstance().player.level(); + if (!level.isLoaded(packet.pos)) return; + + if (packet.channel != BEEP_CHANNEL) { + NetworkUtil.LOGGER.warn("Received unknown channel: {}", packet.channel); + return; + } + + ByteBuffer buffer = ByteBuffer.wrap(packet.deltaBuffer); + + short frequency = buffer.getShort(); + short duration = buffer.getShort(); + + ClientBridge.getInstance().getClient(SoundPlayerProvider.class).ifPresent(soundPlayerProvider -> soundPlayerProvider.playBeepSound(packet.pos, frequency, duration)); + } + + public static SoundPacket createBeepMessage(BlockPos position, short frequency, short duration) { + ByteBuf buffer = Unpooled.buffer(); + + try { + buffer.writeShort(frequency); + buffer.writeShort(duration); + byte[] deltas = buffer.array().clone(); + + return new SoundPacket(position, BEEP_CHANNEL, deltas); + } finally { + buffer.release(); + } + } +} diff --git a/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/network/screen/NetworkedTextModeBufferProxy.java b/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/network/packets/screen/NetworkedTextModeBufferProxy.java similarity index 98% rename from projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/network/screen/NetworkedTextModeBufferProxy.java rename to projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/network/packets/screen/NetworkedTextModeBufferProxy.java index 736e913..23d05fc 100644 --- a/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/network/screen/NetworkedTextModeBufferProxy.java +++ b/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/network/packets/screen/NetworkedTextModeBufferProxy.java @@ -1,4 +1,4 @@ -package li.cil.ocreloaded.minecraft.common.network.screen; +package li.cil.ocreloaded.minecraft.common.network.packets.screen; import org.slf4j.Logger; @@ -219,7 +219,9 @@ public ByteBuf sync() { return syncBuffer; } - public static void writeTextModeBuffer(TextModeBuffer buffer, ByteBuf byteBuf) { + public static void writeTextModeBuffer(TextModeBuffer buffer, byte[] buf) { + ByteBuf byteBuf = Unpooled.wrappedBuffer(buf); + while (true) { int command = byteBuf.readInt(); if (command == 0) break; @@ -249,6 +251,8 @@ public static void writeTextModeBuffer(TextModeBuffer buffer, ByteBuf byteBuf) { break; } } + + byteBuf.release(); } private static void handleSync(TextModeBuffer buffer, ByteBuf byteBuf) { diff --git a/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/network/packets/screen/ScreenNetworkInputMessages.java b/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/network/packets/screen/ScreenNetworkInputMessages.java new file mode 100644 index 0000000..b9c4c6c --- /dev/null +++ b/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/network/packets/screen/ScreenNetworkInputMessages.java @@ -0,0 +1,112 @@ +package li.cil.ocreloaded.minecraft.common.network.packets.screen; + +import li.cil.ocreloaded.minecraft.common.network.packets.ScreenPacket; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import io.netty.buffer.ByteBuf; +import io.netty.buffer.Unpooled; +import li.cil.ocreloaded.minecraft.common.entity.ScreenBlockEntity; +import net.minecraft.core.BlockPos; +import net.minecraft.world.entity.player.Player; + +import java.nio.charset.StandardCharsets; + +public final class ScreenNetworkInputMessages { + + private static final Logger LOGGER = LoggerFactory.getLogger(ScreenNetworkInputMessages.class); + + private static final int KEY_PRESSED = 1; + private static final int KEY_RELEASED = 2; + + public static final int MOUSE_PRESSED = 3; + public static final int MOUSE_RELEASED = 4; + public static final int MOUSE_DRAGGED = 5; + public static final int MOUSE_SCROLLED = 6; + public static final int CLIPBOARD_PASTE = 7; + + private ScreenNetworkInputMessages() {} + + public static ScreenPacket createKeyPressedMessage(BlockPos blockPos, int charCode, int keyCode) { + ByteBuf buffer = Unpooled.buffer(); + + try { + buffer.writeInt(KEY_PRESSED); + buffer.writeInt(charCode); + buffer.writeInt(keyCode); + + byte[] deltas = buffer.array().clone(); + return new ScreenPacket(blockPos, ScreenPacket.INPUT_CHANNEL, deltas); + } finally { + buffer.release(); + } + } + + public static ScreenPacket createKeyReleasedMessage(BlockPos blockPos, int keyCode) { + ByteBuf buffer = Unpooled.buffer(); + + try { + buffer.writeInt(KEY_RELEASED); + buffer.writeInt(keyCode); + + byte[] deltas = buffer.array().clone(); + return new ScreenPacket(blockPos, ScreenPacket.INPUT_CHANNEL, deltas); + } finally { + buffer.release(); + } + } + + public static ScreenPacket createMouseMessage(int type, BlockPos blockPos, int button, double x, double y) { + ByteBuf buffer = Unpooled.buffer(); + try { + buffer.writeInt(type); + buffer.writeInt(button); + buffer.writeDouble(x); + buffer.writeDouble(y); + byte[] deltas = buffer.array().clone(); + + return new ScreenPacket(blockPos, ScreenPacket.INPUT_CHANNEL, deltas); + } finally { + buffer.release(); + } + } + + public static ScreenPacket createClipboardPasteMessage(BlockPos blockPos, String text) { + ByteBuf buffer = Unpooled.buffer(); + + try { + buffer.writeInt(CLIPBOARD_PASTE); + + byte[] textBytes = text.getBytes(StandardCharsets.UTF_8); + buffer.writeInt(textBytes.length); + buffer.writeBytes(textBytes); + byte[] deltas = buffer.array().clone(); + + return new ScreenPacket(blockPos, ScreenPacket.INPUT_CHANNEL, deltas); + } finally { + buffer.release(); + } + } + + public static void handleInput(ScreenBlockEntity entity, byte[] buf, Player player) { + ByteBuf changeBuffer = Unpooled.wrappedBuffer(buf); + + int type = changeBuffer.readInt(); + switch (type) { + case KEY_PRESSED -> entity.onKeyPressed(changeBuffer.readInt(), changeBuffer.readInt(), player); + case KEY_RELEASED -> entity.onKeyReleased(changeBuffer.readInt(), player); + case MOUSE_PRESSED, MOUSE_RELEASED, MOUSE_DRAGGED, MOUSE_SCROLLED -> + entity.onMouseInput(type, changeBuffer.readInt(), changeBuffer.readDouble(), changeBuffer.readDouble(), player); + case CLIPBOARD_PASTE -> { + int length = changeBuffer.readInt(); + byte[] textBytes = new byte[length]; + changeBuffer.readBytes(textBytes); + String text = new String(textBytes, StandardCharsets.UTF_8); + entity.onClipboardPaste(text, player); + } + default -> LOGGER.warn("Received unknown input type: {}", type); + } + + changeBuffer.release(); + } +} diff --git a/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/network/power/PowerNetworkHandler.java b/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/network/power/PowerNetworkHandler.java deleted file mode 100644 index 114661b..0000000 --- a/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/network/power/PowerNetworkHandler.java +++ /dev/null @@ -1,68 +0,0 @@ -package li.cil.ocreloaded.minecraft.common.network.power; - -import li.cil.ocreloaded.minecraft.common.WorldUtil; -import li.cil.ocreloaded.minecraft.common.entity.CaseBlockEntity; -import li.cil.ocreloaded.minecraft.common.network.ClientNetworkMessageContext; -import li.cil.ocreloaded.minecraft.common.network.NetworkHandler; -import li.cil.ocreloaded.minecraft.common.network.NetworkUtil; -import li.cil.ocreloaded.minecraft.common.network.ServerNetworkMessageContext; -import net.minecraft.core.BlockPos; -import net.minecraft.network.FriendlyByteBuf; -import net.minecraft.world.entity.player.Player; -import net.minecraft.world.level.Level; - -public class PowerNetworkHandler implements NetworkHandler { - - @Override - public String getType() { - return PowerNetworkMessage.TYPE; - } - - @Override - public Class getMessageType() { - return PowerNetworkMessage.class; - } - - @Override - public void encode(FriendlyByteBuf buffer, PowerNetworkMessage message) { - buffer.writeBlockPos(message.position()); - buffer.writeBoolean(message.powerState()); - } - - @Override - public PowerNetworkMessage decode(FriendlyByteBuf buffer) { - return new PowerNetworkMessage(buffer.readBlockPos(), buffer.readBoolean()); - } - - @Override - public void handleClient(PowerNetworkMessage message, ClientNetworkMessageContext context) { - BlockPos position = message.position(); - - if (context.player() == null) return; - Level level = context.player().level(); - if (!level.isLoaded(position)) return; - if (level.getBlockEntity(position) instanceof CaseBlockEntity entity) { - entity.setPowered(message.powerState()); - } - } - - @Override - public void handleServer(PowerNetworkMessage message, ServerNetworkMessageContext context) { - BlockPos position = message.position(); - Player player = context.sender(); - Level level = player.level(); - if (!level.isLoaded(position)) return; - if (!WorldUtil.isPlayerCloseEnough(player, position)) return; - if (level.getBlockEntity(position) instanceof CaseBlockEntity entity) { - entity.setPowered(message.powerState()); - redistributeMessage(message, level); - } - } - - private void redistributeMessage(PowerNetworkMessage message, Level level) { - for (Player otherPlayer : level.players()) { - NetworkUtil.getInstance().messageClient(message, otherPlayer); - } - } - -} diff --git a/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/network/power/PowerNetworkMessage.java b/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/network/power/PowerNetworkMessage.java deleted file mode 100644 index c166b69..0000000 --- a/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/network/power/PowerNetworkMessage.java +++ /dev/null @@ -1,31 +0,0 @@ -package li.cil.ocreloaded.minecraft.common.network.power; - -import li.cil.ocreloaded.minecraft.common.network.NetworkMessage; -import net.minecraft.core.BlockPos; - -public class PowerNetworkMessage implements NetworkMessage { - - public static final String TYPE = "power"; - - private final BlockPos position; - private final boolean powerState; - - public PowerNetworkMessage(BlockPos position, boolean powerState) { - this.position = position; - this.powerState = powerState; - } - - @Override - public String getType() { - return TYPE; - } - - public BlockPos position() { - return position; - } - - public boolean powerState() { - return powerState; - } - -} diff --git a/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/network/screen/ScreenNetworkHandler.java b/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/network/screen/ScreenNetworkHandler.java deleted file mode 100644 index 49b0382..0000000 --- a/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/network/screen/ScreenNetworkHandler.java +++ /dev/null @@ -1,80 +0,0 @@ -package li.cil.ocreloaded.minecraft.common.network.screen; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import io.netty.buffer.ByteBuf; -import li.cil.ocreloaded.core.graphics.TextModeBuffer; -import li.cil.ocreloaded.minecraft.common.entity.ScreenBlockEntity; -import li.cil.ocreloaded.minecraft.common.network.ClientNetworkMessageContext; -import li.cil.ocreloaded.minecraft.common.network.NetworkHandler; -import li.cil.ocreloaded.minecraft.common.network.ServerNetworkMessageContext; -import net.minecraft.core.BlockPos; -import net.minecraft.network.FriendlyByteBuf; -import net.minecraft.world.level.Level; - -public class ScreenNetworkHandler implements NetworkHandler { - - private static final Logger LOGGER = LoggerFactory.getLogger(ScreenNetworkHandler.class); - - @Override - public String getType() { - return ScreenNetworkMessage.TYPE; - } - - @Override - public Class getMessageType() { - return ScreenNetworkMessage.class; - } - - @Override - public void encode(FriendlyByteBuf buffer, ScreenNetworkMessage message) { - buffer.writeBlockPos(message.position()); - buffer.writeInt(message.getChannel()); - buffer.writeBytes(message.getChangeBuffer()); - } - - @Override - public ScreenNetworkMessage decode(FriendlyByteBuf buffer) { - BlockPos blockPos = buffer.readBlockPos(); - int channel = buffer.readInt(); - return new ScreenNetworkMessage(blockPos, buffer, channel); - } - - @Override - public void handleClient(ScreenNetworkMessage message, ClientNetworkMessageContext context) { - BlockPos position = message.position(); - - if (context.player() == null) return; - Level level = context.player().level(); - if (!level.isLoaded(position)) return; - if (level.getBlockEntity(position) instanceof ScreenBlockEntity entity) { - if (message.getChannel() == ScreenNetworkMessage.TEXT_MODE_BUFFER_CHANNEL) { - writeScreenChanges(entity.getScreenBuffer(), message.getChangeBuffer()); - } else { - LOGGER.warn("Received unknown channel: {}", message.getChannel()); - } - } - } - - @Override - public void handleServer(ScreenNetworkMessage message, ServerNetworkMessageContext context) { - BlockPos position = message.position(); - - if (context.sender() == null) return; - Level level = context.sender().level(); - if (!level.isLoaded(position)) return; - if (level.getBlockEntity(position) instanceof ScreenBlockEntity entity) { - if (message.getChannel() == ScreenNetworkMessage.INPUT_CHANNEL) { - ScreenNetworkInputMessages.handleInput(entity, message.getChangeBuffer(), context.sender()); - } else { - LOGGER.warn("Received unknown channel: {}", message.getChannel()); - } - } - } - - private void writeScreenChanges(TextModeBuffer screenBuffer, ByteBuf changeBuffer) { - NetworkedTextModeBufferProxy.writeTextModeBuffer(screenBuffer, changeBuffer); - } - -} diff --git a/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/network/screen/ScreenNetworkInputMessages.java b/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/network/screen/ScreenNetworkInputMessages.java deleted file mode 100644 index dad7488..0000000 --- a/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/network/screen/ScreenNetworkInputMessages.java +++ /dev/null @@ -1,81 +0,0 @@ -package li.cil.ocreloaded.minecraft.common.network.screen; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import io.netty.buffer.ByteBuf; -import io.netty.buffer.Unpooled; -import li.cil.ocreloaded.minecraft.common.entity.ScreenBlockEntity; -import net.minecraft.core.BlockPos; -import net.minecraft.world.entity.player.Player; - -import java.nio.charset.StandardCharsets; - -public final class ScreenNetworkInputMessages { - - private static final Logger LOGGER = LoggerFactory.getLogger(ScreenNetworkInputMessages.class); - - private static final int KEY_PRESSED = 1; - private static final int KEY_RELEASED = 2; - - public static final int MOUSE_PRESSED = 3; - public static final int MOUSE_RELEASED = 4; - public static final int MOUSE_DRAGGED = 5; - public static final int MOUSE_SCROLLED = 6; - public static final int CLIPBOARD_PASTE = 7; - - private ScreenNetworkInputMessages() {} - - public static ScreenNetworkMessage createKeyPressedMessage(BlockPos blockPos, int charCode, int keyCode) { - ByteBuf buffer = Unpooled.buffer(); - buffer.writeInt(KEY_PRESSED); - buffer.writeInt(charCode); - buffer.writeInt(keyCode); - return new ScreenNetworkMessage(blockPos, buffer, ScreenNetworkMessage.INPUT_CHANNEL); - } - - public static ScreenNetworkMessage createKeyReleasedMessage(BlockPos blockPos, int keyCode) { - ByteBuf buffer = Unpooled.buffer(); - buffer.writeInt(KEY_RELEASED); - buffer.writeInt(keyCode); - return new ScreenNetworkMessage(blockPos, buffer, ScreenNetworkMessage.INPUT_CHANNEL); - } - - public static ScreenNetworkMessage createMouseMessage(int type, BlockPos blockPos, int button, double x, double y) { - ByteBuf buffer = Unpooled.buffer(); - buffer.writeInt(type); - buffer.writeInt(button); - buffer.writeDouble(x); - buffer.writeDouble(y); - return new ScreenNetworkMessage(blockPos, buffer, ScreenNetworkMessage.INPUT_CHANNEL); - } - - public static ScreenNetworkMessage createClipboardPasteMessage(BlockPos blockPos, String text) { - ByteBuf buffer = Unpooled.buffer(); - buffer.writeInt(CLIPBOARD_PASTE); - - byte[] textBytes = text.getBytes(StandardCharsets.UTF_8); - buffer.writeInt(textBytes.length); - buffer.writeBytes(textBytes); - - return new ScreenNetworkMessage(blockPos, buffer, ScreenNetworkMessage.INPUT_CHANNEL); - } - - public static void handleInput(ScreenBlockEntity entity, ByteBuf changeBuffer, Player player) { - int type = changeBuffer.readInt(); - switch (type) { - case KEY_PRESSED -> entity.onKeyPressed(changeBuffer.readInt(), changeBuffer.readInt(), player); - case KEY_RELEASED -> entity.onKeyReleased(changeBuffer.readInt(), player); - case MOUSE_PRESSED, MOUSE_RELEASED, MOUSE_DRAGGED, MOUSE_SCROLLED -> - entity.onMouseInput(type, changeBuffer.readInt(), changeBuffer.readDouble(), changeBuffer.readDouble(), player); - case CLIPBOARD_PASTE -> { - int length = changeBuffer.readInt(); - byte[] textBytes = new byte[length]; - changeBuffer.readBytes(textBytes); - String text = new String(textBytes, StandardCharsets.UTF_8); - entity.onClipboardPaste(text, player); - } - default -> LOGGER.warn("Received unknown input type: {}", type); - } - } -} diff --git a/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/network/screen/ScreenNetworkMessage.java b/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/network/screen/ScreenNetworkMessage.java deleted file mode 100644 index 404d687..0000000 --- a/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/network/screen/ScreenNetworkMessage.java +++ /dev/null @@ -1,41 +0,0 @@ -package li.cil.ocreloaded.minecraft.common.network.screen; - -import io.netty.buffer.ByteBuf; -import li.cil.ocreloaded.minecraft.common.network.NetworkMessage; -import net.minecraft.core.BlockPos; - -public class ScreenNetworkMessage implements NetworkMessage { - - public static final String TYPE = "screen"; - - public static final int TEXT_MODE_BUFFER_CHANNEL = 0; - public static final int INPUT_CHANNEL = 1; - - private final BlockPos position; - private final ByteBuf changeBuffer; - private final int channel; - - public ScreenNetworkMessage(BlockPos blockPos, ByteBuf changeBuffer, int channel) { - this.position = blockPos; - this.changeBuffer = changeBuffer; - this.channel = channel; - } - - @Override - public String getType() { - return TYPE; - } - - public BlockPos position() { - return position; - } - - public ByteBuf getChangeBuffer() { - return changeBuffer; - } - - public int getChannel() { - return this.channel; - } - -} diff --git a/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/network/sound/SoundNetworkHandler.java b/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/network/sound/SoundNetworkHandler.java deleted file mode 100644 index 63c86f8..0000000 --- a/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/network/sound/SoundNetworkHandler.java +++ /dev/null @@ -1,61 +0,0 @@ -package li.cil.ocreloaded.minecraft.common.network.sound; - -import java.nio.ByteBuffer; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import li.cil.ocreloaded.minecraft.common.network.ClientNetworkMessageContext; -import li.cil.ocreloaded.minecraft.common.network.NetworkHandler; -import li.cil.ocreloaded.minecraft.common.registry.ClientBridge; -import li.cil.ocreloaded.minecraft.common.sound.SoundPlayerProvider; -import net.minecraft.core.BlockPos; -import net.minecraft.network.FriendlyByteBuf; -import net.minecraft.world.level.Level; - -public class SoundNetworkHandler implements NetworkHandler { - - private static final Logger LOGGER = LoggerFactory.getLogger(SoundNetworkHandler.class); - - @Override - public String getType() { - return SoundNetworkMessage.TYPE; - } - - @Override - public Class getMessageType() { - return SoundNetworkMessage.class; - } - - @Override - public void encode(FriendlyByteBuf buffer, SoundNetworkMessage message) { - buffer.writeBlockPos(message.position()); - buffer.writeInt(message.getChannel()); - buffer.writeBytes(message.getChangeBuffer()); - } - - @Override - public SoundNetworkMessage decode(FriendlyByteBuf buffer) { - return new SoundNetworkMessage(buffer.readBlockPos(), buffer, buffer.readInt()); - } - - @Override - public void handleClient(SoundNetworkMessage message, ClientNetworkMessageContext context) { - BlockPos position = message.position(); - - if (context.player() == null) return; - Level level = context.player().level(); - if (!level.isLoaded(position)) return; - if (message.getChannel() != SoundNetworkMessage.BEEP_CHANNEL) { - LOGGER.warn("Received unknown channel: {}", message.getChannel()); - return; - } - - ByteBuffer buffer = message.getChangeBuffer().nioBuffer(); - short frequency = buffer.getShort(); - short duration = buffer.getShort(); - ClientBridge.getInstance().getClient(SoundPlayerProvider.class).ifPresent(soundPlayerProvider -> - soundPlayerProvider.playBeepSound(position, frequency, duration)); - } - -} diff --git a/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/network/sound/SoundNetworkMessage.java b/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/network/sound/SoundNetworkMessage.java deleted file mode 100644 index 6c1f90c..0000000 --- a/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/network/sound/SoundNetworkMessage.java +++ /dev/null @@ -1,48 +0,0 @@ -package li.cil.ocreloaded.minecraft.common.network.sound; - -import io.netty.buffer.ByteBuf; -import io.netty.buffer.ByteBufAllocator; -import li.cil.ocreloaded.minecraft.common.network.NetworkMessage; -import net.minecraft.core.BlockPos; - -public class SoundNetworkMessage implements NetworkMessage { - - public static final String TYPE = "sound"; - - public static final int BEEP_CHANNEL = 0; - - private final BlockPos position; - private final ByteBuf changeBuffer; - private final int channel; - - public SoundNetworkMessage(BlockPos blockPos, ByteBuf changeBuffer, int channel) { - this.position = blockPos; - this.changeBuffer = changeBuffer; - this.channel = channel; - } - - @Override - public String getType() { - return TYPE; - } - - public BlockPos position() { - return position; - } - - public ByteBuf getChangeBuffer() { - return changeBuffer; - } - - public int getChannel() { - return this.channel; - } - - public static SoundNetworkMessage createBeepMessage(BlockPos position, short frequency, short duration) { - ByteBuf buffer = ByteBufAllocator.DEFAULT.buffer(4); - buffer.writeShort(frequency); - buffer.writeShort(duration); - return new SoundNetworkMessage(position, buffer, BEEP_CHANNEL); - } - -} diff --git a/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/recipe/RecipeRegistrationDelegate.java b/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/recipe/RecipeRegistrationDelegate.java index 9bbf7f9..b5dd02b 100644 --- a/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/recipe/RecipeRegistrationDelegate.java +++ b/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/recipe/RecipeRegistrationDelegate.java @@ -1,12 +1,12 @@ package li.cil.ocreloaded.minecraft.common.recipe; import net.minecraft.resources.ResourceLocation; -import net.minecraft.world.Container; import net.minecraft.world.item.crafting.Recipe; +import net.minecraft.world.item.crafting.RecipeInput; import net.minecraft.world.item.crafting.RecipeType; public interface RecipeRegistrationDelegate { - void registerRecipe(ResourceLocation resource, Recipe recipe, RecipeType type); + void registerRecipe(ResourceLocation resource, Recipe recipe, RecipeType type); } diff --git a/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/recipe/Recipes.java b/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/recipe/Recipes.java index cd0ec47..ec1d68d 100644 --- a/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/recipe/Recipes.java +++ b/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/recipe/Recipes.java @@ -45,6 +45,7 @@ public final class Recipes { private static final String[] RECIPE_SETS = new String[] { "default", "hardmode", "peaceful" }; + private static final Map> ORE_DICT = new HashMap<>(); private final Map recipeHandlers = new HashMap<>(); @@ -124,7 +125,8 @@ private static Config loadConfig(File recipeDirectory) { private void registerRecipes(Config config, RecipeRegistrationDelegate registrationDelegate) { for (Item item: BuiltInRegistries.ITEM) { - ResourceLocation key = item.arch$registryName(); + // TODO: COMEBACK + /*ResourceLocation key = item.arch$registryName(); if (!key.getNamespace().equals(OCReloadedCommon.MOD_ID)) continue; String name = key.getPath(); @@ -150,7 +152,7 @@ private void registerRecipes(Config config, RecipeRegistrationDelegate registrat } } else { LOGGER.warn("No recipe for '{}', you will not be able to craft this item. To suppress this warning, disable the recipe (assign `false` to it).", name); - } + }*/ } } @@ -283,11 +285,11 @@ private static Ingredient parseStringIngredient(String name) { } private static Item findItem(String name) { - return BuiltInRegistries.ITEM.get(safeResourceLocation(name)); + return BuiltInRegistries.ITEM.get(ResourceLocation.parse(name)); } private static Block findBlock(String name) { - return BuiltInRegistries.BLOCK.get(safeResourceLocation(name)); + return BuiltInRegistries.BLOCK.get(ResourceLocation.parse(name)); } private static String toLegacyName(String modernName) { @@ -336,23 +338,23 @@ private static String toModernName(String legacyName) { private static Optional getOre(String name) { // TODO: I don't think this actually works... Optional> key = switch(name) { - case "ingotIron" -> Optional.of(TagKey.create(Registries.ITEM, new ResourceLocation("c", "ingots/iron"))); - case "ingotGold" -> Optional.of(TagKey.create(Registries.ITEM, new ResourceLocation("c", "ingots/gold"))); - case "gemDiamond" -> Optional.of(TagKey.create(Registries.ITEM, new ResourceLocation("c", "ores/diamond"))); - case "gemLapis" -> Optional.of(TagKey.create(Registries.ITEM, new ResourceLocation("c", "ores/lapis"))); - case "emerald" -> Optional.of(TagKey.create(Registries.ITEM, new ResourceLocation("c", "ores/emerald"))); - case "redstone" -> Optional.of(TagKey.create(Registries.ITEM, new ResourceLocation("c", "ores/redstone"))); - case "nuggetGold" -> Optional.of(TagKey.create(Registries.ITEM, new ResourceLocation("c", "nuggets/gold"))); - case "chipDiamond" -> Optional.of(TagKey.create(Registries.ITEM, new ResourceLocation(OCReloadedCommon.MOD_ID, "chip_diamond"))); + case "ingotIron" -> Optional.of(TagKey.create(Registries.ITEM, ResourceLocation.fromNamespaceAndPath("c", "ingots/iron"))); + case "ingotGold" -> Optional.of(TagKey.create(Registries.ITEM, ResourceLocation.fromNamespaceAndPath("c", "ingots/gold"))); + case "gemDiamond" -> Optional.of(TagKey.create(Registries.ITEM, ResourceLocation.fromNamespaceAndPath("c", "ores/diamond"))); + case "gemLapis" -> Optional.of(TagKey.create(Registries.ITEM, ResourceLocation.fromNamespaceAndPath("c", "ores/lapis"))); + case "emerald" -> Optional.of(TagKey.create(Registries.ITEM, ResourceLocation.fromNamespaceAndPath("c", "ores/emerald"))); + case "redstone" -> Optional.of(TagKey.create(Registries.ITEM, ResourceLocation.fromNamespaceAndPath("c", "ores/redstone"))); + case "nuggetGold" -> Optional.of(TagKey.create(Registries.ITEM, ResourceLocation.fromNamespaceAndPath("c", "nuggets/gold"))); + case "chipDiamond" -> Optional.of(TagKey.create(Registries.ITEM, ResourceLocation.fromNamespaceAndPath(OCReloadedCommon.MOD_ID, "chip_diamond"))); default -> Optional.empty(); }; if (key.isEmpty() && name.contains(":")) { String adjustedName = name.replaceAll("([A-Z]+)", "_$1").toLowerCase(); if (adjustedName.startsWith("oc:")) { - key = Optional.of(TagKey.create(Registries.ITEM, new ResourceLocation(OCReloadedCommon.MOD_ID, adjustedName.substring(3)))); + key = Optional.of(TagKey.create(Registries.ITEM, ResourceLocation.fromNamespaceAndPath(OCReloadedCommon.MOD_ID, adjustedName.substring(3)))); } else { - key = Optional.of(TagKey.create(Registries.ITEM, new ResourceLocation(adjustedName))); + key = Optional.of(TagKey.create(Registries.ITEM, ResourceLocation.parse(adjustedName))); } } @@ -375,12 +377,8 @@ private static Optional getOre(String name) { return Optional.empty(); } - private static ResourceLocation safeResourceLocation(String name) { - return new ResourceLocation(name.toLowerCase()); - } - private static InputStream streamAsset(MinecraftServer server, String asset) throws IOException { - return server.getResourceManager().getResource(new ResourceLocation(OCReloadedCommon.MOD_ID, asset)).get().open(); + return server.getResourceManager().getResource(ResourceLocation.fromNamespaceAndPath(OCReloadedCommon.MOD_ID, asset)).get().open(); } private static class MyConfigIncluder implements ConfigIncluder, ConfigIncluderFile { diff --git a/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/registry/CommonRegistered.java b/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/registry/CommonRegistered.java index 3dd1756..f49307e 100644 --- a/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/registry/CommonRegistered.java +++ b/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/registry/CommonRegistered.java @@ -1,9 +1,9 @@ package li.cil.ocreloaded.minecraft.common.registry; -import dev.architectury.registry.CreativeTabRegistry; -import dev.architectury.registry.menu.MenuRegistry; -import dev.architectury.registry.registries.DeferredRegister; -import dev.architectury.registry.registries.RegistrySupplier; +import java.util.ArrayList; +import java.util.List; +import java.util.function.Supplier; + import li.cil.ocreloaded.minecraft.common.OCReloadedCommon; import li.cil.ocreloaded.minecraft.common.block.CaseBlock; import li.cil.ocreloaded.minecraft.common.block.KeyboardBlock; @@ -23,10 +23,11 @@ import li.cil.ocreloaded.minecraft.common.menu.CaseMenu; import li.cil.ocreloaded.minecraft.common.menu.ScreenMenu; import li.cil.ocreloaded.minecraft.common.network.NetworkUtil; -import li.cil.ocreloaded.minecraft.common.network.power.PowerNetworkHandler; -import li.cil.ocreloaded.minecraft.common.network.screen.ScreenNetworkHandler; -import li.cil.ocreloaded.minecraft.common.network.sound.SoundNetworkHandler; +import li.cil.ocreloaded.minecraft.registration.RegistrationProvider; +import li.cil.ocreloaded.minecraft.registration.RegistryObject; +import net.minecraft.core.component.DataComponentType; import net.minecraft.core.registries.Registries; +import net.minecraft.nbt.CompoundTag; import net.minecraft.network.chat.Component; import net.minecraft.world.inventory.MenuType; import net.minecraft.world.item.BlockItem; @@ -37,120 +38,132 @@ import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockBehaviour; +@SuppressWarnings("unused") public class CommonRegistered { - private static final DeferredRegister BLOCKS = DeferredRegister.create(OCReloadedCommon.MOD_ID, Registries.BLOCK); - private static final DeferredRegister ITEMS = DeferredRegister.create(OCReloadedCommon.MOD_ID, Registries.ITEM); - private static final DeferredRegister> MENUS = DeferredRegister.create(OCReloadedCommon.MOD_ID, Registries.MENU); - private static final DeferredRegister> BLOCK_ENTITIES = DeferredRegister.create(OCReloadedCommon.MOD_ID, Registries.BLOCK_ENTITY_TYPE); - private static final DeferredRegister CREATIVE_TABS = DeferredRegister.create(OCReloadedCommon.MOD_ID, Registries.CREATIVE_MODE_TAB); + private static final RegistrationProvider BLOCKS = RegistrationProvider.get(Registries.BLOCK, OCReloadedCommon.MOD_ID); + private static final RegistrationProvider ITEMS = RegistrationProvider.get(Registries.ITEM, OCReloadedCommon.MOD_ID); + private static final RegistrationProvider> MENUS = RegistrationProvider.get(Registries.MENU, OCReloadedCommon.MOD_ID); + private static final RegistrationProvider> BLOCK_ENTITIES = RegistrationProvider.get(Registries.BLOCK_ENTITY_TYPE, OCReloadedCommon.MOD_ID); + private static final RegistrationProvider> DATA_COMPONENT_TYPES = RegistrationProvider.get(Registries.DATA_COMPONENT_TYPE, OCReloadedCommon.MOD_ID); + private static final RegistrationProvider CREATIVE_TABS = RegistrationProvider.get(Registries.CREATIVE_MODE_TAB, OCReloadedCommon.MOD_ID); + + private static final List> CREATIVE_TAB_ITEMS = new ArrayList<>(); public static void initialize() { - BLOCKS.register(); - ITEMS.register(); - MENUS.register(); - BLOCK_ENTITIES.register(); - CREATIVE_TABS.register(); + NetworkUtil.initialize(); - NetworkUtil.getInstance().registerHandler("ocreloaded:power", new PowerNetworkHandler()); + /*NetworkUtil.getInstance().registerHandler("ocreloaded:power", new PowerNetworkHandler()); NetworkUtil.getInstance().registerHandler("ocreloaded:screen", new ScreenNetworkHandler()); - NetworkUtil.getInstance().registerHandler("ocreloaded:sound", new SoundNetworkHandler()); + NetworkUtil.getInstance().registerHandler("ocreloaded:sound", new SoundNetworkHandler());*/ } // Creative mode tabs - public static final RegistrySupplier CREATIVE_TAB = CREATIVE_TABS.register("creative", () -> CreativeTabRegistry.create( - Component.translatable("title.ocreloaded"), - () -> new ItemStack(CommonRegistered.CASE_BLOCK_ITEM_TIER_1.get()) - )); + public static final RegistryObject CREATIVE_TAB = CREATIVE_TABS.register("creative", () -> IPlatformRegistryHelper.INSTANCE.constructTabBuilder() + .title(Component.translatable("title.ocreloaded")) + .icon(() -> new ItemStack(CommonRegistered.CASE_BLOCK_ITEM_TIER_1.get())) + .displayItems((parameters, output) -> { + // TODO: Order items like they previously were + for (RegistryObject entry : CREATIVE_TAB_ITEMS) { + output.accept(entry.get()); + } + }) + .build()); // Default properties private static final BlockBehaviour.Properties DEFAULT_BLOCK_PROPERTIES = BlockBehaviour.Properties.of().strength(2f).noOcclusion(); - private static final Item.Properties DEFAULT_ITEM_PROPERTIES = new Item.Properties().arch$tab(CREATIVE_TAB); + private static final Item.Properties DEFAULT_ITEM_PROPERTIES = new Item.Properties();//.arch$tab(CREATIVE_TAB); // Blocks - public static final RegistrySupplier CASE_BLOCK_TIER_1 = BLOCKS.register("case1", () -> new CaseBlock(DEFAULT_BLOCK_PROPERTIES.strength(2.5f), 1)); - public static final RegistrySupplier CASE_BLOCK_TIER_2 = BLOCKS.register("case2", () -> new CaseBlock(DEFAULT_BLOCK_PROPERTIES.strength(2.5f), 2)); - public static final RegistrySupplier CASE_BLOCK_TIER_3 = BLOCKS.register("case3", () -> new CaseBlock(DEFAULT_BLOCK_PROPERTIES, 3)); - public static final RegistrySupplier CASE_BLOCK_CREATIVE = BLOCKS.register("casecreative", () -> new CaseBlock(DEFAULT_BLOCK_PROPERTIES, 4)); - public static final RegistrySupplier SCREEN_BLOCK_TIER_1 = BLOCKS.register("screen1", () -> new ScreenBlock(DEFAULT_BLOCK_PROPERTIES, 1)); - public static final RegistrySupplier SCREEN_BLOCK_TIER_2 = BLOCKS.register("screen2", () -> new ScreenBlock(DEFAULT_BLOCK_PROPERTIES, 2)); - public static final RegistrySupplier SCREEN_BLOCK_TIER_3 = BLOCKS.register("screen3", () -> new ScreenBlock(DEFAULT_BLOCK_PROPERTIES, 3)); - public static final RegistrySupplier KEYBOARD_BLOCK = BLOCKS.register("keyboard", () -> new KeyboardBlock(DEFAULT_BLOCK_PROPERTIES.noCollission())); + public static final RegistryObject CASE_BLOCK_TIER_1 = BLOCKS.register("case1", () -> new CaseBlock(DEFAULT_BLOCK_PROPERTIES.strength(2.5f), 1)); + public static final RegistryObject CASE_BLOCK_TIER_2 = BLOCKS.register("case2", () -> new CaseBlock(DEFAULT_BLOCK_PROPERTIES.strength(2.5f), 2)); + public static final RegistryObject CASE_BLOCK_TIER_3 = BLOCKS.register("case3", () -> new CaseBlock(DEFAULT_BLOCK_PROPERTIES, 3)); + public static final RegistryObject CASE_BLOCK_CREATIVE = BLOCKS.register("casecreative", () -> new CaseBlock(DEFAULT_BLOCK_PROPERTIES, 4)); + public static final RegistryObject SCREEN_BLOCK_TIER_1 = BLOCKS.register("screen1", () -> new ScreenBlock(DEFAULT_BLOCK_PROPERTIES, 1)); + public static final RegistryObject SCREEN_BLOCK_TIER_2 = BLOCKS.register("screen2", () -> new ScreenBlock(DEFAULT_BLOCK_PROPERTIES, 2)); + public static final RegistryObject SCREEN_BLOCK_TIER_3 = BLOCKS.register("screen3", () -> new ScreenBlock(DEFAULT_BLOCK_PROPERTIES, 3)); + public static final RegistryObject KEYBOARD_BLOCK = BLOCKS.register("keyboard", () -> new KeyboardBlock(DEFAULT_BLOCK_PROPERTIES.noCollission())); // Items - public static final RegistrySupplier CASE_BLOCK_ITEM_TIER_1 = ITEMS.register("case1", () -> new BlockItem(CASE_BLOCK_TIER_1.value(), DEFAULT_ITEM_PROPERTIES)); - public static final RegistrySupplier CASE_BLOCK_ITEM_TIER_2 = ITEMS.register("case2", () -> new BlockItem(CASE_BLOCK_TIER_2.value(), DEFAULT_ITEM_PROPERTIES)); - public static final RegistrySupplier CASE_BLOCK_ITEM_TIER_3 = ITEMS.register("case3", () -> new BlockItem(CASE_BLOCK_TIER_3.value(), DEFAULT_ITEM_PROPERTIES)); - public static final RegistrySupplier CASE_BLOCK_ITEM_CREATIVE = ITEMS.register("casecreative", () -> new BlockItem(CASE_BLOCK_CREATIVE.value(), DEFAULT_ITEM_PROPERTIES)); + public static final RegistryObject CASE_BLOCK_ITEM_TIER_1 = registerItem("case1", () -> new BlockItem(CASE_BLOCK_TIER_1.get(), DEFAULT_ITEM_PROPERTIES)); + public static final RegistryObject CASE_BLOCK_ITEM_TIER_2 = registerItem("case2", () -> new BlockItem(CASE_BLOCK_TIER_2.get(), DEFAULT_ITEM_PROPERTIES)); + public static final RegistryObject CASE_BLOCK_ITEM_TIER_3 = registerItem("case3", () -> new BlockItem(CASE_BLOCK_TIER_3.get(), DEFAULT_ITEM_PROPERTIES)); + public static final RegistryObject CASE_BLOCK_ITEM_CREATIVE = registerItem("casecreative", () -> new BlockItem(CASE_BLOCK_CREATIVE.get(), DEFAULT_ITEM_PROPERTIES)); - public static final RegistrySupplier KEYBOARD_BLOCK_ITEM = ITEMS.register("keyboard", () -> new BlockItem(KEYBOARD_BLOCK.value(), DEFAULT_ITEM_PROPERTIES)); + public static final RegistryObject KEYBOARD_BLOCK_ITEM = registerItem("keyboard", () -> new BlockItem(KEYBOARD_BLOCK.get(), DEFAULT_ITEM_PROPERTIES)); - public static final RegistrySupplier SCREEN_BLOCK_ITEM_TIER_1 = ITEMS.register("screen1", () -> new BlockItem(SCREEN_BLOCK_TIER_1.value(), DEFAULT_ITEM_PROPERTIES)); - public static final RegistrySupplier SCREEN_BLOCK_ITEM_TIER_2 = ITEMS.register("screen2", () -> new BlockItem(SCREEN_BLOCK_TIER_2.value(), DEFAULT_ITEM_PROPERTIES)); - public static final RegistrySupplier SCREEN_BLOCK_ITEM_TIER_3 = ITEMS.register("screen3", () -> new BlockItem(SCREEN_BLOCK_TIER_3.value(), DEFAULT_ITEM_PROPERTIES)); + public static final RegistryObject SCREEN_BLOCK_ITEM_TIER_1 = registerItem("screen1", () -> new BlockItem(SCREEN_BLOCK_TIER_1.get(), DEFAULT_ITEM_PROPERTIES)); + public static final RegistryObject SCREEN_BLOCK_ITEM_TIER_2 = registerItem("screen2", () -> new BlockItem(SCREEN_BLOCK_TIER_2.get(), DEFAULT_ITEM_PROPERTIES)); + public static final RegistryObject SCREEN_BLOCK_ITEM_TIER_3 = registerItem("screen3", () -> new BlockItem(SCREEN_BLOCK_TIER_3.get(), DEFAULT_ITEM_PROPERTIES)); - public static final RegistrySupplier ARITHMETIC_LOGIC_UNIT = ITEMS.register("alu", () -> new Item(DEFAULT_ITEM_PROPERTIES)); - public static final RegistrySupplier ARROW_KEYS = ITEMS.register("arrow_keys", () -> new Item(DEFAULT_ITEM_PROPERTIES)); - public static final RegistrySupplier BUTTON_GROUP = ITEMS.register("button_group", () -> new Item(DEFAULT_ITEM_PROPERTIES)); - public static final RegistrySupplier CARD = ITEMS.register("card", () -> new Item(DEFAULT_ITEM_PROPERTIES)); - public static final RegistrySupplier CONTROL_UNIT = ITEMS.register("cu", () -> new Item(DEFAULT_ITEM_PROPERTIES)); + public static final RegistryObject ARITHMETIC_LOGIC_UNIT = registerItem("alu", () -> new Item(DEFAULT_ITEM_PROPERTIES)); + public static final RegistryObject ARROW_KEYS = registerItem("arrow_keys", () -> new Item(DEFAULT_ITEM_PROPERTIES)); + public static final RegistryObject BUTTON_GROUP = registerItem("button_group", () -> new Item(DEFAULT_ITEM_PROPERTIES)); + public static final RegistryObject CARD = registerItem("card", () -> new Item(DEFAULT_ITEM_PROPERTIES)); + public static final RegistryObject CONTROL_UNIT = registerItem("cu", () -> new Item(DEFAULT_ITEM_PROPERTIES)); - public static final RegistrySupplier CUTTING_WIRE = ITEMS.register("cutting_wire", () -> new Item(DEFAULT_ITEM_PROPERTIES)); - public static final RegistrySupplier CHIP_DIAMOND = ITEMS.register("chip_diamond", () -> new Item(DEFAULT_ITEM_PROPERTIES)); + public static final RegistryObject CUTTING_WIRE = registerItem("cutting_wire", () -> new Item(DEFAULT_ITEM_PROPERTIES)); + public static final RegistryObject CHIP_DIAMOND = registerItem("chip_diamond", () -> new Item(DEFAULT_ITEM_PROPERTIES)); - public static final RegistrySupplier DISK = ITEMS.register("disk", () -> new Item(DEFAULT_ITEM_PROPERTIES)); + public static final RegistryObject DISK = registerItem("disk", () -> new Item(DEFAULT_ITEM_PROPERTIES)); - public static final RegistrySupplier CHIP_TIER_1 = ITEMS.register("chip1", () -> new CPUItem(DEFAULT_ITEM_PROPERTIES, 1)); - public static final RegistrySupplier CHIP_TIER_2 = ITEMS.register("chip2", () -> new CPUItem(DEFAULT_ITEM_PROPERTIES, 2)); - public static final RegistrySupplier CHIP_TIER_3 = ITEMS.register("chip3", () -> new CPUItem(DEFAULT_ITEM_PROPERTIES, 3)); + public static final RegistryObject CHIP_TIER_1 = registerItem("chip1", () -> new CPUItem(DEFAULT_ITEM_PROPERTIES, 1)); + public static final RegistryObject CHIP_TIER_2 = registerItem("chip2", () -> new CPUItem(DEFAULT_ITEM_PROPERTIES, 2)); + public static final RegistryObject CHIP_TIER_3 = registerItem("chip3", () -> new CPUItem(DEFAULT_ITEM_PROPERTIES, 3)); - public static final RegistrySupplier NUMPAD = ITEMS.register("numpad", () -> new Item(DEFAULT_ITEM_PROPERTIES)); + public static final RegistryObject NUMPAD = registerItem("numpad", () -> new Item(DEFAULT_ITEM_PROPERTIES)); - public static final RegistrySupplier PRINTED_CIRCUIT_BOARD = ITEMS.register("printed_circuit_board", () -> new Item(DEFAULT_ITEM_PROPERTIES)); - public static final RegistrySupplier RAW_CIRCUIT_BOARD = ITEMS.register("raw_circuit_board", () -> new Item(DEFAULT_ITEM_PROPERTIES)); + public static final RegistryObject PRINTED_CIRCUIT_BOARD = registerItem("printed_circuit_board", () -> new Item(DEFAULT_ITEM_PROPERTIES)); + public static final RegistryObject RAW_CIRCUIT_BOARD = registerItem("raw_circuit_board", () -> new Item(DEFAULT_ITEM_PROPERTIES)); - public static final RegistrySupplier TRANSISTOR = ITEMS.register("transistor", () -> new Item(DEFAULT_ITEM_PROPERTIES)); - public static final RegistrySupplier MANUAL = ITEMS.register("manual", () -> new ManualItem(DEFAULT_ITEM_PROPERTIES)); + public static final RegistryObject TRANSISTOR = registerItem("transistor", () -> new Item(DEFAULT_ITEM_PROPERTIES)); + public static final RegistryObject MANUAL = registerItem("manual", () -> new ManualItem(DEFAULT_ITEM_PROPERTIES)); - public static final RegistrySupplier CPU_TIER_1 = ITEMS.register("cpu1", () -> new CPUItem(DEFAULT_ITEM_PROPERTIES, 1)); - public static final RegistrySupplier CPU_TIER_2 = ITEMS.register("cpu2", () -> new CPUItem(DEFAULT_ITEM_PROPERTIES, 2)); - public static final RegistrySupplier CPU_TIER_3 = ITEMS.register("cpu3", () -> new CPUItem(DEFAULT_ITEM_PROPERTIES, 3)); + public static final RegistryObject CPU_TIER_1 = registerItem("cpu1", () -> new CPUItem(DEFAULT_ITEM_PROPERTIES, 1)); + public static final RegistryObject CPU_TIER_2 = registerItem("cpu2", () -> new CPUItem(DEFAULT_ITEM_PROPERTIES, 2)); + public static final RegistryObject CPU_TIER_3 = registerItem("cpu3", () -> new CPUItem(DEFAULT_ITEM_PROPERTIES, 3)); - public static final RegistrySupplier MEMORY_TIER_1 = ITEMS.register("memory1", () -> new MemoryItem(DEFAULT_ITEM_PROPERTIES, 1)); - public static final RegistrySupplier MEMORY_TIER_1_5 = ITEMS.register("memory1_5", () -> new MemoryItem(DEFAULT_ITEM_PROPERTIES, 1)); - public static final RegistrySupplier MEMORY_TIER_2 = ITEMS.register("memory2", () -> new MemoryItem(DEFAULT_ITEM_PROPERTIES, 2)); - public static final RegistrySupplier MEMORY_TIER_2_5 = ITEMS.register("memory2_5", () -> new MemoryItem(DEFAULT_ITEM_PROPERTIES, 2)); - public static final RegistrySupplier MEMORY_TIER_3 = ITEMS.register("memory3", () -> new MemoryItem(DEFAULT_ITEM_PROPERTIES, 3)); - public static final RegistrySupplier MEMORY_TIER_3_5 = ITEMS.register("memory3_5", () -> new MemoryItem(DEFAULT_ITEM_PROPERTIES, 3)); + public static final RegistryObject MEMORY_TIER_1 = registerItem("memory1", () -> new MemoryItem(DEFAULT_ITEM_PROPERTIES, 1)); + public static final RegistryObject MEMORY_TIER_1_5 = registerItem("memory1_5", () -> new MemoryItem(DEFAULT_ITEM_PROPERTIES, 1)); + public static final RegistryObject MEMORY_TIER_2 = registerItem("memory2", () -> new MemoryItem(DEFAULT_ITEM_PROPERTIES, 2)); + public static final RegistryObject MEMORY_TIER_2_5 = registerItem("memory2_5", () -> new MemoryItem(DEFAULT_ITEM_PROPERTIES, 2)); + public static final RegistryObject MEMORY_TIER_3 = registerItem("memory3", () -> new MemoryItem(DEFAULT_ITEM_PROPERTIES, 3)); + public static final RegistryObject MEMORY_TIER_3_5 = registerItem("memory3_5", () -> new MemoryItem(DEFAULT_ITEM_PROPERTIES, 3)); - public static final RegistrySupplier DATACARD_TIER_1 = ITEMS.register("datacard1", () -> new DataCardItem(DEFAULT_ITEM_PROPERTIES, 1)); - public static final RegistrySupplier DATACARD_TIER_2 = ITEMS.register("datacard2", () -> new DataCardItem(DEFAULT_ITEM_PROPERTIES, 2)); - public static final RegistrySupplier DATACARD_TIER_3 = ITEMS.register("datacard3", () -> new DataCardItem(DEFAULT_ITEM_PROPERTIES, 3)); - public static final RegistrySupplier GRAPHICSCARD_TIER_1 = ITEMS.register("graphicscard1", () -> new GraphicsCardItem(DEFAULT_ITEM_PROPERTIES, 1)); - public static final RegistrySupplier GRAPHICSCARD_TIER_2 = ITEMS.register("graphicscard2", () -> new GraphicsCardItem(DEFAULT_ITEM_PROPERTIES, 2)); - public static final RegistrySupplier GRAPHICSCARD_TIER_3 = ITEMS.register("graphicscard3", () -> new GraphicsCardItem(DEFAULT_ITEM_PROPERTIES, 3)); + public static final RegistryObject DATACARD_TIER_1 = registerItem("datacard1", () -> new DataCardItem(DEFAULT_ITEM_PROPERTIES, 1)); + public static final RegistryObject DATACARD_TIER_2 = registerItem("datacard2", () -> new DataCardItem(DEFAULT_ITEM_PROPERTIES, 2)); + public static final RegistryObject DATACARD_TIER_3 = registerItem("datacard3", () -> new DataCardItem(DEFAULT_ITEM_PROPERTIES, 3)); + public static final RegistryObject GRAPHICSCARD_TIER_1 = registerItem("graphicscard1", () -> new GraphicsCardItem(DEFAULT_ITEM_PROPERTIES, 1)); + public static final RegistryObject GRAPHICSCARD_TIER_2 = registerItem("graphicscard2", () -> new GraphicsCardItem(DEFAULT_ITEM_PROPERTIES, 2)); + public static final RegistryObject GRAPHICSCARD_TIER_3 = registerItem("graphicscard3", () -> new GraphicsCardItem(DEFAULT_ITEM_PROPERTIES, 3)); - public static final RegistrySupplier EEPROM = ITEMS.register("eeprom", () -> new EepromItem(DEFAULT_ITEM_PROPERTIES)); - public static final RegistrySupplier FLOPPY = ITEMS.register("floppy", () -> new FloppyDiskItem(DEFAULT_ITEM_PROPERTIES)); - public static final RegistrySupplier HARDDISKDRIVE_TIER_1 = ITEMS.register("harddiskdrive1", () -> new HardDiskItem(DEFAULT_ITEM_PROPERTIES, 1)); - public static final RegistrySupplier HARDDISKDRIVE_TIER_2 = ITEMS.register("harddiskdrive2", () -> new HardDiskItem(DEFAULT_ITEM_PROPERTIES, 2)); - public static final RegistrySupplier HARDDISKDRIVE_TIER_3 = ITEMS.register("harddiskdrive3", () -> new HardDiskItem(DEFAULT_ITEM_PROPERTIES, 3)); + public static final RegistryObject EEPROM = registerItem("eeprom", () -> new EepromItem(DEFAULT_ITEM_PROPERTIES)); + public static final RegistryObject FLOPPY = registerItem("floppy", () -> new FloppyDiskItem(DEFAULT_ITEM_PROPERTIES)); + public static final RegistryObject HARDDISKDRIVE_TIER_1 = registerItem("harddiskdrive1", () -> new HardDiskItem(DEFAULT_ITEM_PROPERTIES, 1)); + public static final RegistryObject HARDDISKDRIVE_TIER_2 = registerItem("harddiskdrive2", () -> new HardDiskItem(DEFAULT_ITEM_PROPERTIES, 2)); + public static final RegistryObject HARDDISKDRIVE_TIER_3 = registerItem("harddiskdrive3", () -> new HardDiskItem(DEFAULT_ITEM_PROPERTIES, 3)); - public static final RegistrySupplier FLOPPY_OPENOS = ITEMS.register("floppy_openos", () -> new FloppyDiskItem(DEFAULT_ITEM_PROPERTIES, "loot:openos")); - public static final RegistrySupplier FLOPPY_PLAN9K = ITEMS.register("floppy_plan9k", () -> new FloppyDiskItem(DEFAULT_ITEM_PROPERTIES, "loot:plan9k")); + public static final RegistryObject FLOPPY_OPENOS = registerItem("floppy_openos", () -> new FloppyDiskItem(DEFAULT_ITEM_PROPERTIES, "loot:openos")); + public static final RegistryObject FLOPPY_PLAN9K = registerItem("floppy_plan9k", () -> new FloppyDiskItem(DEFAULT_ITEM_PROPERTIES, "loot:plan9k")); - public static final RegistrySupplier EEPROM_LUA = ITEMS.register("eeprom_lua", () -> new LuaEepromItem(DEFAULT_ITEM_PROPERTIES)); + public static final RegistryObject EEPROM_LUA = registerItem("eeprom_lua", () -> new LuaEepromItem(DEFAULT_ITEM_PROPERTIES)); // Menu types - public static final RegistrySupplier> CASE_MENU_TYPE = MENUS.register("case", () -> MenuRegistry.ofExtended(CaseMenu::new)); - public static final RegistrySupplier> SCREEN_MENU_TYPE = MENUS.register("screen", () -> MenuRegistry.ofExtended(ScreenMenu::new)); + public static final RegistryObject, MenuType> CASE_MENU_TYPE = MENUS.register("case", () -> IPlatformRegistryHelper.INSTANCE.registerMenuType(CaseMenu::new)); + public static final RegistryObject, MenuType> SCREEN_MENU_TYPE = MENUS.register("screen", () -> IPlatformRegistryHelper.INSTANCE.registerMenuType(ScreenMenu::new)); // Block entities - public static final RegistrySupplier> CASE_BLOCK_ENTITY = BLOCK_ENTITIES.register("case", () -> BlockEntityType.Builder - .of(CaseBlockEntity::new, CASE_BLOCK_TIER_1.get(), CASE_BLOCK_TIER_2.get(), CASE_BLOCK_TIER_3.get(), CASE_BLOCK_CREATIVE.get()).build(null)); - public static final RegistrySupplier> SCREEN_BLOCK_ENTITY = BLOCK_ENTITIES.register("screen", () -> BlockEntityType.Builder - .of(ScreenBlockEntity::new, SCREEN_BLOCK_TIER_1.get(), SCREEN_BLOCK_TIER_2.get(), SCREEN_BLOCK_TIER_3.get()).build(null)); - public static final RegistrySupplier> KEYBOARD_BLOCK_ENTITY = BLOCK_ENTITIES.register("keyboard", () -> BlockEntityType.Builder - .of(KeyboardBlockEntity::new, KEYBOARD_BLOCK.get()).build(null)); + public static final RegistryObject, BlockEntityType> CASE_BLOCK_ENTITY = BLOCK_ENTITIES.register("case", () -> IPlatformRegistryHelper.INSTANCE.createBlockEntityType(CaseBlockEntity::new, CASE_BLOCK_TIER_1.get(), CASE_BLOCK_TIER_2.get(), CASE_BLOCK_TIER_3.get(), CASE_BLOCK_CREATIVE.get())); + public static final RegistryObject, BlockEntityType> SCREEN_BLOCK_ENTITY = BLOCK_ENTITIES.register("screen", () -> IPlatformRegistryHelper.INSTANCE.createBlockEntityType(ScreenBlockEntity::new, SCREEN_BLOCK_TIER_1.get(), SCREEN_BLOCK_TIER_2.get(), SCREEN_BLOCK_TIER_3.get())); + public static final RegistryObject, BlockEntityType> KEYBOARD_BLOCK_ENTITY = BLOCK_ENTITIES.register("keyboard", () -> IPlatformRegistryHelper.INSTANCE.createBlockEntityType(KeyboardBlockEntity::new, KEYBOARD_BLOCK.get())); + + // Data component types + public static final RegistryObject, DataComponentType> NBT_DATA_TYPE = DATA_COMPONENT_TYPES.register("custom_nbt", () -> DataComponentType.builder().persistent(CompoundTag.CODEC).build()); + + private static RegistryObject registerItem(String name, Supplier supplier) { + RegistryObject registryObject = ITEMS.register(name, supplier); + CREATIVE_TAB_ITEMS.add(registryObject); + return registryObject; + } } diff --git a/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/registry/IPlatformRegistryHelper.java b/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/registry/IPlatformRegistryHelper.java new file mode 100644 index 0000000..48e2b4b --- /dev/null +++ b/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/registry/IPlatformRegistryHelper.java @@ -0,0 +1,35 @@ +package li.cil.ocreloaded.minecraft.common.registry; + +import java.util.ServiceLoader; + +import net.minecraft.core.BlockPos; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.world.entity.player.Inventory; +import net.minecraft.world.inventory.AbstractContainerMenu; +import net.minecraft.world.inventory.MenuType; +import net.minecraft.world.item.CreativeModeTab; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.state.BlockState; + +public interface IPlatformRegistryHelper { + + IPlatformRegistryHelper INSTANCE = ServiceLoader.load(IPlatformRegistryHelper.class).findFirst().orElseThrow(); + + CreativeModeTab.Builder constructTabBuilder(); + + interface BlockEntityConstructor { + T get(BlockPos blockPos, BlockState blockState); + } + + BlockEntityType createBlockEntityType(BlockEntityConstructor constructor, Block... blocks); + + MenuType registerMenuType(TypedMenuConstructor menuConstructor); + + @FunctionalInterface + interface TypedMenuConstructor { + T createMenu(int containerId, Inventory playerInventory, FriendlyByteBuf buf); + } + +} diff --git a/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/util/Colors.java b/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/util/Colors.java index 930f2b7..c8b7e47 100644 --- a/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/util/Colors.java +++ b/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/util/Colors.java @@ -9,7 +9,6 @@ public final class Colors { public static final int CYAN = 0x66FFFF; public static final int MAGENTA = 0xC354CD; - private Colors() {} } diff --git a/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/util/IPlatformMenuHelper.java b/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/util/IPlatformMenuHelper.java new file mode 100644 index 0000000..dec1198 --- /dev/null +++ b/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/util/IPlatformMenuHelper.java @@ -0,0 +1,16 @@ +package li.cil.ocreloaded.minecraft.common.util; + +import java.util.ServiceLoader; +import java.util.function.Consumer; + +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.MenuProvider; + +public interface IPlatformMenuHelper { + + IPlatformMenuHelper INSTANCE = ServiceLoader.load(IPlatformMenuHelper.class).findFirst().orElseThrow(); + + void openExtendedMenu(ServerPlayer serverPlayer, MenuProvider menuProvider, Consumer byteBufConsumer); + +} \ No newline at end of file diff --git a/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/server/machine/MachineSetup.java b/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/server/machine/MachineSetup.java index d30288f..a06704c 100644 --- a/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/server/machine/MachineSetup.java +++ b/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/server/machine/MachineSetup.java @@ -36,20 +36,20 @@ private static void registerStartCode(MinecraftServer server) { } private static void registerLuaStartCode(MinecraftServer server) { - ResourceLocation resourceLocation = new ResourceLocation(OCReloadedCommon.MOD_ID, "lua/machine.lua"); + ResourceLocation resourceLocation = ResourceLocation.fromNamespaceAndPath(OCReloadedCommon.MOD_ID, "lua/machine.lua"); Supplier> supplier = createCodeSupplier(server, resourceLocation); MachineCodeRegistry.getDefaultInstance().registerMachineCode("Lua 5.2", supplier); MachineCodeRegistry.getDefaultInstance().registerMachineCode("Lua 5.3", supplier); } private static void registerLuaBiosCode(MinecraftServer server) { - ResourceLocation resourceLocation = new ResourceLocation(OCReloadedCommon.MOD_ID, "lua/bios.lua"); + ResourceLocation resourceLocation = ResourceLocation.fromNamespaceAndPath(OCReloadedCommon.MOD_ID, "lua/bios.lua"); Supplier> supplier = createCodeSupplier(server, resourceLocation); MachineCodeRegistry.getDefaultInstance().registerBiosCode("lua", supplier); } private static void registerFilesystemSuppliers(MinecraftServer server) { - ResourceLocation resourceLocation = new ResourceLocation(OCReloadedCommon.MOD_ID, "loot"); + ResourceLocation resourceLocation = ResourceLocation.fromNamespaceAndPath(OCReloadedCommon.MOD_ID, "loot"); FileSystemSupplierRegistry.getDefaultInstance().register("loot", (uuid, data) -> LootFileSystemSupplier.createLootFS(server, resourceLocation, data)); FileSystemSupplierRegistry.getDefaultInstance().register("localfs", (uuid, data) -> LocalFileSystemSupplier.createLocalFS(server, uuid)); } diff --git a/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/server/machine/fssup/LootFileSystemSupplier.java b/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/server/machine/fssup/LootFileSystemSupplier.java index d74cdf4..7a2459e 100644 --- a/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/server/machine/fssup/LootFileSystemSupplier.java +++ b/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/server/machine/fssup/LootFileSystemSupplier.java @@ -55,7 +55,7 @@ public static FileSystem createLootFS(MinecraftServer server, ResourceLocation r private static Map getRemappings(ResourceManager resourceManager, ResourceLocation resourceLocation, String data) { String remapPath = resourceLocation.getPath() + "/" + data + ".remap"; - Optional remapResource = resourceManager.getResource(new ResourceLocation(resourceLocation.getNamespace(), remapPath)); + Optional remapResource = resourceManager.getResource(ResourceLocation.fromNamespaceAndPath(resourceLocation.getNamespace(), remapPath)); if (remapResource.isEmpty()) { return Map.of(); } diff --git a/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/server/machine/lua/LuaCFactory.java b/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/server/machine/lua/LuaCFactory.java index 99395f8..d7aefcf 100644 --- a/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/server/machine/lua/LuaCFactory.java +++ b/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/server/machine/lua/LuaCFactory.java @@ -4,10 +4,12 @@ import java.io.File; import java.io.InputStream; +import java.nio.file.FileAlreadyExistsException; import java.nio.file.Files; import java.util.List; import java.util.Optional; +import org.apache.commons.logging.Log; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -51,7 +53,7 @@ public boolean isAvailable(String architecture) { && tempDir != null && (resource = getResource(architecture)).isPresent(); - if (isAvailable) { + if (isAvailable && resource != null) { LOGGER.trace("LuaJIT native library available for this platform: " + resource.get()); } else { LOGGER.error("LuaJIT native library not available for this platform."); @@ -81,7 +83,7 @@ public Optional createFactory(String architecture) { } private Optional getResource(String architecture) { - ResourceLocation resourceLocation = new ResourceLocation(OCReloadedCommon.MOD_ID, "libs/" + architecture + "/" + executableName); + ResourceLocation resourceLocation = ResourceLocation.fromNamespaceAndPath(OCReloadedCommon.MOD_ID, "libs/" + architecture + "/" + executableName); return server.getResourceManager().getResource(resourceLocation); } @@ -143,7 +145,10 @@ private boolean ensureResourceCopied(String architecture) { try (InputStream in = resource.get().open();) { Files.copy(in, new File(tempName).toPath()); - LOGGER.trace("Copied LuaJIT native library to temporary directory: " + tempName + "."); + LOGGER.trace("Copied LuaJIT native library to temporary directory: {}.", tempName); + return true; + } catch (FileAlreadyExistsException e) { + LOGGER.trace("The native libraries already exist, and their handles are locked. This is a windows thing, and nothing won't happen if we won't copy them over once more (probably)"); return true; } catch (Exception e) { LOGGER.error("Failed to copy LuaJIT native library to temporary directory.", e); diff --git a/projects/Minecraft/src/main/resources/ocreloaded.mixins.json b/projects/Minecraft/src/main/resources/ocreloaded.mixins.json index 8d541a8..06a5e0e 100644 --- a/projects/Minecraft/src/main/resources/ocreloaded.mixins.json +++ b/projects/Minecraft/src/main/resources/ocreloaded.mixins.json @@ -1,7 +1,7 @@ { "required": true, "package": "oc.cil.ocreloaded.mixin", - "compatibilityLevel": "JAVA_17", + "compatibilityLevel": "JAVA_21", "minVersion": "0.8", "client": [ ], diff --git a/projects/NeoForge/build.gradle.kts b/projects/NeoForge/build.gradle.kts index aa9519b..331af1c 100644 --- a/projects/NeoForge/build.gradle.kts +++ b/projects/NeoForge/build.gradle.kts @@ -10,6 +10,8 @@ neoForge { val ocreloaded by mods.registering { sourceSet(sourceSets.main.get()) + sourceSet(project(":Minecraft").sourceSets.main.get()) + sourceSet(project(":Core").sourceSets.main.get()) } runs { @@ -20,7 +22,18 @@ neoForge { } dependencies { - compileOnly(project(":Minecraft")) - commonJava(project(path = ":Minecraft", configuration = "commonJava")) - commonResources(project(path = ":Minecraft", configuration = "commonResources")) + implementation(project(":Minecraft")) + + "additionalRuntimeClasspath"(libs.typesafeConfig) + "additionalRuntimeClasspath"(files("../../libs/OpenComputers-JNLua.jar", "../../libs/OpenComputers-LuaJ.jar")) + jarJar(libs.typesafeConfig) + jarJar(files("../../libs/OpenComputers-JNLua.jar", "../../libs/OpenComputers-LuaJ.jar")) + + implementation("mysticdrew:common-networking-neoforge:1.0.20-1.21.1") +} + +sourceSets.main { + resources { + srcDir(project(":Minecraft").sourceSets.main.get().resources.srcDirs) + } } \ No newline at end of file diff --git a/projects/NeoForge/gradle.properties b/projects/NeoForge/gradle.properties deleted file mode 100644 index 4f8c488..0000000 --- a/projects/NeoForge/gradle.properties +++ /dev/null @@ -1 +0,0 @@ -loom.platform = neoforge \ No newline at end of file diff --git a/projects/NeoForge/src/main/java/li/cil/ocreloaded/neoforge/client/OCReloadedClient.java b/projects/NeoForge/src/main/java/li/cil/ocreloaded/neoforge/client/OCReloadedClient.java index 2fc1ecb..bf1b8c8 100644 --- a/projects/NeoForge/src/main/java/li/cil/ocreloaded/neoforge/client/OCReloadedClient.java +++ b/projects/NeoForge/src/main/java/li/cil/ocreloaded/neoforge/client/OCReloadedClient.java @@ -1,13 +1,22 @@ package li.cil.ocreloaded.neoforge.client; +import li.cil.ocreloaded.minecraft.client.ColorHandlers; import li.cil.ocreloaded.minecraft.client.CommonClientHooks; import li.cil.ocreloaded.minecraft.client.registry.ClientRegistered; +import li.cil.ocreloaded.minecraft.client.renderer.entity.CaseRenderer; +import li.cil.ocreloaded.minecraft.client.renderer.entity.screen.ScreenRenderer; +import li.cil.ocreloaded.minecraft.client.screen.CaseScreen; +import li.cil.ocreloaded.minecraft.client.screen.ScreenScreen; +import li.cil.ocreloaded.minecraft.common.registry.CommonRegistered; import li.cil.ocreloaded.neoforge.common.OCReloaded; import net.neoforged.api.distmarker.Dist; import net.neoforged.bus.api.SubscribeEvent; import net.neoforged.fml.common.EventBusSubscriber; import net.neoforged.fml.common.Mod; import net.neoforged.fml.event.lifecycle.FMLClientSetupEvent; +import net.neoforged.neoforge.client.event.EntityRenderersEvent; +import net.neoforged.neoforge.client.event.RegisterColorHandlersEvent; +import net.neoforged.neoforge.client.event.RegisterMenuScreensEvent; @Mod(value = OCReloaded.MOD_ID, dist = Dist.CLIENT) @EventBusSubscriber(modid = OCReloaded.MOD_ID, value = Dist.CLIENT) @@ -21,4 +30,26 @@ public static void clientSetup(FMLClientSetupEvent event) { ClientRegistered.setup(); CommonClientHooks.setup(); } + + @SubscribeEvent + public static void registerItems(RegisterColorHandlersEvent.Item event) { + ColorHandlers.registerItemColorHandlers((item, itemColor) -> event.register(itemColor, item)); + } + + @SubscribeEvent + public static void registerItems(RegisterColorHandlersEvent.Block event) { + ColorHandlers.registerBlockColorHandlers((block, blockColor) -> event.register(blockColor, block)); + } + + @SubscribeEvent + public static void registerBlockEntityRenderers(EntityRenderersEvent.RegisterRenderers event) { + event.registerBlockEntityRenderer(CommonRegistered.CASE_BLOCK_ENTITY.get(), CaseRenderer::new); + event.registerBlockEntityRenderer(CommonRegistered.SCREEN_BLOCK_ENTITY.get(), ScreenRenderer::new); + } + + @SubscribeEvent + public static void registerScreens(RegisterMenuScreensEvent event) { + event.register(CommonRegistered.CASE_MENU_TYPE.get(), CaseScreen::new); + event.register(CommonRegistered.SCREEN_MENU_TYPE.get(), ScreenScreen::new); + } } diff --git a/projects/NeoForge/src/main/java/li/cil/ocreloaded/neoforge/common/NeoPlatformMenuHelper.java b/projects/NeoForge/src/main/java/li/cil/ocreloaded/neoforge/common/NeoPlatformMenuHelper.java new file mode 100644 index 0000000..a116888 --- /dev/null +++ b/projects/NeoForge/src/main/java/li/cil/ocreloaded/neoforge/common/NeoPlatformMenuHelper.java @@ -0,0 +1,15 @@ +package li.cil.ocreloaded.neoforge.common; + +import java.util.function.Consumer; + +import li.cil.ocreloaded.minecraft.common.util.IPlatformMenuHelper; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.MenuProvider; + +public class NeoPlatformMenuHelper implements IPlatformMenuHelper { + @Override + public void openExtendedMenu(ServerPlayer serverPlayer, MenuProvider menuProvider, Consumer byteBufConsumer) { + serverPlayer.openMenu(menuProvider, byteBufConsumer::accept); + } +} diff --git a/projects/NeoForge/src/main/java/li/cil/ocreloaded/neoforge/common/NeoPlatformRegistryHelper.java b/projects/NeoForge/src/main/java/li/cil/ocreloaded/neoforge/common/NeoPlatformRegistryHelper.java new file mode 100644 index 0000000..8f35421 --- /dev/null +++ b/projects/NeoForge/src/main/java/li/cil/ocreloaded/neoforge/common/NeoPlatformRegistryHelper.java @@ -0,0 +1,30 @@ +package li.cil.ocreloaded.neoforge.common; + +import li.cil.ocreloaded.minecraft.common.registry.IPlatformRegistryHelper; +import net.minecraft.world.inventory.AbstractContainerMenu; +import net.minecraft.world.inventory.MenuType; +import net.minecraft.world.item.CreativeModeTab; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.neoforged.neoforge.common.extensions.IMenuTypeExtension; + +public class NeoPlatformRegistryHelper implements IPlatformRegistryHelper { + @Override + public CreativeModeTab.Builder constructTabBuilder() { + return CreativeModeTab.builder(); + } + + @Override + @SuppressWarnings("null") + public BlockEntityType createBlockEntityType(BlockEntityConstructor constructor, Block... blocks) { + // Quote: "Build using null; vanilla does some datafixer shenanigans with the parameter that we don't need." + //noinspection DataFlowIssue + return BlockEntityType.Builder.of(constructor::get, blocks).build(null); + } + + @Override + public MenuType registerMenuType(TypedMenuConstructor menuConstructor) { + return IMenuTypeExtension.create(menuConstructor::createMenu); + } +} diff --git a/projects/NeoForge/src/main/java/li/cil/ocreloaded/neoforge/common/OCReloaded.java b/projects/NeoForge/src/main/java/li/cil/ocreloaded/neoforge/common/OCReloaded.java index be80e26..2cf6b99 100644 --- a/projects/NeoForge/src/main/java/li/cil/ocreloaded/neoforge/common/OCReloaded.java +++ b/projects/NeoForge/src/main/java/li/cil/ocreloaded/neoforge/common/OCReloaded.java @@ -3,6 +3,7 @@ import li.cil.ocreloaded.minecraft.common.registry.CommonRegistered; import li.cil.ocreloaded.minecraft.server.CommonServerHooks; +import net.neoforged.bus.api.IEventBus; import net.neoforged.bus.api.SubscribeEvent; import net.neoforged.fml.common.EventBusSubscriber; import net.neoforged.fml.common.Mod; @@ -13,7 +14,7 @@ public class OCReloaded { public static final String MOD_ID = "ocreloaded"; - public OCReloaded() { + public OCReloaded(IEventBus bus) { CommonRegistered.initialize(); } diff --git a/projects/NeoForge/src/main/resources/META-INF/neoforge.mods.toml b/projects/NeoForge/src/main/resources/META-INF/neoforge.mods.toml index cbbd1c8..77bd3cf 100644 --- a/projects/NeoForge/src/main/resources/META-INF/neoforge.mods.toml +++ b/projects/NeoForge/src/main/resources/META-INF/neoforge.mods.toml @@ -5,10 +5,10 @@ license = "See the LICENSE file included in the source code of this mod" [[mods]] modId = "ocreloaded" -version = "{version}" +version = "${version}" displayName = "OpenComputers Reloaded" displayURL = "https://oc.cil.li/" -logoFile = "../../../../../Minecraft/src/main/resources/ocreloaded/textures/gui/logo.png" +logoFile = "assets/ocreloaded/textures/gui/logo.png" logoBlur = false credits = "Based on the original OpenComputers mod, which was inspired by a few mods, most notably ComputerCraft." authors = "EveryOS, 6TELOIV, Walksanator, timuzkas. Resources are from authors of original OpenComputers (Sangar, payonel, Vexatos and others)" diff --git a/projects/NeoForge/src/main/resources/META-INF/services/li.cil.ocreloaded.minecraft.common.registry.IPlatformRegistryHelper b/projects/NeoForge/src/main/resources/META-INF/services/li.cil.ocreloaded.minecraft.common.registry.IPlatformRegistryHelper new file mode 100644 index 0000000..ca679fe --- /dev/null +++ b/projects/NeoForge/src/main/resources/META-INF/services/li.cil.ocreloaded.minecraft.common.registry.IPlatformRegistryHelper @@ -0,0 +1 @@ +li.cil.ocreloaded.neoforge.common.NeoPlatformRegistryHelper \ No newline at end of file diff --git a/projects/NeoForge/src/main/resources/META-INF/services/li.cil.ocreloaded.minecraft.common.util.IPlatformMenuHelper b/projects/NeoForge/src/main/resources/META-INF/services/li.cil.ocreloaded.minecraft.common.util.IPlatformMenuHelper new file mode 100644 index 0000000..437dc31 --- /dev/null +++ b/projects/NeoForge/src/main/resources/META-INF/services/li.cil.ocreloaded.minecraft.common.util.IPlatformMenuHelper @@ -0,0 +1 @@ +li.cil.ocreloaded.neoforge.common.NeoPlatformMenuHelper \ No newline at end of file diff --git a/projects/NeoForge/src/main/resources/ocreloaded.mixins.json b/projects/NeoForge/src/main/resources/ocreloaded.mixins.json deleted file mode 100644 index 8d541a8..0000000 --- a/projects/NeoForge/src/main/resources/ocreloaded.mixins.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "required": true, - "package": "oc.cil.ocreloaded.mixin", - "compatibilityLevel": "JAVA_17", - "minVersion": "0.8", - "client": [ - ], - "mixins": [ - ], - "injectors": { - "defaultRequire": 1 - } -} \ No newline at end of file diff --git a/projects/NeoForge/src/main/resources/pack.mcmeta b/projects/NeoForge/src/main/resources/pack.mcmeta deleted file mode 100644 index 8248de5..0000000 --- a/projects/NeoForge/src/main/resources/pack.mcmeta +++ /dev/null @@ -1,6 +0,0 @@ -{ - "pack": { - "pack_format": 22, - "description": "OpenComputers Reloaded Resource Pack" - } -} \ No newline at end of file diff --git a/tools/check_crlf.py b/tools/check_crlf.py index 46934ef..032003b 100755 --- a/tools/check_crlf.py +++ b/tools/check_crlf.py @@ -6,7 +6,7 @@ def main() -> int: any_failed = False for file_name in get_text_files(): - if is_file_crlf(file_name): + if is_file_crlf(file_name) and file_name != "gradlew.bat": # gradlew.bat gets a pass, it's meant for windows. print(f"::error file={file_name},title=File contains CRLF line endings::The file '{file_name}' was committed with CRLF new lines. Please make sure your git client is configured correctly and you are not uploading files directly to GitHub via the web interface.") any_failed = True