diff --git a/src/main/java/exopandora/worldhandler/WorldHandler.java b/src/main/java/exopandora/worldhandler/WorldHandler.java index d08b19d..cd78c2d 100644 --- a/src/main/java/exopandora/worldhandler/WorldHandler.java +++ b/src/main/java/exopandora/worldhandler/WorldHandler.java @@ -15,9 +15,9 @@ import exopandora.worldhandler.util.AdvancementHelper; import exopandora.worldhandler.util.CommandHelper; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.client.ClientRegistry; +import net.minecraftforge.client.event.RegisterClientCommandsEvent; import net.minecraftforge.client.event.RegisterClientReloadListenersEvent; import net.minecraftforge.common.MinecraftForge; -import net.minecraftforge.event.RegisterCommandsEvent; import net.minecraftforge.eventbus.api.IEventBus; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.DistExecutor; @@ -67,14 +67,14 @@ public class WorldHandler { MinecraftForge.EVENT_BUS.addListener(KeyHandler::keyInputEvent); MinecraftForge.EVENT_BUS.addListener(ClientEventHandler::renderLevelLastEvent); - MinecraftForge.EVENT_BUS.addListener(ClientEventHandler::clientChatEvent); + MinecraftForge.EVENT_BUS.addListener(ClientEventHandler::clientTickEvent); ClientRegistry.registerKeyBinding(KeyHandler.KEY_WORLD_HANDLER); KeyHandler.updatePosKeys(); } @SubscribeEvent - public void registerCommands(RegisterCommandsEvent event) + public void registerCommands(RegisterClientCommandsEvent event) { CommandHelper.registerCommands(event.getDispatcher(), event.getBuildContext()); } diff --git a/src/main/java/exopandora/worldhandler/command/CommandWH.java b/src/main/java/exopandora/worldhandler/command/CommandWH.java index cfdd8f0..540202d 100644 --- a/src/main/java/exopandora/worldhandler/command/CommandWH.java +++ b/src/main/java/exopandora/worldhandler/command/CommandWH.java @@ -22,8 +22,6 @@ import net.minecraft.commands.arguments.blocks.BlockPredicateArgument; import net.minecraft.commands.arguments.blocks.BlockStateArgument; import net.minecraft.core.BlockPos; import net.minecraft.resources.ResourceLocation; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.fml.DistExecutor; import net.minecraftforge.registries.ForgeRegistries; public class CommandWH @@ -58,84 +56,65 @@ public class CommandWH private static int pos1(CommandSourceStack source) throws CommandSyntaxException { - DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> - { - BlockHelper.pos1().set(BlockHelper.getFocusedBlockPos()); - BlockPos pos = BlockHelper.pos1(); - ResourceLocation block = ForgeRegistries.BLOCKS.getKey(BlockHelper.getBlock(pos)); - CommandHelper.sendFeedback(source, "Set first position to " + pos.getX() + ", " + pos.getY() + ", " + pos.getZ() + " (" + block + ")"); - }); - + BlockHelper.pos1().set(BlockHelper.getFocusedBlockPos()); + BlockPos pos = BlockHelper.pos1(); + ResourceLocation block = ForgeRegistries.BLOCKS.getKey(BlockHelper.getBlock(pos)); + CommandHelper.sendFeedback(source, "Set first position to " + pos.getX() + ", " + pos.getY() + ", " + pos.getZ() + " (" + block + ")"); return 1; } private static int pos2(CommandSourceStack source) throws CommandSyntaxException { - DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> - { - BlockHelper.pos2().set(BlockHelper.getFocusedBlockPos()); - BlockPos pos = BlockHelper.pos2(); - ResourceLocation block = ForgeRegistries.BLOCKS.getKey(BlockHelper.getBlock(pos)); - CommandHelper.sendFeedback(source, "Set second position to " + pos.getX() + ", " + pos.getY() + ", " + pos.getZ() + " (" + block + ")"); - }); - + BlockHelper.pos2().set(BlockHelper.getFocusedBlockPos()); + BlockPos pos = BlockHelper.pos2(); + ResourceLocation block = ForgeRegistries.BLOCKS.getKey(BlockHelper.getBlock(pos)); + CommandHelper.sendFeedback(source, "Set second position to " + pos.getX() + ", " + pos.getY() + ", " + pos.getZ() + " (" + block + ")"); return 1; } private static int fill(CommandSourceStack source, BlockInput block) { - DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> - { - FillCommandBuilder builder = new FillCommandBuilder(); - builder.from().set(BlockHelper.pos1()); - builder.to().set(BlockHelper.pos2()); - builder.block().set(block.getState(), block.tag); - CommandHelper.sendCommand(source.getTextName(), builder, FillCommandBuilder.Label.FILL); - }); - + FillCommandBuilder builder = new FillCommandBuilder(); + builder.from().set(BlockHelper.pos1()); + builder.to().set(BlockHelper.pos2()); + builder.block().set(block.getState(), block.tag); + CommandHelper.sendCommand(source.getTextName(), builder, FillCommandBuilder.Label.FILL); return 1; } private static int replace(CommandSourceStack source, String filter, BlockInput block) { - DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> - { - FillCommandBuilder builder = new FillCommandBuilder(); - builder.from().set(BlockHelper.pos1()); - builder.to().set(BlockHelper.pos2()); - builder.block().set(block.getState(), block.tag); - builder.filter().deserialize(filter); - CommandHelper.sendCommand(source.getTextName(), builder, FillCommandBuilder.Label.REPLACE); - }); - + FillCommandBuilder builder = new FillCommandBuilder(); + builder.from().set(BlockHelper.pos1()); + builder.to().set(BlockHelper.pos2()); + builder.block().set(block.getState(), block.tag); + builder.filter().deserialize(filter); + CommandHelper.sendCommand(source.getTextName(), builder, FillCommandBuilder.Label.REPLACE); return 1; } private static int clone(CommandSourceStack source, String mask, String filter) { - DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> + CloneCommandBuilder builder = new CloneCommandBuilder(); + builder.begin().set(BlockHelper.pos1()); + builder.end().set(BlockHelper.pos2()); + builder.destination().setX(new Coordinate.Ints(Type.RELATIVE)); + builder.destination().setY(new Coordinate.Ints(Type.RELATIVE)); + builder.destination().setZ(new Coordinate.Ints(Type.RELATIVE)); + + switch(mask) { - CloneCommandBuilder builder = new CloneCommandBuilder(); - builder.begin().set(BlockHelper.pos1()); - builder.end().set(BlockHelper.pos2()); - builder.destination().setX(new Coordinate.Ints(Type.RELATIVE)); - builder.destination().setY(new Coordinate.Ints(Type.RELATIVE)); - builder.destination().setZ(new Coordinate.Ints(Type.RELATIVE)); - - switch(mask) - { - case "filtered": - builder.filter().deserialize(filter); - CommandHelper.sendCommand(source.getTextName(), builder, CloneCommandBuilder.Label.FILTERED); - break; - case "masked": - CommandHelper.sendCommand(source.getTextName(), builder, CloneCommandBuilder.Label.MASKED); - break; - case "replace": - CommandHelper.sendCommand(source.getTextName(), builder, CloneCommandBuilder.Label.REPLACE); - break; - } - }); + case "filtered": + builder.filter().deserialize(filter); + CommandHelper.sendCommand(source.getTextName(), builder, CloneCommandBuilder.Label.FILTERED); + break; + case "masked": + CommandHelper.sendCommand(source.getTextName(), builder, CloneCommandBuilder.Label.MASKED); + break; + case "replace": + CommandHelper.sendCommand(source.getTextName(), builder, CloneCommandBuilder.Label.REPLACE); + break; + } return 1; } diff --git a/src/main/java/exopandora/worldhandler/command/CommandWorldHandler.java b/src/main/java/exopandora/worldhandler/command/CommandWorldHandler.java index 8c5a5f5..42afe9d 100644 --- a/src/main/java/exopandora/worldhandler/command/CommandWorldHandler.java +++ b/src/main/java/exopandora/worldhandler/command/CommandWorldHandler.java @@ -6,13 +6,10 @@ import com.mojang.brigadier.CommandDispatcher; import com.mojang.brigadier.exceptions.CommandSyntaxException; import exopandora.worldhandler.Main; -import exopandora.worldhandler.util.ActionHelper; +import exopandora.worldhandler.event.ClientEventHandler; import exopandora.worldhandler.util.CommandHelper; -import net.minecraft.client.Minecraft; import net.minecraft.commands.CommandSourceStack; import net.minecraft.commands.Commands; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.fml.DistExecutor; import net.minecraftforge.fml.ModList; import net.minecraftforge.fml.VersionChecker; @@ -39,7 +36,7 @@ public class CommandWorldHandler private static int display(CommandSourceStack source) throws CommandSyntaxException { - DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> Minecraft.getInstance().execute(ActionHelper::displayGui)); + ClientEventHandler.openGui = true; return 1; } diff --git a/src/main/java/exopandora/worldhandler/event/ClientEventHandler.java b/src/main/java/exopandora/worldhandler/event/ClientEventHandler.java index a9a172f..f052487 100644 --- a/src/main/java/exopandora/worldhandler/event/ClientEventHandler.java +++ b/src/main/java/exopandora/worldhandler/event/ClientEventHandler.java @@ -2,30 +2,26 @@ package exopandora.worldhandler.event; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; -import com.mojang.brigadier.CommandDispatcher; -import com.mojang.brigadier.ParseResults; -import com.mojang.brigadier.StringReader; -import com.mojang.brigadier.exceptions.CommandSyntaxException; import exopandora.worldhandler.config.Config; +import exopandora.worldhandler.util.ActionHelper; import exopandora.worldhandler.util.BlockHelper; -import exopandora.worldhandler.util.CommandHelper; import exopandora.worldhandler.util.RenderUtils; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.LevelRenderer; import net.minecraft.client.renderer.MultiBufferSource.BufferSource; import net.minecraft.client.renderer.RenderType; -import net.minecraft.commands.CommandBuildContext; -import net.minecraft.commands.CommandSourceStack; -import net.minecraft.core.RegistryAccess; import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.Vec3; -import net.minecraftforge.client.event.ClientChatEvent; import net.minecraftforge.client.event.RenderLevelLastEvent; +import net.minecraftforge.event.TickEvent; +import net.minecraftforge.event.TickEvent.ClientTickEvent; import net.minecraftforge.eventbus.api.SubscribeEvent; public class ClientEventHandler { + public static boolean openGui; + @SubscribeEvent public static void renderLevelLastEvent(RenderLevelLastEvent event) { @@ -63,35 +59,12 @@ public class ClientEventHandler } @SubscribeEvent - public static void clientChatEvent(ClientChatEvent event) + public static void clientTickEvent(ClientTickEvent event) { - if(!Minecraft.getInstance().hasSingleplayerServer() && Minecraft.getInstance().player != null) + if(TickEvent.Phase.START.equals(event.phase) && ClientEventHandler.openGui) { - CommandDispatcher dispatcher = new CommandDispatcher(); - CommandHelper.registerCommands(dispatcher, new CommandBuildContext(RegistryAccess.BUILTIN.get())); - - StringReader command = new StringReader(event.getMessage()); - command.skip(); - - ParseResults result = dispatcher.parse(command, Minecraft.getInstance().player.createCommandSourceStack()); - - if(result.getContext().getCommand() != null) - { - try - { - dispatcher.execute(result); - Minecraft.getInstance().gui.getChat().addRecentChat(event.getMessage()); - } - catch(CommandSyntaxException e) - { - e.printStackTrace(); - } - - if(event.isCancelable()) - { - event.setCanceled(true); - } - } + ClientEventHandler.openGui = false; + ActionHelper.displayGui(); } } }