From 221f00ccf4fa9219e83e5a5948d59dc808c089e3 Mon Sep 17 00:00:00 2001 From: Kam Date: Mon, 15 May 2023 23:06:21 -0400 Subject: [PATCH] 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]);