From cf82314181d93c0ee800c8472bb1546b30cb573e Mon Sep 17 00:00:00 2001 From: Kam Date: Mon, 15 May 2023 20:03:52 -0400 Subject: [PATCH] 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"));