diff --git a/src/main/java/noppes/npcs/CustomNpcs.java b/src/main/java/noppes/npcs/CustomNpcs.java index 413ca8b3f..a14226b80 100644 --- a/src/main/java/noppes/npcs/CustomNpcs.java +++ b/src/main/java/noppes/npcs/CustomNpcs.java @@ -182,6 +182,10 @@ public class CustomNpcs { MinecraftForge.EVENT_BUS.register(forgeEventHandler); FMLCommonHandler.instance().bus().register(forgeEventHandler); + ScriptItemEventHandler scriptItemEventHandler = new ScriptItemEventHandler(); + MinecraftForge.EVENT_BUS.register(scriptItemEventHandler); + FMLCommonHandler.instance().bus().register(scriptItemEventHandler); + FMLCommonHandler.instance().bus().register(new ServerTickHandler()); registerNpc(EntityNPCHumanMale.class, "npchumanmale"); diff --git a/src/main/java/noppes/npcs/DataInventory.java b/src/main/java/noppes/npcs/DataInventory.java index 601cf1791..924ebd969 100644 --- a/src/main/java/noppes/npcs/DataInventory.java +++ b/src/main/java/noppes/npcs/DataInventory.java @@ -19,8 +19,8 @@ import noppes.npcs.entity.EntityNPCInterface; public class DataInventory implements IInventory{ public HashMap items = new HashMap(); public HashMap dropchance = new HashMap(); - public HashMap weapons = new HashMap(); - public HashMap armor = new HashMap(); + public HashMap weapons = new HashMap(); + public HashMap armor = new HashMap(); public int minExp = 0; public int maxExp = 0; diff --git a/src/main/java/noppes/npcs/EventHooks.java b/src/main/java/noppes/npcs/EventHooks.java index 2d2a42606..49d402c3e 100644 --- a/src/main/java/noppes/npcs/EventHooks.java +++ b/src/main/java/noppes/npcs/EventHooks.java @@ -7,6 +7,7 @@ package noppes.npcs; import cpw.mods.fml.common.eventhandler.Event; import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLiving; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.item.EntityXPOrb; @@ -53,22 +54,22 @@ public class EventHooks { public static void onScriptItemInit(ScriptCustomItem handler) { if (!handler.isClient()) { - noppes.npcs.scripted.event.ItemEvent.InitEvent event = new noppes.npcs.scripted.event.ItemEvent.InitEvent(handler); + ItemEvent.InitEvent event = new ItemEvent.InitEvent(handler); handler.callScript(EnumScriptType.INIT, event); WrapperNpcAPI.EVENT_BUS.post(event); } } - public static void onScriptItemUpdate(ScriptCustomItem handler, EntityPlayer player) { + public static void onScriptItemUpdate(ScriptCustomItem handler, EntityLivingBase player) { if (!handler.isClient()) { - noppes.npcs.scripted.event.ItemEvent.UpdateEvent event = new noppes.npcs.scripted.event.ItemEvent.UpdateEvent(handler, (ScriptPlayer)ScriptController.Instance.getScriptForEntity(player)); + ItemEvent.UpdateEvent event = new ItemEvent.UpdateEvent(handler, ScriptController.Instance.getScriptForEntity(player)); handler.callScript(EnumScriptType.TICK, event); WrapperNpcAPI.EVENT_BUS.post(event); } } public static boolean onScriptItemTossed(ScriptCustomItem handler, EntityPlayer player, EntityItem entity) { - ItemEvent.TossedEvent event = new ItemEvent.TossedEvent(handler, (ScriptPlayer)ScriptController.Instance.getScriptForEntity(player), (ScriptEntity)NpcAPI.Instance().getIEntity(entity)); + ItemEvent.TossedEvent event = new ItemEvent.TossedEvent(handler, (ScriptPlayer)ScriptController.Instance.getScriptForEntity(player), ScriptController.Instance.getScriptForEntity(entity)); handler.callScript(EnumScriptType.TOSSED, event); return WrapperNpcAPI.EVENT_BUS.post(event); } @@ -80,7 +81,7 @@ public class EventHooks { } public static boolean onScriptItemSpawn(ScriptCustomItem handler, EntityItem entity) { - ItemEvent.SpawnEvent event = new ItemEvent.SpawnEvent(handler, (ScriptEntity)NpcAPI.Instance().getIEntity(entity)); + ItemEvent.SpawnEvent event = new ItemEvent.SpawnEvent(handler, ScriptController.Instance.getScriptForEntity(entity)); handler.callScript(EnumScriptType.SPAWN, event); return WrapperNpcAPI.EVENT_BUS.post(event); } @@ -460,7 +461,7 @@ public class EventHooks { } public static void onForgeEntityEvent(EntityEvent event) { - IEntity e = NpcAPI.Instance().getIEntity(event.entity); + IEntity e = ScriptController.Instance.getScriptForEntity(event.entity); onForgeEvent(new noppes.npcs.scripted.event.ForgeEvent.EntityEvent(event, e), event); } diff --git a/src/main/java/noppes/npcs/PacketHandlerServer.java b/src/main/java/noppes/npcs/PacketHandlerServer.java index 83d839a87..d0bb72d25 100644 --- a/src/main/java/noppes/npcs/PacketHandlerServer.java +++ b/src/main/java/noppes/npcs/PacketHandlerServer.java @@ -79,22 +79,22 @@ public class PacketHandlerServer{ return; } else if (type == EnumPacketServer.CustomGuiButton && player.openContainer instanceof ContainerCustomGui) { ((ContainerCustomGui)player.openContainer).customGui.fromNBT(Server.readNBT(buffer)); - EventHooks.onCustomGuiButton((ScriptPlayer)NpcAPI.Instance().getIEntity(player), ((ContainerCustomGui)player.openContainer).customGui, buffer.readInt()); + EventHooks.onCustomGuiButton((ScriptPlayer)ScriptController.Instance.getScriptForEntity(player), ((ContainerCustomGui)player.openContainer).customGui, buffer.readInt()); return; } else if (type == EnumPacketServer.CustomGuiSlotChange && player.openContainer instanceof ContainerCustomGui) { ((ContainerCustomGui)player.openContainer).customGui.fromNBT(Server.readNBT(buffer)); - EventHooks.onCustomGuiSlot((ScriptPlayer) NpcAPI.Instance().getIEntity(player), ((ContainerCustomGui)player.openContainer).customGui, buffer.readInt()); + EventHooks.onCustomGuiSlot((ScriptPlayer)ScriptController.Instance.getScriptForEntity(player), ((ContainerCustomGui)player.openContainer).customGui, buffer.readInt()); return; } else if(type == EnumPacketServer.CustomGuiUnfocused && player.openContainer instanceof ContainerCustomGui) { ((ContainerCustomGui)player.openContainer).customGui.fromNBT(Server.readNBT(buffer)); - EventHooks.onCustomGuiUnfocused((ScriptPlayer) NpcAPI.Instance().getIEntity(player), ((ContainerCustomGui) player.openContainer).customGui, buffer.readInt()); + EventHooks.onCustomGuiUnfocused((ScriptPlayer)ScriptController.Instance.getScriptForEntity(player), ((ContainerCustomGui) player.openContainer).customGui, buffer.readInt()); return; } else if (type == EnumPacketServer.CustomGuiScrollClick && player.openContainer instanceof ContainerCustomGui) { ((ContainerCustomGui) player.openContainer).customGui.fromNBT(Server.readNBT(buffer)); - EventHooks.onCustomGuiScrollClick((ScriptPlayer) NpcAPI.Instance().getIEntity(player), ((ContainerCustomGui) player.openContainer).customGui, buffer.readInt(), buffer.readInt(), CustomGuiController.readScrollSelection(buffer), buffer.readBoolean()); + EventHooks.onCustomGuiScrollClick((ScriptPlayer)ScriptController.Instance.getScriptForEntity(player), ((ContainerCustomGui) player.openContainer).customGui, buffer.readInt(), buffer.readInt(), CustomGuiController.readScrollSelection(buffer), buffer.readBoolean()); return; } else if (type == EnumPacketServer.CustomGuiClose) { - EventHooks.onCustomGuiClose((ScriptPlayer)NpcAPI.Instance().getIEntity(player), (new ScriptGui()).fromNBT(Server.readNBT(buffer))); + EventHooks.onCustomGuiClose((ScriptPlayer)ScriptController.Instance.getScriptForEntity(player), (new ScriptGui()).fromNBT(Server.readNBT(buffer))); return; } diff --git a/src/main/java/noppes/npcs/ScriptItemEventHandler.java b/src/main/java/noppes/npcs/ScriptItemEventHandler.java new file mode 100644 index 000000000..e21ddd8dc --- /dev/null +++ b/src/main/java/noppes/npcs/ScriptItemEventHandler.java @@ -0,0 +1,112 @@ +package noppes.npcs; + +import cpw.mods.fml.common.eventhandler.SubscribeEvent; +import cpw.mods.fml.common.gameevent.PlayerEvent; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.WorldServer; +import net.minecraftforge.event.entity.EntityJoinWorldEvent; +import net.minecraftforge.event.entity.item.ItemTossEvent; +import net.minecraftforge.event.entity.living.LivingEvent; +import net.minecraftforge.event.entity.living.LivingHurtEvent; +import net.minecraftforge.event.entity.player.EntityInteractEvent; +import noppes.npcs.controllers.ScriptController; +import noppes.npcs.entity.EntityCustomNpc; +import noppes.npcs.items.ItemScripted; +import noppes.npcs.scripted.NpcAPI; +import noppes.npcs.scripted.event.ItemEvent; +import noppes.npcs.scripted.interfaces.IItemStack; +import noppes.npcs.scripted.interfaces.IPlayer; +import noppes.npcs.scripted.item.ScriptCustomItem; +import java.util.HashMap; + +public class ScriptItemEventHandler { + public ScriptItemEventHandler() {} + + @SubscribeEvent + public void invoke(LivingEvent.LivingUpdateEvent event) { + if(event.entityLiving == null || event.entityLiving.worldObj == null || event.entityLiving instanceof EntityPlayer) + return; + + if (event.entityLiving instanceof EntityCustomNpc) { + HashMap armor = ((EntityCustomNpc) event.entityLiving).inventory.armor; + HashMap items = ((EntityCustomNpc) event.entityLiving).inventory.items; + HashMap weapons = ((EntityCustomNpc) event.entityLiving).inventory.weapons; + HashMap[] inventories = new HashMap[]{armor, items, weapons}; + + for (HashMap inventory : inventories) { + for (ItemStack stack : inventory.values()) { + if (stack != null && stack.getItem() == CustomItems.scripted_item) { + IItemStack istack = NpcAPI.Instance().getIItemStack(stack); + EventHooks.onScriptItemUpdate((ScriptCustomItem) istack, event.entityLiving); + } + } + } + } else if(event.entityLiving.getHeldItem() != null && event.entityLiving.getHeldItem().getItem() == CustomItems.scripted_item && !event.isCanceled()) { + IItemStack itemStack = NpcAPI.Instance().getIItemStack(event.entityLiving.getHeldItem()); + EventHooks.onScriptItemUpdate((ScriptCustomItem) itemStack, event.entityLiving); + } + } + + @SubscribeEvent + public void invoke(ItemTossEvent event) { + if(event.player == null || event.player.worldObj == null) + return; + + if(event.player.worldObj instanceof WorldServer) { + try { + if (event.entityItem.getEntityItem().getItem() == CustomItems.scripted_item && !event.isCanceled()) { + ScriptCustomItem isw = ItemScripted.GetWrapper(event.entityItem.getEntityItem()); + EventHooks.onScriptItemTossed(isw, event.player, event.entityItem); + } + } catch (Exception e) {} + } + } + + @SubscribeEvent + public void invoke(PlayerEvent.ItemPickupEvent event) { + if(event.player == null || event.player.worldObj == null) + return; + + if(event.player.worldObj instanceof WorldServer) { + try { + if (event.player.getHeldItem().getItem() == CustomItems.scripted_item && !event.isCanceled()) { + ScriptCustomItem isw = ItemScripted.GetWrapper(event.player.getHeldItem()); + EventHooks.onScriptItemPickedUp(isw, event.player); + } + } catch(Exception e) {} + } + } + + @SubscribeEvent + public void invoke(EntityJoinWorldEvent event) { + if (!event.world.isRemote && event.entity instanceof EntityItem) { + EntityItem entity = (EntityItem)event.entity; + ItemStack stack = entity.getEntityItem(); + + try { + if (stack.stackSize > 0 && stack.getItem() == CustomItems.scripted_item && EventHooks.onScriptItemSpawn(ItemScripted.GetWrapper(stack), entity)) { + event.setCanceled(true); + } + } catch(Exception e) {} + } + } + + @SubscribeEvent + public void invoke(EntityInteractEvent event) { + if(event.entityPlayer == null || event.entityPlayer.worldObj == null) + return; + + if(!event.entityPlayer.worldObj.isRemote && event.entityPlayer.worldObj instanceof WorldServer) { + try { + if (event.entityPlayer.getHeldItem().getItem() == CustomItems.scripted_item && !event.isCanceled()) { + ScriptCustomItem isw = ItemScripted.GetWrapper(event.entityPlayer.getHeldItem()); + ItemEvent.InteractEvent eve = new ItemEvent.InteractEvent(isw, (IPlayer) ScriptController.Instance.getScriptForEntity(event.entityPlayer), 2, NpcAPI.Instance().getIBlock(event.entityPlayer.worldObj, new BlockPos(event.entityPlayer.posX, event.entityPlayer.posY, event.entityPlayer.posZ))); + event.setCanceled(EventHooks.onScriptItemInteract(isw, eve)); + } + } catch(Exception e) {} + } + } +} diff --git a/src/main/java/noppes/npcs/ScriptPlayerEventHandler.java b/src/main/java/noppes/npcs/ScriptPlayerEventHandler.java index f0ca3b77c..d2a49cb65 100644 --- a/src/main/java/noppes/npcs/ScriptPlayerEventHandler.java +++ b/src/main/java/noppes/npcs/ScriptPlayerEventHandler.java @@ -5,41 +5,18 @@ package noppes.npcs; -import com.google.common.reflect.ClassPath; -import com.google.common.reflect.ClassPath.ClassInfo; -import java.lang.reflect.Field; -import java.lang.reflect.Method; -import java.lang.reflect.Modifier; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Iterator; -import java.util.Vector; - -import cpw.mods.fml.common.FMLCommonHandler; -import cpw.mods.fml.common.Loader; -import cpw.mods.fml.common.ModContainer; -import cpw.mods.fml.common.eventhandler.Event; import cpw.mods.fml.common.eventhandler.EventPriority; import cpw.mods.fml.common.eventhandler.SubscribeEvent; -import cpw.mods.fml.common.gameevent.InputEvent; import cpw.mods.fml.common.gameevent.PlayerEvent; import cpw.mods.fml.common.gameevent.TickEvent; -import cpw.mods.fml.common.network.FMLNetworkEvent; import cpw.mods.fml.relauncher.Side; import net.minecraft.entity.Entity; -import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.inventory.ContainerPlayer; -import net.minecraft.item.ItemStack; import net.minecraft.util.ChatComponentTranslation; import net.minecraft.util.math.BlockPos; import net.minecraft.world.WorldServer; import net.minecraftforge.common.ForgeHooks; -import net.minecraftforge.common.MinecraftForge; -import net.minecraftforge.event.entity.EntityEvent; -import net.minecraftforge.event.entity.EntityEvent.EntityConstructing; -import net.minecraftforge.event.entity.EntityJoinWorldEvent; import net.minecraftforge.event.entity.EntityStruckByLightningEvent; import net.minecraftforge.event.entity.PlaySoundAtEntityEvent; import net.minecraftforge.event.entity.item.ItemTossEvent; @@ -49,19 +26,12 @@ import net.minecraftforge.event.entity.living.LivingFallEvent; import net.minecraftforge.event.entity.living.LivingHurtEvent; import net.minecraftforge.event.entity.player.*; import net.minecraftforge.event.world.*; -import net.minecraftforge.event.world.WorldEvent.PotentialSpawns; -import noppes.npcs.constants.EnumPacketClient; import noppes.npcs.constants.EnumQuestType; import noppes.npcs.controllers.*; import noppes.npcs.controllers.data.PlayerDataScript; import noppes.npcs.entity.EntityNPCInterface; -import noppes.npcs.items.ItemScripted; import noppes.npcs.scripted.NpcAPI; import noppes.npcs.scripted.entity.ScriptPlayer; -import noppes.npcs.scripted.event.ForgeEvent; -import noppes.npcs.scripted.item.ScriptCustomItem; -import noppes.npcs.scripted.wrapper.WrapperNpcAPI; -import org.lwjgl.input.Mouse; public class ScriptPlayerEventHandler { public ScriptPlayerEventHandler() { @@ -78,17 +48,6 @@ public class ScriptPlayerEventHandler { PlayerDataScript handler = ScriptController.Instance.playerScripts; ScriptPlayer scriptPlayer = (ScriptPlayer) ScriptController.Instance.getScriptForEntity(player); EventHooks.onPlayerTick(handler, scriptPlayer); - - for(int i = 0; i < player.inventory.getSizeInventory(); ++i) { - ItemStack item = player.inventory.getStackInSlot(i); - - try { - if (item.stackSize > 0 && item.getItem() == CustomItems.scripted_item) { - ScriptCustomItem isw = (ScriptCustomItem) WrapperNpcAPI.Instance().getIItemStack(item); - EventHooks.onScriptItemUpdate(isw, player); - } - } catch(Exception e) {} - } } PlayerData playerData = PlayerDataController.instance.getPlayerData(player); @@ -113,16 +72,8 @@ public class ScriptPlayerEventHandler { if(!event.entityPlayer.worldObj.isRemote && event.entityPlayer.worldObj instanceof WorldServer) { PlayerDataScript handler = ScriptController.Instance.playerScripts; ScriptPlayer scriptPlayer = (ScriptPlayer) ScriptController.Instance.getScriptForEntity(event.entityPlayer); - noppes.npcs.scripted.event.PlayerEvent.InteractEvent ev = new noppes.npcs.scripted.event.PlayerEvent.InteractEvent(scriptPlayer, 1, NpcAPI.Instance().getIEntity(event.target)); + noppes.npcs.scripted.event.PlayerEvent.InteractEvent ev = new noppes.npcs.scripted.event.PlayerEvent.InteractEvent(scriptPlayer, 1, ScriptController.Instance.getScriptForEntity(event.target)); event.setCanceled(EventHooks.onPlayerInteract(handler, ev)); - - try { - if (event.entityPlayer.getHeldItem().getItem() == CustomItems.scripted_item && !event.isCanceled()) { - ScriptCustomItem isw = ItemScripted.GetWrapper(event.entityPlayer.getHeldItem()); - noppes.npcs.scripted.event.ItemEvent.InteractEvent eve = new noppes.npcs.scripted.event.ItemEvent.InteractEvent(isw, handler.getPlayer(), 2, NpcAPI.Instance().getIBlock(event.entityPlayer.worldObj, new BlockPos(event.entityPlayer.posX, event.entityPlayer.posY, event.entityPlayer.posZ))); - event.setCanceled(EventHooks.onScriptItemInteract(isw, eve)); - } - } catch(Exception e) {} } } @@ -256,13 +207,6 @@ public class ScriptPlayerEventHandler { PlayerDataScript handler = ScriptController.Instance.playerScripts; ScriptPlayer scriptPlayer = (ScriptPlayer) ScriptController.Instance.getScriptForEntity(event.player); EventHooks.onPlayerPickUp(handler, scriptPlayer, event.pickedUp); - - try { - if (event.player.getHeldItem().getItem() == CustomItems.scripted_item && !event.isCanceled()) { - ScriptCustomItem isw = ItemScripted.GetWrapper(event.player.getHeldItem()); - EventHooks.onScriptItemPickedUp(isw, event.player); - } - } catch(Exception e) {} } } @@ -359,13 +303,6 @@ public class ScriptPlayerEventHandler { PlayerDataScript handler = ScriptController.Instance.playerScripts; ScriptPlayer scriptPlayer = (ScriptPlayer) ScriptController.Instance.getScriptForEntity(event.player); EventHooks.onPlayerToss(handler, scriptPlayer, event.entityItem); - - try { - if (event.player.getHeldItem().getItem() == CustomItems.scripted_item && !event.isCanceled()) { - ScriptCustomItem isw = ItemScripted.GetWrapper(event.player.getHeldItem()); - EventHooks.onScriptItemTossed(isw, event.player, event.entityItem); - } - } catch (Exception e){}; } } @@ -464,19 +401,7 @@ public class ScriptPlayerEventHandler { noppes.npcs.scripted.event.PlayerEvent.DamagedEntityEvent pevent1 = new noppes.npcs.scripted.event.PlayerEvent.DamagedEntityEvent((ScriptPlayer)ScriptController.Instance.getScriptForEntity((EntityPlayer)event.source.getEntity()), event.entityLiving, event.ammount, event.source); event.setCanceled(EventHooks.onPlayerDamagedEntity(handler, pevent1)); event.ammount = pevent1.damage; - - try { - if (((EntityPlayer) event.source.getEntity()).getHeldItem().getItem() != null - && ((EntityPlayer) event.source.getEntity()).getHeldItem().getItem() == CustomItems.scripted_item - && !event.isCanceled()) { - ScriptCustomItem isw = ItemScripted.GetWrapper(((EntityPlayer) event.source.getEntity()).getHeldItem()); - noppes.npcs.scripted.event.ItemEvent.AttackEvent eve = new noppes.npcs.scripted.event.ItemEvent.AttackEvent(isw, handler.getPlayer(), 1, event.entityLiving); - eve.setCanceled(event.isCanceled()); - event.setCanceled(EventHooks.onScriptItemAttack(isw, eve)); - } - } catch(Exception e) {} } - } } @@ -516,20 +441,6 @@ public class ScriptPlayerEventHandler { } } - @SubscribeEvent - public void invoke(EntityJoinWorldEvent event) { - if (!event.world.isRemote && event.entity instanceof EntityItem) { - EntityItem entity = (EntityItem)event.entity; - ItemStack stack = entity.getEntityItem(); - - try { - if (stack.stackSize > 0 && stack.getItem() == CustomItems.scripted_item && EventHooks.onScriptItemSpawn(ItemScripted.GetWrapper(stack), entity)) { - event.setCanceled(true); - } - } catch(Exception e) {} - } - } - @SubscribeEvent( priority = EventPriority.HIGHEST ) diff --git a/src/main/java/noppes/npcs/client/gui/script/GuiScriptInterface.java b/src/main/java/noppes/npcs/client/gui/script/GuiScriptInterface.java index 4b0b2928e..7e6100906 100644 --- a/src/main/java/noppes/npcs/client/gui/script/GuiScriptInterface.java +++ b/src/main/java/noppes/npcs/client/gui/script/GuiScriptInterface.java @@ -20,7 +20,6 @@ import net.minecraft.client.gui.GuiYesNo; import net.minecraft.client.gui.GuiYesNoCallback; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; -import net.minecraftforge.event.CommandEvent; import net.minecraftforge.event.entity.EntityEvent; import net.minecraftforge.event.entity.player.ItemTooltipEvent; import net.minecraftforge.event.world.ChunkDataEvent; @@ -37,6 +36,7 @@ import noppes.npcs.controllers.ScriptController; import noppes.npcs.controllers.data.ForgeDataScript; import noppes.npcs.controllers.data.NPCDataScript; import noppes.npcs.controllers.data.PlayerDataScript; +import noppes.npcs.scripted.item.ScriptCustomItem; import org.apache.commons.lang3.StringUtils; public class GuiScriptInterface extends GuiNPCInterface implements GuiYesNoCallback, IGuiData, ITextChangeListener, ICustomScrollListener, IJTextAreaListener, ITextfieldListener { @@ -165,6 +165,17 @@ public class GuiScriptInterface extends GuiNPCInterface implements GuiYesNoCallb hookList.add("dialogClose"); hookList.add("timer"); } + else if(handler instanceof ScriptCustomItem) { + hookList.add("init"); + hookList.add("tick"); + hookList.add("tossed"); + hookList.add("pickedUp"); + hookList.add("spawn"); + hookList.add("interact"); + hookList.add("attack"); + //hookList.add(""); + //hookList.add(""); + } else if(handler instanceof ForgeDataScript) { hooks.setSize(238, 198); hooks.guiLeft = guiLeft - 240; diff --git a/src/main/java/noppes/npcs/client/renderer/CustomItemRenderer.java b/src/main/java/noppes/npcs/client/renderer/CustomItemRenderer.java index 12a4123e6..d875ec1d4 100644 --- a/src/main/java/noppes/npcs/client/renderer/CustomItemRenderer.java +++ b/src/main/java/noppes/npcs/client/renderer/CustomItemRenderer.java @@ -79,14 +79,24 @@ public class CustomItemRenderer implements IItemRenderer { return; } - ((ItemScripted) itemStack.getItem()).renderCustomAttributes(itemStack); - if (type == ItemRenderType.ENTITY) { + ((ItemScripted) itemStack.getItem()).renderCustomAttributes(itemStack); EntityItem entityItem = (EntityItem) data[1]; renderEntityCustomItem(scriptCustomItem, itemStack, entityItem); return; } + GL11.glTranslatef(0.9375F, 0.0625F, 0.0F); + GL11.glRotatef(-315.0F, 0.0F, 0.0F, 1.0F); + + ((ItemRenderInterface) itemStack.getItem()).renderSpecial(); + GL11.glTranslatef(scriptCustomItem.translateX, scriptCustomItem.translateY, scriptCustomItem.translateZ); + ((ItemScripted) itemStack.getItem()).renderCustomAttributes(itemStack); + + GL11.glRotatef(-20.0F, 0.0F, 0.0F, 1.0F); + GL11.glRotatef(-50.0F, 0.0F, 1.0F, 0.0F); + GL11.glTranslatef(-0.09375F, 0.0625F, 0.0F); + EntityLivingBase entityLivingBase = (EntityLivingBase) data[1]; renderItem3d(scriptCustomItem, entityLivingBase, itemStack); } @@ -348,6 +358,13 @@ public class CustomItemRenderer implements IItemRenderer { GL11.glEnable(GL12.GL_RESCALE_NORMAL); + float f4 = 0.0F; + float f5 = 0.3F; + GL11.glTranslatef(-f4, -f5, 0.0F); + GL11.glRotatef(50.0F, 0.0F, 1.0F, 0.0F); + GL11.glRotatef(335.0F, 0.0F, 0.0F, 1.0F); + GL11.glTranslatef(-0.9375F, -0.0625F, 0.0F); + renderCustomItemIn2D(itemStack, tessellator, 1.0F, 0.0F, 0.0F, 1.0F, 0.0625F); if (itemStack.hasEffect(par3)) { diff --git a/src/main/java/noppes/npcs/controllers/ServerCloneController.java b/src/main/java/noppes/npcs/controllers/ServerCloneController.java index 99cc2e437..4dcb0ebcf 100644 --- a/src/main/java/noppes/npcs/controllers/ServerCloneController.java +++ b/src/main/java/noppes/npcs/controllers/ServerCloneController.java @@ -207,7 +207,7 @@ public class ServerCloneController implements ICloneHandler { throw new CustomNPCsException("Unknown clone tab:" + tab + " name:" + name, new Object[0]); } else { Entity entity = NoppesUtilServer.spawnClone(compound, (int)x, (int)y, (int)z, world.getMCWorld()); - return entity == null ? null : NpcAPI.Instance().getIEntity(entity); + return entity == null ? null : ScriptController.Instance.getScriptForEntity(entity); } } @@ -218,7 +218,7 @@ public class ServerCloneController implements ICloneHandler { } else { Instance.cleanTags(compound); Entity entity = EntityList.createEntityFromNBT(compound, world.getMCWorld()); - return entity == null ? null : NpcAPI.Instance().getIEntity(entity); + return entity == null ? null : ScriptController.Instance.getScriptForEntity(entity); } } diff --git a/src/main/java/noppes/npcs/controllers/data/NPCDataScript.java b/src/main/java/noppes/npcs/controllers/data/NPCDataScript.java index 4e05af3e5..44ea2681d 100644 --- a/src/main/java/noppes/npcs/controllers/data/NPCDataScript.java +++ b/src/main/java/noppes/npcs/controllers/data/NPCDataScript.java @@ -120,7 +120,7 @@ public class NPCDataScript implements IScriptHandler { } public ICustomNpc getNpc() { if (this.npcAPI == null) { - this.npcAPI = (ICustomNpc) NpcAPI.Instance().getIEntity(this.npc); + this.npcAPI = (ICustomNpc) ScriptController.Instance.getScriptForEntity(this.npc); } return this.npcAPI; } diff --git a/src/main/java/noppes/npcs/controllers/data/PlayerDataScript.java b/src/main/java/noppes/npcs/controllers/data/PlayerDataScript.java index aa9cad05c..ab3e95477 100644 --- a/src/main/java/noppes/npcs/controllers/data/PlayerDataScript.java +++ b/src/main/java/noppes/npcs/controllers/data/PlayerDataScript.java @@ -138,7 +138,7 @@ public class PlayerDataScript implements IScriptHandler { } public IPlayer getPlayer() { if (this.playerAPI == null) { - this.playerAPI = (IPlayer) NpcAPI.Instance().getIEntity(this.player); + this.playerAPI = (IPlayer) ScriptController.Instance.getScriptForEntity(this.player); } return this.playerAPI; } diff --git a/src/main/java/noppes/npcs/items/ItemScripted.java b/src/main/java/noppes/npcs/items/ItemScripted.java index 8150dfdb9..43b941229 100644 --- a/src/main/java/noppes/npcs/items/ItemScripted.java +++ b/src/main/java/noppes/npcs/items/ItemScripted.java @@ -4,6 +4,7 @@ import cpw.mods.fml.common.registry.GameRegistry; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.block.Block; +import net.minecraft.client.entity.EntityClientPlayerMP; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; @@ -15,9 +16,13 @@ import net.minecraft.item.ItemStack; import net.minecraft.world.World; import noppes.npcs.CustomItems; import noppes.npcs.CustomNpcs; +import noppes.npcs.EventHooks; import noppes.npcs.constants.EnumGuiType; +import noppes.npcs.controllers.ScriptController; import noppes.npcs.scripted.NpcAPI; +import noppes.npcs.scripted.event.ItemEvent; import noppes.npcs.scripted.interfaces.IItemStack; +import noppes.npcs.scripted.interfaces.IPlayer; import noppes.npcs.scripted.item.ScriptCustomItem; import org.lwjgl.opengl.GL11; @@ -29,6 +34,12 @@ public class ItemScripted extends Item implements ItemRenderInterface { setHasSubtypes(true); } + @Override + public void onUpdate(ItemStack stack, World world, Entity player, int p_77663_4_, boolean p_77663_5_) { + IItemStack istack = NpcAPI.Instance().getIItemStack(stack); + EventHooks.onScriptItemUpdate((ScriptCustomItem) istack, (EntityPlayer) player); + } + @SideOnly(Side.CLIENT) public void registerIcons(IIconRegister par1IconRegister){ this.itemIcon = Items.iron_pickaxe.getIconFromDamage(0); @@ -59,6 +70,16 @@ public class ItemScripted extends Item implements ItemRenderInterface { return stack; } + @Override + public boolean onEntitySwing(EntityLivingBase entityLivingBase, ItemStack stack){ + if(entityLivingBase instanceof EntityClientPlayerMP) + return false; + + IItemStack istack = NpcAPI.Instance().getIItemStack(stack); + ItemEvent.AttackEvent eve = new ItemEvent.AttackEvent( (ScriptCustomItem) istack, ScriptController.Instance.getScriptForEntity(entityLivingBase), 2, null); + return EventHooks.onScriptItemAttack((ScriptCustomItem) istack, eve); + } + public int getMaxItemUseDuration(ItemStack stack){ return (new ScriptCustomItem(stack)).getMaxItemUseDuration(); } @@ -111,7 +132,9 @@ public class ItemScripted extends Item implements ItemRenderInterface { } public boolean hitEntity(ItemStack stack, EntityLivingBase target, EntityLivingBase attacker) { - return true; + IItemStack istack = NpcAPI.Instance().getIItemStack(stack); + ItemEvent.AttackEvent eve = new ItemEvent.AttackEvent( (ScriptCustomItem) istack, ScriptController.Instance.getScriptForEntity(attacker), 1, ScriptController.Instance.getScriptForEntity(target)); + return EventHooks.onScriptItemAttack((ScriptCustomItem) istack, eve); } public EnumAction getItemUseAction(ItemStack stack) @@ -135,12 +158,13 @@ public class ItemScripted extends Item implements ItemRenderInterface { } @Override - public void renderSpecial() {} + public void renderSpecial() { + GL11.glTranslatef(0.135F, 0.2F, 0.07F); + } public void renderCustomAttributes(ItemStack itemStack) { ScriptCustomItem scriptCustomItem = GetWrapper(itemStack); - GL11.glTranslatef(scriptCustomItem.translateX, scriptCustomItem.translateY, scriptCustomItem.translateZ); GL11.glRotatef(scriptCustomItem.rotationX, 1, 0, 0); GL11.glRotatef(scriptCustomItem.rotationY, 0, 1, 0); GL11.glRotatef(scriptCustomItem.rotationZ, 0, 0, 1); diff --git a/src/main/java/noppes/npcs/scripted/ScriptWorld.java b/src/main/java/noppes/npcs/scripted/ScriptWorld.java index 72db94221..a25c9ad21 100644 --- a/src/main/java/noppes/npcs/scripted/ScriptWorld.java +++ b/src/main/java/noppes/npcs/scripted/ScriptWorld.java @@ -30,6 +30,7 @@ import noppes.npcs.items.ItemScripted; import noppes.npcs.scripted.entity.ScriptEntity; import noppes.npcs.scripted.entity.ScriptPlayer; import noppes.npcs.scripted.interfaces.IBlock; +import noppes.npcs.scripted.interfaces.IEntity; import noppes.npcs.scripted.interfaces.IItemStack; import noppes.npcs.scripted.interfaces.IWorld; import noppes.npcs.scripted.item.ScriptCustomItem; @@ -146,8 +147,8 @@ public class ScriptWorld implements IWorld { world.playSoundToNearExcept((EntityPlayerMP) player.getMCEntity(), sound, volume, pitch); } - public ScriptEntity getEntityByID(int id){ - return (ScriptEntity) NpcAPI.Instance().getIEntity(world.getEntityByID(id)); + public IEntity getEntityByID(int id){ + return ScriptController.Instance.getScriptForEntity(world.getEntityByID(id)); } public boolean spawnEntityInWorld(ScriptEntity entity){ @@ -155,19 +156,19 @@ public class ScriptWorld implements IWorld { } public ScriptPlayer getClosestPlayerToEntity(ScriptEntity entity, double range){ - return (ScriptPlayer) NpcAPI.Instance().getIEntity(world.getClosestPlayerToEntity(entity.getMCEntity(), range)); + return (ScriptPlayer) ScriptController.Instance.getScriptForEntity(world.getClosestPlayerToEntity(entity.getMCEntity(), range)); } public ScriptPlayer getClosestPlayer(double x, double y, double z, double range){ - return (ScriptPlayer) NpcAPI.Instance().getIEntity(world.getClosestPlayer(x,y,z, range)); + return (ScriptPlayer) ScriptController.Instance.getScriptForEntity(world.getClosestPlayer(x,y,z, range)); } public ScriptPlayer getClosestVulnerablePlayerToEntity(ScriptEntity entity, double range){ - return (ScriptPlayer) NpcAPI.Instance().getIEntity(world.getClosestVulnerablePlayerToEntity(entity.getMCEntity(), range)); + return (ScriptPlayer) ScriptController.Instance.getScriptForEntity(world.getClosestVulnerablePlayerToEntity(entity.getMCEntity(), range)); } public ScriptPlayer getClosestVulnerablePlayer(double x, double y, double z, double range){ - return (ScriptPlayer) NpcAPI.Instance().getIEntity(world.getClosestVulnerablePlayer(x,y,z, range)); + return (ScriptPlayer) ScriptController.Instance.getScriptForEntity(world.getClosestVulnerablePlayer(x,y,z, range)); } public int countEntities(ScriptEntity entity){ @@ -265,7 +266,7 @@ public class ScriptWorld implements IWorld { } public ScriptPlayer getPlayerByUUID(String uuid){ - return (ScriptPlayer) NpcAPI.Instance().getIEntity(world.func_152378_a(UUID.fromString(uuid))); + return (ScriptPlayer) ScriptController.Instance.getScriptForEntity(world.func_152378_a(UUID.fromString(uuid))); } /** diff --git a/src/main/java/noppes/npcs/scripted/event/ItemEvent.java b/src/main/java/noppes/npcs/scripted/event/ItemEvent.java index f4be4626e..6bbb8c4e3 100644 --- a/src/main/java/noppes/npcs/scripted/event/ItemEvent.java +++ b/src/main/java/noppes/npcs/scripted/event/ItemEvent.java @@ -20,11 +20,11 @@ public class ItemEvent extends CustomNPCsEvent { } public static class UpdateEvent extends ItemEvent { - public IPlayer player; + public IEntity entity; - public UpdateEvent(ScriptCustomItem item, IPlayer player) { + public UpdateEvent(ScriptCustomItem item, IEntity entity) { super(item); - this.player = player; + this.entity = entity; } } @@ -76,13 +76,13 @@ public class ItemEvent extends CustomNPCsEvent { public static class AttackEvent extends ItemEvent { public final int type;//1: Hit, 2: Whiff //TODO: Implement type 2 public final Object target; - public IPlayer player; + public IEntity swingingEntity; - public AttackEvent(ScriptCustomItem item, IPlayer player, int type, Object target) { + public AttackEvent(ScriptCustomItem item, IEntity swingingEntity, int type, Object target) { super(item); this.type = type; this.target = target; - this.player = player; + this.swingingEntity = swingingEntity; } } diff --git a/src/main/java/noppes/npcs/scripted/event/NpcEvent.java b/src/main/java/noppes/npcs/scripted/event/NpcEvent.java index a02ef731f..2407cd8c7 100644 --- a/src/main/java/noppes/npcs/scripted/event/NpcEvent.java +++ b/src/main/java/noppes/npcs/scripted/event/NpcEvent.java @@ -11,6 +11,7 @@ import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.util.DamageSource; import noppes.npcs.controllers.Dialog; +import noppes.npcs.controllers.ScriptController; import noppes.npcs.scripted.NpcAPI; import noppes.npcs.scripted.interfaces.*; @@ -35,7 +36,7 @@ public class NpcEvent extends CustomNPCsEvent { public CollideEvent(ICustomNpc npc, Entity entity) { super(npc); - this.entity = NpcAPI.Instance().getIEntity(entity); + this.entity = ScriptController.Instance.getScriptForEntity(entity); } } @@ -48,7 +49,7 @@ public class NpcEvent extends CustomNPCsEvent { public DamagedEvent(ICustomNpc npc, Entity source, float damage, DamageSource damagesource) { super(npc); - this.source = NpcAPI.Instance().getIEntity(source); + this.source = ScriptController.Instance.getScriptForEntity(source); this.damage = damage; this.damageSource = NpcAPI.Instance().getIDamageSource(damagesource); } @@ -65,7 +66,7 @@ public class NpcEvent extends CustomNPCsEvent { public RangedLaunchedEvent(ICustomNpc npc, float damage, EntityLivingBase target) { super(npc); - this.target = (IEntityLivingBase)NpcAPI.Instance().getIEntity(target); + this.target = (IEntityLivingBase)ScriptController.Instance.getScriptForEntity(target); this.damage = damage; } } @@ -77,7 +78,7 @@ public class NpcEvent extends CustomNPCsEvent { public MeleeAttackEvent(ICustomNpc npc, float damage, EntityLivingBase target) { super(npc); - this.target = (IEntityLivingBase)NpcAPI.Instance().getIEntity(target); + this.target = (IEntityLivingBase)ScriptController.Instance.getScriptForEntity(target); this.damage = damage; } } @@ -87,7 +88,7 @@ public class NpcEvent extends CustomNPCsEvent { public KilledEntityEvent(ICustomNpc npc, EntityLivingBase entity) { super(npc); - this.entity = (IEntityLivingBase)NpcAPI.Instance().getIEntity(entity); + this.entity = (IEntityLivingBase)ScriptController.Instance.getScriptForEntity(entity); } } @@ -102,7 +103,7 @@ public class NpcEvent extends CustomNPCsEvent { super(npc); this.damageSource = NpcAPI.Instance().getIDamageSource(damagesource); this.type = damagesource.damageType; - this.source = NpcAPI.Instance().getIEntity(entity); + this.source = ScriptController.Instance.getScriptForEntity(entity); } public String getType(){ @@ -116,7 +117,7 @@ public class NpcEvent extends CustomNPCsEvent { public InteractEvent(ICustomNpc npc, EntityPlayer player) { super(npc); - this.player = (IPlayer)NpcAPI.Instance().getIEntity(player); + this.player = (IPlayer)ScriptController.Instance.getScriptForEntity(player); } } @@ -128,7 +129,7 @@ public class NpcEvent extends CustomNPCsEvent { public DialogEvent(ICustomNpc npc, EntityPlayer player, int id, int optionId, Dialog dialog) { super(npc); - this.player = (IPlayer)NpcAPI.Instance().getIEntity(player); + this.player = (IPlayer)ScriptController.Instance.getScriptForEntity(player); this.id = id; this.optionId = optionId; this.dialog = dialog; @@ -143,7 +144,7 @@ public class NpcEvent extends CustomNPCsEvent { public DialogClosedEvent(ICustomNpc npc, EntityPlayer player, int id, int optionId, Dialog dialog) { super(npc); - this.player = (IPlayer)NpcAPI.Instance().getIEntity(player); + this.player = (IPlayer)ScriptController.Instance.getScriptForEntity(player); this.id = id; this.optionId = optionId; this.dialog = dialog; @@ -156,7 +157,7 @@ public class NpcEvent extends CustomNPCsEvent { public TargetLostEvent(ICustomNpc npc, EntityLivingBase entity) { super(npc); - this.entity = (IEntityLivingBase)NpcAPI.Instance().getIEntity(entity); + this.entity = (IEntityLivingBase) ScriptController.Instance.getScriptForEntity(entity); } } @@ -166,7 +167,7 @@ public class NpcEvent extends CustomNPCsEvent { public TargetEvent(ICustomNpc npc, EntityLivingBase entity) { super(npc); - this.entity = (IEntityLivingBase) NpcAPI.Instance().getIEntity(entity); + this.entity = (IEntityLivingBase) ScriptController.Instance.getScriptForEntity(entity); } } diff --git a/src/main/java/noppes/npcs/scripted/event/PlayerEvent.java b/src/main/java/noppes/npcs/scripted/event/PlayerEvent.java index a2b53fa4b..0f1dbfb3c 100644 --- a/src/main/java/noppes/npcs/scripted/event/PlayerEvent.java +++ b/src/main/java/noppes/npcs/scripted/event/PlayerEvent.java @@ -12,6 +12,7 @@ import net.minecraft.entity.item.EntityXPOrb; import net.minecraft.item.ItemStack; import net.minecraft.util.DamageSource; import net.minecraft.world.World; +import noppes.npcs.controllers.ScriptController; import noppes.npcs.scripted.*; import noppes.npcs.scripted.entity.ScriptLivingBase; import noppes.npcs.scripted.interfaces.*; @@ -133,7 +134,7 @@ public class PlayerEvent extends CustomNPCsEvent { public DamagedEvent(IPlayer player, Entity source, float damage, DamageSource damagesource) { super(player); - this.source = NpcAPI.Instance().getIEntity(source); + this.source = ScriptController.Instance.getScriptForEntity(source); this.damage = damage; this.damageSource = NpcAPI.Instance().getIDamageSource(damagesource); } @@ -194,7 +195,7 @@ public class PlayerEvent extends CustomNPCsEvent { super(player); this.damageSource = NpcAPI.Instance().getIDamageSource(damagesource); this.type = damagesource.getDamageType(); - this.source = NpcAPI.Instance().getIEntity(entity); + this.source = ScriptController.Instance.getScriptForEntity(entity); } } @@ -218,7 +219,7 @@ public class PlayerEvent extends CustomNPCsEvent { public DamagedEntityEvent(IPlayer player, Entity target, float damage, DamageSource damagesource) { super(player); - this.target = NpcAPI.Instance().getIEntity(target); + this.target = ScriptController.Instance.getScriptForEntity(target); this.damage = damage; this.damageSource = NpcAPI.Instance().getIDamageSource(damagesource); } diff --git a/src/main/java/noppes/npcs/scripted/event/ScriptEventDialog.java b/src/main/java/noppes/npcs/scripted/event/ScriptEventDialog.java index 3e8d3bc2f..fd73d1fcc 100644 --- a/src/main/java/noppes/npcs/scripted/event/ScriptEventDialog.java +++ b/src/main/java/noppes/npcs/scripted/event/ScriptEventDialog.java @@ -2,6 +2,7 @@ package noppes.npcs.scripted.event; import net.minecraft.entity.player.EntityPlayer; import noppes.npcs.controllers.Dialog; +import noppes.npcs.controllers.ScriptController; import noppes.npcs.scripted.NpcAPI; import noppes.npcs.scripted.interfaces.IPlayer; @@ -12,7 +13,7 @@ public class ScriptEventDialog extends ScriptEvent{ public Dialog dialogObj; public ScriptEventDialog(EntityPlayer player, int dialog, int option, Dialog dialogObj){ - this.player = (IPlayer)NpcAPI.Instance().getIEntity(player); + this.player = (IPlayer) ScriptController.Instance.getScriptForEntity(player); this.dialog = dialog; this.option = option; this.dialogObj = dialogObj; diff --git a/src/main/java/noppes/npcs/scripted/interfaces/IWorld.java b/src/main/java/noppes/npcs/scripted/interfaces/IWorld.java index 4e8eb2f83..b3e2848e7 100644 --- a/src/main/java/noppes/npcs/scripted/interfaces/IWorld.java +++ b/src/main/java/noppes/npcs/scripted/interfaces/IWorld.java @@ -60,7 +60,7 @@ public interface IWorld { public void playSoundToNearExcept(ScriptPlayer player, String sound, float volume, float pitch); - public ScriptEntity getEntityByID(int id); + public IEntity getEntityByID(int id); public boolean spawnEntityInWorld(ScriptEntity entity); diff --git a/src/main/java/noppes/npcs/scripted/wrapper/ScriptDamageSource.java b/src/main/java/noppes/npcs/scripted/wrapper/ScriptDamageSource.java index 32aecda6c..0f8fe38ac 100644 --- a/src/main/java/noppes/npcs/scripted/wrapper/ScriptDamageSource.java +++ b/src/main/java/noppes/npcs/scripted/wrapper/ScriptDamageSource.java @@ -6,6 +6,7 @@ package noppes.npcs.scripted.wrapper; import net.minecraft.util.DamageSource; +import noppes.npcs.controllers.ScriptController; import noppes.npcs.scripted.interfaces.IDamageSource; import noppes.npcs.scripted.NpcAPI; import noppes.npcs.scripted.interfaces.IEntity; @@ -34,10 +35,10 @@ public class ScriptDamageSource implements IDamageSource { } public IEntity getTrueSource() { - return NpcAPI.Instance().getIEntity(this.source.getEntity()); + return ScriptController.Instance.getScriptForEntity(this.source.getEntity()); } public IEntity getImmediateSource() { - return NpcAPI.Instance().getIEntity(this.source.getSourceOfDamage()); + return ScriptController.Instance.getScriptForEntity(this.source.getSourceOfDamage()); } } diff --git a/src/main/java/noppes/npcs/scripted/wrapper/WrapperNpcAPI.java b/src/main/java/noppes/npcs/scripted/wrapper/WrapperNpcAPI.java index 60b4c4c59..48ab68fc1 100644 --- a/src/main/java/noppes/npcs/scripted/wrapper/WrapperNpcAPI.java +++ b/src/main/java/noppes/npcs/scripted/wrapper/WrapperNpcAPI.java @@ -171,9 +171,9 @@ public class WrapperNpcAPI extends NpcAPI { public IItemStack getIItemStack(ItemStack itemstack) { if(itemstack.getItem() instanceof ItemScripted){ - return (ICustomItem) (itemstack != null && itemstack.stackSize > 0 ? new ScriptCustomItem(itemstack) : new ScriptCustomItem(new ItemStack(Item.getItemById(0)))); + return (ICustomItem) (itemstack.stackSize > 0 ? new ScriptCustomItem(itemstack) : new ScriptCustomItem(new ItemStack(Item.getItemById(0)))); } else { - return (IItemStack) (itemstack != null && itemstack.stackSize > 0 ? new ScriptItemStack(itemstack) : new ScriptItemStack(new ItemStack(Item.getItemById(0)))); + return (IItemStack) (itemstack.stackSize > 0 ? new ScriptItemStack(itemstack) : new ScriptItemStack(new ItemStack(Item.getItemById(0)))); } }