From bc7de9a7b6946bb3cd2145057cc7c03902d64b05 Mon Sep 17 00:00:00 2001 From: GiantLuigi4 <49770992+GiantLuigi4@users.noreply.github.com> Date: Sun, 5 Mar 2023 20:10:03 -0500 Subject: [PATCH 1/2] slight tweaks to networking code --- src/main/java/net/montoyo/wd/SharedProxy.java | 9 ++- src/main/java/net/montoyo/wd/WebDisplays.java | 9 ++- .../montoyo/wd/block/BlockKeyboardLeft.java | 7 --- .../net/montoyo/wd/client/ClientProxy.java | 9 ++- .../wd/net/client/CMessageAddScreen.java | 2 +- .../wd/net/client/CMessageScreenUpdate.java | 60 +++++++++++-------- 6 files changed, 59 insertions(+), 37 deletions(-) diff --git a/src/main/java/net/montoyo/wd/SharedProxy.java b/src/main/java/net/montoyo/wd/SharedProxy.java index 3ae201a..74c90a9 100644 --- a/src/main/java/net/montoyo/wd/SharedProxy.java +++ b/src/main/java/net/montoyo/wd/SharedProxy.java @@ -10,7 +10,9 @@ import net.minecraft.resources.ResourceKey; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.MinecraftServer; import net.minecraft.world.entity.player.Player; +import net.minecraft.world.level.BlockGetter; import net.minecraft.world.level.Level; +import net.minecraftforge.network.NetworkEvent; import net.minecraftforge.server.ServerLifecycleHooks; import net.montoyo.wd.core.HasAdvancement; import net.montoyo.wd.core.JSServerRequest; @@ -30,9 +32,15 @@ public class SharedProxy { public void postInit() { } + @Deprecated(forRemoval = true) public Level getWorld(ResourceKey dim) { return getServer().getLevel(dim); } + + public BlockGetter getWorld(NetworkEvent.Context context) { + if (context.getSender() != null) return context.getSender().level; + return null; + } public void enqueue(Runnable r) { ServerLifecycleHooks.getCurrentServer().addTickable(r); @@ -105,5 +113,4 @@ public class SharedProxy { public boolean isShiftDown() { return false; } - } diff --git a/src/main/java/net/montoyo/wd/WebDisplays.java b/src/main/java/net/montoyo/wd/WebDisplays.java index 99c95df..e784c8b 100644 --- a/src/main/java/net/montoyo/wd/WebDisplays.java +++ b/src/main/java/net/montoyo/wd/WebDisplays.java @@ -35,7 +35,9 @@ import net.minecraftforge.eventbus.api.IEventBus; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.DistExecutor; import net.minecraftforge.fml.ModList; +import net.minecraftforge.fml.ModLoadingContext; import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent; import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; import net.minecraftforge.fml.loading.FMLEnvironment; import net.minecraftforge.network.PacketDistributor; @@ -168,7 +170,12 @@ public class WebDisplays { TileInit.init(bus); PROXY.preInit(); - + + if (FMLEnvironment.dist.isClient()) { + ClientProxy proxy = (ClientProxy) PROXY; + FMLJavaModLoadingContext.get().getModEventBus().addListener(proxy::onClientSetup); + } + MinecraftForge.EVENT_BUS.register(this); diff --git a/src/main/java/net/montoyo/wd/block/BlockKeyboardLeft.java b/src/main/java/net/montoyo/wd/block/BlockKeyboardLeft.java index 0331ad9..f4a0ec9 100644 --- a/src/main/java/net/montoyo/wd/block/BlockKeyboardLeft.java +++ b/src/main/java/net/montoyo/wd/block/BlockKeyboardLeft.java @@ -149,13 +149,6 @@ public class BlockKeyboardLeft extends BlockPeripheral { Messages.INSTANCE.send(PacketDistributor.NEAR.with(() -> point(world, pos)), new CMessageCloseGui(pos)); } -// @Override -// public void playerDestroy(Level world, Player player, BlockPos pos, BlockState state, @Nullable BlockEntity blockEntity, ItemStack tool) { -// if(!world.isClientSide) { -// remove(state, world, pos, false, false); -// } -// } - @Override public void onRemove(BlockState arg, Level arg2, BlockPos arg3, BlockState arg4, boolean bl) { if(!arg2.isClientSide) { diff --git a/src/main/java/net/montoyo/wd/client/ClientProxy.java b/src/main/java/net/montoyo/wd/client/ClientProxy.java index a6a7e39..ec0a28e 100644 --- a/src/main/java/net/montoyo/wd/client/ClientProxy.java +++ b/src/main/java/net/montoyo/wd/client/ClientProxy.java @@ -30,6 +30,7 @@ import net.minecraft.world.entity.player.Player; import net.minecraft.world.inventory.Slot; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.BlockGetter; import net.minecraft.world.level.ClipContext; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.Block; @@ -46,6 +47,7 @@ import net.minecraftforge.event.level.LevelEvent; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent; +import net.minecraftforge.network.NetworkEvent; import net.montoyo.mcef.api.*; import net.montoyo.wd.SharedProxy; import net.montoyo.wd.WebDisplays; @@ -127,7 +129,6 @@ public class ClientProxy extends SharedProxy implements IDisplayHandler, IJSQuer private int minePadTickCounter = 0; /**************************************** INHERITED METHODS ****************************************/ - @SubscribeEvent public static void onClientSetup(FMLClientSetupEvent event) { BlockEntityRenderers.register(TileInit.SCREEN_BLOCK_ENTITY.get(), new ScreenRenderer.ScreenRendererProvider()); } @@ -788,5 +789,9 @@ public class ClientProxy extends SharedProxy implements IDisplayHandler, IJSQuer Log.warning("ClientAdvancementManager.advancementToProgress field could not be found"); return null; } - + + @Override + public BlockGetter getWorld(NetworkEvent.Context context) { + return Minecraft.getInstance().level; + } } diff --git a/src/main/java/net/montoyo/wd/net/client/CMessageAddScreen.java b/src/main/java/net/montoyo/wd/net/client/CMessageAddScreen.java index 5b551db..1b52389 100644 --- a/src/main/java/net/montoyo/wd/net/client/CMessageAddScreen.java +++ b/src/main/java/net/montoyo/wd/net/client/CMessageAddScreen.java @@ -89,7 +89,7 @@ public class CMessageAddScreen { public void handle(Supplier contextSupplier) { contextSupplier.get().enqueueWork(() -> { - BlockEntity te = WebDisplays.PROXY.getWorld(Level.OVERWORLD).getBlockEntity(pos.toBlock()); + BlockEntity te = WebDisplays.PROXY.getWorld(contextSupplier.get()).getBlockEntity(pos.toBlock()); if (!(te instanceof TileEntityScreen)) { if (clear) Log.error("CMessageAddScreen: Can't add screen to invalid tile entity at %s", pos.toString()); diff --git a/src/main/java/net/montoyo/wd/net/client/CMessageScreenUpdate.java b/src/main/java/net/montoyo/wd/net/client/CMessageScreenUpdate.java index e715a56..9bf0160 100644 --- a/src/main/java/net/montoyo/wd/net/client/CMessageScreenUpdate.java +++ b/src/main/java/net/montoyo/wd/net/client/CMessageScreenUpdate.java @@ -6,11 +6,14 @@ package net.montoyo.wd.net.client; import net.minecraft.network.FriendlyByteBuf; import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.BlockGetter; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraftforge.network.NetworkEvent; import net.montoyo.wd.WebDisplays; +import net.montoyo.wd.block.BlockScreen; import net.montoyo.wd.entity.TileEntityScreen; +import net.montoyo.wd.init.BlockInit; import net.montoyo.wd.utilities.*; import javax.annotation.Nullable; @@ -233,32 +236,39 @@ public class CMessageScreenUpdate { public void handle(Supplier contextSupplier) { contextSupplier.get().enqueueWork(() -> { - BlockEntity te = WebDisplays.PROXY.getWorld(Level.OVERWORLD).getBlockEntity(pos.toBlock()); - if(!(te instanceof TileEntityScreen)) { - Log.error("CMessageScreenUpdate: TileEntity at %s is not a screen!", pos.toString()); - return; - } - - TileEntityScreen tes = (TileEntityScreen) te; - - switch (action) { - case UPDATE_URL -> tes.setScreenURL(side, string); - case UPDATE_MOUSE -> tes.handleMouseEvent(side, mouseEvent, vec2i); - case UPDATE_DELETE -> tes.removeScreen(side); - case UPDATE_RESOLUTION -> tes.setResolution(side, vec2i); - case UPDATE_TYPE -> tes.type(side, string, null); - case UPDATE_RUN_JS -> tes.evalJS(side, string); - case UPDATE_UPGRADES -> tes.updateUpgrades(side, upgrades); - case UPDATE_JS_REDSTONE -> tes.updateJSRedstone(side, vec2i, redstoneLevel); - case UPDATE_OWNER -> { - TileEntityScreen.Screen scr = tes.getScreen(side); - if (scr != null) - scr.owner = owner; - } - case UPDATE_ROTATION -> tes.setRotation(side, rotation); - case UPDATE_AUTO_VOL -> tes.setAutoVolume(side, autoVolume); - default -> Log.warning("Caught invalid CMessageScreenUpdate with action ID %d", action); + BlockGetter level = WebDisplays.PROXY.getWorld(contextSupplier.get()); + if (level instanceof Level level1) + // ensure that the TE exists + level1.setBlock( + pos.toBlock(), + level.getBlockState(pos.toBlock()).setValue(BlockScreen.hasTE, true),11 + ); + BlockEntity te = level.getBlockEntity(pos.toBlock()); + if(!(te instanceof TileEntityScreen)) { + Log.error("CMessageScreenUpdate: TileEntity at %s is not a screen!", pos.toString()); + return; } + + TileEntityScreen tes = (TileEntityScreen) te; + + switch (action) { + case UPDATE_URL -> tes.setScreenURL(side, string); + case UPDATE_MOUSE -> tes.handleMouseEvent(side, mouseEvent, vec2i); + case UPDATE_DELETE -> tes.removeScreen(side); + case UPDATE_RESOLUTION -> tes.setResolution(side, vec2i); + case UPDATE_TYPE -> tes.type(side, string, null); + case UPDATE_RUN_JS -> tes.evalJS(side, string); + case UPDATE_UPGRADES -> tes.updateUpgrades(side, upgrades); + case UPDATE_JS_REDSTONE -> tes.updateJSRedstone(side, vec2i, redstoneLevel); + case UPDATE_OWNER -> { + TileEntityScreen.Screen scr = tes.getScreen(side); + if (scr != null) + scr.owner = owner; + } + case UPDATE_ROTATION -> tes.setRotation(side, rotation); + case UPDATE_AUTO_VOL -> tes.setAutoVolume(side, autoVolume); + default -> Log.warning("Caught invalid CMessageScreenUpdate with action ID %d", action); + } }); contextSupplier.get().setPacketHandled(true); From f78f3bb686675f92b0975a0681787b1dbfb5316a Mon Sep 17 00:00:00 2001 From: GiantLuigi4 <49770992+GiantLuigi4@users.noreply.github.com> Date: Sun, 5 Mar 2023 20:18:44 -0500 Subject: [PATCH 2/2] update gradle&mod compiles again --- build.gradle | 2 +- src/main/java/net/montoyo/wd/WebDisplays.java | 6 ------ src/main/java/net/montoyo/wd/client/ClientProxy.java | 1 + 3 files changed, 2 insertions(+), 7 deletions(-) diff --git a/build.gradle b/build.gradle index 695fe1f..8d4ee11 100644 --- a/build.gradle +++ b/build.gradle @@ -75,7 +75,7 @@ dependencies { minecraft 'net.minecraftforge:forge:1.19.2-43.2.6' annotationProcessor 'org.spongepowered:mixin:0.8.5:processor' - implementation fg.deobf("com.github.Mysticpasta1:mcef-forge:107b3b848a") + implementation fg.deobf("com.github.Mysticpasta1:mcef-forge:b8387adfc4") implementation fg.deobf("curse.maven:cloth_config_forge-348521:3972423") implementation fg.deobf("curse.maven:SU-370704:4410614") implementation fg.deobf("curse.maven:spark-361579:4381167") diff --git a/src/main/java/net/montoyo/wd/WebDisplays.java b/src/main/java/net/montoyo/wd/WebDisplays.java index e784c8b..2bd1d8b 100644 --- a/src/main/java/net/montoyo/wd/WebDisplays.java +++ b/src/main/java/net/montoyo/wd/WebDisplays.java @@ -170,15 +170,9 @@ public class WebDisplays { TileInit.init(bus); PROXY.preInit(); - - if (FMLEnvironment.dist.isClient()) { - ClientProxy proxy = (ClientProxy) PROXY; - FMLJavaModLoadingContext.get().getModEventBus().addListener(proxy::onClientSetup); - } MinecraftForge.EVENT_BUS.register(this); - //Other things PROXY.init(); diff --git a/src/main/java/net/montoyo/wd/client/ClientProxy.java b/src/main/java/net/montoyo/wd/client/ClientProxy.java index ec0a28e..9b31bf5 100644 --- a/src/main/java/net/montoyo/wd/client/ClientProxy.java +++ b/src/main/java/net/montoyo/wd/client/ClientProxy.java @@ -129,6 +129,7 @@ public class ClientProxy extends SharedProxy implements IDisplayHandler, IJSQuer private int minePadTickCounter = 0; /**************************************** INHERITED METHODS ****************************************/ + @SubscribeEvent public static void onClientSetup(FMLClientSetupEvent event) { BlockEntityRenderers.register(TileInit.SCREEN_BLOCK_ENTITY.get(), new ScreenRenderer.ScreenRendererProvider()); }