From 5f6aa1a9bd5259e8e58fdb2bf0ce4287f0644dee Mon Sep 17 00:00:00 2001 From: Kam Date: Fri, 23 Aug 2024 14:12:59 -0400 Subject: [PATCH] First Magic System Push --- src/api | 2 +- .../gui/SubGuiNpcResistanceProperties.java | 18 +- .../npcs/client/gui/mainmenu/GuiNpcStats.java | 1 + .../java/noppes/npcs/constants/SyncType.java | 1 + .../npcs/controllers/MagicController.java | 207 ++++++++++++++++++ .../noppes/npcs/controllers/data/Magic.java | 54 +++++ 6 files changed, 276 insertions(+), 7 deletions(-) create mode 100644 src/main/java/noppes/npcs/controllers/MagicController.java create mode 100644 src/main/java/noppes/npcs/controllers/data/Magic.java diff --git a/src/api b/src/api index 748939619..672bcd61d 160000 --- a/src/api +++ b/src/api @@ -1 +1 @@ -Subproject commit 7489396198dde521e5b79eaecb2aeac9ca6e9862 +Subproject commit 672bcd61d5f199b3819c61febe902ab7b2b025c3 diff --git a/src/main/java/noppes/npcs/client/gui/SubGuiNpcResistanceProperties.java b/src/main/java/noppes/npcs/client/gui/SubGuiNpcResistanceProperties.java index 7e40a5a35..505c5246c 100644 --- a/src/main/java/noppes/npcs/client/gui/SubGuiNpcResistanceProperties.java +++ b/src/main/java/noppes/npcs/client/gui/SubGuiNpcResistanceProperties.java @@ -24,23 +24,29 @@ public class SubGuiNpcResistanceProperties extends SubGuiInterface implements IS addLabel(new GuiNpcLabel(1,"item.arrow.name", guiLeft + 4, guiTop + 37)); addSlider(new GuiNpcSlider(this, 1, guiLeft + 94, guiTop + 32, (int)(resistances.arrow * 100 - 100) + "%", resistances.arrow / 2)); + getSlider(1).enabled = !resistances.disableDamage; addLabel(new GuiNpcLabel(2,"stats.melee", guiLeft + 4, guiTop + 59)); addSlider(new GuiNpcSlider(this, 2, guiLeft + 94, guiTop + 54, (int)(resistances.playermelee * 100 - 100) + "%", resistances.playermelee / 2)); + getSlider(2).enabled = !resistances.disableDamage; addLabel(new GuiNpcLabel(3,"stats.explosion", guiLeft + 4, guiTop + 81)); addSlider(new GuiNpcSlider(this, 3, guiLeft + 94, guiTop + 76, (int)(resistances.explosion * 100 - 100) + "%", resistances.explosion / 2)); + getSlider(3).enabled = !resistances.disableDamage; - if(resistances.disableDamage){ - addLabel(new GuiNpcLabel(4,"stats.disabletrue", guiLeft + 4, guiTop + 103)); - } + addLabel(new GuiNpcLabel(21,"stats.disabledamage", guiLeft + 4, guiTop + 104)); + this.addButton(new GuiNpcButton(21, guiLeft + 94, guiTop + 99, 56, 20, new String[]{"gui.no","gui.yes"}, this.resistances.disableDamage? 1:0)); addButton(new GuiNpcButton(66, guiLeft + 190, guiTop + 190, 60, 20, "gui.done")); } - + protected void actionPerformed(GuiButton guibutton) { int id = guibutton.id; + if(id == 21){ + resistances.disableDamage = ((GuiNpcButton)guibutton).getValue() == 1; + initGui(); + } if(id == 66) { close(); @@ -55,7 +61,7 @@ public class SubGuiNpcResistanceProperties extends SubGuiInterface implements IS @Override public void mousePressed(GuiNpcSlider slider) { // TODO Auto-generated method stub - + } @Override @@ -72,7 +78,7 @@ public class SubGuiNpcResistanceProperties extends SubGuiInterface implements IS if(slider.id == 3){ resistances.explosion = slider.sliderValue * 2; } - + } } diff --git a/src/main/java/noppes/npcs/client/gui/mainmenu/GuiNpcStats.java b/src/main/java/noppes/npcs/client/gui/mainmenu/GuiNpcStats.java index 1e6bfed23..192b405e3 100644 --- a/src/main/java/noppes/npcs/client/gui/mainmenu/GuiNpcStats.java +++ b/src/main/java/noppes/npcs/client/gui/mainmenu/GuiNpcStats.java @@ -135,6 +135,7 @@ public class GuiNpcStats extends GuiNPCInterface2 implements ITextfieldListener, stats.potionImmune = ((GuiNpcButtonYesNo)guibutton).getBoolean(); } else if(button.id == 21){ + // Magic Button stats.resistances.disableDamage = ((GuiNpcButton)guibutton).getValue() == 1; } else if (button.id == 22) { diff --git a/src/main/java/noppes/npcs/constants/SyncType.java b/src/main/java/noppes/npcs/constants/SyncType.java index 9cbdc289d..d3e76ae93 100644 --- a/src/main/java/noppes/npcs/constants/SyncType.java +++ b/src/main/java/noppes/npcs/constants/SyncType.java @@ -7,4 +7,5 @@ public class SyncType { public static final int DIALOG = 4; public static final int DIALOG_CATEGORY = 5; public static final int PLAYER_DATA = 6; + public static final int MAGIC = 7; } diff --git a/src/main/java/noppes/npcs/controllers/MagicController.java b/src/main/java/noppes/npcs/controllers/MagicController.java new file mode 100644 index 000000000..6a99a36d2 --- /dev/null +++ b/src/main/java/noppes/npcs/controllers/MagicController.java @@ -0,0 +1,207 @@ +package noppes.npcs.controllers; + +import net.minecraft.nbt.CompressedStreamTools; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import noppes.npcs.CustomNpcs; +import noppes.npcs.LogWriter; +import noppes.npcs.Server; +import noppes.npcs.api.handler.IMagicHandler; +import noppes.npcs.api.handler.data.IFaction; +import noppes.npcs.api.handler.data.IMagic; +import noppes.npcs.constants.EnumPacketClient; +import noppes.npcs.constants.SyncType; +import noppes.npcs.controllers.data.Faction; +import noppes.npcs.controllers.data.Magic; + +import java.io.*; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.zip.GZIPInputStream; + +public class MagicController { + public HashMap magicSync = new HashMap(); + public HashMap magics; + + private static MagicController instance = new MagicController(); + + private int lastUsedID = 0; + + public MagicController(){ + instance = this; + magics = new HashMap(); + } + + public static MagicController getInstance(){ + return instance; + } + + public Magic getMagic(int magic) { + return magics.get(magic); + } + + public void load(){ + magics = new HashMap(); + lastUsedID = 0; + File saveDir = CustomNpcs.getWorldSaveDirectory(); + if(saveDir == null){ + return; + } + try { + File file = new File(saveDir, "magic.dat"); + if(file.exists()){ + loadMagicFile(file); + } + } catch (Exception e) { + try { + File file = new File(saveDir, "magic.dat_old"); + if(file.exists()){ + loadMagicFile(file); + } + + } catch (Exception ee) { + } + } + + if(magics.isEmpty()){ + magics.put(0,new Magic(0,"Nature", 0x00DD00)); + magics.put(1,new Magic(1,"Arcane", 0xF2DD00)); + magics.put(2,new Magic(2,"Ice", 0xDD0000)); + magics.put(2,new Magic(3,"Fire", 0xDD0000)); + magics.put(2,new Magic(4,"Dark", 0xDD0000)); + magics.put(2,new Magic(5,"Holy", 0xDD0000)); + } + } + + private void loadMagicFile(File file) throws IOException{ + DataInputStream var1 = new DataInputStream(new BufferedInputStream(new GZIPInputStream(new FileInputStream(file)))); + loadMagic(var1); + var1.close(); + } + + public void loadMagic(DataInputStream stream) throws IOException{ + HashMap magic = new HashMap(); + NBTTagCompound nbttagcompound1 = CompressedStreamTools.read(stream); + lastUsedID = nbttagcompound1.getInteger("lastID"); + NBTTagList list = nbttagcompound1.getTagList("NPCMagic", 10); + + if(list != null){ + for(int i = 0; i < list.tagCount(); i++) + { + NBTTagCompound nbttagcompound = list.getCompoundTagAt(i); + Magic loadMagic = new Magic(); + loadMagic.readNBT(nbttagcompound); + magic.put(loadMagic.id,loadMagic); + } + } + this.magics = magic; + } + public NBTTagCompound getNBT(){ + NBTTagList list = new NBTTagList(); + for(int slot : magics.keySet()){ + Magic mag = magics.get(slot); + NBTTagCompound nbtfactions = new NBTTagCompound(); + mag.writeNBT(nbtfactions); + list.appendTag(nbtfactions); + } + NBTTagCompound nbttagcompound = new NBTTagCompound(); + nbttagcompound.setInteger("lastID", lastUsedID); + nbttagcompound.setTag("NPCFactions", list); + return nbttagcompound; + } + public void saveFactions(){ + try { + File saveDir = CustomNpcs.getWorldSaveDirectory(); + File file = new File(saveDir, "magic.dat_new"); + File file1 = new File(saveDir, "magic.dat_old"); + File file2 = new File(saveDir, "magic.dat"); + CompressedStreamTools.writeCompressed(getNBT(), new FileOutputStream(file)); + if(file1.exists()) + { + file1.delete(); + } + file2.renameTo(file1); + if(file2.exists()) + { + file2.delete(); + } + file.renameTo(file2); + if(file.exists()) + { + file.delete(); + } + } catch (Exception e) { + LogWriter.except(e); + } + } + + public Magic get(int magicID) { + return magics.get(magicID); + } + + public List list() { + return new ArrayList(this.magics.values()); + } + + public void saveMagic(Magic mag) { + + if(mag.id < 0){ + mag.id = getUnusedId(); + while(hasName(mag.name)) + mag.name += "_"; + } + else{ + Magic existing = magics.get(mag.id); + if(existing != null && !existing.name.equals(mag.name)) + while(hasName(mag.name)) + mag.name += "_"; + } + magics.remove(mag.id); + magics.put(mag.id, mag); + + NBTTagCompound facCompound = new NBTTagCompound(); + mag.writeNBT(facCompound); + Server.sendToAll(EnumPacketClient.SYNC_UPDATE, SyncType.MAGIC, facCompound); + saveFactions(); + } + + public int getUnusedId(){ + if(lastUsedID == 0){ + for(int catid : magics.keySet()) + if(catid > lastUsedID) + lastUsedID = catid; + } + lastUsedID++; + return lastUsedID; + } + + public boolean hasName(String newName) { + if(newName.trim().isEmpty()) + return true; + for(Magic mag : magics.values()) + if(mag.name.equals(newName)) + return true; + return false; + } + + public Magic getMagicFromName(String magicName){ + for (Map.Entry entryMag: MagicController.getInstance().magics.entrySet()){ + if (entryMag.getValue().name.equalsIgnoreCase(magicName)){ + return entryMag.getValue(); + } + } + return null; + } + + public String[] getNames() { + String[] names = new String[magics.size()]; + int i = 0; + for(Magic mag : magics.values()){ + names[i] = mag.name.toLowerCase(); + i++; + } + return names; + } +} diff --git a/src/main/java/noppes/npcs/controllers/data/Magic.java b/src/main/java/noppes/npcs/controllers/data/Magic.java new file mode 100644 index 000000000..96811f3ab --- /dev/null +++ b/src/main/java/noppes/npcs/controllers/data/Magic.java @@ -0,0 +1,54 @@ +package noppes.npcs.controllers.data; + +import net.minecraft.nbt.NBTTagCompound; +import noppes.npcs.api.handler.data.IMagic; +import noppes.npcs.controllers.MagicController; + +public class Magic implements IMagic { + public String name = ""; + public int color = Integer.parseInt("FF00", 16); + + public int id = -1; + + public Magic(){} + + public Magic(int id, String name, int color){ + this.name = name; + this.color = color; + this.id = id; + } + public static String formatName(String name){ + name = name.toLowerCase().trim(); + return name.substring(0, 1).toUpperCase() + name.substring(1); + } + public void readNBT(NBTTagCompound compound){ + name = compound.getString("Name"); + color = compound.getInteger("Color"); + id = compound.getInteger("Slot"); + } + public void writeNBT(NBTTagCompound compound){ + compound.setInteger("Slot", id); + compound.setString("Name", name); + compound.setInteger("Color", color); + } + + public int getId() { + return this.id; + } + + public String getName() { + return this.name; + } + + public void setName(String name) { this.name = name; } + + public void setColor(int color) { this.color = color; } + + public int getColor() { + return this.color; + } + + public void save() { + MagicController.getInstance().saveMagic(this); + } +}