From d57571ea0dd41b816d8f3fd7a9a8b6a927121f4e Mon Sep 17 00:00:00 2001 From: luisc Date: Thu, 24 Oct 2024 17:12:00 -0500 Subject: [PATCH] Made API return a DBC player object if a player is a DBC player. Deprecated old getDBCPlayer() function. --- .../java/noppes/npcs/scripted/NpcAPI.java | 68 ++++++++++++------- .../npcs/scripted/entity/ScriptEntity.java | 8 ++- .../npcs/scripted/entity/ScriptPlayer.java | 12 +--- 3 files changed, 54 insertions(+), 34 deletions(-) diff --git a/src/main/java/noppes/npcs/scripted/NpcAPI.java b/src/main/java/noppes/npcs/scripted/NpcAPI.java index ed1c02265..16c9627a2 100644 --- a/src/main/java/noppes/npcs/scripted/NpcAPI.java +++ b/src/main/java/noppes/npcs/scripted/NpcAPI.java @@ -195,29 +195,51 @@ public class NpcAPI extends AbstractNpcAPI { return ((EntityNPCInterface)entity).wrappedNPC; else{ ScriptEntityData data = (ScriptEntityData) entity.getExtendedProperties("ScriptedObject"); - if(data != null) - return data.base; - if(entity instanceof EntityPlayerMP) - data = new ScriptEntityData(new ScriptPlayer<>((EntityPlayerMP) entity)); - else if(PixelmonHelper.isPixelmon(entity)) - return new ScriptPixelmon((EntityTameable) entity); - else if(entity instanceof EntityAnimal) - data = new ScriptEntityData(new ScriptAnimal<>((EntityAnimal) entity)); - else if(entity instanceof EntityMob) - data = new ScriptEntityData(new ScriptMonster<>((EntityMob) entity)); - else if(entity instanceof EntityVillager) - data = new ScriptEntityData(new ScriptVillager<>((EntityVillager) entity)); - else if(entity instanceof EntityLiving) - data = new ScriptEntityData(new ScriptLiving<>((EntityLiving) entity)); - else if(entity instanceof EntityLivingBase) - data = new ScriptEntityData(new ScriptLivingBase<>((EntityLivingBase)entity)); - else if(entity instanceof EntityProjectile) - data = new ScriptEntityData(new ScriptProjectile<>((EntityProjectile)entity)); - else if(entity instanceof EntityItem) - data = new ScriptEntityData(new ScriptEntityItem<>((EntityItem)entity)); - else - data = new ScriptEntityData(new ScriptEntity<>(entity)); - entity.registerExtendedProperties("ScriptedObject", data); + boolean isDBC = false; + if(entity instanceof EntityPlayerMP) { + Set keySet = entity.getEntityData().getCompoundTag("PlayerPersisted").func_150296_c(); + for (Object o : keySet) { + String s = (String) o; + if (s.contains("jrmc")) { + isDBC = true; + break; + } + } + } + + if (data == null || data.base instanceof ScriptDBCPlayer != isDBC) { + if (entity instanceof EntityPlayerMP) { + ScriptEntityData newData; + if (isDBC) { + newData = new ScriptEntityData(new ScriptDBCPlayer<>((EntityPlayerMP) entity)); + } else { + newData = new ScriptEntityData(new ScriptPlayer<>((EntityPlayerMP) entity)); + } + if (data != null) { + ((ScriptEntity) newData.base).copyTempData(data.base); + } + data = newData; + } + else if (PixelmonHelper.isPixelmon(entity)) + return new ScriptPixelmon((EntityTameable) entity); + else if (entity instanceof EntityAnimal) + data = new ScriptEntityData(new ScriptAnimal<>((EntityAnimal) entity)); + else if (entity instanceof EntityMob) + data = new ScriptEntityData(new ScriptMonster<>((EntityMob) entity)); + else if (entity instanceof EntityVillager) + data = new ScriptEntityData(new ScriptVillager<>((EntityVillager) entity)); + else if (entity instanceof EntityLiving) + data = new ScriptEntityData(new ScriptLiving<>((EntityLiving) entity)); + else if (entity instanceof EntityLivingBase) + data = new ScriptEntityData(new ScriptLivingBase<>((EntityLivingBase) entity)); + else if (entity instanceof EntityProjectile) + data = new ScriptEntityData(new ScriptProjectile<>((EntityProjectile) entity)); + else if (entity instanceof EntityItem) + data = new ScriptEntityData(new ScriptEntityItem<>((EntityItem) entity)); + else + data = new ScriptEntityData(new ScriptEntity<>(entity)); + entity.registerExtendedProperties("ScriptedObject", data); + } return data.base; } } diff --git a/src/main/java/noppes/npcs/scripted/entity/ScriptEntity.java b/src/main/java/noppes/npcs/scripted/entity/ScriptEntity.java index 6922e9e92..58342e8f0 100644 --- a/src/main/java/noppes/npcs/scripted/entity/ScriptEntity.java +++ b/src/main/java/noppes/npcs/scripted/entity/ScriptEntity.java @@ -33,7 +33,7 @@ import java.util.*; public class ScriptEntity implements IEntity { protected T entity; - private Map tempData = new HashMap(); + private Map tempData = new HashMap<>(); public ScriptEntity(T entity){ this.entity = entity; @@ -513,6 +513,12 @@ public class ScriptEntity implements IEntity { return tempData.get(key); } + public void copyTempData(IEntity scriptEntity) { + if (scriptEntity != null) { + this.tempData = ((ScriptEntity) scriptEntity).tempData; + } + } + /** * Tempdata gets cleared when the entity gets unloaded or the world restarts * @param key The key for the data stored diff --git a/src/main/java/noppes/npcs/scripted/entity/ScriptPlayer.java b/src/main/java/noppes/npcs/scripted/entity/ScriptPlayer.java index dc161d2c6..8eef50b4e 100644 --- a/src/main/java/noppes/npcs/scripted/entity/ScriptPlayer.java +++ b/src/main/java/noppes/npcs/scripted/entity/ScriptPlayer.java @@ -705,17 +705,9 @@ public class ScriptPlayer extends ScriptLivingBase return data.getGUIOpen(); } + @Deprecated public ScriptDBCPlayer getDBCPlayer() { - Set keySet = player.getEntityData().getCompoundTag("PlayerPersisted").func_150296_c(); - Iterator iterator = keySet.iterator(); - - while (iterator.hasNext()) - { - String s = (String)iterator.next(); - if(s.contains("jrmc")) - return new ScriptDBCPlayer(this.player); - } - return null; + return this instanceof ScriptDBCPlayer ? (ScriptDBCPlayer) this : null; } public boolean blocking() {