From 6f7f2f857db94a8952613262e62a1c24e78f6563 Mon Sep 17 00:00:00 2001 From: Goodbird Date: Sun, 18 Feb 2024 17:25:55 +0300 Subject: [PATCH 1/3] Added a custom hitbox data class --- .../controllers/data/CustomHitboxData.java | 51 +++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 src/main/java/noppes/npcs/controllers/data/CustomHitboxData.java diff --git a/src/main/java/noppes/npcs/controllers/data/CustomHitboxData.java b/src/main/java/noppes/npcs/controllers/data/CustomHitboxData.java new file mode 100644 index 000000000..8259d1059 --- /dev/null +++ b/src/main/java/noppes/npcs/controllers/data/CustomHitboxData.java @@ -0,0 +1,51 @@ +package noppes.npcs.controllers.data; + +import net.minecraft.nbt.NBTTagCompound; + +public class CustomHitboxData { + private float width = 1f; + private float height = 1.8f; + + private boolean customHitbox = false; + + public NBTTagCompound writeToNBT(NBTTagCompound nbttagcompound) { + nbttagcompound.setBoolean("CustomHitbox", customHitbox); + if(customHitbox) { + nbttagcompound.setFloat("HitboxWidth", width); + nbttagcompound.setFloat("HitboxHeight", height); + } + return nbttagcompound; + } + + public void readFromNBT(NBTTagCompound nbttagcompound) { + customHitbox = nbttagcompound.getBoolean("CustomHitbox"); + if(customHitbox) { + width = nbttagcompound.getFloat("HitboxWidth"); + height = nbttagcompound.getFloat("HitboxHeight"); + } + } + + public float getWidth() { + return width; + } + + public void setWidth(float width) { + this.width = width; + } + + public float getHeight() { + return height; + } + + public void setHeight(float height) { + this.height = height; + } + + public boolean isCustomHitbox() { + return customHitbox; + } + + public void setCustomHitbox(boolean customHitbox) { + this.customHitbox = customHitbox; + } +} From d10d582a18b6faf068e9c834679506d6e0bea97b Mon Sep 17 00:00:00 2001 From: Goodbird Date: Sun, 18 Feb 2024 17:26:31 +0300 Subject: [PATCH 2/3] Linked custom hitbox data to data display and to npc --- src/main/java/noppes/npcs/DataDisplay.java | 9 ++++++++- src/main/java/noppes/npcs/entity/EntityNPCInterface.java | 5 ++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/main/java/noppes/npcs/DataDisplay.java b/src/main/java/noppes/npcs/DataDisplay.java index ca5b640dd..b30924c4d 100644 --- a/src/main/java/noppes/npcs/DataDisplay.java +++ b/src/main/java/noppes/npcs/DataDisplay.java @@ -11,6 +11,7 @@ import net.minecraft.server.MinecraftServer; import net.minecraft.util.StringUtils; import noppes.npcs.config.ConfigMain; import noppes.npcs.controllers.data.AnimationData; +import noppes.npcs.controllers.data.CustomHitboxData; import noppes.npcs.controllers.data.SkinOverlay; import noppes.npcs.entity.EntityNPCInterface; import noppes.npcs.entity.data.DataSkinOverlays; @@ -61,12 +62,15 @@ public class DataDisplay { //0 - Yes, 1 - No, 2 - Only NPCs, 3 - Only Players, 4 - NPCs and Players public int collidesWith = 1; + public CustomHitboxData customHitboxData; + public DataDisplay(EntityNPCInterface npc){ this.npc = npc; markovGeneratorId = new Random().nextInt(CustomNpcs.MARKOV_GENERATOR.length-1); skinOverlayData = new DataSkinOverlays(npc); name = getRandomName(); animationData = new AnimationData(this); + customHitboxData = new CustomHitboxData(); } public String getRandomName() { @@ -89,6 +93,8 @@ public class DataDisplay { nbttagcompound = animationData.writeToNBT(nbttagcompound); + nbttagcompound = customHitboxData.writeToNBT(nbttagcompound); + if (this.playerProfile != null) { NBTTagCompound nbttagcompound1 = new NBTTagCompound(); @@ -113,7 +119,6 @@ public class DataDisplay { } nbttagcompound.setTag("InvisibleToList", list); - return nbttagcompound; } public void readToNBT(NBTTagCompound nbttagcompound) { @@ -166,6 +171,8 @@ public class DataDisplay { animationData.readFromNBT(nbttagcompound); + customHitboxData.readFromNBT(nbttagcompound); + modelSize = ValueUtil.clamp(nbttagcompound.getInteger("Size"), 1, Integer.MAX_VALUE); if(modelSize > ConfigMain.NpcSizeLimit) modelSize = ConfigMain.NpcSizeLimit; diff --git a/src/main/java/noppes/npcs/entity/EntityNPCInterface.java b/src/main/java/noppes/npcs/entity/EntityNPCInterface.java index db10cca8c..213f96d8a 100644 --- a/src/main/java/noppes/npcs/entity/EntityNPCInterface.java +++ b/src/main/java/noppes/npcs/entity/EntityNPCInterface.java @@ -1094,7 +1094,10 @@ public abstract class EntityNPCInterface extends EntityCreature implements IEnti if(width / 2 > worldObj.MAX_ENTITY_RADIUS) { worldObj.MAX_ENTITY_RADIUS = width / 2; } - + if(display.customHitboxData.isCustomHitbox()){ + width = display.customHitboxData.getWidth(); + height = display.customHitboxData.getHeight(); + } this.setPosition(posX, posY, posZ); } From c3a8171fda2cdad7e09becafe01ba0f07b4fb573 Mon Sep 17 00:00:00 2001 From: Goodbird Date: Sun, 18 Feb 2024 17:27:10 +0300 Subject: [PATCH 3/3] Added custom hitbox editing gui and linked it to GuiNpcDisplay --- .../npcs/client/gui/SubGuiCustomHitbox.java | 61 +++++++++++++++++++ .../client/gui/mainmenu/GuiNpcDisplay.java | 12 ++-- 2 files changed, 67 insertions(+), 6 deletions(-) create mode 100644 src/main/java/noppes/npcs/client/gui/SubGuiCustomHitbox.java diff --git a/src/main/java/noppes/npcs/client/gui/SubGuiCustomHitbox.java b/src/main/java/noppes/npcs/client/gui/SubGuiCustomHitbox.java new file mode 100644 index 000000000..0a6a94100 --- /dev/null +++ b/src/main/java/noppes/npcs/client/gui/SubGuiCustomHitbox.java @@ -0,0 +1,61 @@ +package noppes.npcs.client.gui; + +import net.minecraft.client.gui.GuiButton; +import noppes.npcs.client.gui.util.*; +import noppes.npcs.controllers.data.CustomHitboxData; + +public class SubGuiCustomHitbox extends SubGuiInterface implements ITextfieldListener +{ + private CustomHitboxData hitboxData; + public SubGuiCustomHitbox(CustomHitboxData hitboxData){ + this.hitboxData = hitboxData; + setBackground("menubg.png"); + xSize = 256; + ySize = 216; + closeOnEsc = true; + } + + @Override + public void initGui(){ + super.initGui(); + addLabel(new GuiNpcLabel(0,"Custom hitbox", guiLeft + 5, guiTop + 35)); + addButton(new GuiNpcButtonYesNo(0,guiLeft + 122, guiTop + 30, 56, 20 ,hitboxData.isCustomHitbox())); + if(hitboxData.isCustomHitbox()){ + addLabel(new GuiNpcLabel(3,"Width", guiLeft + 5, guiTop + 57)); + addTextField(new GuiNpcTextField(2,this, fontRendererObj, guiLeft + 122, guiTop + 53, 50, 18, hitboxData.getWidth() + "")); + getTextField(2).floatsOnly = true; + getTextField(2).setMinMaxDefaultFloat(0, Float.MAX_VALUE, 20); + + addLabel(new GuiNpcLabel(4,"Height", guiLeft + 5, guiTop + 79)); + addTextField(new GuiNpcTextField(3,this, fontRendererObj, guiLeft + 122, guiTop + 75, 50, 18, hitboxData.getHeight() + "")); + getTextField(3).floatsOnly = true; + getTextField(3).setMinMaxDefaultFloat(0, Float.MAX_VALUE, 20); + } + addButton(new GuiNpcButton(66, guiLeft + 82, guiTop + 190,98, 20, "gui.done")); + } + + @Override + protected void actionPerformed(GuiButton guibutton){ + int id = guibutton.id; + GuiNpcButton button = (GuiNpcButton) guibutton; + if(button.id == 0){ + hitboxData.setCustomHitbox(((GuiNpcButtonYesNo)button).getBoolean()); + initGui(); + } + if(id == 66){ + close(); + } + } + + @Override + public void unFocused(GuiNpcTextField textfield) { + if(textfield.id == 2){ + hitboxData.setWidth(textfield.getFloat()); + } + if(textfield.id == 3){ + hitboxData.setHeight(textfield.getFloat()); + } + } + +} + diff --git a/src/main/java/noppes/npcs/client/gui/mainmenu/GuiNpcDisplay.java b/src/main/java/noppes/npcs/client/gui/mainmenu/GuiNpcDisplay.java index 42de415d7..ccb2d1ccd 100644 --- a/src/main/java/noppes/npcs/client/gui/mainmenu/GuiNpcDisplay.java +++ b/src/main/java/noppes/npcs/client/gui/mainmenu/GuiNpcDisplay.java @@ -7,10 +7,7 @@ import net.minecraft.nbt.NBTTagCompound; import noppes.npcs.DataDisplay; import noppes.npcs.client.Client; import noppes.npcs.client.NoppesUtil; -import noppes.npcs.client.gui.GuiNPCTextures; -import noppes.npcs.client.gui.GuiNpcTextureCloaks; -import noppes.npcs.client.gui.GuiNpcTextureOverlays; -import noppes.npcs.client.gui.SubGuiNpcName; +import noppes.npcs.client.gui.*; import noppes.npcs.client.gui.model.GuiCreationScreen; import noppes.npcs.client.gui.util.*; import noppes.npcs.config.ConfigMain; @@ -46,7 +43,6 @@ public class GuiNpcDisplay extends GuiNPCInterface2 implements ITextfieldListene y+=23; addLabel(new GuiNpcLabel(11,"gui.title", guiLeft + 5, y + 5)); addTextField(new GuiNpcTextField(11,this, fontRendererObj, guiLeft + 50, y, 206, 20, display.title)); - y+=23; addLabel(new GuiNpcLabel(1,"display.model", guiLeft + 5, y + 5)); this.addButton(new GuiNpcButton(1, guiLeft + 50, y,110,20, "selectServer.edit")); @@ -94,7 +90,8 @@ public class GuiNpcDisplay extends GuiNPCInterface2 implements ITextfieldListene y+=23; addLabel(new GuiNpcLabel(10,"display.bossbar", guiLeft + 5, y + 5)); this.addButton(new GuiNpcButton(10, guiLeft + 120, y, 110, 20, new String[]{"display.hide","display.show","display.showAttacking"}, display.showBossBar)); - + addButton(new GuiNpcButton(12,guiLeft + 290, y, 56, 20, "selectServer.edit")); + addLabel(new GuiNpcLabel(12,"Hitbox", guiLeft + 240, y + 5)); GeckoAddonClient.Instance.geckoNpcDisplayInitGui(this); } @@ -185,6 +182,9 @@ public class GuiNpcDisplay extends GuiNPCInterface2 implements ITextfieldListene npc.display.skinOverlayData.overlayList.get(0).setBlend(button.getValue() == 0); initGui(); } + else if (button.id == 12){ + setSubGui(new SubGuiCustomHitbox(display.customHitboxData)); + } else if(button.id == 14){ String name = display.getRandomName(); display.setName(name);