From 301e113be2f37bd82aeac0d9f820168b21fabefe Mon Sep 17 00:00:00 2001 From: "Luis C.M" Date: Fri, 27 May 2022 14:32:24 -0500 Subject: [PATCH] Added quest tracking, need to add objectives list and turn in info too. --- src/main/java/noppes/npcs/CustomNpcs.java | 14 + .../java/noppes/npcs/PacketHandlerServer.java | 48 +- src/main/java/noppes/npcs/QuestLogData.java | 13 +- .../noppes/npcs/ScriptPlayerEventHandler.java | 12 + src/main/java/noppes/npcs/client/Client.java | 3 + .../npcs/client/ClientEventHandler.java | 5 + .../npcs/client/PacketHandlerClient.java | 14 +- .../npcs/client/gui/OverlayQuestTracking.java | 590 ++++++++++++++++++ .../npcs/client/gui/player/GuiQuestLog.java | 74 ++- .../client/renderer/RenderCNPCPlayer.java | 4 +- .../npcs/constants/EnumPacketClient.java | 7 +- .../npcs/constants/EnumPacketServer.java | 4 +- .../npcs/controllers/CustomGuiController.java | 4 +- .../controllers/data/PlayerQuestData.java | 12 +- .../npcs/scripted/entity/ScriptPlayer.java | 2 +- 15 files changed, 751 insertions(+), 55 deletions(-) create mode 100644 src/main/java/noppes/npcs/client/gui/OverlayQuestTracking.java diff --git a/src/main/java/noppes/npcs/CustomNpcs.java b/src/main/java/noppes/npcs/CustomNpcs.java index e7350179a..e67ae182c 100644 --- a/src/main/java/noppes/npcs/CustomNpcs.java +++ b/src/main/java/noppes/npcs/CustomNpcs.java @@ -63,6 +63,15 @@ public class CustomNpcs { @ConfigProp(info = "The amount of time that passes before a player's quests are checked for completion in seconds.") public static int PlayerQuestCheck = 300; + @ConfigProp(info = "Client sided! Determines where tracking quest info shows up on the screen based on a number from 0 to 8.") + public static int TrackingInfoAlignment = 5; + + @ConfigProp(info = "Client sided! Offsets the tracking info GUI by this amount in the X direction.") + public static int TrackingInfoX = 0; + + @ConfigProp(info = "Client sided! Offsets the tracking info GUI by this amount in the Y direction.") + public static int TrackingInfoY = 0; + @ConfigProp public static boolean InventoryGuiEnabled = true; @@ -165,6 +174,11 @@ public class CustomNpcs { if(PlayerQuestCheck < 1) PlayerQuestCheck = 1; + if (TrackingInfoAlignment < 0) + TrackingInfoAlignment = 0; + if (TrackingInfoAlignment > 8) + TrackingInfoAlignment = 8; + EnchantInterface.load(); CustomItems.load(); diff --git a/src/main/java/noppes/npcs/PacketHandlerServer.java b/src/main/java/noppes/npcs/PacketHandlerServer.java index f15693742..0a030410c 100644 --- a/src/main/java/noppes/npcs/PacketHandlerServer.java +++ b/src/main/java/noppes/npcs/PacketHandlerServer.java @@ -72,19 +72,19 @@ public class PacketHandlerServer{ EntityNPCInterface npc = NoppesUtilServer.getEditingNpc(player); - if(type == EnumPacketServer.IsGuiOpen) { + if (type == EnumPacketServer.IsGuiOpen) { isGuiOpenPacket(buffer, player); return; - } else if (type == EnumPacketServer.CustomGuiButton && player.openContainer instanceof ContainerCustomGui) { - ((ContainerCustomGui)player.openContainer).customGui.fromNBT(Server.readNBT(buffer)); - EventHooks.onCustomGuiButton((IPlayer) NpcAPI.Instance().getIEntity(player), ((ContainerCustomGui)player.openContainer).customGui, buffer.readInt()); + } else if (type == EnumPacketServer.CustomGuiButton && player.openContainer instanceof ContainerCustomGui) { + ((ContainerCustomGui) player.openContainer).customGui.fromNBT(Server.readNBT(buffer)); + EventHooks.onCustomGuiButton((IPlayer) NpcAPI.Instance().getIEntity(player), ((ContainerCustomGui) player.openContainer).customGui, buffer.readInt()); return; } else if (type == EnumPacketServer.CustomGuiSlotChange && player.openContainer instanceof ContainerCustomGui) { - ((ContainerCustomGui)player.openContainer).customGui.fromNBT(Server.readNBT(buffer)); - EventHooks.onCustomGuiSlot((IPlayer) NpcAPI.Instance().getIEntity(player), ((ContainerCustomGui)player.openContainer).customGui, buffer.readInt()); + ((ContainerCustomGui) player.openContainer).customGui.fromNBT(Server.readNBT(buffer)); + EventHooks.onCustomGuiSlot((IPlayer) NpcAPI.Instance().getIEntity(player), ((ContainerCustomGui) player.openContainer).customGui, buffer.readInt()); return; - } else if(type == EnumPacketServer.CustomGuiUnfocused && player.openContainer instanceof ContainerCustomGui) { - ((ContainerCustomGui)player.openContainer).customGui.fromNBT(Server.readNBT(buffer)); + } else if (type == EnumPacketServer.CustomGuiUnfocused && player.openContainer instanceof ContainerCustomGui) { + ((ContainerCustomGui) player.openContainer).customGui.fromNBT(Server.readNBT(buffer)); EventHooks.onCustomGuiUnfocused((IPlayer) NpcAPI.Instance().getIEntity(player), ((ContainerCustomGui) player.openContainer).customGui, buffer.readInt()); return; } else if (type == EnumPacketServer.CustomGuiScrollClick && player.openContainer instanceof ContainerCustomGui) { @@ -94,6 +94,9 @@ public class PacketHandlerServer{ } else if (type == EnumPacketServer.CustomGuiClose) { EventHooks.onCustomGuiClose((IPlayer) NpcAPI.Instance().getIEntity(player), (new ScriptGui()).fromNBT(Server.readNBT(buffer))); return; + } else if (type == EnumPacketServer.UpdateTrackedQuest) { + updateTrackedQuest(buffer, player); + return; } if(type.needsNpc && npc == null){ @@ -126,7 +129,7 @@ public class PacketHandlerServer{ itemScriptPackets(type, buffer, player); else if (type == EnumPacketServer.ScriptGlobalGuiDataGet || type == EnumPacketServer.ScriptGlobalGuiDataSave) getScriptsEnabled(type, buffer, player); - else if (type == EnumPacketServer.SERVER_UPDATE_SKIN_OVERLAYS) + else if (type == EnumPacketServer.ServerUpdateSkinOverlays) updateSkinOverlays(player); else if (item.getItem() == CustomItems.scripter) scriptPackets(type, buffer, player, npc); @@ -139,6 +142,33 @@ public class PacketHandlerServer{ } } + private void updateTrackedQuest(ByteBuf buffer, EntityPlayerMP player) { + String trackedQuestString = Server.readString(buffer); + if (trackedQuestString != null && trackedQuestString.contains(":")) { + String[] splitString = trackedQuestString.split(":"); + String categoryName = splitString[0]; + String questName = splitString[1]; + + for (QuestCategory category : QuestController.instance.categories.values()) { + if (category.title.equals(categoryName)) { + for (Quest quest : category.quests.values()) { + if (quest.title.equals(questName)) { + PlayerDataController.instance.getPlayerData(player).questData.trackedQuest = quest; + NBTTagCompound compound = new NBTTagCompound(); + compound.setTag("Quest",quest.writeToNBT(new NBTTagCompound())); + compound.setString("CategoryName", quest.getCategory().getName()); + Server.sendData(player, EnumPacketClient.OVERLAY_QUEST_TRACKING, compound); + return; + } + } + } + } + } + + PlayerDataController.instance.getPlayerData(player).questData.trackedQuest = null; + Server.sendData(player, EnumPacketClient.OVERLAY_QUEST_TRACKING); + } + private void isGuiOpenPacket(ByteBuf buffer, EntityPlayerMP player) throws IOException { NoppesUtilServer.isGUIOpen(buffer, player); } diff --git a/src/main/java/noppes/npcs/QuestLogData.java b/src/main/java/noppes/npcs/QuestLogData.java index 423da0757..89c45fa1c 100644 --- a/src/main/java/noppes/npcs/QuestLogData.java +++ b/src/main/java/noppes/npcs/QuestLogData.java @@ -12,6 +12,7 @@ import noppes.npcs.controllers.PlayerQuestController; import noppes.npcs.controllers.data.Quest; public class QuestLogData { + public String trackedQuestKey = ""; public HashMap> categories = new HashMap>(); public String selectedQuest = ""; public String selectedCategory = ""; @@ -25,6 +26,7 @@ public class QuestLogData { compound.setTag("Logs", NBTTags.nbtStringStringMap(questText)); compound.setTag("Status", NBTTags.nbtVectorMap(questStatus)); compound.setTag("QuestFinisher", NBTTags.nbtStringStringMap(finish)); + compound.setString("TrackedQuestID", trackedQuestKey); return compound; } @@ -33,11 +35,12 @@ public class QuestLogData { questText = NBTTags.getStringStringMap(compound.getTagList("Logs", 10)); questStatus = NBTTags.getVectorMap(compound.getTagList("Status", 10)); finish = NBTTags.getStringStringMap(compound.getTagList("QuestFinisher", 10)); - + trackedQuestKey = compound.getString("TrackedQuestID"); } public void setData(EntityPlayer player){ PlayerData playerData = PlayerDataController.instance.getPlayerData(player); - for(Quest quest : PlayerQuestController.getActiveQuests(player)) + + for(Quest quest : PlayerQuestController.getActiveQuests(player)) { String category = quest.category.title; if(!categories.containsKey(category)) @@ -50,6 +53,12 @@ public class QuestLogData { questStatus.put(category + ":" + quest.title, quest.questInterface.getQuestLogStatus(player)); if(quest.completion == EnumQuestCompletion.Npc && quest.questInterface.isCompleted(playerData)) finish.put(category + ":" + quest.title, quest.completerNpc); + + if (playerData.questData.trackedQuest != null) { + if (quest.id == playerData.questData.trackedQuest.getId()) { + trackedQuestKey = category + ":" + quest.title; + } + } } } diff --git a/src/main/java/noppes/npcs/ScriptPlayerEventHandler.java b/src/main/java/noppes/npcs/ScriptPlayerEventHandler.java index aa6b73239..3bfed30b9 100644 --- a/src/main/java/noppes/npcs/ScriptPlayerEventHandler.java +++ b/src/main/java/noppes/npcs/ScriptPlayerEventHandler.java @@ -12,7 +12,9 @@ import cpw.mods.fml.common.gameevent.TickEvent; import cpw.mods.fml.relauncher.Side; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.inventory.ContainerPlayer; +import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.ChatComponentTranslation; import net.minecraft.util.math.BlockPos; import net.minecraft.world.WorldServer; @@ -26,11 +28,13 @@ import net.minecraftforge.event.entity.living.LivingFallEvent; import net.minecraftforge.event.entity.living.LivingHurtEvent; import net.minecraftforge.event.entity.player.*; import net.minecraftforge.event.world.*; +import noppes.npcs.constants.EnumPacketClient; import noppes.npcs.constants.EnumQuestType; import noppes.npcs.controllers.*; import noppes.npcs.controllers.data.PlayerData; import noppes.npcs.controllers.data.PlayerDataScript; import noppes.npcs.controllers.data.PlayerQuestData; +import noppes.npcs.controllers.data.Quest; import noppes.npcs.entity.EntityNPCInterface; import noppes.npcs.scripted.NpcAPI; import noppes.npcs.scripted.interfaces.entity.IPlayer; @@ -428,6 +432,14 @@ public class ScriptPlayerEventHandler { PlayerDataScript handler = ScriptController.Instance.playerScripts; IPlayer scriptPlayer = (IPlayer) NpcAPI.Instance().getIEntity(event.player); EventHooks.onPlayerLogin(handler, scriptPlayer); + + Quest quest = (Quest) PlayerDataController.instance.getPlayerData(event.player).questData.trackedQuest; + if (quest != null) { + NBTTagCompound compound = new NBTTagCompound(); + compound.setTag("Quest",quest.writeToNBT(new NBTTagCompound())); + compound.setString("CategoryName", quest.getCategory().getName()); + Server.sendData((EntityPlayerMP) event.player, EnumPacketClient.OVERLAY_QUEST_TRACKING, compound); + } } } diff --git a/src/main/java/noppes/npcs/client/Client.java b/src/main/java/noppes/npcs/client/Client.java index 248885aa7..04d95c615 100644 --- a/src/main/java/noppes/npcs/client/Client.java +++ b/src/main/java/noppes/npcs/client/Client.java @@ -7,14 +7,17 @@ import java.io.IOException; import java.util.HashMap; import java.util.UUID; +import net.minecraft.client.Minecraft; import noppes.npcs.CustomNpcs; import noppes.npcs.Server; +import noppes.npcs.client.gui.OverlayQuestTracking; import noppes.npcs.client.gui.customoverlay.OverlayCustom; import noppes.npcs.constants.EnumPacketServer; import cpw.mods.fml.common.network.internal.FMLProxyPacket; import noppes.npcs.controllers.data.SkinOverlay; public class Client { + public static OverlayQuestTracking questTrackingOverlay = null; public static HashMap customOverlays = new HashMap<>(); public static HashMap> skinOverlays = new HashMap<>(); diff --git a/src/main/java/noppes/npcs/client/ClientEventHandler.java b/src/main/java/noppes/npcs/client/ClientEventHandler.java index a1e28d3bc..a25950633 100644 --- a/src/main/java/noppes/npcs/client/ClientEventHandler.java +++ b/src/main/java/noppes/npcs/client/ClientEventHandler.java @@ -6,6 +6,7 @@ import net.minecraft.client.Minecraft; import net.minecraftforge.client.event.RenderGameOverlayEvent; import net.minecraftforge.client.event.RenderHandEvent; import net.minecraftforge.client.event.RenderPlayerEvent; +import noppes.npcs.client.gui.OverlayQuestTracking; import noppes.npcs.client.gui.customoverlay.OverlayCustom; import noppes.npcs.client.renderer.RenderCNPCPlayer; import org.lwjgl.opengl.GL11; @@ -19,6 +20,10 @@ public class ClientEventHandler { for (OverlayCustom overlayCustom : Client.customOverlays.values()) { overlayCustom.renderGameOverlay(event.partialTicks); } + + if (Client.questTrackingOverlay != null) { + Client.questTrackingOverlay.renderGameOverlay(event.partialTicks); + } } } diff --git a/src/main/java/noppes/npcs/client/PacketHandlerClient.java b/src/main/java/noppes/npcs/client/PacketHandlerClient.java index 023dba9b7..be0456f18 100644 --- a/src/main/java/noppes/npcs/client/PacketHandlerClient.java +++ b/src/main/java/noppes/npcs/client/PacketHandlerClient.java @@ -26,6 +26,7 @@ import noppes.npcs.ServerEventsHandler; import noppes.npcs.client.ClientProxy.FontContainer; import noppes.npcs.client.controllers.MusicController; import noppes.npcs.client.gui.GuiNpcMobSpawnerAdd; +import noppes.npcs.client.gui.OverlayQuestTracking; import noppes.npcs.client.gui.customoverlay.OverlayCustom; import noppes.npcs.client.gui.player.GuiBook; import noppes.npcs.client.gui.util.GuiContainerNPCInterface; @@ -260,16 +261,25 @@ public class PacketHandlerClient extends PacketHandlerServer{ NoppesUtil.isGUIOpen(isGUIOpen); } - else if(type == EnumPacketClient.OVERLAY_DATA){ + else if(type == EnumPacketClient.SCRIPT_OVERLAY_DATA){ OverlayCustom overlayCustom = new OverlayCustom(Minecraft.getMinecraft()); overlayCustom.setOverlayData(Server.readNBT(buffer)); Client.customOverlays.put(overlayCustom.overlay.getID(),overlayCustom); } - else if(type == EnumPacketClient.OVERLAY_CLOSE){ + else if(type == EnumPacketClient.SCRIPT_OVERLAY_CLOSE){ int id = buffer.readInt(); Client.customOverlays.remove(id); } + else if(type == EnumPacketClient.OVERLAY_QUEST_TRACKING){ + try { + NBTTagCompound compound = Server.readNBT(buffer); + Client.questTrackingOverlay = new OverlayQuestTracking(Minecraft.getMinecraft()); + Client.questTrackingOverlay.setOverlayData(compound); + } catch (IOException e) { + Client.questTrackingOverlay = null; + } + } else if(type == EnumPacketClient.SWING_PLAYER_ARM){ Minecraft.getMinecraft().thePlayer.swingItem(); } diff --git a/src/main/java/noppes/npcs/client/gui/OverlayQuestTracking.java b/src/main/java/noppes/npcs/client/gui/OverlayQuestTracking.java new file mode 100644 index 000000000..ef3f2cd25 --- /dev/null +++ b/src/main/java/noppes/npcs/client/gui/OverlayQuestTracking.java @@ -0,0 +1,590 @@ +package noppes.npcs.client.gui; + +import com.ibm.icu.text.ArabicShaping; +import com.ibm.icu.text.ArabicShapingException; +import com.ibm.icu.text.Bidi; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.FontRenderer; +import net.minecraft.client.gui.Gui; +import net.minecraft.client.gui.ScaledResolution; +import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.ResourceLocation; +import noppes.npcs.CustomNpcs; +import noppes.npcs.controllers.data.Quest; +import org.lwjgl.opengl.GL11; + +import javax.imageio.ImageIO; +import java.awt.image.BufferedImage; +import java.io.IOException; +import java.io.InputStream; +import java.util.ArrayList; + +public class OverlayQuestTracking extends Gui { + public Minecraft mc; + + private ScaledResolution res = null; + public static int scaledWidth = 0; + public static int scaledHeight = 0; + + int color = 0xFFFFFF; + float alpha = 1.0F; + + private boolean randomStyle = false; + private boolean boldStyle = false; + private boolean italicStyle = false; + private boolean underlineStyle = false; + private boolean strikethroughStyle = false; + private boolean bidiFlag = false; + private boolean unicodeFlag = false; + + private static final ResourceLocation[] unicodePageLocations = new ResourceLocation[256]; + private final FontRenderer fontRenderer = Minecraft.getMinecraft().fontRenderer; + protected final ResourceLocation locationFontTexture = new ResourceLocation("textures/font/ascii.png");; + protected int[] charWidth = new int[256]; + protected byte[] glyphWidth = new byte[65536]; + private final int[] colorCode = new int[32]; + + private float red; + private float green; + private float blue; + + private float posX; + private float posY; + + private float renderOffsetY; + + public static Quest trackedQuest = new Quest(); + public static String categoryName = ""; + + public OverlayQuestTracking(Minecraft mc) { + this.mc = mc; + readFontTexture(); + readGlyphSizes(); + for (int i = 0; i < 32; ++i) + { + int j = (i >> 3 & 1) * 85; + int k = (i >> 2 & 1) * 170 + j; + int l = (i >> 1 & 1) * 170 + j; + int i1 = (i >> 0 & 1) * 170 + j; + + if (i == 6) + { + k += 85; + } + + if (Minecraft.getMinecraft().gameSettings.anaglyph) + { + int j1 = (k * 30 + l * 59 + i1 * 11) / 100; + int k1 = (k * 30 + l * 70) / 100; + int l1 = (k * 30 + i1 * 70) / 100; + k = j1; + l = k1; + i1 = l1; + } + + if (i >= 16) + { + k /= 4; + l /= 4; + i1 /= 4; + } + + this.colorCode[i] = (k & 255) << 16 | (l & 255) << 8 | i1 & 255; + } + } + + public void initOverlay() { + res = new ScaledResolution(mc, mc.displayWidth, mc.displayHeight); + scaledWidth = res.getScaledWidth(); + scaledHeight = res.getScaledHeight(); + } + + public void setOverlayData(NBTTagCompound compound) { + trackedQuest.readNBT(compound.getCompoundTag("Quest")); + categoryName = compound.getString("CategoryName"); + this.initOverlay(); + } + + public void renderGameOverlay(float partialTicks){ + res = new ScaledResolution(mc, mc.displayWidth, mc.displayHeight); + scaledWidth = res.getScaledWidth(); + scaledHeight = res.getScaledHeight(); + + GL11.glEnable(GL11.GL_BLEND); + OpenGlHelper.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA, 1, 0); + GL11.glDisable(GL11.GL_ALPHA_TEST); + + GL11.glPushMatrix(); + GL11.glTranslatef(CustomNpcs.TrackingInfoAlignment%3*((float)(scaledWidth)/2), (float) (Math.floor((float)(CustomNpcs.TrackingInfoAlignment/3))*((float)(scaledHeight)/2)),0.0F); + GL11.glTranslatef(CustomNpcs.TrackingInfoX - 10, CustomNpcs.TrackingInfoY, 0.0F); + + red = (color >> 16 & 255) / 255f; + green = (color >> 8 & 255) / 255f; + blue = (color & 255) / 255f; + + float centerX = -60; + float questTitleTop; + this.renderOffsetY = -40; + GL11.glPushMatrix(); + GL11.glTranslatef(centerX, 0.0F, 0.0F); + this.renderStringLines(trackedQuest.getName(),1.2F, false, true); + GL11.glPopMatrix(); + questTitleTop = this.renderOffsetY; + this.renderOffsetY -= 5; + GL11.glPushMatrix(); + GL11.glTranslatef(centerX, 0.0F, 0.0F); + this.renderStringLines(categoryName,0.85F, false, false); + GL11.glPopMatrix(); + + //TODO: Add objectives list, with green strikethrough text for completed objectives. Then, add who the player should turn the quest in to. + + this.renderOffsetY = -25; + GL11.glPushMatrix(); + this.drawHorizontalLine((int)(-60 + centerX), (int)(60 + centerX), (int) (this.renderOffsetY+2), 0xFF777777); + this.drawHorizontalLine((int)(-60 + centerX), (int)(60 + centerX), (int) (this.renderOffsetY+1), 0xFFA8A8A8); + this.drawHorizontalLine((int)(-60 + centerX), (int)(60 + centerX), (int) (this.renderOffsetY), 0xFFFFFFFF); + GL11.glPopMatrix(); + this.renderOffsetY = questTitleTop + 5; + GL11.glPushMatrix(); + this.drawHorizontalLine((int)(-60 + centerX), (int)(60 + centerX), (int) (this.renderOffsetY), 0xFFFFFFFF); + this.drawHorizontalLine((int)(-60 + centerX), (int)(60 + centerX), (int) (this.renderOffsetY-1), 0xFFA8A8A8); + this.drawHorizontalLine((int)(-60 + centerX), (int)(60 + centerX), (int) (this.renderOffsetY-2), 0xFF777777); + GL11.glPopMatrix(); + GL11.glPopMatrix(); + + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glEnable(GL11.GL_ALPHA_TEST); + } + + public void renderStringLines(String string, float scale, boolean upwards, boolean bold) { + String[] split = string.split(" "); + + ArrayList lines = new ArrayList<>(); + lines.add(split[0]); + + for (int i = 1; i < split.length; i++) { + String s = split[i]; + if (this.fontRenderer.getStringWidth(lines.get(lines.size() - 1) + " " + s) > 100) { + lines.add(s); + } else { + lines.set(lines.size() - 1, lines.get(lines.size() - 1) + " " + s); + } + } + + for (int i = 0; i < lines.size(); i++) { + String s = lines.get(i); + if (!upwards) { + s = lines.get(lines.size()-1 - i); + } + + GL11.glPushMatrix(); + GL11.glTranslatef(scale*(-this.fontRenderer.getStringWidth(s)/2.0F), this.renderOffsetY, 0.0F); + GL11.glScalef(scale, scale, scale); + this.drawString(s, 0, 0, this.color, true); + if (bold) { + GL11.glTranslatef(0.2F, 0.2F, 0.0F); + this.drawString(s, 0, 0, this.color, false); + } + this.renderOffsetY += upwards ? 10 : -10; + GL11.glPopMatrix(); + } + } + + public int drawString(String p_85187_1_, int p_85187_2_, int p_85187_3_, int p_85187_4_, boolean p_85187_5_) + { + this.resetStyles(); + int l; + + if (p_85187_5_) + { + l = this.renderString(p_85187_1_, p_85187_2_ + 1, p_85187_3_ + 1, p_85187_4_, true); + l = Math.max(l, this.renderString(p_85187_1_, p_85187_2_, p_85187_3_, p_85187_4_, false)); + } + else + { + l = this.renderString(p_85187_1_, p_85187_2_, p_85187_3_, p_85187_4_, false); + } + + return l; + } + + private void resetStyles() + { + this.randomStyle = false; + this.boldStyle = false; + this.italicStyle = false; + this.underlineStyle = false; + this.strikethroughStyle = false; + } + + private int renderString(String p_78258_1_, int p_78258_2_, int p_78258_3_, int p_78258_4_, boolean p_78258_5_) + { + if (p_78258_1_ == null) + { + return 0; + } + else + { + if (this.bidiFlag) + { + p_78258_1_ = this.bidiReorder(p_78258_1_); + } + + setColor(this.red, this.green, this.blue, this.alpha); + if (p_78258_5_) { + setColor(0,0,0,1.0F); + } + this.posX = (float)p_78258_2_; + this.posY = (float)p_78258_3_; + this.renderStringAtPos(p_78258_1_, p_78258_5_); + return (int)this.posX; + } + } + + private void renderStringAtPos(String p_78255_1_, boolean p_78255_2_) + { + for (int i = 0; i < p_78255_1_.length(); ++i) + { + char c0 = p_78255_1_.charAt(i); + int j; + int k; + + if (c0 == 38 && i + 1 < p_78255_1_.length()) + { + j = "0123456789abcdefklmnor".indexOf(p_78255_1_.toLowerCase().charAt(i + 1)); + + if(j < 16){ + this.randomStyle = false; + this.boldStyle = false; + this.strikethroughStyle = false; + this.underlineStyle = false; + this.italicStyle = false; + + if (j < 0 || j > 15) + { + j = 15; + } + + if (p_78255_2_) + { + j += 16; + } + + k = this.colorCode[j]; + setColor((float)(k >> 16) / 255.0F, (float)(k >> 8 & 255) / 255.0F, (float)(k & 255) / 255.0F, this.alpha); + } + else if (j == 16) + { + this.randomStyle = true; + } + else if (j == 17) + { + this.boldStyle = true; + } + else if (j == 18) + { + this.strikethroughStyle = true; + } + else if (j == 19) + { + this.underlineStyle = true; + } + else if (j == 20) + { + this.italicStyle = true; + } + else if (j == 21) + { + this.randomStyle = false; + this.boldStyle = false; + this.strikethroughStyle = false; + this.underlineStyle = false; + this.italicStyle = false; + } + + ++i; + } + else + { + j = "\u00c0\u00c1\u00c2\u00c8\u00ca\u00cb\u00cd\u00d3\u00d4\u00d5\u00da\u00df\u00e3\u00f5\u011f\u0130\u0131\u0152\u0153\u015e\u015f\u0174\u0175\u017e\u0207\u0000\u0000\u0000\u0000\u0000\u0000\u0000 !\"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\u0000\u00c7\u00fc\u00e9\u00e2\u00e4\u00e0\u00e5\u00e7\u00ea\u00eb\u00e8\u00ef\u00ee\u00ec\u00c4\u00c5\u00c9\u00e6\u00c6\u00f4\u00f6\u00f2\u00fb\u00f9\u00ff\u00d6\u00dc\u00f8\u00a3\u00d8\u00d7\u0192\u00e1\u00ed\u00f3\u00fa\u00f1\u00d1\u00aa\u00ba\u00bf\u00ae\u00ac\u00bd\u00bc\u00a1\u00ab\u00bb\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255d\u255c\u255b\u2510\u2514\u2534\u252c\u251c\u2500\u253c\u255e\u255f\u255a\u2554\u2569\u2566\u2560\u2550\u256c\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256b\u256a\u2518\u250c\u2588\u2584\u258c\u2590\u2580\u03b1\u03b2\u0393\u03c0\u03a3\u03c3\u03bc\u03c4\u03a6\u0398\u03a9\u03b4\u221e\u2205\u2208\u2229\u2261\u00b1\u2265\u2264\u2320\u2321\u00f7\u2248\u00b0\u2219\u00b7\u221a\u207f\u00b2\u25a0\u0000".indexOf(c0); + + if (this.randomStyle && j != -1) + { + do + { + k = Minecraft.getMinecraft().fontRenderer.fontRandom.nextInt(this.charWidth.length); + } + while (this.charWidth[j] != this.charWidth[k]); + + j = k; + } + + float f1 = this.unicodeFlag ? 0.5F : 1.0F; + boolean flag1 = (c0 == 0 || j == -1 || this.unicodeFlag) && p_78255_2_; + + if (flag1) + { + this.posX -= f1; + this.posY -= f1; + } + + float f = this.renderCharAtPos(j, c0, this.italicStyle); + + if (flag1) + { + this.posX += f1; + this.posY += f1; + } + + if (this.boldStyle) + { + this.posX += f1; + + if (flag1) + { + this.posX -= f1; + this.posY -= f1; + } + + this.renderCharAtPos(j, c0, this.italicStyle); + this.posX -= f1; + + if (flag1) + { + this.posX += f1; + this.posY += f1; + } + + ++f; + } + + doDraw(f); + } + } + } + + protected void doDraw(float f) + { + { + { + Tessellator tessellator; + + if (this.strikethroughStyle) + { + tessellator = Tessellator.instance; + GL11.glDisable(GL11.GL_TEXTURE_2D); + tessellator.startDrawingQuads(); + tessellator.addVertex((double)this.posX, (double)(this.posY + (float)(Minecraft.getMinecraft().fontRenderer.FONT_HEIGHT / 2)), 0.0D); + tessellator.addVertex((double)(this.posX + f), (double)(this.posY + (float)(Minecraft.getMinecraft().fontRenderer.FONT_HEIGHT / 2)), 0.0D); + tessellator.addVertex((double)(this.posX + f), (double)(this.posY + (float)(Minecraft.getMinecraft().fontRenderer.FONT_HEIGHT / 2) - 1.0F), 0.0D); + tessellator.addVertex((double)this.posX, (double)(this.posY + (float)(Minecraft.getMinecraft().fontRenderer.FONT_HEIGHT / 2) - 1.0F), 0.0D); + tessellator.draw(); + GL11.glEnable(GL11.GL_TEXTURE_2D); + } + + if (this.underlineStyle) + { + tessellator = Tessellator.instance; + GL11.glDisable(GL11.GL_TEXTURE_2D); + tessellator.startDrawingQuads(); + int l = this.underlineStyle ? -1 : 0; + tessellator.addVertex((double)(this.posX + (float)l), (double)(this.posY + (float)Minecraft.getMinecraft().fontRenderer.FONT_HEIGHT), 0.0D); + tessellator.addVertex((double)(this.posX + f), (double)(this.posY + (float)Minecraft.getMinecraft().fontRenderer.FONT_HEIGHT), 0.0D); + tessellator.addVertex((double)(this.posX + f), (double)(this.posY + (float)Minecraft.getMinecraft().fontRenderer.FONT_HEIGHT - 1.0F), 0.0D); + tessellator.addVertex((double)(this.posX + (float)l), (double)(this.posY + (float)Minecraft.getMinecraft().fontRenderer.FONT_HEIGHT - 1.0F), 0.0D); + tessellator.draw(); + GL11.glEnable(GL11.GL_TEXTURE_2D); + } + + this.posX += (float)((int)f); + } + } + } + + private float renderCharAtPos(int p_78278_1_, char p_78278_2_, boolean p_78278_3_) + { + return p_78278_2_ == 32 ? 4.0F : ("\u00c0\u00c1\u00c2\u00c8\u00ca\u00cb\u00cd\u00d3\u00d4\u00d5\u00da\u00df\u00e3\u00f5\u011f\u0130\u0131\u0152\u0153\u015e\u015f\u0174\u0175\u017e\u0207\u0000\u0000\u0000\u0000\u0000\u0000\u0000 !\"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\u0000\u00c7\u00fc\u00e9\u00e2\u00e4\u00e0\u00e5\u00e7\u00ea\u00eb\u00e8\u00ef\u00ee\u00ec\u00c4\u00c5\u00c9\u00e6\u00c6\u00f4\u00f6\u00f2\u00fb\u00f9\u00ff\u00d6\u00dc\u00f8\u00a3\u00d8\u00d7\u0192\u00e1\u00ed\u00f3\u00fa\u00f1\u00d1\u00aa\u00ba\u00bf\u00ae\u00ac\u00bd\u00bc\u00a1\u00ab\u00bb\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255d\u255c\u255b\u2510\u2514\u2534\u252c\u251c\u2500\u253c\u255e\u255f\u255a\u2554\u2569\u2566\u2560\u2550\u256c\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256b\u256a\u2518\u250c\u2588\u2584\u258c\u2590\u2580\u03b1\u03b2\u0393\u03c0\u03a3\u03c3\u03bc\u03c4\u03a6\u0398\u03a9\u03b4\u221e\u2205\u2208\u2229\u2261\u00b1\u2265\u2264\u2320\u2321\u00f7\u2248\u00b0\u2219\u00b7\u221a\u207f\u00b2\u25a0\u0000".indexOf(p_78278_2_) != -1 && !this.unicodeFlag ? this.renderDefaultChar(p_78278_1_, p_78278_3_) : this.renderUnicodeChar(p_78278_2_, p_78278_3_)); + } + + protected float renderDefaultChar(int p_78266_1_, boolean p_78266_2_) + { + float f = (float)(p_78266_1_ % 16 * 8); + float f1 = (float)(p_78266_1_ / 16 * 8); + float f2 = p_78266_2_ ? 1.0F : 0.0F; + bindTexture(this.locationFontTexture); + float f3 = (float)this.charWidth[p_78266_1_] - 0.01F; + GL11.glBegin(GL11.GL_TRIANGLE_STRIP); + GL11.glTexCoord2f(f / 128.0F, f1 / 128.0F); + GL11.glVertex3f(this.posX + f2, this.posY, 0.0F); + GL11.glTexCoord2f(f / 128.0F, (f1 + 7.99F) / 128.0F); + GL11.glVertex3f(this.posX - f2, this.posY + 7.99F, 0.0F); + GL11.glTexCoord2f((f + f3 - 1.0F) / 128.0F, f1 / 128.0F); + GL11.glVertex3f(this.posX + f3 - 1.0F + f2, this.posY, 0.0F); + GL11.glTexCoord2f((f + f3 - 1.0F) / 128.0F, (f1 + 7.99F) / 128.0F); + GL11.glVertex3f(this.posX + f3 - 1.0F - f2, this.posY + 7.99F, 0.0F); + GL11.glEnd(); + return (float)this.charWidth[p_78266_1_]; + } + + private ResourceLocation getUnicodePageLocation(int p_111271_1_) + { + if (unicodePageLocations[p_111271_1_] == null) + { + unicodePageLocations[p_111271_1_] = new ResourceLocation(String.format("textures/font/unicode_page_%02x.png", new Object[] {Integer.valueOf(p_111271_1_)})); + } + + return unicodePageLocations[p_111271_1_]; + } + + private void loadGlyphTexture(int p_78257_1_) + { + bindTexture(this.getUnicodePageLocation(p_78257_1_)); + } + + /** + * Render a single Unicode character at current (posX,posY) location using one of the /font/glyph_XX.png files... + */ + protected float renderUnicodeChar(char p_78277_1_, boolean p_78277_2_) + { + if (this.glyphWidth[p_78277_1_] == 0) + { + return 0.0F; + } + else + { + int i = p_78277_1_ / 256; + this.loadGlyphTexture(i); + int j = this.glyphWidth[p_78277_1_] >>> 4; + int k = this.glyphWidth[p_78277_1_] & 15; + float f = (float)j; + float f1 = (float)(k + 1); + float f2 = (float)(p_78277_1_ % 16 * 16) + f; + float f3 = (float)((p_78277_1_ & 255) / 16 * 16); + float f4 = f1 - f - 0.02F; + float f5 = p_78277_2_ ? 1.0F : 0.0F; + GL11.glBegin(GL11.GL_TRIANGLE_STRIP); + GL11.glTexCoord2f(f2 / 256.0F, f3 / 256.0F); + GL11.glVertex3f(this.posX + f5, this.posY, 0.0F); + GL11.glTexCoord2f(f2 / 256.0F, (f3 + 15.98F) / 256.0F); + GL11.glVertex3f(this.posX - f5, this.posY + 7.99F, 0.0F); + GL11.glTexCoord2f((f2 + f4) / 256.0F, f3 / 256.0F); + GL11.glVertex3f(this.posX + f4 / 2.0F + f5, this.posY, 0.0F); + GL11.glTexCoord2f((f2 + f4) / 256.0F, (f3 + 15.98F) / 256.0F); + GL11.glVertex3f(this.posX + f4 / 2.0F - f5, this.posY + 7.99F, 0.0F); + GL11.glEnd(); + return (f1 - f) / 2.0F + 1.0F; + } + } + + protected void setColor(float r, float g, float b, float a) + { + GL11.glColor4f(r, g, b, a); + } + + protected void bindTexture(ResourceLocation location) + { + Minecraft.getMinecraft().renderEngine.bindTexture(location); + } + + private void readFontTexture() + { + BufferedImage bufferedimage; + + try + { + bufferedimage = ImageIO.read(getResourceInputStream(this.locationFontTexture)); + } + catch (IOException ioexception) + { + throw new RuntimeException(ioexception); + } + + int i = bufferedimage.getWidth(); + int j = bufferedimage.getHeight(); + int[] aint = new int[i * j]; + bufferedimage.getRGB(0, 0, i, j, aint, 0, i); + int k = j / 16; + int l = i / 16; + byte b0 = 1; + float f = 8.0F / (float)l; + int i1 = 0; + + while (i1 < 256) + { + int j1 = i1 % 16; + int k1 = i1 / 16; + + if (i1 == 32) + { + this.charWidth[i1] = 3 + b0; + } + + int l1 = l - 1; + + while (true) + { + if (l1 >= 0) + { + int i2 = j1 * l + l1; + boolean flag = true; + + for (int j2 = 0; j2 < k && flag; ++j2) + { + int k2 = (k1 * l + j2) * i; + + if ((aint[i2 + k2] >> 24 & 255) != 0) + { + flag = false; + } + } + + if (flag) + { + --l1; + continue; + } + } + + ++l1; + this.charWidth[i1] = (int)(0.5D + (double)((float)l1 * f)) + b0; + ++i1; + break; + } + } + } + + private void readGlyphSizes() + { + try + { + InputStream inputstream = getResourceInputStream(new ResourceLocation("font/glyph_sizes.bin")); + inputstream.read(this.glyphWidth); + } + catch (IOException ioexception) + { + throw new RuntimeException(ioexception); + } + } + + protected InputStream getResourceInputStream(ResourceLocation location) throws IOException + { + return Minecraft.getMinecraft().getResourceManager().getResource(location).getInputStream(); + } + + private String bidiReorder(String p_147647_1_) + { + try + { + Bidi bidi = new Bidi((new ArabicShaping(8)).shape(p_147647_1_), 127); + bidi.setReorderingMode(0); + return bidi.writeReordered(2); + } + catch (ArabicShapingException arabicshapingexception) + { + return p_147647_1_; + } + } +} diff --git a/src/main/java/noppes/npcs/client/gui/player/GuiQuestLog.java b/src/main/java/noppes/npcs/client/gui/player/GuiQuestLog.java index 9f7ea6341..869eed25b 100644 --- a/src/main/java/noppes/npcs/client/gui/player/GuiQuestLog.java +++ b/src/main/java/noppes/npcs/client/gui/player/GuiQuestLog.java @@ -13,16 +13,12 @@ import net.minecraft.util.ResourceLocation; import net.minecraft.util.StatCollector; import noppes.npcs.NoppesUtilPlayer; import noppes.npcs.QuestLogData; +import noppes.npcs.client.Client; import noppes.npcs.client.CustomNpcResourceListener; import noppes.npcs.client.NoppesUtil; import noppes.npcs.client.TextBlockClient; -import noppes.npcs.client.gui.util.GuiButtonNextPage; -import noppes.npcs.client.gui.util.GuiCustomScroll; -import noppes.npcs.client.gui.util.GuiMenuSideButton; -import noppes.npcs.client.gui.util.GuiNPCInterface; -import noppes.npcs.client.gui.util.ICustomScrollListener; -import noppes.npcs.client.gui.util.IGuiData; -import noppes.npcs.client.gui.util.ITopButtonListener; +import noppes.npcs.client.gui.util.*; +import noppes.npcs.constants.EnumPacketServer; import noppes.npcs.constants.EnumPlayerPacket; import org.lwjgl.opengl.GL11; @@ -33,16 +29,16 @@ import tconstruct.client.tabs.TabRegistry; public class GuiQuestLog extends GuiNPCInterface implements ITopButtonListener,ICustomScrollListener, IGuiData{ private final ResourceLocation resource = new ResourceLocation("customnpcs","textures/gui/standardbg.png"); - + private EntityPlayer player; private GuiCustomScroll scroll; private HashMap sideButtons = new HashMap(); private QuestLogData data = new QuestLogData(); private boolean noQuests = false; private boolean questDetails = true; - + private Minecraft mc = Minecraft.getMinecraft(); - + public GuiQuestLog(EntityPlayer player) { super(); this.player = player; @@ -58,7 +54,7 @@ public class GuiQuestLog extends GuiNPCInterface implements ITopButtonListener,I TabRegistry.addTabsToList(buttonList); TabRegistry.updateTabValues(guiLeft, guiTop, InventoryTabQuests.class); - + noQuests = false; if(data.categories.isEmpty()){ @@ -76,10 +72,10 @@ public class GuiQuestLog extends GuiNPCInterface implements ITopButtonListener,I i++; } sideButtons.get(categories.indexOf(data.selectedCategory)).active = true; - + if(scroll == null) scroll = new GuiCustomScroll(this,0); - + scroll.setList(data.categories.get(data.selectedCategory)); scroll.setSize(134, 174); scroll.guiLeft = guiLeft + 5; @@ -89,21 +85,32 @@ public class GuiQuestLog extends GuiNPCInterface implements ITopButtonListener,I addButton(new GuiButtonNextPage(1, guiLeft + 286, guiTop + 176, true)); addButton(new GuiButtonNextPage(2, guiLeft + 144, guiTop + 176, false)); + GuiNpcButton trackingButton = new GuiNpcButton(3, guiLeft + 260, guiTop + 151, 50, 20, new String[]{"Track", "Tracking"}, data.trackedQuestKey.equals(data.selectedCategory + ":" + data.selectedQuest) ? 1 : 0); + if (trackingButton.displayString.equals("Tracking")) { + trackingButton.packedFGColour = 0x32CD32; + } + addButton(trackingButton); + getButton(1).visible = questDetails && data.hasSelectedQuest(); getButton(2).visible = !questDetails && data.hasSelectedQuest(); + getButton(3).visible = !data.selectedQuest.isEmpty() && getButton(1).visible; } @Override protected void actionPerformed(GuiButton guibutton){ - if(!(guibutton instanceof GuiButtonNextPage)) - return; if(guibutton.id == 1){ questDetails = false; - initGui(); } if(guibutton.id == 2){ questDetails = true; - initGui(); } + if(guibutton.id == 3){ + if (!data.trackedQuestKey.equals(data.selectedCategory + ":" + data.selectedQuest)) { + data.trackedQuestKey = data.selectedCategory + ":" + data.selectedQuest; + } else { + data.trackedQuestKey = ""; + } + } + initGui(); } @Override public void drawScreen(int i, int j, float f){ @@ -115,7 +122,7 @@ public class GuiQuestLog extends GuiNPCInterface implements ITopButtonListener,I drawTexturedModalRect(guiLeft, guiTop, 0, 0, 252, 195); drawTexturedModalRect(guiLeft + 252, guiTop, 188, 0, 67, 195); super.drawScreen(i, j, f); - + if(noQuests){ mc.fontRenderer.drawString(StatCollector.translateToLocal("quest.noquests"),guiLeft + 84,guiTop + 80, CustomNpcResourceListener.DefaultTextColor); return; @@ -127,18 +134,17 @@ public class GuiQuestLog extends GuiNPCInterface implements ITopButtonListener,I if(!data.hasSelectedQuest()) return; - - if(questDetails){ + + if (questDetails) { drawProgress(); String title = StatCollector.translateToLocal("gui.text"); mc.fontRenderer.drawString(title, guiLeft + 284 - mc.fontRenderer.getStringWidth(title), guiTop + 179, CustomNpcResourceListener.DefaultTextColor); - } - else{ + } else { drawQuestText(); String title = StatCollector.translateToLocal("quest.objectives"); mc.fontRenderer.drawString(title, guiLeft + 168, guiTop + 179, CustomNpcResourceListener.DefaultTextColor); } - + GL11.glPushMatrix(); GL11.glTranslatef(guiLeft + 148, guiTop, 0); GL11.glScalef(1.24f, 1.24f, 1.24f); @@ -146,21 +152,21 @@ public class GuiQuestLog extends GuiNPCInterface implements ITopButtonListener,I GL11.glPopMatrix(); drawHorizontalLine(guiLeft + 142, guiLeft + 312, guiTop + 17, + 0xFF000000 + CustomNpcResourceListener.DefaultTextColor); } - + private void drawQuestText(){ TextBlockClient block = new TextBlockClient(data.getQuestText(), 174, true, player); - int yoffset = guiTop + 5; + int yoffset = guiTop + 5; for(int i = 0; i < block.lines.size(); i++){ String text = block.lines.get(i).getFormattedText(); fontRendererObj.drawString(text, guiLeft + 142, guiTop + 20 + (i * fontRendererObj.FONT_HEIGHT), CustomNpcResourceListener.DefaultTextColor); } } - + private void drawProgress() { String complete = data.getComplete(); if(complete != null && !complete.isEmpty()) mc.fontRenderer.drawString(StatCollector.translateToLocalFormatted("quest.completewith", complete), guiLeft + 144, guiTop + 105, CustomNpcResourceListener.DefaultTextColor); - + int yoffset = guiTop + 22; for(String process : data.getQuestStatus()){ int index = process.lastIndexOf(":"); @@ -179,7 +185,7 @@ public class GuiQuestLog extends GuiNPCInterface implements ITopButtonListener,I yoffset += 10; } } - + protected void drawGuiContainerBackgroundLayer(float f, int i, int j) { } @@ -235,10 +241,16 @@ public class GuiQuestLog extends GuiNPCInterface implements ITopButtonListener,I this.data = data; initGui(); } - @Override + + @Override + public void onGuiClosed() { + super.onGuiClosed(); + this.save(); + } + + @Override public void save() { - // TODO Auto-generated method stub - + Client.sendData(EnumPacketServer.UpdateTrackedQuest, this.data.trackedQuestKey); } } diff --git a/src/main/java/noppes/npcs/client/renderer/RenderCNPCPlayer.java b/src/main/java/noppes/npcs/client/renderer/RenderCNPCPlayer.java index ac1a762f6..c8c005025 100644 --- a/src/main/java/noppes/npcs/client/renderer/RenderCNPCPlayer.java +++ b/src/main/java/noppes/npcs/client/renderer/RenderCNPCPlayer.java @@ -135,7 +135,7 @@ public class RenderCNPCPlayer extends RenderPlayer { } } } else if(player.getEntityData().hasKey("SkinOverlayData")) { - Client.sendData(EnumPacketServer.SERVER_UPDATE_SKIN_OVERLAYS, new Object[0]); + Client.sendData(EnumPacketServer.ServerUpdateSkinOverlays, new Object[0]); } } } @@ -332,7 +332,7 @@ public class RenderCNPCPlayer extends RenderPlayer { postRenderOverlay(player); } } else if(player.getEntityData().hasKey("SkinOverlayData")) { - Client.sendData(EnumPacketServer.SERVER_UPDATE_SKIN_OVERLAYS, new Object[0]); + Client.sendData(EnumPacketServer.ServerUpdateSkinOverlays, new Object[0]); } } diff --git a/src/main/java/noppes/npcs/constants/EnumPacketClient.java b/src/main/java/noppes/npcs/constants/EnumPacketClient.java index 3ab209708..8f9f6ffa1 100644 --- a/src/main/java/noppes/npcs/constants/EnumPacketClient.java +++ b/src/main/java/noppes/npcs/constants/EnumPacketClient.java @@ -34,9 +34,10 @@ public enum EnumPacketClient { DIALOG_DUMMY, CONFIG, ISGUIOPEN, - OVERLAY_DATA, - OVERLAY_CLOSE, + SCRIPT_OVERLAY_DATA, + SCRIPT_OVERLAY_CLOSE, SWING_PLAYER_ARM, UPDATE_ITEM, - PLAYER_UPDATE_SKIN_OVERLAYS + PLAYER_UPDATE_SKIN_OVERLAYS, + OVERLAY_QUEST_TRACKING } diff --git a/src/main/java/noppes/npcs/constants/EnumPacketServer.java b/src/main/java/noppes/npcs/constants/EnumPacketServer.java index d33490c9d..2170f41f1 100644 --- a/src/main/java/noppes/npcs/constants/EnumPacketServer.java +++ b/src/main/java/noppes/npcs/constants/EnumPacketServer.java @@ -79,7 +79,7 @@ public enum EnumPacketServer { MovingPathSave(CustomNpcsPermissions.TOOL_PATHER,true), MovingPathGet(true), DialogNpcGet, - RecipesGet, RecipeGet, QuestOpenGui, PlayerDataGet, + RecipesGet, RecipeGet, QuestOpenGui, PlayerDataGet, UpdateTrackedQuest, RemoteNpcsGet(CustomNpcsPermissions.NPC_GUI), RemoteTpToNpc,QuestGet, QuestCategoryGet, @@ -89,7 +89,7 @@ public enum EnumPacketServer { CustomGuiButton,CustomGuiSlotChange,CustomGuiScrollClick,CustomGuiClose,CustomGuiUnfocused, - SERVER_UPDATE_SKIN_OVERLAYS; + ServerUpdateSkinOverlays; public CustomNpcsPermissions.Permission permission = null; public boolean needsNpc = false; diff --git a/src/main/java/noppes/npcs/controllers/CustomGuiController.java b/src/main/java/noppes/npcs/controllers/CustomGuiController.java index 05451aa73..6627fc649 100644 --- a/src/main/java/noppes/npcs/controllers/CustomGuiController.java +++ b/src/main/java/noppes/npcs/controllers/CustomGuiController.java @@ -40,11 +40,11 @@ public class CustomGuiController { } public static void openOverlay(IPlayer player, ScriptOverlay gui) { - Server.sendData((EntityPlayerMP)player.getMCEntity(), EnumPacketClient.OVERLAY_DATA, new Object[]{gui.toNBT()}); + Server.sendData((EntityPlayerMP)player.getMCEntity(), EnumPacketClient.SCRIPT_OVERLAY_DATA, new Object[]{gui.toNBT()}); } public static boolean updateOverlay(IPlayer player, ScriptOverlay gui) { - Server.sendData((EntityPlayerMP)player.getMCEntity(), EnumPacketClient.OVERLAY_DATA, new Object[]{gui.toNBT()}); + Server.sendData((EntityPlayerMP)player.getMCEntity(), EnumPacketClient.SCRIPT_OVERLAY_DATA, new Object[]{gui.toNBT()}); return true; } diff --git a/src/main/java/noppes/npcs/controllers/data/PlayerQuestData.java b/src/main/java/noppes/npcs/controllers/data/PlayerQuestData.java index 4fdbd6b5b..d02218ef4 100644 --- a/src/main/java/noppes/npcs/controllers/data/PlayerQuestData.java +++ b/src/main/java/noppes/npcs/controllers/data/PlayerQuestData.java @@ -15,8 +15,11 @@ import noppes.npcs.controllers.PlayerDataController; import noppes.npcs.controllers.QuestController; import noppes.npcs.entity.EntityNPCInterface; import noppes.npcs.quests.QuestInterface; +import noppes.npcs.scripted.interfaces.handler.data.IQuest; public class PlayerQuestData { + public IQuest trackedQuest = null; + public HashMap activeQuests = new HashMap(); public HashMap finishedQuests = new HashMap(); @@ -52,7 +55,8 @@ public class PlayerQuestData { } this.activeQuests = activeQuests; } - + + this.trackedQuest = QuestController.instance.get(mainCompound.getInteger("TrackedQuestID")); } public void saveNBTData(NBTTagCompound maincompound) { @@ -78,6 +82,12 @@ public class PlayerQuestData { compound.setTag("ActiveQuests", list2); maincompound.setTag("QuestData", compound); + + if (this.trackedQuest != null) { + maincompound.setInteger("TrackedQuestID", this.trackedQuest.getId()); + } else { + maincompound.setInteger("TrackedQuestID", -1); + } } public QuestData getQuestCompletion(EntityPlayer player,EntityNPCInterface npc) { diff --git a/src/main/java/noppes/npcs/scripted/entity/ScriptPlayer.java b/src/main/java/noppes/npcs/scripted/entity/ScriptPlayer.java index 1677300c8..646c84123 100644 --- a/src/main/java/noppes/npcs/scripted/entity/ScriptPlayer.java +++ b/src/main/java/noppes/npcs/scripted/entity/ScriptPlayer.java @@ -518,7 +518,7 @@ public class ScriptPlayer extends ScriptLivingBase } public void closeOverlay(int id) { - Server.sendData((EntityPlayerMP)this.entity, EnumPacketClient.OVERLAY_CLOSE, id, new NBTTagCompound()); + Server.sendData((EntityPlayerMP)this.entity, EnumPacketClient.SCRIPT_OVERLAY_CLOSE, id, new NBTTagCompound()); } public IOverlayHandler getOverlays() {