From 69dc83ba029dc725a490060f8289d99dac68ed95 Mon Sep 17 00:00:00 2001 From: MelanX Date: Sat, 30 Mar 2024 15:20:15 +0100 Subject: [PATCH] add feature to move outline of structure saver by using numpad arrows --- .../skyblockbuilder/SkyblockBuilder.java | 5 ++ .../client/ClientEventListener.java | 58 +++++++++++++++++++ 2 files changed, 63 insertions(+) diff --git a/src/main/java/de/melanx/skyblockbuilder/SkyblockBuilder.java b/src/main/java/de/melanx/skyblockbuilder/SkyblockBuilder.java index 7f3a059a..461f627a 100644 --- a/src/main/java/de/melanx/skyblockbuilder/SkyblockBuilder.java +++ b/src/main/java/de/melanx/skyblockbuilder/SkyblockBuilder.java @@ -2,6 +2,7 @@ import com.google.gson.Gson; import com.google.gson.GsonBuilder; +import de.melanx.skyblockbuilder.client.ClientEventListener; import de.melanx.skyblockbuilder.compat.minemention.MineMentionCompat; import de.melanx.skyblockbuilder.config.common.PermissionsConfig; import de.melanx.skyblockbuilder.datagen.BlockStatesProvider; @@ -12,7 +13,9 @@ import de.melanx.skyblockbuilder.template.TemplateLoader; import de.melanx.skyblockbuilder.util.SkyPaths; import net.minecraft.Util; +import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.fml.DistExecutor; import net.minecraftforge.fml.ModList; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent; @@ -42,6 +45,8 @@ public SkyblockBuilder() { this.network = new SkyNetwork(); this.logger = LoggerFactory.getLogger(SkyblockBuilder.class); + DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> ClientEventListener::new); + SkyPaths.createDirectories(); MinecraftForge.EVENT_BUS.register(new SpawnProtectionEvents()); diff --git a/src/main/java/de/melanx/skyblockbuilder/client/ClientEventListener.java b/src/main/java/de/melanx/skyblockbuilder/client/ClientEventListener.java index e1f55e8c..0431f0f6 100644 --- a/src/main/java/de/melanx/skyblockbuilder/client/ClientEventListener.java +++ b/src/main/java/de/melanx/skyblockbuilder/client/ClientEventListener.java @@ -1,18 +1,33 @@ package de.melanx.skyblockbuilder.client; +import com.mojang.blaze3d.platform.InputConstants; import de.melanx.skyblockbuilder.ModBlocks; import de.melanx.skyblockbuilder.ModItems; import de.melanx.skyblockbuilder.Registration; +import net.minecraft.client.Minecraft; +import net.minecraft.client.player.LocalPlayer; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.nbt.NbtUtils; import net.minecraft.world.item.CreativeModeTabs; +import net.minecraft.world.item.ItemStack; import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.client.event.InputEvent; import net.minecraftforge.client.event.RegisterPresetEditorsEvent; +import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.event.BuildCreativeModeTabContentsEvent; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.common.Mod; +import org.lwjgl.glfw.GLFW; @Mod.EventBusSubscriber(modid = "skyblockbuilder", value = Dist.CLIENT, bus = Mod.EventBusSubscriber.Bus.MOD) public class ClientEventListener { + public ClientEventListener() { + MinecraftForge.EVENT_BUS.addListener(this::onKeyInput); + } + @SubscribeEvent public static void onRegisterPresetEditors(RegisterPresetEditorsEvent event) { event.register(Registration.skyblockKey, ScreenCustomizeSkyblock::new); @@ -25,4 +40,47 @@ public static void buildCreativeTabs(BuildCreativeModeTabContentsEvent event) { event.accept(() -> ModBlocks.spawnBlock); } } + + private void onKeyInput(InputEvent.Key event) { + if (event.getAction() != InputConstants.PRESS) { + return; + } + + LocalPlayer player = Minecraft.getInstance().player; + if (player == null) { + return; + } + + ItemStack stack = player.getMainHandItem(); + if (!stack.is(ModItems.structureSaver)) { + return; + } + + CompoundTag tag = stack.getOrCreateTag(); + if (!tag.contains("Position1") || !tag.contains("Position2")) { + return; + } + + Direction direction = switch (event.getKey()) { + case GLFW.GLFW_KEY_KP_8 -> player.getDirection(); + case GLFW.GLFW_KEY_KP_2 -> player.getDirection().getOpposite(); + case GLFW.GLFW_KEY_KP_4 -> player.getDirection().getCounterClockWise(); + case GLFW.GLFW_KEY_KP_6 -> player.getDirection().getClockWise(); + case GLFW.GLFW_KEY_KP_9 -> Direction.UP; + case GLFW.GLFW_KEY_KP_3 -> Direction.DOWN; + default -> null; + }; + + if (direction == null) { + return; + } + + BlockPos pos1 = NbtUtils.readBlockPos(tag.getCompound("Position1")); + BlockPos pos2 = NbtUtils.readBlockPos(tag.getCompound("Position2")); + + tag.put("Position1", NbtUtils.writeBlockPos(pos1.relative(direction))); + tag.put("Position2", NbtUtils.writeBlockPos(pos2.relative(direction))); + + stack.setTag(tag); + } }