Enable autocomplete for commands on servers
This commit is contained in:
@@ -15,9 +15,9 @@ import exopandora.worldhandler.util.AdvancementHelper;
|
|||||||
import exopandora.worldhandler.util.CommandHelper;
|
import exopandora.worldhandler.util.CommandHelper;
|
||||||
import net.minecraftforge.api.distmarker.Dist;
|
import net.minecraftforge.api.distmarker.Dist;
|
||||||
import net.minecraftforge.client.ClientRegistry;
|
import net.minecraftforge.client.ClientRegistry;
|
||||||
|
import net.minecraftforge.client.event.RegisterClientCommandsEvent;
|
||||||
import net.minecraftforge.client.event.RegisterClientReloadListenersEvent;
|
import net.minecraftforge.client.event.RegisterClientReloadListenersEvent;
|
||||||
import net.minecraftforge.common.MinecraftForge;
|
import net.minecraftforge.common.MinecraftForge;
|
||||||
import net.minecraftforge.event.RegisterCommandsEvent;
|
|
||||||
import net.minecraftforge.eventbus.api.IEventBus;
|
import net.minecraftforge.eventbus.api.IEventBus;
|
||||||
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
||||||
import net.minecraftforge.fml.DistExecutor;
|
import net.minecraftforge.fml.DistExecutor;
|
||||||
@@ -67,14 +67,14 @@ public class WorldHandler
|
|||||||
{
|
{
|
||||||
MinecraftForge.EVENT_BUS.addListener(KeyHandler::keyInputEvent);
|
MinecraftForge.EVENT_BUS.addListener(KeyHandler::keyInputEvent);
|
||||||
MinecraftForge.EVENT_BUS.addListener(ClientEventHandler::renderLevelLastEvent);
|
MinecraftForge.EVENT_BUS.addListener(ClientEventHandler::renderLevelLastEvent);
|
||||||
MinecraftForge.EVENT_BUS.addListener(ClientEventHandler::clientChatEvent);
|
MinecraftForge.EVENT_BUS.addListener(ClientEventHandler::clientTickEvent);
|
||||||
|
|
||||||
ClientRegistry.registerKeyBinding(KeyHandler.KEY_WORLD_HANDLER);
|
ClientRegistry.registerKeyBinding(KeyHandler.KEY_WORLD_HANDLER);
|
||||||
KeyHandler.updatePosKeys();
|
KeyHandler.updatePosKeys();
|
||||||
}
|
}
|
||||||
|
|
||||||
@SubscribeEvent
|
@SubscribeEvent
|
||||||
public void registerCommands(RegisterCommandsEvent event)
|
public void registerCommands(RegisterClientCommandsEvent event)
|
||||||
{
|
{
|
||||||
CommandHelper.registerCommands(event.getDispatcher(), event.getBuildContext());
|
CommandHelper.registerCommands(event.getDispatcher(), event.getBuildContext());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -22,8 +22,6 @@ import net.minecraft.commands.arguments.blocks.BlockPredicateArgument;
|
|||||||
import net.minecraft.commands.arguments.blocks.BlockStateArgument;
|
import net.minecraft.commands.arguments.blocks.BlockStateArgument;
|
||||||
import net.minecraft.core.BlockPos;
|
import net.minecraft.core.BlockPos;
|
||||||
import net.minecraft.resources.ResourceLocation;
|
import net.minecraft.resources.ResourceLocation;
|
||||||
import net.minecraftforge.api.distmarker.Dist;
|
|
||||||
import net.minecraftforge.fml.DistExecutor;
|
|
||||||
import net.minecraftforge.registries.ForgeRegistries;
|
import net.minecraftforge.registries.ForgeRegistries;
|
||||||
|
|
||||||
public class CommandWH
|
public class CommandWH
|
||||||
@@ -58,84 +56,65 @@ public class CommandWH
|
|||||||
|
|
||||||
private static int pos1(CommandSourceStack source) throws CommandSyntaxException
|
private static int pos1(CommandSourceStack source) throws CommandSyntaxException
|
||||||
{
|
{
|
||||||
DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () ->
|
BlockHelper.pos1().set(BlockHelper.getFocusedBlockPos());
|
||||||
{
|
BlockPos pos = BlockHelper.pos1();
|
||||||
BlockHelper.pos1().set(BlockHelper.getFocusedBlockPos());
|
ResourceLocation block = ForgeRegistries.BLOCKS.getKey(BlockHelper.getBlock(pos));
|
||||||
BlockPos pos = BlockHelper.pos1();
|
CommandHelper.sendFeedback(source, "Set first position to " + pos.getX() + ", " + pos.getY() + ", " + pos.getZ() + " (" + block + ")");
|
||||||
ResourceLocation block = ForgeRegistries.BLOCKS.getKey(BlockHelper.getBlock(pos));
|
|
||||||
CommandHelper.sendFeedback(source, "Set first position to " + pos.getX() + ", " + pos.getY() + ", " + pos.getZ() + " (" + block + ")");
|
|
||||||
});
|
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static int pos2(CommandSourceStack source) throws CommandSyntaxException
|
private static int pos2(CommandSourceStack source) throws CommandSyntaxException
|
||||||
{
|
{
|
||||||
DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () ->
|
BlockHelper.pos2().set(BlockHelper.getFocusedBlockPos());
|
||||||
{
|
BlockPos pos = BlockHelper.pos2();
|
||||||
BlockHelper.pos2().set(BlockHelper.getFocusedBlockPos());
|
ResourceLocation block = ForgeRegistries.BLOCKS.getKey(BlockHelper.getBlock(pos));
|
||||||
BlockPos pos = BlockHelper.pos2();
|
CommandHelper.sendFeedback(source, "Set second position to " + pos.getX() + ", " + pos.getY() + ", " + pos.getZ() + " (" + block + ")");
|
||||||
ResourceLocation block = ForgeRegistries.BLOCKS.getKey(BlockHelper.getBlock(pos));
|
|
||||||
CommandHelper.sendFeedback(source, "Set second position to " + pos.getX() + ", " + pos.getY() + ", " + pos.getZ() + " (" + block + ")");
|
|
||||||
});
|
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static int fill(CommandSourceStack source, BlockInput block)
|
private static int fill(CommandSourceStack source, BlockInput block)
|
||||||
{
|
{
|
||||||
DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () ->
|
FillCommandBuilder builder = new FillCommandBuilder();
|
||||||
{
|
builder.from().set(BlockHelper.pos1());
|
||||||
FillCommandBuilder builder = new FillCommandBuilder();
|
builder.to().set(BlockHelper.pos2());
|
||||||
builder.from().set(BlockHelper.pos1());
|
builder.block().set(block.getState(), block.tag);
|
||||||
builder.to().set(BlockHelper.pos2());
|
CommandHelper.sendCommand(source.getTextName(), builder, FillCommandBuilder.Label.FILL);
|
||||||
builder.block().set(block.getState(), block.tag);
|
|
||||||
CommandHelper.sendCommand(source.getTextName(), builder, FillCommandBuilder.Label.FILL);
|
|
||||||
});
|
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static int replace(CommandSourceStack source, String filter, BlockInput block)
|
private static int replace(CommandSourceStack source, String filter, BlockInput block)
|
||||||
{
|
{
|
||||||
DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () ->
|
FillCommandBuilder builder = new FillCommandBuilder();
|
||||||
{
|
builder.from().set(BlockHelper.pos1());
|
||||||
FillCommandBuilder builder = new FillCommandBuilder();
|
builder.to().set(BlockHelper.pos2());
|
||||||
builder.from().set(BlockHelper.pos1());
|
builder.block().set(block.getState(), block.tag);
|
||||||
builder.to().set(BlockHelper.pos2());
|
builder.filter().deserialize(filter);
|
||||||
builder.block().set(block.getState(), block.tag);
|
CommandHelper.sendCommand(source.getTextName(), builder, FillCommandBuilder.Label.REPLACE);
|
||||||
builder.filter().deserialize(filter);
|
|
||||||
CommandHelper.sendCommand(source.getTextName(), builder, FillCommandBuilder.Label.REPLACE);
|
|
||||||
});
|
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static int clone(CommandSourceStack source, String mask, String filter)
|
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();
|
case "filtered":
|
||||||
builder.begin().set(BlockHelper.pos1());
|
builder.filter().deserialize(filter);
|
||||||
builder.end().set(BlockHelper.pos2());
|
CommandHelper.sendCommand(source.getTextName(), builder, CloneCommandBuilder.Label.FILTERED);
|
||||||
builder.destination().setX(new Coordinate.Ints(Type.RELATIVE));
|
break;
|
||||||
builder.destination().setY(new Coordinate.Ints(Type.RELATIVE));
|
case "masked":
|
||||||
builder.destination().setZ(new Coordinate.Ints(Type.RELATIVE));
|
CommandHelper.sendCommand(source.getTextName(), builder, CloneCommandBuilder.Label.MASKED);
|
||||||
|
break;
|
||||||
switch(mask)
|
case "replace":
|
||||||
{
|
CommandHelper.sendCommand(source.getTextName(), builder, CloneCommandBuilder.Label.REPLACE);
|
||||||
case "filtered":
|
break;
|
||||||
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;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,13 +6,10 @@ import com.mojang.brigadier.CommandDispatcher;
|
|||||||
import com.mojang.brigadier.exceptions.CommandSyntaxException;
|
import com.mojang.brigadier.exceptions.CommandSyntaxException;
|
||||||
|
|
||||||
import exopandora.worldhandler.Main;
|
import exopandora.worldhandler.Main;
|
||||||
import exopandora.worldhandler.util.ActionHelper;
|
import exopandora.worldhandler.event.ClientEventHandler;
|
||||||
import exopandora.worldhandler.util.CommandHelper;
|
import exopandora.worldhandler.util.CommandHelper;
|
||||||
import net.minecraft.client.Minecraft;
|
|
||||||
import net.minecraft.commands.CommandSourceStack;
|
import net.minecraft.commands.CommandSourceStack;
|
||||||
import net.minecraft.commands.Commands;
|
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.ModList;
|
||||||
import net.minecraftforge.fml.VersionChecker;
|
import net.minecraftforge.fml.VersionChecker;
|
||||||
|
|
||||||
@@ -39,7 +36,7 @@ public class CommandWorldHandler
|
|||||||
|
|
||||||
private static int display(CommandSourceStack source) throws CommandSyntaxException
|
private static int display(CommandSourceStack source) throws CommandSyntaxException
|
||||||
{
|
{
|
||||||
DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> Minecraft.getInstance().execute(ActionHelper::displayGui));
|
ClientEventHandler.openGui = true;
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -2,30 +2,26 @@ package exopandora.worldhandler.event;
|
|||||||
|
|
||||||
import com.mojang.blaze3d.vertex.PoseStack;
|
import com.mojang.blaze3d.vertex.PoseStack;
|
||||||
import com.mojang.blaze3d.vertex.VertexConsumer;
|
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.config.Config;
|
||||||
|
import exopandora.worldhandler.util.ActionHelper;
|
||||||
import exopandora.worldhandler.util.BlockHelper;
|
import exopandora.worldhandler.util.BlockHelper;
|
||||||
import exopandora.worldhandler.util.CommandHelper;
|
|
||||||
import exopandora.worldhandler.util.RenderUtils;
|
import exopandora.worldhandler.util.RenderUtils;
|
||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
import net.minecraft.client.renderer.LevelRenderer;
|
import net.minecraft.client.renderer.LevelRenderer;
|
||||||
import net.minecraft.client.renderer.MultiBufferSource.BufferSource;
|
import net.minecraft.client.renderer.MultiBufferSource.BufferSource;
|
||||||
import net.minecraft.client.renderer.RenderType;
|
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.AABB;
|
||||||
import net.minecraft.world.phys.Vec3;
|
import net.minecraft.world.phys.Vec3;
|
||||||
import net.minecraftforge.client.event.ClientChatEvent;
|
|
||||||
import net.minecraftforge.client.event.RenderLevelLastEvent;
|
import net.minecraftforge.client.event.RenderLevelLastEvent;
|
||||||
|
import net.minecraftforge.event.TickEvent;
|
||||||
|
import net.minecraftforge.event.TickEvent.ClientTickEvent;
|
||||||
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
||||||
|
|
||||||
public class ClientEventHandler
|
public class ClientEventHandler
|
||||||
{
|
{
|
||||||
|
public static boolean openGui;
|
||||||
|
|
||||||
@SubscribeEvent
|
@SubscribeEvent
|
||||||
public static void renderLevelLastEvent(RenderLevelLastEvent event)
|
public static void renderLevelLastEvent(RenderLevelLastEvent event)
|
||||||
{
|
{
|
||||||
@@ -63,35 +59,12 @@ public class ClientEventHandler
|
|||||||
}
|
}
|
||||||
|
|
||||||
@SubscribeEvent
|
@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<CommandSourceStack> dispatcher = new CommandDispatcher<CommandSourceStack>();
|
ClientEventHandler.openGui = false;
|
||||||
CommandHelper.registerCommands(dispatcher, new CommandBuildContext(RegistryAccess.BUILTIN.get()));
|
ActionHelper.displayGui();
|
||||||
|
|
||||||
StringReader command = new StringReader(event.getMessage());
|
|
||||||
command.skip();
|
|
||||||
|
|
||||||
ParseResults<CommandSourceStack> 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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user