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..2bd1d8b 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,10 +170,9 @@ public class WebDisplays { TileInit.init(bus); PROXY.preInit(); - + MinecraftForge.EVENT_BUS.register(this); - //Other things PROXY.init(); 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..9b31bf5 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; @@ -788,5 +790,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);