diff --git a/src/main/java/com/hbm/items/ModItems.java b/src/main/java/com/hbm/items/ModItems.java index ff644abcf..42a596e7b 100644 --- a/src/main/java/com/hbm/items/ModItems.java +++ b/src/main/java/com/hbm/items/ModItems.java @@ -2272,6 +2272,7 @@ public class ModItems { public static Item hazmat_kit; public static Item hazmat_red_kit; public static Item hazmat_grey_kit; + public static Item kit_custom; public static Item loot_10; public static Item loot_15; @@ -4604,6 +4605,7 @@ public class ModItems { hazmat_kit = new ItemStarterKit().setUnlocalizedName("hazmat_kit").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":hazmat_kit"); hazmat_red_kit = new ItemStarterKit().setUnlocalizedName("hazmat_red_kit").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":hazmat_red_kit"); hazmat_grey_kit = new ItemStarterKit().setUnlocalizedName("hazmat_grey_kit").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":hazmat_grey_kit"); + kit_custom = new ItemKitCustom().setUnlocalizedName("kit_custom").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":kit"); loot_10 = new ItemLootCrate().setUnlocalizedName("loot_10").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":loot_10"); loot_15 = new ItemLootCrate().setUnlocalizedName("loot_15").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":loot_15"); @@ -7875,6 +7877,7 @@ public class ModItems { GameRegistry.registerItem(hazmat_kit, hazmat_kit.getUnlocalizedName()); GameRegistry.registerItem(hazmat_red_kit, hazmat_red_kit.getUnlocalizedName()); GameRegistry.registerItem(hazmat_grey_kit, hazmat_grey_kit.getUnlocalizedName()); + GameRegistry.registerItem(kit_custom, kit_custom.getUnlocalizedName()); GameRegistry.registerItem(euphemium_kit, euphemium_kit.getUnlocalizedName()); GameRegistry.registerItem(letter, letter.getUnlocalizedName()); diff --git a/src/main/java/com/hbm/items/special/ItemKitCustom.java b/src/main/java/com/hbm/items/special/ItemKitCustom.java new file mode 100644 index 000000000..2e921294a --- /dev/null +++ b/src/main/java/com/hbm/items/special/ItemKitCustom.java @@ -0,0 +1,110 @@ +package com.hbm.items.special; + +import com.hbm.items.ModItems; +import com.hbm.util.ItemStackUtil; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.IIcon; +import net.minecraft.world.World; + +public class ItemKitCustom extends Item { + + @SideOnly(Side.CLIENT) + IIcon overlay1; + @SideOnly(Side.CLIENT) + IIcon overlay2; + + @Override + public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player) { + + ItemStack[] stacks = ItemStackUtil.readStacksFromNBT(stack); + + if(stacks != null) { + + for(ItemStack item : stacks) { + if(item != null) { + player.inventory.addItemStackToInventory(item.copy()); + } + } + } + + stack.stackSize--; + + return stack; + } + + @Override + @SideOnly(Side.CLIENT) + public int getRenderPasses(int metadata) { + return 3; + } + + @Override + @SideOnly(Side.CLIENT) + public void registerIcons(IIconRegister reg) { + super.registerIcons(reg); + + this.overlay1 = reg.registerIcon(this.getIconString() + "_1"); + this.overlay2 = reg.registerIcon(this.getIconString() + "_2"); + } + + @Override + @SideOnly(Side.CLIENT) + public boolean requiresMultipleRenderPasses() { + return true; + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIconFromDamageForRenderPass(int meta, int pass) { + return pass == 1 ? this.overlay1 : pass == 2 ? this.overlay2 : super.getIconFromDamageForRenderPass(meta, pass); + } + + @Override + @SideOnly(Side.CLIENT) + public int getColorFromItemStack(ItemStack stack, int pass) { + if(pass == 1) + return getColor(stack, 1); + if(pass == 2) + return getColor(stack, 2); + return 0xffffff; + } + + public static ItemStack create(String name, String lore, int color1, int color2, ItemStack... contents) { + ItemStack stack = new ItemStack(ModItems.kit_custom); + + stack.stackTagCompound = new NBTTagCompound(); + + setColor(stack, color1, 1); + setColor(stack, color2, 2); + + if(lore != null) ItemStackUtil.addTooltipToStack(stack, lore.split("\\$")); + stack.setStackDisplayName(EnumChatFormatting.RESET + name); + ItemStackUtil.addStacksToNBT(stack, contents); + + return stack; + } + + public static void setColor(ItemStack stack, int color, int index) { + + if(!stack.hasTagCompound()) + stack.stackTagCompound = new NBTTagCompound(); + + stack.stackTagCompound.setInteger("color" + index, color); + } + + public static int getColor(ItemStack stack, int index) { + + if(!stack.hasTagCompound()) + return 0; + + return stack.stackTagCompound.getInteger("color" + index); + } +} diff --git a/src/main/java/com/hbm/items/special/ItemStarterKit.java b/src/main/java/com/hbm/items/special/ItemStarterKit.java index 8e4b15238..5bda69b31 100644 --- a/src/main/java/com/hbm/items/special/ItemStarterKit.java +++ b/src/main/java/com/hbm/items/special/ItemStarterKit.java @@ -3,6 +3,7 @@ package com.hbm.items.special; import java.util.List; import com.hbm.blocks.ModBlocks; +import com.hbm.interfaces.Spaghetti; import com.hbm.inventory.fluid.Fluids; import com.hbm.items.ModItems; import com.hbm.items.machine.ItemBattery; @@ -22,12 +23,10 @@ import net.minecraft.potion.PotionEffect; import net.minecraft.util.ChatComponentText; import net.minecraft.world.World; +@Deprecated //not deprecated per se but please stop using it wherever possible +@Spaghetti("i do not care how much 'optimization' you want to throw at this dumpster fire but there's no saving grace here") public class ItemStarterKit extends Item { - public ItemStarterKit() { - this.maxStackSize = 1; - } - private void giveHaz(World world, EntityPlayer p, int tier) { for(int i = 0; i < 4; i++) { diff --git a/src/main/java/com/hbm/items/tool/ItemWandD.java b/src/main/java/com/hbm/items/tool/ItemWandD.java index 525735c84..3fa57e460 100644 --- a/src/main/java/com/hbm/items/tool/ItemWandD.java +++ b/src/main/java/com/hbm/items/tool/ItemWandD.java @@ -2,18 +2,15 @@ package com.hbm.items.tool; import java.util.List; -import com.hbm.blocks.BlockDummyable; +import com.hbm.items.ModItems; +import com.hbm.items.special.ItemKitCustom; import com.hbm.lib.Library; -import com.hbm.tileentity.conductor.TileEntityFluidDuct; -import com.hbm.tileentity.conductor.TileEntityFluidDuctSimple; -import api.hbm.energy.IEnergyConductor; -import net.minecraft.block.Block; +import net.minecraft.entity.EntityLiving; +import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.ChatComponentText; import net.minecraft.util.MovingObjectPosition; import net.minecraft.world.World; @@ -25,33 +22,17 @@ public class ItemWandD extends Item { if(world.isRemote) return stack; - MovingObjectPosition pos = Library.rayTrace(player, 500, 1); + MovingObjectPosition pos = Library.rayTrace(player, 500, 1, false, true, false); if(pos != null) { - int x = pos.blockX; - int z = pos.blockZ; - //int y = world.getHeightValue(x, z); - int y = pos.blockY; + List list = world.getEntitiesWithinAABB(EntityLiving.class, player.boundingBox.expand(150, 150, 150)); - Block b = world.getBlock(x, y, z); - if(b instanceof BlockDummyable) { - int[] core = ((BlockDummyable)b).findCore(world, x, y, z); - x = core[0]; - y = core[1]; - z = core[2]; - } - - TileEntity te = world.getTileEntity(x, y, z); - /*if(te instanceof IEnergyConductor) { - IEnergyConductor con = (IEnergyConductor) te; - player.addChatComponentMessage(new ChatComponentText("" + con.getPowerNet())); - }*/ - - if(te instanceof TileEntityFluidDuctSimple) { - - player.addChatComponentMessage(new ChatComponentText("" + ((TileEntityFluidDuctSimple)te).getType().getUnlocalizedName())); - player.addChatComponentMessage(new ChatComponentText("" + ((TileEntityFluidDuctSimple)te).getType().getID())); + for(EntityLiving e : list) { + e.setRevengeTarget(player); + e.setAttackTarget(player); + e.setLastAttacker(player); + e.getNavigator().tryMoveToXYZ(player.posX, player.posY, player.posZ, 2); } //CellularDungeonFactory.meteor.generate(world, x, y, z, world.rand); diff --git a/src/main/java/com/hbm/util/ItemStackUtil.java b/src/main/java/com/hbm/util/ItemStackUtil.java index f694822d2..7e619836a 100644 --- a/src/main/java/com/hbm/util/ItemStackUtil.java +++ b/src/main/java/com/hbm/util/ItemStackUtil.java @@ -9,7 +9,7 @@ import net.minecraft.util.EnumChatFormatting; public class ItemStackUtil { /** - * UNSAFE! Will ignore all existing tags and override them! In its current state, only fit for items we know don't have any display tags! + * UNSAFE! Will ignore all existing display tags and override them! In its current state, only fit for items we know don't have any display tags! * Will, however, respect existing NBT tags * @param stack * @param lines @@ -29,4 +29,43 @@ public class ItemStackUtil { display.setTag("Lore", lore); stack.stackTagCompound.setTag("display", display); } + + public static void addStacksToNBT(ItemStack stack, ItemStack... stacks) { + + if(!stack.hasTagCompound()) + stack.stackTagCompound = new NBTTagCompound(); + + NBTTagList tags = new NBTTagList(); + + for(int i = 0; i < stacks.length; i++) { + if(stacks[i] != null) { + NBTTagCompound slotNBT = new NBTTagCompound(); + slotNBT.setByte("slot", (byte) i); + stacks[i].writeToNBT(slotNBT); + tags.appendTag(slotNBT); + } + } + stack.stackTagCompound.setTag("items", tags); + } + + public static ItemStack[] readStacksFromNBT(ItemStack stack) { + + if(!stack.hasTagCompound()) + return null; + + NBTTagList list = stack.stackTagCompound.getTagList("items", 10); + int count = list.tagCount(); + + ItemStack[] stacks = new ItemStack[count]; + + for(int i = 0; i < count; i++) { + NBTTagCompound slotNBT = list.getCompoundTagAt(i); + byte slot = slotNBT.getByte("slot"); + if(slot >= 0 && slot < stacks.length) { + stacks[slot] = ItemStack.loadItemStackFromNBT(slotNBT); + } + } + + return stacks; + } } diff --git a/src/main/resources/assets/hbm/textures/armor/rpa_arm.png b/src/main/resources/assets/hbm/textures/armor/rpa_arm.png index 191bdc0ab..7372622f2 100644 Binary files a/src/main/resources/assets/hbm/textures/armor/rpa_arm.png and b/src/main/resources/assets/hbm/textures/armor/rpa_arm.png differ diff --git a/src/main/resources/assets/hbm/textures/armor/rpa_chest.png b/src/main/resources/assets/hbm/textures/armor/rpa_chest.png index 3511c43a6..778f284b2 100644 Binary files a/src/main/resources/assets/hbm/textures/armor/rpa_chest.png and b/src/main/resources/assets/hbm/textures/armor/rpa_chest.png differ diff --git a/src/main/resources/assets/hbm/textures/armor/rpa_helmet.png b/src/main/resources/assets/hbm/textures/armor/rpa_helmet.png index 436c4c652..6bef49e0d 100644 Binary files a/src/main/resources/assets/hbm/textures/armor/rpa_helmet.png and b/src/main/resources/assets/hbm/textures/armor/rpa_helmet.png differ diff --git a/src/main/resources/assets/hbm/textures/armor/rpa_leg.png b/src/main/resources/assets/hbm/textures/armor/rpa_leg.png index d7ddbbcb7..7a5da8b34 100644 Binary files a/src/main/resources/assets/hbm/textures/armor/rpa_leg.png and b/src/main/resources/assets/hbm/textures/armor/rpa_leg.png differ diff --git a/src/main/resources/assets/hbm/textures/items/kit.png b/src/main/resources/assets/hbm/textures/items/kit.png new file mode 100644 index 000000000..72ee86a58 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/items/kit.png differ diff --git a/src/main/resources/assets/hbm/textures/items/kit_1.png b/src/main/resources/assets/hbm/textures/items/kit_1.png new file mode 100644 index 000000000..2c4bb0912 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/items/kit_1.png differ diff --git a/src/main/resources/assets/hbm/textures/items/kit_2.png b/src/main/resources/assets/hbm/textures/items/kit_2.png new file mode 100644 index 000000000..cf75051db Binary files /dev/null and b/src/main/resources/assets/hbm/textures/items/kit_2.png differ diff --git a/src/main/resources/assets/hbm/textures/items/kit_toolbox.png b/src/main/resources/assets/hbm/textures/items/kit_toolbox.png new file mode 100644 index 000000000..086515e2a Binary files /dev/null and b/src/main/resources/assets/hbm/textures/items/kit_toolbox.png differ diff --git a/src/main/resources/assets/hbm/textures/items/kit_toolbox_empty.png b/src/main/resources/assets/hbm/textures/items/kit_toolbox_empty.png new file mode 100644 index 000000000..2dca2f301 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/items/kit_toolbox_empty.png differ