From d4cb0c68584f59b34121a054070c6d1b11a54b2e Mon Sep 17 00:00:00 2001 From: Christian Knaapen Date: Wed, 1 Feb 2023 20:54:48 +0100 Subject: [PATCH] Radial mirror GUI, and saving modifiers. Saving modifiers in player persistent data on serverside, and loading when new player joins. This is separate per world. Modifier GUI panels are a bit larger now, and position fields are wider. --- .../effortlessbuilding/AllGuiTextures.java | 6 +- .../effortlessbuilding/CommonEvents.java | 11 +- .../buildmodifier/BuildModifiers.java | 32 +- .../buildmodifier/RadialMirror.java | 8 + .../gui/buildmodifier/ArrayEntry.java | 10 +- .../gui/buildmodifier/BaseModifierEntry.java | 2 +- .../gui/buildmodifier/MirrorEntry.java | 288 +--------- .../gui/buildmodifier/ModifiersScreen.java | 4 +- .../gui/buildmodifier/RadialMirrorEntry.java | 496 ++++++++---------- .../network/IsQuickReplacingPacket.java | 3 - .../network/IsUsingBuildModePacket.java | 3 - .../network/ModifierSettingsPacket.java | 64 +++ .../network/PacketHandler.java | 2 + .../utilities/BlockEntry.java | 2 +- .../textures/gui/modifiers.png | Bin 8154 -> 8083 bytes 15 files changed, 349 insertions(+), 582 deletions(-) create mode 100644 src/main/java/nl/requios/effortlessbuilding/network/ModifierSettingsPacket.java diff --git a/src/main/java/nl/requios/effortlessbuilding/AllGuiTextures.java b/src/main/java/nl/requios/effortlessbuilding/AllGuiTextures.java index 10f40b4..4430fce 100644 --- a/src/main/java/nl/requios/effortlessbuilding/AllGuiTextures.java +++ b/src/main/java/nl/requios/effortlessbuilding/AllGuiTextures.java @@ -11,9 +11,9 @@ import nl.requios.effortlessbuilding.create.foundation.gui.element.ScreenElement import nl.requios.effortlessbuilding.create.foundation.utility.Color; public enum AllGuiTextures implements ScreenElement { - ARRAY_ENTRY("modifiers", 226, 60), - MIRROR_ENTRY("modifiers", 0, 60, 226, 60), - RADIAL_MIRROR_ENTRY("modifiers", 0, 120, 226, 60), + ARRAY_ENTRY("modifiers", 226, 64), + MIRROR_ENTRY("modifiers", 0, 64, 226, 64), + RADIAL_MIRROR_ENTRY("modifiers", 0, 128, 226, 64), ENABLE_BUTTON_BACKGROUND("modifiers", 234, 0, 9, 9), CHECKMARK("modifiers", 243, 0, 10, 9), ARROW_UP("modifiers", 234, 9, 9, 9), diff --git a/src/main/java/nl/requios/effortlessbuilding/CommonEvents.java b/src/main/java/nl/requios/effortlessbuilding/CommonEvents.java index 4318d0e..8c2aacd 100644 --- a/src/main/java/nl/requios/effortlessbuilding/CommonEvents.java +++ b/src/main/java/nl/requios/effortlessbuilding/CommonEvents.java @@ -1,5 +1,6 @@ package nl.requios.effortlessbuilding; +import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.InteractionHand; import net.minecraft.world.item.BlockItem; import net.minecraft.world.item.ItemStack; @@ -15,6 +16,9 @@ import net.minecraftforge.event.level.BlockEvent; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.LogicalSide; import net.minecraftforge.fml.common.Mod.EventBusSubscriber; +import net.minecraftforge.network.PacketDistributor; +import nl.requios.effortlessbuilding.network.ModifierSettingsPacket; +import nl.requios.effortlessbuilding.network.PacketHandler; import nl.requios.effortlessbuilding.systems.UndoRedo; import nl.requios.effortlessbuilding.compatibility.CompatHelper; import nl.requios.effortlessbuilding.systems.ServerBuildState; @@ -83,12 +87,11 @@ public class CommonEvents { public static void onPlayerLoggedIn(PlayerEvent.PlayerLoggedInEvent event) { if (event.getEntity() instanceof FakePlayer) return; Player player = event.getEntity(); - if (player.getCommandSenderWorld().isClientSide) { - EffortlessBuilding.log("PlayerLoggedInEvent triggers on client side"); - return; - } + if (player.getCommandSenderWorld().isClientSide) return; ServerBuildState.handleNewPlayer(player); + + PacketHandler.INSTANCE.send(PacketDistributor.PLAYER.with(() -> (ServerPlayer) player), new ModifierSettingsPacket(player)); } @SubscribeEvent diff --git a/src/main/java/nl/requios/effortlessbuilding/buildmodifier/BuildModifiers.java b/src/main/java/nl/requios/effortlessbuilding/buildmodifier/BuildModifiers.java index ee9a3b7..f959d1d 100644 --- a/src/main/java/nl/requios/effortlessbuilding/buildmodifier/BuildModifiers.java +++ b/src/main/java/nl/requios/effortlessbuilding/buildmodifier/BuildModifiers.java @@ -1,9 +1,13 @@ package nl.requios.effortlessbuilding.buildmodifier; +import net.minecraft.client.Minecraft; +import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.Tag; import net.minecraft.world.entity.player.Player; import nl.requios.effortlessbuilding.EffortlessBuilding; import nl.requios.effortlessbuilding.create.foundation.utility.NBTHelper; +import nl.requios.effortlessbuilding.network.ModifierSettingsPacket; +import nl.requios.effortlessbuilding.network.PacketHandler; import nl.requios.effortlessbuilding.utilities.BlockSet; import java.util.ArrayList; @@ -69,23 +73,29 @@ public class BuildModifiers { } } - private static final String DATA_KEY = EffortlessBuilding.MODID + ":buildModifiers"; - - public void save(Player player) { - var listTag = NBTHelper.writeCompoundList(modifierSettingsList, BaseModifier::serializeNBT); - player.getPersistentData().put(DATA_KEY, listTag); + public CompoundTag serializeNBT() { + var compoundTag = new CompoundTag(); + compoundTag.put("modifierSettingsList", NBTHelper.writeCompoundList(modifierSettingsList, BaseModifier::serializeNBT)); + return compoundTag; } - //TODO call load - public void load(Player player) { - var listTag = player.getPersistentData().getList(DATA_KEY, Tag.TAG_COMPOUND); - modifierSettingsList = NBTHelper.readCompoundList(listTag, compoundTag -> { - var modifier = createModifier(compoundTag.getString("type")); - modifier.deserializeNBT(compoundTag); + public void deserializeNBT(CompoundTag compoundTag) { + var listTag = compoundTag.getList("modifierSettingsList", Tag.TAG_COMPOUND); + modifierSettingsList = NBTHelper.readCompoundList(listTag, tag -> { + var modifier = createModifier(tag.getString("type")); + modifier.deserializeNBT(tag); return modifier; }); } + public void save() { + PacketHandler.INSTANCE.sendToServer(new ModifierSettingsPacket(serializeNBT())); + + //Save locally as well? +// var listTag = NBTHelper.writeCompoundList(modifierSettingsList, BaseModifier::serializeNBT); +// player.getPersistentData().put(DATA_KEY, listTag); + } + private BaseModifier createModifier(String type) { switch (type) { case "Mirror": return new Mirror(); diff --git a/src/main/java/nl/requios/effortlessbuilding/buildmodifier/RadialMirror.java b/src/main/java/nl/requios/effortlessbuilding/buildmodifier/RadialMirror.java index 9a0f7e3..4870b83 100644 --- a/src/main/java/nl/requios/effortlessbuilding/buildmodifier/RadialMirror.java +++ b/src/main/java/nl/requios/effortlessbuilding/buildmodifier/RadialMirror.java @@ -1,5 +1,6 @@ package nl.requios.effortlessbuilding.buildmodifier; +import net.minecraft.client.Minecraft; import net.minecraft.nbt.CompoundTag; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.entity.player.Player; @@ -28,6 +29,13 @@ public class RadialMirror extends BaseModifier { public boolean drawLines = true; public boolean drawPlanes = false; + public RadialMirror() { + super(); + var player = Minecraft.getInstance().player; + if (player != null) + position = Vec3.atLowerCornerOf(Minecraft.getInstance().player.blockPosition()); + } + @Override public void findCoordinates(BlockSet blocks, Player player) { if (!enabled) return; diff --git a/src/main/java/nl/requios/effortlessbuilding/gui/buildmodifier/ArrayEntry.java b/src/main/java/nl/requios/effortlessbuilding/gui/buildmodifier/ArrayEntry.java index 4bd2377..3a12984 100644 --- a/src/main/java/nl/requios/effortlessbuilding/gui/buildmodifier/ArrayEntry.java +++ b/src/main/java/nl/requios/effortlessbuilding/gui/buildmodifier/ArrayEntry.java @@ -64,19 +64,19 @@ public class ArrayEntry extends BaseModifierEntry { //draw offset inputs for (int i = 0; i < 3; i++) { - offsetInputs.get(i).x = left + 47 + 20 * i; - offsetInputs.get(i).y = top + 18; + offsetInputs.get(i).x = left + 49 + 20 * i; + offsetInputs.get(i).y = top + 19; offsetInputs.get(i).render(ms, mouseX, mouseY, partialTicks); } //draw count input - countInput.x = left + 47; - countInput.y = top + 38; + countInput.x = left + 49; + countInput.y = top + 41; countInput.render(ms, mouseX, mouseY, partialTicks); //draw reach label reachLabel.x = right - 8 - getFont().width(reachLabel.text); - reachLabel.y = top + 23; + reachLabel.y = top + 24; reachLabel.render(ms, mouseX, mouseY, partialTicks); } diff --git a/src/main/java/nl/requios/effortlessbuilding/gui/buildmodifier/BaseModifierEntry.java b/src/main/java/nl/requios/effortlessbuilding/gui/buildmodifier/BaseModifierEntry.java index df8f035..b662b3f 100644 --- a/src/main/java/nl/requios/effortlessbuilding/gui/buildmodifier/BaseModifierEntry.java +++ b/src/main/java/nl/requios/effortlessbuilding/gui/buildmodifier/BaseModifierEntry.java @@ -100,7 +100,7 @@ public abstract class BaseModifierEntry extends Modifier enableButton.y = top + 3; enableButton.render(ms, mouseX, mouseY, partialTicks); if (modifier.enabled) - AllGuiTextures.CHECKMARK.render(ms, left + 5, top + 1, screen); + AllGuiTextures.CHECKMARK.render(ms, left + 5, top + 3, screen); nameLabel.x = left + 18; nameLabel.y = top + 4; diff --git a/src/main/java/nl/requios/effortlessbuilding/gui/buildmodifier/MirrorEntry.java b/src/main/java/nl/requios/effortlessbuilding/gui/buildmodifier/MirrorEntry.java index 7237be4..88b7fa9 100644 --- a/src/main/java/nl/requios/effortlessbuilding/gui/buildmodifier/MirrorEntry.java +++ b/src/main/java/nl/requios/effortlessbuilding/gui/buildmodifier/MirrorEntry.java @@ -42,7 +42,7 @@ public class MirrorEntry extends BaseModifierEntry { //ScrollInput works with double the value, so we can have 0.5 increments for (int i = 0; i < 3; i++) { final int index = i; - var scrollInput = new LabeledScrollInput(0, 0, 27, 18) + var scrollInput = new LabeledScrollInput(0, 0, 36, 18) .showControlScrollsSlowerTooltip() .titled(Component.literal(i == 0 ? "X Position" : i == 1 ? "Y Position" : "Z Position")) .format(integer -> Component.literal(df.format(integer / 2.0))) @@ -139,42 +139,42 @@ public class MirrorEntry extends BaseModifierEntry { //draw position inputs for (int i = 0; i < 3; i++) { ScrollInput input = positionInputs.get(i); - input.x = left + 47 + 29 * i; - input.y = top + 18; + input.x = left + 49 + 38 * i; + input.y = top + 19; input.render(ms, mouseX, mouseY, partialTicks); } //draw player position button - playerPositionButton.x = left + 134; - playerPositionButton.y = top + 18; + playerPositionButton.x = left + 163; + playerPositionButton.y = top + 19; playerPositionButton.render(ms, mouseX, mouseY, partialTicks); //draw toggle offset button - toggleOffsetButton.x = left + 154; - toggleOffsetButton.y = top + 18; + toggleOffsetButton.x = left + 183; + toggleOffsetButton.y = top + 19; toggleOffsetButton.render(ms, mouseX, mouseY, partialTicks); //draw axis buttons for (int i = 0; i < 3; i++) { IconButton button = axisButtons.get(i); - button.x = left + 47 + 18 * i; - button.y = top + 38; + button.x = left + 49 + 18 * i; + button.y = top + 41; button.render(ms, mouseX, mouseY, partialTicks); } //draw radius input - radiusInput.x = left + 145; - radiusInput.y = top + 38; + radiusInput.x = left + 134; + radiusInput.y = top + 41; radiusInput.render(ms, mouseX, mouseY, partialTicks); //draw show lines button - showLinesButton.x = right - 43; - showLinesButton.y = top + 38; + showLinesButton.x = left + 163; + showLinesButton.y = top + 41; showLinesButton.render(ms, mouseX, mouseY, partialTicks); //draw show areas button - showAreasButton.x = right - 23; - showAreasButton.y = top + 38; + showAreasButton.x = left + 183; + showAreasButton.y = top + 41; showAreasButton.render(ms, mouseX, mouseY, partialTicks); } @@ -229,262 +229,4 @@ public class MirrorEntry extends BaseModifierEntry { showAreasButton.setToolTip(Components.literal("Show mirror areas")); } } - - // protected static final ResourceLocation BUILDING_ICONS = new ResourceLocation(EffortlessBuilding.MODID, "textures/gui/building_icons.png"); -// -// protected List