From df27697ecbeb3b98a1df1f5e0f9be46d3ac329fe Mon Sep 17 00:00:00 2001 From: Christian Knaapen Date: Mon, 23 Dec 2019 15:13:43 +0100 Subject: [PATCH] Fixed checkbox graphics (copied GuiCheckBox from previous version). Fixed missing icons in radial menu (moved texture stitch event to ModEventHandler). --- .../effortlessbuilding/EventHandler.java | 1 + .../effortlessbuilding/ModEventHandler.java | 37 +++++++++++ .../gui/buildmode/RadialMenu.java | 5 +- .../gui/buildmodifier/ArraySettingsGui.java | 6 +- .../gui/buildmodifier/MirrorSettingsGui.java | 16 ++--- .../RadialMirrorSettingsGui.java | 12 ++-- .../gui/elements/GuiCheckBoxFixed.java | 66 +++++++++++++++++++ .../network/RequestLookAtMessage.java | 8 ++- .../effortlessbuilding/proxy/ClientProxy.java | 29 -------- 9 files changed, 127 insertions(+), 53 deletions(-) create mode 100644 src/main/java/nl/requios/effortlessbuilding/gui/elements/GuiCheckBoxFixed.java diff --git a/src/main/java/nl/requios/effortlessbuilding/EventHandler.java b/src/main/java/nl/requios/effortlessbuilding/EventHandler.java index e575208..49e7933 100644 --- a/src/main/java/nl/requios/effortlessbuilding/EventHandler.java +++ b/src/main/java/nl/requios/effortlessbuilding/EventHandler.java @@ -8,6 +8,7 @@ import net.minecraft.entity.player.ServerPlayerEntity; import net.minecraft.util.ResourceLocation; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; +import net.minecraftforge.client.event.TextureStitchEvent; import net.minecraftforge.event.AttachCapabilitiesEvent; import net.minecraftforge.event.entity.player.PlayerEvent; import net.minecraftforge.event.world.BlockEvent; diff --git a/src/main/java/nl/requios/effortlessbuilding/ModEventHandler.java b/src/main/java/nl/requios/effortlessbuilding/ModEventHandler.java index 063657e..3425973 100644 --- a/src/main/java/nl/requios/effortlessbuilding/ModEventHandler.java +++ b/src/main/java/nl/requios/effortlessbuilding/ModEventHandler.java @@ -1,19 +1,30 @@ package nl.requios.effortlessbuilding; import net.minecraft.block.Block; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.texture.TextureAtlasSprite; import net.minecraft.inventory.container.Container; import net.minecraft.inventory.container.ContainerType; import net.minecraft.item.Item; import net.minecraft.item.BlockItem; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.client.event.TextureStitchEvent; import net.minecraftforge.event.RegistryEvent; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.common.Mod; +import nl.requios.effortlessbuilding.buildmode.BuildModes; +import nl.requios.effortlessbuilding.buildmode.ModeOptions; + +import java.util.HashMap; // You can use EventBusSubscriber to automatically subscribe events on the contained class (this is subscribing to the MOD // Event bus for receiving Registry Events) @Mod.EventBusSubscriber(bus=Mod.EventBusSubscriber.Bus.MOD) public class ModEventHandler { + private static final HashMap buildModeIcons = new HashMap<>(); + private static final HashMap modeOptionIcons = new HashMap<>(); + @SubscribeEvent public static void registerBlocks(RegistryEvent.Register event) { event.getRegistry().registerAll(EffortlessBuilding.BLOCKS); @@ -34,4 +45,30 @@ public class ModEventHandler { // public static void registerContainerTypes(RegistryEvent.Register> event) { // event.getRegistry().register() // } + + @SubscribeEvent + public static void onTextureStitch(final TextureStitchEvent.Pre event) { + //register icon textures + for (final BuildModes.BuildModeEnum mode : BuildModes.BuildModeEnum.values()) + { + final ResourceLocation spriteLocation = new ResourceLocation(EffortlessBuilding.MODID, "icons/" + mode.name().toLowerCase()); + event.addSprite(spriteLocation); + buildModeIcons.put(mode, spriteLocation); + } + + for (final ModeOptions.ActionEnum action : ModeOptions.ActionEnum.values()) + { + final ResourceLocation spriteLocation = new ResourceLocation(EffortlessBuilding.MODID, "icons/" + action.name().toLowerCase()); + event.addSprite(spriteLocation); + modeOptionIcons.put(action, spriteLocation); + } + } + + public static TextureAtlasSprite getBuildModeIcon(BuildModes.BuildModeEnum mode) { + return Minecraft.getInstance().getTextureMap().getSprite(buildModeIcons.get(mode)); + } + + public static TextureAtlasSprite getModeOptionIcon(ModeOptions.ActionEnum action) { + return Minecraft.getInstance().getTextureMap().getSprite(modeOptionIcons.get(action)); + } } diff --git a/src/main/java/nl/requios/effortlessbuilding/gui/buildmode/RadialMenu.java b/src/main/java/nl/requios/effortlessbuilding/gui/buildmode/RadialMenu.java index db56a58..7ced045 100644 --- a/src/main/java/nl/requios/effortlessbuilding/gui/buildmode/RadialMenu.java +++ b/src/main/java/nl/requios/effortlessbuilding/gui/buildmode/RadialMenu.java @@ -11,6 +11,7 @@ import net.minecraft.util.text.ITextComponent; import net.minecraft.util.text.TextFormatting; import net.minecraft.util.text.TranslationTextComponent; import nl.requios.effortlessbuilding.EffortlessBuilding; +import nl.requios.effortlessbuilding.ModEventHandler; import nl.requios.effortlessbuilding.buildmode.ModeSettingsManager; import nl.requios.effortlessbuilding.proxy.ClientProxy; import org.apache.commons.lang3.text.WordUtils; @@ -298,7 +299,7 @@ public class RadialMenu extends Screen { final double x = (menuRegion.x1 + menuRegion.x2) * 0.5 * (ringOuterEdge * 0.6 + 0.4 * ringInnerEdge); final double y = (menuRegion.y1 + menuRegion.y2) * 0.5 * (ringOuterEdge * 0.6 + 0.4 * ringInnerEdge); - final TextureAtlasSprite sprite = ClientProxy.getBuildModeIcon(menuRegion.mode); + final TextureAtlasSprite sprite = ModEventHandler.getBuildModeIcon(menuRegion.mode); final double x1 = x - 8; final double x2 = x + 8; @@ -330,7 +331,7 @@ public class RadialMenu extends Screen { final double v1 = 0; final double v2 = 16; - final TextureAtlasSprite sprite = ClientProxy.getModeOptionIcon(button.action); + final TextureAtlasSprite sprite = ModEventHandler.getModeOptionIcon(button.action); final double btnmiddleX = (button.x1 + button.x2) / 2 + 0.01; final double btnmiddleY = (button.y1 + button.y2) / 2 + 0.01; diff --git a/src/main/java/nl/requios/effortlessbuilding/gui/buildmodifier/ArraySettingsGui.java b/src/main/java/nl/requios/effortlessbuilding/gui/buildmodifier/ArraySettingsGui.java index c9cb00e..e060535 100644 --- a/src/main/java/nl/requios/effortlessbuilding/gui/buildmodifier/ArraySettingsGui.java +++ b/src/main/java/nl/requios/effortlessbuilding/gui/buildmodifier/ArraySettingsGui.java @@ -7,10 +7,10 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.util.text.TextFormatting; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; -import net.minecraftforge.fml.client.config.GuiCheckBox; import nl.requios.effortlessbuilding.EffortlessBuilding; import nl.requios.effortlessbuilding.buildmodifier.Array; import nl.requios.effortlessbuilding.buildmodifier.ModifierSettingsManager; +import nl.requios.effortlessbuilding.gui.elements.GuiCheckBoxFixed; import nl.requios.effortlessbuilding.gui.elements.GuiCollapsibleScrollEntry; import nl.requios.effortlessbuilding.gui.elements.GuiNumberField; import nl.requios.effortlessbuilding.gui.elements.GuiScrollPane; @@ -24,7 +24,7 @@ public class ArraySettingsGui extends GuiCollapsibleScrollEntry { protected List arrayNumberFieldList = new ArrayList<>(); - private GuiCheckBox buttonArrayEnabled; + private GuiCheckBoxFixed buttonArrayEnabled; private GuiNumberField textArrayOffsetX, textArrayOffsetY, textArrayOffsetZ, textArrayCount; public ArraySettingsGui(GuiScrollPane scrollPane) { @@ -36,7 +36,7 @@ public class ArraySettingsGui extends GuiCollapsibleScrollEntry { super.init(buttons); int y = top; - buttonArrayEnabled = new GuiCheckBox(left - 15 + 8, y, "", false) { + buttonArrayEnabled = new GuiCheckBoxFixed(left - 15 + 8, y, "", false) { @Override public void onClick(double mouseX, double mouseY) { super.onClick(mouseX, mouseY); diff --git a/src/main/java/nl/requios/effortlessbuilding/gui/buildmodifier/MirrorSettingsGui.java b/src/main/java/nl/requios/effortlessbuilding/gui/buildmodifier/MirrorSettingsGui.java index 0cf1d64..78979f4 100644 --- a/src/main/java/nl/requios/effortlessbuilding/gui/buildmodifier/MirrorSettingsGui.java +++ b/src/main/java/nl/requios/effortlessbuilding/gui/buildmodifier/MirrorSettingsGui.java @@ -8,14 +8,10 @@ import net.minecraft.util.math.Vec3d; import net.minecraft.util.text.TextFormatting; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; -import net.minecraftforge.fml.client.config.GuiCheckBox; import nl.requios.effortlessbuilding.EffortlessBuilding; import nl.requios.effortlessbuilding.buildmodifier.Mirror; import nl.requios.effortlessbuilding.buildmodifier.ModifierSettingsManager; -import nl.requios.effortlessbuilding.gui.elements.GuiCollapsibleScrollEntry; -import nl.requios.effortlessbuilding.gui.elements.GuiIconButton; -import nl.requios.effortlessbuilding.gui.elements.GuiNumberField; -import nl.requios.effortlessbuilding.gui.elements.GuiScrollPane; +import nl.requios.effortlessbuilding.gui.elements.*; import nl.requios.effortlessbuilding.helper.ReachHelper; import java.util.ArrayList; @@ -33,7 +29,7 @@ public class MirrorSettingsGui extends GuiCollapsibleScrollEntry { protected List mirrorNumberFieldList = new ArrayList<>(); private GuiNumberField textMirrorPosX, textMirrorPosY, textMirrorPosZ, textMirrorRadius; - private GuiCheckBox buttonMirrorEnabled, buttonMirrorX, buttonMirrorY, buttonMirrorZ; + private GuiCheckBoxFixed buttonMirrorEnabled, buttonMirrorX, buttonMirrorY, buttonMirrorZ; private GuiIconButton buttonCurrentPosition, buttonToggleOdd, buttonDrawPlanes, buttonDrawLines; private boolean drawPlanes, drawLines, toggleOdd; @@ -46,7 +42,7 @@ public class MirrorSettingsGui extends GuiCollapsibleScrollEntry { super.init(buttonList); int y = top - 2; - buttonMirrorEnabled = new GuiCheckBox(left - 15 + 8, y, "", false) { + buttonMirrorEnabled = new GuiCheckBoxFixed(left - 15 + 8, y, "", false) { @Override public void onClick(double mouseX, double mouseY) { super.onClick(mouseX, mouseY); @@ -73,13 +69,13 @@ public class MirrorSettingsGui extends GuiCollapsibleScrollEntry { mirrorNumberFieldList.add(textMirrorPosZ); y = top + 50; - buttonMirrorX = new GuiCheckBox(left + 60, y, " X", true); + buttonMirrorX = new GuiCheckBoxFixed(left + 60, y, " X", true); mirrorButtonList.add(buttonMirrorX); - buttonMirrorY = new GuiCheckBox(left + 100, y, " Y", false); + buttonMirrorY = new GuiCheckBoxFixed(left + 100, y, " Y", false); mirrorButtonList.add(buttonMirrorY); - buttonMirrorZ = new GuiCheckBox(left + 140, y, " Z", false); + buttonMirrorZ = new GuiCheckBoxFixed(left + 140, y, " Z", false); mirrorButtonList.add(buttonMirrorZ); y = top + 47; diff --git a/src/main/java/nl/requios/effortlessbuilding/gui/buildmodifier/RadialMirrorSettingsGui.java b/src/main/java/nl/requios/effortlessbuilding/gui/buildmodifier/RadialMirrorSettingsGui.java index 1e7e97e..d8926fd 100644 --- a/src/main/java/nl/requios/effortlessbuilding/gui/buildmodifier/RadialMirrorSettingsGui.java +++ b/src/main/java/nl/requios/effortlessbuilding/gui/buildmodifier/RadialMirrorSettingsGui.java @@ -8,14 +8,10 @@ import net.minecraft.util.math.Vec3d; import net.minecraft.util.text.TextFormatting; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; -import net.minecraftforge.fml.client.config.GuiCheckBox; import nl.requios.effortlessbuilding.EffortlessBuilding; import nl.requios.effortlessbuilding.buildmodifier.ModifierSettingsManager; import nl.requios.effortlessbuilding.buildmodifier.RadialMirror; -import nl.requios.effortlessbuilding.gui.elements.GuiCollapsibleScrollEntry; -import nl.requios.effortlessbuilding.gui.elements.GuiIconButton; -import nl.requios.effortlessbuilding.gui.elements.GuiNumberField; -import nl.requios.effortlessbuilding.gui.elements.GuiScrollPane; +import nl.requios.effortlessbuilding.gui.elements.*; import nl.requios.effortlessbuilding.helper.ReachHelper; import java.util.ArrayList; @@ -33,7 +29,7 @@ public class RadialMirrorSettingsGui extends GuiCollapsibleScrollEntry { protected List radialMirrorNumberFieldList = new ArrayList<>(); private GuiNumberField textRadialMirrorPosX, textRadialMirrorPosY, textRadialMirrorPosZ, textRadialMirrorSlices, textRadialMirrorRadius; - private GuiCheckBox buttonRadialMirrorEnabled, buttonRadialMirrorAlternate; + private GuiCheckBoxFixed buttonRadialMirrorEnabled, buttonRadialMirrorAlternate; private GuiIconButton buttonCurrentPosition, buttonToggleOdd, buttonDrawPlanes, buttonDrawLines; private boolean drawPlanes, drawLines, toggleOdd; @@ -46,7 +42,7 @@ public class RadialMirrorSettingsGui extends GuiCollapsibleScrollEntry { super.init(buttonList); int y = top - 2; - buttonRadialMirrorEnabled = new GuiCheckBox(left - 15 + 8, y, "", false) { + buttonRadialMirrorEnabled = new GuiCheckBoxFixed(left - 15 + 8, y, "", false) { @Override public void onClick(double mouseX, double mouseY) { super.onClick(mouseX, mouseY); @@ -131,7 +127,7 @@ public class RadialMirrorSettingsGui extends GuiCollapsibleScrollEntry { radialMirrorIconButtonList.add(buttonDrawPlanes); y = top + 76; - buttonRadialMirrorAlternate = new GuiCheckBox(left + 140, y, " Alternate", false); + buttonRadialMirrorAlternate = new GuiCheckBoxFixed(left + 140, y, " Alternate", false); radialMirrorButtonList.add(buttonRadialMirrorAlternate); ModifierSettingsManager.ModifierSettings modifierSettings = ModifierSettingsManager.getModifierSettings(mc.player); diff --git a/src/main/java/nl/requios/effortlessbuilding/gui/elements/GuiCheckBoxFixed.java b/src/main/java/nl/requios/effortlessbuilding/gui/elements/GuiCheckBoxFixed.java new file mode 100644 index 0000000..d809be2 --- /dev/null +++ b/src/main/java/nl/requios/effortlessbuilding/gui/elements/GuiCheckBoxFixed.java @@ -0,0 +1,66 @@ +package nl.requios.effortlessbuilding.gui.elements; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.widget.button.Button; +import net.minecraftforge.fml.client.config.GuiUtils; + +/** + * This class provides a checkbox style control. + */ +public class GuiCheckBoxFixed extends Button +{ + private boolean isChecked; + private int boxWidth; + + public GuiCheckBoxFixed(int xPos, int yPos, String displayString, boolean isChecked) + { + super(xPos, yPos, Minecraft.getInstance().fontRenderer.getStringWidth(displayString) + 2 + 11, 11, displayString, b -> {}); + this.isChecked = isChecked; + this.boxWidth = 11; + this.height = 11; + this.width = this.boxWidth + 2 + Minecraft.getInstance().fontRenderer.getStringWidth(displayString); + } + + @Override + public void renderButton(int mouseX, int mouseY, float partial) + { + if (this.visible) + { + Minecraft mc = Minecraft.getInstance(); + this.isHovered = mouseX >= this.x && mouseY >= this.y && mouseX < this.x + this.boxWidth && mouseY < this.y + this.height; + GuiUtils.drawContinuousTexturedBox(WIDGETS_LOCATION, this.x, this.y, 0, 46, this.boxWidth, this.height, 200, 20, 2, 3, 2, 2, this.blitOffset); + this.renderBg(mc, mouseX, mouseY); + int color = 14737632; + + if (packedFGColor != 0) + { + color = packedFGColor; + } + else if (!this.active) + { + color = 10526880; + } + + if (this.isChecked) + this.drawCenteredString(mc.fontRenderer, "x", this.x + this.boxWidth / 2 + 1, this.y + 1, 14737632); + + this.drawString(mc.fontRenderer, getMessage(), this.x + this.boxWidth + 2, this.y + 2, color); + } + } + + @Override + public void onPress() + { + this.isChecked = !this.isChecked; + } + + public boolean isChecked() + { + return this.isChecked; + } + + public void setIsChecked(boolean isChecked) + { + this.isChecked = isChecked; + } +} \ No newline at end of file diff --git a/src/main/java/nl/requios/effortlessbuilding/network/RequestLookAtMessage.java b/src/main/java/nl/requios/effortlessbuilding/network/RequestLookAtMessage.java index 231c856..6ef1219 100644 --- a/src/main/java/nl/requios/effortlessbuilding/network/RequestLookAtMessage.java +++ b/src/main/java/nl/requios/effortlessbuilding/network/RequestLookAtMessage.java @@ -2,6 +2,8 @@ package nl.requios.effortlessbuilding.network; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.network.PacketBuffer; +import net.minecraft.util.math.BlockRayTraceResult; +import net.minecraft.util.math.RayTraceResult; import net.minecraftforge.fml.LogicalSide; import net.minecraftforge.fml.network.NetworkEvent; import nl.requios.effortlessbuilding.EffortlessBuilding; @@ -49,7 +51,11 @@ public class RequestLookAtMessage { //Prevent double placing in normal mode with placeStartPos false //Unless QuickReplace is on, then we do need to place start pos. - PacketHandler.INSTANCE.sendToServer(new BlockPlacedMessage(ClientProxy.previousLookAt, message.getPlaceStartPos())); + if (ClientProxy.previousLookAt.getType() == RayTraceResult.Type.BLOCK) { + PacketHandler.INSTANCE.sendToServer(new BlockPlacedMessage((BlockRayTraceResult) ClientProxy.previousLookAt, message.getPlaceStartPos())); + } else { + PacketHandler.INSTANCE.sendToServer(new BlockPlacedMessage()); + } } }); ctx.get().setPacketHandled(true); diff --git a/src/main/java/nl/requios/effortlessbuilding/proxy/ClientProxy.java b/src/main/java/nl/requios/effortlessbuilding/proxy/ClientProxy.java index bad7f81..589e91d 100644 --- a/src/main/java/nl/requios/effortlessbuilding/proxy/ClientProxy.java +++ b/src/main/java/nl/requios/effortlessbuilding/proxy/ClientProxy.java @@ -63,9 +63,6 @@ public class ClientProxy implements IProxy { public static int ticksInGame = 0; - private static final HashMap buildModeIcons = new HashMap<>(); - private static final HashMap modeOptionIcons = new HashMap<>(); - @Override public void setup(FMLCommonSetupEvent event) {} @@ -105,32 +102,6 @@ public class ClientProxy implements IProxy { return (ctx.get().getDirection().getReceptionSide() == LogicalSide.CLIENT ? Minecraft.getInstance().player : ctx.get().getSender()); } - @SubscribeEvent - public static void onTextureStitch(final TextureStitchEvent.Pre event) { - //register icon textures - for ( final BuildModes.BuildModeEnum mode : BuildModes.BuildModeEnum.values() ) - { - final ResourceLocation sprite = new ResourceLocation(EffortlessBuilding.MODID, "icons/" + mode.name().toLowerCase()); - event.addSprite(sprite); - buildModeIcons.put(mode, sprite); - } - - for ( final ModeOptions.ActionEnum action : ModeOptions.ActionEnum.values() ) - { - final ResourceLocation sprite = new ResourceLocation(EffortlessBuilding.MODID, "icons/" + action.name().toLowerCase()); - event.addSprite(sprite); - modeOptionIcons.put(action, sprite); - } - } - - public static TextureAtlasSprite getBuildModeIcon(BuildModes.BuildModeEnum mode) { - return Minecraft.getInstance().getTextureMap().getSprite(buildModeIcons.get(mode)); - } - - public static TextureAtlasSprite getModeOptionIcon(ModeOptions.ActionEnum action) { - return Minecraft.getInstance().getTextureMap().getSprite(modeOptionIcons.get(action)); - } - @SubscribeEvent public static void onClientTick(TickEvent.ClientTickEvent event) {