diff --git a/src/main/java/kamkeel/npcs/network/PacketHandler.java b/src/main/java/kamkeel/npcs/network/PacketHandler.java index 1c322f387..a5a5fec17 100644 --- a/src/main/java/kamkeel/npcs/network/PacketHandler.java +++ b/src/main/java/kamkeel/npcs/network/PacketHandler.java @@ -355,6 +355,8 @@ public class PacketHandler { PLAYER_PACKET.registerPacket(new MailActionPacket()); PLAYER_PACKET.registerPacket(new MailActionPacket.MailSendPacket()); + PLAYER_PACKET.registerPacket(new CompanionActionPacket()); + PLAYER_PACKET.registerPacket(new InputDevicePacket()); PLAYER_PACKET.registerPacket(new ScreenSizePacket()); diff --git a/src/main/java/kamkeel/npcs/network/enums/EnumPlayerPacket.java b/src/main/java/kamkeel/npcs/network/enums/EnumPlayerPacket.java index b5ed33a4e..bbc69f64c 100644 --- a/src/main/java/kamkeel/npcs/network/enums/EnumPlayerPacket.java +++ b/src/main/java/kamkeel/npcs/network/enums/EnumPlayerPacket.java @@ -10,7 +10,7 @@ public enum EnumPlayerPacket { MailSend, SaveSign, // TODO SaveBook, // TODO - Companion, // TODO: OpenInv, TalentExp + CompanionAction, // TODO: OpenInv, TalentExp GetRole, // TODO InputDevice, ScreenSize diff --git a/src/main/java/kamkeel/npcs/network/packets/player/CompanionActionPacket.java b/src/main/java/kamkeel/npcs/network/packets/player/CompanionActionPacket.java new file mode 100644 index 000000000..266ab2d07 --- /dev/null +++ b/src/main/java/kamkeel/npcs/network/packets/player/CompanionActionPacket.java @@ -0,0 +1,93 @@ +package kamkeel.npcs.network.packets.player; + +import io.netty.buffer.ByteBuf; +import kamkeel.npcs.network.AbstractPacket; +import kamkeel.npcs.network.PacketChannel; +import kamkeel.npcs.network.PacketClient; +import kamkeel.npcs.network.PacketHandler; +import kamkeel.npcs.network.enums.EnumPlayerPacket; +import net.minecraft.entity.player.EntityPlayer; +import noppes.npcs.NoppesUtilServer; +import noppes.npcs.constants.EnumCompanionTalent; +import noppes.npcs.constants.EnumGuiType; +import noppes.npcs.constants.EnumRoleType; +import noppes.npcs.roles.RoleCompanion; + +import java.io.IOException; + +public class CompanionActionPacket extends AbstractPacket { + public static final String packetName = "Player|CompanionAction"; + + private Type type; + private int talentOrdinal; + private int exp; + + public CompanionActionPacket() { + + } + + public static void OpenInventory() { + CompanionActionPacket packet = new CompanionActionPacket(); + packet.type = Type.OpenInventory; + PacketClient.sendClient(packet); + } + + public static void TalentExp(EnumCompanionTalent talent, int exp) { + CompanionActionPacket packet = new CompanionActionPacket(); + packet.type = Type.TalentExp; + packet.talentOrdinal = talent.ordinal(); + packet.exp = exp; + PacketClient.sendClient(packet); + } + + @Override + public boolean needsNPC() { + return true; + } + + @Override + public Enum getType() { + return EnumPlayerPacket.CompanionAction; + } + + @Override + public PacketChannel getChannel() { + return PacketHandler.PLAYER_PACKET; + } + + @Override + public void sendData(ByteBuf out) throws IOException { + out.writeInt(type.ordinal()); + + if (type == Type.TalentExp) { + out.writeInt(talentOrdinal); + out.writeInt(exp); + } + } + + @Override + public void receiveData(ByteBuf in, EntityPlayer player) throws IOException { + Type type = Type.values()[in.readInt()]; + + if(npc.advanced.role != EnumRoleType.Companion || player != npc.getOwner()) + return; + + if (type == Type.OpenInventory) { + NoppesUtilServer.sendOpenGui(player, EnumGuiType.CompanionInv, npc); + return; + } + int id = in.readInt(); + int exp = in.readInt(); + RoleCompanion role = (RoleCompanion) npc.roleInterface; + if(exp <= 0 || !role.canAddExp(-exp) || id < 0 || id >= EnumCompanionTalent.values().length) //should never happen unless hacking + return; + EnumCompanionTalent talent = EnumCompanionTalent.values()[id]; + role.addExp(-exp); + role.addTalentExp(talent, exp); + } + + private enum Type { + OpenInventory, + TalentExp + } +} diff --git a/src/main/java/noppes/npcs/PacketHandlerPlayer.java b/src/main/java/noppes/npcs/PacketHandlerPlayer.java index c40c36849..b68b434f5 100644 --- a/src/main/java/noppes/npcs/PacketHandlerPlayer.java +++ b/src/main/java/noppes/npcs/PacketHandlerPlayer.java @@ -43,25 +43,25 @@ public class PacketHandlerPlayer{ } private void player(ByteBuf buffer, EntityPlayerMP player, EnumPlayerPacket type) throws IOException { - if(type == EnumPlayerPacket.CompanionTalentExp){ - EntityNPCInterface npc = NoppesUtilServer.getEditingNpc(player); - if(npc == null || npc.advanced.role != EnumRoleType.Companion || player != npc.getOwner()) - return; - int id = buffer.readInt(); - int exp = buffer.readInt(); - RoleCompanion role = (RoleCompanion) npc.roleInterface; - if(exp <= 0 || !role.canAddExp(-exp) || id < 0 || id >= EnumCompanionTalent.values().length) //should never happen unless hacking - return; - EnumCompanionTalent talent = EnumCompanionTalent.values()[id]; - role.addExp(-exp); - role.addTalentExp(talent, exp); - } - else if(type == EnumPlayerPacket.CompanionOpenInv){ - EntityNPCInterface npc = NoppesUtilServer.getEditingNpc(player); - if(npc == null || npc.advanced.role != EnumRoleType.Companion || player != npc.getOwner()) - return; - NoppesUtilServer.sendOpenGui(player, EnumGuiType.CompanionInv, npc); - } +// if(type == EnumPlayerPacket.CompanionTalentExp){ +// EntityNPCInterface npc = NoppesUtilServer.getEditingNpc(player); +// if(npc == null || npc.advanced.role != EnumRoleType.Companion || player != npc.getOwner()) +// return; +// int id = buffer.readInt(); +// int exp = buffer.readInt(); +// RoleCompanion role = (RoleCompanion) npc.roleInterface; +// if(exp <= 0 || !role.canAddExp(-exp) || id < 0 || id >= EnumCompanionTalent.values().length) //should never happen unless hacking +// return; +// EnumCompanionTalent talent = EnumCompanionTalent.values()[id]; +// role.addExp(-exp); +// role.addTalentExp(talent, exp); +// } +// else if(type == EnumPlayerPacket.CompanionOpenInv){ +// EntityNPCInterface npc = NoppesUtilServer.getEditingNpc(player); +// if(npc == null || npc.advanced.role != EnumRoleType.Companion || player != npc.getOwner()) +// return; +// NoppesUtilServer.sendOpenGui(player, EnumGuiType.CompanionInv, npc); +// } // else if(type == EnumPlayerPacket.KeyPressed) { // if(ScriptController.Instance.languages.isEmpty()) { // return; @@ -146,7 +146,7 @@ public class PacketHandlerPlayer{ // NoppesUtilPlayer.changeFollowerState(player,npc); // GuiDataPacket.sendGuiData(player, npc.roleInterface.writeToNBT(new NBTTagCompound())); // } - else if(type == EnumPlayerPacket.RoleGet){ + if(type == EnumPlayerPacket.RoleGet){ EntityNPCInterface npc = NoppesUtilServer.getEditingNpc(player); if(npc == null || npc.advanced.role == EnumRoleType.None) return; diff --git a/src/main/java/noppes/npcs/client/gui/player/companion/GuiNpcCompanionStats.java b/src/main/java/noppes/npcs/client/gui/player/companion/GuiNpcCompanionStats.java index b393299e2..73e3b8c7e 100644 --- a/src/main/java/noppes/npcs/client/gui/player/companion/GuiNpcCompanionStats.java +++ b/src/main/java/noppes/npcs/client/gui/player/companion/GuiNpcCompanionStats.java @@ -1,5 +1,6 @@ package noppes.npcs.client.gui.player.companion; +import kamkeel.npcs.network.packets.player.CompanionActionPacket; import net.minecraft.client.gui.GuiButton; import net.minecraft.client.gui.GuiScreen; import net.minecraft.item.ItemStack; @@ -41,11 +42,11 @@ public class GuiNpcCompanionStats extends GuiNPCInterface implements IGuiData { addLabel(new GuiNpcLabel(3, NoppesStringUtils.translate("companion.strength", ": ", npc.stats.getAttackStrength()), guiLeft + 4, y+=12)); addLabel(new GuiNpcLabel(4, NoppesStringUtils.translate("companion.level", ": ", role.getTotalLevel()), guiLeft + 4, y+=12)); addLabel(new GuiNpcLabel(5, NoppesStringUtils.translate("job.name", ": ", "gui.none"), guiLeft + 4, y+=12)); - + addTopMenu(role, this, 1); - + } - + public static void addTopMenu(RoleCompanion role, GuiScreen screen, int active){ if(screen instanceof GuiNPCInterface){ GuiNPCInterface gui = (GuiNPCInterface) screen; @@ -79,7 +80,7 @@ public class GuiNpcCompanionStats extends GuiNPCInterface implements IGuiData { CustomNpcs.proxy.openGui(npc, EnumGuiType.CompanionTalent); } if(id == 3){ - NoppesUtilPlayer.sendData(EnumPlayerPacket.CompanionOpenInv); + CompanionActionPacket.OpenInventory(); } } @@ -89,12 +90,12 @@ public class GuiNpcCompanionStats extends GuiNPCInterface implements IGuiData { if(isEating && !role.isEating()){ NoppesUtilPlayer.sendData(EnumPlayerPacket.RoleGet); } - + isEating = role.isEating(); super.drawNpc(34, 150); int y = drawHealth(guiTop + 88); } - + private int drawHealth(int y){ this.mc.getTextureManager().bindTexture(icons); @@ -102,23 +103,23 @@ public class GuiNpcCompanionStats extends GuiNPCInterface implements IGuiData { if(role.talents.containsKey(EnumCompanionTalent.ARMOR) || max > 0){ for (int i = 0; i < 10; ++i){ int x = guiLeft + 66 + i * 10; - + if (i * 2 + 1 < max){ this.drawTexturedModalRect(x, y, 34, 9, 9, 9); } - + if (i * 2 + 1 == max){ this.drawTexturedModalRect(x, y, 25, 9, 9, 9); } - + if (i * 2 + 1 > max){ this.drawTexturedModalRect(x, y, 16, 9, 9, 9); } - + } y += 10; } - + max = MathHelper.ceiling_float_int(npc.getMaxHealth()); int k = (int)npc.getHealth(); float scale = 1; @@ -134,12 +135,12 @@ public class GuiNpcCompanionStats extends GuiNPCInterface implements IGuiData { if(k > i) this.drawTexturedModalRect(x, y + offset, 52 + i % 2 * 5, 0, i % 2 == 1?4:5, 9); } - + k = role.foodstats.getFoodLevel(); y += 10; if(max > 20) y += 10; - + for(int i = 0; i < 20; i++){ int x = guiLeft + 66 + i % 20 * 5; this.drawTexturedModalRect(x, y, 16 + i % 2 * 5, 27, i % 2 == 1?4:5, 9); @@ -151,7 +152,7 @@ public class GuiNpcCompanionStats extends GuiNPCInterface implements IGuiData { @Override public void save() { - + } @Override diff --git a/src/main/java/noppes/npcs/client/gui/player/companion/GuiNpcCompanionTalents.java b/src/main/java/noppes/npcs/client/gui/player/companion/GuiNpcCompanionTalents.java index 99740d703..f9e1c8a9d 100644 --- a/src/main/java/noppes/npcs/client/gui/player/companion/GuiNpcCompanionTalents.java +++ b/src/main/java/noppes/npcs/client/gui/player/companion/GuiNpcCompanionTalents.java @@ -1,5 +1,6 @@ package noppes.npcs.client.gui.player.companion; +import kamkeel.npcs.network.packets.player.CompanionActionPacket; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.Gui; import net.minecraft.client.gui.GuiButton; @@ -29,7 +30,7 @@ import java.util.Map; public class GuiNpcCompanionTalents extends GuiNPCInterface{ private RoleCompanion role; - private Map talents = new HashMap(); + private Map talents = new HashMap(); private GuiNpcButton selected; public GuiNpcCompanionTalents(EntityNPCInterface npc) { @@ -46,7 +47,7 @@ public class GuiNpcCompanionTalents extends GuiNPCInterface{ super.initGui(); talents.clear(); int y = guiTop + 12; - + addLabel(new GuiNpcLabel(0, NoppesStringUtils.translate("quest.exp", ": "), guiLeft + 4, guiTop + 10)); GuiNpcCompanionStats.addTopMenu(role, this, 2); @@ -55,7 +56,7 @@ public class GuiNpcCompanionTalents extends GuiNPCInterface{ addTalent(i++, e); } } - + private void addTalent(int i, EnumCompanionTalent talent){ int y = guiTop + 28 + i/2 * 26; int x = guiLeft + 4 + i % 2 * 84; @@ -75,7 +76,7 @@ public class GuiNpcCompanionTalents extends GuiNPCInterface{ CustomNpcs.proxy.openGui(npc, EnumGuiType.Companion); } if(id == 3){ - NoppesUtilPlayer.sendData(EnumPlayerPacket.CompanionOpenInv); + CompanionActionPacket.OpenInventory(); } if(id >= 10){ selected = (GuiNpcButton) guibutton; @@ -83,19 +84,19 @@ public class GuiNpcCompanionTalents extends GuiNPCInterface{ addExperience(1); } } - + private void addExperience(int exp){ EnumCompanionTalent talent = talents.get(selected.id - 10).talent; if(!role.canAddExp(-exp) && role.currentExp <= 0) return; if(exp > role.currentExp) exp = role.currentExp; - NoppesUtilPlayer.sendData(EnumPlayerPacket.CompanionTalentExp, talent.ordinal(), exp); + CompanionActionPacket.TalentExp(talent, exp); role.talents.put(talent, role.talents.get(talent) + exp); role.addExp(-exp); getLabel(selected.id - 10).label = role.talents.get(talent) + "/" + role.getNextLevel(talent); } - + private long lastPressedTime = 0; private long startPressedTime = 0; @Override @@ -122,7 +123,7 @@ public class GuiNpcCompanionTalents extends GuiNPCInterface{ selected = null; } } - + mc.getTextureManager().bindTexture(Gui.icons); this.drawTexturedModalRect(guiLeft + 4, guiTop + 20, 10, 64, 162, 5); @@ -142,9 +143,9 @@ public class GuiNpcCompanionTalents extends GuiNPCInterface{ @Override public void save() { - + } - + public static class GuiTalent extends GuiScreen{ private EnumCompanionTalent talent; private int x, y; @@ -156,12 +157,12 @@ public class GuiNpcCompanionTalents extends GuiNPCInterface{ this.y = y; this.role = role; } - + @Override public void drawScreen(int i, int j, float f) { Minecraft mc = Minecraft.getMinecraft(); mc.getTextureManager().bindTexture(resource); - + ItemStack item = talent.item; if(item.getItem() == null) item = new ItemStack(Blocks.dirt); @@ -177,7 +178,7 @@ public class GuiNpcCompanionTalents extends GuiNPCInterface{ RenderHelper.enableGUIStandardItemLighting(); itemRender.renderItemAndEffectIntoGUI(mc.fontRenderer, mc.getTextureManager(), item, x + 4, y + 4); itemRender.renderItemOverlayIntoGUI(mc.fontRenderer, mc.getTextureManager(), item, x + 4, y + 4); - RenderHelper.disableStandardItemLighting(); + RenderHelper.disableStandardItemLighting(); GL11.glDisable(GL11.GL_LIGHTING); GL11.glTranslatef(0, 0, 200); this.drawCenteredString(mc.fontRenderer, role.getTalentLevel(talent) + "", x + 20, y + 16, 0xFFFFFF); diff --git a/src/main/java/noppes/npcs/constants/EnumPlayerPacket.java b/src/main/java/noppes/npcs/constants/EnumPlayerPacket.java index 4441fd9cd..ec781e13b 100644 --- a/src/main/java/noppes/npcs/constants/EnumPlayerPacket.java +++ b/src/main/java/noppes/npcs/constants/EnumPlayerPacket.java @@ -20,10 +20,10 @@ public enum EnumPlayerPacket { // MailboxOpenMail, SignSave, SaveBook, - CompanionOpenInv, +// CompanionOpenInv, RoleGet, // KeyPressed, // MouseClicked, - CompanionTalentExp, +// CompanionTalentExp, // ScreenSize }