From 960c60f5c7e78336f53b27248c60764a90254580 Mon Sep 17 00:00:00 2001 From: Kam Date: Tue, 9 May 2023 14:36:18 -0400 Subject: [PATCH 01/34] Update api --- src/api | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/api b/src/api index 5685f9a0f..3f8d6e558 160000 --- a/src/api +++ b/src/api @@ -1 +1 @@ -Subproject commit 5685f9a0f856879edc7e1f722da2fee98be187e2 +Subproject commit 3f8d6e558194f00cf85f764da224b9ae57572e0a From 6ea7244a25be411c2ac22f10f7604d5cbe3e041a Mon Sep 17 00:00:00 2001 From: Kam Date: Wed, 10 May 2023 19:04:57 -0400 Subject: [PATCH 02/34] Update api --- src/api | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/api b/src/api index 3f8d6e558..5685f9a0f 160000 --- a/src/api +++ b/src/api @@ -1 +1 @@ -Subproject commit 3f8d6e558194f00cf85f764da224b9ae57572e0a +Subproject commit 5685f9a0f856879edc7e1f722da2fee98be187e2 From 1183f7d91b8205b8dc957b2ad4de2b9fb695e8d4 Mon Sep 17 00:00:00 2001 From: Kam Date: Thu, 11 May 2023 11:19:36 -0400 Subject: [PATCH 03/34] Fix NullPointer Crash with Carpentry Search bench and BLANK recipes --- .../java/noppes/npcs/client/gui/player/GuiRecipes.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/main/java/noppes/npcs/client/gui/player/GuiRecipes.java b/src/main/java/noppes/npcs/client/gui/player/GuiRecipes.java index 8c4950a91..b4b8659d9 100644 --- a/src/main/java/noppes/npcs/client/gui/player/GuiRecipes.java +++ b/src/main/java/noppes/npcs/client/gui/player/GuiRecipes.java @@ -72,7 +72,12 @@ public class GuiRecipes extends GuiNPCInterface } List list = new ArrayList(); for(IRecipe recipe : RecipeController.instance.anvilRecipes.values()){ - // System.out.println(recipe.getRecipeOutput().getDisplayName()); + if(recipe.getRecipeOutput() == null) + continue; + + if(recipe.getRecipeOutput().getDisplayName() == null) + continue; + if(recipe.getRecipeOutput().getDisplayName().toLowerCase().contains(search.toLowerCase())) list.add(recipe); } From 6f7ea7340c1f99daab910ec8e7543db1d3af042e Mon Sep 17 00:00:00 2001 From: Kam Date: Thu, 11 May 2023 11:24:25 -0400 Subject: [PATCH 04/34] Remove Blank Named recipes and items --- src/main/java/noppes/npcs/client/gui/player/GuiRecipes.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/java/noppes/npcs/client/gui/player/GuiRecipes.java b/src/main/java/noppes/npcs/client/gui/player/GuiRecipes.java index b4b8659d9..f76e28bb9 100644 --- a/src/main/java/noppes/npcs/client/gui/player/GuiRecipes.java +++ b/src/main/java/noppes/npcs/client/gui/player/GuiRecipes.java @@ -78,6 +78,9 @@ public class GuiRecipes extends GuiNPCInterface if(recipe.getRecipeOutput().getDisplayName() == null) continue; + if(recipe.getRecipeOutput().getDisplayName().trim().equals("")) + continue; + if(recipe.getRecipeOutput().getDisplayName().toLowerCase().contains(search.toLowerCase())) list.add(recipe); } From fa7fb7f73432d79f95e174dbcf4070055de3fd7e Mon Sep 17 00:00:00 2001 From: Kam Date: Thu, 11 May 2023 11:57:39 -0400 Subject: [PATCH 05/34] ??? Fix Quest Cooldown Times ??? --- src/main/java/kamkeel/QuestCommand.java | 10 ++++++++-- .../noppes/npcs/controllers/data/PlayerQuestData.java | 7 ++++++- .../java/noppes/npcs/scripted/entity/ScriptPlayer.java | 7 ++++++- 3 files changed, 20 insertions(+), 4 deletions(-) diff --git a/src/main/java/kamkeel/QuestCommand.java b/src/main/java/kamkeel/QuestCommand.java index 278f12518..2e51306aa 100644 --- a/src/main/java/kamkeel/QuestCommand.java +++ b/src/main/java/kamkeel/QuestCommand.java @@ -5,8 +5,10 @@ import java.util.List; import net.minecraft.command.CommandException; import net.minecraft.command.ICommandSender; import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.server.MinecraftServer; import noppes.npcs.Server; import noppes.npcs.constants.EnumPacketClient; +import noppes.npcs.constants.EnumQuestRepeat; import noppes.npcs.controllers.DialogController; import noppes.npcs.controllers.PlayerDataController; import noppes.npcs.controllers.QuestController; @@ -95,8 +97,12 @@ public class QuestCommand extends CommandKamkeelBase { if(playerdata.questData.activeQuests.containsKey(questid)){ playerdata.questData.activeQuests.remove(questid); } - - playerdata.questData.finishedQuests.put(questid, System.currentTimeMillis()); + + if(quest.repeat == EnumQuestRepeat.RLDAILY || quest.repeat == EnumQuestRepeat.RLWEEKLY) + playerdata.questData.finishedQuests.put(quest.id, System.currentTimeMillis()); + else + playerdata.questData.finishedQuests.put(quest.id, sender.getEntityWorld().getTotalWorldTime()); + playerdata.savePlayerDataOnFile(); if(playerdata.player != null){ Server.sendData((EntityPlayerMP)playerdata.player, EnumPacketClient.MESSAGE, "quest.completed", quest.title); diff --git a/src/main/java/noppes/npcs/controllers/data/PlayerQuestData.java b/src/main/java/noppes/npcs/controllers/data/PlayerQuestData.java index 709a8a183..7dfc53fa2 100644 --- a/src/main/java/noppes/npcs/controllers/data/PlayerQuestData.java +++ b/src/main/java/noppes/npcs/controllers/data/PlayerQuestData.java @@ -11,6 +11,7 @@ import noppes.npcs.api.handler.IPlayerQuestData; import noppes.npcs.api.handler.data.IQuest; import noppes.npcs.constants.EnumPacketClient; import noppes.npcs.constants.EnumQuestCompletion; +import noppes.npcs.constants.EnumQuestRepeat; import noppes.npcs.constants.EnumQuestType; import noppes.npcs.controllers.PlayerDataController; import noppes.npcs.controllers.QuestController; @@ -164,7 +165,11 @@ public class PlayerQuestData implements IPlayerQuestData { Quest quest = QuestController.instance.quests.get(id); if (quest == null) return; - finishedQuests.put(id, System.currentTimeMillis()); + + if(quest.repeat == EnumQuestRepeat.RLDAILY || quest.repeat == EnumQuestRepeat.RLWEEKLY) + finishedQuests.put(quest.id, System.currentTimeMillis()); + else + finishedQuests.put(quest.id, parent.player.worldObj.getTotalWorldTime()); } public void stopQuest(int id) { diff --git a/src/main/java/noppes/npcs/scripted/entity/ScriptPlayer.java b/src/main/java/noppes/npcs/scripted/entity/ScriptPlayer.java index 5b7babab6..ecf5b35b7 100644 --- a/src/main/java/noppes/npcs/scripted/entity/ScriptPlayer.java +++ b/src/main/java/noppes/npcs/scripted/entity/ScriptPlayer.java @@ -27,6 +27,7 @@ import noppes.npcs.api.item.IItemStack; import noppes.npcs.api.overlay.ICustomOverlay; import noppes.npcs.config.ConfigScript; import noppes.npcs.constants.EnumPacketClient; +import noppes.npcs.constants.EnumQuestRepeat; import noppes.npcs.constants.EnumQuestType; import noppes.npcs.containers.ContainerCustomGui; import noppes.npcs.controllers.*; @@ -270,7 +271,11 @@ public class ScriptPlayer extends ScriptLivingBase if (quest == null) return; PlayerData data = PlayerDataController.instance.getPlayerData(player); - data.questData.finishedQuests.put(id, System.currentTimeMillis()); + + if(quest.repeat == EnumQuestRepeat.RLDAILY || quest.repeat == EnumQuestRepeat.RLWEEKLY) + data.questData.finishedQuests.put(quest.id, System.currentTimeMillis()); + else + data.questData.finishedQuests.put(quest.id, player.worldObj.getTotalWorldTime()); } /** From 6859b2da479aaabe04680cd372267c2c6ff88a74 Mon Sep 17 00:00:00 2001 From: Kam Date: Thu, 11 May 2023 12:14:09 -0400 Subject: [PATCH 06/34] 1.8.2-beta --- build.gradle | 2 +- src/main/java/noppes/npcs/CustomNpcs.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/build.gradle b/build.gradle index 85ad4cf23..9635a3d30 100644 --- a/build.gradle +++ b/build.gradle @@ -34,7 +34,7 @@ configurations { apply plugin: 'forge' -version = "1.8.1" +version = "1.8.2-beta" group= "com.kamkeel.customnpc-plus" // http://maven.apache.org/guides/mini/guide-naming-conventions.html archivesBaseName = "CustomNPC-Plus" diff --git a/src/main/java/noppes/npcs/CustomNpcs.java b/src/main/java/noppes/npcs/CustomNpcs.java index 4037a99d9..adb9903b2 100644 --- a/src/main/java/noppes/npcs/CustomNpcs.java +++ b/src/main/java/noppes/npcs/CustomNpcs.java @@ -35,7 +35,7 @@ import java.util.ArrayList; import java.util.Set; import java.util.UUID; -@Mod(modid = "customnpcs", name = "CustomNpcs", version = "1.8.1") +@Mod(modid = "customnpcs", name = "CustomNpcs", version = "1.8.2-beta") public class CustomNpcs { @SidedProxy(clientSide = "noppes.npcs.client.ClientProxy", serverSide = "noppes.npcs.CommonProxy") From 3cba19cea24dc2a2fdce28f0d0fb9c962a178693 Mon Sep 17 00:00:00 2001 From: Kam Date: Thu, 11 May 2023 13:19:53 -0400 Subject: [PATCH 07/34] Fix UUIDS not saving when spawning an NPC --- .../java/noppes/npcs/controllers/ServerCloneController.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/main/java/noppes/npcs/controllers/ServerCloneController.java b/src/main/java/noppes/npcs/controllers/ServerCloneController.java index d9b754e62..5666535ae 100644 --- a/src/main/java/noppes/npcs/controllers/ServerCloneController.java +++ b/src/main/java/noppes/npcs/controllers/ServerCloneController.java @@ -254,8 +254,6 @@ public class ServerCloneController implements ICloneHandler { nbttagcompound.removeTag("MovingPathNew"); nbttagcompound.removeTag("Pos"); nbttagcompound.removeTag("Riding"); - nbttagcompound.removeTag("UUIDMost"); - nbttagcompound.removeTag("UUIDLeast"); if(!nbttagcompound.hasKey("ModRev")) nbttagcompound.setInteger("ModRev", 1); From dd5ca106bc74f52c5e2ca8b9eb5462302819e563 Mon Sep 17 00:00:00 2001 From: Kam Date: Thu, 11 May 2023 16:45:25 -0400 Subject: [PATCH 08/34] Fix Quest Cooldown string results --- .../java/noppes/npcs/NoppesUtilServer.java | 28 +++++-------------- .../noppes/npcs/controllers/data/Quest.java | 6 ++-- 2 files changed, 10 insertions(+), 24 deletions(-) diff --git a/src/main/java/noppes/npcs/NoppesUtilServer.java b/src/main/java/noppes/npcs/NoppesUtilServer.java index cced40865..8a94ca9bf 100644 --- a/src/main/java/noppes/npcs/NoppesUtilServer.java +++ b/src/main/java/noppes/npcs/NoppesUtilServer.java @@ -799,35 +799,21 @@ public class NoppesUtilServer { long minutes = seconds / 60; long hours = minutes / 60; long days = hours / 24; - long months = days / 30; - long years = months / 12; - - months = months % 12; - days = days % 30; - hours = hours % 24; - minutes = minutes % 60; - seconds = seconds % 60; + seconds %= 60; + minutes %= 60; + hours %= 24; StringBuilder sb = new StringBuilder(); - if (years > 0) { - sb.append(years + " year(s) "); - } - if (months > 0) { - sb.append(months + " month(s) "); - } if (days > 0) { - sb.append(days + " day(s) "); + sb.append(days).append(" day").append(days == 1 ? "" : "s").append(", "); } if (hours > 0) { - sb.append(hours + " hour(s) "); + sb.append(hours).append(" hour").append(hours == 1 ? "" : "s").append(", "); } if (minutes > 0) { - sb.append(minutes + " minute(s) "); + sb.append(minutes).append(" minute").append(minutes == 1 ? "" : "s").append(", "); } - if (seconds > 0) { - sb.append(seconds + " second(s)"); - } - + sb.append(seconds).append(" second").append(seconds == 1 ? "" : "s"); return sb.toString(); } } diff --git a/src/main/java/noppes/npcs/controllers/data/Quest.java b/src/main/java/noppes/npcs/controllers/data/Quest.java index ee4eb0eab..b3f6e1237 100644 --- a/src/main/java/noppes/npcs/controllers/data/Quest.java +++ b/src/main/java/noppes/npcs/controllers/data/Quest.java @@ -148,11 +148,11 @@ public class Quest implements ICompatibilty, IQuest { switch (repeat) { case MCDAILY: - return Math.max(0, questTime + 24000 - player.worldObj.getTotalWorldTime()); + return Math.max(0, (questTime + 24000 - player.worldObj.getTotalWorldTime()) * 50); case MCWEEKLY: - return Math.max(0, questTime + 168000 - player.worldObj.getTotalWorldTime()); + return Math.max(0, (questTime + 168000 - player.worldObj.getTotalWorldTime()) * 50); case RLDAILY: - return Math.max(0, questTime + 86400000 - System.currentTimeMillis()); + return Math.max(0, questTime + 86400000 - System.currentTimeMillis()); case RLWEEKLY: return Math.max(0, questTime + 604800000 - System.currentTimeMillis()); } From 9ff341bd1764bd69996a6e003f81989b16fa31e7 Mon Sep 17 00:00:00 2001 From: Kam Date: Thu, 11 May 2023 16:58:03 -0400 Subject: [PATCH 09/34] Fix Quest Completion Message --- src/main/java/kamkeel/QuestCommand.java | 2 +- .../noppes/npcs/controllers/PlayerQuestController.java | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/main/java/kamkeel/QuestCommand.java b/src/main/java/kamkeel/QuestCommand.java index 2e51306aa..b21e590a0 100644 --- a/src/main/java/kamkeel/QuestCommand.java +++ b/src/main/java/kamkeel/QuestCommand.java @@ -59,7 +59,7 @@ public class QuestCommand extends CommandKamkeelBase { QuestData questdata = new QuestData(quest); playerdata.questData.activeQuests.put(questid, questdata); playerdata.savePlayerDataOnFile(); - if(playerdata.player != null){ + if(playerdata.player != null && questdata.sendAlerts){ Server.sendData((EntityPlayerMP)playerdata.player, EnumPacketClient.MESSAGE, "quest.newquest", quest.title); Server.sendData((EntityPlayerMP)playerdata.player, EnumPacketClient.CHAT, "quest.newquest", ": ", quest.title); } diff --git a/src/main/java/noppes/npcs/controllers/PlayerQuestController.java b/src/main/java/noppes/npcs/controllers/PlayerQuestController.java index a24e981bf..5a8024c64 100644 --- a/src/main/java/noppes/npcs/controllers/PlayerQuestController.java +++ b/src/main/java/noppes/npcs/controllers/PlayerQuestController.java @@ -60,17 +60,24 @@ public class PlayerQuestController { public static void setQuestFinished(Quest quest, EntityPlayer player){ PlayerData playerdata = PlayerDataController.instance.getPlayerData(player); PlayerQuestData data = playerdata.questData; + QuestData questData = data.activeQuests.get(quest.id); data.activeQuests.remove(quest.id); if(quest.repeat == EnumQuestRepeat.RLDAILY || quest.repeat == EnumQuestRepeat.RLWEEKLY) data.finishedQuests.put(quest.id, System.currentTimeMillis()); else data.finishedQuests.put(quest.id,player.worldObj.getTotalWorldTime()); + if(quest.repeat != EnumQuestRepeat.NONE && quest.type == EnumQuestType.Dialog){ QuestDialog questdialog = (QuestDialog) quest.questInterface; for(int dialog : questdialog.dialogs.values()){ playerdata.dialogData.dialogsRead.remove(dialog); } } + if (questData.sendAlerts) { + Server.sendData((EntityPlayerMP) player, EnumPacketClient.MESSAGE, "quest.completed", questData.quest.title); + Server.sendData((EntityPlayerMP) player, EnumPacketClient.CHAT, "quest.completed", ": ", questData.quest.title); + } + } public static boolean canQuestBeAccepted(Quest quest, EntityPlayer player){ if(quest == null) From 241120c32afa1cc83a6489fc2d32e3baf4ae8ad4 Mon Sep 17 00:00:00 2001 From: "Luis C.M" <42545778+c0508383@users.noreply.github.com> Date: Thu, 11 May 2023 18:29:44 -0500 Subject: [PATCH 10/34] Fixes to quest tracking and setting alerts. --- src/main/java/noppes/npcs/PacketHandlerServer.java | 10 +++++++--- .../noppes/npcs/client/gui/player/GuiQuestLog.java | 14 +++++++++----- 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/src/main/java/noppes/npcs/PacketHandlerServer.java b/src/main/java/noppes/npcs/PacketHandlerServer.java index db0ffe5c5..f3b66a7bd 100644 --- a/src/main/java/noppes/npcs/PacketHandlerServer.java +++ b/src/main/java/noppes/npcs/PacketHandlerServer.java @@ -192,14 +192,18 @@ public class PacketHandlerServer{ } String trackedQuestString = Server.readString(buffer); + Quest prevTracked = (Quest) playerData.questData.trackedQuest; Quest trackedQuest = this.getQuestFromString(trackedQuestString); if (trackedQuest != null) { playerData.questData.trackedQuest = trackedQuest; NoppesUtilPlayer.sendTrackedQuestData(player, trackedQuest); + if (prevTracked != playerData.questData.trackedQuest) { + NoppesUtilPlayer.sendTrackedQuestData(player, (Quest) playerData.questData.trackedQuest); + } + } else { + playerData.questData.trackedQuest = null; + Server.sendData((EntityPlayerMP) player, EnumPacketClient.OVERLAY_QUEST_TRACKING); } - - playerData.questData.trackedQuest = null; - Server.sendData(player, EnumPacketClient.OVERLAY_QUEST_TRACKING); } private void isGuiOpenPacket(ByteBuf buffer, EntityPlayerMP player) throws IOException { 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 7b59feeca..e68c63d6a 100644 --- a/src/main/java/noppes/npcs/client/gui/player/GuiQuestLog.java +++ b/src/main/java/noppes/npcs/client/gui/player/GuiQuestLog.java @@ -20,10 +20,7 @@ import org.lwjgl.opengl.GL11; import tconstruct.client.tabs.InventoryTabQuests; import tconstruct.client.tabs.TabRegistry; -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; +import java.util.*; public class GuiQuestLog extends GuiNPCInterface implements ITopButtonListener,ICustomScrollListener, IGuiData{ @@ -36,6 +33,9 @@ public class GuiQuestLog extends GuiNPCInterface implements ITopButtonListener,I private boolean noQuests = false; private boolean questDetails = true; + private HashMap questAlertsOnOpen; + private String trackedQuestKeyOnOpen; + private Minecraft mc = Minecraft.getMinecraft(); public GuiQuestLog(EntityPlayer player) { @@ -245,6 +245,8 @@ public class GuiQuestLog extends GuiNPCInterface implements ITopButtonListener,I QuestLogData data = new QuestLogData(); data.readNBT(compound); this.data = data; + this.questAlertsOnOpen = new HashMap<>(data.questAlerts); + this.trackedQuestKeyOnOpen = data.trackedQuestKey; initGui(); } @@ -256,7 +258,9 @@ public class GuiQuestLog extends GuiNPCInterface implements ITopButtonListener,I @Override public void save() { - if (this.data != null) { + if (this.data != null && + (!Objects.equals(this.questAlertsOnOpen, data.questAlerts) || + !Objects.equals(this.trackedQuestKeyOnOpen, data.trackedQuestKey))) { NBTTagCompound compound = new NBTTagCompound(); compound.setTag("Alerts", NBTTags.nbtStringStringMap(data.questAlerts)); Client.sendData(EnumPacketServer.QuestLogToServer, compound, this.data.trackedQuestKey); From e0360f9a6e50267620b614cccf3fc450a45fbae4 Mon Sep 17 00:00:00 2001 From: "Luis C.M" <42545778+c0508383@users.noreply.github.com> Date: Thu, 11 May 2023 20:17:16 -0500 Subject: [PATCH 11/34] Made tracked quest a private field, clearer intent in code for bug fixing. --- .../java/noppes/npcs/NoppesUtilPlayer.java | 53 ++++++++++++++++--- .../java/noppes/npcs/PacketHandlerServer.java | 51 +----------------- src/main/java/noppes/npcs/QuestLogData.java | 4 +- .../noppes/npcs/ScriptPlayerEventHandler.java | 7 ++- .../controllers/data/PlayerQuestData.java | 16 +++++- .../noppes/npcs/quests/QuestInterface.java | 5 +- 6 files changed, 69 insertions(+), 67 deletions(-) diff --git a/src/main/java/noppes/npcs/NoppesUtilPlayer.java b/src/main/java/noppes/npcs/NoppesUtilPlayer.java index 8bd76ac41..59f6dc7ed 100644 --- a/src/main/java/noppes/npcs/NoppesUtilPlayer.java +++ b/src/main/java/noppes/npcs/NoppesUtilPlayer.java @@ -32,10 +32,7 @@ import noppes.npcs.scripted.event.DialogEvent; import noppes.npcs.scripted.event.QuestEvent; import java.io.IOException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; +import java.util.*; public class NoppesUtilPlayer { @@ -300,8 +297,52 @@ public class NoppesUtilPlayer { else Server.sendData(player, EnumPacketClient.GUI_CLOSE); } + + public static void updateQuestLogData(ByteBuf buffer, EntityPlayerMP player) throws IOException { + PlayerData playerData = PlayerDataController.instance.getPlayerData(player); + + NBTTagCompound compound = Server.readNBT(buffer); + HashMap questAlerts = NBTTags.getStringStringMap(compound.getTagList("Alerts", 10)); + for (Map.Entry entry : questAlerts.entrySet()) { + Quest quest = getQuestFromStringKey(entry.getKey()); + if (quest != null) { + playerData.questData.activeQuests.get(quest.id).sendAlerts = Boolean.parseBoolean(entry.getValue()); + } + } + + String trackedQuestString = Server.readString(buffer); + Quest trackedQuest = getQuestFromStringKey(trackedQuestString); + if (trackedQuest != null) { + playerData.questData.trackQuest(trackedQuest); + } else { + playerData.questData.untrackQuest(); + } + } + + private static Quest getQuestFromStringKey(String string) { + if (string != null && string.contains(":")) { + String[] splitString = string.split(":"); + if(splitString.length < 2){ + return null; + } + 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)) { + return quest; + } + } + } + } + } + return null; + } + public static void sendTrackedQuestData(EntityPlayerMP player, Quest trackedQuest) { - Quest quest = (Quest) PlayerDataController.instance.getPlayerData(player).questData.trackedQuest; + Quest quest = (Quest) PlayerDataController.instance.getPlayerData(player).questData.getTrackedQuest(); if (quest == null || trackedQuest == null || quest.id != trackedQuest.id) { return; } @@ -398,7 +439,7 @@ public class NoppesUtilPlayer { QuestData nextQuest = new QuestData(data.quest.getNextQuest()); nextQuest.sendAlerts = data.quest.id != data.quest.getNextQuest().id || data.sendAlerts; PlayerQuestController.addActiveQuest(nextQuest, player); - NoppesUtilPlayer.sendTrackedQuestData(player,nextQuest.quest); + questData.trackQuest(nextQuest.quest); } return true; diff --git a/src/main/java/noppes/npcs/PacketHandlerServer.java b/src/main/java/noppes/npcs/PacketHandlerServer.java index f3b66a7bd..43236cc6d 100644 --- a/src/main/java/noppes/npcs/PacketHandlerServer.java +++ b/src/main/java/noppes/npcs/PacketHandlerServer.java @@ -88,7 +88,7 @@ public class PacketHandlerServer{ EventHooks.onCustomGuiClose((IPlayer) NpcAPI.Instance().getIEntity(player), (new ScriptGui()).fromNBT(Server.readNBT(buffer))); return; } else if (type == EnumPacketServer.QuestLogToServer) { - updateQuestLogData(buffer, player); + NoppesUtilPlayer.updateQuestLogData(buffer, player); return; } else if(type == EnumPacketServer.DimensionsGet){ HashMap map = new HashMap(); @@ -157,55 +157,6 @@ public class PacketHandlerServer{ } } - private Quest getQuestFromString(String string) { - if (string != null && string.contains(":")) { - String[] splitString = string.split(":"); - if(splitString.length < 2){ - return null; - } - 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)) { - return quest; - } - } - } - } - } - return null; - } - - private void updateQuestLogData(ByteBuf buffer, EntityPlayerMP player) throws IOException { - PlayerData playerData = PlayerDataController.instance.getPlayerData(player); - - NBTTagCompound compound = Server.readNBT(buffer); - HashMap questAlerts = NBTTags.getStringStringMap(compound.getTagList("Alerts", 10)); - for (Map.Entry entry : questAlerts.entrySet()) { - Quest quest = this.getQuestFromString(entry.getKey()); - if (quest != null) { - playerData.questData.activeQuests.get(quest.id).sendAlerts = Boolean.parseBoolean(entry.getValue()); - } - } - - String trackedQuestString = Server.readString(buffer); - Quest prevTracked = (Quest) playerData.questData.trackedQuest; - Quest trackedQuest = this.getQuestFromString(trackedQuestString); - if (trackedQuest != null) { - playerData.questData.trackedQuest = trackedQuest; - NoppesUtilPlayer.sendTrackedQuestData(player, trackedQuest); - if (prevTracked != playerData.questData.trackedQuest) { - NoppesUtilPlayer.sendTrackedQuestData(player, (Quest) playerData.questData.trackedQuest); - } - } else { - playerData.questData.trackedQuest = null; - Server.sendData((EntityPlayerMP) 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 10673c6aa..c90d2d4c0 100644 --- a/src/main/java/noppes/npcs/QuestLogData.java +++ b/src/main/java/noppes/npcs/QuestLogData.java @@ -57,8 +57,8 @@ public class QuestLogData { 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()) { + if (playerData.questData.getTrackedQuest() != null) { + if (quest.id == playerData.questData.getTrackedQuest().getId()) { trackedQuestKey = category + ":" + quest.title; } } diff --git a/src/main/java/noppes/npcs/ScriptPlayerEventHandler.java b/src/main/java/noppes/npcs/ScriptPlayerEventHandler.java index 53ea44087..dbcdc4e44 100644 --- a/src/main/java/noppes/npcs/ScriptPlayerEventHandler.java +++ b/src/main/java/noppes/npcs/ScriptPlayerEventHandler.java @@ -67,9 +67,8 @@ public class ScriptPlayerEventHandler { playerData.timers.update(); } - if (playerData.questData.trackedQuest != null && !playerData.questData.activeQuests.containsKey(playerData.questData.trackedQuest.getId())) { - PlayerDataController.instance.getPlayerData(player).questData.trackedQuest = null; - Server.sendData((EntityPlayerMP) player, EnumPacketClient.OVERLAY_QUEST_TRACKING); + if (playerData.questData.getTrackedQuest() != null && !playerData.questData.activeQuests.containsKey(playerData.questData.getTrackedQuest().getId())) { + PlayerDataController.instance.getPlayerData(player).questData.untrackQuest(); } if (player.ticksExisted%20 == 0 && !PlayerDataController.instance.getPlayerData(player).skinOverlays.overlayList.isEmpty()) { @@ -464,7 +463,7 @@ public class ScriptPlayerEventHandler { IPlayer scriptPlayer = (IPlayer) NpcAPI.Instance().getIEntity(event.player); EventHooks.onPlayerLogin(handler, scriptPlayer); - Quest quest = (Quest) PlayerDataController.instance.getPlayerData(event.player).questData.trackedQuest; + Quest quest = (Quest) PlayerDataController.instance.getPlayerData(event.player).questData.getTrackedQuest(); if (quest != null) { NoppesUtilPlayer.sendTrackedQuestData((EntityPlayerMP) event.player, quest); } diff --git a/src/main/java/noppes/npcs/controllers/data/PlayerQuestData.java b/src/main/java/noppes/npcs/controllers/data/PlayerQuestData.java index 7dfc53fa2..7fc9ae1f6 100644 --- a/src/main/java/noppes/npcs/controllers/data/PlayerQuestData.java +++ b/src/main/java/noppes/npcs/controllers/data/PlayerQuestData.java @@ -25,7 +25,7 @@ import java.util.List; public class PlayerQuestData implements IPlayerQuestData { private final PlayerData parent; - public IQuest trackedQuest = null; + private IQuest trackedQuest = null; public HashMap activeQuests = new HashMap(); public HashMap finishedQuests = new HashMap(); @@ -145,8 +145,20 @@ public class PlayerQuestData implements IPlayerQuestData { } + public void trackQuest(IQuest quest) { + if (quest.getId() != this.trackedQuest.getId()) { + this.trackedQuest = quest; + NoppesUtilPlayer.sendTrackedQuestData((EntityPlayerMP) this.parent.player, (Quest) this.trackedQuest); + } + } + + public void untrackQuest() { + this.trackedQuest = null; + Server.sendData((EntityPlayerMP) this.parent.player, EnumPacketClient.OVERLAY_QUEST_TRACKING); + } + public IQuest getTrackedQuest() { - return trackedQuest; + return this.trackedQuest; } public void startQuest(int id) { diff --git a/src/main/java/noppes/npcs/quests/QuestInterface.java b/src/main/java/noppes/npcs/quests/QuestInterface.java index bcd6025b6..84c25ec83 100644 --- a/src/main/java/noppes/npcs/quests/QuestInterface.java +++ b/src/main/java/noppes/npcs/quests/QuestInterface.java @@ -19,9 +19,8 @@ public abstract class QuestInterface implements IQuestInterface { public abstract void readEntityFromNBT(NBTTagCompound compound); public abstract boolean isCompleted(PlayerData player); public void handleComplete(EntityPlayer player) { - if (QuestController.instance.get(questId).equals(PlayerDataController.instance.getPlayerData(player).questData.trackedQuest)) { - PlayerDataController.instance.getPlayerData(player).questData.trackedQuest = null; - Server.sendData((EntityPlayerMP) player, EnumPacketClient.OVERLAY_QUEST_TRACKING); + if (this.questId == PlayerDataController.instance.getPlayerData(player).questData.getTrackedQuest().getId()) { + PlayerDataController.instance.getPlayerData(player).questData.untrackQuest(); } } public abstract Vector getQuestLogStatus(EntityPlayer player); From 142fbe51e2cdacfa76ff10261e3598662d0afe9d Mon Sep 17 00:00:00 2001 From: "Luis C.M" <42545778+c0508383@users.noreply.github.com> Date: Thu, 11 May 2023 20:27:00 -0500 Subject: [PATCH 12/34] Fixed quest not tracking from previous commit. --- .../noppes/npcs/controllers/data/PlayerQuestData.java | 2 +- src/main/java/noppes/npcs/quests/QuestItem.java | 10 ++++------ 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/src/main/java/noppes/npcs/controllers/data/PlayerQuestData.java b/src/main/java/noppes/npcs/controllers/data/PlayerQuestData.java index 7fc9ae1f6..1ee181c3b 100644 --- a/src/main/java/noppes/npcs/controllers/data/PlayerQuestData.java +++ b/src/main/java/noppes/npcs/controllers/data/PlayerQuestData.java @@ -146,7 +146,7 @@ public class PlayerQuestData implements IPlayerQuestData { } public void trackQuest(IQuest quest) { - if (quest.getId() != this.trackedQuest.getId()) { + if (this.trackedQuest == null || quest.getId() != this.trackedQuest.getId()) { this.trackedQuest = quest; NoppesUtilPlayer.sendTrackedQuestData((EntityPlayerMP) this.parent.player, (Quest) this.trackedQuest); } diff --git a/src/main/java/noppes/npcs/quests/QuestItem.java b/src/main/java/noppes/npcs/quests/QuestItem.java index 8aa442b68..be42bf9da 100644 --- a/src/main/java/noppes/npcs/quests/QuestItem.java +++ b/src/main/java/noppes/npcs/quests/QuestItem.java @@ -131,18 +131,16 @@ public class QuestItem extends QuestInterface implements IQuestItem { } public IQuestObjective[] getObjectives(EntityPlayer player) { - List list = new ArrayList(); + List list = new ArrayList<>(); List questItems = NoppesUtilPlayer.countStacks(this.items, this.ignoreDamage, this.ignoreNBT); - Iterator var4 = questItems.iterator(); - while(var4.hasNext()) { - ItemStack stack = (ItemStack)var4.next(); + for (ItemStack stack : questItems) { if (stack.stackSize > 0) { - list.add(new noppes.npcs.quests.QuestItem.QuestItemObjective(this, player, stack)); + list.add(new QuestItemObjective(this, player, stack)); } } - return (IQuestObjective[])list.toArray(new IQuestObjective[list.size()]); + return list.toArray(new IQuestObjective[0]); } public void setLeaveItems(boolean leaveItems){ From 515a6e855068e82231d4f1d2937b911829de0766 Mon Sep 17 00:00:00 2001 From: Kam Date: Fri, 12 May 2023 12:52:29 -0400 Subject: [PATCH 13/34] Crate Null Checks --- src/main/java/noppes/npcs/CommonProxy.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/main/java/noppes/npcs/CommonProxy.java b/src/main/java/noppes/npcs/CommonProxy.java index 067e2f1b3..6f09fad9a 100644 --- a/src/main/java/noppes/npcs/CommonProxy.java +++ b/src/main/java/noppes/npcs/CommonProxy.java @@ -94,8 +94,11 @@ public class CommonProxy implements IGuiHandler { if(gui == EnumGuiType.MerchantAdd) return new ContainerMerchantAdd(player, ServerEventsHandler.Merchant, player.worldObj); - if(gui == EnumGuiType.Crate) - return new ContainerCrate(player.inventory, (TileNpcContainer)player.worldObj.getTileEntity(x, y, z)); + if(gui == EnumGuiType.Crate){ + if(player.inventory != null && (TileNpcContainer)player.worldObj.getTileEntity(x, y, z) != null){ + return new ContainerCrate(player.inventory, (TileNpcContainer)player.worldObj.getTileEntity(x, y, z)); + } + } if(gui == EnumGuiType.PlayerMailman) return new ContainerMail(player, x == 1, y == 1); From f2faf3513d3d2df752cb88abc3402dbd94ce9848 Mon Sep 17 00:00:00 2001 From: Kam Date: Fri, 12 May 2023 12:52:39 -0400 Subject: [PATCH 14/34] ___playermap.dat_old not being found --- .../controllers/PlayerDataController.java | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/src/main/java/noppes/npcs/controllers/PlayerDataController.java b/src/main/java/noppes/npcs/controllers/PlayerDataController.java index db9b24d29..2bf1780fa 100644 --- a/src/main/java/noppes/npcs/controllers/PlayerDataController.java +++ b/src/main/java/noppes/npcs/controllers/PlayerDataController.java @@ -14,6 +14,7 @@ import noppes.npcs.CustomNpcs; import noppes.npcs.LogWriter; import noppes.npcs.controllers.data.*; import noppes.npcs.util.NBTJsonUtil; +import org.lwjgl.Sys; import java.io.*; import java.util.*; @@ -140,14 +141,18 @@ public class PlayerDataController { return true; } } catch (Exception e) { - try { - File file = new File(getSaveDir(), "___playermap.dat_old"); - if(file.exists()){ - loadPlayerDataMap(file); - return true; - } - } catch (Exception ignored) {} + LogWriter.except(e); } + try { + File file = new File(getSaveDir(), "___playermap.dat_old"); + if(file.exists()){ + loadPlayerDataMap(file); + return true; + } + } catch (Exception e2) { + LogWriter.except(e2); + } + return false; } From ceac11d2518254e000211ed41d22d3f77ab97cb9 Mon Sep 17 00:00:00 2001 From: Kam Date: Fri, 12 May 2023 14:26:45 -0400 Subject: [PATCH 15/34] Fix Tracked Quest null crash --- src/main/java/noppes/npcs/quests/QuestInterface.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/main/java/noppes/npcs/quests/QuestInterface.java b/src/main/java/noppes/npcs/quests/QuestInterface.java index 84c25ec83..871315711 100644 --- a/src/main/java/noppes/npcs/quests/QuestInterface.java +++ b/src/main/java/noppes/npcs/quests/QuestInterface.java @@ -10,6 +10,7 @@ import noppes.npcs.constants.EnumPacketClient; import noppes.npcs.controllers.PlayerDataController; import noppes.npcs.controllers.QuestController; import noppes.npcs.controllers.data.PlayerData; +import noppes.npcs.controllers.data.PlayerQuestData; import java.util.Vector; @@ -19,8 +20,11 @@ public abstract class QuestInterface implements IQuestInterface { public abstract void readEntityFromNBT(NBTTagCompound compound); public abstract boolean isCompleted(PlayerData player); public void handleComplete(EntityPlayer player) { - if (this.questId == PlayerDataController.instance.getPlayerData(player).questData.getTrackedQuest().getId()) { - PlayerDataController.instance.getPlayerData(player).questData.untrackQuest(); + PlayerQuestData questData = PlayerDataController.instance.getPlayerData(player).questData; + if(questData != null && questData.getTrackedQuest() != null){ + if (this.questId == PlayerDataController.instance.getPlayerData(player).questData.getTrackedQuest().getId()) { + PlayerDataController.instance.getPlayerData(player).questData.untrackQuest(); + } } } public abstract Vector getQuestLogStatus(EntityPlayer player); From d4a62b1334603b392036612f3f1cd69e180777a0 Mon Sep 17 00:00:00 2001 From: Kam Date: Fri, 12 May 2023 17:01:15 -0400 Subject: [PATCH 16/34] Fix Mixin Model Cast Issue --- .../noppes/npcs/mixin/MixinModelRenderer.java | 52 +++++++++++-------- 1 file changed, 29 insertions(+), 23 deletions(-) diff --git a/src/main/java/noppes/npcs/mixin/MixinModelRenderer.java b/src/main/java/noppes/npcs/mixin/MixinModelRenderer.java index f8327ae3c..0d87750a3 100644 --- a/src/main/java/noppes/npcs/mixin/MixinModelRenderer.java +++ b/src/main/java/noppes/npcs/mixin/MixinModelRenderer.java @@ -1,7 +1,9 @@ package noppes.npcs.mixin; +import cpw.mods.fml.common.Mod; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.client.model.ModelBase; import net.minecraft.client.model.ModelBiped; import net.minecraft.client.model.ModelRenderer; import noppes.npcs.AnimationData; @@ -38,6 +40,8 @@ public abstract class MixinModelRenderer { @Shadow public List childModels; @Shadow abstract void compileDisplayList(float p_78788_1_); + @Shadow public ModelBase baseModel; + /** * @author Someone * @reason Because we need it @@ -274,30 +278,32 @@ public abstract class MixinModelRenderer { } public EnumAnimationPart pivotEqualPart(ModelRenderer renderer) { - ModelRenderer head = ((ModelBiped) renderer.baseModel).bipedHead; - ModelRenderer body = ((ModelBiped) renderer.baseModel).bipedBody; - ModelRenderer larm = ((ModelBiped) renderer.baseModel).bipedLeftArm; - ModelRenderer rarm = ((ModelBiped) renderer.baseModel).bipedRightArm; - ModelRenderer lleg = ((ModelBiped) renderer.baseModel).bipedLeftLeg; - ModelRenderer rleg = ((ModelBiped) renderer.baseModel).bipedRightLeg; + if(renderer.baseModel instanceof ModelBiped){ + ModelRenderer head = ((ModelBiped) renderer.baseModel).bipedHead; + ModelRenderer body = ((ModelBiped) renderer.baseModel).bipedBody; + ModelRenderer larm = ((ModelBiped) renderer.baseModel).bipedLeftArm; + ModelRenderer rarm = ((ModelBiped) renderer.baseModel).bipedRightArm; + ModelRenderer lleg = ((ModelBiped) renderer.baseModel).bipedLeftLeg; + ModelRenderer rleg = ((ModelBiped) renderer.baseModel).bipedRightLeg; - if (pivotsEqual(renderer,head)) { - return EnumAnimationPart.HEAD; - } - if (pivotsEqual(renderer,body)) { - return EnumAnimationPart.BODY; - } - if (pivotsEqual(renderer,rarm)) { - return EnumAnimationPart.RIGHT_ARM; - } - if (pivotsEqual(renderer,larm)) { - return EnumAnimationPart.LEFT_ARM; - } - if (pivotsEqual(renderer,rleg)) { - return EnumAnimationPart.RIGHT_LEG; - } - if (pivotsEqual(renderer,lleg)) { - return EnumAnimationPart.LEFT_LEG; + if (pivotsEqual(renderer,head)) { + return EnumAnimationPart.HEAD; + } + if (pivotsEqual(renderer,body)) { + return EnumAnimationPart.BODY; + } + if (pivotsEqual(renderer,rarm)) { + return EnumAnimationPart.RIGHT_ARM; + } + if (pivotsEqual(renderer,larm)) { + return EnumAnimationPart.LEFT_ARM; + } + if (pivotsEqual(renderer,rleg)) { + return EnumAnimationPart.RIGHT_LEG; + } + if (pivotsEqual(renderer,lleg)) { + return EnumAnimationPart.LEFT_LEG; + } } return null; From 97c97cf939b47a4a55010c0756057251a43eb414 Mon Sep 17 00:00:00 2001 From: Kam Date: Fri, 12 May 2023 17:38:40 -0400 Subject: [PATCH 17/34] Fix ModelRenderer cast for Child Models causing render corruption --- .../noppes/npcs/mixin/MixinModelRenderer.java | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/src/main/java/noppes/npcs/mixin/MixinModelRenderer.java b/src/main/java/noppes/npcs/mixin/MixinModelRenderer.java index 0d87750a3..d2ffcca02 100644 --- a/src/main/java/noppes/npcs/mixin/MixinModelRenderer.java +++ b/src/main/java/noppes/npcs/mixin/MixinModelRenderer.java @@ -112,7 +112,7 @@ public abstract class MixinModelRenderer { } if (ClientEventHandler.renderingPlayer != null && Client.playerAnimations.containsKey(ClientEventHandler.renderingPlayer.getUniqueID())) { animData = Client.playerAnimations.get(ClientEventHandler.renderingPlayer.getUniqueID()); - EnumAnimationPart mainPartType = this.getPlayerPartType((ModelRenderer) (Object) this); + EnumAnimationPart mainPartType = null; EnumAnimationPart pivotEqualPart = null; if (mainPartType == null) { pivotEqualPart = this.pivotEqualPart((ModelRenderer) (Object) this); @@ -161,7 +161,9 @@ public abstract class MixinModelRenderer { { for (i = 0; i < this.childModels.size(); ++i) { - ((ModelRenderer)this.childModels.get(i)).render(p_78785_1_); + if(this.childModels.get(i) instanceof ModelRenderer){ + ((ModelRenderer)this.childModels.get(i)).render(p_78785_1_); + } } } } @@ -174,7 +176,9 @@ public abstract class MixinModelRenderer { { for (i = 0; i < this.childModels.size(); ++i) { - ((ModelRenderer)this.childModels.get(i)).render(p_78785_1_); + if(this.childModels.get(i) instanceof ModelRenderer){ + ((ModelRenderer)this.childModels.get(i)).render(p_78785_1_); + } } } @@ -207,10 +211,11 @@ public abstract class MixinModelRenderer { { for (i = 0; i < this.childModels.size(); ++i) { - ((ModelRenderer)this.childModels.get(i)).render(p_78785_1_); + if(this.childModels.get(i) instanceof ModelRenderer){ + ((ModelRenderer)this.childModels.get(i)).render(p_78785_1_); + } } } - GL11.glPopMatrix(); } From b04ac9669015076dcb92966550ed5916b87a8e14 Mon Sep 17 00:00:00 2001 From: Kam Date: Fri, 12 May 2023 17:39:13 -0400 Subject: [PATCH 18/34] Beta2 --- build.gradle | 2 +- src/main/java/noppes/npcs/CustomNpcs.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/build.gradle b/build.gradle index 9635a3d30..93313ec3d 100644 --- a/build.gradle +++ b/build.gradle @@ -34,7 +34,7 @@ configurations { apply plugin: 'forge' -version = "1.8.2-beta" +version = "1.8.2-beta2" group= "com.kamkeel.customnpc-plus" // http://maven.apache.org/guides/mini/guide-naming-conventions.html archivesBaseName = "CustomNPC-Plus" diff --git a/src/main/java/noppes/npcs/CustomNpcs.java b/src/main/java/noppes/npcs/CustomNpcs.java index adb9903b2..398674d94 100644 --- a/src/main/java/noppes/npcs/CustomNpcs.java +++ b/src/main/java/noppes/npcs/CustomNpcs.java @@ -35,7 +35,7 @@ import java.util.ArrayList; import java.util.Set; import java.util.UUID; -@Mod(modid = "customnpcs", name = "CustomNpcs", version = "1.8.2-beta") +@Mod(modid = "customnpcs", name = "CustomNpcs", version = "1.8.2-beta2") public class CustomNpcs { @SidedProxy(clientSide = "noppes.npcs.client.ClientProxy", serverSide = "noppes.npcs.CommonProxy") From 314bc462f0939044271c0cd126e8ddcd73583155 Mon Sep 17 00:00:00 2001 From: Kam Date: Fri, 12 May 2023 18:06:55 -0400 Subject: [PATCH 19/34] Better Permission handling for /KAMKEEL Commands --- src/main/java/kamkeel/CommandKamkeel.java | 25 ++++++++++++++++++- src/main/java/kamkeel/CommandKamkeelBase.java | 24 +++++++++++++++++- .../noppes/npcs/CustomNpcsPermissions.java | 7 ++++++ 3 files changed, 54 insertions(+), 2 deletions(-) diff --git a/src/main/java/kamkeel/CommandKamkeel.java b/src/main/java/kamkeel/CommandKamkeel.java index 12b6e93a3..f3ac61140 100644 --- a/src/main/java/kamkeel/CommandKamkeel.java +++ b/src/main/java/kamkeel/CommandKamkeel.java @@ -11,7 +11,10 @@ import net.minecraft.client.Minecraft; import net.minecraft.command.CommandBase; import net.minecraft.command.CommandException; import net.minecraft.command.ICommandSender; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.server.MinecraftServer; +import noppes.npcs.CustomNpcsPermissions; import noppes.npcs.scripted.CustomNPCsException; public class CommandKamkeel extends CommandBase{ @@ -61,7 +64,7 @@ public class CommandKamkeel extends CommandBase{ args = Arrays.copyOfRange(args, 1, args.length); if(command.subcommands.isEmpty() || !command.runSubCommands()){ - if(!sender.canCommandSenderUseCommand(command.getRequiredPermissionLevel(), getCommandPermission(command.getCommandName()))) + if(!canSendCommand(sender, command)) throw new CommandException("You are not allowed to use this command: " + command); command.canRun(sender, command.getUsage(), args); command.processCommand(sender, args); @@ -117,5 +120,25 @@ public class CommandKamkeel extends CommandBase{ public static String getCommandPermission(String command){ return "cnpc.kamkeel." + command.toLowerCase(); } + + public static String getUniversalPermission(){ + return "cnpc.kamkeel.*"; + } + + public static boolean canSendCommand(ICommandSender sender, CommandKamkeelBase command){ + if(sender.canCommandSenderUseCommand(command.getRequiredPermissionLevel(), getUniversalPermission())){ + return true; + } + + if(sender.canCommandSenderUseCommand(command.getRequiredPermissionLevel(), getCommandPermission(command.getCommandName()))){ + return true; + } + + if(sender instanceof EntityPlayer){ + return CustomNpcsPermissions.hasCustomPermission((EntityPlayer) sender, getCommandPermission(command.getCommandName())); + } + + return false; + } } diff --git a/src/main/java/kamkeel/CommandKamkeelBase.java b/src/main/java/kamkeel/CommandKamkeelBase.java index 825adc4ca..bb94d9bc9 100644 --- a/src/main/java/kamkeel/CommandKamkeelBase.java +++ b/src/main/java/kamkeel/CommandKamkeelBase.java @@ -13,7 +13,9 @@ import java.util.Map; import net.minecraft.command.CommandBase; import net.minecraft.command.CommandException; import net.minecraft.command.ICommandSender; +import net.minecraft.entity.player.EntityPlayer; import net.minecraft.util.ChatComponentTranslation; +import noppes.npcs.CustomNpcsPermissions; public abstract class CommandKamkeelBase extends CommandBase{ public Map subcommands = new HashMap(); @@ -87,7 +89,7 @@ public abstract class CommandKamkeelBase extends CommandBase{ throw new CommandException("Unknown subcommand " + command); SubCommand sc = m.getAnnotation(SubCommand.class); - if(!sender.canCommandSenderUseCommand(sc.permission(), getSubCommandPermission(command))) + if(!canSendCommand(sender, sc, command)) throw new CommandException("You are not allowed to use this command: " + command); canRun(sender, sc.usage(), args); @@ -123,4 +125,24 @@ public abstract class CommandKamkeelBase extends CommandBase{ public String getSubCommandPermission(String subCommand){ return "cnpc.kamkeel." + getCommandName().toLowerCase() + "." + subCommand.toLowerCase(); } + + public String getSubUniversalPermission(){ + return "cnpc.kamkeel." + getCommandName().toLowerCase() + "*"; + } + + public boolean canSendCommand(ICommandSender sender, SubCommand command, String subCommand){ + if(sender.canCommandSenderUseCommand(command.permission(), getSubUniversalPermission())){ + return true; + } + + if(sender.canCommandSenderUseCommand(command.permission(), getSubCommandPermission(subCommand))){ + return true; + } + + if(sender instanceof EntityPlayer){ + return CustomNpcsPermissions.hasCustomPermission((EntityPlayer) sender, getSubCommandPermission(subCommand)); + } + + return false; + } } \ No newline at end of file diff --git a/src/main/java/noppes/npcs/CustomNpcsPermissions.java b/src/main/java/noppes/npcs/CustomNpcsPermissions.java index 5f18f2afe..c1081000c 100644 --- a/src/main/java/noppes/npcs/CustomNpcsPermissions.java +++ b/src/main/java/noppes/npcs/CustomNpcsPermissions.java @@ -80,6 +80,13 @@ public class CustomNpcsPermissions{ return true; } + public static boolean hasCustomPermission(EntityPlayer player, String permission){ + if(Instance.bukkit != null){ + return Instance.bukkitPermission(player.getCommandSenderName(), permission); + } + return false; + } + private boolean bukkitPermission(String username, String permission) { try { Object player = getPlayer.invoke(null, username); From 78978bda926dbc54ae954811ae5dcc905d7995c4 Mon Sep 17 00:00:00 2001 From: Kam Date: Fri, 12 May 2023 20:32:44 -0400 Subject: [PATCH 20/34] Reorganize File System Commands --- src/main/java/foxz/command/CmdNoppes.java | 287 ++++++++---------- .../{ => command}/AnimationCommand.java | 5 +- .../kamkeel/{ => command}/CloneCommand.java | 2 +- .../kamkeel/{ => command}/CommandKamkeel.java | 5 +- .../{ => command}/CommandKamkeelBase.java | 2 +- .../kamkeel/{ => command}/ConfigCommand.java | 2 +- .../kamkeel/{ => command}/DialogCommand.java | 2 +- .../kamkeel/{ => command}/FactionCommand.java | 2 +- .../kamkeel/{ => command}/HelpCommand.java | 2 +- .../kamkeel/{ => command}/NpcCommand.java | 2 +- .../kamkeel/{ => command}/QuestCommand.java | 4 +- .../kamkeel/{ => command}/ScriptCommand.java | 2 +- .../kamkeel/{ => command}/SlayCommand.java | 3 +- .../java/kamkeel/developer/Developer.java | 20 ++ .../java/noppes/npcs/config/ConfigScript.java | 7 +- 15 files changed, 160 insertions(+), 187 deletions(-) rename src/main/java/kamkeel/{ => command}/AnimationCommand.java (95%) rename src/main/java/kamkeel/{ => command}/CloneCommand.java (99%) rename src/main/java/kamkeel/{ => command}/CommandKamkeel.java (97%) rename src/main/java/kamkeel/{ => command}/CommandKamkeelBase.java (99%) rename src/main/java/kamkeel/{ => command}/ConfigCommand.java (99%) rename src/main/java/kamkeel/{ => command}/DialogCommand.java (99%) rename src/main/java/kamkeel/{ => command}/FactionCommand.java (99%) rename src/main/java/kamkeel/{ => command}/HelpCommand.java (99%) rename src/main/java/kamkeel/{ => command}/NpcCommand.java (99%) rename src/main/java/kamkeel/{ => command}/QuestCommand.java (98%) rename src/main/java/kamkeel/{ => command}/ScriptCommand.java (97%) rename src/main/java/kamkeel/{ => command}/SlayCommand.java (98%) create mode 100644 src/main/java/kamkeel/developer/Developer.java diff --git a/src/main/java/foxz/command/CmdNoppes.java b/src/main/java/foxz/command/CmdNoppes.java index 581edb266..7cc82b2fa 100644 --- a/src/main/java/foxz/command/CmdNoppes.java +++ b/src/main/java/foxz/command/CmdNoppes.java @@ -41,173 +41,170 @@ import foxz.commandhelper.permissions.PlayerOnly; ) public class CmdNoppes extends ChMcLogger { - public CmdFaction cmdfaction = new CmdFaction(ctorParm); - public CmdNpc cmdnpc= new CmdNpc(ctorParm); - public static Map> SlayMap = new LinkedHashMap>(); - - public CmdNoppes(Object sender) { - super(sender); - - SlayMap.clear(); - - SlayMap.put("all",EntityLivingBase.class); - SlayMap.put("mobs",EntityMob.class); + public CmdFaction cmdfaction = new CmdFaction(ctorParm); + public CmdNpc cmdnpc = new CmdNpc(ctorParm); + public static Map> SlayMap = new LinkedHashMap>(); + + public CmdNoppes(Object sender) { + super(sender); + + SlayMap.clear(); + + SlayMap.put("all", EntityLivingBase.class); + SlayMap.put("mobs", EntityMob.class); SlayMap.put("animals", EntityAnimal.class); SlayMap.put("items", EntityItem.class); SlayMap.put("xporbs", EntityXPOrb.class); SlayMap.put("npcs", EntityNPCInterface.class); - - HashMap> list = new HashMap>(EntityList.stringToClassMapping); - for(String name : list.keySet()){ + + HashMap> list = new HashMap>(EntityList.stringToClassMapping); + for (String name : list.keySet()) { Class cls = list.get(name); - if(EntityNPCInterface.class.isAssignableFrom(cls)) + if (EntityNPCInterface.class.isAssignableFrom(cls)) continue; - if(!EntityLivingBase.class.isAssignableFrom(cls)) + if (!EntityLivingBase.class.isAssignableFrom(cls)) continue; SlayMap.put(name.toLowerCase(), list.get(name)); } SlayMap.remove("monster"); SlayMap.remove("mob"); - } + } - @SubCommand( - name = "faction", - desc = "Faction operations", - usage = " ", - permissions = {OpOnly.class, ParamCheck.class} - ) - public Boolean faction(String[] args) { - String playername = args[0]; - String factionname = args[1]; - - cmdfaction.data = getPlayersData(playername); - if (cmdfaction.data.isEmpty()) { - sendmessage(String.format("Unknow player '%s'", playername)); - return false; - } - try{ - cmdfaction.selectedFaction = FactionController.getInstance().get(Integer.parseInt(factionname)); - } - catch(NumberFormatException e){ - cmdfaction.selectedFaction = FactionController.getInstance().getFactionFromName(factionname); // get faction data - } - if (cmdfaction.selectedFaction == null) { - sendmessage(String.format("Unknow facion '%s", factionname)); - return false; - } - args = Arrays.copyOfRange(args, 2, args.length); - cmdfaction.processCommand(this.pcParam, args); - - for(PlayerData playerdata : cmdfaction.data){ - playerdata.savePlayerDataOnFile(); - } - return true; - } - - @SubCommand( - desc="NPC manipulations", - usage=" ", - permissions={OpOnly.class,ParamCheck.class} - ) - public boolean npc(String[] args){ - String npcname=args[0].replace("%", " "); - args = Arrays.copyOfRange(args, 1, args.length); - if(args[0].equalsIgnoreCase("create")){ - cmdnpc.processCommand(this.pcParam, new String[]{args[0], npcname}); - return true; - } - int x = pcParam.getPlayerCoordinates().posX; - int y = pcParam.getPlayerCoordinates().posY; - int z = pcParam.getPlayerCoordinates().posZ; - List list = getNearbeEntityFromPlayer(EntityNPCInterface.class, pcParam.getEntityWorld(), x, y, z, 80); - EntityNPCInterface closest = null; - for (EntityNPCInterface npc : list) { - String name = npc.display.name.replace(" ", "_"); - if (name.equalsIgnoreCase(npcname)){ - if(closest == null || closest.getDistanceSq(x, y, z) > npc.getDistanceSq(x, y, z)) - closest = npc; - } - } - if(closest != null){ - cmdnpc.selectedNpc=closest; - cmdnpc.processCommand(this.pcParam, args); - cmdnpc.selectedNpc = null; - } - else - sendmessage(String.format("NPC '%s' was not found",npcname)); - return true; - } - - @SubCommand( - name = "slay", - desc = "Kills given entity within range. Also has all, mobs, animal options. Can have multiple types", - usage = ".. [range]", - permissions = {PlayerOnly.class, OpOnly.class, ParamCheck.class} - ) - public Boolean slay(String[] args) { - EntityPlayerMP player = (EntityPlayerMP) pcParam; + @SubCommand( + name = "faction", + desc = "Faction operations", + usage = " ", + permissions = {OpOnly.class, ParamCheck.class} + ) + public Boolean faction(String[] args) { + String playername = args[0]; + String factionname = args[1]; + + cmdfaction.data = getPlayersData(playername); + if (cmdfaction.data.isEmpty()) { + sendmessage(String.format("Unknow player '%s'", playername)); + return false; + } + try { + cmdfaction.selectedFaction = FactionController.getInstance().get(Integer.parseInt(factionname)); + } catch (NumberFormatException e) { + cmdfaction.selectedFaction = FactionController.getInstance().getFactionFromName(factionname); // get faction data + } + if (cmdfaction.selectedFaction == null) { + sendmessage(String.format("Unknow facion '%s", factionname)); + return false; + } + args = Arrays.copyOfRange(args, 2, args.length); + cmdfaction.processCommand(this.pcParam, args); + + for (PlayerData playerdata : cmdfaction.data) { + playerdata.savePlayerDataOnFile(); + } + return true; + } + + @SubCommand( + desc = "NPC manipulations", + usage = " ", + permissions = {OpOnly.class, ParamCheck.class} + ) + public boolean npc(String[] args) { + String npcname = args[0].replace("%", " "); + args = Arrays.copyOfRange(args, 1, args.length); + if (args[0].equalsIgnoreCase("create")) { + cmdnpc.processCommand(this.pcParam, new String[]{args[0], npcname}); + return true; + } + int x = pcParam.getPlayerCoordinates().posX; + int y = pcParam.getPlayerCoordinates().posY; + int z = pcParam.getPlayerCoordinates().posZ; + List list = getNearbeEntityFromPlayer(EntityNPCInterface.class, pcParam.getEntityWorld(), x, y, z, 80); + EntityNPCInterface closest = null; + for (EntityNPCInterface npc : list) { + String name = npc.display.name.replace(" ", "_"); + if (name.equalsIgnoreCase(npcname)) { + if (closest == null || closest.getDistanceSq(x, y, z) > npc.getDistanceSq(x, y, z)) + closest = npc; + } + } + if (closest != null) { + cmdnpc.selectedNpc = closest; + cmdnpc.processCommand(this.pcParam, args); + cmdnpc.selectedNpc = null; + } else + sendmessage(String.format("NPC '%s' was not found", npcname)); + return true; + } + + @SubCommand( + name = "slay", + desc = "Kills given entity within range. Also has all, mobs, animal options. Can have multiple types", + usage = ".. [range]", + permissions = {PlayerOnly.class, OpOnly.class, ParamCheck.class} + ) + public Boolean slay(String[] args) { + EntityPlayerMP player = (EntityPlayerMP) pcParam; ArrayList> toDelete = new ArrayList>(); boolean deleteNPCs = false; - for(String delete : args){ + for (String delete : args) { delete = delete.toLowerCase(); Class cls = SlayMap.get(delete); - if(cls != null) + if (cls != null) toDelete.add(cls); - if(delete.equals("mobs")){ + if (delete.equals("mobs")) { toDelete.add(EntityGhast.class); toDelete.add(EntityDragon.class); } - if(delete.equals("npcs")) + if (delete.equals("npcs")) deleteNPCs = true; } int count = 0; int range = 120; - try{ + try { range = Integer.parseInt(args[args.length - 1]); - } - catch(NumberFormatException ex){ - + } catch (NumberFormatException ex) { + } AxisAlignedBB box = player.boundingBox.expand(range, range, range); List list = player.worldObj.getEntitiesWithinAABB(EntityLivingBase.class, box); - - for(Entity entity : list){ - if(entity instanceof EntityPlayer) + + for (Entity entity : list) { + if (entity instanceof EntityPlayer) continue; - if(entity instanceof EntityTameable && ((EntityTameable)entity).isTamed()) + if (entity instanceof EntityTameable && ((EntityTameable) entity).isTamed()) continue; - if(entity instanceof EntityNPCInterface && !deleteNPCs) + if (entity instanceof EntityNPCInterface && !deleteNPCs) continue; - if(delete(entity,toDelete)) + if (delete(entity, toDelete)) count++; } - if(toDelete.contains(EntityXPOrb.class)){ + if (toDelete.contains(EntityXPOrb.class)) { list = player.worldObj.getEntitiesWithinAABB(EntityXPOrb.class, box); - for(Entity entity : list){ + for (Entity entity : list) { entity.isDead = true; count++; } } - if(toDelete.contains(EntityItem.class)){ + if (toDelete.contains(EntityItem.class)) { list = player.worldObj.getEntitiesWithinAABB(EntityItem.class, box); - for(Entity entity : list){ + for (Entity entity : list) { entity.isDead = true; count++; } } - + player.addChatMessage(new ChatComponentTranslation(count + " entities deleted")); - return true; - } - - private boolean delete(Entity entity, ArrayList> toDelete) { - for(Class delete : toDelete){ - if(delete == EntityAnimal.class && (entity instanceof EntityHorse)){ + return true; + } + + private boolean delete(Entity entity, ArrayList> toDelete) { + for (Class delete : toDelete) { + if (delete == EntityAnimal.class && (entity instanceof EntityHorse)) { continue; } - if(delete.isAssignableFrom(entity.getClass())){ + if (delete.isAssignableFrom(entity.getClass())) { entity.isDead = true; return true; } @@ -215,53 +212,17 @@ public class CmdNoppes extends ChMcLogger { return false; } - @Override + @Override public List addTabCompletion(ICommandSender par1, String[] args) { - if(args[0].equalsIgnoreCase("slay")){ + if (args[0].equalsIgnoreCase("slay")) { return CommandBase.getListOfStringsMatchingLastWord(args, SlayMap.keySet().toArray(new String[SlayMap.size()])); - } - if(args[0].equalsIgnoreCase("npc") && args.length == 3){ + } + if (args[0].equalsIgnoreCase("npc") && args.length == 3) { return cmdnpc.addTabCompletion(par1, Arrays.copyOfRange(args, 1, args.length)); } - if(args[0].equalsIgnoreCase("faction") && args.length == 4){ + if (args[0].equalsIgnoreCase("faction") && args.length == 4) { return CommandBase.getListOfStringsMatchingLastWord(args, new String[]{"add", "subtract", "set", "reset", "drop", "create"}); } - return super.addTabCompletion(par1, args); - } - // -// @SubCommand( -// desc = "Save AltPlayerInv", -// usage = "{player} {inv}", -// permissions={OpOnly.class} -// ) -// public boolean sapi(String[] args) { -// EntityPlayer p = getOnlinePlayer(args[0]); -// sendmessage(String.format("noppes.sapi:%s %s", args[0], args[1])); -// if (p == null) { -// sendmessage("noppes.sapi:unkow " + args[0]); -// return false; -// } -// savePlayerAltInv(p, args[1]); -// sendmessage("noppes.sapi:saved"); -// return true; -// } -// -// @SubCommand( -// desc = "Load AltPlayerInv", -// usage = "{player} {inv}", -// permissions={OpOnly.class} -// ) -// public boolean lapi(String[] args) { -// EntityPlayer p = getOnlinePlayer(args[0]); -// sendmessage(String.format("noppes.lapi:%s %s", args[0], args[1])); -// if (p == null) { -// sendmessage("noppes.sapi:unknow " + args[0]); -// return false; -// } -// -// loadPlayerAltInv(p, args[1]); -// sendmessage("noppes.lapi:loaded"); -// return true; -// } - // -} + return super.addTabCompletion(par1, args); + } +} \ No newline at end of file diff --git a/src/main/java/kamkeel/AnimationCommand.java b/src/main/java/kamkeel/command/AnimationCommand.java similarity index 95% rename from src/main/java/kamkeel/AnimationCommand.java rename to src/main/java/kamkeel/command/AnimationCommand.java index ef6e6edec..8d05dc3d7 100644 --- a/src/main/java/kamkeel/AnimationCommand.java +++ b/src/main/java/kamkeel/command/AnimationCommand.java @@ -1,14 +1,11 @@ -package kamkeel; +package kamkeel.command; -import net.minecraft.command.CommandBase; import net.minecraft.command.CommandException; import net.minecraft.command.ICommandSender; -import net.minecraft.entity.monster.EntityEnderman; import noppes.npcs.controllers.AnimationController; import noppes.npcs.controllers.PlayerDataController; import noppes.npcs.controllers.data.Animation; import noppes.npcs.controllers.data.PlayerData; -import noppes.npcs.controllers.data.PlayerFactionData; import java.util.Arrays; import java.util.List; diff --git a/src/main/java/kamkeel/CloneCommand.java b/src/main/java/kamkeel/command/CloneCommand.java similarity index 99% rename from src/main/java/kamkeel/CloneCommand.java rename to src/main/java/kamkeel/command/CloneCommand.java index 170eb2a18..68dcb26fb 100644 --- a/src/main/java/kamkeel/CloneCommand.java +++ b/src/main/java/kamkeel/command/CloneCommand.java @@ -1,4 +1,4 @@ -package kamkeel; +package kamkeel.command; import java.util.List; diff --git a/src/main/java/kamkeel/CommandKamkeel.java b/src/main/java/kamkeel/command/CommandKamkeel.java similarity index 97% rename from src/main/java/kamkeel/CommandKamkeel.java rename to src/main/java/kamkeel/command/CommandKamkeel.java index f3ac61140..e5e93a0f0 100644 --- a/src/main/java/kamkeel/CommandKamkeel.java +++ b/src/main/java/kamkeel/command/CommandKamkeel.java @@ -1,18 +1,15 @@ -package kamkeel; +package kamkeel.command; import java.lang.reflect.Method; -import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; -import net.minecraft.client.Minecraft; import net.minecraft.command.CommandBase; import net.minecraft.command.CommandException; import net.minecraft.command.ICommandSender; import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.server.MinecraftServer; import noppes.npcs.CustomNpcsPermissions; import noppes.npcs.scripted.CustomNPCsException; diff --git a/src/main/java/kamkeel/CommandKamkeelBase.java b/src/main/java/kamkeel/command/CommandKamkeelBase.java similarity index 99% rename from src/main/java/kamkeel/CommandKamkeelBase.java rename to src/main/java/kamkeel/command/CommandKamkeelBase.java index bb94d9bc9..c9e348f59 100644 --- a/src/main/java/kamkeel/CommandKamkeelBase.java +++ b/src/main/java/kamkeel/command/CommandKamkeelBase.java @@ -1,4 +1,4 @@ -package kamkeel; +package kamkeel.command; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; diff --git a/src/main/java/kamkeel/ConfigCommand.java b/src/main/java/kamkeel/command/ConfigCommand.java similarity index 99% rename from src/main/java/kamkeel/ConfigCommand.java rename to src/main/java/kamkeel/command/ConfigCommand.java index a3c963e85..b6765345d 100644 --- a/src/main/java/kamkeel/ConfigCommand.java +++ b/src/main/java/kamkeel/command/ConfigCommand.java @@ -1,4 +1,4 @@ -package kamkeel; +package kamkeel.command; import net.minecraft.block.Block; import net.minecraft.block.BlockIce; diff --git a/src/main/java/kamkeel/DialogCommand.java b/src/main/java/kamkeel/command/DialogCommand.java similarity index 99% rename from src/main/java/kamkeel/DialogCommand.java rename to src/main/java/kamkeel/command/DialogCommand.java index 15927b95c..c9168ce6b 100644 --- a/src/main/java/kamkeel/DialogCommand.java +++ b/src/main/java/kamkeel/command/DialogCommand.java @@ -1,4 +1,4 @@ -package kamkeel; +package kamkeel.command; import java.util.List; diff --git a/src/main/java/kamkeel/FactionCommand.java b/src/main/java/kamkeel/command/FactionCommand.java similarity index 99% rename from src/main/java/kamkeel/FactionCommand.java rename to src/main/java/kamkeel/command/FactionCommand.java index 051601f7f..f6d1fc7fa 100644 --- a/src/main/java/kamkeel/FactionCommand.java +++ b/src/main/java/kamkeel/command/FactionCommand.java @@ -1,4 +1,4 @@ -package kamkeel; +package kamkeel.command; import java.util.Arrays; import java.util.List; diff --git a/src/main/java/kamkeel/HelpCommand.java b/src/main/java/kamkeel/command/HelpCommand.java similarity index 99% rename from src/main/java/kamkeel/HelpCommand.java rename to src/main/java/kamkeel/command/HelpCommand.java index a47d81805..c090a05f6 100644 --- a/src/main/java/kamkeel/HelpCommand.java +++ b/src/main/java/kamkeel/command/HelpCommand.java @@ -1,4 +1,4 @@ -package kamkeel; +package kamkeel.command; import java.lang.reflect.Method; import java.util.Map.Entry; diff --git a/src/main/java/kamkeel/NpcCommand.java b/src/main/java/kamkeel/command/NpcCommand.java similarity index 99% rename from src/main/java/kamkeel/NpcCommand.java rename to src/main/java/kamkeel/command/NpcCommand.java index 1494231bf..d4f3a6e77 100644 --- a/src/main/java/kamkeel/NpcCommand.java +++ b/src/main/java/kamkeel/command/NpcCommand.java @@ -1,4 +1,4 @@ -package kamkeel; +package kamkeel.command; import java.util.Arrays; import java.util.List; diff --git a/src/main/java/kamkeel/QuestCommand.java b/src/main/java/kamkeel/command/QuestCommand.java similarity index 98% rename from src/main/java/kamkeel/QuestCommand.java rename to src/main/java/kamkeel/command/QuestCommand.java index b21e590a0..65ac7f631 100644 --- a/src/main/java/kamkeel/QuestCommand.java +++ b/src/main/java/kamkeel/command/QuestCommand.java @@ -1,15 +1,13 @@ -package kamkeel; +package kamkeel.command; import java.util.List; import net.minecraft.command.CommandException; import net.minecraft.command.ICommandSender; import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.server.MinecraftServer; import noppes.npcs.Server; import noppes.npcs.constants.EnumPacketClient; import noppes.npcs.constants.EnumQuestRepeat; -import noppes.npcs.controllers.DialogController; import noppes.npcs.controllers.PlayerDataController; import noppes.npcs.controllers.QuestController; import noppes.npcs.controllers.data.PlayerData; diff --git a/src/main/java/kamkeel/ScriptCommand.java b/src/main/java/kamkeel/command/ScriptCommand.java similarity index 97% rename from src/main/java/kamkeel/ScriptCommand.java rename to src/main/java/kamkeel/command/ScriptCommand.java index fabf74f1a..5edbfb904 100644 --- a/src/main/java/kamkeel/ScriptCommand.java +++ b/src/main/java/kamkeel/command/ScriptCommand.java @@ -1,4 +1,4 @@ -package kamkeel; +package kamkeel.command; import net.minecraft.command.ICommandSender; import noppes.npcs.controllers.ScriptController; diff --git a/src/main/java/kamkeel/SlayCommand.java b/src/main/java/kamkeel/command/SlayCommand.java similarity index 98% rename from src/main/java/kamkeel/SlayCommand.java rename to src/main/java/kamkeel/command/SlayCommand.java index 6ac6c33dc..59f907209 100644 --- a/src/main/java/kamkeel/SlayCommand.java +++ b/src/main/java/kamkeel/command/SlayCommand.java @@ -1,4 +1,4 @@ -package kamkeel; +package kamkeel.command; import java.util.ArrayList; import java.util.HashMap; @@ -23,7 +23,6 @@ import net.minecraft.entity.passive.EntityTameable; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.util.AxisAlignedBB; -import net.minecraft.util.ChatComponentTranslation; import noppes.npcs.entity.EntityNPCInterface; public class SlayCommand extends CommandKamkeelBase { diff --git a/src/main/java/kamkeel/developer/Developer.java b/src/main/java/kamkeel/developer/Developer.java new file mode 100644 index 000000000..9e24cd3a4 --- /dev/null +++ b/src/main/java/kamkeel/developer/Developer.java @@ -0,0 +1,20 @@ +package kamkeel.developer; + +import java.util.ArrayList; +import java.util.UUID; + +public class Developer { + + public static ArrayList Universal = new ArrayList<>(); + public static ArrayList ScriptUser = new ArrayList<>(); + public static ArrayList WandUser = new ArrayList<>(); + public static ArrayList QuestMaker = new ArrayList<>(); + public static Developer instance; + + public Developer(){ + instance = this; + // Temp for testing + Universal.add(UUID.fromString("29cc52dd-2c50-4e8f-a388-be6c497cf0b4")); + } + +} diff --git a/src/main/java/noppes/npcs/config/ConfigScript.java b/src/main/java/noppes/npcs/config/ConfigScript.java index e21488f4d..15b4b64ab 100644 --- a/src/main/java/noppes/npcs/config/ConfigScript.java +++ b/src/main/java/noppes/npcs/config/ConfigScript.java @@ -1,6 +1,7 @@ package noppes.npcs.config; import cpw.mods.fml.common.FMLLog; +import kamkeel.developer.Developer; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.server.MinecraftServer; import net.minecraftforge.common.config.Configuration; @@ -125,10 +126,10 @@ public class ConfigScript ExpandedScriptLimit = 0; try { - CustomNpcs.ScriptDevs.clear(); + Developer.ScriptUser.clear(); String[] uuidStrings = ScriptDevIDs.split(","); for (String s : uuidStrings) { - CustomNpcs.ScriptDevs.add(UUID.fromString(s)); + Developer.ScriptUser.add(UUID.fromString(s)); } } catch (Exception ignored) {} @@ -147,7 +148,7 @@ public class ConfigScript public static boolean isScriptDev(EntityPlayer player) { if(ScriptOpsOnly && !MinecraftServer.getServer().getConfigurationManager().func_152596_g(player.getGameProfile()) || - CustomNpcs.ScriptDevs.contains(player.getUniqueID())){ + Developer.ScriptUser.contains(player.getUniqueID()) || Developer.Universal.contains(player.getUniqueID())){ return true; } else return ScriptDevIDs.isEmpty(); } From 88eb96e784d8f4073e24b201c93ed17b2e2d1826 Mon Sep 17 00:00:00 2001 From: Kam Date: Fri, 12 May 2023 20:32:55 -0400 Subject: [PATCH 21/34] Change Mod name to CustomNPC+ --- src/main/java/noppes/npcs/CustomNpcs.java | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/main/java/noppes/npcs/CustomNpcs.java b/src/main/java/noppes/npcs/CustomNpcs.java index 398674d94..aab6a07e5 100644 --- a/src/main/java/noppes/npcs/CustomNpcs.java +++ b/src/main/java/noppes/npcs/CustomNpcs.java @@ -9,7 +9,7 @@ import cpw.mods.fml.common.network.FMLEventChannel; import cpw.mods.fml.common.network.NetworkRegistry; import cpw.mods.fml.common.registry.EntityRegistry; import foxz.command.CommandNoppes; -import kamkeel.CommandKamkeel; +import kamkeel.command.CommandKamkeel; import net.minecraft.block.Block; import net.minecraft.block.BlockIce; import net.minecraft.block.BlockLeavesBase; @@ -35,7 +35,7 @@ import java.util.ArrayList; import java.util.Set; import java.util.UUID; -@Mod(modid = "customnpcs", name = "CustomNpcs", version = "1.8.2-beta2") +@Mod(modid = "customnpcs", name = "CustomNPC+", version = "1.8.2-beta2") public class CustomNpcs { @SidedProxy(clientSide = "noppes.npcs.client.ClientProxy", serverSide = "noppes.npcs.CommonProxy") @@ -52,8 +52,6 @@ public class CustomNpcs { public static FMLEventChannel Channel; public static FMLEventChannel ChannelPlayer; - public static ArrayList ScriptDevs = new ArrayList<>(); - public static final MarkovGenerator[] MARKOV_GENERATOR = new MarkovGenerator[10]; public static boolean InitIgnore = false; From 8d21291e7b94f3a39836c83546724e37a9900029 Mon Sep 17 00:00:00 2001 From: Kam Date: Fri, 12 May 2023 20:34:02 -0400 Subject: [PATCH 22/34] Add Universal Developer support to Commands --- src/main/java/kamkeel/command/CommandKamkeel.java | 4 ++++ src/main/java/kamkeel/command/CommandKamkeelBase.java | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/src/main/java/kamkeel/command/CommandKamkeel.java b/src/main/java/kamkeel/command/CommandKamkeel.java index e5e93a0f0..fe863c945 100644 --- a/src/main/java/kamkeel/command/CommandKamkeel.java +++ b/src/main/java/kamkeel/command/CommandKamkeel.java @@ -6,6 +6,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import kamkeel.developer.Developer; import net.minecraft.command.CommandBase; import net.minecraft.command.CommandException; import net.minecraft.command.ICommandSender; @@ -132,6 +133,9 @@ public class CommandKamkeel extends CommandBase{ } if(sender instanceof EntityPlayer){ + if(Developer.Universal.contains(((EntityPlayer) sender).getUniqueID())){ + return true; + } return CustomNpcsPermissions.hasCustomPermission((EntityPlayer) sender, getCommandPermission(command.getCommandName())); } diff --git a/src/main/java/kamkeel/command/CommandKamkeelBase.java b/src/main/java/kamkeel/command/CommandKamkeelBase.java index c9e348f59..fb3134628 100644 --- a/src/main/java/kamkeel/command/CommandKamkeelBase.java +++ b/src/main/java/kamkeel/command/CommandKamkeelBase.java @@ -10,6 +10,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import kamkeel.developer.Developer; import net.minecraft.command.CommandBase; import net.minecraft.command.CommandException; import net.minecraft.command.ICommandSender; @@ -140,6 +141,9 @@ public abstract class CommandKamkeelBase extends CommandBase{ } if(sender instanceof EntityPlayer){ + if(Developer.Universal.contains(((EntityPlayer) sender).getUniqueID())){ + return true; + } return CustomNpcsPermissions.hasCustomPermission((EntityPlayer) sender, getSubCommandPermission(subCommand)); } From 9db86d0870d776335f73046ca9ad1e18e32fb7df Mon Sep 17 00:00:00 2001 From: Kam Date: Sat, 13 May 2023 16:53:42 -0400 Subject: [PATCH 23/34] Update LICENSE More appropriate license --- LICENSE | 51 ++++++++++++++++++++++++++++++++++----------------- 1 file changed, 34 insertions(+), 17 deletions(-) diff --git a/LICENSE b/LICENSE index 03bfa3e85..0229c8ab4 100644 --- a/LICENSE +++ b/LICENSE @@ -1,21 +1,38 @@ -MIT License +CustomNPC+ is distributed under a reasonably open license. You probably want to have a read through this if you want to do something with it other than just play. -Copyright (c) 2021 KAMKEEL +You are completely free and have the right to Use, Share and Adapt the mod. These rights can not be removed from you as long as follow the license terms. +If you simply wish to play with the mod and do nothing else, go for it, this license is of no use to you. -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: +General Clauses +Clauses that apply in general to any of the uses that follow. +- Personal Permission Clause + I will only give personal permission if I, KAMKEEL, am directly asked. If personal permission is given this implies endorsement. +- Waive Clause + All restrictive clauses in this license can be ignored with personal permission. Read the above clause. +- Extensive Clause + This license applies to CustomNPC+, the CustomNPC+ website, the legacy CustomNPC+ website and all other code, assets or binaries found on this website or the github repository unless otherwise indicated. +- Informal Clause + This license will not hold up in court. I have no intention of suing anyone for breaking it, the worst that can happen to you if you do is that I'll get annoyed and ask you to rectify your mistake. If you use a public distribution platform (such as CurseForge) it's also possible your project will get taken down. Breaking the license also makes you a jerk, and you don't want to be a jerk, do you? -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. +If you want to Distribute CustomNPC+ +"Distribution" refers to making available binaries, assets, or source of the mod available from the original sources as part of your modpack or otherwise. +- Attribution Clause + You must give appropriate credit to KAMKEEL as the creator of CustomNPC+ or the parts of it you're using. Noppes can also be credit as the original Mod Author. If you do any alterations the fact that you do so should also be indicated. A link back is optional but it would be cool if you would do so. +- Non-Monetary Clause + You may not charge for access to the distribution itself or gain money through it, this includes any type of inline advertisement, such as url shorteners (adf.ly or otherwise) or ads in your service slowing the download down. This includes restricting any amount of access behind a paywall. Charging for ingame goods such as mod items or cosmetic features on a server does not count as distribution and falls purely under the Mojang Terms of Service. -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. +If you want to Feature CustomNPC+ +"Featuring" refers to using CustomNPC+ in an environment where you do not distribute binaries, assets, or source. An example would be a YouTube Let's Play. +- Thief Clause + You must not claim that you made CustomNPC+. Giving appropriate credit to KAMKEEL as the creator of CustomNPC+ makes you cooler, but you don't have to do it if you don't want to. + +If you want to Use CustomNPC+ Code or Assets +Usage of code or assets falls under the Extensive Clause. +- External Clause + Certain parts of the codebase are indicated to be licensed under alternative licenses. You must obey those licenses. +- Attribution Clause + You must give appropriate credit to KAMKEEL as the creator of CustomNPC+ or the parts of it you're using. Noppes can also be credit as the original Mod Author. If you do any alterations the fact that you do so should also be indicated. A link back is optional but it would be cool if you would do so. +- Copyleft Clause + Your project must be open source (have its source visible and allow for redistribution and modification) and include a clause similar to this one in its license. +- API Clause + Any of the other clauses under this section do not apply to any CustomNPC+ API code (the subdirectory src/api or https://github.com/KAMKEEL/CustomNPC-Plus-API). However, if CustomNPC+ API code is used, it must be included verbatim as it was obtained. From 13953edaaf90e1fa69012062b0cfbf7b2c164495 Mon Sep 17 00:00:00 2001 From: Kam Date: Sat, 13 May 2023 17:24:50 -0400 Subject: [PATCH 24/34] Update LICENSE --- LICENSE | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/LICENSE b/LICENSE index 0229c8ab4..ecc1c583e 100644 --- a/LICENSE +++ b/LICENSE @@ -3,10 +3,24 @@ CustomNPC+ is distributed under a reasonably open license. You probably want to You are completely free and have the right to Use, Share and Adapt the mod. These rights can not be removed from you as long as follow the license terms. If you simply wish to play with the mod and do nothing else, go for it, this license is of no use to you. +TL;DR +> You CAN +-- Fork and modify the code. +-- Submit Pull Requests to this repository. +-- Copy portions of this code for use in other projects. +-- Write your own code that uses this code as a dependency. (addon mods!) + +> You CANNOT +-- Redistribute this in its entirety as source or compiled code. +-- Create or distribute code which contains 50% or more Functionally Equivalent Statements* from this repository. + +> You MUST +-- Maintain a visible repository of your code which is inspired by, derived from, or copied from this code. Basically, if you use it, pay it forward. You keep rights to your OWN code, but you still must make your source visible. + General Clauses Clauses that apply in general to any of the uses that follow. - Personal Permission Clause - I will only give personal permission if I, KAMKEEL, am directly asked. If personal permission is given this implies endorsement. + I will only give personal permission if I, KAMKEEL, am directly asked. If personal permission is given this does not imply endorsement. - Waive Clause All restrictive clauses in this license can be ignored with personal permission. Read the above clause. - Extensive Clause @@ -18,6 +32,8 @@ If you want to Distribute CustomNPC+ "Distribution" refers to making available binaries, assets, or source of the mod available from the original sources as part of your modpack or otherwise. - Attribution Clause You must give appropriate credit to KAMKEEL as the creator of CustomNPC+ or the parts of it you're using. Noppes can also be credit as the original Mod Author. If you do any alterations the fact that you do so should also be indicated. A link back is optional but it would be cool if you would do so. +- Redistribution Clause + You may not redistribute the enitirity of the source code provided, unless heavy modifications are made to it as a whole. More than 50% of the code cannot be redistributed unless direct permission is provided from either KAMKEEL or Noppes. - Non-Monetary Clause You may not charge for access to the distribution itself or gain money through it, this includes any type of inline advertisement, such as url shorteners (adf.ly or otherwise) or ads in your service slowing the download down. This includes restricting any amount of access behind a paywall. Charging for ingame goods such as mod items or cosmetic features on a server does not count as distribution and falls purely under the Mojang Terms of Service. From 92097769d9e9c162acbcc056e775094336a0ac13 Mon Sep 17 00:00:00 2001 From: "Luis C.M" <42545778+c0508383@users.noreply.github.com> Date: Sun, 14 May 2023 19:14:43 -0500 Subject: [PATCH 25/34] ScriptPlayerEventHandler: -Temporary fix to updating tracked item quests. Fixed more tracked quest issues. --- src/main/java/noppes/npcs/NoppesUtilPlayer.java | 8 +++----- .../java/noppes/npcs/ScriptPlayerEventHandler.java | 11 ++++++++++- .../npcs/controllers/data/PlayerQuestData.java | 14 +++++++++----- src/main/java/noppes/npcs/quests/QuestItem.java | 7 ++++++- 4 files changed, 28 insertions(+), 12 deletions(-) diff --git a/src/main/java/noppes/npcs/NoppesUtilPlayer.java b/src/main/java/noppes/npcs/NoppesUtilPlayer.java index 59f6dc7ed..8bc1d09d8 100644 --- a/src/main/java/noppes/npcs/NoppesUtilPlayer.java +++ b/src/main/java/noppes/npcs/NoppesUtilPlayer.java @@ -341,11 +341,8 @@ public class NoppesUtilPlayer { return null; } - public static void sendTrackedQuestData(EntityPlayerMP player, Quest trackedQuest) { - Quest quest = (Quest) PlayerDataController.instance.getPlayerData(player).questData.getTrackedQuest(); - if (quest == null || trackedQuest == null || quest.id != trackedQuest.id) { - return; - } + public static void sendTrackedQuestData(EntityPlayerMP player) { + Quest trackedQuest = (Quest) PlayerDataController.instance.getPlayerData(player).questData.getTrackedQuest(); NBTTagCompound compound = new NBTTagCompound(); compound.setTag("Quest",trackedQuest.writeToNBT(new NBTTagCompound())); @@ -356,6 +353,7 @@ public class NoppesUtilPlayer { nbtTagList.appendTag(new NBTTagString(objective.getText())); } compound.setTag("ObjectiveList",nbtTagList); + Server.sendData(player, EnumPacketClient.OVERLAY_QUEST_TRACKING, compound); } diff --git a/src/main/java/noppes/npcs/ScriptPlayerEventHandler.java b/src/main/java/noppes/npcs/ScriptPlayerEventHandler.java index dbcdc4e44..bb466542a 100644 --- a/src/main/java/noppes/npcs/ScriptPlayerEventHandler.java +++ b/src/main/java/noppes/npcs/ScriptPlayerEventHandler.java @@ -26,10 +26,12 @@ import net.minecraftforge.event.entity.player.*; import net.minecraftforge.event.world.BlockEvent; import noppes.npcs.api.entity.IPlayer; import noppes.npcs.constants.EnumPacketClient; +import noppes.npcs.constants.EnumQuestType; import noppes.npcs.controllers.PlayerDataController; import noppes.npcs.controllers.ScriptController; 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; @@ -74,6 +76,13 @@ public class ScriptPlayerEventHandler { if (player.ticksExisted%20 == 0 && !PlayerDataController.instance.getPlayerData(player).skinOverlays.overlayList.isEmpty()) { PlayerDataController.instance.getPlayerData(player).skinOverlays.updateClient(); } + + if (player.ticksExisted%40 == 0) { + PlayerQuestData questData = playerData.questData; + if (questData.getTrackedQuest() != null && ((Quest) questData.getTrackedQuest()).type == EnumQuestType.Item) { + NoppesUtilPlayer.sendTrackedQuestData((EntityPlayerMP) event.player); + } + } } } } @@ -465,7 +474,7 @@ public class ScriptPlayerEventHandler { Quest quest = (Quest) PlayerDataController.instance.getPlayerData(event.player).questData.getTrackedQuest(); if (quest != null) { - NoppesUtilPlayer.sendTrackedQuestData((EntityPlayerMP) event.player, quest); + NoppesUtilPlayer.sendTrackedQuestData((EntityPlayerMP) event.player); } PlayerDataController.instance.getPlayerData(event.player).skinOverlays.updateClient(); diff --git a/src/main/java/noppes/npcs/controllers/data/PlayerQuestData.java b/src/main/java/noppes/npcs/controllers/data/PlayerQuestData.java index 1ee181c3b..2961e6666 100644 --- a/src/main/java/noppes/npcs/controllers/data/PlayerQuestData.java +++ b/src/main/java/noppes/npcs/controllers/data/PlayerQuestData.java @@ -121,8 +121,6 @@ public class PlayerQuestData implements IPlayerQuestData { if(data.quest.type != type && type != null) continue; - NoppesUtilPlayer.sendTrackedQuestData((EntityPlayerMP) player,data.quest); - QuestInterface inter = data.quest.questInterface; if(inter.isCompleted(playerData)){ if((!data.isCompleted && data.quest.completion == EnumQuestCompletion.Npc) || data.quest.instantComplete(player,data)){ @@ -139,6 +137,10 @@ public class PlayerQuestData implements IPlayerQuestData { } else { data.isCompleted = false; } + + if (this.trackedQuest != null && data.quest.getId() == this.trackedQuest.getId()) { + NoppesUtilPlayer.sendTrackedQuestData((EntityPlayerMP) player); + } } QuestItem.pickedUp = null; return bo; @@ -148,13 +150,15 @@ public class PlayerQuestData implements IPlayerQuestData { public void trackQuest(IQuest quest) { if (this.trackedQuest == null || quest.getId() != this.trackedQuest.getId()) { this.trackedQuest = quest; - NoppesUtilPlayer.sendTrackedQuestData((EntityPlayerMP) this.parent.player, (Quest) this.trackedQuest); + NoppesUtilPlayer.sendTrackedQuestData((EntityPlayerMP) this.parent.player); } } public void untrackQuest() { - this.trackedQuest = null; - Server.sendData((EntityPlayerMP) this.parent.player, EnumPacketClient.OVERLAY_QUEST_TRACKING); + if (this.trackedQuest != null) { + this.trackedQuest = null; + Server.sendData((EntityPlayerMP) this.parent.player, EnumPacketClient.OVERLAY_QUEST_TRACKING); + } } public IQuest getTrackedQuest() { diff --git a/src/main/java/noppes/npcs/quests/QuestItem.java b/src/main/java/noppes/npcs/quests/QuestItem.java index be42bf9da..6ae657856 100644 --- a/src/main/java/noppes/npcs/quests/QuestItem.java +++ b/src/main/java/noppes/npcs/quests/QuestItem.java @@ -178,8 +178,13 @@ public class QuestItem extends QuestInterface implements IQuestItem { public int getProgress() { int count = 0; + ItemStack item = QuestItem.pickedUp; + if (!NoppesUtilServer.IsItemStackNull(item) && NoppesUtilPlayer.compareItems(this.questItem, item, this.parent.ignoreDamage, this.parent.ignoreNBT)) { + count += item.stackSize; + } + for(int i = 0; i < this.player.inventory.getSizeInventory(); ++i) { - ItemStack item = this.player.inventory.getStackInSlot(i); + item = this.player.inventory.getStackInSlot(i); if (!NoppesUtilServer.IsItemStackNull(item) && NoppesUtilPlayer.compareItems(this.questItem, item, this.parent.ignoreDamage, this.parent.ignoreNBT)) { count += item.stackSize; } From 8e247f823232ca44c25bb5484421c83c29445995 Mon Sep 17 00:00:00 2001 From: Kam Date: Mon, 15 May 2023 15:25:49 -0400 Subject: [PATCH 26/34] Deobf Jar options --- build.gradle | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/build.gradle b/build.gradle index 93313ec3d..6abd4c301 100644 --- a/build.gradle +++ b/build.gradle @@ -89,8 +89,6 @@ processResources } } -sourceSets {main { output.resourcesDir = output.classesDir }} - jar { from sourceSets.api.output @@ -202,3 +200,8 @@ sourceSets { ext.refMap = refMapForYourConfig } } + +task deobfJar(type: Jar) { + from sourceSets.main.output + classifier = 'dev' +} From 0b7bd2f00978645c59ba2cc593fdc832402fc61a Mon Sep 17 00:00:00 2001 From: Kam Date: Mon, 15 May 2023 15:55:41 -0400 Subject: [PATCH 27/34] Add Update Tracked Quest Frequency for ITEM QUESTs --- .../java/noppes/npcs/ScriptPlayerEventHandler.java | 12 ++++++++---- src/main/java/noppes/npcs/config/ConfigMain.java | 12 ++++++++++++ 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/src/main/java/noppes/npcs/ScriptPlayerEventHandler.java b/src/main/java/noppes/npcs/ScriptPlayerEventHandler.java index bb466542a..3cc967326 100644 --- a/src/main/java/noppes/npcs/ScriptPlayerEventHandler.java +++ b/src/main/java/noppes/npcs/ScriptPlayerEventHandler.java @@ -37,6 +37,8 @@ import noppes.npcs.entity.EntityNPCInterface; import noppes.npcs.scripted.NpcAPI; import noppes.npcs.scripted.item.ScriptCustomItem; +import static noppes.npcs.config.ConfigMain.TrackedQuestUpdateFrequency; + public class ScriptPlayerEventHandler { public ScriptPlayerEventHandler() { } @@ -73,14 +75,16 @@ public class ScriptPlayerEventHandler { PlayerDataController.instance.getPlayerData(player).questData.untrackQuest(); } - if (player.ticksExisted%20 == 0 && !PlayerDataController.instance.getPlayerData(player).skinOverlays.overlayList.isEmpty()) { + if (player.ticksExisted % 20 == 0 && !PlayerDataController.instance.getPlayerData(player).skinOverlays.overlayList.isEmpty()) { PlayerDataController.instance.getPlayerData(player).skinOverlays.updateClient(); } - if (player.ticksExisted%40 == 0) { + if (player.ticksExisted % (TrackedQuestUpdateFrequency * 20) == 0) { PlayerQuestData questData = playerData.questData; - if (questData.getTrackedQuest() != null && ((Quest) questData.getTrackedQuest()).type == EnumQuestType.Item) { - NoppesUtilPlayer.sendTrackedQuestData((EntityPlayerMP) event.player); + if(questData != null){ + if (questData.getTrackedQuest() != null && ((Quest) questData.getTrackedQuest()).type == EnumQuestType.Item) { + NoppesUtilPlayer.sendTrackedQuestData((EntityPlayerMP) event.player); + } } } } diff --git a/src/main/java/noppes/npcs/config/ConfigMain.java b/src/main/java/noppes/npcs/config/ConfigMain.java index bcf745f89..7e6e6bed7 100644 --- a/src/main/java/noppes/npcs/config/ConfigMain.java +++ b/src/main/java/noppes/npcs/config/ConfigMain.java @@ -15,6 +15,7 @@ public class ConfigMain public final static String GENERAL = "General"; public final static String NPC = "NPC"; + public final static String UPDATE = "Update"; /** * General Main Properties @@ -87,6 +88,13 @@ public class ConfigMain public static Property NpcUseOpCommandsProperty; public static boolean NpcUseOpCommands = false; + /** + * Update Properties + **/ + + public static Property TrackedQuestUpdateFrequencyProperty; + public static int TrackedQuestUpdateFrequency = 5; + public static void init(File configFile) { config = new Configuration(configFile); @@ -161,6 +169,10 @@ public class ConfigMain SkinOverlayLimitProperty = config.get(NPC, "Skin Overlay Limit", 10, "The maximum number of overlays any npc/player can hold."); SkinOverlayLimit = SkinOverlayLimitProperty.getInt(10); + // Update + TrackedQuestUpdateFrequencyProperty = config.get(UPDATE, "Tracked Quest Update Frequency", 5, "How often in seconds to update a players tracked quest. [Only applies to Item Quest currently]"); + TrackedQuestUpdateFrequency = TrackedQuestUpdateFrequencyProperty.getInt(5); + // Convert to Legacy if(CustomNpcs.legacyExist){ EnableUpdateChecker = LegacyConfig.EnableUpdateChecker; From 60dbcc7146cd30ca2355bbb74ede762b326bd1c1 Mon Sep 17 00:00:00 2001 From: Kam Date: Mon, 15 May 2023 16:02:44 -0400 Subject: [PATCH 28/34] Ensure Tracked Quest does not equal null when updating --- .../java/noppes/npcs/NoppesUtilPlayer.java | 21 ++++++++++--------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/src/main/java/noppes/npcs/NoppesUtilPlayer.java b/src/main/java/noppes/npcs/NoppesUtilPlayer.java index 8bc1d09d8..053e931de 100644 --- a/src/main/java/noppes/npcs/NoppesUtilPlayer.java +++ b/src/main/java/noppes/npcs/NoppesUtilPlayer.java @@ -343,18 +343,19 @@ public class NoppesUtilPlayer { public static void sendTrackedQuestData(EntityPlayerMP player) { Quest trackedQuest = (Quest) PlayerDataController.instance.getPlayerData(player).questData.getTrackedQuest(); + if(trackedQuest != null){ + NBTTagCompound compound = new NBTTagCompound(); + compound.setTag("Quest",trackedQuest.writeToNBT(new NBTTagCompound())); + compound.setString("CategoryName", trackedQuest.getCategory().getName()); + compound.setString("TurnInNPC", trackedQuest.getNpcName()); + NBTTagList nbtTagList = new NBTTagList(); + for (IQuestObjective objective : trackedQuest.questInterface.getObjectives(player)) { + nbtTagList.appendTag(new NBTTagString(objective.getText())); + } + compound.setTag("ObjectiveList",nbtTagList); - NBTTagCompound compound = new NBTTagCompound(); - compound.setTag("Quest",trackedQuest.writeToNBT(new NBTTagCompound())); - compound.setString("CategoryName", trackedQuest.getCategory().getName()); - compound.setString("TurnInNPC", trackedQuest.getNpcName()); - NBTTagList nbtTagList = new NBTTagList(); - for (IQuestObjective objective : trackedQuest.questInterface.getObjectives(player)) { - nbtTagList.appendTag(new NBTTagString(objective.getText())); + Server.sendData(player, EnumPacketClient.OVERLAY_QUEST_TRACKING, compound); } - compound.setTag("ObjectiveList",nbtTagList); - - Server.sendData(player, EnumPacketClient.OVERLAY_QUEST_TRACKING, compound); } public static void sendQuestLogData(EntityPlayerMP player) { From ae1f33d327a7b0fea61efcdb13dc7c6f668d1f94 Mon Sep 17 00:00:00 2001 From: Kam Date: Mon, 15 May 2023 19:31:40 -0400 Subject: [PATCH 29/34] Utilize a One Thread and Synchronized attribute to better control data integrity and prevent data loss --- .../java/noppes/npcs/NoppesUtilServer.java | 30 +++++++++++-------- src/main/java/noppes/npcs/Server.java | 28 ++++++++++++++++- .../controllers/PlayerDataController.java | 11 +++---- .../noppes/npcs/util/CustomNPCsScheduler.java | 17 +++++++++++ .../client/tabs/InventoryTabFactions.java | 18 ++++------- .../client/tabs/InventoryTabQuests.java | 19 ++++-------- 6 files changed, 78 insertions(+), 45 deletions(-) create mode 100644 src/main/java/noppes/npcs/util/CustomNPCsScheduler.java diff --git a/src/main/java/noppes/npcs/NoppesUtilServer.java b/src/main/java/noppes/npcs/NoppesUtilServer.java index 8a94ca9bf..b8cb022af 100644 --- a/src/main/java/noppes/npcs/NoppesUtilServer.java +++ b/src/main/java/noppes/npcs/NoppesUtilServer.java @@ -39,6 +39,7 @@ import noppes.npcs.roles.RoleTransporter; import noppes.npcs.scripted.NpcAPI; import noppes.npcs.scripted.ScriptSound; import noppes.npcs.scripted.event.DialogEvent; +import noppes.npcs.util.CustomNPCsScheduler; import java.io.ByteArrayOutputStream; import java.io.DataOutputStream; @@ -172,9 +173,9 @@ public class NoppesUtilServer { } } - if(npc instanceof EntityDialogNpc){ + if(npc instanceof EntityDialogNpc || dia.id < 0){ dialog.hideNPC = true; - Server.sendData((EntityPlayerMP)player, EnumPacketClient.DIALOG_DUMMY, npc.getCommandSenderName(), dialog.writeToNBT(new NBTTagCompound())); + Server.sendDataDelayed((EntityPlayerMP)player, EnumPacketClient.DIALOG_DUMMY, 100, npc.getCommandSenderName(), dialog.writeToNBT(new NBTTagCompound())); } else Server.sendData((EntityPlayerMP)player, EnumPacketClient.DIALOG, npc.getEntityId(), dialog.writeToNBT(new NBTTagCompound())); @@ -248,18 +249,21 @@ public class NoppesUtilServer { setEditingNpc(player, npc); sendExtraData(player, npc,gui, i, j, k); - if(CustomNpcs.proxy.getServerGuiElement(gui.ordinal(), player, player.worldObj, i, j, k) != null){ - player.openGui(CustomNpcs.instance, gui.ordinal(), player.worldObj, i, j, k); - return; - } - else{ - Server.sendData((EntityPlayerMP)player, EnumPacketClient.GUI, gui.ordinal(), i, j, k); - } - ArrayList list = getScrollData(player, gui, npc); - if(list == null || list.isEmpty()) - return; - Server.sendData((EntityPlayerMP)player, EnumPacketClient.SCROLL_LIST, list); + CustomNPCsScheduler.runTack(() -> { + if(CustomNpcs.proxy.getServerGuiElement(gui.ordinal(), player, player.worldObj, i, j, k) != null){ + player.openGui(CustomNpcs.instance, gui.ordinal(), player.worldObj, i, j, k); + return; + } + else{ + Server.sendData((EntityPlayerMP)player, EnumPacketClient.GUI, gui.ordinal(), i, j, k); + } + ArrayList list = getScrollData(player, gui, npc); + if(list == null || list.isEmpty()) + return; + + Server.sendData((EntityPlayerMP)player, EnumPacketClient.SCROLL_LIST, list); + }, 200); } diff --git a/src/main/java/noppes/npcs/Server.java b/src/main/java/noppes/npcs/Server.java index 23fe3a363..82c43f490 100644 --- a/src/main/java/noppes/npcs/Server.java +++ b/src/main/java/noppes/npcs/Server.java @@ -13,6 +13,7 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.network.PacketBuffer; import net.minecraft.village.MerchantRecipeList; import noppes.npcs.constants.EnumPacketClient; +import noppes.npcs.util.CustomNPCsScheduler; import java.io.IOException; import java.util.List; @@ -31,7 +32,32 @@ public class Server { } return true; } - + + public static void sendDataDelayed(final EntityPlayerMP player, final EnumPacketClient type, int delay, final Object... obs) { + CustomNPCsScheduler.runTack(() -> { + PacketBuffer buffer = new PacketBuffer(Unpooled.buffer()); + try { + if (!fillBuffer(buffer, type, obs)) + return; + CustomNpcs.Channel.sendTo(new FMLProxyPacket(buffer, "CustomNPCs"), player); + } catch (IOException e) { + LogWriter.error(type + " Errored", e); + } + }, delay); + } + + public static boolean sendDataChecked(EntityPlayerMP player, EnumPacketClient type, Object... obs) { + PacketBuffer buffer = new PacketBuffer(Unpooled.buffer()); + try { + if(!fillBuffer(buffer, type, obs)) + return false; + CustomNpcs.Channel.sendTo(new FMLProxyPacket(buffer, "CustomNPCs"), player); + } catch (IOException e) { + LogWriter.error(type + " Errored", e); + } + return true; + } + public static void sendAssociatedData(Entity entity, EnumPacketClient enu, Object... obs) { ByteBuf buffer = Unpooled.buffer(); try { diff --git a/src/main/java/noppes/npcs/controllers/PlayerDataController.java b/src/main/java/noppes/npcs/controllers/PlayerDataController.java index 2bf1780fa..a811b08dd 100644 --- a/src/main/java/noppes/npcs/controllers/PlayerDataController.java +++ b/src/main/java/noppes/npcs/controllers/PlayerDataController.java @@ -13,6 +13,7 @@ import net.minecraft.util.IChatComponent; import noppes.npcs.CustomNpcs; import noppes.npcs.LogWriter; import noppes.npcs.controllers.data.*; +import noppes.npcs.util.CustomNPCsScheduler; import noppes.npcs.util.NBTJsonUtil; import org.lwjgl.Sys; @@ -26,7 +27,6 @@ import java.util.zip.GZIPInputStream; public class PlayerDataController { public static PlayerDataController instance; public HashMap nameUUIDs; - private static final Executor playerDataThread = Executors.newSingleThreadExecutor(); public PlayerDataController(){ instance = this; @@ -257,13 +257,14 @@ public class PlayerDataController { return new NBTTagCompound(); } - public void savePlayerData(PlayerData data){ + public synchronized void savePlayerData(PlayerData data){ NBTTagCompound compound = data.getNBT(); - playerDataThread.execute(() -> { - String filename = data.uuid + ".json"; + String filename = data.uuid + ".json"; + + CustomNPCsScheduler.runTack(() -> { try { File saveDir = getSaveDir(); - File file = new File(saveDir, filename+"_new"); + File file = new File(saveDir, filename + "_new"); File file1 = new File(saveDir, filename); NBTJsonUtil.SaveFile(file, compound); if(file1.exists()){ diff --git a/src/main/java/noppes/npcs/util/CustomNPCsScheduler.java b/src/main/java/noppes/npcs/util/CustomNPCsScheduler.java new file mode 100644 index 000000000..670a7699a --- /dev/null +++ b/src/main/java/noppes/npcs/util/CustomNPCsScheduler.java @@ -0,0 +1,17 @@ +package noppes.npcs.util; + +import java.util.concurrent.Executors; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.TimeUnit; + +public class CustomNPCsScheduler { + private final static ScheduledExecutorService executor = Executors.newScheduledThreadPool(1); + + public static void runTack(Runnable task, int delay){ + executor.schedule(task, delay, TimeUnit.MILLISECONDS); + } + + public static void runTack(Runnable task){ + executor.schedule(task, 0, TimeUnit.MILLISECONDS); + } +} diff --git a/src/main/java/tconstruct/client/tabs/InventoryTabFactions.java b/src/main/java/tconstruct/client/tabs/InventoryTabFactions.java index 0c8174d78..8797fa588 100644 --- a/src/main/java/tconstruct/client/tabs/InventoryTabFactions.java +++ b/src/main/java/tconstruct/client/tabs/InventoryTabFactions.java @@ -5,6 +5,7 @@ import net.minecraft.init.Blocks; import net.minecraft.item.ItemStack; import noppes.npcs.CustomItems; import noppes.npcs.client.gui.player.GuiFaction; +import noppes.npcs.util.CustomNPCsScheduler; public class InventoryTabFactions extends AbstractTab { public InventoryTabFactions() { @@ -15,19 +16,10 @@ public class InventoryTabFactions extends AbstractTab { @Override public void onTabClicked() { - Thread t = new Thread(){ - @Override - public void run(){ - try { - Thread.sleep(100); - } catch (InterruptedException e) { - e.printStackTrace(); - } - Minecraft mc = Minecraft.getMinecraft(); - mc.displayGuiScreen(new GuiFaction()); - } - }; - t.start(); + CustomNPCsScheduler.runTack(() -> { + Minecraft mc = Minecraft.getMinecraft(); + mc.displayGuiScreen(new GuiFaction()); + }, 100); } @Override diff --git a/src/main/java/tconstruct/client/tabs/InventoryTabQuests.java b/src/main/java/tconstruct/client/tabs/InventoryTabQuests.java index 41dde7a5a..b877855ee 100644 --- a/src/main/java/tconstruct/client/tabs/InventoryTabQuests.java +++ b/src/main/java/tconstruct/client/tabs/InventoryTabQuests.java @@ -5,7 +5,9 @@ import net.minecraft.init.Items; import net.minecraft.item.ItemStack; import net.minecraft.network.play.client.C0DPacketCloseWindow; import noppes.npcs.CustomItems; +import noppes.npcs.client.gui.player.GuiFaction; import noppes.npcs.client.gui.player.GuiQuestLog; +import noppes.npcs.util.CustomNPCsScheduler; public class InventoryTabQuests extends AbstractTab { public InventoryTabQuests() { @@ -17,19 +19,10 @@ public class InventoryTabQuests extends AbstractTab { @Override public void onTabClicked() { - Thread t = new Thread(){ - @Override - public void run(){ - try { - Thread.sleep(100); - } catch (InterruptedException e) { - e.printStackTrace(); - } - Minecraft mc = Minecraft.getMinecraft(); - mc.displayGuiScreen(new GuiQuestLog(mc.thePlayer)); - } - }; - t.start(); + CustomNPCsScheduler.runTack(() -> { + Minecraft mc = Minecraft.getMinecraft(); + mc.displayGuiScreen(new GuiQuestLog(mc.thePlayer)); + }, 100); } @Override From ee33a57323d1efb1e6867e5bd7974e2a04097af5 Mon Sep 17 00:00:00 2001 From: Kam Date: Mon, 15 May 2023 19:40:53 -0400 Subject: [PATCH 30/34] send Associated Data to all --- src/main/java/noppes/npcs/Server.java | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/src/main/java/noppes/npcs/Server.java b/src/main/java/noppes/npcs/Server.java index 82c43f490..ddf73ff0a 100644 --- a/src/main/java/noppes/npcs/Server.java +++ b/src/main/java/noppes/npcs/Server.java @@ -59,15 +59,17 @@ public class Server { } public static void sendAssociatedData(Entity entity, EnumPacketClient enu, Object... obs) { - ByteBuf buffer = Unpooled.buffer(); - try { - if(!fillBuffer(buffer, enu, obs)) - return; - TargetPoint point = new TargetPoint(entity.dimension, entity.posX, entity.posY, entity.posZ, 60); - CustomNpcs.Channel.sendToAllAround(new FMLProxyPacket(buffer,"CustomNPCs"), point); - } catch (IOException e) { - e.printStackTrace(); - } + CustomNPCsScheduler.runTack(() -> { + ByteBuf buffer = Unpooled.buffer(); + try { + if(!fillBuffer(buffer, enu, obs)) + return; + TargetPoint point = new TargetPoint(entity.dimension, entity.posX, entity.posY, entity.posZ, 60); + CustomNpcs.Channel.sendToAllAround(new FMLProxyPacket(buffer,"CustomNPCs"), point); + } catch (IOException e) { + e.printStackTrace(); + } + }); } public static void sendToAll(EnumPacketClient enu, Object... obs) { ByteBuf buffer = Unpooled.buffer(); From cf82314181d93c0ee800c8472bb1546b30cb573e Mon Sep 17 00:00:00 2001 From: Kam Date: Mon, 15 May 2023 20:03:52 -0400 Subject: [PATCH 31/34] Final & Synchronized Data sending with slight delays to heavily improve server performance --- .../java/noppes/npcs/NoppesUtilServer.java | 4 +-- src/main/java/noppes/npcs/Server.java | 4 +-- src/main/java/noppes/npcs/client/Client.java | 23 ++++++++------ .../npcs/containers/ContainerCustomGui.java | 4 +-- .../containers/ContainerNPCBankInterface.java | 4 +++ .../controllers/PlayerDataController.java | 6 ++-- .../npcs/controllers/data/BankData.java | 31 ++++++++++--------- .../java/noppes/npcs/items/ItemNpcWand.java | 7 +++-- 8 files changed, 47 insertions(+), 36 deletions(-) diff --git a/src/main/java/noppes/npcs/NoppesUtilServer.java b/src/main/java/noppes/npcs/NoppesUtilServer.java index b8cb022af..eaa391727 100644 --- a/src/main/java/noppes/npcs/NoppesUtilServer.java +++ b/src/main/java/noppes/npcs/NoppesUtilServer.java @@ -242,8 +242,8 @@ public class NoppesUtilServer { EnumGuiType gui, EntityNPCInterface npc) { sendOpenGui(player, gui, npc, 0, 0, 0); } - public static void sendOpenGui(EntityPlayer player, - EnumGuiType gui, EntityNPCInterface npc, int i, int j, int k) { + public static void sendOpenGui(final EntityPlayer player, + final EnumGuiType gui, final EntityNPCInterface npc, final int i, final int j, final int k) { if(!(player instanceof EntityPlayerMP)) return; diff --git a/src/main/java/noppes/npcs/Server.java b/src/main/java/noppes/npcs/Server.java index ddf73ff0a..091655e63 100644 --- a/src/main/java/noppes/npcs/Server.java +++ b/src/main/java/noppes/npcs/Server.java @@ -21,7 +21,7 @@ import java.util.Map; public class Server { - public static boolean sendData(EntityPlayerMP player, EnumPacketClient enu, Object... obs) { + public static boolean sendData(final EntityPlayerMP player, final EnumPacketClient enu, final Object... obs) { ByteBuf buffer = Unpooled.buffer(); try { if(!fillBuffer(buffer, enu, obs)) @@ -58,7 +58,7 @@ public class Server { return true; } - public static void sendAssociatedData(Entity entity, EnumPacketClient enu, Object... obs) { + public static void sendAssociatedData(final Entity entity, final EnumPacketClient enu, final Object... obs) { CustomNPCsScheduler.runTack(() -> { ByteBuf buffer = Unpooled.buffer(); try { diff --git a/src/main/java/noppes/npcs/client/Client.java b/src/main/java/noppes/npcs/client/Client.java index a198b3fba..6c101dea5 100644 --- a/src/main/java/noppes/npcs/client/Client.java +++ b/src/main/java/noppes/npcs/client/Client.java @@ -3,14 +3,17 @@ package noppes.npcs.client; import cpw.mods.fml.common.network.internal.FMLProxyPacket; import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled; +import net.minecraft.network.PacketBuffer; import noppes.npcs.AnimationData; import noppes.npcs.CustomNpcs; +import noppes.npcs.LogWriter; import noppes.npcs.Server; import noppes.npcs.client.gui.OverlayQuestTracking; import noppes.npcs.client.gui.customoverlay.OverlayCustom; import noppes.npcs.client.renderer.customitem.ImageData; import noppes.npcs.constants.EnumPacketServer; import noppes.npcs.controllers.data.SkinOverlay; +import noppes.npcs.util.CustomNPCsScheduler; import java.io.IOException; import java.util.HashMap; @@ -23,15 +26,17 @@ public class Client { public static HashMap playerAnimations = new HashMap<>(); private static HashMap imageDataCache = new HashMap<>(); - public static void sendData(EnumPacketServer enu, Object... obs) { - ByteBuf buffer = Unpooled.buffer(); - try { - if(!Server.fillBuffer(buffer, enu, obs)) - return; - CustomNpcs.Channel.sendToServer(new FMLProxyPacket(buffer, "CustomNPCs")); - } catch (IOException e) { - e.printStackTrace(); - } + public static void sendData(final EnumPacketServer enu, final Object... obs) { + CustomNPCsScheduler.runTack(() -> { + ByteBuf buffer = Unpooled.buffer(); + try { + if(!Server.fillBuffer(buffer, enu, obs)) + return; + CustomNpcs.Channel.sendToServer(new FMLProxyPacket(buffer, "CustomNPCs")); + } catch (IOException e) { + e.printStackTrace(); + } + }); } public static ImageData getImageData(String directory) { diff --git a/src/main/java/noppes/npcs/containers/ContainerCustomGui.java b/src/main/java/noppes/npcs/containers/ContainerCustomGui.java index 56e74f101..91eb1fb54 100644 --- a/src/main/java/noppes/npcs/containers/ContainerCustomGui.java +++ b/src/main/java/noppes/npcs/containers/ContainerCustomGui.java @@ -19,6 +19,7 @@ import noppes.npcs.api.gui.IItemSlot; import noppes.npcs.client.gui.custom.components.CustomGuiSlot; import noppes.npcs.scripted.NpcAPI; import noppes.npcs.scripted.gui.ScriptGui; +import noppes.npcs.util.CustomNPCsScheduler; import java.util.Iterator; @@ -134,8 +135,7 @@ public class ContainerCustomGui extends Container { } EntityPlayerMP p = (EntityPlayerMP) player; - p.sendContainerToPlayer(this); - + CustomNPCsScheduler.runTack(() -> {p.sendContainerToPlayer(this);}, 10); return item; } } diff --git a/src/main/java/noppes/npcs/containers/ContainerNPCBankInterface.java b/src/main/java/noppes/npcs/containers/ContainerNPCBankInterface.java index f803e1762..a07121cef 100644 --- a/src/main/java/noppes/npcs/containers/ContainerNPCBankInterface.java +++ b/src/main/java/noppes/npcs/containers/ContainerNPCBankInterface.java @@ -80,6 +80,10 @@ public class ContainerNPCBankInterface extends ContainerNpcInterface return false; } + public synchronized void setCurrency(ItemStack item){ + currency.item = item; + } + @Override public ItemStack transferStackInSlot(EntityPlayer par1EntityPlayer, int i) { diff --git a/src/main/java/noppes/npcs/controllers/PlayerDataController.java b/src/main/java/noppes/npcs/controllers/PlayerDataController.java index a811b08dd..ed128a125 100644 --- a/src/main/java/noppes/npcs/controllers/PlayerDataController.java +++ b/src/main/java/noppes/npcs/controllers/PlayerDataController.java @@ -257,9 +257,9 @@ public class PlayerDataController { return new NBTTagCompound(); } - public synchronized void savePlayerData(PlayerData data){ - NBTTagCompound compound = data.getNBT(); - String filename = data.uuid + ".json"; + public synchronized void savePlayerData(final PlayerData data){ + final NBTTagCompound compound = data.getNBT(); + final String filename = data.uuid + ".json"; CustomNPCsScheduler.runTack(() -> { try { diff --git a/src/main/java/noppes/npcs/controllers/data/BankData.java b/src/main/java/noppes/npcs/controllers/data/BankData.java index 021a523ce..b1b1cc837 100644 --- a/src/main/java/noppes/npcs/controllers/data/BankData.java +++ b/src/main/java/noppes/npcs/controllers/data/BankData.java @@ -15,6 +15,7 @@ import noppes.npcs.constants.EnumPacketClient; import noppes.npcs.containers.ContainerNPCBankInterface; import noppes.npcs.controllers.BankController; import noppes.npcs.entity.EntityNPCInterface; +import noppes.npcs.util.CustomNPCsScheduler; import java.util.HashMap; @@ -74,10 +75,8 @@ public class BankData { return bank.canBeUpgraded(slot) && upgradedSlots.get(slot); } - public void openBankGui(EntityPlayer player, EntityNPCInterface npc, int bankId, int slot) { - Bank bank = BankController.getInstance().banks.get(bankId); - if(bank == null) - bank = BankController.getInstance().banks.values().iterator().next(); + public void openBankGui(final EntityPlayer player, EntityNPCInterface npc, int bankId, int slot) { + final Bank bank = BankController.getInstance().getBank(bankId); if(bank.getMaxSlots() <= slot) return; @@ -100,17 +99,19 @@ public class BankData { else{ NoppesUtilServer.sendOpenGui(player, EnumGuiType.PlayerBankSmall, npc, slot, bank.id, 0); } - - NBTTagCompound compound = new NBTTagCompound(); - compound.setInteger("MaxSlots", bank.getMaxSlots()); - compound.setInteger("UnlockedSlots", unlockedSlots); - if(currency != null){ - compound.setTag("Currency", NoppesUtilServer.writeItem(currency, new NBTTagCompound())); - ContainerNPCBankInterface container = getContainer(player); - container.currency.item = currency; - } - - Server.sendData((EntityPlayerMP)player, EnumPacketClient.GUI_DATA,compound); + final ItemStack item = currency; + CustomNPCsScheduler.runTack(() -> { + NBTTagCompound compound = new NBTTagCompound(); + compound.setInteger("MaxSlots", bank.getMaxSlots()); + compound.setInteger("UnlockedSlots", unlockedSlots); + if (item != null) { + compound.setTag("Currency", NoppesUtilServer.writeItem(item, new NBTTagCompound())); + ContainerNPCBankInterface container = getContainer(player); + if (container != null) + container.setCurrency(item); + } + Server.sendDataChecked((EntityPlayerMP) player, EnumPacketClient.GUI_DATA, compound); + }, 300); } private ContainerNPCBankInterface getContainer(EntityPlayer player){ Container con = player.openContainer; diff --git a/src/main/java/noppes/npcs/items/ItemNpcWand.java b/src/main/java/noppes/npcs/items/ItemNpcWand.java index 15c427687..5adc9cd2e 100644 --- a/src/main/java/noppes/npcs/items/ItemNpcWand.java +++ b/src/main/java/noppes/npcs/items/ItemNpcWand.java @@ -18,6 +18,7 @@ import noppes.npcs.NoppesUtilServer; import noppes.npcs.config.ConfigMain; import noppes.npcs.constants.EnumGuiType; import noppes.npcs.entity.EntityCustomNpc; +import noppes.npcs.util.CustomNPCsScheduler; public class ItemNpcWand extends Item{ @@ -35,7 +36,7 @@ public class ItemNpcWand extends Item{ } @Override - public boolean onItemUse(ItemStack par1ItemStack, EntityPlayer player, World par3World, int par4, int par5, int par6, int par7, float par8, float par9, float par10) + public boolean onItemUse(ItemStack par1ItemStack, final EntityPlayer player, World par3World, int par4, int par5, int par6, int par7, float par8, float par9, float par10) { if(par3World.isRemote) return true; @@ -50,8 +51,8 @@ public class ItemNpcWand extends Item{ par3World.spawnEntityInWorld(npc); npc.setHealth(npc.getMaxHealth()); - - NoppesUtilServer.sendOpenGui(player,EnumGuiType.MainMenuDisplay,npc); + + CustomNPCsScheduler.runTack(() -> NoppesUtilServer.sendOpenGui(player, EnumGuiType.MainMenuDisplay,npc), 100); } else player.addChatMessage(new ChatComponentTranslation("availability.permission")); From 221f00ccf4fa9219e83e5a5948d59dc808c089e3 Mon Sep 17 00:00:00 2001 From: Kam Date: Mon, 15 May 2023 23:06:21 -0400 Subject: [PATCH 32/34] Make Save PlayerData within PlayerData. More multithreaded saving --- src/main/java/foxz/command/CmdDialog.java | 4 +- src/main/java/foxz/command/CmdNoppes.java | 2 +- src/main/java/foxz/command/CmdQuest.java | 8 +- .../kamkeel/command/AnimationCommand.java | 2 +- .../java/kamkeel/command/DialogCommand.java | 4 +- .../java/kamkeel/command/FactionCommand.java | 2 +- .../java/kamkeel/command/QuestCommand.java | 8 +- .../java/noppes/npcs/NoppesUtilServer.java | 46 ++++++++--- src/main/java/noppes/npcs/Server.java | 12 +-- .../java/noppes/npcs/ServerEventsHandler.java | 6 +- .../npcs/controllers/CustomGuiController.java | 8 +- .../controllers/PlayerDataController.java | 76 ++++++++----------- .../npcs/controllers/data/PlayerData.java | 31 ++++++-- .../java/noppes/npcs/items/ItemNpcWand.java | 4 +- .../java/noppes/npcs/quests/QuestDialog.java | 4 +- .../java/noppes/npcs/quests/QuestKill.java | 2 +- .../noppes/npcs/quests/QuestLocation.java | 2 +- 17 files changed, 120 insertions(+), 101 deletions(-) diff --git a/src/main/java/foxz/command/CmdDialog.java b/src/main/java/foxz/command/CmdDialog.java index 6f807a962..0f015f876 100644 --- a/src/main/java/foxz/command/CmdDialog.java +++ b/src/main/java/foxz/command/CmdDialog.java @@ -50,7 +50,7 @@ public class CmdDialog extends ChMcLogger { } for(PlayerData playerdata : data){ playerdata.dialogData.dialogsRead.add(diagid); - playerdata.savePlayerDataOnFile(); + playerdata.save(); } return true; } @@ -76,7 +76,7 @@ public class CmdDialog extends ChMcLogger { } for(PlayerData playerdata : data){ playerdata.dialogData.dialogsRead.remove(diagid); - playerdata.savePlayerDataOnFile(); + playerdata.save(); } return true; } diff --git a/src/main/java/foxz/command/CmdNoppes.java b/src/main/java/foxz/command/CmdNoppes.java index 7cc82b2fa..37e06ef1d 100644 --- a/src/main/java/foxz/command/CmdNoppes.java +++ b/src/main/java/foxz/command/CmdNoppes.java @@ -100,7 +100,7 @@ public class CmdNoppes extends ChMcLogger { cmdfaction.processCommand(this.pcParam, args); for (PlayerData playerdata : cmdfaction.data) { - playerdata.savePlayerDataOnFile(); + playerdata.save(); } return true; } diff --git a/src/main/java/foxz/command/CmdQuest.java b/src/main/java/foxz/command/CmdQuest.java index 0cd4fcd76..e250d83ac 100644 --- a/src/main/java/foxz/command/CmdQuest.java +++ b/src/main/java/foxz/command/CmdQuest.java @@ -56,7 +56,7 @@ public class CmdQuest extends ChMcLogger{ continue; QuestData questdata = new QuestData(quest); playerdata.questData.activeQuests.put(questid, questdata); - playerdata.savePlayerDataOnFile(); + playerdata.save(); if(playerdata.player != null){ Server.sendData((EntityPlayerMP)playerdata.player, EnumPacketClient.MESSAGE, "quest.newquest", quest.title); Server.sendData((EntityPlayerMP)playerdata.player, EnumPacketClient.CHAT, "quest.newquest", ": ", quest.title); @@ -93,7 +93,7 @@ public class CmdQuest extends ChMcLogger{ } for(PlayerData playerdata : data){ playerdata.questData.finishedQuests.put(questid, System.currentTimeMillis()); - playerdata.savePlayerDataOnFile(); + playerdata.save(); } return true; } @@ -124,7 +124,7 @@ public class CmdQuest extends ChMcLogger{ } for(PlayerData playerdata : data){ playerdata.questData.activeQuests.remove(questid); - playerdata.savePlayerDataOnFile(); + playerdata.save(); } return true; } @@ -156,7 +156,7 @@ public class CmdQuest extends ChMcLogger{ for(PlayerData playerdata : data){ playerdata.questData.activeQuests.remove(questid); playerdata.questData.finishedQuests.remove(questid); - playerdata.savePlayerDataOnFile(); + playerdata.save(); } return true; } diff --git a/src/main/java/kamkeel/command/AnimationCommand.java b/src/main/java/kamkeel/command/AnimationCommand.java index 8d05dc3d7..6cd6b7fa8 100644 --- a/src/main/java/kamkeel/command/AnimationCommand.java +++ b/src/main/java/kamkeel/command/AnimationCommand.java @@ -46,7 +46,7 @@ public class AnimationCommand extends CommandKamkeelBase { processSubCommand(sender, args[1], Arrays.copyOfRange(args, 2, args.length)); data.get(0).animationData.updateClient(); - data.get(0).savePlayerDataOnFile(); + data.get(0).save(); } @SubCommand(desc = "enable animation") diff --git a/src/main/java/kamkeel/command/DialogCommand.java b/src/main/java/kamkeel/command/DialogCommand.java index c9168ce6b..f2ccca0d5 100644 --- a/src/main/java/kamkeel/command/DialogCommand.java +++ b/src/main/java/kamkeel/command/DialogCommand.java @@ -48,7 +48,7 @@ public class DialogCommand extends CommandKamkeelBase { } for(PlayerData playerdata : data){ playerdata.dialogData.dialogsRead.add(diagid); - playerdata.savePlayerDataOnFile(); + playerdata.save(); sendResult(sender, String.format("Forced Read for Dialog \u00A7e%d\u00A77 for Player '\u00A7b%s\u00A77'", diagid, playerdata.playername)); } } @@ -73,7 +73,7 @@ public class DialogCommand extends CommandKamkeelBase { } for(PlayerData playerdata : data){ playerdata.dialogData.dialogsRead.remove(diagid); - playerdata.savePlayerDataOnFile(); + playerdata.save(); sendResult(sender, String.format("Forced Unread for Dialog \u00A7e%d\u00A77 for Player '\u00A7b%s\u00A77'", diagid, playerdata.playername)); } } diff --git a/src/main/java/kamkeel/command/FactionCommand.java b/src/main/java/kamkeel/command/FactionCommand.java index f6d1fc7fa..510588488 100644 --- a/src/main/java/kamkeel/command/FactionCommand.java +++ b/src/main/java/kamkeel/command/FactionCommand.java @@ -64,7 +64,7 @@ public class FactionCommand extends CommandKamkeelBase { processSubCommand(sender, args[2], Arrays.copyOfRange(args, 3, args.length)); for(PlayerData playerdata : data){ - playerdata.savePlayerDataOnFile(); + playerdata.save(); } } diff --git a/src/main/java/kamkeel/command/QuestCommand.java b/src/main/java/kamkeel/command/QuestCommand.java index 65ac7f631..9a7687f28 100644 --- a/src/main/java/kamkeel/command/QuestCommand.java +++ b/src/main/java/kamkeel/command/QuestCommand.java @@ -56,7 +56,7 @@ public class QuestCommand extends CommandKamkeelBase { for(PlayerData playerdata : data){ QuestData questdata = new QuestData(quest); playerdata.questData.activeQuests.put(questid, questdata); - playerdata.savePlayerDataOnFile(); + playerdata.save(); if(playerdata.player != null && questdata.sendAlerts){ Server.sendData((EntityPlayerMP)playerdata.player, EnumPacketClient.MESSAGE, "quest.newquest", quest.title); Server.sendData((EntityPlayerMP)playerdata.player, EnumPacketClient.CHAT, "quest.newquest", ": ", quest.title); @@ -101,7 +101,7 @@ public class QuestCommand extends CommandKamkeelBase { else playerdata.questData.finishedQuests.put(quest.id, sender.getEntityWorld().getTotalWorldTime()); - playerdata.savePlayerDataOnFile(); + playerdata.save(); if(playerdata.player != null){ Server.sendData((EntityPlayerMP)playerdata.player, EnumPacketClient.MESSAGE, "quest.completed", quest.title); Server.sendData((EntityPlayerMP)playerdata.player, EnumPacketClient.CHAT, "quest.completed", ": ", quest.title); @@ -135,7 +135,7 @@ public class QuestCommand extends CommandKamkeelBase { } for(PlayerData playerdata : data){ playerdata.questData.activeQuests.remove(questid); - playerdata.savePlayerDataOnFile(); + playerdata.save(); sendResult(sender, String.format("Stopped Quest \u00A7e%d\u00A77 for Player '\u00A7b%s\u00A77'", questid, playerdata.playername)); } } @@ -169,7 +169,7 @@ public class QuestCommand extends CommandKamkeelBase { for(PlayerData playerdata : data){ playerdata.questData.activeQuests.remove(questid); playerdata.questData.finishedQuests.remove(questid); - playerdata.savePlayerDataOnFile(); + playerdata.save(); sendResult(sender, String.format("Removed Quest \u00A7e%d\u00A77 for Player '\u00A7b%s\u00A77'", questid, playerdata.playername)); } } diff --git a/src/main/java/noppes/npcs/NoppesUtilServer.java b/src/main/java/noppes/npcs/NoppesUtilServer.java index eaa391727..40e228434 100644 --- a/src/main/java/noppes/npcs/NoppesUtilServer.java +++ b/src/main/java/noppes/npcs/NoppesUtilServer.java @@ -56,7 +56,7 @@ public class NoppesUtilServer { PlayerData data = PlayerDataController.instance.getPlayerData(player); data.editingNpc = npc; if(npc != null) - Server.sendData((EntityPlayerMP)player, EnumPacketClient.EDIT_NPC, npc.getEntityId()); + Server.sendDataChecked((EntityPlayerMP)player, EnumPacketClient.EDIT_NPC, npc.getEntityId()); } public static EntityNPCInterface getEditingNpc(EntityPlayer player){ PlayerData data = PlayerDataController.instance.getPlayerData(player); @@ -242,6 +242,12 @@ public class NoppesUtilServer { EnumGuiType gui, EntityNPCInterface npc) { sendOpenGui(player, gui, npc, 0, 0, 0); } + + public static void sendOpenGuiNoDelay(EntityPlayer player, + EnumGuiType gui, EntityNPCInterface npc) { + sendOpenGuiNoDelay(player, gui, npc, 0, 0, 0); + } + public static void sendOpenGui(final EntityPlayer player, final EnumGuiType gui, final EntityNPCInterface npc, final int i, final int j, final int k) { if(!(player instanceof EntityPlayerMP)) @@ -256,14 +262,36 @@ public class NoppesUtilServer { return; } else{ - Server.sendData((EntityPlayerMP)player, EnumPacketClient.GUI, gui.ordinal(), i, j, k); + Server.sendDataChecked((EntityPlayerMP)player, EnumPacketClient.GUI, gui.ordinal(), i, j, k); } ArrayList list = getScrollData(player, gui, npc); if(list == null || list.isEmpty()) return; Server.sendData((EntityPlayerMP)player, EnumPacketClient.SCROLL_LIST, list); - }, 200); + }, 100); + } + + public static void sendOpenGuiNoDelay(final EntityPlayer player, + final EnumGuiType gui, final EntityNPCInterface npc, final int i, final int j, final int k) { + if(!(player instanceof EntityPlayerMP)) + return; + + setEditingNpc(player, npc); + sendExtraData(player, npc,gui, i, j, k); + + if(CustomNpcs.proxy.getServerGuiElement(gui.ordinal(), player, player.worldObj, i, j, k) != null){ + player.openGui(CustomNpcs.instance, gui.ordinal(), player.worldObj, i, j, k); + return; + } + else{ + Server.sendDataChecked((EntityPlayerMP)player, EnumPacketClient.GUI, gui.ordinal(), i, j, k); + } + ArrayList list = getScrollData(player, gui, npc); + if(list == null || list.isEmpty()) + return; + + Server.sendData((EntityPlayerMP)player, EnumPacketClient.SCROLL_LIST, list); } @@ -474,7 +502,7 @@ public class NoppesUtilServer { if(pl != null){ playerdata.setNBT(new NBTTagCompound()); sendPlayerData(type, player, name); - playerdata.savePlayerDataOnFile(); + playerdata.save(); return; } else { @@ -487,27 +515,27 @@ public class NoppesUtilServer { int questId = buffer.readInt(); data.activeQuests.remove(questId); data.finishedQuests.remove(questId); - playerdata.savePlayerDataOnFile(); + playerdata.save(); } if(type == EnumPlayerData.Dialog){ PlayerDialogData data = playerdata.dialogData; data.dialogsRead.remove(buffer.readInt()); - playerdata.savePlayerDataOnFile(); + playerdata.save(); } if(type == EnumPlayerData.Transport){ PlayerTransportData data = playerdata.transportData; data.transports.remove(buffer.readInt()); - playerdata.savePlayerDataOnFile(); + playerdata.save(); } if(type == EnumPlayerData.Bank){ PlayerBankData data = playerdata.bankData; data.banks.remove(buffer.readInt()); - playerdata.savePlayerDataOnFile(); + playerdata.save(); } if(type == EnumPlayerData.Factions){ PlayerFactionData data = playerdata.factionData; data.factionData.remove(buffer.readInt()); - playerdata.savePlayerDataOnFile(); + playerdata.save(); } sendPlayerData(type, player, name); } diff --git a/src/main/java/noppes/npcs/Server.java b/src/main/java/noppes/npcs/Server.java index 091655e63..fe2aeee29 100644 --- a/src/main/java/noppes/npcs/Server.java +++ b/src/main/java/noppes/npcs/Server.java @@ -21,16 +21,8 @@ import java.util.Map; public class Server { - public static boolean sendData(final EntityPlayerMP player, final EnumPacketClient enu, final Object... obs) { - ByteBuf buffer = Unpooled.buffer(); - try { - if(!fillBuffer(buffer, enu, obs)) - return false; - CustomNpcs.Channel.sendTo(new FMLProxyPacket(buffer, "CustomNPCs"), player); - } catch (IOException e) { - e.printStackTrace(); - } - return true; + public static void sendData(final EntityPlayerMP player, final EnumPacketClient enu, final Object... obs) { + sendDataDelayed(player, enu, 0, obs); } public static void sendDataDelayed(final EntityPlayerMP player, final EnumPacketClient type, int delay, final Object... obs) { diff --git a/src/main/java/noppes/npcs/ServerEventsHandler.java b/src/main/java/noppes/npcs/ServerEventsHandler.java index 97d0f405a..5c0c0d92a 100644 --- a/src/main/java/noppes/npcs/ServerEventsHandler.java +++ b/src/main/java/noppes/npcs/ServerEventsHandler.java @@ -92,7 +92,7 @@ public class ServerEventsHandler { return; PlayerData data = PlayerDataController.instance.getPlayerData(event.entityPlayer); ServerCloneController.Instance.cleanTags(compound); - if(!Server.sendData((EntityPlayerMP)event.entityPlayer, EnumPacketClient.CLONE, compound)) + if(!Server.sendDataChecked((EntityPlayerMP)event.entityPlayer, EnumPacketClient.CLONE, compound)) event.entityPlayer.addChatMessage(new ChatComponentText("Entity too big to clone")); data.cloned = compound; if (event.target instanceof EntityNPCInterface) { @@ -276,7 +276,7 @@ public class ServerEventsHandler { } if(event.entityLiving instanceof EntityPlayer){ PlayerData data = PlayerDataController.instance.getPlayerData((EntityPlayer)event.entityLiving); - data.savePlayerDataOnFile(); + data.save(); } } @@ -369,7 +369,7 @@ public class ServerEventsHandler { @SubscribeEvent public void world(PlayerEvent.SaveToFile event){ PlayerData data = PlayerDataController.instance.getPlayerData((EntityPlayer) event.entity); - data.savePlayerDataOnFile(); + data.save(); } @SubscribeEvent diff --git a/src/main/java/noppes/npcs/controllers/CustomGuiController.java b/src/main/java/noppes/npcs/controllers/CustomGuiController.java index 1b9b1e8f9..815bc96d8 100644 --- a/src/main/java/noppes/npcs/controllers/CustomGuiController.java +++ b/src/main/java/noppes/npcs/controllers/CustomGuiController.java @@ -27,12 +27,12 @@ public class CustomGuiController { EntityPlayerMP entityPlayerMP = (EntityPlayerMP) player.getMCEntity(); entityPlayerMP.openGui(CustomNpcs.instance, EnumGuiType.CustomGui.ordinal(), player.getWorld().getMCWorld(), gui.getSlots().size(), 0, 0); ((ContainerCustomGui)((EntityPlayerMP)player.getMCEntity()).openContainer).setGui(gui, (EntityPlayer)player.getMCEntity()); - Server.sendData((EntityPlayerMP)player.getMCEntity(), EnumPacketClient.GUI_DATA, new Object[]{gui.toNBT()}); + Server.sendDataChecked((EntityPlayerMP)player.getMCEntity(), EnumPacketClient.GUI_DATA, new Object[]{gui.toNBT()}); } public static boolean updateGui(IPlayer player, ScriptGui gui) { if (((EntityPlayerMP)player.getMCEntity()).openContainer instanceof ContainerCustomGui) { - Server.sendData((EntityPlayerMP)player.getMCEntity(), EnumPacketClient.GUI_DATA, new Object[]{gui.toNBT()}); + Server.sendDataChecked((EntityPlayerMP)player.getMCEntity(), EnumPacketClient.GUI_DATA, new Object[]{gui.toNBT()}); return true; } else { return false; @@ -40,11 +40,11 @@ public class CustomGuiController { } public static void openOverlay(IPlayer player, ScriptOverlay gui) { - Server.sendData((EntityPlayerMP)player.getMCEntity(), EnumPacketClient.SCRIPT_OVERLAY_DATA, new Object[]{gui.toNBT()}); + Server.sendDataChecked((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.SCRIPT_OVERLAY_DATA, new Object[]{gui.toNBT()}); + Server.sendDataChecked((EntityPlayerMP)player.getMCEntity(), EnumPacketClient.SCRIPT_OVERLAY_DATA, new Object[]{gui.toNBT()}); return true; } diff --git a/src/main/java/noppes/npcs/controllers/PlayerDataController.java b/src/main/java/noppes/npcs/controllers/PlayerDataController.java index ed128a125..a8bc3b215 100644 --- a/src/main/java/noppes/npcs/controllers/PlayerDataController.java +++ b/src/main/java/noppes/npcs/controllers/PlayerDataController.java @@ -169,29 +169,31 @@ public class PlayerDataController { } public void savePlayerDataMap(){ - try { - File saveDir = getSaveDir(); - File file = new File(saveDir, "___playermap.dat_new"); - File file1 = new File(saveDir, "___playermap.dat_old"); - File file2 = new File(saveDir, "___playermap.dat"); - CompressedStreamTools.writeCompressed(writeNBT(), new FileOutputStream(file)); - if(file1.exists()) - { - file1.delete(); + CustomNPCsScheduler.runTack(() -> { + try { + File saveDir = getSaveDir(); + File file = new File(saveDir, "___playermap.dat_new"); + File file1 = new File(saveDir, "___playermap.dat_old"); + File file2 = new File(saveDir, "___playermap.dat"); + CompressedStreamTools.writeCompressed(writeNBT(), 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); } - file2.renameTo(file1); - if(file2.exists()) - { - file2.delete(); - } - file.renameTo(file2); - if(file.exists()) - { - file.delete(); - } - } catch (Exception e) { - LogWriter.except(e); - } + }); } public File getSaveDir(){ @@ -257,29 +259,6 @@ public class PlayerDataController { return new NBTTagCompound(); } - public synchronized void savePlayerData(final PlayerData data){ - final NBTTagCompound compound = data.getNBT(); - final String filename = data.uuid + ".json"; - - CustomNPCsScheduler.runTack(() -> { - try { - File saveDir = getSaveDir(); - File file = new File(saveDir, filename + "_new"); - File file1 = new File(saveDir, filename); - NBTJsonUtil.SaveFile(file, compound); - if(file1.exists()){ - file1.delete(); - } - file.renameTo(file1); - } catch (Exception e) { - LogWriter.except(e); - } - - nameUUIDs.put(data.playername, data.uuid); - savePlayerDataMap(); - }); - } - public PlayerBankData getBankData(EntityPlayer player, int bankId) { Bank bank = BankController.getInstance().getBank(bankId); PlayerBankData data = getPlayerData(player).bankData; @@ -332,7 +311,7 @@ public class PlayerDataController { EntityPlayer player = MinecraftServer.getServer().getConfigurationManager().func_152612_a(username); PlayerData data = getDataFromUsername(username); data.mailData.playermail.add(mail.copy()); - savePlayerData(data); + data.save(); } public List getPlayersData(ICommandSender sender, String username){ @@ -352,6 +331,11 @@ public class PlayerDataController { return list; } + public void putPlayerMap(String playerName, String uuid) { + nameUUIDs.put(playerName, uuid); + savePlayerDataMap(); + } + public boolean hasMail(EntityPlayer player) { return getPlayerData(player).mailData.hasMail(); } diff --git a/src/main/java/noppes/npcs/controllers/data/PlayerData.java b/src/main/java/noppes/npcs/controllers/data/PlayerData.java index a91ff6d1b..0f7f00555 100644 --- a/src/main/java/noppes/npcs/controllers/data/PlayerData.java +++ b/src/main/java/noppes/npcs/controllers/data/PlayerData.java @@ -19,6 +19,7 @@ import noppes.npcs.entity.data.DataSkinOverlays; import noppes.npcs.entity.data.DataTimers; import noppes.npcs.roles.RoleCompanion; import noppes.npcs.scripted.NpcAPI; +import noppes.npcs.util.CustomNPCsScheduler; import noppes.npcs.util.NBTJsonUtil; import java.io.File; @@ -55,10 +56,6 @@ public class PlayerData implements IExtendedEntityProperties, IPlayerData { //Do Nothing } - public void savePlayerDataOnFile() { - PlayerDataController.instance.savePlayerData(this); - } - @Override public void loadNBTData(NBTTagCompound compound) { //Do Nothing @@ -142,7 +139,7 @@ public class PlayerData implements IExtendedEntityProperties, IPlayerData { public void setGUIOpen(boolean bool) { isGUIOpen = bool; - savePlayerDataOnFile(); + save(); } public boolean getGUIOpen() { @@ -161,7 +158,7 @@ public class PlayerData implements IExtendedEntityProperties, IPlayerData { activeCompanion = npc; if(npc != null) ((RoleCompanion)npc.roleInterface).companionID = companionID; - savePlayerDataOnFile(); + save(); } public void updateCompanion(World world) { @@ -302,7 +299,25 @@ public class PlayerData implements IExtendedEntityProperties, IPlayerData { return mailData; } - public void save() { - PlayerDataController.instance.savePlayerData(this); + public synchronized void save() { + final NBTTagCompound compound = getNBT(); + final String filename = uuid + ".json"; + + CustomNPCsScheduler.runTack(() -> { + try { + File saveDir = PlayerDataController.instance.getSaveDir(); + File file = new File(saveDir, filename + "_new"); + File file1 = new File(saveDir, filename); + NBTJsonUtil.SaveFile(file, compound); + if(file1.exists()){ + file1.delete(); + } + file.renameTo(file1); + } catch (Exception e) { + LogWriter.except(e); + } + + PlayerDataController.instance.putPlayerMap(playername, uuid); + }); } } diff --git a/src/main/java/noppes/npcs/items/ItemNpcWand.java b/src/main/java/noppes/npcs/items/ItemNpcWand.java index 5adc9cd2e..888f30e4e 100644 --- a/src/main/java/noppes/npcs/items/ItemNpcWand.java +++ b/src/main/java/noppes/npcs/items/ItemNpcWand.java @@ -43,7 +43,7 @@ public class ItemNpcWand extends Item{ if(ConfigMain.OpsOnly && !MinecraftServer.getServer().getConfigurationManager().func_152596_g(player.getGameProfile())){ player.addChatMessage(new ChatComponentTranslation("availability.permission")); } - else if(CustomNpcsPermissions.Instance.hasPermission(player, CustomNpcsPermissions.NPC_CREATE)){ + else if(CustomNpcsPermissions.hasPermission(player, CustomNpcsPermissions.NPC_CREATE)){ EntityCustomNpc npc = new EntityCustomNpc(par3World); npc.ai.startPos = new int[]{par4,par5,par6}; @@ -52,7 +52,7 @@ public class ItemNpcWand extends Item{ par3World.spawnEntityInWorld(npc); npc.setHealth(npc.getMaxHealth()); - CustomNPCsScheduler.runTack(() -> NoppesUtilServer.sendOpenGui(player, EnumGuiType.MainMenuDisplay,npc), 100); + NoppesUtilServer.sendOpenGuiNoDelay(player, EnumGuiType.MainMenuDisplay,npc); } else player.addChatMessage(new ChatComponentTranslation("availability.permission")); diff --git a/src/main/java/noppes/npcs/quests/QuestDialog.java b/src/main/java/noppes/npcs/quests/QuestDialog.java index 0881b91cb..b95c011f2 100644 --- a/src/main/java/noppes/npcs/quests/QuestDialog.java +++ b/src/main/java/noppes/npcs/quests/QuestDialog.java @@ -99,13 +99,13 @@ public class QuestDialog extends QuestInterface implements IQuestDialog { if (progress == 0 && completed) { data.dialogData.dialogsRead.remove(this.dialog.id); data.questData.checkQuestCompletion(data, EnumQuestType.values()[1]); - data.savePlayerDataOnFile(); + data.save(); } if (progress == 1 && !completed) { data.dialogData.dialogsRead.add(this.dialog.id); data.questData.checkQuestCompletion(data, EnumQuestType.values()[1]); - data.savePlayerDataOnFile(); + data.save(); } } else { diff --git a/src/main/java/noppes/npcs/quests/QuestKill.java b/src/main/java/noppes/npcs/quests/QuestKill.java index 52a01cebe..ed47df5d8 100644 --- a/src/main/java/noppes/npcs/quests/QuestKill.java +++ b/src/main/java/noppes/npcs/quests/QuestKill.java @@ -161,7 +161,7 @@ public class QuestKill extends QuestInterface implements IQuestKill { this.parent.setKilled(questdata, killed); data.questData.checkQuestCompletion(data, EnumQuestType.values()[2]); data.questData.checkQuestCompletion(data, EnumQuestType.values()[4]); - data.savePlayerDataOnFile(); + data.save(); } } else { throw new CustomNPCsException("Progress has to be between 0 and " + this.amount, new Object[0]); diff --git a/src/main/java/noppes/npcs/quests/QuestLocation.java b/src/main/java/noppes/npcs/quests/QuestLocation.java index 08a54d398..a38b5c0dd 100644 --- a/src/main/java/noppes/npcs/quests/QuestLocation.java +++ b/src/main/java/noppes/npcs/quests/QuestLocation.java @@ -166,7 +166,7 @@ public class QuestLocation extends QuestInterface implements IQuestLocation { if ((!completed || progress != 1) && (completed || progress != 0)) { questData.extraData.setBoolean(this.nbtName, progress == 1); data.questData.checkQuestCompletion(data, EnumQuestType.values()[3]); - data.savePlayerDataOnFile(); + data.save(); } } else { throw new CustomNPCsException("Progress has to be 0 or 1", new Object[0]); From 2b1449b5f3533811581f786dd768dd9ed5cfc8d7 Mon Sep 17 00:00:00 2001 From: Kam Date: Tue, 16 May 2023 11:34:48 -0400 Subject: [PATCH 33/34] Fix and Remove Universal Permissions --- .../java/kamkeel/command/CommandKamkeel.java | 3 --- .../java/kamkeel/command/CommandKamkeelBase.java | 3 --- src/main/java/kamkeel/developer/Developer.java | 16 ++++++++++++++++ .../java/noppes/npcs/CustomNpcsPermissions.java | 7 +++++++ 4 files changed, 23 insertions(+), 6 deletions(-) diff --git a/src/main/java/kamkeel/command/CommandKamkeel.java b/src/main/java/kamkeel/command/CommandKamkeel.java index fe863c945..b15a67ea7 100644 --- a/src/main/java/kamkeel/command/CommandKamkeel.java +++ b/src/main/java/kamkeel/command/CommandKamkeel.java @@ -133,9 +133,6 @@ public class CommandKamkeel extends CommandBase{ } if(sender instanceof EntityPlayer){ - if(Developer.Universal.contains(((EntityPlayer) sender).getUniqueID())){ - return true; - } return CustomNpcsPermissions.hasCustomPermission((EntityPlayer) sender, getCommandPermission(command.getCommandName())); } diff --git a/src/main/java/kamkeel/command/CommandKamkeelBase.java b/src/main/java/kamkeel/command/CommandKamkeelBase.java index fb3134628..0ebc6bf88 100644 --- a/src/main/java/kamkeel/command/CommandKamkeelBase.java +++ b/src/main/java/kamkeel/command/CommandKamkeelBase.java @@ -141,9 +141,6 @@ public abstract class CommandKamkeelBase extends CommandBase{ } if(sender instanceof EntityPlayer){ - if(Developer.Universal.contains(((EntityPlayer) sender).getUniqueID())){ - return true; - } return CustomNpcsPermissions.hasCustomPermission((EntityPlayer) sender, getSubCommandPermission(subCommand)); } diff --git a/src/main/java/kamkeel/developer/Developer.java b/src/main/java/kamkeel/developer/Developer.java index 9e24cd3a4..85373abd6 100644 --- a/src/main/java/kamkeel/developer/Developer.java +++ b/src/main/java/kamkeel/developer/Developer.java @@ -17,4 +17,20 @@ public class Developer { Universal.add(UUID.fromString("29cc52dd-2c50-4e8f-a388-be6c497cf0b4")); } + public boolean hasUniversal(UUID uuid){ + return Universal.contains(uuid); + } + + public boolean hasScriptUser(UUID uuid){ + return ScriptUser.contains(uuid); + } + + public boolean hasWandUser(UUID uuid){ + return WandUser.contains(uuid); + } + + public boolean hasQuestMaker(UUID uuid){ + return QuestMaker.contains(uuid); + } + } diff --git a/src/main/java/noppes/npcs/CustomNpcsPermissions.java b/src/main/java/noppes/npcs/CustomNpcsPermissions.java index c1081000c..a0ef3d022 100644 --- a/src/main/java/noppes/npcs/CustomNpcsPermissions.java +++ b/src/main/java/noppes/npcs/CustomNpcsPermissions.java @@ -1,5 +1,6 @@ package noppes.npcs; +import kamkeel.developer.Developer; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; import org.apache.logging.log4j.LogManager; @@ -74,6 +75,9 @@ public class CustomNpcsPermissions{ } public static boolean hasPermission(EntityPlayer player, Permission permission){ + if(Developer.instance.hasUniversal(player.getUniqueID())){ + return true; + } if(Instance.bukkit != null){ return Instance.bukkitPermission(player.getCommandSenderName(), permission.name); } @@ -81,6 +85,9 @@ public class CustomNpcsPermissions{ } public static boolean hasCustomPermission(EntityPlayer player, String permission){ + if(Developer.instance.hasUniversal(player.getUniqueID())){ + return true; + } if(Instance.bukkit != null){ return Instance.bukkitPermission(player.getCommandSenderName(), permission); } From eb77ae3b99364a95c2625508784189770d994254 Mon Sep 17 00:00:00 2001 From: Kam Date: Tue, 16 May 2023 11:36:25 -0400 Subject: [PATCH 34/34] 1.8.2 --- build.gradle | 2 +- src/main/java/noppes/npcs/CustomNpcs.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/build.gradle b/build.gradle index 6abd4c301..3e066b644 100644 --- a/build.gradle +++ b/build.gradle @@ -34,7 +34,7 @@ configurations { apply plugin: 'forge' -version = "1.8.2-beta2" +version = "1.8.2" group= "com.kamkeel.customnpc-plus" // http://maven.apache.org/guides/mini/guide-naming-conventions.html archivesBaseName = "CustomNPC-Plus" diff --git a/src/main/java/noppes/npcs/CustomNpcs.java b/src/main/java/noppes/npcs/CustomNpcs.java index aab6a07e5..8c48dc196 100644 --- a/src/main/java/noppes/npcs/CustomNpcs.java +++ b/src/main/java/noppes/npcs/CustomNpcs.java @@ -35,7 +35,7 @@ import java.util.ArrayList; import java.util.Set; import java.util.UUID; -@Mod(modid = "customnpcs", name = "CustomNPC+", version = "1.8.2-beta2") +@Mod(modid = "customnpcs", name = "CustomNPC+", version = "1.8.2") public class CustomNpcs { @SidedProxy(clientSide = "noppes.npcs.client.ClientProxy", serverSide = "noppes.npcs.CommonProxy")