This commit is contained in:
Mysticpasta1 2023-03-05 19:25:02 -06:00
commit efd632083b
6 changed files with 54 additions and 37 deletions

View File

@ -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<Level> 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;
}
}

View File

@ -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();

View File

@ -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) {

View File

@ -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;
}
}

View File

@ -89,7 +89,7 @@ public class CMessageAddScreen {
public void handle(Supplier<NetworkEvent.Context> 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());

View File

@ -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<NetworkEvent.Context> 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);