From 6dbacc47c7db04128a3f9b80ec0e54ee2dae2f35 Mon Sep 17 00:00:00 2001 From: Jason Gronn Date: Sun, 28 Sep 2025 21:29:40 -0400 Subject: [PATCH 01/10] Fabric somewhat runs --- .gitignore | 3 +- buildSrc/src/main/kotlin/oc-common.gradle.kts | 3 + buildSrc/src/main/kotlin/oc-loader.gradle.kts | 14 ---- projects/Core/build.gradle.kts | 15 +---- projects/Fabric/build.gradle.kts | 12 +++- .../api/registry/menu/FabricMenuRegistry.java | 27 ++++++++ .../registries/FabricDeferredRegister.java | 61 ++++++++++++++++++ .../registries/FabricRegistrySupplier.java | 64 +++++++++++++++++++ .../api/service/FabricModUtilService.java | 25 ++++++++ .../fabric/client/OCReloadedClient.java | 2 +- ...d.minecraft.api.registry.menu.MenuRegistry | 1 + ...oaded.minecraft.api.service.ModUtilService | 1 + .../Fabric/src/main/resources/fabric.mod.json | 2 +- projects/Minecraft/build.gradle.kts | 29 +-------- .../client/assets/ClientTextures.java | 16 ++--- .../client/registry/ClientRegistered.java | 13 ++-- .../client/renderer/entity/RenderUtil.java | 11 ++-- .../screen/GuiGraphicsDrawingContext.java | 2 +- .../MultiBufferSourceDrawingContext.java | 22 +++---- .../minecraft/client/sound/BeepSound.java | 2 +- .../minecraft/client/sound/SoundPlayer.java | 2 +- .../common/assets/SharedTextures.java | 18 +++--- .../minecraft/common/block/CaseBlock.java | 8 +-- .../minecraft/common/block/ScreenBlock.java | 7 +- .../common/entity/CaseBlockEntity.java | 24 +++---- .../common/entity/KeyboardBlockEntity.java | 9 +-- .../common/entity/ScreenBlockEntity.java | 9 +-- .../integration/vanilla/VanillaRecipes.java | 14 ++-- .../minecraft/common/network/NetworkUtil.java | 22 +++---- .../recipe/RecipeRegistrationDelegate.java | 4 +- .../minecraft/common/recipe/Recipes.java | 35 +++++----- .../common/registry/CommonRegistered.java | 25 ++++---- .../server/machine/MachineSetup.java | 6 +- .../machine/fssup/LootFileSystemSupplier.java | 2 +- .../server/machine/lua/LuaCFactory.java | 2 +- .../src/main/resources/ocreloaded.mixins.json | 2 +- projects/MinecraftAPI/build.gradle.kts | 15 +++++ .../registry/CreativeTabRegistry.java | 16 +++++ .../BlockEntityRendererRegistry.java | 17 +++++ .../rendering/ColorHandlerRegistry.java | 36 +++++++++++ .../registry/registries/RegistrySupplier.java | 13 ++++ .../minecraft/api/BlockEntityTypeHelper.java | 22 +++++++ .../minecraft/api/ServiceHelper.java | 13 ++++ .../api/registry/menu/MenuRegistry.java | 36 +++++++++++ .../registry/registries/DeferredRegister.java | 23 +++++++ .../minecraft/api/service/ModUtilService.java | 17 +++++ projects/NeoForge/build.gradle.kts | 4 +- .../src/main/resources/ocreloaded.mixins.json | 2 +- settings.gradle.kts | 1 + 49 files changed, 541 insertions(+), 188 deletions(-) create mode 100644 projects/Fabric/src/main/java/li/cil/ocreloaded/fabric/api/registry/menu/FabricMenuRegistry.java create mode 100644 projects/Fabric/src/main/java/li/cil/ocreloaded/fabric/api/registry/registries/FabricDeferredRegister.java create mode 100644 projects/Fabric/src/main/java/li/cil/ocreloaded/fabric/api/registry/registries/FabricRegistrySupplier.java create mode 100644 projects/Fabric/src/main/java/li/cil/ocreloaded/fabric/api/service/FabricModUtilService.java create mode 100644 projects/Fabric/src/main/resources/META-INF/services/li.cil.ocreloaded.minecraft.api.registry.menu.MenuRegistry create mode 100644 projects/Fabric/src/main/resources/META-INF/services/li.cil.ocreloaded.minecraft.api.service.ModUtilService create mode 100644 projects/MinecraftAPI/build.gradle.kts create mode 100644 projects/MinecraftAPI/src/main/java/dev/architectury/registry/CreativeTabRegistry.java create mode 100644 projects/MinecraftAPI/src/main/java/dev/architectury/registry/client/rendering/BlockEntityRendererRegistry.java create mode 100644 projects/MinecraftAPI/src/main/java/dev/architectury/registry/client/rendering/ColorHandlerRegistry.java create mode 100644 projects/MinecraftAPI/src/main/java/dev/architectury/registry/registries/RegistrySupplier.java create mode 100644 projects/MinecraftAPI/src/main/java/li/cil/ocreloaded/minecraft/api/BlockEntityTypeHelper.java create mode 100644 projects/MinecraftAPI/src/main/java/li/cil/ocreloaded/minecraft/api/ServiceHelper.java create mode 100644 projects/MinecraftAPI/src/main/java/li/cil/ocreloaded/minecraft/api/registry/menu/MenuRegistry.java create mode 100644 projects/MinecraftAPI/src/main/java/li/cil/ocreloaded/minecraft/api/registry/registries/DeferredRegister.java create mode 100644 projects/MinecraftAPI/src/main/java/li/cil/ocreloaded/minecraft/api/service/ModUtilService.java 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/buildSrc/src/main/kotlin/oc-common.gradle.kts b/buildSrc/src/main/kotlin/oc-common.gradle.kts index c6d3458..1e7d726 100644 --- a/buildSrc/src/main/kotlin/oc-common.gradle.kts +++ b/buildSrc/src/main/kotlin/oc-common.gradle.kts @@ -7,6 +7,9 @@ configurations { create("coreJava") { isCanBeResolved = true } + create("apiJava") { + isCanBeResolved = true + } } repositories { diff --git a/buildSrc/src/main/kotlin/oc-loader.gradle.kts b/buildSrc/src/main/kotlin/oc-loader.gradle.kts index 02eed0a..b3afd29 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"], diff --git a/projects/Core/build.gradle.kts b/projects/Core/build.gradle.kts index fc72190..4c62f67 100644 --- a/projects/Core/build.gradle.kts +++ b/projects/Core/build.gradle.kts @@ -6,19 +6,8 @@ repositories { mavenCentral() } -configurations { - create("coreJava") { - isCanBeResolved = false - isCanBeConsumed = true - } -} - -artifacts { - add("coreJava", sourceSets["main"].java.sourceDirectories.singleFile) -} - dependencies { - implementation(libs.typesafeConfig) + api(libs.typesafeConfig) implementation(libs.slf4j) - implementation(files("../../libs/OpenComputers-JNLua.jar", "../../libs/OpenComputers-LuaJ.jar")) + 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..4c14fb0 100644 --- a/projects/Fabric/build.gradle.kts +++ b/projects/Fabric/build.gradle.kts @@ -1,3 +1,5 @@ +evaluationDependsOn(":Minecraft") + plugins { id("oc-loader") alias(libs.plugins.loom) @@ -16,7 +18,11 @@ dependencies { modImplementation("net.fabricmc:fabric-loader:${libs.versions.fabricLoader.get()}") modImplementation("net.fabricmc.fabric-api:fabric-api:${libs.versions.fabricApi.get()}") - compileOnly(project(":Minecraft")) - commonJava(project(path = ":Minecraft", configuration = "commonJava")) - commonResources(project(path = ":Minecraft", configuration = "commonResources")) + implementation(project(":Minecraft")) +} + +sourceSets.named("main") { + resources { + srcDir(project(":Minecraft").sourceSets.named("main").get().resources.srcDirs) + } } \ No newline at end of file diff --git a/projects/Fabric/src/main/java/li/cil/ocreloaded/fabric/api/registry/menu/FabricMenuRegistry.java b/projects/Fabric/src/main/java/li/cil/ocreloaded/fabric/api/registry/menu/FabricMenuRegistry.java new file mode 100644 index 0000000..af58d37 --- /dev/null +++ b/projects/Fabric/src/main/java/li/cil/ocreloaded/fabric/api/registry/menu/FabricMenuRegistry.java @@ -0,0 +1,27 @@ +package li.cil.ocreloaded.fabric.api.registry.menu; + +import li.cil.ocreloaded.minecraft.api.registry.menu.MenuRegistry; +import net.fabricmc.fabric.api.screenhandler.v1.ExtendedScreenHandlerType; +import net.fabricmc.fabric.api.screenhandler.v1.ExtendedScreenHandlerType.ExtendedFactory; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.network.codec.StreamCodec; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.inventory.AbstractContainerMenu; +import net.minecraft.world.inventory.MenuType; + +public class FabricMenuRegistry implements MenuRegistry { + + @Override + public void openExtendedMenuS(ServerPlayer serverPlayer, T caseBlockEntity, Object object) { + throw new UnsupportedOperationException("Unimplemented method 'openExtendedMenuS'"); + } + + @Override + public MenuType ofExtendedS(TypedMenuConstructor menuConstructor) { + ExtendedFactory screenFactory = (a, b, c) -> menuConstructor.createMenu(a, b, c); + return new ExtendedScreenHandlerType<>( + screenFactory, + StreamCodec.of((a, b) -> {}, c -> null)); + } + +} diff --git a/projects/Fabric/src/main/java/li/cil/ocreloaded/fabric/api/registry/registries/FabricDeferredRegister.java b/projects/Fabric/src/main/java/li/cil/ocreloaded/fabric/api/registry/registries/FabricDeferredRegister.java new file mode 100644 index 0000000..5e1e63d --- /dev/null +++ b/projects/Fabric/src/main/java/li/cil/ocreloaded/fabric/api/registry/registries/FabricDeferredRegister.java @@ -0,0 +1,61 @@ +package li.cil.ocreloaded.fabric.api.registry.registries; + +import java.util.ArrayList; +import java.util.List; +import java.util.function.Supplier; + +import dev.architectury.registry.registries.RegistrySupplier; +import li.cil.ocreloaded.minecraft.api.registry.registries.DeferredRegister; +import net.minecraft.core.Registry; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.resources.ResourceKey; +import net.minecraft.resources.ResourceLocation; + +public class FabricDeferredRegister implements DeferredRegister { + + private final String modId; + private final ResourceKey> registryKey; + + private final List> registrySuppliers = new ArrayList<>(); + + private boolean registrationCompleted = false; + + public FabricDeferredRegister(String modId, ResourceKey> registryKey) { + this.modId = modId; + this.registryKey = registryKey; + } + + @Override + @SuppressWarnings("unchecked") + public RegistrySupplier register(String path, Supplier valueSupplier) { + if (registrationCompleted) { + throw new IllegalStateException("Registry already initialized"); + } + + System.out.println(registryKey.location()); + FabricRegistrySupplier registrySupplier = new FabricRegistrySupplier( + () -> { + System.out.println(BuiltInRegistries.REGISTRY.get(registryKey.location())); + System.out.println(ResourceLocation.fromNamespaceAndPath(modId, path)); + U v = valueSupplier.get(); + System.out.println(v); + return Registry.register((Registry) BuiltInRegistries.REGISTRY.get(registryKey.location()), ResourceLocation.fromNamespaceAndPath(modId, path), v); + }); + + registrySuppliers.add(registrySupplier); + + return registrySupplier; + } + + @Override + public void register() { + if (registrationCompleted) { + throw new IllegalStateException("Registry already initialized"); + } + + for (FabricRegistrySupplier supplier: registrySuppliers) { + supplier.resolve(); + } + } + +} diff --git a/projects/Fabric/src/main/java/li/cil/ocreloaded/fabric/api/registry/registries/FabricRegistrySupplier.java b/projects/Fabric/src/main/java/li/cil/ocreloaded/fabric/api/registry/registries/FabricRegistrySupplier.java new file mode 100644 index 0000000..2167159 --- /dev/null +++ b/projects/Fabric/src/main/java/li/cil/ocreloaded/fabric/api/registry/registries/FabricRegistrySupplier.java @@ -0,0 +1,64 @@ +package li.cil.ocreloaded.fabric.api.registry.registries; + +import java.util.ArrayList; +import java.util.List; +import java.util.function.Consumer; +import java.util.function.Supplier; + +import dev.architectury.registry.registries.RegistrySupplier; + +public class FabricRegistrySupplier implements RegistrySupplier { + + private final Supplier supplier; + private final List> listeners = new ArrayList<>(); + + private T resolved = null; + + public FabricRegistrySupplier(Supplier supplier) { + this.supplier = supplier; + } + + @Override + public T get() { + if (resolved == null) { + resolve(); + } + + return value(); + } + + @Override + public T value() { + if (resolved == null) { + throw new RuntimeException("Not yet resolved!"); + } + + return resolved; + } + + @Override + public void listen(Consumer listener) { + if (resolved != null) { + listener.accept(resolved); + } else { + listeners.add(listener); + } + } + + public void resolve() { + if (resolved != null) { + return; + } + + this.resolved = supplier.get(); + if (resolved == null) { + throw new RuntimeException("Cannot resolve to null!"); + } + + for (Consumer listener: listeners) { + listener.accept(resolved); + } + listeners.clear(); + } + +} diff --git a/projects/Fabric/src/main/java/li/cil/ocreloaded/fabric/api/service/FabricModUtilService.java b/projects/Fabric/src/main/java/li/cil/ocreloaded/fabric/api/service/FabricModUtilService.java new file mode 100644 index 0000000..32500f7 --- /dev/null +++ b/projects/Fabric/src/main/java/li/cil/ocreloaded/fabric/api/service/FabricModUtilService.java @@ -0,0 +1,25 @@ +package li.cil.ocreloaded.fabric.api.service; + +import li.cil.ocreloaded.fabric.api.registry.registries.FabricDeferredRegister; +import li.cil.ocreloaded.minecraft.api.BlockEntityTypeHelper.BlockEntityConstructor; +import li.cil.ocreloaded.minecraft.api.registry.registries.DeferredRegister; +import li.cil.ocreloaded.minecraft.api.service.ModUtilService; +import net.minecraft.core.Registry; +import net.minecraft.resources.ResourceKey; +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 FabricModUtilService implements ModUtilService { + + @Override + public DeferredRegister createDeferredRegister(String modId, ResourceKey> registryKey) { + return new FabricDeferredRegister(modId, registryKey); + } + + @Override + public BlockEntityType createBlockEntityType(BlockEntityConstructor constructor, Block[] blocks) { + return BlockEntityType.Builder.of(constructor::get, blocks).build(null); + } + +} 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..3202eab 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 @@ -8,6 +8,6 @@ public class OCReloadedClient implements ClientModInitializer { @Override public void onInitializeClient() { ClientRegistered.setup(); - CommonClientHooks.setup(); + //CommonClientHooks.setup(); } } diff --git a/projects/Fabric/src/main/resources/META-INF/services/li.cil.ocreloaded.minecraft.api.registry.menu.MenuRegistry b/projects/Fabric/src/main/resources/META-INF/services/li.cil.ocreloaded.minecraft.api.registry.menu.MenuRegistry new file mode 100644 index 0000000..104b409 --- /dev/null +++ b/projects/Fabric/src/main/resources/META-INF/services/li.cil.ocreloaded.minecraft.api.registry.menu.MenuRegistry @@ -0,0 +1 @@ +li.cil.ocreloaded.fabric.api.registry.menu.FabricMenuRegistry \ No newline at end of file diff --git a/projects/Fabric/src/main/resources/META-INF/services/li.cil.ocreloaded.minecraft.api.service.ModUtilService b/projects/Fabric/src/main/resources/META-INF/services/li.cil.ocreloaded.minecraft.api.service.ModUtilService new file mode 100644 index 0000000..e070323 --- /dev/null +++ b/projects/Fabric/src/main/resources/META-INF/services/li.cil.ocreloaded.minecraft.api.service.ModUtilService @@ -0,0 +1 @@ +li.cil.ocreloaded.fabric.api.service.FabricModUtilService \ 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..14bc7db 100644 --- a/projects/Minecraft/build.gradle.kts +++ b/projects/Minecraft/build.gradle.kts @@ -1,38 +1,15 @@ plugins { id("oc-neo-based") + `java-library` } 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")) + api(project(":MinecraftAPI")) } tasks.register("copyResources") { 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..b6d5ad7 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,22 @@ 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.api.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; +import li.cil.ocreloaded.minecraft.common.registry.CommonRegistered; 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)); + // TODO: COMEBACK + //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)); + //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/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/sound/BeepSound.java b/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/client/sound/BeepSound.java index 949aa8e..1bdd325 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 @@ -60,7 +60,7 @@ public ByteBuffer read(int capacity) throws IOException { public WeighedSoundEvents resolve(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..fe96def 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,12 @@ package li.cil.ocreloaded.minecraft.common.block; -import dev.architectury.registry.menu.MenuRegistry; +import li.cil.ocreloaded.minecraft.api.registry.menu.MenuRegistry; import li.cil.ocreloaded.minecraft.common.entity.CaseBlockEntity; 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,14 +43,15 @@ public int getTier() { } @Override - public InteractionResult use(BlockState state, Level level, BlockPos pos, Player player, InteractionHand hand, BlockHitResult hit) { + public InteractionResult useWithoutItem(BlockState state, Level level, BlockPos pos, Player player, 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); + // TODO: COMEBACK + //MenuRegistry.openExtendedMenu(serverPlayer, caseBlockEntity, caseBlockEntity::writeData); } return InteractionResult.CONSUME; 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..8fa2e38 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,6 +1,6 @@ package li.cil.ocreloaded.minecraft.common.block; -import dev.architectury.registry.menu.MenuRegistry; +import li.cil.ocreloaded.minecraft.api.registry.menu.MenuRegistry; import li.cil.ocreloaded.minecraft.common.entity.ScreenBlockEntity; import li.cil.ocreloaded.minecraft.common.menu.provider.ScreenMenuProvider; import net.minecraft.core.BlockPos; @@ -60,7 +60,7 @@ public void playerDestroy(Level level, Player player, BlockPos blockPos, BlockSt } @Override - public InteractionResult use(BlockState state, Level level, BlockPos pos, Player player, InteractionHand hand, BlockHitResult hit) { + public InteractionResult useWithoutItem(BlockState state, Level level, BlockPos pos, Player player, BlockHitResult hitResult) { if (!level.isClientSide()) { MenuProvider menuProvider = state.getMenuProvider(level, pos); if ( @@ -68,7 +68,8 @@ public InteractionResult use(BlockState state, Level level, BlockPos pos, Player && player instanceof ServerPlayer serverPlayer && isKeyboardConnected(level, pos) ) { - MenuRegistry.openExtendedMenu(serverPlayer, menuProvider, screenMenuProvider::writeData); + // TODO: COMEBACK + //MenuRegistry.openExtendedMenu(serverPlayer, menuProvider, screenMenuProvider::writeData); return InteractionResult.CONSUME; } } diff --git a/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/entity/CaseBlockEntity.java b/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/entity/CaseBlockEntity.java index 713b9aa..ecac373 100644 --- a/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/entity/CaseBlockEntity.java +++ b/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/entity/CaseBlockEntity.java @@ -42,6 +42,7 @@ import li.cil.ocreloaded.minecraft.common.util.ItemList; import li.cil.ocreloaded.minecraft.common.util.ItemList.ItemChangeListener; import net.minecraft.core.BlockPos; +import net.minecraft.core.HolderLookup; import net.minecraft.core.NonNullList; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.FriendlyByteBuf; @@ -83,23 +84,23 @@ public NetworkNode networkNode() { } @Override - public void load(CompoundTag compoundTag) { - super.load(compoundTag); - ContainerHelper.loadAllItems(compoundTag, this.items); + public void loadAdditional(CompoundTag compoundTag, HolderLookup.Provider registries) { + super.loadAdditional(compoundTag, registries); + ContainerHelper.loadAllItems(compoundTag, this.items, registries); load(new NBTPersistenceHolder(compoundTag, SettingsConstants.namespace)); updateBlockState(); } @Override - public void saveAdditional(CompoundTag compoundTag) { - super.saveAdditional(compoundTag); - ContainerHelper.saveAllItems(compoundTag, this.items); + public void saveAdditional(CompoundTag compoundTag, HolderLookup.Provider registries) { + super.saveAdditional(compoundTag, registries); + ContainerHelper.saveAllItems(compoundTag, this.items, registries); save(new NBTPersistenceHolder(compoundTag, SettingsConstants.namespace)); } @Override - public CompoundTag getUpdateTag() { - CompoundTag compoundTag = super.getUpdateTag(); + public CompoundTag getUpdateTag(HolderLookup.Provider registries) { + CompoundTag compoundTag = super.getUpdateTag(registries); compoundTag.putBoolean(TAG_POWERED, this.powered); return compoundTag; @@ -249,9 +250,10 @@ private void loadComponent(ItemStack itemStack, Map comp if (!networkNode.component().isPresent()) return; Component component = networkNode.component().get(); - CompoundTag tag = itemStack.getOrCreateTag(); - component.load(new NBTPersistenceHolder(tag, SettingsConstants.namespace)); - component.save(new NBTPersistenceHolder(tag, SettingsConstants.namespace)); + // TODO: COMEBACK + // CompoundTag tag = itemStack.getOrCreateTag(); + // component.load(new NBTPersistenceHolder(tag, SettingsConstants.namespace)); + // component.save(new NBTPersistenceHolder(tag, SettingsConstants.namespace)); // TODO: Reset component on fresh boot if tmp is not persistant components.put(itemStack, networkNode); 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..6d55bd2 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 @@ -9,6 +9,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,14 +37,14 @@ public void setRemoved() { } @Override - public void load(CompoundTag compoundTag) { - super.load(compoundTag); + public void loadAdditional(CompoundTag compoundTag, 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(CompoundTag compoundTag, HolderLookup.Provider registries) { + super.saveAdditional(compoundTag, registries); networkNode.save(new NBTPersistenceHolder(compoundTag, SettingsConstants.namespace)); } 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..0646f3c 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 @@ -23,6 +23,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.server.level.ServerLevel; import net.minecraft.server.level.ServerPlayer; @@ -77,8 +78,8 @@ public void setLevel(Level level) { } @Override - public void load(CompoundTag compoundTag) { - super.load(compoundTag); + public void loadAdditional(CompoundTag compoundTag, HolderLookup.Provider registries) { + super.loadAdditional(compoundTag, registries); networkNode.load(new NBTPersistenceHolder(compoundTag, SettingsConstants.namespace)); if (this.level == null || level.isClientSide) return; @@ -86,8 +87,8 @@ public void load(CompoundTag compoundTag) { } @Override - public void saveAdditional(CompoundTag compoundTag) { - super.saveAdditional(compoundTag); + public void saveAdditional(CompoundTag compoundTag, HolderLookup.Provider registries) { + super.saveAdditional(compoundTag, registries); networkNode.save(new NBTPersistenceHolder(compoundTag, SettingsConstants.namespace)); } 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/network/NetworkUtil.java b/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/network/NetworkUtil.java index 7f1de62..1987b06 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 @@ -4,7 +4,6 @@ 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; @@ -20,34 +19,35 @@ public class NetworkUtil { private NetworkUtil() {} + // TODO: COMEBACK public void messageClient(NetworkMessage message, Player player) { if (player instanceof ServerPlayer serverPlayer) { - ResourceLocation location = new ResourceLocation(OCReloadedCommon.MOD_ID, message.getType()); + ResourceLocation location = ResourceLocation.fromNamespaceAndPath(OCReloadedCommon.MOD_ID, message.getType()); FriendlyByteBuf buffer = encodeMessage(message); - NetworkManager.sendToPlayer(serverPlayer, location, buffer); + //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()); + ResourceLocation location = ResourceLocation.fromNamespaceAndPath(OCReloadedCommon.MOD_ID, message.getType()); FriendlyByteBuf buffer = encodeMessage(message); - NetworkManager.sendToServer(location, buffer); + //NetworkManager.sendToServer(location, buffer); } public void messageManyClients(NetworkMessage message, List players) { - ResourceLocation location = new ResourceLocation(OCReloadedCommon.MOD_ID, message.getType()); + ResourceLocation location = ResourceLocation.fromNamespaceAndPath(OCReloadedCommon.MOD_ID, message.getType()); FriendlyByteBuf buffer = encodeMessage(message); - NetworkManager.sendToPlayers(players, location, buffer); + //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) -> { + ResourceLocation location = ResourceLocation.fromNamespaceAndPath(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) { @@ -69,12 +69,12 @@ public void registerHandler(String type, NetworkHandler handler) { 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()); + ResourceLocation location = ResourceLocation.fromNamespaceAndPath(OCReloadedCommon.MOD_ID, message.getType()); NetworkHandler handler = (NetworkHandler) HANDLERS.get(location.toString()); if (handler == null) { throw new IllegalArgumentException("No handler for message type: " + location); 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..b0b0e28 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 @@ -124,7 +124,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 +151,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 +284,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 +337,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 +376,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..a4036f2 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,10 @@ 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 li.cil.ocreloaded.minecraft.api.BlockEntityTypeHelper; +import li.cil.ocreloaded.minecraft.api.registry.menu.MenuRegistry; +import li.cil.ocreloaded.minecraft.api.registry.registries.DeferredRegister; import li.cil.ocreloaded.minecraft.common.OCReloadedCommon; import li.cil.ocreloaded.minecraft.common.block.CaseBlock; import li.cil.ocreloaded.minecraft.common.block.KeyboardBlock; @@ -58,14 +59,14 @@ public static void initialize() { } // Creative mode tabs - public static final RegistrySupplier CREATIVE_TAB = CREATIVE_TABS.register("creative", () -> CreativeTabRegistry.create( + /*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()) - )); + ));*/ // 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)); @@ -142,15 +143,17 @@ public static void initialize() { public static final RegistrySupplier EEPROM_LUA = ITEMS.register("eeprom_lua", () -> new LuaEepromItem(DEFAULT_ITEM_PROPERTIES)); // Menu types + // TODO: COMEBACK 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)); // 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 RegistrySupplier> CASE_BLOCK_ENTITY = BLOCK_ENTITIES.register("case", () -> BlockEntityTypeHelper + .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 RegistrySupplier> SCREEN_BLOCK_ENTITY = BLOCK_ENTITIES.register("screen", () -> BlockEntityTypeHelper + .createBlockEntityType(ScreenBlockEntity::new, SCREEN_BLOCK_TIER_1.get(), SCREEN_BLOCK_TIER_2.get(), SCREEN_BLOCK_TIER_3.get())); + public static final RegistrySupplier> KEYBOARD_BLOCK_ENTITY = BLOCK_ENTITIES.register("keyboard", () -> BlockEntityTypeHelper + .createBlockEntityType(KeyboardBlockEntity::new, KEYBOARD_BLOCK.get())); } 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..645589e 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 @@ -81,7 +81,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); } 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/MinecraftAPI/build.gradle.kts b/projects/MinecraftAPI/build.gradle.kts new file mode 100644 index 0000000..848f5e7 --- /dev/null +++ b/projects/MinecraftAPI/build.gradle.kts @@ -0,0 +1,15 @@ +plugins { + id("oc-neo-based") +} + +neoForge { + neoFormVersion = libs.versions.neoForm.get() +} + +artifacts { + add("apiJava", sourceSets["main"].java.sourceDirectories.singleFile) +} + +dependencies { + +} \ No newline at end of file diff --git a/projects/MinecraftAPI/src/main/java/dev/architectury/registry/CreativeTabRegistry.java b/projects/MinecraftAPI/src/main/java/dev/architectury/registry/CreativeTabRegistry.java new file mode 100644 index 0000000..6f1b753 --- /dev/null +++ b/projects/MinecraftAPI/src/main/java/dev/architectury/registry/CreativeTabRegistry.java @@ -0,0 +1,16 @@ +package dev.architectury.registry; + +import java.util.function.Supplier; + +import net.minecraft.network.chat.Component; +import net.minecraft.world.item.CreativeModeTab; +import net.minecraft.world.item.ItemStack; + +public class CreativeTabRegistry { + + public CreativeModeTab create(Component title, Supplier iconSupplier) { + throw new UnsupportedOperationException("Not Implemented!"); + } + +} + \ No newline at end of file diff --git a/projects/MinecraftAPI/src/main/java/dev/architectury/registry/client/rendering/BlockEntityRendererRegistry.java b/projects/MinecraftAPI/src/main/java/dev/architectury/registry/client/rendering/BlockEntityRendererRegistry.java new file mode 100644 index 0000000..ce28122 --- /dev/null +++ b/projects/MinecraftAPI/src/main/java/dev/architectury/registry/client/rendering/BlockEntityRendererRegistry.java @@ -0,0 +1,17 @@ +package dev.architectury.registry.client.rendering; + +import java.util.function.Function; + +import net.minecraft.client.renderer.blockentity.BlockEntityRenderer; +import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.BlockEntityType; + +public class BlockEntityRendererRegistry { + + public static void register(BlockEntityType blockEntityType, Function> factory) { + // TODO Auto-generated method stub + throw new UnsupportedOperationException("Unimplemented method 'register'"); + } + +} diff --git a/projects/MinecraftAPI/src/main/java/dev/architectury/registry/client/rendering/ColorHandlerRegistry.java b/projects/MinecraftAPI/src/main/java/dev/architectury/registry/client/rendering/ColorHandlerRegistry.java new file mode 100644 index 0000000..c1c384d --- /dev/null +++ b/projects/MinecraftAPI/src/main/java/dev/architectury/registry/client/rendering/ColorHandlerRegistry.java @@ -0,0 +1,36 @@ +package dev.architectury.registry.client.rendering; + +import net.minecraft.core.BlockPos; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.BlockAndTintGetter; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockState; + +public class ColorHandlerRegistry { + + public static void registerBlockColors(ColorRegisteryBlockEntry colorRegistryEntry, Block[] blocks) { + // TODO Auto-generated method stub + throw new UnsupportedOperationException("Unimplemented method 'registerBlockColors'"); + } + + + + public static void registerItemColors(ColorRegisteryItemEntry colorRegisteryEntry, Item[] items) { + // TODO Auto-generated method stub + throw new UnsupportedOperationException("Unimplemented method 'registerItemColors'"); + } + + public static interface ColorRegisteryBlockEntry { + + int getColor(BlockState blockState, BlockAndTintGetter blockAndTintGetter, BlockPos blockPos, int tintIndex); + + } + + public static interface ColorRegisteryItemEntry { + + int getColor(ItemStack itemStack, int tintIndex); + + } + +} diff --git a/projects/MinecraftAPI/src/main/java/dev/architectury/registry/registries/RegistrySupplier.java b/projects/MinecraftAPI/src/main/java/dev/architectury/registry/registries/RegistrySupplier.java new file mode 100644 index 0000000..f0c8339 --- /dev/null +++ b/projects/MinecraftAPI/src/main/java/dev/architectury/registry/registries/RegistrySupplier.java @@ -0,0 +1,13 @@ +package dev.architectury.registry.registries; + +import java.util.function.Consumer; + +public interface RegistrySupplier { + + T get(); + + T value(); + + void listen(Consumer listener); + +} diff --git a/projects/MinecraftAPI/src/main/java/li/cil/ocreloaded/minecraft/api/BlockEntityTypeHelper.java b/projects/MinecraftAPI/src/main/java/li/cil/ocreloaded/minecraft/api/BlockEntityTypeHelper.java new file mode 100644 index 0000000..5925c37 --- /dev/null +++ b/projects/MinecraftAPI/src/main/java/li/cil/ocreloaded/minecraft/api/BlockEntityTypeHelper.java @@ -0,0 +1,22 @@ +package li.cil.ocreloaded.minecraft.api; + +import li.cil.ocreloaded.minecraft.api.service.ModUtilService; +import net.minecraft.core.BlockPos; +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 class BlockEntityTypeHelper { + + static final ModUtilService service = ServiceHelper.loadService(ModUtilService.class); + + public static BlockEntityType createBlockEntityType(BlockEntityConstructor constructor, Block... blocks) { + return service.createBlockEntityType(constructor, blocks); + }; + + public static interface BlockEntityConstructor { + T get(BlockPos blockPos, BlockState blockState); + } + +} diff --git a/projects/MinecraftAPI/src/main/java/li/cil/ocreloaded/minecraft/api/ServiceHelper.java b/projects/MinecraftAPI/src/main/java/li/cil/ocreloaded/minecraft/api/ServiceHelper.java new file mode 100644 index 0000000..f8cacaa --- /dev/null +++ b/projects/MinecraftAPI/src/main/java/li/cil/ocreloaded/minecraft/api/ServiceHelper.java @@ -0,0 +1,13 @@ +package li.cil.ocreloaded.minecraft.api; + +import java.util.ServiceLoader; + +public final class ServiceHelper { + + private ServiceHelper() {} + + public static T loadService(Class serviceCls) { + return ServiceLoader.load(serviceCls).findFirst().orElseThrow(); + } + +} diff --git a/projects/MinecraftAPI/src/main/java/li/cil/ocreloaded/minecraft/api/registry/menu/MenuRegistry.java b/projects/MinecraftAPI/src/main/java/li/cil/ocreloaded/minecraft/api/registry/menu/MenuRegistry.java new file mode 100644 index 0000000..5043b35 --- /dev/null +++ b/projects/MinecraftAPI/src/main/java/li/cil/ocreloaded/minecraft/api/registry/menu/MenuRegistry.java @@ -0,0 +1,36 @@ +package li.cil.ocreloaded.minecraft.api.registry.menu; + +import javax.annotation.Nullable; + +import li.cil.ocreloaded.minecraft.api.ServiceHelper; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.entity.player.Inventory; +import net.minecraft.world.inventory.AbstractContainerMenu; +import net.minecraft.world.inventory.MenuType; + +public interface MenuRegistry { + + static final MenuRegistry service = ServiceHelper.loadService(MenuRegistry.class); + + void openExtendedMenuS(ServerPlayer serverPlayer, T caseBlockEntity, Object object); + + MenuType ofExtendedS(TypedMenuConstructor menuConstructor); + + public static void openExtendedMenu(ServerPlayer serverPlayer, T caseBlockEntity, Object object) { + service.openExtendedMenuS(serverPlayer, caseBlockEntity, object); + } + + public static MenuType ofExtended(TypedMenuConstructor menuConstructor) { + return service.ofExtendedS(menuConstructor); + } + + @FunctionalInterface + public interface TypedMenuConstructor { + + @Nullable + T createMenu(int containerId, Inventory playerInventory, FriendlyByteBuf buf); + + } + +} diff --git a/projects/MinecraftAPI/src/main/java/li/cil/ocreloaded/minecraft/api/registry/registries/DeferredRegister.java b/projects/MinecraftAPI/src/main/java/li/cil/ocreloaded/minecraft/api/registry/registries/DeferredRegister.java new file mode 100644 index 0000000..015808c --- /dev/null +++ b/projects/MinecraftAPI/src/main/java/li/cil/ocreloaded/minecraft/api/registry/registries/DeferredRegister.java @@ -0,0 +1,23 @@ +package li.cil.ocreloaded.minecraft.api.registry.registries; + +import java.util.function.Supplier; + +import dev.architectury.registry.registries.RegistrySupplier; +import li.cil.ocreloaded.minecraft.api.ServiceHelper; +import li.cil.ocreloaded.minecraft.api.service.ModUtilService; +import net.minecraft.core.Registry; +import net.minecraft.resources.ResourceKey; + +public interface DeferredRegister { + + static final ModUtilService service = ServiceHelper.loadService(ModUtilService.class); + + public static DeferredRegister create(String modId, ResourceKey> registryKey) { + return service.createDeferredRegister(modId, registryKey); + }; + + RegistrySupplier register(String path, Supplier valueSupplier); + + void register(); + +} diff --git a/projects/MinecraftAPI/src/main/java/li/cil/ocreloaded/minecraft/api/service/ModUtilService.java b/projects/MinecraftAPI/src/main/java/li/cil/ocreloaded/minecraft/api/service/ModUtilService.java new file mode 100644 index 0000000..08bfb10 --- /dev/null +++ b/projects/MinecraftAPI/src/main/java/li/cil/ocreloaded/minecraft/api/service/ModUtilService.java @@ -0,0 +1,17 @@ +package li.cil.ocreloaded.minecraft.api.service; + +import li.cil.ocreloaded.minecraft.api.BlockEntityTypeHelper.BlockEntityConstructor; +import li.cil.ocreloaded.minecraft.api.registry.registries.DeferredRegister; +import net.minecraft.core.Registry; +import net.minecraft.resources.ResourceKey; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.BlockEntityType; + +public interface ModUtilService { + + DeferredRegister createDeferredRegister(String modId, ResourceKey> registryKey); + + BlockEntityType createBlockEntityType(BlockEntityConstructor constructor, Block[] blocks); + +} diff --git a/projects/NeoForge/build.gradle.kts b/projects/NeoForge/build.gradle.kts index aa9519b..af01de4 100644 --- a/projects/NeoForge/build.gradle.kts +++ b/projects/NeoForge/build.gradle.kts @@ -20,7 +20,5 @@ neoForge { } dependencies { - compileOnly(project(":Minecraft")) - commonJava(project(path = ":Minecraft", configuration = "commonJava")) - commonResources(project(path = ":Minecraft", configuration = "commonResources")) + implementation(project(":Minecraft")) } \ 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 index 8d541a8..06a5e0e 100644 --- a/projects/NeoForge/src/main/resources/ocreloaded.mixins.json +++ b/projects/NeoForge/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/settings.gradle.kts b/settings.gradle.kts index 523c101..21e50b7 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -18,6 +18,7 @@ pluginManagement { rootProject.name = "OpenComputersReloaded" include("Core") +include("MinecraftAPI") include("Minecraft") include("NeoForge") include("Fabric") From b110564619e0c167cdf0c9f0b5ff77bd6d57b747 Mon Sep 17 00:00:00 2001 From: Jason Gronn Date: Mon, 29 Sep 2025 00:51:13 -0400 Subject: [PATCH 02/10] Let Fabric build, add more registry stuff --- projects/Fabric/build.gradle.kts | 30 +++++++++++++ .../FabricBlockEntityRendererRegistry.java | 19 ++++++++ .../rendering/FabricColorHandlerRegistry.java | 20 +++++++++ .../api/registry/menu/FabricMenuRegistry.java | 45 ++++++++++++++++++- .../fabric/client/OCReloadedClient.java | 2 +- ...ient.rendering.BlockEntityRendererRegistry | 1 + ...stry.client.rendering.ColorHandlerRegistry | 1 + .../minecraft/client/ColorHandlers.java | 2 +- .../client/registry/ClientRegistered.java | 11 +++-- .../minecraft/common/block/CaseBlock.java | 4 +- .../minecraft/common/block/ScreenBlock.java | 4 +- .../common/registry/CommonRegistered.java | 1 - .../BlockEntityRendererRegistry.java | 17 ------- .../rendering/ColorHandlerRegistry.java | 36 --------------- .../BlockEntityRendererRegistry.java | 21 +++++++++ .../rendering/ColorHandlerRegistry.java | 39 ++++++++++++++++ .../api/registry/menu/MenuRegistry.java | 29 +++++++++--- .../NeoForge/src/main/resources/pack.mcmeta | 2 +- 18 files changed, 208 insertions(+), 76 deletions(-) create mode 100644 projects/Fabric/src/main/java/li/cil/ocreloaded/fabric/api/registry/client/rendering/FabricBlockEntityRendererRegistry.java create mode 100644 projects/Fabric/src/main/java/li/cil/ocreloaded/fabric/api/registry/client/rendering/FabricColorHandlerRegistry.java create mode 100644 projects/Fabric/src/main/resources/META-INF/services/li.cil.ocreloaded.minecraft.api.registry.client.rendering.BlockEntityRendererRegistry create mode 100644 projects/Fabric/src/main/resources/META-INF/services/li.cil.ocreloaded.minecraft.api.registry.client.rendering.ColorHandlerRegistry delete mode 100644 projects/MinecraftAPI/src/main/java/dev/architectury/registry/client/rendering/BlockEntityRendererRegistry.java delete mode 100644 projects/MinecraftAPI/src/main/java/dev/architectury/registry/client/rendering/ColorHandlerRegistry.java create mode 100644 projects/MinecraftAPI/src/main/java/li/cil/ocreloaded/minecraft/api/registry/client/rendering/BlockEntityRendererRegistry.java create mode 100644 projects/MinecraftAPI/src/main/java/li/cil/ocreloaded/minecraft/api/registry/client/rendering/ColorHandlerRegistry.java diff --git a/projects/Fabric/build.gradle.kts b/projects/Fabric/build.gradle.kts index 4c14fb0..28add75 100644 --- a/projects/Fabric/build.gradle.kts +++ b/projects/Fabric/build.gradle.kts @@ -1,4 +1,8 @@ +import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar +import net.fabricmc.loom.task.RemapJarTask + evaluationDependsOn(":Minecraft") +evaluationDependsOn(":MinecraftAPI") plugins { id("oc-loader") @@ -18,6 +22,8 @@ dependencies { modImplementation("net.fabricmc:fabric-loader:${libs.versions.fabricLoader.get()}") modImplementation("net.fabricmc.fabric-api:fabric-api:${libs.versions.fabricApi.get()}") + implementation(project(":Core")) + implementation(project(":MinecraftAPI")) implementation(project(":Minecraft")) } @@ -25,4 +31,28 @@ sourceSets.named("main") { resources { srcDir(project(":Minecraft").sourceSets.named("main").get().resources.srcDirs) } +} + +tasks.withType { + duplicatesStrategy = DuplicatesStrategy.EXCLUDE + from(project(":Core").sourceSets.main.get().output) + from(project(":MinecraftAPI").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("") +} + +tasks.build { + dependsOn(tasks.remapJar) } \ No newline at end of file diff --git a/projects/Fabric/src/main/java/li/cil/ocreloaded/fabric/api/registry/client/rendering/FabricBlockEntityRendererRegistry.java b/projects/Fabric/src/main/java/li/cil/ocreloaded/fabric/api/registry/client/rendering/FabricBlockEntityRendererRegistry.java new file mode 100644 index 0000000..73de50c --- /dev/null +++ b/projects/Fabric/src/main/java/li/cil/ocreloaded/fabric/api/registry/client/rendering/FabricBlockEntityRendererRegistry.java @@ -0,0 +1,19 @@ +package li.cil.ocreloaded.fabric.api.registry.client.rendering; + +import java.util.function.Function; + +import li.cil.ocreloaded.minecraft.api.registry.client.rendering.BlockEntityRendererRegistry; +import net.minecraft.client.renderer.blockentity.BlockEntityRenderer; +import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider.Context; +import net.minecraft.client.renderer.blockentity.BlockEntityRenderers; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.BlockEntityType; + +public class FabricBlockEntityRendererRegistry implements BlockEntityRendererRegistry { + + @Override + public void registerS(BlockEntityType blockEntityType, Function> factory) { + BlockEntityRenderers.register(blockEntityType, c -> factory.apply(c)); + } + +} diff --git a/projects/Fabric/src/main/java/li/cil/ocreloaded/fabric/api/registry/client/rendering/FabricColorHandlerRegistry.java b/projects/Fabric/src/main/java/li/cil/ocreloaded/fabric/api/registry/client/rendering/FabricColorHandlerRegistry.java new file mode 100644 index 0000000..362c65e --- /dev/null +++ b/projects/Fabric/src/main/java/li/cil/ocreloaded/fabric/api/registry/client/rendering/FabricColorHandlerRegistry.java @@ -0,0 +1,20 @@ +package li.cil.ocreloaded.fabric.api.registry.client.rendering; + +import li.cil.ocreloaded.minecraft.api.registry.client.rendering.ColorHandlerRegistry; +import net.fabricmc.fabric.api.client.rendering.v1.ColorProviderRegistry; +import net.minecraft.world.item.Item; +import net.minecraft.world.level.block.Block; + +public class FabricColorHandlerRegistry implements ColorHandlerRegistry { + + @Override + public void registerBlockColorsS(ColorRegisteryBlockEntry colorRegistryEntry, Block[] blocks) { + ColorProviderRegistry.BLOCK.register((state, view, pos, tintIndex) -> colorRegistryEntry.getColor(state, view, pos, tintIndex), blocks); + } + + @Override + public void registerItemColorsS(ColorRegisteryItemEntry colorRegisteryEntry, Item[] items) { + ColorProviderRegistry.ITEM.register((itemStack, tintIndex) -> colorRegisteryEntry.getColor(itemStack, tintIndex), items); + } + +} diff --git a/projects/Fabric/src/main/java/li/cil/ocreloaded/fabric/api/registry/menu/FabricMenuRegistry.java b/projects/Fabric/src/main/java/li/cil/ocreloaded/fabric/api/registry/menu/FabricMenuRegistry.java index af58d37..a568c92 100644 --- a/projects/Fabric/src/main/java/li/cil/ocreloaded/fabric/api/registry/menu/FabricMenuRegistry.java +++ b/projects/Fabric/src/main/java/li/cil/ocreloaded/fabric/api/registry/menu/FabricMenuRegistry.java @@ -1,19 +1,53 @@ package li.cil.ocreloaded.fabric.api.registry.menu; +import java.util.function.Consumer; + +import io.netty.buffer.ByteBufUtil; import li.cil.ocreloaded.minecraft.api.registry.menu.MenuRegistry; +import net.fabricmc.fabric.api.networking.v1.PacketByteBufs; +import net.fabricmc.fabric.api.screenhandler.v1.ExtendedScreenHandlerFactory; import net.fabricmc.fabric.api.screenhandler.v1.ExtendedScreenHandlerType; import net.fabricmc.fabric.api.screenhandler.v1.ExtendedScreenHandlerType.ExtendedFactory; +import net.minecraft.client.gui.screens.MenuScreens; +import net.minecraft.client.gui.screens.MenuScreens.ScreenConstructor; +import net.minecraft.client.gui.screens.Screen; +import net.minecraft.client.gui.screens.inventory.MenuAccess; import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.network.chat.Component; import net.minecraft.network.codec.StreamCodec; 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; import net.minecraft.world.inventory.MenuType; public class FabricMenuRegistry implements MenuRegistry { @Override - public void openExtendedMenuS(ServerPlayer serverPlayer, T caseBlockEntity, Object object) { - throw new UnsupportedOperationException("Unimplemented method 'openExtendedMenuS'"); + public void openExtendedMenuS(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 byte[] getScreenOpeningData(ServerPlayer player) { + FriendlyByteBuf byteBuf = PacketByteBufs.create(); + byteBufConsumer.accept(byteBuf); + byte[] bytes = ByteBufUtil.getBytes(byteBuf); + byteBuf.release(); + return bytes; + } + + }); } @Override @@ -23,5 +57,12 @@ public MenuType ofExtendedS(TypedMenuConstr screenFactory, StreamCodec.of((a, b) -> {}, c -> null)); } + + @Override + public > void registerScreenFactoryS( + MenuType menu, TypedScreenConstructor screenConstructor + ) { + MenuScreens.register(menu, (ScreenConstructor) (menu2, inventory, title) -> screenConstructor.create(menu2, inventory, title)); + } } 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 3202eab..1434693 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 @@ -8,6 +8,6 @@ public class OCReloadedClient implements ClientModInitializer { @Override public void onInitializeClient() { ClientRegistered.setup(); - //CommonClientHooks.setup(); + CommonClientHooks.setup(); } } diff --git a/projects/Fabric/src/main/resources/META-INF/services/li.cil.ocreloaded.minecraft.api.registry.client.rendering.BlockEntityRendererRegistry b/projects/Fabric/src/main/resources/META-INF/services/li.cil.ocreloaded.minecraft.api.registry.client.rendering.BlockEntityRendererRegistry new file mode 100644 index 0000000..1f213a3 --- /dev/null +++ b/projects/Fabric/src/main/resources/META-INF/services/li.cil.ocreloaded.minecraft.api.registry.client.rendering.BlockEntityRendererRegistry @@ -0,0 +1 @@ +li.cil.ocreloaded.fabric.api.registry.client.rendering.FabricBlockEntityRendererRegistry \ No newline at end of file diff --git a/projects/Fabric/src/main/resources/META-INF/services/li.cil.ocreloaded.minecraft.api.registry.client.rendering.ColorHandlerRegistry b/projects/Fabric/src/main/resources/META-INF/services/li.cil.ocreloaded.minecraft.api.registry.client.rendering.ColorHandlerRegistry new file mode 100644 index 0000000..aebfb5f --- /dev/null +++ b/projects/Fabric/src/main/resources/META-INF/services/li.cil.ocreloaded.minecraft.api.registry.client.rendering.ColorHandlerRegistry @@ -0,0 +1 @@ +li.cil.ocreloaded.fabric.api.registry.client.rendering.FabricColorHandlerRegistry \ No newline at end of file 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..bc08d0f 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,6 +1,6 @@ package li.cil.ocreloaded.minecraft.client; -import dev.architectury.registry.client.rendering.ColorHandlerRegistry; +import li.cil.ocreloaded.minecraft.api.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; 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 b6d5ad7..0545a12 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,6 +1,6 @@ package li.cil.ocreloaded.minecraft.client.registry; -import dev.architectury.registry.client.rendering.BlockEntityRendererRegistry; +import li.cil.ocreloaded.minecraft.api.registry.client.rendering.BlockEntityRendererRegistry; import li.cil.ocreloaded.minecraft.api.registry.menu.MenuRegistry; import li.cil.ocreloaded.minecraft.client.renderer.entity.CaseRenderer; import li.cil.ocreloaded.minecraft.client.renderer.entity.screen.ScreenRenderer; @@ -11,12 +11,11 @@ public class ClientRegistered { public static void setup() { - // TODO: COMEBACK - //CommonRegistered.CASE_MENU_TYPE.listen(menu -> MenuRegistry.registerScreenFactory(menu, CaseScreen::new)); - //CommonRegistered.SCREEN_MENU_TYPE.listen(menu -> MenuRegistry.registerScreenFactory(menu, ScreenScreen::new)); + 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)); + 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/common/block/CaseBlock.java b/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/block/CaseBlock.java index fe96def..7e4bb32 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 @@ -50,14 +50,12 @@ public InteractionResult useWithoutItem(BlockState state, Level level, BlockPos BlockEntity blockEntity = level.getBlockEntity(pos); if (blockEntity instanceof CaseBlockEntity caseBlockEntity && player instanceof ServerPlayer serverPlayer) { - // TODO: COMEBACK - //MenuRegistry.openExtendedMenu(serverPlayer, caseBlockEntity, caseBlockEntity::writeData); + MenuRegistry.openExtendedMenu(serverPlayer, caseBlockEntity, caseBlockEntity::writeData); } return InteractionResult.CONSUME; } - @SuppressWarnings("deprecation") @Override public void onRemove(BlockState blockState, Level level, BlockPos blockPos, BlockState blockState2, boolean bl) { Containers.dropContentsOnDestroy(blockState, blockState2, level, blockPos); 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 8fa2e38..eb1ee00 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 @@ -6,7 +6,6 @@ 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; @@ -68,8 +67,7 @@ public InteractionResult useWithoutItem(BlockState state, Level level, BlockPos && player instanceof ServerPlayer serverPlayer && isKeyboardConnected(level, pos) ) { - // TODO: COMEBACK - //MenuRegistry.openExtendedMenu(serverPlayer, menuProvider, screenMenuProvider::writeData); + MenuRegistry.openExtendedMenu(serverPlayer, menuProvider, screenMenuProvider::writeData); return InteractionResult.CONSUME; } } 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 a4036f2..177b0e0 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 @@ -143,7 +143,6 @@ public static void initialize() { public static final RegistrySupplier EEPROM_LUA = ITEMS.register("eeprom_lua", () -> new LuaEepromItem(DEFAULT_ITEM_PROPERTIES)); // Menu types - // TODO: COMEBACK 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)); diff --git a/projects/MinecraftAPI/src/main/java/dev/architectury/registry/client/rendering/BlockEntityRendererRegistry.java b/projects/MinecraftAPI/src/main/java/dev/architectury/registry/client/rendering/BlockEntityRendererRegistry.java deleted file mode 100644 index ce28122..0000000 --- a/projects/MinecraftAPI/src/main/java/dev/architectury/registry/client/rendering/BlockEntityRendererRegistry.java +++ /dev/null @@ -1,17 +0,0 @@ -package dev.architectury.registry.client.rendering; - -import java.util.function.Function; - -import net.minecraft.client.renderer.blockentity.BlockEntityRenderer; -import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider; -import net.minecraft.world.level.block.entity.BlockEntity; -import net.minecraft.world.level.block.entity.BlockEntityType; - -public class BlockEntityRendererRegistry { - - public static void register(BlockEntityType blockEntityType, Function> factory) { - // TODO Auto-generated method stub - throw new UnsupportedOperationException("Unimplemented method 'register'"); - } - -} diff --git a/projects/MinecraftAPI/src/main/java/dev/architectury/registry/client/rendering/ColorHandlerRegistry.java b/projects/MinecraftAPI/src/main/java/dev/architectury/registry/client/rendering/ColorHandlerRegistry.java deleted file mode 100644 index c1c384d..0000000 --- a/projects/MinecraftAPI/src/main/java/dev/architectury/registry/client/rendering/ColorHandlerRegistry.java +++ /dev/null @@ -1,36 +0,0 @@ -package dev.architectury.registry.client.rendering; - -import net.minecraft.core.BlockPos; -import net.minecraft.world.item.Item; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.level.BlockAndTintGetter; -import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.block.state.BlockState; - -public class ColorHandlerRegistry { - - public static void registerBlockColors(ColorRegisteryBlockEntry colorRegistryEntry, Block[] blocks) { - // TODO Auto-generated method stub - throw new UnsupportedOperationException("Unimplemented method 'registerBlockColors'"); - } - - - - public static void registerItemColors(ColorRegisteryItemEntry colorRegisteryEntry, Item[] items) { - // TODO Auto-generated method stub - throw new UnsupportedOperationException("Unimplemented method 'registerItemColors'"); - } - - public static interface ColorRegisteryBlockEntry { - - int getColor(BlockState blockState, BlockAndTintGetter blockAndTintGetter, BlockPos blockPos, int tintIndex); - - } - - public static interface ColorRegisteryItemEntry { - - int getColor(ItemStack itemStack, int tintIndex); - - } - -} diff --git a/projects/MinecraftAPI/src/main/java/li/cil/ocreloaded/minecraft/api/registry/client/rendering/BlockEntityRendererRegistry.java b/projects/MinecraftAPI/src/main/java/li/cil/ocreloaded/minecraft/api/registry/client/rendering/BlockEntityRendererRegistry.java new file mode 100644 index 0000000..065496b --- /dev/null +++ b/projects/MinecraftAPI/src/main/java/li/cil/ocreloaded/minecraft/api/registry/client/rendering/BlockEntityRendererRegistry.java @@ -0,0 +1,21 @@ +package li.cil.ocreloaded.minecraft.api.registry.client.rendering; + +import java.util.function.Function; + +import li.cil.ocreloaded.minecraft.api.ServiceHelper; +import net.minecraft.client.renderer.blockentity.BlockEntityRenderer; +import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.BlockEntityType; + +public interface BlockEntityRendererRegistry { + + static final BlockEntityRendererRegistry service = ServiceHelper.loadService(BlockEntityRendererRegistry.class); + + void registerS(BlockEntityType blockEntityType, Function> factory); + + static void register(BlockEntityType blockEntityType, Function> factory) { + service.registerS(blockEntityType, factory); + } + +} diff --git a/projects/MinecraftAPI/src/main/java/li/cil/ocreloaded/minecraft/api/registry/client/rendering/ColorHandlerRegistry.java b/projects/MinecraftAPI/src/main/java/li/cil/ocreloaded/minecraft/api/registry/client/rendering/ColorHandlerRegistry.java new file mode 100644 index 0000000..b5bf074 --- /dev/null +++ b/projects/MinecraftAPI/src/main/java/li/cil/ocreloaded/minecraft/api/registry/client/rendering/ColorHandlerRegistry.java @@ -0,0 +1,39 @@ +package li.cil.ocreloaded.minecraft.api.registry.client.rendering; + +import li.cil.ocreloaded.minecraft.api.ServiceHelper; +import net.minecraft.core.BlockPos; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.BlockAndTintGetter; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockState; + +public interface ColorHandlerRegistry { + + static final ColorHandlerRegistry service = ServiceHelper.loadService(ColorHandlerRegistry.class); + + void registerBlockColorsS(ColorRegisteryBlockEntry colorRegistryEntry, Block[] blocks); + + void registerItemColorsS(ColorRegisteryItemEntry colorRegisteryEntry, Item[] items); + + static void registerBlockColors(ColorRegisteryBlockEntry colorRegistryEntry, Block[] blocks) { + service.registerBlockColorsS(colorRegistryEntry, blocks); + } + + static void registerItemColors(ColorRegisteryItemEntry colorRegisteryEntry, Item[] items) { + service.registerItemColorsS(colorRegisteryEntry, items); + } + + static interface ColorRegisteryBlockEntry { + + int getColor(BlockState blockState, BlockAndTintGetter blockAndTintGetter, BlockPos blockPos, int tintIndex); + + } + + static interface ColorRegisteryItemEntry { + + int getColor(ItemStack itemStack, int tintIndex); + + } + +} diff --git a/projects/MinecraftAPI/src/main/java/li/cil/ocreloaded/minecraft/api/registry/menu/MenuRegistry.java b/projects/MinecraftAPI/src/main/java/li/cil/ocreloaded/minecraft/api/registry/menu/MenuRegistry.java index 5043b35..db1578f 100644 --- a/projects/MinecraftAPI/src/main/java/li/cil/ocreloaded/minecraft/api/registry/menu/MenuRegistry.java +++ b/projects/MinecraftAPI/src/main/java/li/cil/ocreloaded/minecraft/api/registry/menu/MenuRegistry.java @@ -1,10 +1,16 @@ package li.cil.ocreloaded.minecraft.api.registry.menu; +import java.util.function.Consumer; + import javax.annotation.Nullable; import li.cil.ocreloaded.minecraft.api.ServiceHelper; +import net.minecraft.client.gui.screens.Screen; +import net.minecraft.client.gui.screens.inventory.MenuAccess; 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.inventory.AbstractContainerMenu; import net.minecraft.world.inventory.MenuType; @@ -13,24 +19,37 @@ public interface MenuRegistry { static final MenuRegistry service = ServiceHelper.loadService(MenuRegistry.class); - void openExtendedMenuS(ServerPlayer serverPlayer, T caseBlockEntity, Object object); + void openExtendedMenuS(ServerPlayer serverPlayer, MenuProvider screenMenuProvider, Consumer byteBufConsumer); MenuType ofExtendedS(TypedMenuConstructor menuConstructor); - public static void openExtendedMenu(ServerPlayer serverPlayer, T caseBlockEntity, Object object) { - service.openExtendedMenuS(serverPlayer, caseBlockEntity, object); + > void registerScreenFactoryS(MenuType menu, TypedScreenConstructor screenConstructor); + + static void openExtendedMenu(ServerPlayer serverPlayer, MenuProvider screenMenuProvider, Consumer byteBufConsumer) { + service.openExtendedMenuS(serverPlayer, screenMenuProvider, byteBufConsumer); } - public static MenuType ofExtended(TypedMenuConstructor menuConstructor) { + static MenuType ofExtended(TypedMenuConstructor menuConstructor) { return service.ofExtendedS(menuConstructor); } + static > void registerScreenFactory(MenuType menu, TypedScreenConstructor screenConstructor) { + service.registerScreenFactoryS(menu, screenConstructor); + } + @FunctionalInterface - public interface TypedMenuConstructor { + interface TypedMenuConstructor { @Nullable T createMenu(int containerId, Inventory playerInventory, FriendlyByteBuf buf); } + + @FunctionalInterface + interface TypedScreenConstructor> { + + U create(T menu, Inventory inventory, Component title); + + } } diff --git a/projects/NeoForge/src/main/resources/pack.mcmeta b/projects/NeoForge/src/main/resources/pack.mcmeta index 8248de5..9715b1d 100644 --- a/projects/NeoForge/src/main/resources/pack.mcmeta +++ b/projects/NeoForge/src/main/resources/pack.mcmeta @@ -1,6 +1,6 @@ { "pack": { - "pack_format": 22, + "pack_format": 32, "description": "OpenComputers Reloaded Resource Pack" } } \ No newline at end of file From f41c39c8d1ebcfd7c47d89deafe499c4936023cb Mon Sep 17 00:00:00 2001 From: mjarduk Date: Tue, 30 Sep 2025 00:36:42 +0300 Subject: [PATCH 03/10] Multiplatform changes. --- build.gradle.kts | 18 ++ buildSrc/src/main/kotlin/oc-common.gradle.kts | 3 - projects/Core/build.gradle.kts | 3 +- projects/Fabric/build.gradle.kts | 11 +- .../FabricBlockEntityRendererRegistry.java | 19 -- .../rendering/FabricColorHandlerRegistry.java | 20 -- .../api/registry/menu/FabricMenuRegistry.java | 68 ------- .../registries/FabricDeferredRegister.java | 61 ------- .../registries/FabricRegistrySupplier.java | 64 ------- .../api/service/FabricModUtilService.java | 25 --- .../fabric/client/OCReloadedClient.java | 33 +++- .../common/FabricPlatformRegistryHelper.java | 32 ++++ ...ient.rendering.BlockEntityRendererRegistry | 1 - ...stry.client.rendering.ColorHandlerRegistry | 1 - ...d.minecraft.api.registry.menu.MenuRegistry | 1 - ...oaded.minecraft.api.service.ModUtilService | 1 - ...ft.common.registry.IPlatformRegistryHelper | 1 + projects/Minecraft/build.gradle.kts | 2 - .../minecraft/client/ColorHandlers.java | 85 +++++---- .../minecraft/client/CommonClientHooks.java | 3 - .../client/registry/ClientRegistered.java | 14 -- .../minecraft/common/block/CaseBlock.java | 5 +- .../minecraft/common/block/ScreenBlock.java | 10 +- .../common/entity/CaseBlockEntity.java | 35 ++-- .../minecraft/common/menu/CaseMenu.java | 11 +- .../minecraft/common/recipe/Recipes.java | 1 + .../common/registry/CommonRegistered.java | 172 ++++++++---------- .../registry/IPlatformRegistryHelper.java | 33 ++++ projects/MinecraftAPI/build.gradle.kts | 15 -- .../registry/CreativeTabRegistry.java | 16 -- .../registry/registries/RegistrySupplier.java | 13 -- .../minecraft/api/BlockEntityTypeHelper.java | 22 --- .../minecraft/api/ServiceHelper.java | 13 -- .../BlockEntityRendererRegistry.java | 21 --- .../rendering/ColorHandlerRegistry.java | 39 ---- .../api/registry/menu/MenuRegistry.java | 55 ------ .../registry/registries/DeferredRegister.java | 23 --- .../minecraft/api/service/ModUtilService.java | 17 -- projects/NeoForge/build.gradle.kts | 10 + projects/NeoForge/gradle.properties | 1 - .../neoforge/client/OCReloadedClient.java | 31 ++++ .../common/NeoPlatformRegistryHelper.java | 29 +++ .../neoforge/common/OCReloaded.java | 3 +- .../resources/META-INF/neoforge.mods.toml | 4 +- ...ft.common.registry.IPlatformRegistryHelper | 1 + .../src/main/resources/ocreloaded.mixins.json | 13 -- .../NeoForge/src/main/resources/pack.mcmeta | 6 - settings.gradle.kts | 1 - 48 files changed, 343 insertions(+), 723 deletions(-) create mode 100644 build.gradle.kts delete mode 100644 projects/Fabric/src/main/java/li/cil/ocreloaded/fabric/api/registry/client/rendering/FabricBlockEntityRendererRegistry.java delete mode 100644 projects/Fabric/src/main/java/li/cil/ocreloaded/fabric/api/registry/client/rendering/FabricColorHandlerRegistry.java delete mode 100644 projects/Fabric/src/main/java/li/cil/ocreloaded/fabric/api/registry/menu/FabricMenuRegistry.java delete mode 100644 projects/Fabric/src/main/java/li/cil/ocreloaded/fabric/api/registry/registries/FabricDeferredRegister.java delete mode 100644 projects/Fabric/src/main/java/li/cil/ocreloaded/fabric/api/registry/registries/FabricRegistrySupplier.java delete mode 100644 projects/Fabric/src/main/java/li/cil/ocreloaded/fabric/api/service/FabricModUtilService.java create mode 100644 projects/Fabric/src/main/java/li/cil/ocreloaded/fabric/common/FabricPlatformRegistryHelper.java delete mode 100644 projects/Fabric/src/main/resources/META-INF/services/li.cil.ocreloaded.minecraft.api.registry.client.rendering.BlockEntityRendererRegistry delete mode 100644 projects/Fabric/src/main/resources/META-INF/services/li.cil.ocreloaded.minecraft.api.registry.client.rendering.ColorHandlerRegistry delete mode 100644 projects/Fabric/src/main/resources/META-INF/services/li.cil.ocreloaded.minecraft.api.registry.menu.MenuRegistry delete mode 100644 projects/Fabric/src/main/resources/META-INF/services/li.cil.ocreloaded.minecraft.api.service.ModUtilService create mode 100644 projects/Fabric/src/main/resources/META-INF/services/li.cil.ocreloaded.minecraft.common.registry.IPlatformRegistryHelper create mode 100644 projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/registry/IPlatformRegistryHelper.java delete mode 100644 projects/MinecraftAPI/build.gradle.kts delete mode 100644 projects/MinecraftAPI/src/main/java/dev/architectury/registry/CreativeTabRegistry.java delete mode 100644 projects/MinecraftAPI/src/main/java/dev/architectury/registry/registries/RegistrySupplier.java delete mode 100644 projects/MinecraftAPI/src/main/java/li/cil/ocreloaded/minecraft/api/BlockEntityTypeHelper.java delete mode 100644 projects/MinecraftAPI/src/main/java/li/cil/ocreloaded/minecraft/api/ServiceHelper.java delete mode 100644 projects/MinecraftAPI/src/main/java/li/cil/ocreloaded/minecraft/api/registry/client/rendering/BlockEntityRendererRegistry.java delete mode 100644 projects/MinecraftAPI/src/main/java/li/cil/ocreloaded/minecraft/api/registry/client/rendering/ColorHandlerRegistry.java delete mode 100644 projects/MinecraftAPI/src/main/java/li/cil/ocreloaded/minecraft/api/registry/menu/MenuRegistry.java delete mode 100644 projects/MinecraftAPI/src/main/java/li/cil/ocreloaded/minecraft/api/registry/registries/DeferredRegister.java delete mode 100644 projects/MinecraftAPI/src/main/java/li/cil/ocreloaded/minecraft/api/service/ModUtilService.java delete mode 100644 projects/NeoForge/gradle.properties create mode 100644 projects/NeoForge/src/main/java/li/cil/ocreloaded/neoforge/common/NeoPlatformRegistryHelper.java create mode 100644 projects/NeoForge/src/main/resources/META-INF/services/li.cil.ocreloaded.minecraft.common.registry.IPlatformRegistryHelper delete mode 100644 projects/NeoForge/src/main/resources/ocreloaded.mixins.json delete mode 100644 projects/NeoForge/src/main/resources/pack.mcmeta 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 1e7d726..c6d3458 100644 --- a/buildSrc/src/main/kotlin/oc-common.gradle.kts +++ b/buildSrc/src/main/kotlin/oc-common.gradle.kts @@ -7,9 +7,6 @@ configurations { create("coreJava") { isCanBeResolved = true } - create("apiJava") { - isCanBeResolved = true - } } repositories { diff --git a/projects/Core/build.gradle.kts b/projects/Core/build.gradle.kts index 4c62f67..b244ce4 100644 --- a/projects/Core/build.gradle.kts +++ b/projects/Core/build.gradle.kts @@ -7,7 +7,8 @@ repositories { } dependencies { + compileOnly(libs.slf4j) + api(libs.typesafeConfig) - implementation(libs.slf4j) 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 28add75..648c34d 100644 --- a/projects/Fabric/build.gradle.kts +++ b/projects/Fabric/build.gradle.kts @@ -2,17 +2,12 @@ import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar import net.fabricmc.loom.task.RemapJarTask evaluationDependsOn(":Minecraft") -evaluationDependsOn(":MinecraftAPI") plugins { id("oc-loader") alias(libs.plugins.loom) } -loom { - -} - dependencies { minecraft("com.mojang:minecraft:${libs.versions.minecraft.get()}") mappings(loom.layered { @@ -23,20 +18,18 @@ dependencies { modImplementation("net.fabricmc.fabric-api:fabric-api:${libs.versions.fabricApi.get()}") implementation(project(":Core")) - implementation(project(":MinecraftAPI")) implementation(project(":Minecraft")) } -sourceSets.named("main") { +sourceSets.main { resources { - srcDir(project(":Minecraft").sourceSets.named("main").get().resources.srcDirs) + srcDir(project(":Minecraft").sourceSets.main.get().resources.srcDirs) } } tasks.withType { duplicatesStrategy = DuplicatesStrategy.EXCLUDE from(project(":Core").sourceSets.main.get().output) - from(project(":MinecraftAPI").sourceSets.main.get().output) from(project(":Minecraft").sourceSets.main.get().output) dependencies { diff --git a/projects/Fabric/src/main/java/li/cil/ocreloaded/fabric/api/registry/client/rendering/FabricBlockEntityRendererRegistry.java b/projects/Fabric/src/main/java/li/cil/ocreloaded/fabric/api/registry/client/rendering/FabricBlockEntityRendererRegistry.java deleted file mode 100644 index 73de50c..0000000 --- a/projects/Fabric/src/main/java/li/cil/ocreloaded/fabric/api/registry/client/rendering/FabricBlockEntityRendererRegistry.java +++ /dev/null @@ -1,19 +0,0 @@ -package li.cil.ocreloaded.fabric.api.registry.client.rendering; - -import java.util.function.Function; - -import li.cil.ocreloaded.minecraft.api.registry.client.rendering.BlockEntityRendererRegistry; -import net.minecraft.client.renderer.blockentity.BlockEntityRenderer; -import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider.Context; -import net.minecraft.client.renderer.blockentity.BlockEntityRenderers; -import net.minecraft.world.level.block.entity.BlockEntity; -import net.minecraft.world.level.block.entity.BlockEntityType; - -public class FabricBlockEntityRendererRegistry implements BlockEntityRendererRegistry { - - @Override - public void registerS(BlockEntityType blockEntityType, Function> factory) { - BlockEntityRenderers.register(blockEntityType, c -> factory.apply(c)); - } - -} diff --git a/projects/Fabric/src/main/java/li/cil/ocreloaded/fabric/api/registry/client/rendering/FabricColorHandlerRegistry.java b/projects/Fabric/src/main/java/li/cil/ocreloaded/fabric/api/registry/client/rendering/FabricColorHandlerRegistry.java deleted file mode 100644 index 362c65e..0000000 --- a/projects/Fabric/src/main/java/li/cil/ocreloaded/fabric/api/registry/client/rendering/FabricColorHandlerRegistry.java +++ /dev/null @@ -1,20 +0,0 @@ -package li.cil.ocreloaded.fabric.api.registry.client.rendering; - -import li.cil.ocreloaded.minecraft.api.registry.client.rendering.ColorHandlerRegistry; -import net.fabricmc.fabric.api.client.rendering.v1.ColorProviderRegistry; -import net.minecraft.world.item.Item; -import net.minecraft.world.level.block.Block; - -public class FabricColorHandlerRegistry implements ColorHandlerRegistry { - - @Override - public void registerBlockColorsS(ColorRegisteryBlockEntry colorRegistryEntry, Block[] blocks) { - ColorProviderRegistry.BLOCK.register((state, view, pos, tintIndex) -> colorRegistryEntry.getColor(state, view, pos, tintIndex), blocks); - } - - @Override - public void registerItemColorsS(ColorRegisteryItemEntry colorRegisteryEntry, Item[] items) { - ColorProviderRegistry.ITEM.register((itemStack, tintIndex) -> colorRegisteryEntry.getColor(itemStack, tintIndex), items); - } - -} diff --git a/projects/Fabric/src/main/java/li/cil/ocreloaded/fabric/api/registry/menu/FabricMenuRegistry.java b/projects/Fabric/src/main/java/li/cil/ocreloaded/fabric/api/registry/menu/FabricMenuRegistry.java deleted file mode 100644 index a568c92..0000000 --- a/projects/Fabric/src/main/java/li/cil/ocreloaded/fabric/api/registry/menu/FabricMenuRegistry.java +++ /dev/null @@ -1,68 +0,0 @@ -package li.cil.ocreloaded.fabric.api.registry.menu; - -import java.util.function.Consumer; - -import io.netty.buffer.ByteBufUtil; -import li.cil.ocreloaded.minecraft.api.registry.menu.MenuRegistry; -import net.fabricmc.fabric.api.networking.v1.PacketByteBufs; -import net.fabricmc.fabric.api.screenhandler.v1.ExtendedScreenHandlerFactory; -import net.fabricmc.fabric.api.screenhandler.v1.ExtendedScreenHandlerType; -import net.fabricmc.fabric.api.screenhandler.v1.ExtendedScreenHandlerType.ExtendedFactory; -import net.minecraft.client.gui.screens.MenuScreens; -import net.minecraft.client.gui.screens.MenuScreens.ScreenConstructor; -import net.minecraft.client.gui.screens.Screen; -import net.minecraft.client.gui.screens.inventory.MenuAccess; -import net.minecraft.network.FriendlyByteBuf; -import net.minecraft.network.chat.Component; -import net.minecraft.network.codec.StreamCodec; -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; -import net.minecraft.world.inventory.MenuType; - -public class FabricMenuRegistry implements MenuRegistry { - - @Override - public void openExtendedMenuS(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 byte[] getScreenOpeningData(ServerPlayer player) { - FriendlyByteBuf byteBuf = PacketByteBufs.create(); - byteBufConsumer.accept(byteBuf); - byte[] bytes = ByteBufUtil.getBytes(byteBuf); - byteBuf.release(); - return bytes; - } - - }); - } - - @Override - public MenuType ofExtendedS(TypedMenuConstructor menuConstructor) { - ExtendedFactory screenFactory = (a, b, c) -> menuConstructor.createMenu(a, b, c); - return new ExtendedScreenHandlerType<>( - screenFactory, - StreamCodec.of((a, b) -> {}, c -> null)); - } - - @Override - public > void registerScreenFactoryS( - MenuType menu, TypedScreenConstructor screenConstructor - ) { - MenuScreens.register(menu, (ScreenConstructor) (menu2, inventory, title) -> screenConstructor.create(menu2, inventory, title)); - } - -} diff --git a/projects/Fabric/src/main/java/li/cil/ocreloaded/fabric/api/registry/registries/FabricDeferredRegister.java b/projects/Fabric/src/main/java/li/cil/ocreloaded/fabric/api/registry/registries/FabricDeferredRegister.java deleted file mode 100644 index 5e1e63d..0000000 --- a/projects/Fabric/src/main/java/li/cil/ocreloaded/fabric/api/registry/registries/FabricDeferredRegister.java +++ /dev/null @@ -1,61 +0,0 @@ -package li.cil.ocreloaded.fabric.api.registry.registries; - -import java.util.ArrayList; -import java.util.List; -import java.util.function.Supplier; - -import dev.architectury.registry.registries.RegistrySupplier; -import li.cil.ocreloaded.minecraft.api.registry.registries.DeferredRegister; -import net.minecraft.core.Registry; -import net.minecraft.core.registries.BuiltInRegistries; -import net.minecraft.resources.ResourceKey; -import net.minecraft.resources.ResourceLocation; - -public class FabricDeferredRegister implements DeferredRegister { - - private final String modId; - private final ResourceKey> registryKey; - - private final List> registrySuppliers = new ArrayList<>(); - - private boolean registrationCompleted = false; - - public FabricDeferredRegister(String modId, ResourceKey> registryKey) { - this.modId = modId; - this.registryKey = registryKey; - } - - @Override - @SuppressWarnings("unchecked") - public RegistrySupplier register(String path, Supplier valueSupplier) { - if (registrationCompleted) { - throw new IllegalStateException("Registry already initialized"); - } - - System.out.println(registryKey.location()); - FabricRegistrySupplier registrySupplier = new FabricRegistrySupplier( - () -> { - System.out.println(BuiltInRegistries.REGISTRY.get(registryKey.location())); - System.out.println(ResourceLocation.fromNamespaceAndPath(modId, path)); - U v = valueSupplier.get(); - System.out.println(v); - return Registry.register((Registry) BuiltInRegistries.REGISTRY.get(registryKey.location()), ResourceLocation.fromNamespaceAndPath(modId, path), v); - }); - - registrySuppliers.add(registrySupplier); - - return registrySupplier; - } - - @Override - public void register() { - if (registrationCompleted) { - throw new IllegalStateException("Registry already initialized"); - } - - for (FabricRegistrySupplier supplier: registrySuppliers) { - supplier.resolve(); - } - } - -} diff --git a/projects/Fabric/src/main/java/li/cil/ocreloaded/fabric/api/registry/registries/FabricRegistrySupplier.java b/projects/Fabric/src/main/java/li/cil/ocreloaded/fabric/api/registry/registries/FabricRegistrySupplier.java deleted file mode 100644 index 2167159..0000000 --- a/projects/Fabric/src/main/java/li/cil/ocreloaded/fabric/api/registry/registries/FabricRegistrySupplier.java +++ /dev/null @@ -1,64 +0,0 @@ -package li.cil.ocreloaded.fabric.api.registry.registries; - -import java.util.ArrayList; -import java.util.List; -import java.util.function.Consumer; -import java.util.function.Supplier; - -import dev.architectury.registry.registries.RegistrySupplier; - -public class FabricRegistrySupplier implements RegistrySupplier { - - private final Supplier supplier; - private final List> listeners = new ArrayList<>(); - - private T resolved = null; - - public FabricRegistrySupplier(Supplier supplier) { - this.supplier = supplier; - } - - @Override - public T get() { - if (resolved == null) { - resolve(); - } - - return value(); - } - - @Override - public T value() { - if (resolved == null) { - throw new RuntimeException("Not yet resolved!"); - } - - return resolved; - } - - @Override - public void listen(Consumer listener) { - if (resolved != null) { - listener.accept(resolved); - } else { - listeners.add(listener); - } - } - - public void resolve() { - if (resolved != null) { - return; - } - - this.resolved = supplier.get(); - if (resolved == null) { - throw new RuntimeException("Cannot resolve to null!"); - } - - for (Consumer listener: listeners) { - listener.accept(resolved); - } - listeners.clear(); - } - -} diff --git a/projects/Fabric/src/main/java/li/cil/ocreloaded/fabric/api/service/FabricModUtilService.java b/projects/Fabric/src/main/java/li/cil/ocreloaded/fabric/api/service/FabricModUtilService.java deleted file mode 100644 index 32500f7..0000000 --- a/projects/Fabric/src/main/java/li/cil/ocreloaded/fabric/api/service/FabricModUtilService.java +++ /dev/null @@ -1,25 +0,0 @@ -package li.cil.ocreloaded.fabric.api.service; - -import li.cil.ocreloaded.fabric.api.registry.registries.FabricDeferredRegister; -import li.cil.ocreloaded.minecraft.api.BlockEntityTypeHelper.BlockEntityConstructor; -import li.cil.ocreloaded.minecraft.api.registry.registries.DeferredRegister; -import li.cil.ocreloaded.minecraft.api.service.ModUtilService; -import net.minecraft.core.Registry; -import net.minecraft.resources.ResourceKey; -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 FabricModUtilService implements ModUtilService { - - @Override - public DeferredRegister createDeferredRegister(String modId, ResourceKey> registryKey) { - return new FabricDeferredRegister(modId, registryKey); - } - - @Override - public BlockEntityType createBlockEntityType(BlockEntityConstructor constructor, Block[] blocks) { - return BlockEntityType.Builder.of(constructor::get, blocks).build(null); - } - -} 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/FabricPlatformRegistryHelper.java b/projects/Fabric/src/main/java/li/cil/ocreloaded/fabric/common/FabricPlatformRegistryHelper.java new file mode 100644 index 0000000..1d61a2b --- /dev/null +++ b/projects/Fabric/src/main/java/li/cil/ocreloaded/fabric/common/FabricPlatformRegistryHelper.java @@ -0,0 +1,32 @@ +package li.cil.ocreloaded.fabric.common; + +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.RegistryFriendlyByteBuf; +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((object, object2) -> {}, object -> null)); + } +} diff --git a/projects/Fabric/src/main/resources/META-INF/services/li.cil.ocreloaded.minecraft.api.registry.client.rendering.BlockEntityRendererRegistry b/projects/Fabric/src/main/resources/META-INF/services/li.cil.ocreloaded.minecraft.api.registry.client.rendering.BlockEntityRendererRegistry deleted file mode 100644 index 1f213a3..0000000 --- a/projects/Fabric/src/main/resources/META-INF/services/li.cil.ocreloaded.minecraft.api.registry.client.rendering.BlockEntityRendererRegistry +++ /dev/null @@ -1 +0,0 @@ -li.cil.ocreloaded.fabric.api.registry.client.rendering.FabricBlockEntityRendererRegistry \ No newline at end of file diff --git a/projects/Fabric/src/main/resources/META-INF/services/li.cil.ocreloaded.minecraft.api.registry.client.rendering.ColorHandlerRegistry b/projects/Fabric/src/main/resources/META-INF/services/li.cil.ocreloaded.minecraft.api.registry.client.rendering.ColorHandlerRegistry deleted file mode 100644 index aebfb5f..0000000 --- a/projects/Fabric/src/main/resources/META-INF/services/li.cil.ocreloaded.minecraft.api.registry.client.rendering.ColorHandlerRegistry +++ /dev/null @@ -1 +0,0 @@ -li.cil.ocreloaded.fabric.api.registry.client.rendering.FabricColorHandlerRegistry \ No newline at end of file diff --git a/projects/Fabric/src/main/resources/META-INF/services/li.cil.ocreloaded.minecraft.api.registry.menu.MenuRegistry b/projects/Fabric/src/main/resources/META-INF/services/li.cil.ocreloaded.minecraft.api.registry.menu.MenuRegistry deleted file mode 100644 index 104b409..0000000 --- a/projects/Fabric/src/main/resources/META-INF/services/li.cil.ocreloaded.minecraft.api.registry.menu.MenuRegistry +++ /dev/null @@ -1 +0,0 @@ -li.cil.ocreloaded.fabric.api.registry.menu.FabricMenuRegistry \ No newline at end of file diff --git a/projects/Fabric/src/main/resources/META-INF/services/li.cil.ocreloaded.minecraft.api.service.ModUtilService b/projects/Fabric/src/main/resources/META-INF/services/li.cil.ocreloaded.minecraft.api.service.ModUtilService deleted file mode 100644 index e070323..0000000 --- a/projects/Fabric/src/main/resources/META-INF/services/li.cil.ocreloaded.minecraft.api.service.ModUtilService +++ /dev/null @@ -1 +0,0 @@ -li.cil.ocreloaded.fabric.api.service.FabricModUtilService \ No newline at end of file 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/Minecraft/build.gradle.kts b/projects/Minecraft/build.gradle.kts index 14bc7db..a2d42cb 100644 --- a/projects/Minecraft/build.gradle.kts +++ b/projects/Minecraft/build.gradle.kts @@ -1,6 +1,5 @@ plugins { id("oc-neo-based") - `java-library` } neoForge { @@ -9,7 +8,6 @@ neoForge { dependencies { api(project(":Core")) - api(project(":MinecraftAPI")) } tasks.register("copyResources") { 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 bc08d0f..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 li.cil.ocreloaded.minecraft.api.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/registry/ClientRegistered.java b/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/client/registry/ClientRegistered.java index 0545a12..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 li.cil.ocreloaded.minecraft.api.registry.client.rendering.BlockEntityRendererRegistry; -import li.cil.ocreloaded.minecraft.api.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.CommonRegistered; - 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/common/block/CaseBlock.java b/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/block/CaseBlock.java index 7e4bb32..01e60f3 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,7 +1,6 @@ package li.cil.ocreloaded.minecraft.common.block; -import li.cil.ocreloaded.minecraft.api.registry.menu.MenuRegistry; import li.cil.ocreloaded.minecraft.common.entity.CaseBlockEntity; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; @@ -50,7 +49,8 @@ public InteractionResult useWithoutItem(BlockState state, Level level, BlockPos BlockEntity blockEntity = level.getBlockEntity(pos); if (blockEntity instanceof CaseBlockEntity caseBlockEntity && player instanceof ServerPlayer serverPlayer) { - MenuRegistry.openExtendedMenu(serverPlayer, caseBlockEntity, caseBlockEntity::writeData); + // TODO: add back a way to open menus :PP + // MenuRegistry.openExtendedMenu(serverPlayer, caseBlockEntity, caseBlockEntity::writeData); } return InteractionResult.CONSUME; @@ -84,5 +84,4 @@ protected void createBlockStateDefinition(StateDefinition.Builder> COMPONENT_SLOTS = List.of( 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 b0b0e28..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<>(); 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 177b0e0..cf371bf 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,10 +1,5 @@ package li.cil.ocreloaded.minecraft.common.registry; -import dev.architectury.registry.CreativeTabRegistry; -import dev.architectury.registry.registries.RegistrySupplier; -import li.cil.ocreloaded.minecraft.api.BlockEntityTypeHelper; -import li.cil.ocreloaded.minecraft.api.registry.menu.MenuRegistry; -import li.cil.ocreloaded.minecraft.api.registry.registries.DeferredRegister; import li.cil.ocreloaded.minecraft.common.OCReloadedCommon; import li.cil.ocreloaded.minecraft.common.block.CaseBlock; import li.cil.ocreloaded.minecraft.common.block.KeyboardBlock; @@ -12,21 +7,15 @@ import li.cil.ocreloaded.minecraft.common.entity.CaseBlockEntity; import li.cil.ocreloaded.minecraft.common.entity.KeyboardBlockEntity; import li.cil.ocreloaded.minecraft.common.entity.ScreenBlockEntity; -import li.cil.ocreloaded.minecraft.common.item.CPUItem; -import li.cil.ocreloaded.minecraft.common.item.DataCardItem; -import li.cil.ocreloaded.minecraft.common.item.EepromItem; -import li.cil.ocreloaded.minecraft.common.item.FloppyDiskItem; -import li.cil.ocreloaded.minecraft.common.item.GraphicsCardItem; -import li.cil.ocreloaded.minecraft.common.item.HardDiskItem; -import li.cil.ocreloaded.minecraft.common.item.LuaEepromItem; -import li.cil.ocreloaded.minecraft.common.item.ManualItem; -import li.cil.ocreloaded.minecraft.common.item.MemoryItem; +import li.cil.ocreloaded.minecraft.common.item.*; 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.registries.Registries; import net.minecraft.network.chat.Component; import net.minecraft.world.inventory.MenuType; @@ -38,121 +27,118 @@ import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockBehaviour; +@SuppressWarnings("unused") // Used in recipes, I think. 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 CREATIVE_TABS = RegistrationProvider.get(Registries.CREATIVE_MODE_TAB, OCReloadedCommon.MOD_ID); public static void initialize() { - BLOCKS.register(); - ITEMS.register(); - MENUS.register(); - BLOCK_ENTITIES.register(); - CREATIVE_TABS.register(); - NetworkUtil.getInstance().registerHandler("ocreloaded:power", new PowerNetworkHandler()); NetworkUtil.getInstance().registerHandler("ocreloaded:screen", new ScreenNetworkHandler()); 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 : ITEMS.getEntries()) { + 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); // 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 = ITEMS.register("case1", () -> new BlockItem(CASE_BLOCK_TIER_1.get(), DEFAULT_ITEM_PROPERTIES)); + public static final RegistryObject CASE_BLOCK_ITEM_TIER_2 = ITEMS.register("case2", () -> new BlockItem(CASE_BLOCK_TIER_2.get(), DEFAULT_ITEM_PROPERTIES)); + public static final RegistryObject CASE_BLOCK_ITEM_TIER_3 = ITEMS.register("case3", () -> new BlockItem(CASE_BLOCK_TIER_3.get(), DEFAULT_ITEM_PROPERTIES)); + public static final RegistryObject CASE_BLOCK_ITEM_CREATIVE = ITEMS.register("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 = ITEMS.register("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 = ITEMS.register("screen1", () -> new BlockItem(SCREEN_BLOCK_TIER_1.get(), DEFAULT_ITEM_PROPERTIES)); + public static final RegistryObject SCREEN_BLOCK_ITEM_TIER_2 = ITEMS.register("screen2", () -> new BlockItem(SCREEN_BLOCK_TIER_2.get(), DEFAULT_ITEM_PROPERTIES)); + public static final RegistryObject SCREEN_BLOCK_ITEM_TIER_3 = ITEMS.register("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 = ITEMS.register("alu", () -> new Item(DEFAULT_ITEM_PROPERTIES)); + public static final RegistryObject ARROW_KEYS = ITEMS.register("arrow_keys", () -> new Item(DEFAULT_ITEM_PROPERTIES)); + public static final RegistryObject BUTTON_GROUP = ITEMS.register("button_group", () -> new Item(DEFAULT_ITEM_PROPERTIES)); + public static final RegistryObject CARD = ITEMS.register("card", () -> new Item(DEFAULT_ITEM_PROPERTIES)); + public static final RegistryObject CONTROL_UNIT = ITEMS.register("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 = ITEMS.register("cutting_wire", () -> new Item(DEFAULT_ITEM_PROPERTIES)); + public static final RegistryObject CHIP_DIAMOND = ITEMS.register("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 = ITEMS.register("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 = ITEMS.register("chip1", () -> new CPUItem(DEFAULT_ITEM_PROPERTIES, 1)); + public static final RegistryObject CHIP_TIER_2 = ITEMS.register("chip2", () -> new CPUItem(DEFAULT_ITEM_PROPERTIES, 2)); + public static final RegistryObject CHIP_TIER_3 = ITEMS.register("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 = ITEMS.register("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 = ITEMS.register("printed_circuit_board", () -> new Item(DEFAULT_ITEM_PROPERTIES)); + public static final RegistryObject RAW_CIRCUIT_BOARD = ITEMS.register("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 = ITEMS.register("transistor", () -> new Item(DEFAULT_ITEM_PROPERTIES)); + public static final RegistryObject MANUAL = ITEMS.register("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 = ITEMS.register("cpu1", () -> new CPUItem(DEFAULT_ITEM_PROPERTIES, 1)); + public static final RegistryObject CPU_TIER_2 = ITEMS.register("cpu2", () -> new CPUItem(DEFAULT_ITEM_PROPERTIES, 2)); + public static final RegistryObject CPU_TIER_3 = ITEMS.register("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 = ITEMS.register("memory1", () -> new MemoryItem(DEFAULT_ITEM_PROPERTIES, 1)); + public static final RegistryObject MEMORY_TIER_1_5 = ITEMS.register("memory1_5", () -> new MemoryItem(DEFAULT_ITEM_PROPERTIES, 1)); + public static final RegistryObject MEMORY_TIER_2 = ITEMS.register("memory2", () -> new MemoryItem(DEFAULT_ITEM_PROPERTIES, 2)); + public static final RegistryObject MEMORY_TIER_2_5 = ITEMS.register("memory2_5", () -> new MemoryItem(DEFAULT_ITEM_PROPERTIES, 2)); + public static final RegistryObject MEMORY_TIER_3 = ITEMS.register("memory3", () -> new MemoryItem(DEFAULT_ITEM_PROPERTIES, 3)); + public static final RegistryObject MEMORY_TIER_3_5 = ITEMS.register("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 = ITEMS.register("datacard1", () -> new DataCardItem(DEFAULT_ITEM_PROPERTIES, 1)); + public static final RegistryObject DATACARD_TIER_2 = ITEMS.register("datacard2", () -> new DataCardItem(DEFAULT_ITEM_PROPERTIES, 2)); + public static final RegistryObject DATACARD_TIER_3 = ITEMS.register("datacard3", () -> new DataCardItem(DEFAULT_ITEM_PROPERTIES, 3)); + public static final RegistryObject GRAPHICSCARD_TIER_1 = ITEMS.register("graphicscard1", () -> new GraphicsCardItem(DEFAULT_ITEM_PROPERTIES, 1)); + public static final RegistryObject GRAPHICSCARD_TIER_2 = ITEMS.register("graphicscard2", () -> new GraphicsCardItem(DEFAULT_ITEM_PROPERTIES, 2)); + public static final RegistryObject GRAPHICSCARD_TIER_3 = ITEMS.register("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 = ITEMS.register("eeprom", () -> new EepromItem(DEFAULT_ITEM_PROPERTIES)); + public static final RegistryObject FLOPPY = ITEMS.register("floppy", () -> new FloppyDiskItem(DEFAULT_ITEM_PROPERTIES)); + public static final RegistryObject HARDDISKDRIVE_TIER_1 = ITEMS.register("harddiskdrive1", () -> new HardDiskItem(DEFAULT_ITEM_PROPERTIES, 1)); + public static final RegistryObject HARDDISKDRIVE_TIER_2 = ITEMS.register("harddiskdrive2", () -> new HardDiskItem(DEFAULT_ITEM_PROPERTIES, 2)); + public static final RegistryObject HARDDISKDRIVE_TIER_3 = ITEMS.register("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 = ITEMS.register("floppy_openos", () -> new FloppyDiskItem(DEFAULT_ITEM_PROPERTIES, "loot:openos")); + public static final RegistryObject FLOPPY_PLAN9K = ITEMS.register("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 = ITEMS.register("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", () -> BlockEntityTypeHelper - .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 RegistrySupplier> SCREEN_BLOCK_ENTITY = BLOCK_ENTITIES.register("screen", () -> BlockEntityTypeHelper - .createBlockEntityType(ScreenBlockEntity::new, SCREEN_BLOCK_TIER_1.get(), SCREEN_BLOCK_TIER_2.get(), SCREEN_BLOCK_TIER_3.get())); - public static final RegistrySupplier> KEYBOARD_BLOCK_ENTITY = BLOCK_ENTITIES.register("keyboard", () -> BlockEntityTypeHelper - .createBlockEntityType(KeyboardBlockEntity::new, KEYBOARD_BLOCK.get())); + 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())); } 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..839ec84 --- /dev/null +++ b/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/registry/IPlatformRegistryHelper.java @@ -0,0 +1,33 @@ +package li.cil.ocreloaded.minecraft.common.registry; + +import net.minecraft.core.BlockPos; +import net.minecraft.network.RegistryFriendlyByteBuf; +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; + +import java.util.ServiceLoader; + +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, RegistryFriendlyByteBuf buf); + } +} diff --git a/projects/MinecraftAPI/build.gradle.kts b/projects/MinecraftAPI/build.gradle.kts deleted file mode 100644 index 848f5e7..0000000 --- a/projects/MinecraftAPI/build.gradle.kts +++ /dev/null @@ -1,15 +0,0 @@ -plugins { - id("oc-neo-based") -} - -neoForge { - neoFormVersion = libs.versions.neoForm.get() -} - -artifacts { - add("apiJava", sourceSets["main"].java.sourceDirectories.singleFile) -} - -dependencies { - -} \ No newline at end of file diff --git a/projects/MinecraftAPI/src/main/java/dev/architectury/registry/CreativeTabRegistry.java b/projects/MinecraftAPI/src/main/java/dev/architectury/registry/CreativeTabRegistry.java deleted file mode 100644 index 6f1b753..0000000 --- a/projects/MinecraftAPI/src/main/java/dev/architectury/registry/CreativeTabRegistry.java +++ /dev/null @@ -1,16 +0,0 @@ -package dev.architectury.registry; - -import java.util.function.Supplier; - -import net.minecraft.network.chat.Component; -import net.minecraft.world.item.CreativeModeTab; -import net.minecraft.world.item.ItemStack; - -public class CreativeTabRegistry { - - public CreativeModeTab create(Component title, Supplier iconSupplier) { - throw new UnsupportedOperationException("Not Implemented!"); - } - -} - \ No newline at end of file diff --git a/projects/MinecraftAPI/src/main/java/dev/architectury/registry/registries/RegistrySupplier.java b/projects/MinecraftAPI/src/main/java/dev/architectury/registry/registries/RegistrySupplier.java deleted file mode 100644 index f0c8339..0000000 --- a/projects/MinecraftAPI/src/main/java/dev/architectury/registry/registries/RegistrySupplier.java +++ /dev/null @@ -1,13 +0,0 @@ -package dev.architectury.registry.registries; - -import java.util.function.Consumer; - -public interface RegistrySupplier { - - T get(); - - T value(); - - void listen(Consumer listener); - -} diff --git a/projects/MinecraftAPI/src/main/java/li/cil/ocreloaded/minecraft/api/BlockEntityTypeHelper.java b/projects/MinecraftAPI/src/main/java/li/cil/ocreloaded/minecraft/api/BlockEntityTypeHelper.java deleted file mode 100644 index 5925c37..0000000 --- a/projects/MinecraftAPI/src/main/java/li/cil/ocreloaded/minecraft/api/BlockEntityTypeHelper.java +++ /dev/null @@ -1,22 +0,0 @@ -package li.cil.ocreloaded.minecraft.api; - -import li.cil.ocreloaded.minecraft.api.service.ModUtilService; -import net.minecraft.core.BlockPos; -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 class BlockEntityTypeHelper { - - static final ModUtilService service = ServiceHelper.loadService(ModUtilService.class); - - public static BlockEntityType createBlockEntityType(BlockEntityConstructor constructor, Block... blocks) { - return service.createBlockEntityType(constructor, blocks); - }; - - public static interface BlockEntityConstructor { - T get(BlockPos blockPos, BlockState blockState); - } - -} diff --git a/projects/MinecraftAPI/src/main/java/li/cil/ocreloaded/minecraft/api/ServiceHelper.java b/projects/MinecraftAPI/src/main/java/li/cil/ocreloaded/minecraft/api/ServiceHelper.java deleted file mode 100644 index f8cacaa..0000000 --- a/projects/MinecraftAPI/src/main/java/li/cil/ocreloaded/minecraft/api/ServiceHelper.java +++ /dev/null @@ -1,13 +0,0 @@ -package li.cil.ocreloaded.minecraft.api; - -import java.util.ServiceLoader; - -public final class ServiceHelper { - - private ServiceHelper() {} - - public static T loadService(Class serviceCls) { - return ServiceLoader.load(serviceCls).findFirst().orElseThrow(); - } - -} diff --git a/projects/MinecraftAPI/src/main/java/li/cil/ocreloaded/minecraft/api/registry/client/rendering/BlockEntityRendererRegistry.java b/projects/MinecraftAPI/src/main/java/li/cil/ocreloaded/minecraft/api/registry/client/rendering/BlockEntityRendererRegistry.java deleted file mode 100644 index 065496b..0000000 --- a/projects/MinecraftAPI/src/main/java/li/cil/ocreloaded/minecraft/api/registry/client/rendering/BlockEntityRendererRegistry.java +++ /dev/null @@ -1,21 +0,0 @@ -package li.cil.ocreloaded.minecraft.api.registry.client.rendering; - -import java.util.function.Function; - -import li.cil.ocreloaded.minecraft.api.ServiceHelper; -import net.minecraft.client.renderer.blockentity.BlockEntityRenderer; -import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider; -import net.minecraft.world.level.block.entity.BlockEntity; -import net.minecraft.world.level.block.entity.BlockEntityType; - -public interface BlockEntityRendererRegistry { - - static final BlockEntityRendererRegistry service = ServiceHelper.loadService(BlockEntityRendererRegistry.class); - - void registerS(BlockEntityType blockEntityType, Function> factory); - - static void register(BlockEntityType blockEntityType, Function> factory) { - service.registerS(blockEntityType, factory); - } - -} diff --git a/projects/MinecraftAPI/src/main/java/li/cil/ocreloaded/minecraft/api/registry/client/rendering/ColorHandlerRegistry.java b/projects/MinecraftAPI/src/main/java/li/cil/ocreloaded/minecraft/api/registry/client/rendering/ColorHandlerRegistry.java deleted file mode 100644 index b5bf074..0000000 --- a/projects/MinecraftAPI/src/main/java/li/cil/ocreloaded/minecraft/api/registry/client/rendering/ColorHandlerRegistry.java +++ /dev/null @@ -1,39 +0,0 @@ -package li.cil.ocreloaded.minecraft.api.registry.client.rendering; - -import li.cil.ocreloaded.minecraft.api.ServiceHelper; -import net.minecraft.core.BlockPos; -import net.minecraft.world.item.Item; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.level.BlockAndTintGetter; -import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.block.state.BlockState; - -public interface ColorHandlerRegistry { - - static final ColorHandlerRegistry service = ServiceHelper.loadService(ColorHandlerRegistry.class); - - void registerBlockColorsS(ColorRegisteryBlockEntry colorRegistryEntry, Block[] blocks); - - void registerItemColorsS(ColorRegisteryItemEntry colorRegisteryEntry, Item[] items); - - static void registerBlockColors(ColorRegisteryBlockEntry colorRegistryEntry, Block[] blocks) { - service.registerBlockColorsS(colorRegistryEntry, blocks); - } - - static void registerItemColors(ColorRegisteryItemEntry colorRegisteryEntry, Item[] items) { - service.registerItemColorsS(colorRegisteryEntry, items); - } - - static interface ColorRegisteryBlockEntry { - - int getColor(BlockState blockState, BlockAndTintGetter blockAndTintGetter, BlockPos blockPos, int tintIndex); - - } - - static interface ColorRegisteryItemEntry { - - int getColor(ItemStack itemStack, int tintIndex); - - } - -} diff --git a/projects/MinecraftAPI/src/main/java/li/cil/ocreloaded/minecraft/api/registry/menu/MenuRegistry.java b/projects/MinecraftAPI/src/main/java/li/cil/ocreloaded/minecraft/api/registry/menu/MenuRegistry.java deleted file mode 100644 index db1578f..0000000 --- a/projects/MinecraftAPI/src/main/java/li/cil/ocreloaded/minecraft/api/registry/menu/MenuRegistry.java +++ /dev/null @@ -1,55 +0,0 @@ -package li.cil.ocreloaded.minecraft.api.registry.menu; - -import java.util.function.Consumer; - -import javax.annotation.Nullable; - -import li.cil.ocreloaded.minecraft.api.ServiceHelper; -import net.minecraft.client.gui.screens.Screen; -import net.minecraft.client.gui.screens.inventory.MenuAccess; -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.inventory.AbstractContainerMenu; -import net.minecraft.world.inventory.MenuType; - -public interface MenuRegistry { - - static final MenuRegistry service = ServiceHelper.loadService(MenuRegistry.class); - - void openExtendedMenuS(ServerPlayer serverPlayer, MenuProvider screenMenuProvider, Consumer byteBufConsumer); - - MenuType ofExtendedS(TypedMenuConstructor menuConstructor); - - > void registerScreenFactoryS(MenuType menu, TypedScreenConstructor screenConstructor); - - static void openExtendedMenu(ServerPlayer serverPlayer, MenuProvider screenMenuProvider, Consumer byteBufConsumer) { - service.openExtendedMenuS(serverPlayer, screenMenuProvider, byteBufConsumer); - } - - static MenuType ofExtended(TypedMenuConstructor menuConstructor) { - return service.ofExtendedS(menuConstructor); - } - - static > void registerScreenFactory(MenuType menu, TypedScreenConstructor screenConstructor) { - service.registerScreenFactoryS(menu, screenConstructor); - } - - @FunctionalInterface - interface TypedMenuConstructor { - - @Nullable - T createMenu(int containerId, Inventory playerInventory, FriendlyByteBuf buf); - - } - - @FunctionalInterface - interface TypedScreenConstructor> { - - U create(T menu, Inventory inventory, Component title); - - } - -} diff --git a/projects/MinecraftAPI/src/main/java/li/cil/ocreloaded/minecraft/api/registry/registries/DeferredRegister.java b/projects/MinecraftAPI/src/main/java/li/cil/ocreloaded/minecraft/api/registry/registries/DeferredRegister.java deleted file mode 100644 index 015808c..0000000 --- a/projects/MinecraftAPI/src/main/java/li/cil/ocreloaded/minecraft/api/registry/registries/DeferredRegister.java +++ /dev/null @@ -1,23 +0,0 @@ -package li.cil.ocreloaded.minecraft.api.registry.registries; - -import java.util.function.Supplier; - -import dev.architectury.registry.registries.RegistrySupplier; -import li.cil.ocreloaded.minecraft.api.ServiceHelper; -import li.cil.ocreloaded.minecraft.api.service.ModUtilService; -import net.minecraft.core.Registry; -import net.minecraft.resources.ResourceKey; - -public interface DeferredRegister { - - static final ModUtilService service = ServiceHelper.loadService(ModUtilService.class); - - public static DeferredRegister create(String modId, ResourceKey> registryKey) { - return service.createDeferredRegister(modId, registryKey); - }; - - RegistrySupplier register(String path, Supplier valueSupplier); - - void register(); - -} diff --git a/projects/MinecraftAPI/src/main/java/li/cil/ocreloaded/minecraft/api/service/ModUtilService.java b/projects/MinecraftAPI/src/main/java/li/cil/ocreloaded/minecraft/api/service/ModUtilService.java deleted file mode 100644 index 08bfb10..0000000 --- a/projects/MinecraftAPI/src/main/java/li/cil/ocreloaded/minecraft/api/service/ModUtilService.java +++ /dev/null @@ -1,17 +0,0 @@ -package li.cil.ocreloaded.minecraft.api.service; - -import li.cil.ocreloaded.minecraft.api.BlockEntityTypeHelper.BlockEntityConstructor; -import li.cil.ocreloaded.minecraft.api.registry.registries.DeferredRegister; -import net.minecraft.core.Registry; -import net.minecraft.resources.ResourceKey; -import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.block.entity.BlockEntity; -import net.minecraft.world.level.block.entity.BlockEntityType; - -public interface ModUtilService { - - DeferredRegister createDeferredRegister(String modId, ResourceKey> registryKey); - - BlockEntityType createBlockEntityType(BlockEntityConstructor constructor, Block[] blocks); - -} diff --git a/projects/NeoForge/build.gradle.kts b/projects/NeoForge/build.gradle.kts index af01de4..a05ff85 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 { @@ -21,4 +23,12 @@ neoForge { dependencies { implementation(project(":Minecraft")) + "additionalRuntimeClasspath"(libs.typesafeConfig) + "additionalRuntimeClasspath"(files("../../libs/OpenComputers-JNLua.jar", "../../libs/OpenComputers-LuaJ.jar")) +} + +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/NeoPlatformRegistryHelper.java b/projects/NeoForge/src/main/java/li/cil/ocreloaded/neoforge/common/NeoPlatformRegistryHelper.java new file mode 100644 index 0000000..a0c9764 --- /dev/null +++ b/projects/NeoForge/src/main/java/li/cil/ocreloaded/neoforge/common/NeoPlatformRegistryHelper.java @@ -0,0 +1,29 @@ +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 + 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/ocreloaded.mixins.json b/projects/NeoForge/src/main/resources/ocreloaded.mixins.json deleted file mode 100644 index 06a5e0e..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_21", - "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 9715b1d..0000000 --- a/projects/NeoForge/src/main/resources/pack.mcmeta +++ /dev/null @@ -1,6 +0,0 @@ -{ - "pack": { - "pack_format": 32, - "description": "OpenComputers Reloaded Resource Pack" - } -} \ No newline at end of file diff --git a/settings.gradle.kts b/settings.gradle.kts index 21e50b7..523c101 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -18,7 +18,6 @@ pluginManagement { rootProject.name = "OpenComputersReloaded" include("Core") -include("MinecraftAPI") include("Minecraft") include("NeoForge") include("Fabric") From a83238d92ce76cec37ee06aea927d8ae2cc8f298 Mon Sep 17 00:00:00 2001 From: Jason Gronn Date: Mon, 29 Sep 2025 19:18:40 -0400 Subject: [PATCH 04/10] Organize Creative Menu; Open Screens --- .../common/FabricPlatformMenuHelper.java | 42 +++++++ .../common/FabricPlatformRegistryHelper.java | 13 +- ....minecraft.common.util.IPlatformMenuHelper | 1 + .../minecraft/common/block/CaseBlock.java | 4 +- .../minecraft/common/block/ScreenBlock.java | 4 +- .../common/entity/CaseBlockEntity.java | 35 +++--- .../common/registry/CommonRegistered.java | 118 ++++++++++-------- .../registry/IPlatformRegistryHelper.java | 10 +- .../minecraft/common/util/Colors.java | 1 - .../common/util/IPlatformMenuHelper.java | 16 +++ .../common/NeoPlatformMenuHelper.java | 17 +++ .../common/NeoPlatformRegistryHelper.java | 1 + ....minecraft.common.util.IPlatformMenuHelper | 1 + 13 files changed, 187 insertions(+), 76 deletions(-) create mode 100644 projects/Fabric/src/main/java/li/cil/ocreloaded/fabric/common/FabricPlatformMenuHelper.java create mode 100644 projects/Fabric/src/main/resources/META-INF/services/li.cil.ocreloaded.minecraft.common.util.IPlatformMenuHelper create mode 100644 projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/util/IPlatformMenuHelper.java create mode 100644 projects/NeoForge/src/main/java/li/cil/ocreloaded/neoforge/common/NeoPlatformMenuHelper.java create mode 100644 projects/NeoForge/src/main/resources/META-INF/services/li.cil.ocreloaded.minecraft.common.util.IPlatformMenuHelper 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..3b28576 --- /dev/null +++ b/projects/Fabric/src/main/java/li/cil/ocreloaded/fabric/common/FabricPlatformMenuHelper.java @@ -0,0 +1,42 @@ +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 index 1d61a2b..76247c5 100644 --- 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 @@ -1,9 +1,10 @@ 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.RegistryFriendlyByteBuf; +import net.minecraft.network.FriendlyByteBuf; import net.minecraft.network.codec.StreamCodec; import net.minecraft.world.inventory.AbstractContainerMenu; import net.minecraft.world.inventory.MenuType; @@ -25,8 +26,14 @@ public BlockEntityType createBlockEntityType(BlockEnt @Override public MenuType registerMenuType(TypedMenuConstructor menuConstructor) { - ExtendedScreenHandlerType.ExtendedFactory screenFactory = menuConstructor::createMenu; + ExtendedScreenHandlerType.ExtendedFactory screenFactory = menuConstructor::createMenu; - return new ExtendedScreenHandlerType<>(screenFactory, StreamCodec.of((object, object2) -> {}, object -> null)); + 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.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/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 01e60f3..b9fa769 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 @@ -2,6 +2,7 @@ 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; @@ -49,8 +50,7 @@ public InteractionResult useWithoutItem(BlockState state, Level level, BlockPos BlockEntity blockEntity = level.getBlockEntity(pos); if (blockEntity instanceof CaseBlockEntity caseBlockEntity && player instanceof ServerPlayer serverPlayer) { - // TODO: add back a way to open menus :PP - // MenuRegistry.openExtendedMenu(serverPlayer, caseBlockEntity, caseBlockEntity::writeData); + IPlatformMenuHelper.INSTANCE.openExtendedMenu(serverPlayer, caseBlockEntity, caseBlockEntity::writeData); } return InteractionResult.CONSUME; 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 19642fd..49dacd6 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 @@ -2,6 +2,7 @@ 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; @@ -62,8 +63,7 @@ public InteractionResult useWithoutItem(BlockState state, Level level, BlockPos && player instanceof ServerPlayer serverPlayer && isKeyboardConnected(level, pos) ) { - // TODO: add back a way to open menus :PP - //MenuRegistry.openExtendedMenu(serverPlayer, menuProvider, screenMenuProvider::writeData); + IPlatformMenuHelper.INSTANCE.openExtendedMenu(serverPlayer, menuProvider, screenMenuProvider::writeData); return InteractionResult.CONSUME; } } diff --git a/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/entity/CaseBlockEntity.java b/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/entity/CaseBlockEntity.java index 2f710ca..ecac373 100644 --- a/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/entity/CaseBlockEntity.java +++ b/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/entity/CaseBlockEntity.java @@ -1,10 +1,29 @@ package li.cil.ocreloaded.minecraft.common.entity; +import java.io.InputStream; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Optional; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.function.Supplier; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import io.netty.buffer.Unpooled; import li.cil.ocreloaded.core.component.ComputerComponent; import li.cil.ocreloaded.core.component.FileSystemComponent; import li.cil.ocreloaded.core.filesystem.InMemoryFileSystem; -import li.cil.ocreloaded.core.machine.*; +import li.cil.ocreloaded.core.machine.Machine; +import li.cil.ocreloaded.core.machine.MachineCodeRegistry; +import li.cil.ocreloaded.core.machine.MachineParameters; +import li.cil.ocreloaded.core.machine.MachineRegistry; +import li.cil.ocreloaded.core.machine.MachineRegistryEntry; +import li.cil.ocreloaded.core.machine.Persistable; +import li.cil.ocreloaded.core.machine.PersistenceHolder; import li.cil.ocreloaded.core.machine.component.Component; import li.cil.ocreloaded.core.machine.imp.MachineProcessorImp; import li.cil.ocreloaded.core.misc.Label; @@ -25,10 +44,8 @@ import net.minecraft.core.BlockPos; import net.minecraft.core.HolderLookup; import net.minecraft.core.NonNullList; -import net.minecraft.core.RegistryAccess; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.FriendlyByteBuf; -import net.minecraft.network.RegistryFriendlyByteBuf; import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.ContainerHelper; @@ -39,18 +56,6 @@ import net.minecraft.world.level.Level; import net.minecraft.world.level.block.entity.RandomizableContainerBlockEntity; import net.minecraft.world.level.block.state.BlockState; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.io.InputStream; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; -import java.util.Optional; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; -import java.util.function.Supplier; public class CaseBlockEntity extends RandomizableContainerBlockEntity implements TickableEntity, ComponentTileEntity, ItemChangeListener, Persistable { 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 cf371bf..d23baa6 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,5 +1,9 @@ package li.cil.ocreloaded.minecraft.common.registry; +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; @@ -7,7 +11,15 @@ import li.cil.ocreloaded.minecraft.common.entity.CaseBlockEntity; import li.cil.ocreloaded.minecraft.common.entity.KeyboardBlockEntity; import li.cil.ocreloaded.minecraft.common.entity.ScreenBlockEntity; -import li.cil.ocreloaded.minecraft.common.item.*; +import li.cil.ocreloaded.minecraft.common.item.CPUItem; +import li.cil.ocreloaded.minecraft.common.item.DataCardItem; +import li.cil.ocreloaded.minecraft.common.item.EepromItem; +import li.cil.ocreloaded.minecraft.common.item.FloppyDiskItem; +import li.cil.ocreloaded.minecraft.common.item.GraphicsCardItem; +import li.cil.ocreloaded.minecraft.common.item.HardDiskItem; +import li.cil.ocreloaded.minecraft.common.item.LuaEepromItem; +import li.cil.ocreloaded.minecraft.common.item.ManualItem; +import li.cil.ocreloaded.minecraft.common.item.MemoryItem; import li.cil.ocreloaded.minecraft.common.menu.CaseMenu; import li.cil.ocreloaded.minecraft.common.menu.ScreenMenu; import li.cil.ocreloaded.minecraft.common.network.NetworkUtil; @@ -36,6 +48,8 @@ public class CommonRegistered { private static final RegistrationProvider> BLOCK_ENTITIES = RegistrationProvider.get(Registries.BLOCK_ENTITY_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() { NetworkUtil.getInstance().registerHandler("ocreloaded:power", new PowerNetworkHandler()); NetworkUtil.getInstance().registerHandler("ocreloaded:screen", new ScreenNetworkHandler()); @@ -48,7 +62,7 @@ public static void initialize() { .icon(() -> new ItemStack(CommonRegistered.CASE_BLOCK_ITEM_TIER_1.get())) .displayItems((parameters, output) -> { // TODO: Order items like they previously were - for (RegistryObject entry : ITEMS.getEntries()) { + for (RegistryObject entry : CREATIVE_TAB_ITEMS) { output.accept(entry.get()); } }) @@ -69,68 +83,68 @@ public static void initialize() { public static final RegistryObject KEYBOARD_BLOCK = BLOCKS.register("keyboard", () -> new KeyboardBlock(DEFAULT_BLOCK_PROPERTIES.noCollission())); // Items - public static final RegistryObject CASE_BLOCK_ITEM_TIER_1 = ITEMS.register("case1", () -> new BlockItem(CASE_BLOCK_TIER_1.get(), DEFAULT_ITEM_PROPERTIES)); - public static final RegistryObject CASE_BLOCK_ITEM_TIER_2 = ITEMS.register("case2", () -> new BlockItem(CASE_BLOCK_TIER_2.get(), DEFAULT_ITEM_PROPERTIES)); - public static final RegistryObject CASE_BLOCK_ITEM_TIER_3 = ITEMS.register("case3", () -> new BlockItem(CASE_BLOCK_TIER_3.get(), DEFAULT_ITEM_PROPERTIES)); - public static final RegistryObject CASE_BLOCK_ITEM_CREATIVE = ITEMS.register("casecreative", () -> new BlockItem(CASE_BLOCK_CREATIVE.get(), 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 RegistryObject KEYBOARD_BLOCK_ITEM = ITEMS.register("keyboard", () -> new BlockItem(KEYBOARD_BLOCK.get(), DEFAULT_ITEM_PROPERTIES)); + public static final RegistryObject KEYBOARD_BLOCK_ITEM = registerItem("keyboard", () -> new BlockItem(KEYBOARD_BLOCK.get(), DEFAULT_ITEM_PROPERTIES)); - public static final RegistryObject SCREEN_BLOCK_ITEM_TIER_1 = ITEMS.register("screen1", () -> new BlockItem(SCREEN_BLOCK_TIER_1.get(), DEFAULT_ITEM_PROPERTIES)); - public static final RegistryObject SCREEN_BLOCK_ITEM_TIER_2 = ITEMS.register("screen2", () -> new BlockItem(SCREEN_BLOCK_TIER_2.get(), DEFAULT_ITEM_PROPERTIES)); - public static final RegistryObject SCREEN_BLOCK_ITEM_TIER_3 = ITEMS.register("screen3", () -> new BlockItem(SCREEN_BLOCK_TIER_3.get(), 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 RegistryObject ARITHMETIC_LOGIC_UNIT = ITEMS.register("alu", () -> new Item(DEFAULT_ITEM_PROPERTIES)); - public static final RegistryObject ARROW_KEYS = ITEMS.register("arrow_keys", () -> new Item(DEFAULT_ITEM_PROPERTIES)); - public static final RegistryObject BUTTON_GROUP = ITEMS.register("button_group", () -> new Item(DEFAULT_ITEM_PROPERTIES)); - public static final RegistryObject CARD = ITEMS.register("card", () -> new Item(DEFAULT_ITEM_PROPERTIES)); - public static final RegistryObject 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 RegistryObject CUTTING_WIRE = ITEMS.register("cutting_wire", () -> new Item(DEFAULT_ITEM_PROPERTIES)); - public static final RegistryObject 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 RegistryObject DISK = ITEMS.register("disk", () -> new Item(DEFAULT_ITEM_PROPERTIES)); + public static final RegistryObject DISK = registerItem("disk", () -> new Item(DEFAULT_ITEM_PROPERTIES)); - public static final RegistryObject CHIP_TIER_1 = ITEMS.register("chip1", () -> new CPUItem(DEFAULT_ITEM_PROPERTIES, 1)); - public static final RegistryObject CHIP_TIER_2 = ITEMS.register("chip2", () -> new CPUItem(DEFAULT_ITEM_PROPERTIES, 2)); - public static final RegistryObject 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 RegistryObject NUMPAD = ITEMS.register("numpad", () -> new Item(DEFAULT_ITEM_PROPERTIES)); + public static final RegistryObject NUMPAD = registerItem("numpad", () -> new Item(DEFAULT_ITEM_PROPERTIES)); - public static final RegistryObject PRINTED_CIRCUIT_BOARD = ITEMS.register("printed_circuit_board", () -> new Item(DEFAULT_ITEM_PROPERTIES)); - public static final RegistryObject 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 RegistryObject TRANSISTOR = ITEMS.register("transistor", () -> new Item(DEFAULT_ITEM_PROPERTIES)); - public static final RegistryObject 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 RegistryObject CPU_TIER_1 = ITEMS.register("cpu1", () -> new CPUItem(DEFAULT_ITEM_PROPERTIES, 1)); - public static final RegistryObject CPU_TIER_2 = ITEMS.register("cpu2", () -> new CPUItem(DEFAULT_ITEM_PROPERTIES, 2)); - public static final RegistryObject 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 RegistryObject MEMORY_TIER_1 = ITEMS.register("memory1", () -> new MemoryItem(DEFAULT_ITEM_PROPERTIES, 1)); - public static final RegistryObject MEMORY_TIER_1_5 = ITEMS.register("memory1_5", () -> new MemoryItem(DEFAULT_ITEM_PROPERTIES, 1)); - public static final RegistryObject MEMORY_TIER_2 = ITEMS.register("memory2", () -> new MemoryItem(DEFAULT_ITEM_PROPERTIES, 2)); - public static final RegistryObject MEMORY_TIER_2_5 = ITEMS.register("memory2_5", () -> new MemoryItem(DEFAULT_ITEM_PROPERTIES, 2)); - public static final RegistryObject MEMORY_TIER_3 = ITEMS.register("memory3", () -> new MemoryItem(DEFAULT_ITEM_PROPERTIES, 3)); - public static final RegistryObject 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 RegistryObject DATACARD_TIER_1 = ITEMS.register("datacard1", () -> new DataCardItem(DEFAULT_ITEM_PROPERTIES, 1)); - public static final RegistryObject DATACARD_TIER_2 = ITEMS.register("datacard2", () -> new DataCardItem(DEFAULT_ITEM_PROPERTIES, 2)); - public static final RegistryObject DATACARD_TIER_3 = ITEMS.register("datacard3", () -> new DataCardItem(DEFAULT_ITEM_PROPERTIES, 3)); - public static final RegistryObject GRAPHICSCARD_TIER_1 = ITEMS.register("graphicscard1", () -> new GraphicsCardItem(DEFAULT_ITEM_PROPERTIES, 1)); - public static final RegistryObject GRAPHICSCARD_TIER_2 = ITEMS.register("graphicscard2", () -> new GraphicsCardItem(DEFAULT_ITEM_PROPERTIES, 2)); - public static final RegistryObject 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 RegistryObject EEPROM = ITEMS.register("eeprom", () -> new EepromItem(DEFAULT_ITEM_PROPERTIES)); - public static final RegistryObject FLOPPY = ITEMS.register("floppy", () -> new FloppyDiskItem(DEFAULT_ITEM_PROPERTIES)); - public static final RegistryObject HARDDISKDRIVE_TIER_1 = ITEMS.register("harddiskdrive1", () -> new HardDiskItem(DEFAULT_ITEM_PROPERTIES, 1)); - public static final RegistryObject HARDDISKDRIVE_TIER_2 = ITEMS.register("harddiskdrive2", () -> new HardDiskItem(DEFAULT_ITEM_PROPERTIES, 2)); - public static final RegistryObject 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 RegistryObject FLOPPY_OPENOS = ITEMS.register("floppy_openos", () -> new FloppyDiskItem(DEFAULT_ITEM_PROPERTIES, "loot:openos")); - public static final RegistryObject 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 RegistryObject 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 RegistryObject, MenuType> CASE_MENU_TYPE = MENUS.register("case", () -> IPlatformRegistryHelper.INSTANCE.registerMenuType(CaseMenu::new)); @@ -141,4 +155,10 @@ public static void initialize() { 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())); + 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 index 839ec84..48e2b4b 100644 --- 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 @@ -1,7 +1,9 @@ package li.cil.ocreloaded.minecraft.common.registry; +import java.util.ServiceLoader; + import net.minecraft.core.BlockPos; -import net.minecraft.network.RegistryFriendlyByteBuf; +import net.minecraft.network.FriendlyByteBuf; import net.minecraft.world.entity.player.Inventory; import net.minecraft.world.inventory.AbstractContainerMenu; import net.minecraft.world.inventory.MenuType; @@ -11,9 +13,8 @@ import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockState; -import java.util.ServiceLoader; - public interface IPlatformRegistryHelper { + IPlatformRegistryHelper INSTANCE = ServiceLoader.load(IPlatformRegistryHelper.class).findFirst().orElseThrow(); CreativeModeTab.Builder constructTabBuilder(); @@ -28,6 +29,7 @@ interface BlockEntityConstructor { @FunctionalInterface interface TypedMenuConstructor { - T createMenu(int containerId, Inventory playerInventory, RegistryFriendlyByteBuf buf); + 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/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..567bb6f --- /dev/null +++ b/projects/NeoForge/src/main/java/li/cil/ocreloaded/neoforge/common/NeoPlatformMenuHelper.java @@ -0,0 +1,17 @@ +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, b -> byteBufConsumer.accept(b)); + } + +} 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 index a0c9764..8f35421 100644 --- 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 @@ -16,6 +16,7 @@ public CreativeModeTab.Builder constructTabBuilder() { } @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 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 From 7dc96deb3a14679102bb958d4add5086600e9cf7 Mon Sep 17 00:00:00 2001 From: Jason Gronn Date: Mon, 29 Sep 2025 19:41:36 -0400 Subject: [PATCH 05/10] Add non-null annotations --- .../minecraft/common/block/CaseBlock.java | 18 +++++++++----- .../minecraft/common/block/KeyboardBlock.java | 12 ++++++---- .../minecraft/common/block/ScreenBlock.java | 24 ++++++++++++------- .../component/ComponentNetworkUtil.java | 6 ++++- .../common/container/BasicContainer.java | 6 +++-- .../common/entity/CaseBlockEntity.java | 21 +++++++++------- .../common/entity/KeyboardBlockEntity.java | 11 +++++---- .../common/entity/ScreenBlockEntity.java | 11 +++++---- .../minecraft/common/menu/CaseMenu.java | 6 +++-- .../minecraft/common/menu/ComponentSlot.java | 4 +++- .../minecraft/common/menu/ScreenMenu.java | 6 +++-- .../menu/provider/ScreenMenuProvider.java | 4 +++- .../server/machine/lua/LuaCFactory.java | 2 +- 13 files changed, 86 insertions(+), 45 deletions(-) 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 b9fa769..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,6 +1,9 @@ package li.cil.ocreloaded.minecraft.common.block; +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; @@ -43,7 +46,7 @@ public int getTier() { } @Override - public InteractionResult useWithoutItem(BlockState state, Level level, BlockPos pos, Player player, 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; } @@ -57,31 +60,34 @@ public InteractionResult useWithoutItem(BlockState state, Level level, BlockPos } @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 49dacd6..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,5 +1,8 @@ package li.cil.ocreloaded.minecraft.common.block; +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; @@ -48,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 useWithoutItem(BlockState state, Level level, BlockPos pos, Player player, BlockHitResult hitResult) { + 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 ( @@ -72,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) { @@ -91,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)); @@ -147,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); @@ -199,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; @@ -279,7 +282,9 @@ 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) 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 6d55bd2..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; @@ -37,29 +39,28 @@ public void setRemoved() { } @Override - public void loadAdditional(CompoundTag compoundTag, HolderLookup.Provider registries) { + 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, HolderLookup.Provider registries) { + 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 0646f3c..0e44f7a 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,8 @@ import java.util.List; +import javax.annotation.Nonnull; + import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -61,9 +63,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]; @@ -78,7 +79,8 @@ public void setLevel(Level level) { } @Override - public void loadAdditional(CompoundTag compoundTag, HolderLookup.Provider registries) { + @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)); @@ -87,12 +89,13 @@ public void loadAdditional(CompoundTag compoundTag, HolderLookup.Provider regist } @Override - public void saveAdditional(CompoundTag compoundTag, HolderLookup.Provider registries) { + 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) { 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 4492c47..ca36519 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 @@ -21,6 +21,8 @@ import java.util.List; +import javax.annotation.Nonnull; + public class CaseMenu extends AbstractContainerMenu { private static final List> COMPONENT_SLOTS = List.of( @@ -89,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); } 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 Date: Mon, 29 Sep 2025 19:45:02 -0400 Subject: [PATCH 06/10] A few more nonnull annotations I missed --- .../minecraft/client/renderer/entity/CaseRenderer.java | 7 ++++++- .../client/renderer/entity/screen/ScreenRenderer.java | 6 ++++-- .../cil/ocreloaded/minecraft/client/screen/CaseScreen.java | 6 ++++-- .../ocreloaded/minecraft/client/screen/ScreenScreen.java | 7 +++++-- .../minecraft/client/screen/widget/ButtonWidget.java | 6 ++++-- .../cil/ocreloaded/minecraft/client/sound/BeepSound.java | 3 ++- 6 files changed, 25 insertions(+), 10 deletions(-) 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/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 1bdd325..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,7 +58,7 @@ 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( ResourceLocation.fromNamespaceAndPath("minecraft", "intentionally_empty"), From 54a32051a3999444fe306789f849b4f57ef1cdd4 Mon Sep 17 00:00:00 2001 From: Jason Gronn Date: Mon, 29 Sep 2025 22:06:50 -0400 Subject: [PATCH 07/10] Computer can run on Fabric again! --- buildSrc/src/main/kotlin/oc-loader.gradle.kts | 10 ++ .../common/FabricPlatformNetworkHelper.java | 116 ++++++++++++++++++ ...raft.common.network.IPlatformNetworkHelper | 1 + projects/Minecraft/build.gradle.kts | 10 -- .../common/entity/CaseBlockEntity.java | 10 +- .../network/IPlatformNetworkHelper.java | 36 ++++++ .../minecraft/common/network/NetworkUtil.java | 13 +- .../common/registry/CommonRegistered.java | 7 +- 8 files changed, 181 insertions(+), 22 deletions(-) create mode 100644 projects/Fabric/src/main/java/li/cil/ocreloaded/fabric/common/FabricPlatformNetworkHelper.java create mode 100644 projects/Fabric/src/main/resources/META-INF/services/li.cil.ocreloaded.minecraft.common.network.IPlatformNetworkHelper create mode 100644 projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/network/IPlatformNetworkHelper.java diff --git a/buildSrc/src/main/kotlin/oc-loader.gradle.kts b/buildSrc/src/main/kotlin/oc-loader.gradle.kts index b3afd29..737d992 100644 --- a/buildSrc/src/main/kotlin/oc-loader.gradle.kts +++ b/buildSrc/src/main/kotlin/oc-loader.gradle.kts @@ -15,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/Fabric/src/main/java/li/cil/ocreloaded/fabric/common/FabricPlatformNetworkHelper.java b/projects/Fabric/src/main/java/li/cil/ocreloaded/fabric/common/FabricPlatformNetworkHelper.java new file mode 100644 index 0000000..4931830 --- /dev/null +++ b/projects/Fabric/src/main/java/li/cil/ocreloaded/fabric/common/FabricPlatformNetworkHelper.java @@ -0,0 +1,116 @@ +package li.cil.ocreloaded.fabric.common; + +import java.util.List; +import java.util.function.BiConsumer; + +import io.netty.buffer.Unpooled; +import li.cil.ocreloaded.minecraft.common.network.IPlatformNetworkHelper; +import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking; +import net.fabricmc.fabric.api.networking.v1.PayloadTypeRegistry; +import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.network.RegistryFriendlyByteBuf; +import net.minecraft.network.codec.StreamCodec; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload.Type; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.entity.player.Player; + +public class FabricPlatformNetworkHelper implements IPlatformNetworkHelper { + + @Override + public void sendToServer(ResourceLocation location, FriendlyByteBuf buffer) { + ClientPlayNetworking.send(new ByteBasedPayload(location, buffer)); + } + + @Override + public void sendToPlayer(ServerPlayer serverPlayer, ResourceLocation location, FriendlyByteBuf buffer) { + ServerPlayNetworking.send(serverPlayer, new ByteBasedPayload(location, buffer)); + } + + @Override + public void sendToPlayers(List players, ResourceLocation location, FriendlyByteBuf buffer) { + for (ServerPlayer player: players) { + sendToPlayer(player, location, buffer); + } + } + + @Override + public void registerReceiver(Side side, ResourceLocation resourceLocation, BiConsumer handler) { + Type packetType = new Type<>(resourceLocation); + + PayloadTypeRegistry relevantRegistry = side == Side.C2S ? PayloadTypeRegistry.playC2S() : PayloadTypeRegistry.playS2C(); + relevantRegistry.register(packetType, StreamCodec.of((dest, source) -> { + dest.writeBytes(source.buffer()); + }, s -> { + FriendlyByteBuf byteBuf = new FriendlyByteBuf(Unpooled.buffer()); + byteBuf.writeBytes(s); + return new ByteBasedPayload(resourceLocation, byteBuf); + })); + + if (side == Side.C2S) { + registerServerReceiver(handler, packetType); + } else if (side == Side.S2C) { + registerClientReceiver(handler, packetType); + } + } + + private void registerServerReceiver(BiConsumer handler, Type packetType) { + ServerPlayNetworking.registerGlobalReceiver(packetType, (payload, context) -> { + handler.accept(payload.buffer(), new INetworkContext() { + + @Override + public void queue(Runnable action) { + action.run(); + } + + @Override + public Player getPlayer() { + return context.player(); + } + + }); + }); + } + + private void registerClientReceiver(BiConsumer handler, Type packetType) { + ClientPlayNetworking.registerGlobalReceiver(packetType, (payload, context) -> { + handler.accept(payload.buffer(), new INetworkContext() { + + @Override + public void queue(Runnable action) { + action.run(); + } + + @Override + public Player getPlayer() { + return context.player(); + } + + }); + }); + } + + private static class ByteBasedPayload implements CustomPacketPayload { + + private final Type type; + private final FriendlyByteBuf buffer; + + public ByteBasedPayload(ResourceLocation resourceLocation, FriendlyByteBuf buffer) { + this.type = new Type<>(resourceLocation); + this.buffer = buffer; + } + + @Override + public Type type() { + return type; + } + + public FriendlyByteBuf buffer() { + return this.buffer; + } + + } + +} diff --git a/projects/Fabric/src/main/resources/META-INF/services/li.cil.ocreloaded.minecraft.common.network.IPlatformNetworkHelper b/projects/Fabric/src/main/resources/META-INF/services/li.cil.ocreloaded.minecraft.common.network.IPlatformNetworkHelper new file mode 100644 index 0000000..cccb3dd --- /dev/null +++ b/projects/Fabric/src/main/resources/META-INF/services/li.cil.ocreloaded.minecraft.common.network.IPlatformNetworkHelper @@ -0,0 +1 @@ +li.cil.ocreloaded.fabric.common.FabricPlatformNetworkHelper \ No newline at end of file diff --git a/projects/Minecraft/build.gradle.kts b/projects/Minecraft/build.gradle.kts index a2d42cb..4eb1929 100644 --- a/projects/Minecraft/build.gradle.kts +++ b/projects/Minecraft/build.gradle.kts @@ -11,16 +11,6 @@ dependencies { } 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/common/entity/CaseBlockEntity.java b/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/entity/CaseBlockEntity.java index eb18142..c488e2e 100644 --- a/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/entity/CaseBlockEntity.java +++ b/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/entity/CaseBlockEntity.java @@ -253,10 +253,12 @@ private void loadComponent(ItemStack itemStack, Map comp if (!networkNode.component().isPresent()) return; Component component = networkNode.component().get(); - // TODO: COMEBACK - // CompoundTag tag = itemStack.getOrCreateTag(); - // component.load(new NBTPersistenceHolder(tag, SettingsConstants.namespace)); - // component.save(new NBTPersistenceHolder(tag, SettingsConstants.namespace)); + // 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); diff --git a/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/network/IPlatformNetworkHelper.java b/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/network/IPlatformNetworkHelper.java new file mode 100644 index 0000000..5a9701e --- /dev/null +++ b/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/network/IPlatformNetworkHelper.java @@ -0,0 +1,36 @@ +package li.cil.ocreloaded.minecraft.common.network; + +import java.util.List; +import java.util.ServiceLoader; +import java.util.function.BiConsumer; + +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.entity.player.Player; + +public interface IPlatformNetworkHelper { + + enum Side { + S2C, C2S; + } + + IPlatformNetworkHelper INSTANCE = ServiceLoader.load(IPlatformNetworkHelper.class).findFirst().orElseThrow(); + + void sendToPlayer(ServerPlayer serverPlayer, ResourceLocation location, FriendlyByteBuf buffer); + + void sendToServer(ResourceLocation location, FriendlyByteBuf buffer); + + void sendToPlayers(List players, ResourceLocation location, FriendlyByteBuf buffer); + + void registerReceiver(Side s2c, ResourceLocation location, BiConsumer handler); + + interface INetworkContext { + + void queue(Runnable action); + + Player getPlayer(); + + } + +} 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 1987b06..89e771b 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 @@ -19,12 +19,11 @@ public class NetworkUtil { private NetworkUtil() {} - // TODO: COMEBACK public void messageClient(NetworkMessage message, Player player) { if (player instanceof ServerPlayer serverPlayer) { ResourceLocation location = ResourceLocation.fromNamespaceAndPath(OCReloadedCommon.MOD_ID, message.getType()); FriendlyByteBuf buffer = encodeMessage(message); - //NetworkManager.sendToPlayer(serverPlayer, location, buffer); + IPlatformNetworkHelper.INSTANCE.sendToPlayer(serverPlayer, location, buffer); } else { throw new IllegalArgumentException("Player is not a server player."); } @@ -33,13 +32,13 @@ public void messageClient(NetworkMessage message, Player player) { public void messageServer(NetworkMessage message) { ResourceLocation location = ResourceLocation.fromNamespaceAndPath(OCReloadedCommon.MOD_ID, message.getType()); FriendlyByteBuf buffer = encodeMessage(message); - //NetworkManager.sendToServer(location, buffer); + IPlatformNetworkHelper.INSTANCE.sendToServer(location, buffer); } public void messageManyClients(NetworkMessage message, List players) { ResourceLocation location = ResourceLocation.fromNamespaceAndPath(OCReloadedCommon.MOD_ID, message.getType()); FriendlyByteBuf buffer = encodeMessage(message); - //NetworkManager.sendToPlayers(players, location, buffer); + IPlatformNetworkHelper.INSTANCE.sendToPlayers(players, location, buffer); } @SuppressWarnings("unchecked") @@ -47,7 +46,7 @@ public void registerHandler(String type, NetworkHandler handler) { HANDLERS.put(type, handler); ResourceLocation location = ResourceLocation.fromNamespaceAndPath(OCReloadedCommon.MOD_ID, handler.getType()); - /*NetworkManager.registerReceiver(NetworkManager.Side.S2C, location, (buffer, context) -> { + IPlatformNetworkHelper.INSTANCE.registerReceiver(IPlatformNetworkHelper.Side.S2C, location, (buffer, context) -> { context.queue(() -> { NetworkHandler messageHandler = (NetworkHandler) HANDLERS.get(location.toString()); if (messageHandler == null) { @@ -59,7 +58,7 @@ public void registerHandler(String type, NetworkHandler handler) { }); }); - NetworkManager.registerReceiver(NetworkManager.Side.C2S, location, (buffer, context) -> { + IPlatformNetworkHelper.INSTANCE.registerReceiver(IPlatformNetworkHelper.Side.C2S, location, (buffer, context) -> { context.queue(() -> { NetworkHandler messageHandler = (NetworkHandler) HANDLERS.get(location.toString()); if (messageHandler == null) { @@ -69,7 +68,7 @@ public void registerHandler(String type, NetworkHandler handler) { NetworkMessage message = messageHandler.decode(buffer); messageHandler.handleServer(message, new ServerNetworkMessageContext(context.getPlayer())); }); - });*/ + }); } @SuppressWarnings("unchecked") 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 d23baa6..f680af4 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 @@ -28,7 +28,9 @@ 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; @@ -39,13 +41,13 @@ import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockBehaviour; -@SuppressWarnings("unused") // Used in recipes, I think. public class CommonRegistered { 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<>(); @@ -155,6 +157,9 @@ public static void initialize() { 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); From 1d626b21ad62d5d9c9bc59cf50018971d6d07701 Mon Sep 17 00:00:00 2001 From: mjarduk Date: Tue, 30 Sep 2025 21:53:21 +0300 Subject: [PATCH 08/10] Networking refactor. --- buildSrc/src/main/kotlin/oc-common.gradle.kts | 3 + projects/Fabric/build.gradle.kts | 1 + .../common/FabricPlatformMenuHelper.java | 1 - .../common/FabricPlatformNetworkHelper.java | 116 ------------------ ...raft.common.network.IPlatformNetworkHelper | 1 - projects/Minecraft/build.gradle.kts | 1 + .../common/entity/CaseBlockEntity.java | 11 +- .../common/entity/ScreenBlockEntity.java | 15 +-- .../minecraft/common/menu/CaseMenu.java | 6 +- .../minecraft/common/menu/ScreenMenu.java | 40 +++--- .../network/ClientNetworkMessageContext.java | 7 -- .../network/IPlatformNetworkHelper.java | 36 ------ .../common/network/NetworkHandler.java | 19 --- .../common/network/NetworkInterface.java | 13 -- .../common/network/NetworkMessage.java | 7 -- .../minecraft/common/network/NetworkUtil.java | 95 ++------------ .../network/ServerNetworkMessageContext.java | 7 -- .../common/network/packets/PowerPacket.java | 64 ++++++++++ .../common/network/packets/ScreenPacket.java | 62 ++++++++++ .../common/network/packets/SoundPacket.java | 72 +++++++++++ .../screen/NetworkedTextModeBufferProxy.java | 8 +- .../screen/ScreenNetworkInputMessages.java | 112 +++++++++++++++++ .../network/power/PowerNetworkHandler.java | 68 ---------- .../network/power/PowerNetworkMessage.java | 31 ----- .../network/screen/ScreenNetworkHandler.java | 80 ------------ .../screen/ScreenNetworkInputMessages.java | 81 ------------ .../network/screen/ScreenNetworkMessage.java | 41 ------- .../network/sound/SoundNetworkHandler.java | 61 --------- .../network/sound/SoundNetworkMessage.java | 48 -------- .../common/registry/CommonRegistered.java | 10 +- projects/NeoForge/build.gradle.kts | 3 + .../common/NeoPlatformMenuHelper.java | 4 +- 32 files changed, 368 insertions(+), 756 deletions(-) delete mode 100644 projects/Fabric/src/main/java/li/cil/ocreloaded/fabric/common/FabricPlatformNetworkHelper.java delete mode 100644 projects/Fabric/src/main/resources/META-INF/services/li.cil.ocreloaded.minecraft.common.network.IPlatformNetworkHelper delete mode 100644 projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/network/ClientNetworkMessageContext.java delete mode 100644 projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/network/IPlatformNetworkHelper.java delete mode 100644 projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/network/NetworkHandler.java delete mode 100644 projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/network/NetworkInterface.java delete mode 100644 projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/network/NetworkMessage.java delete mode 100644 projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/network/ServerNetworkMessageContext.java create mode 100644 projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/network/packets/PowerPacket.java create mode 100644 projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/network/packets/ScreenPacket.java create mode 100644 projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/network/packets/SoundPacket.java rename projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/network/{ => packets}/screen/NetworkedTextModeBufferProxy.java (98%) create mode 100644 projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/network/packets/screen/ScreenNetworkInputMessages.java delete mode 100644 projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/network/power/PowerNetworkHandler.java delete mode 100644 projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/network/power/PowerNetworkMessage.java delete mode 100644 projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/network/screen/ScreenNetworkHandler.java delete mode 100644 projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/network/screen/ScreenNetworkInputMessages.java delete mode 100644 projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/network/screen/ScreenNetworkMessage.java delete mode 100644 projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/network/sound/SoundNetworkHandler.java delete mode 100644 projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/network/sound/SoundNetworkMessage.java 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/projects/Fabric/build.gradle.kts b/projects/Fabric/build.gradle.kts index 648c34d..2a35734 100644 --- a/projects/Fabric/build.gradle.kts +++ b/projects/Fabric/build.gradle.kts @@ -16,6 +16,7 @@ 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")) 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 index 3b28576..f6372d1 100644 --- 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 @@ -14,7 +14,6 @@ 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() { diff --git a/projects/Fabric/src/main/java/li/cil/ocreloaded/fabric/common/FabricPlatformNetworkHelper.java b/projects/Fabric/src/main/java/li/cil/ocreloaded/fabric/common/FabricPlatformNetworkHelper.java deleted file mode 100644 index 4931830..0000000 --- a/projects/Fabric/src/main/java/li/cil/ocreloaded/fabric/common/FabricPlatformNetworkHelper.java +++ /dev/null @@ -1,116 +0,0 @@ -package li.cil.ocreloaded.fabric.common; - -import java.util.List; -import java.util.function.BiConsumer; - -import io.netty.buffer.Unpooled; -import li.cil.ocreloaded.minecraft.common.network.IPlatformNetworkHelper; -import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking; -import net.fabricmc.fabric.api.networking.v1.PayloadTypeRegistry; -import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking; -import net.minecraft.network.FriendlyByteBuf; -import net.minecraft.network.RegistryFriendlyByteBuf; -import net.minecraft.network.codec.StreamCodec; -import net.minecraft.network.protocol.common.custom.CustomPacketPayload; -import net.minecraft.network.protocol.common.custom.CustomPacketPayload.Type; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.server.level.ServerPlayer; -import net.minecraft.world.entity.player.Player; - -public class FabricPlatformNetworkHelper implements IPlatformNetworkHelper { - - @Override - public void sendToServer(ResourceLocation location, FriendlyByteBuf buffer) { - ClientPlayNetworking.send(new ByteBasedPayload(location, buffer)); - } - - @Override - public void sendToPlayer(ServerPlayer serverPlayer, ResourceLocation location, FriendlyByteBuf buffer) { - ServerPlayNetworking.send(serverPlayer, new ByteBasedPayload(location, buffer)); - } - - @Override - public void sendToPlayers(List players, ResourceLocation location, FriendlyByteBuf buffer) { - for (ServerPlayer player: players) { - sendToPlayer(player, location, buffer); - } - } - - @Override - public void registerReceiver(Side side, ResourceLocation resourceLocation, BiConsumer handler) { - Type packetType = new Type<>(resourceLocation); - - PayloadTypeRegistry relevantRegistry = side == Side.C2S ? PayloadTypeRegistry.playC2S() : PayloadTypeRegistry.playS2C(); - relevantRegistry.register(packetType, StreamCodec.of((dest, source) -> { - dest.writeBytes(source.buffer()); - }, s -> { - FriendlyByteBuf byteBuf = new FriendlyByteBuf(Unpooled.buffer()); - byteBuf.writeBytes(s); - return new ByteBasedPayload(resourceLocation, byteBuf); - })); - - if (side == Side.C2S) { - registerServerReceiver(handler, packetType); - } else if (side == Side.S2C) { - registerClientReceiver(handler, packetType); - } - } - - private void registerServerReceiver(BiConsumer handler, Type packetType) { - ServerPlayNetworking.registerGlobalReceiver(packetType, (payload, context) -> { - handler.accept(payload.buffer(), new INetworkContext() { - - @Override - public void queue(Runnable action) { - action.run(); - } - - @Override - public Player getPlayer() { - return context.player(); - } - - }); - }); - } - - private void registerClientReceiver(BiConsumer handler, Type packetType) { - ClientPlayNetworking.registerGlobalReceiver(packetType, (payload, context) -> { - handler.accept(payload.buffer(), new INetworkContext() { - - @Override - public void queue(Runnable action) { - action.run(); - } - - @Override - public Player getPlayer() { - return context.player(); - } - - }); - }); - } - - private static class ByteBasedPayload implements CustomPacketPayload { - - private final Type type; - private final FriendlyByteBuf buffer; - - public ByteBasedPayload(ResourceLocation resourceLocation, FriendlyByteBuf buffer) { - this.type = new Type<>(resourceLocation); - this.buffer = buffer; - } - - @Override - public Type type() { - return type; - } - - public FriendlyByteBuf buffer() { - return this.buffer; - } - - } - -} diff --git a/projects/Fabric/src/main/resources/META-INF/services/li.cil.ocreloaded.minecraft.common.network.IPlatformNetworkHelper b/projects/Fabric/src/main/resources/META-INF/services/li.cil.ocreloaded.minecraft.common.network.IPlatformNetworkHelper deleted file mode 100644 index cccb3dd..0000000 --- a/projects/Fabric/src/main/resources/META-INF/services/li.cil.ocreloaded.minecraft.common.network.IPlatformNetworkHelper +++ /dev/null @@ -1 +0,0 @@ -li.cil.ocreloaded.fabric.common.FabricPlatformNetworkHelper \ No newline at end of file diff --git a/projects/Minecraft/build.gradle.kts b/projects/Minecraft/build.gradle.kts index 4eb1929..17b47c1 100644 --- a/projects/Minecraft/build.gradle.kts +++ b/projects/Minecraft/build.gradle.kts @@ -8,6 +8,7 @@ neoForge { dependencies { api(project(":Core")) + implementation("mysticdrew:common-networking-common:1.0.20-1.21.1") } tasks.register("copyResources") { diff --git a/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/entity/CaseBlockEntity.java b/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/entity/CaseBlockEntity.java index c488e2e..b9ce1a3 100644 --- a/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/entity/CaseBlockEntity.java +++ b/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/entity/CaseBlockEntity.java @@ -12,9 +12,11 @@ import javax.annotation.Nonnull; +import li.cil.ocreloaded.minecraft.common.network.packets.SoundPacket; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import commonnetwork.api.Dispatcher; import io.netty.buffer.Unpooled; import li.cil.ocreloaded.core.component.ComputerComponent; import li.cil.ocreloaded.core.component.FileSystemComponent; @@ -37,8 +39,6 @@ import li.cil.ocreloaded.minecraft.common.component.ComponentNetworkUtil; import li.cil.ocreloaded.minecraft.common.item.ComponentItem; import li.cil.ocreloaded.minecraft.common.menu.CaseMenu; -import li.cil.ocreloaded.minecraft.common.network.NetworkUtil; -import li.cil.ocreloaded.minecraft.common.network.sound.SoundNetworkMessage; import li.cil.ocreloaded.minecraft.common.persistence.NBTPersistenceHolder; import li.cil.ocreloaded.minecraft.common.registry.CommonRegistered; import li.cil.ocreloaded.minecraft.common.util.ItemList; @@ -288,10 +288,9 @@ private Optional createMachine() { 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/ScreenBlockEntity.java b/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/entity/ScreenBlockEntity.java index 0e44f7a..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 @@ -3,7 +3,8 @@ 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; @@ -18,10 +19,8 @@ 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; @@ -111,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) { @@ -155,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/menu/CaseMenu.java b/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/menu/CaseMenu.java index ca36519..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,11 +1,11 @@ package li.cil.ocreloaded.minecraft.common.menu; +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.*; -import li.cil.ocreloaded.minecraft.common.network.NetworkUtil; -import li.cil.ocreloaded.minecraft.common.network.power.PowerNetworkMessage; +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; @@ -116,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/ScreenMenu.java b/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/menu/ScreenMenu.java index 938400e..d700207 100644 --- a/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/menu/ScreenMenu.java +++ b/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/menu/ScreenMenu.java @@ -1,17 +1,16 @@ package li.cil.ocreloaded.minecraft.common.menu; -import javax.annotation.Nonnull; - +import commonnetwork.api.Dispatcher; import li.cil.ocreloaded.minecraft.common.block.ScreenBlock; import li.cil.ocreloaded.minecraft.common.entity.ScreenBlockEntity; -import li.cil.ocreloaded.minecraft.common.network.NetworkUtil; -import li.cil.ocreloaded.minecraft.common.network.screen.ScreenNetworkInputMessages; +import li.cil.ocreloaded.minecraft.common.network.packets.screen.ScreenNetworkInputMessages; import li.cil.ocreloaded.minecraft.common.registry.CommonRegistered; import net.minecraft.network.FriendlyByteBuf; import net.minecraft.world.entity.player.Inventory; import net.minecraft.world.entity.player.Player; import net.minecraft.world.inventory.AbstractContainerMenu; import net.minecraft.world.item.ItemStack; +import org.jetbrains.annotations.NotNull; public class ScreenMenu extends AbstractContainerMenu { @@ -26,12 +25,12 @@ public ScreenMenu(int id, Inventory inventory, FriendlyByteBuf data) { } @Override - public ItemStack quickMoveStack(@Nonnull Player var1, int var2) { + public @NotNull ItemStack quickMoveStack(@NotNull Player var1, int var2) { return ItemStack.EMPTY; } @Override - public boolean stillValid(@Nonnull Player var1) { + public boolean stillValid(@NotNull Player var1) { return inventory.stillValid(var1); } @@ -40,49 +39,38 @@ public ScreenBlockEntity getBlockEntity() { } public void onKeyPressed(int charCode, int keyCode) { - NetworkUtil.getInstance().messageServer( - ScreenNetworkInputMessages.createKeyPressedMessage(blockEntity.getBlockPos(), charCode, keyCode)); + Dispatcher.sendToServer(ScreenNetworkInputMessages.createKeyPressedMessage(blockEntity.getBlockPos(), charCode, keyCode)); } - + public void onKeyReleased(int keyCode) { - NetworkUtil.getInstance().messageServer( - ScreenNetworkInputMessages.createKeyReleasedMessage(blockEntity.getBlockPos(), keyCode)); + Dispatcher.sendToServer(ScreenNetworkInputMessages.createKeyReleasedMessage(blockEntity.getBlockPos(), keyCode)); } public void onMousePressed(int button, double x, double y) { if (!allowMouseEvents()) return; - NetworkUtil.getInstance().messageServer( - ScreenNetworkInputMessages.createMouseMessage(ScreenNetworkInputMessages.MOUSE_PRESSED, blockEntity.getBlockPos(), button, x, y)); + Dispatcher.sendToServer(ScreenNetworkInputMessages.createMouseMessage(ScreenNetworkInputMessages.MOUSE_PRESSED, blockEntity.getBlockPos(), button, x, y)); } public void onMouseReleased(int button, double x, double y) { if (!allowMouseEvents()) return; - NetworkUtil.getInstance().messageServer( - ScreenNetworkInputMessages.createMouseMessage(ScreenNetworkInputMessages.MOUSE_RELEASED, blockEntity.getBlockPos(), button, x, y)); + Dispatcher.sendToServer(ScreenNetworkInputMessages.createMouseMessage(ScreenNetworkInputMessages.MOUSE_RELEASED, blockEntity.getBlockPos(), button, x, y)); } public void onMouseDragged(int button, double x, double y) { if (!allowMouseEvents()) return; - NetworkUtil.getInstance().messageServer( - ScreenNetworkInputMessages.createMouseMessage(ScreenNetworkInputMessages.MOUSE_DRAGGED, blockEntity.getBlockPos(), button, x, y)); + Dispatcher.sendToServer(ScreenNetworkInputMessages.createMouseMessage(ScreenNetworkInputMessages.MOUSE_DRAGGED, blockEntity.getBlockPos(), button, x, y)); } public void onMouseScrolled(int button, double x, double y) { if (!allowMouseEvents()) return; - NetworkUtil.getInstance().messageServer( - ScreenNetworkInputMessages.createMouseMessage(ScreenNetworkInputMessages.MOUSE_SCROLLED, blockEntity.getBlockPos(), button, x, y)); + Dispatcher.sendToServer(ScreenNetworkInputMessages.createMouseMessage(ScreenNetworkInputMessages.MOUSE_SCROLLED, blockEntity.getBlockPos(), button, x, y)); } private boolean allowMouseEvents() { - return - blockEntity.getBlockState().getBlock() instanceof ScreenBlock screenBlock - && screenBlock.getTier() > 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/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/IPlatformNetworkHelper.java b/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/network/IPlatformNetworkHelper.java deleted file mode 100644 index 5a9701e..0000000 --- a/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/network/IPlatformNetworkHelper.java +++ /dev/null @@ -1,36 +0,0 @@ -package li.cil.ocreloaded.minecraft.common.network; - -import java.util.List; -import java.util.ServiceLoader; -import java.util.function.BiConsumer; - -import net.minecraft.network.FriendlyByteBuf; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.server.level.ServerPlayer; -import net.minecraft.world.entity.player.Player; - -public interface IPlatformNetworkHelper { - - enum Side { - S2C, C2S; - } - - IPlatformNetworkHelper INSTANCE = ServiceLoader.load(IPlatformNetworkHelper.class).findFirst().orElseThrow(); - - void sendToPlayer(ServerPlayer serverPlayer, ResourceLocation location, FriendlyByteBuf buffer); - - void sendToServer(ResourceLocation location, FriendlyByteBuf buffer); - - void sendToPlayers(List players, ResourceLocation location, FriendlyByteBuf buffer); - - void registerReceiver(Side s2c, ResourceLocation location, BiConsumer handler); - - interface INetworkContext { - - void queue(Runnable action); - - Player getPlayer(); - - } - -} 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 89e771b..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,92 +1,19 @@ package li.cil.ocreloaded.minecraft.common.network; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -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 = ResourceLocation.fromNamespaceAndPath(OCReloadedCommon.MOD_ID, message.getType()); - FriendlyByteBuf buffer = encodeMessage(message); - IPlatformNetworkHelper.INSTANCE.sendToPlayer(serverPlayer, location, buffer); - } else { - throw new IllegalArgumentException("Player is not a server player."); - } - } - - public void messageServer(NetworkMessage message) { - ResourceLocation location = ResourceLocation.fromNamespaceAndPath(OCReloadedCommon.MOD_ID, message.getType()); - FriendlyByteBuf buffer = encodeMessage(message); - IPlatformNetworkHelper.INSTANCE.sendToServer(location, buffer); - } - - public void messageManyClients(NetworkMessage message, List players) { - ResourceLocation location = ResourceLocation.fromNamespaceAndPath(OCReloadedCommon.MOD_ID, message.getType()); - FriendlyByteBuf buffer = encodeMessage(message); - IPlatformNetworkHelper.INSTANCE.sendToPlayers(players, location, buffer); - } - - @SuppressWarnings("unchecked") - public void registerHandler(String type, NetworkHandler handler) { - HANDLERS.put(type, handler); - - ResourceLocation location = ResourceLocation.fromNamespaceAndPath(OCReloadedCommon.MOD_ID, handler.getType()); - IPlatformNetworkHelper.INSTANCE.registerReceiver(IPlatformNetworkHelper.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())); - }); - }); - - IPlatformNetworkHelper.INSTANCE.registerReceiver(IPlatformNetworkHelper.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 = ResourceLocation.fromNamespaceAndPath(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/registry/CommonRegistered.java b/projects/Minecraft/src/main/java/li/cil/ocreloaded/minecraft/common/registry/CommonRegistered.java index f680af4..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 @@ -23,9 +23,6 @@ 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; @@ -41,6 +38,7 @@ import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockBehaviour; +@SuppressWarnings("unused") public class CommonRegistered { private static final RegistrationProvider BLOCKS = RegistrationProvider.get(Registries.BLOCK, OCReloadedCommon.MOD_ID); @@ -53,9 +51,11 @@ public class CommonRegistered { private static final List> CREATIVE_TAB_ITEMS = new ArrayList<>(); public static void initialize() { - NetworkUtil.getInstance().registerHandler("ocreloaded:power", new PowerNetworkHandler()); + NetworkUtil.initialize(); + + /*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 diff --git a/projects/NeoForge/build.gradle.kts b/projects/NeoForge/build.gradle.kts index a05ff85..3136f9f 100644 --- a/projects/NeoForge/build.gradle.kts +++ b/projects/NeoForge/build.gradle.kts @@ -23,8 +23,11 @@ neoForge { dependencies { implementation(project(":Minecraft")) + "additionalRuntimeClasspath"(libs.typesafeConfig) "additionalRuntimeClasspath"(files("../../libs/OpenComputers-JNLua.jar", "../../libs/OpenComputers-LuaJ.jar")) + + implementation("mysticdrew:common-networking-neoforge:1.0.20-1.21.1") } sourceSets.main { 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 index 567bb6f..a116888 100644 --- 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 @@ -8,10 +8,8 @@ import net.minecraft.world.MenuProvider; public class NeoPlatformMenuHelper implements IPlatformMenuHelper { - @Override public void openExtendedMenu(ServerPlayer serverPlayer, MenuProvider menuProvider, Consumer byteBufConsumer) { - serverPlayer.openMenu(menuProvider, b -> byteBufConsumer.accept(b)); + serverPlayer.openMenu(menuProvider, byteBufConsumer::accept); } - } From be69dbcd4a3b3756d86264baa5f7516cfd00dd8a Mon Sep 17 00:00:00 2001 From: mjarduk Date: Tue, 30 Sep 2025 22:04:33 +0300 Subject: [PATCH 09/10] Jury rigged the LuaCFactory to not halt and catch fire if a FileExistsException is caught, because that doesn't hamper the mod's operations. --- .../minecraft/server/machine/lua/LuaCFactory.java | 7 ++++++- projects/NeoForge/build.gradle.kts | 2 ++ 2 files changed, 8 insertions(+), 1 deletion(-) 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 161b2de..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; @@ -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/NeoForge/build.gradle.kts b/projects/NeoForge/build.gradle.kts index 3136f9f..331af1c 100644 --- a/projects/NeoForge/build.gradle.kts +++ b/projects/NeoForge/build.gradle.kts @@ -26,6 +26,8 @@ dependencies { "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") } From ac4926da29ca52eb4c09ec05bae749a37bad9559 Mon Sep 17 00:00:00 2001 From: mjarduk Date: Tue, 30 Sep 2025 22:06:20 +0300 Subject: [PATCH 10/10] Fix a workflow issue. --- tools/check_crlf.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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