aboutsummaryrefslogtreecommitdiff
path: root/src/Java/gtPlusPlus/xmod/gregtech/api/items
diff options
context:
space:
mode:
authorDraknyte1 <Draknyte1@hotmail.com>2016-11-06 19:32:27 +1000
committerDraknyte1 <Draknyte1@hotmail.com>2016-11-06 19:32:27 +1000
commitcbe0e497be8e466c380a5b4fa781b314ede9ada3 (patch)
treeb85848b432adf458e3abda466ee46d9dfc3e454b /src/Java/gtPlusPlus/xmod/gregtech/api/items
parentc40416b036c0e89451e1558253ccf07bbee028d0 (diff)
downloadGT5-Unofficial-cbe0e497be8e466c380a5b4fa781b314ede9ada3.tar.gz
GT5-Unofficial-cbe0e497be8e466c380a5b4fa781b314ede9ada3.tar.bz2
GT5-Unofficial-cbe0e497be8e466c380a5b4fa781b314ede9ada3.zip
Revert "$ Cleaned up the entire project."
This reverts commit 0669f5eb9d5029a8b94ec552171b0837605f7747. # Conflicts: # src/Java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/GregtechMTE_NuclearReactor.java # src/Java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/GregtechMetaTileEntity_MassFabricator.java Revert "% Cleaned up Imports." This reverts commit 3654052fb63a571c5eaca7f20714b87c17f7e966.
Diffstat (limited to 'src/Java/gtPlusPlus/xmod/gregtech/api/items')
-rw-r--r--src/Java/gtPlusPlus/xmod/gregtech/api/items/Gregtech_Generic_Item.java303
-rw-r--r--src/Java/gtPlusPlus/xmod/gregtech/api/items/Gregtech_MetaItem.java605
-rw-r--r--src/Java/gtPlusPlus/xmod/gregtech/api/items/Gregtech_MetaItem_Base.java1213
-rw-r--r--src/Java/gtPlusPlus/xmod/gregtech/api/items/Gregtech_MetaItem_X32.java378
-rw-r--r--src/Java/gtPlusPlus/xmod/gregtech/api/items/Gregtech_MetaTool.java728
-rw-r--r--src/Java/gtPlusPlus/xmod/gregtech/api/items/tools/GT_MetaGenTool.java741
-rw-r--r--src/Java/gtPlusPlus/xmod/gregtech/api/items/types/ToolType_Base.java123
-rw-r--r--src/Java/gtPlusPlus/xmod/gregtech/api/items/types/ToolType_HardHammer.java213
-rw-r--r--src/Java/gtPlusPlus/xmod/gregtech/api/items/types/ToolType_Wrench.java292
9 files changed, 1967 insertions, 2629 deletions
diff --git a/src/Java/gtPlusPlus/xmod/gregtech/api/items/Gregtech_Generic_Item.java b/src/Java/gtPlusPlus/xmod/gregtech/api/items/Gregtech_Generic_Item.java
index 91af8e3297..1c135a7f92 100644
--- a/src/Java/gtPlusPlus/xmod/gregtech/api/items/Gregtech_Generic_Item.java
+++ b/src/Java/gtPlusPlus/xmod/gregtech/api/items/Gregtech_Generic_Item.java
@@ -1,19 +1,22 @@
package gtPlusPlus.xmod.gregtech.api.items;
-import java.util.List;
-
-import cpw.mods.fml.common.registry.GameRegistry;
-import cpw.mods.fml.relauncher.Side;
-import cpw.mods.fml.relauncher.SideOnly;
import gregtech.api.enums.SubTag;
import gregtech.api.interfaces.IProjectileItem;
-import gregtech.api.util.*;
+import gregtech.api.util.GT_LanguageManager;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.api.util.GT_Utility;
import gtPlusPlus.core.creative.AddToCreativeTab;
import gtPlusPlus.core.lib.CORE;
import gtPlusPlus.core.util.Utils;
+
+import java.util.List;
+
import net.minecraft.block.BlockDispenser;
import net.minecraft.client.renderer.texture.IIconRegister;
-import net.minecraft.dispenser.*;
+import net.minecraft.dispenser.BehaviorDefaultDispenseItem;
+import net.minecraft.dispenser.BehaviorProjectileDispense;
+import net.minecraft.dispenser.IBlockSource;
+import net.minecraft.dispenser.IPosition;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.IProjectile;
import net.minecraft.entity.player.EntityPlayer;
@@ -23,173 +26,161 @@ import net.minecraft.item.ItemStack;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.IIcon;
import net.minecraft.world.World;
+import cpw.mods.fml.common.registry.GameRegistry;
+import cpw.mods.fml.relauncher.Side;
+import cpw.mods.fml.relauncher.SideOnly;
/**
- * Extended by most Items, also used as a fallback Item, to prevent the
- * accidental deletion when Errors occur.
+ * Extended by most Items, also used as a fallback Item, to prevent the accidental deletion when Errors occur.
*/
public class Gregtech_Generic_Item extends Item implements IProjectileItem {
- public static class GT_Item_Dispense extends BehaviorProjectileDispense {
- @Override
- public ItemStack dispenseStack(final IBlockSource aSource, final ItemStack aStack) {
- return ((Gregtech_Generic_Item) aStack.getItem()).onDispense(aSource, aStack);
- }
-
- @Override
- protected IProjectile getProjectileEntity(final World aWorld, final IPosition aPosition) {
- return null;
- }
- }
- private final String mName, mTooltip;
-
- protected IIcon mIcon;
-
- public Gregtech_Generic_Item(final String aUnlocalized, final String aEnglish, final String aEnglishTooltip) {
- this(aUnlocalized, aEnglish, aEnglishTooltip, true);
- }
-
- public Gregtech_Generic_Item(final String aUnlocalized, final String aEnglish, final String aEnglishTooltip,
- final boolean aWriteToolTipIntoLangFile) {
- super();
- this.mName = aUnlocalized;
- GT_LanguageManager.addStringLocalization(this.mName + ".name", aEnglish);
- if (GT_Utility.isStringValid(aEnglishTooltip)) {
- GT_LanguageManager.addStringLocalization(this.mTooltip = this.mName + ".tooltip_main", aEnglishTooltip,
- aWriteToolTipIntoLangFile);
- }
- else {
- this.mTooltip = null;
- }
- this.setCreativeTab(AddToCreativeTab.tabMachines);
- GameRegistry.registerItem(this, this.mName, CORE.MODID);
- BlockDispenser.dispenseBehaviorRegistry.putObject(this, new GT_Item_Dispense());
- }
-
- protected void addAdditionalToolTips(final List aList, final ItemStack aStack) {
- //
- }
-
- @Override
- public void addInformation(final ItemStack aStack, final EntityPlayer aPlayer, final List aList,
- final boolean aF3_H) {
- if (this.getMaxDamage() > 0 && !this.getHasSubtypes()) {
- aList.add(aStack.getMaxDamage() - this.getDamage(aStack) + " / " + aStack.getMaxDamage());
- }
- if (this.mTooltip != null) {
- aList.add(GT_LanguageManager.getTranslation(this.mTooltip));
- }
- if (GT_ModHandler.isElectricItem(aStack)) {
- aList.add("Tier: " + this.getTier(aStack));
- }
- this.addAdditionalToolTips(aList, aStack);
- }
-
- @Override
- public boolean doesSneakBypassUse(final World aWorld, final int aX, final int aY, final int aZ,
- final EntityPlayer aPlayer) {
- return true;
- }
-
- @Override
- public int getColorFromItemStack(final ItemStack stack, int HEX_OxFFFFFF) {
- if (stack.getDisplayName().contains("LuV")) {
- HEX_OxFFFFFF = 0xffffcc;
- }
- else if (stack.getDisplayName().contains("ZPM")) {
+ private final String mName, mTooltip;
+ protected IIcon mIcon;
+
+ public Gregtech_Generic_Item(String aUnlocalized, String aEnglish, String aEnglishTooltip) {
+ this(aUnlocalized, aEnglish, aEnglishTooltip, true);
+ }
+
+ public Gregtech_Generic_Item(String aUnlocalized, String aEnglish, String aEnglishTooltip, boolean aWriteToolTipIntoLangFile) {
+ super();
+ mName = aUnlocalized;
+ GT_LanguageManager.addStringLocalization(mName + ".name", aEnglish);
+ if (GT_Utility.isStringValid(aEnglishTooltip))
+ GT_LanguageManager.addStringLocalization(mTooltip = mName + ".tooltip_main", aEnglishTooltip, aWriteToolTipIntoLangFile);
+ else mTooltip = null;
+ setCreativeTab(AddToCreativeTab.tabMachines);
+ GameRegistry.registerItem(this, mName, CORE.MODID);
+ BlockDispenser.dispenseBehaviorRegistry.putObject(this, new GT_Item_Dispense());
+ }
+
+ @Override
+ public final Item setUnlocalizedName(String aName) {
+ return this;
+ }
+
+ @Override
+ public final String getUnlocalizedName() {
+ return mName;
+ }
+
+ @Override
+ public String getUnlocalizedName(ItemStack aStack) {
+ return getHasSubtypes() ? mName + "." + getDamage(aStack) : mName;
+ }
+
+ @Override
+ @SideOnly(Side.CLIENT)
+ public void registerIcons(IIconRegister aIconRegister) {
+ mIcon = aIconRegister.registerIcon(CORE.MODID+":"+mName);
+ }
+
+ @Override
+ public boolean doesSneakBypassUse(World aWorld, int aX, int aY, int aZ, EntityPlayer aPlayer) {
+ return true;
+ }
+
+ @Override
+ public IIcon getIconFromDamage(int par1) {
+ return mIcon;
+ }
+
+ public int getTier(ItemStack aStack) {
+ return 0;
+ }
+
+ @Override
+ public void addInformation(ItemStack aStack, EntityPlayer aPlayer, List aList, boolean aF3_H) {
+ if (getMaxDamage() > 0 && !getHasSubtypes())
+ aList.add((aStack.getMaxDamage() - getDamage(aStack)) + " / " + aStack.getMaxDamage());
+ if (mTooltip != null) aList.add(GT_LanguageManager.getTranslation(mTooltip));
+ if (GT_ModHandler.isElectricItem(aStack)) aList.add("Tier: " + getTier(aStack));
+ addAdditionalToolTips(aList, aStack);
+ }
+
+ protected void addAdditionalToolTips(List aList, ItemStack aStack) {
+ //
+ }
+
+ @Override
+ public void onCreated(ItemStack aStack, World aWorld, EntityPlayer aPlayer) {
+ isItemStackUsable(aStack);
+ }
+
+ public boolean isItemStackUsable(ItemStack aStack) {
+ return true;
+ }
+
+ public ItemStack onDispense(IBlockSource aSource, ItemStack aStack) {
+ EnumFacing enumfacing = BlockDispenser.func_149937_b(aSource.getBlockMetadata());
+ IPosition iposition = BlockDispenser.func_149939_a(aSource);
+ ItemStack itemstack1 = aStack.splitStack(1);
+ BehaviorDefaultDispenseItem.doDispense(aSource.getWorld(), itemstack1, 6, enumfacing, iposition);
+ return aStack;
+ }
+
+ @Override
+ public EntityArrow getProjectile(SubTag aProjectileType, ItemStack aStack, World aWorld, double aX, double aY, double aZ) {
+ return null;
+ }
+
+ @Override
+ public EntityArrow getProjectile(SubTag aProjectileType, ItemStack aStack, World aWorld, EntityLivingBase aEntity, float aSpeed) {
+ return null;
+ }
+
+ @Override
+ public boolean hasProjectile(SubTag aProjectileType, ItemStack aStack) {
+ return false;
+ }
+
+ @Override
+ public ItemStack getContainerItem(ItemStack aStack) {
+ return null;
+ }
+
+ @Override
+ public boolean hasContainerItem(ItemStack aStack) {
+ return getContainerItem(aStack) != null;
+ }
+
+ public static class GT_Item_Dispense extends BehaviorProjectileDispense {
+ @Override
+ public ItemStack dispenseStack(IBlockSource aSource, ItemStack aStack) {
+ return ((Gregtech_Generic_Item) aStack.getItem()).onDispense(aSource, aStack);
+ }
+
+ @Override
+ protected IProjectile getProjectileEntity(World aWorld, IPosition aPosition) {
+ return null;
+ }
+ }
+
+ @Override
+ public int getColorFromItemStack(ItemStack stack, int HEX_OxFFFFFF) {
+ if (stack.getDisplayName().contains("LuV")){
+ HEX_OxFFFFFF = 0xffffcc;
+ }
+ else if (stack.getDisplayName().contains("ZPM")){
HEX_OxFFFFFF = 0xace600;
}
- else if (stack.getDisplayName().contains("UV")) {
+ else if (stack.getDisplayName().contains("UV")){
HEX_OxFFFFFF = 0xffff00;
}
- else if (stack.getDisplayName().contains("MAX")) {
+ else if (stack.getDisplayName().contains("MAX")){
HEX_OxFFFFFF = 0xff0000;
}
- else if (stack.getDisplayName().contains("Sodium")) {
+ else if (stack.getDisplayName().contains("Sodium")){
HEX_OxFFFFFF = Utils.rgbtoHexValue(0, 0, 150);
}
- else if (stack.getDisplayName().contains("Cadmium")) {
+ else if (stack.getDisplayName().contains("Cadmium")){
HEX_OxFFFFFF = Utils.rgbtoHexValue(50, 50, 60);
}
- else if (stack.getDisplayName().contains("Lithium")) {
+ else if (stack.getDisplayName().contains("Lithium")){
HEX_OxFFFFFF = Utils.rgbtoHexValue(225, 220, 255);
}
else {
HEX_OxFFFFFF = 0xffffff;
- }
+ }
return HEX_OxFFFFFF;
}
-
- @Override
- public ItemStack getContainerItem(final ItemStack aStack) {
- return null;
- }
-
- @Override
- public IIcon getIconFromDamage(final int par1) {
- return this.mIcon;
- }
-
- @Override
- public EntityArrow getProjectile(final SubTag aProjectileType, final ItemStack aStack, final World aWorld,
- final double aX, final double aY, final double aZ) {
- return null;
- }
-
- @Override
- public EntityArrow getProjectile(final SubTag aProjectileType, final ItemStack aStack, final World aWorld,
- final EntityLivingBase aEntity, final float aSpeed) {
- return null;
- }
-
- public int getTier(final ItemStack aStack) {
- return 0;
- }
-
- @Override
- public final String getUnlocalizedName() {
- return this.mName;
- }
-
- @Override
- public String getUnlocalizedName(final ItemStack aStack) {
- return this.getHasSubtypes() ? this.mName + "." + this.getDamage(aStack) : this.mName;
- }
-
- @Override
- public boolean hasContainerItem(final ItemStack aStack) {
- return this.getContainerItem(aStack) != null;
- }
-
- @Override
- public boolean hasProjectile(final SubTag aProjectileType, final ItemStack aStack) {
- return false;
- }
-
- public boolean isItemStackUsable(final ItemStack aStack) {
- return true;
- }
-
- @Override
- public void onCreated(final ItemStack aStack, final World aWorld, final EntityPlayer aPlayer) {
- this.isItemStackUsable(aStack);
- }
-
- public ItemStack onDispense(final IBlockSource aSource, final ItemStack aStack) {
- final EnumFacing enumfacing = BlockDispenser.func_149937_b(aSource.getBlockMetadata());
- final IPosition iposition = BlockDispenser.func_149939_a(aSource);
- final ItemStack itemstack1 = aStack.splitStack(1);
- BehaviorDefaultDispenseItem.doDispense(aSource.getWorld(), itemstack1, 6, enumfacing, iposition);
- return aStack;
- }
-
- @Override
- @SideOnly(Side.CLIENT)
- public void registerIcons(final IIconRegister aIconRegister) {
- this.mIcon = aIconRegister.registerIcon(CORE.MODID + ":" + this.mName);
- }
-
- @Override
- public final Item setUnlocalizedName(final String aName) {
- return this;
- }
} \ No newline at end of file
diff --git a/src/Java/gtPlusPlus/xmod/gregtech/api/items/Gregtech_MetaItem.java b/src/Java/gtPlusPlus/xmod/gregtech/api/items/Gregtech_MetaItem.java
index 1161badfdc..484cc19ea7 100644
--- a/src/Java/gtPlusPlus/xmod/gregtech/api/items/Gregtech_MetaItem.java
+++ b/src/Java/gtPlusPlus/xmod/gregtech/api/items/Gregtech_MetaItem.java
@@ -1,376 +1,323 @@
package gtPlusPlus.xmod.gregtech.api.items;
-import java.util.*;
-
-import cpw.mods.fml.relauncher.Side;
-import cpw.mods.fml.relauncher.SideOnly;
+import static gregtech.api.enums.GT_Values.D1;
import gregtech.api.GregTech_API;
-import gregtech.api.enums.*;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.SubTag;
import gregtech.api.enums.TC_Aspects.TC_AspectStack;
-import gregtech.api.interfaces.*;
+import gregtech.api.interfaces.IFoodStat;
+import gregtech.api.interfaces.IIconContainer;
+import gregtech.api.interfaces.IItemContainer;
import gregtech.api.objects.ItemData;
-import gregtech.api.util.*;
+import gregtech.api.util.GT_LanguageManager;
+import gregtech.api.util.GT_OreDictUnificator;
+import gregtech.api.util.GT_Utility;
import gtPlusPlus.core.creative.AddToCreativeTab;
import gtPlusPlus.core.lib.CORE;
import gtPlusPlus.xmod.gregtech.api.interfaces.internal.Interface_ItemBehaviour;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.BitSet;
+import java.util.HashMap;
+import java.util.List;
+
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.player.EntityPlayer;
-import net.minecraft.item.*;
+import net.minecraft.item.EnumAction;
+import net.minecraft.item.Item;
+import net.minecraft.item.ItemStack;
import net.minecraft.util.IIcon;
import net.minecraft.world.World;
+import cpw.mods.fml.relauncher.Side;
+import cpw.mods.fml.relauncher.SideOnly;
public abstract class Gregtech_MetaItem extends Gregtech_MetaItem_Base {
- /**
- * All instances of this Item Class are listed here. This gets used to
- * register the Renderer to all Items of this Type, if
- * useStandardMetaItemRenderer() returns true.
- * <p/>
- * You can also use the unlocalized Name gotten from getUnlocalizedName() as
- * Key if you want to get a specific Item.
- */
- public static final HashMap<String, Gregtech_MetaItem> sInstances = new HashMap<String, Gregtech_MetaItem>();
+ /**
+ * All instances of this Item Class are listed here.
+ * This gets used to register the Renderer to all Items of this Type, if useStandardMetaItemRenderer() returns true.
+ * <p/>
+ * You can also use the unlocalized Name gotten from getUnlocalizedName() as Key if you want to get a specific Item.
+ */
+ public static final HashMap<String, Gregtech_MetaItem> sInstances = new HashMap<String, Gregtech_MetaItem>();
/* ---------- CONSTRUCTOR AND MEMBER VARIABLES ---------- */
- public final short mOffset, mItemAmount;
- public final BitSet mEnabledItems;
- public final BitSet mVisibleItems;
- public final IIcon[][] mIconList;
+ public final short mOffset, mItemAmount;
+ public final BitSet mEnabledItems;
+ public final BitSet mVisibleItems;
+ public final IIcon[][] mIconList;
- public final HashMap<Short, IFoodStat> mFoodStats = new HashMap<Short, IFoodStat>();
- public final HashMap<Short, Long[]> mElectricStats = new HashMap<Short, Long[]>();
- public final HashMap<Short, Long[]> mFluidContainerStats = new HashMap<Short, Long[]>();
- public final HashMap<Short, Short> mBurnValues = new HashMap<Short, Short>();
+ public final HashMap<Short, IFoodStat> mFoodStats = new HashMap<Short, IFoodStat>();
+ public final HashMap<Short, Long[]> mElectricStats = new HashMap<Short, Long[]>();
+ public final HashMap<Short, Long[]> mFluidContainerStats = new HashMap<Short, Long[]>();
+ public final HashMap<Short, Short> mBurnValues = new HashMap<Short, Short>();
- /**
- * Creates the Item using these Parameters.
- *
- * @param aUnlocalized
- * The Unlocalized Name of this Item.
- */
- public Gregtech_MetaItem(final String aUnlocalized, final short aOffset, final short aItemAmount) {
- super(aUnlocalized);
- this.setCreativeTab(AddToCreativeTab.tabMachines);
- this.setHasSubtypes(true);
- this.setMaxDamage(0);
- this.mEnabledItems = new BitSet(aItemAmount);
- this.mVisibleItems = new BitSet(aItemAmount);
+ /**
+ * Creates the Item using these Parameters.
+ *
+ * @param aUnlocalized The Unlocalized Name of this Item.
+ */
+ public Gregtech_MetaItem(String aUnlocalized, short aOffset, short aItemAmount) {
+ super(aUnlocalized);
+ setCreativeTab(AddToCreativeTab.tabMachines);
+ setHasSubtypes(true);
+ setMaxDamage(0);
+ mEnabledItems = new BitSet(aItemAmount);
+ mVisibleItems = new BitSet(aItemAmount);
- this.mOffset = (short) Math.min(32766, aOffset);
- this.mItemAmount = (short) Math.min(aItemAmount, 32766 - this.mOffset);
- this.mIconList = new IIcon[aItemAmount][1];
+ mOffset = (short) Math.min(32766, aOffset);
+ mItemAmount = (short) Math.min(aItemAmount, 32766 - mOffset);
+ mIconList = new IIcon[aItemAmount][1];
- Gregtech_MetaItem.sInstances.put(this.getUnlocalizedName(), this);
- }
+ sInstances.put(getUnlocalizedName(), this);
+ }
- /**
- * This adds a Custom Item to the ending Range.
- *
- * @param aID
- * The Id of the assigned Item [0 - mItemAmount] (The MetaData
- * gets auto-shifted by +mOffset)
- * @param aEnglish
- * The Default Localized Name of the created Item
- * @param aToolTip
- * The Default ToolTip of the created Item, you can also insert
- * null for having no ToolTip
- * @param aFoodBehavior
- * The Food Value of this Item. Can be null aswell. Just a
- * convenience thing.
- * @param aRandomData
- * The OreDict Names you want to give the Item. Also used for TC
- * Aspects and some other things.
- * @return An ItemStack containing the newly created Item.
- */
- public final ItemStack addItem(final int aID, final String aEnglish, String aToolTip, final Object... aRandomData) {
- if (aToolTip == null) {
- aToolTip = "";
- }
- if (aID >= 0 && aID < this.mItemAmount) {
- final ItemStack rStack = new ItemStack(this, 1, this.mOffset + aID);
- this.mEnabledItems.set(aID);
- this.mVisibleItems.set(aID);
- GT_LanguageManager.addStringLocalization(this.getUnlocalizedName(rStack) + ".name", aEnglish);
- GT_LanguageManager.addStringLocalization(this.getUnlocalizedName(rStack) + ".tooltip", aToolTip);
- final List<TC_AspectStack> tAspects = new ArrayList<TC_AspectStack>();
- // Important Stuff to do first
- for (final Object tRandomData : aRandomData) {
- if (tRandomData instanceof SubTag) {
- if (tRandomData == SubTag.INVISIBLE) {
- this.mVisibleItems.set(aID, false);
- continue;
- }
- if (tRandomData == SubTag.NO_UNIFICATION) {
- GT_OreDictUnificator.addToBlacklist(rStack);
- continue;
- }
- }
- }
- // now check for the rest
- for (final Object tRandomData : aRandomData) {
- if (tRandomData != null) {
- boolean tUseOreDict = true;
-
- if (tRandomData instanceof Interface_ItemBehaviour) {
- this.addItemBehavior(this.mOffset + aID,
- (Interface_ItemBehaviour<Gregtech_MetaItem_Base>) tRandomData);
- tUseOreDict = false;
- }
- if (tRandomData instanceof IItemContainer) {
- ((IItemContainer) tRandomData).set(rStack);
- tUseOreDict = false;
- }
- if (tRandomData instanceof SubTag) {
- continue;
- }
- if (tRandomData instanceof TC_AspectStack) {
- ((TC_AspectStack) tRandomData).addToAspectList(tAspects);
- continue;
- }
- if (tRandomData instanceof ItemData) {
- if (GT_Utility.isStringValid(tRandomData)) {
- GT_OreDictUnificator.registerOre(tRandomData, rStack);
- }
- else {
- GT_OreDictUnificator.addItemData(rStack, (ItemData) tRandomData);
- }
- continue;
- }
- if (tUseOreDict) {
- GT_OreDictUnificator.registerOre(tRandomData, rStack);
- continue;
- }
- }
- }
- if (GregTech_API.sThaumcraftCompat != null) {
- GregTech_API.sThaumcraftCompat.registerThaumcraftAspectsToItem(rStack, tAspects, false);
- }
- return rStack;
- }
- return null;
- }
-
- @Override
- public int getColorFromItemStack(final ItemStack stack, int HEX_OxFFFFFF) {
- if (stack.getDisplayName().contains("LuV")) {
- HEX_OxFFFFFF = 0xffffcc;
- }
- else if (stack.getDisplayName().contains("ZPM")) {
- HEX_OxFFFFFF = 0xace600;
- }
- else if (stack.getDisplayName().contains("UV")) {
- HEX_OxFFFFFF = 0xffff00;
- }
- else if (stack.getDisplayName().contains("MAX")) {
- HEX_OxFFFFFF = 0xff0000;
- }
- else {
- HEX_OxFFFFFF = 0xffffff;
- }
- return HEX_OxFFFFFF;
- }
+ /**
+ * This adds a Custom Item to the ending Range.
+ *
+ * @param aID The Id of the assigned Item [0 - mItemAmount] (The MetaData gets auto-shifted by +mOffset)
+ * @param aEnglish The Default Localized Name of the created Item
+ * @param aToolTip The Default ToolTip of the created Item, you can also insert null for having no ToolTip
+ * @param aFoodBehavior The Food Value of this Item. Can be null aswell. Just a convenience thing.
+ * @param aRandomData The OreDict Names you want to give the Item. Also used for TC Aspects and some other things.
+ * @return An ItemStack containing the newly created Item.
+ */
+ public final ItemStack addItem(int aID, String aEnglish, String aToolTip, Object... aRandomData) {
+ if (aToolTip == null) aToolTip = "";
+ if (aID >= 0 && aID < mItemAmount) {
+ ItemStack rStack = new ItemStack(this, 1, mOffset + aID);
+ mEnabledItems.set(aID);
+ mVisibleItems.set(aID);
+ GT_LanguageManager.addStringLocalization(getUnlocalizedName(rStack) + ".name", aEnglish);
+ GT_LanguageManager.addStringLocalization(getUnlocalizedName(rStack) + ".tooltip", aToolTip);
+ List<TC_AspectStack> tAspects = new ArrayList<TC_AspectStack>();
+ // Important Stuff to do first
+ for (Object tRandomData : aRandomData)
+ if (tRandomData instanceof SubTag) {
+ if (tRandomData == SubTag.INVISIBLE) {
+ mVisibleItems.set(aID, false);
+ continue;
+ }
+ if (tRandomData == SubTag.NO_UNIFICATION) {
+ GT_OreDictUnificator.addToBlacklist(rStack);
+ continue;
+ }
+ }
+ // now check for the rest
+ for (Object tRandomData : aRandomData)
+ if (tRandomData != null) {
+ boolean tUseOreDict = true;
+
+ if (tRandomData instanceof Interface_ItemBehaviour) {
+ addItemBehavior(mOffset + aID, (Interface_ItemBehaviour<Gregtech_MetaItem_Base>) tRandomData);
+ tUseOreDict = false;
+ }
+ if (tRandomData instanceof IItemContainer) {
+ ((IItemContainer) tRandomData).set(rStack);
+ tUseOreDict = false;
+ }
+ if (tRandomData instanceof SubTag) {
+ continue;
+ }
+ if (tRandomData instanceof TC_AspectStack) {
+ ((TC_AspectStack) tRandomData).addToAspectList(tAspects);
+ continue;
+ }
+ if (tRandomData instanceof ItemData) {
+ if (GT_Utility.isStringValid(tRandomData))
+ GT_OreDictUnificator.registerOre(tRandomData, rStack);
+ else GT_OreDictUnificator.addItemData(rStack, (ItemData) tRandomData);
+ continue;
+ }
+ if (tUseOreDict) {
+ GT_OreDictUnificator.registerOre(tRandomData, rStack);
+ continue;
+ }
+ }
+ if (GregTech_API.sThaumcraftCompat != null)
+ GregTech_API.sThaumcraftCompat.registerThaumcraftAspectsToItem(rStack, tAspects, false);
+ return rStack;
+ }
+ return null;
+ }
- @Override
- public final Long[] getElectricStats(final ItemStack aStack) {
- return this.mElectricStats.get((short) aStack.getItemDamage());
- }
+ /**
+ * Sets the Furnace Burn Value for the Item.
+ *
+ * @param aMetaValue the Meta Value of the Item you want to set it to. [0 - 32765]
+ * @param aValue 200 = 1 Burn Process = 500 EU, max = 32767 (that is 81917.5 EU)
+ * @return the Item itself for convenience in constructing.
+ */
+ public final Gregtech_MetaItem setBurnValue(int aMetaValue, int aValue) {
+ if (aMetaValue < 0 || aMetaValue >= mOffset + mEnabledItems.length() || aValue < 0) return this;
+ if (aValue == 0) mBurnValues.remove((short) aMetaValue);
+ else mBurnValues.put((short) aMetaValue, aValue > Short.MAX_VALUE ? Short.MAX_VALUE : (short) aValue);
+ return this;
+ }
- @Override
- public final Long[] getFluidContainerStats(final ItemStack aStack) {
- return this.mFluidContainerStats.get((short) aStack.getItemDamage());
- }
+ /**
+ * @param aMetaValue the Meta Value of the Item you want to set it to. [0 - 32765]
+ * @param aMaxCharge Maximum Charge. (if this is == 0 it will remove the Electric Behavior)
+ * @param aTransferLimit Transfer Limit.
+ * @param aTier The electric Tier.
+ * @param aSpecialData If this Item has a Fixed Charge, like a SingleUse Battery (if > 0).
+ * Use -1 if you want to make this Battery chargeable (the use and canUse Functions will still discharge if you just use this)
+ * Use -2 if you want to make this Battery dischargeable.
+ * Use -3 if you want to make this Battery charge/discharge-able.
+ * @return the Item itself for convenience in constructing.
+ */
+ public final Gregtech_MetaItem setElectricStats(int aMetaValue, long aMaxCharge, long aTransferLimit, long aTier, long aSpecialData, boolean aUseAnimations) {
+ if (aMetaValue < 0 || aMetaValue >= mOffset + mEnabledItems.length()) return this;
+ if (aMaxCharge == 0) mElectricStats.remove((short) aMetaValue);
+ else {
+ mElectricStats.put((short) aMetaValue, new Long[]{aMaxCharge, Math.max(0, aTransferLimit), Math.max(-1, aTier), aSpecialData});
+ if (aMetaValue >= mOffset && aUseAnimations)
+ mIconList[aMetaValue - mOffset] = Arrays.copyOf(mIconList[aMetaValue - mOffset], Math.max(9, mIconList[aMetaValue - mOffset].length));
+ }
+ return this;
+ }
- /**
- * @return the Icon the Material is going to be rendered with.
- */
- public IIconContainer getIconContainer(final int aMetaData) {
- return null;
- }
+ /**
+ * @param aMetaValue the Meta Value of the Item you want to set it to. [0 - 32765]
+ * @param aMaxCharge Maximum Charge. (if this is == 0 it will remove the Electric Behavior)
+ * @param aTransferLimit Transfer Limit.
+ * @param aTier The electric Tier.
+ * @param aSpecialData If this Item has a Fixed Charge, like a SingleUse Battery (if > 0).
+ * Use -1 if you want to make this Battery chargeable (the use and canUse Functions will still discharge if you just use this)
+ * Use -2 if you want to make this Battery dischargeable.
+ * Use -3 if you want to make this Battery charge/discharge-able.
+ * @return the Item itself for convenience in constructing.
+ */
+ public final Gregtech_MetaItem setFluidContainerStats(int aMetaValue, long aCapacity, long aStacksize) {
+ if (aMetaValue < 0 || aMetaValue >= mOffset + mEnabledItems.length()) return this;
+ if (aCapacity < 0) mElectricStats.remove((short) aMetaValue);
+ else mFluidContainerStats.put((short) aMetaValue, new Long[]{aCapacity, Math.max(1, aStacksize)});
+ return this;
+ }
- @Override
- public boolean getIsRepairable(final ItemStack aStack, final ItemStack aMaterial) {
- return false;
- }
+ /**
+ * @return if this MetaGenerated Item should use my Default Renderer System.
+ */
+ public boolean useStandardMetaItemRenderer() {
+ return true;
+ }
- @Override
- public int getItemEnchantability() {
- return 0;
- }
+ /**
+ * @return the Color Modulation the Material is going to be rendered with.
+ */
+ public short[] getRGBa(ItemStack aStack) {
+ return Materials._NULL.getRGBA();
+ }
+ /**
+ * @return the Icon the Material is going to be rendered with.
+ */
+ public IIconContainer getIconContainer(int aMetaData) {
+ return null;
+ }
+
/* ---------- INTERNAL OVERRIDES ---------- */
- @Override
- public EnumAction getItemUseAction(final ItemStack aStack) {
- return EnumAction.none;
- }
+ @Override
+ public ItemStack onItemRightClick(ItemStack aStack, World aWorld, EntityPlayer aPlayer) {
+ return super.onItemRightClick(aStack, aWorld, aPlayer);
+ }
- @Override
- public int getMaxItemUseDuration(final ItemStack aStack) {
- return this.mFoodStats.get((short) this.getDamage(aStack)) == null ? 0 : 32;
- }
+ @Override
+ public int getMaxItemUseDuration(ItemStack aStack) {
+ return mFoodStats.get((short) getDamage(aStack)) == null ? 0 : 32;
+ }
- /**
- * @return the Color Modulation the Material is going to be rendered with.
- */
- public short[] getRGBa(final ItemStack aStack) {
- return Materials._NULL.getRGBA();
- }
+ @Override
+ public EnumAction getItemUseAction(ItemStack aStack) {
+ return EnumAction.none;
+ }
- @Override
- @SideOnly(Side.CLIENT)
- public void getSubItems(final Item var1, final CreativeTabs aCreativeTab, final List aList) {
- for (int i = 0, j = this.mEnabledItems.length(); i < j; i++) {
- if (this.mVisibleItems.get(i) || GT_Values.D1 && this.mEnabledItems.get(i)) {
- final Long[] tStats = this.mElectricStats.get((short) (this.mOffset + i));
- if (tStats != null && tStats[3] < 0) {
- final ItemStack tStack = new ItemStack(this, 1, this.mOffset + i);
- this.setCharge(tStack, Math.abs(tStats[0]));
- this.isItemStackUsable(tStack);
- aList.add(tStack);
- }
- if (tStats == null || tStats[3] != -2) {
- final ItemStack tStack = new ItemStack(this, 1, this.mOffset + i);
- this.isItemStackUsable(tStack);
- aList.add(tStack);
- }
- }
- }
- }
+ @Override
+ public final ItemStack onEaten(ItemStack aStack, World aWorld, EntityPlayer aPlayer) {
+ IFoodStat tStat = mFoodStats.get((short) getDamage(aStack));
+ if (tStat != null) {
+
+ }
+ return aStack;
+ }
- @Override
- public boolean isBookEnchantable(final ItemStack aStack, final ItemStack aBook) {
- return false;
- }
+ @Override
+ @SideOnly(Side.CLIENT)
+ public void getSubItems(Item var1, CreativeTabs aCreativeTab, List aList) {
+ for (int i = 0, j = mEnabledItems.length(); i < j; i++)
+ if (mVisibleItems.get(i) || (D1 && mEnabledItems.get(i))) {
+ Long[] tStats = mElectricStats.get((short) (mOffset + i));
+ if (tStats != null && tStats[3] < 0) {
+ ItemStack tStack = new ItemStack(this, 1, mOffset + i);
+ setCharge(tStack, Math.abs(tStats[0]));
+ isItemStackUsable(tStack);
+ aList.add(tStack);
+ }
+ if (tStats == null || tStats[3] != -2) {
+ ItemStack tStack = new ItemStack(this, 1, mOffset + i);
+ isItemStackUsable(tStack);
+ aList.add(tStack);
+ }
+ }
+ }
- @Override
- public final ItemStack onEaten(final ItemStack aStack, final World aWorld, final EntityPlayer aPlayer) {
- final IFoodStat tStat = this.mFoodStats.get((short) this.getDamage(aStack));
- if (tStat != null) {
+ @Override
+ @SideOnly(Side.CLIENT)
+ public final void registerIcons(IIconRegister aIconRegister) {
+ for (short i = 0, j = (short) mEnabledItems.length(); i < j; i++)
+ if (mEnabledItems.get(i)) {
+ for (byte k = 1; k < mIconList[i].length; k++) {
+ mIconList[i][k] = aIconRegister.registerIcon(CORE.MODID+":"+getUnlocalizedName() + "/" + i + "/" + k);
+ }
+ mIconList[i][0] = aIconRegister.registerIcon(CORE.MODID+":"+getUnlocalizedName() + "/" + i);
+ }
+ }
- }
- return aStack;
- }
+ @Override
+ public final Long[] getElectricStats(ItemStack aStack) {
+ return mElectricStats.get((short) aStack.getItemDamage());
+ }
- @Override
- public ItemStack onItemRightClick(final ItemStack aStack, final World aWorld, final EntityPlayer aPlayer) {
- return super.onItemRightClick(aStack, aWorld, aPlayer);
- }
+ @Override
+ public final Long[] getFluidContainerStats(ItemStack aStack) {
+ return mFluidContainerStats.get((short) aStack.getItemDamage());
+ }
- @Override
- @SideOnly(Side.CLIENT)
- public final void registerIcons(final IIconRegister aIconRegister) {
- for (short i = 0, j = (short) this.mEnabledItems.length(); i < j; i++) {
- if (this.mEnabledItems.get(i)) {
- for (byte k = 1; k < this.mIconList[i].length; k++) {
- this.mIconList[i][k] = aIconRegister
- .registerIcon(CORE.MODID + ":" + this.getUnlocalizedName() + "/" + i + "/" + k);
- }
- this.mIconList[i][0] = aIconRegister
- .registerIcon(CORE.MODID + ":" + this.getUnlocalizedName() + "/" + i);
- }
- }
- }
+ @Override
+ public int getItemEnchantability() {
+ return 0;
+ }
- /**
- * Sets the Furnace Burn Value for the Item.
- *
- * @param aMetaValue
- * the Meta Value of the Item you want to set it to. [0 - 32765]
- * @param aValue
- * 200 = 1 Burn Process = 500 EU, max = 32767 (that is 81917.5
- * EU)
- * @return the Item itself for convenience in constructing.
- */
- public final Gregtech_MetaItem setBurnValue(final int aMetaValue, final int aValue) {
- if (aMetaValue < 0 || aMetaValue >= this.mOffset + this.mEnabledItems.length() || aValue < 0) {
- return this;
- }
- if (aValue == 0) {
- this.mBurnValues.remove((short) aMetaValue);
- }
- else {
- this.mBurnValues.put((short) aMetaValue, aValue > Short.MAX_VALUE ? Short.MAX_VALUE : (short) aValue);
- }
- return this;
- }
+ @Override
+ public boolean isBookEnchantable(ItemStack aStack, ItemStack aBook) {
+ return false;
+ }
- /**
- * @param aMetaValue
- * the Meta Value of the Item you want to set it to. [0 - 32765]
- * @param aMaxCharge
- * Maximum Charge. (if this is == 0 it will remove the Electric
- * Behavior)
- * @param aTransferLimit
- * Transfer Limit.
- * @param aTier
- * The electric Tier.
- * @param aSpecialData
- * If this Item has a Fixed Charge, like a SingleUse Battery (if
- * > 0). Use -1 if you want to make this Battery chargeable (the
- * use and canUse Functions will still discharge if you just use
- * this) Use -2 if you want to make this Battery dischargeable.
- * Use -3 if you want to make this Battery charge/discharge-able.
- * @return the Item itself for convenience in constructing.
- */
- public final Gregtech_MetaItem setElectricStats(final int aMetaValue, final long aMaxCharge,
- final long aTransferLimit, final long aTier, final long aSpecialData, final boolean aUseAnimations) {
- if (aMetaValue < 0 || aMetaValue >= this.mOffset + this.mEnabledItems.length()) {
- return this;
- }
- if (aMaxCharge == 0) {
- this.mElectricStats.remove((short) aMetaValue);
- }
- else {
- this.mElectricStats.put((short) aMetaValue, new Long[] {
- aMaxCharge, Math.max(0, aTransferLimit), Math.max(-1, aTier), aSpecialData
- });
- if (aMetaValue >= this.mOffset && aUseAnimations) {
- this.mIconList[aMetaValue - this.mOffset] = Arrays.copyOf(this.mIconList[aMetaValue - this.mOffset],
- Math.max(9, this.mIconList[aMetaValue - this.mOffset].length));
- }
+ @Override
+ public boolean getIsRepairable(ItemStack aStack, ItemStack aMaterial) {
+ return false;
+ }
+
+ @Override
+ public int getColorFromItemStack(ItemStack stack, int HEX_OxFFFFFF) {
+ if (stack.getDisplayName().contains("LuV")){
+ HEX_OxFFFFFF = 0xffffcc;
+ }
+ else if (stack.getDisplayName().contains("ZPM")){
+ HEX_OxFFFFFF = 0xace600;
}
- return this;
- }
-
- /**
- * @param aMetaValue
- * the Meta Value of the Item you want to set it to. [0 - 32765]
- * @param aMaxCharge
- * Maximum Charge. (if this is == 0 it will remove the Electric
- * Behavior)
- * @param aTransferLimit
- * Transfer Limit.
- * @param aTier
- * The electric Tier.
- * @param aSpecialData
- * If this Item has a Fixed Charge, like a SingleUse Battery (if
- * > 0). Use -1 if you want to make this Battery chargeable (the
- * use and canUse Functions will still discharge if you just use
- * this) Use -2 if you want to make this Battery dischargeable.
- * Use -3 if you want to make this Battery charge/discharge-able.
- * @return the Item itself for convenience in constructing.
- */
- public final Gregtech_MetaItem setFluidContainerStats(final int aMetaValue, final long aCapacity,
- final long aStacksize) {
- if (aMetaValue < 0 || aMetaValue >= this.mOffset + this.mEnabledItems.length()) {
- return this;
+ else if (stack.getDisplayName().contains("UV")){
+ HEX_OxFFFFFF = 0xffff00;
}
- if (aCapacity < 0) {
- this.mElectricStats.remove((short) aMetaValue);
+ else if (stack.getDisplayName().contains("MAX")){
+ HEX_OxFFFFFF = 0xff0000;
}
else {
- this.mFluidContainerStats.put((short) aMetaValue, new Long[] {
- aCapacity, Math.max(1, aStacksize)
- });
- }
- return this;
- }
-
- /**
- * @return if this MetaGenerated Item should use my Default Renderer System.
- */
- public boolean useStandardMetaItemRenderer() {
- return true;
+ HEX_OxFFFFFF = 0xffffff;
+ }
+ return HEX_OxFFFFFF;
}
} \ No newline at end of file
diff --git a/src/Java/gtPlusPlus/xmod/gregtech/api/items/Gregtech_MetaItem_Base.java b/src/Java/gtPlusPlus/xmod/gregtech/api/items/Gregtech_MetaItem_Base.java
index cc0fa5cd5d..5f0e677d9b 100644
--- a/src/Java/gtPlusPlus/xmod/gregtech/api/items/Gregtech_MetaItem_Base.java
+++ b/src/Java/gtPlusPlus/xmod/gregtech/api/items/Gregtech_MetaItem_Base.java
@@ -1,13 +1,23 @@
package gtPlusPlus.xmod.gregtech.api.items;
-import java.util.*;
-
-import gregtech.api.enums.GT_Values;
+import static gregtech.api.enums.GT_Values.D1;
+import static gregtech.api.enums.GT_Values.V;
import gregtech.api.enums.SubTag;
-import gregtech.api.util.*;
+import gregtech.api.util.GT_LanguageManager;
+import gregtech.api.util.GT_Log;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.api.util.GT_Utility;
import gtPlusPlus.core.util.Utils;
import gtPlusPlus.xmod.gregtech.api.interfaces.internal.Interface_ItemBehaviour;
-import ic2.api.item.*;
+import ic2.api.item.ElectricItem;
+import ic2.api.item.IElectricItem;
+import ic2.api.item.IElectricItemManager;
+import ic2.api.item.ISpecialElectricItem;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+
import net.minecraft.dispenser.IBlockSource;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityLivingBase;
@@ -22,705 +32,528 @@ import net.minecraft.world.World;
import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.fluids.IFluidContainerItem;
-public abstract class Gregtech_MetaItem_Base extends Gregtech_Generic_Item
- implements ISpecialElectricItem, IElectricItemManager, IFluidContainerItem {
- /* ---------- CONSTRUCTOR AND MEMBER VARIABLES ---------- */
- private final HashMap<Short, ArrayList<Interface_ItemBehaviour<Gregtech_MetaItem_Base>>> mItemBehaviors = new HashMap<Short, ArrayList<Interface_ItemBehaviour<Gregtech_MetaItem_Base>>>();
-
- /**
- * Creates the Item using these Parameters.
- *
- * @param aUnlocalized
- * The Unlocalized Name of this Item.
- * @param aGeneratedPrefixList
- * The OreDict Prefixes you want to have generated.
- */
- public Gregtech_MetaItem_Base(final String aUnlocalized) {
- super(aUnlocalized, "Generated Item", null, false);
- this.setHasSubtypes(true);
- this.setMaxDamage(0);
- }
-
- @Override
- public final void addInformation(final ItemStack aStack, final EntityPlayer aPlayer, List aList,
- final boolean aF3_H) {
- final String tKey = this.getUnlocalizedName(aStack) + ".tooltip",
- tString = GT_LanguageManager.getTranslation(tKey);
- if (GT_Utility.isStringValid(tString) && !tKey.equals(tString)) {
- aList.add(tString);
- }
-
- Long[] tStats = this.getElectricStats(aStack);
- if (tStats != null) {
- if (tStats[3] > 0) {
- aList.add(EnumChatFormatting.AQUA + "Contains " + GT_Utility.formatNumbers(tStats[3]) + " EU Tier: "
- + (tStats[2] >= 0 ? tStats[2] : 0) + EnumChatFormatting.GRAY);
- }
- else {
- final long tCharge = this.getRealCharge(aStack);
- if (tStats[3] == -2 && tCharge <= 0) {
- aList.add(EnumChatFormatting.AQUA + "Empty. You should recycle it properly."
- + EnumChatFormatting.GRAY);
- }
- else {
- aList.add(EnumChatFormatting.AQUA + "" + GT_Utility.formatNumbers(tCharge) + " / "
- + GT_Utility.formatNumbers(Math.abs(tStats[0])) + " EU - Voltage: "
- + GT_Values.V[(int) (tStats[2] >= 0
- ? tStats[2] < GT_Values.V.length ? tStats[2] : GT_Values.V.length - 1 : 1)]
- + EnumChatFormatting.GRAY);
- }
- }
- }
-
- tStats = this.getFluidContainerStats(aStack);
- if (tStats != null && tStats[0] > 0) {
- final FluidStack tFluid = this.getFluidContent(aStack);
- aList.add(EnumChatFormatting.BLUE
- + (tFluid == null ? "No Fluids Contained" : GT_Utility.getFluidName(tFluid, true))
- + EnumChatFormatting.GRAY);
- aList.add(EnumChatFormatting.BLUE + ((tFluid == null ? 0 : tFluid.amount) + "L / " + tStats[0] + "L")
- + EnumChatFormatting.GRAY);
- }
-
- final ArrayList<Interface_ItemBehaviour<Gregtech_MetaItem_Base>> tList = this.mItemBehaviors
- .get((short) this.getDamage(aStack));
- if (tList != null) {
- for (final Interface_ItemBehaviour<Gregtech_MetaItem_Base> tBehavior : tList) {
- aList = tBehavior.getAdditionalToolTips(this, aList, aStack);
- }
- }
-
- this.addAdditionalToolTips(aList, aStack);
- }
-
- /**
- * Adds a special Item Behaviour to the Item.
- * <p/>
- * Note: the boolean Behaviours sometimes won't be executed if another
- * boolean Behaviour returned true before.
- *
- * @param aMetaValue
- * the Meta Value of the Item you want to add it to. [0 - 32765]
- * @param aBehavior
- * the Click Behavior you want to add.
- * @return the Item itself for convenience in constructing.
- */
- public final Gregtech_MetaItem_Base addItemBehavior(final int aMetaValue,
- final Interface_ItemBehaviour<Gregtech_MetaItem_Base> aBehavior) {
- if (aMetaValue < 0 || aMetaValue >= 32766 || aBehavior == null) {
- return this;
- }
- ArrayList<Interface_ItemBehaviour<Gregtech_MetaItem_Base>> tList = this.mItemBehaviors.get((short) aMetaValue);
- if (tList == null) {
- tList = new ArrayList<Interface_ItemBehaviour<Gregtech_MetaItem_Base>>(1);
- this.mItemBehaviors.put((short) aMetaValue, tList);
- }
- tList.add(aBehavior);
- return this;
- }
-
- @Override
- public final boolean canProvideEnergy(final ItemStack aStack) {
- final Long[] tStats = this.getElectricStats(aStack);
- if (tStats == null) {
- return false;
- }
- return tStats[3] > 0 || aStack.stackSize == 1 && (tStats[3] == -2 || tStats[3] == -3);
- }
-
- @Override
- public final boolean canUse(final ItemStack aStack, final double aAmount) {
- return this.getRealCharge(aStack) >= aAmount;
- }
-
- @Override
- public final double charge(final ItemStack aStack, final double aCharge, final int aTier,
- final boolean aIgnoreTransferLimit, final boolean aSimulate) {
- final Long[] tStats = this.getElectricStats(aStack);
- if (tStats == null || tStats[2] > aTier
- || !(tStats[3] == -1 || tStats[3] == -3 || tStats[3] < 0 && aCharge == Integer.MAX_VALUE)
- || aStack.stackSize != 1) {
- return 0;
- }
- final long tChargeBefore = this.getRealCharge(aStack), tNewCharge = aCharge == Integer.MAX_VALUE
- ? Long.MAX_VALUE
- : Math.min(Math.abs(tStats[0]),
- tChargeBefore + (aIgnoreTransferLimit ? (long) aCharge : Math.min(tStats[1], (long) aCharge)));
- if (!aSimulate) {
- this.setCharge(aStack, tNewCharge);
- }
- return tNewCharge - tChargeBefore;
- }
-
- @Override
- public final void chargeFromArmor(final ItemStack aStack, final EntityLivingBase aPlayer) {
- if (aPlayer == null || aPlayer.worldObj.isRemote) {
- return;
- }
- for (int i = 1; i < 5; i++) {
- final ItemStack tArmor = aPlayer.getEquipmentInSlot(i);
- if (GT_ModHandler.isElectricItem(tArmor)) {
- final IElectricItem tArmorItem = (IElectricItem) tArmor.getItem();
- if (tArmorItem.canProvideEnergy(tArmor) && tArmorItem.getTier(tArmor) >= this.getTier(aStack)) {
- final double tCharge = ElectricItem.manager.discharge(tArmor,
- this.charge(aStack, Integer.MAX_VALUE - 1, Integer.MAX_VALUE, true, true),
- Integer.MAX_VALUE, true, true, false);
- if (tCharge > 0) {
- this.charge(aStack, tCharge, Integer.MAX_VALUE, true, false);
- if (aPlayer instanceof EntityPlayer) {
- final Container tContainer = ((EntityPlayer) aPlayer).openContainer;
- if (tContainer != null) {
- tContainer.detectAndSendChanges();
- }
- }
- }
- }
- }
- }
- }
-
- @Override
- public final double discharge(final ItemStack aStack, final double aCharge, final int aTier,
- final boolean aIgnoreTransferLimit, final boolean aBatteryAlike, final boolean aSimulate) {
- final Long[] tStats = this.getElectricStats(aStack);
- if (tStats == null || tStats[2] > aTier) {
- return 0;
- }
- if (aBatteryAlike && !this.canProvideEnergy(aStack)) {
- return 0;
- }
- if (tStats[3] > 0) {
- if (aCharge < tStats[3] || aStack.stackSize < 1) {
- return 0;
- }
- if (!aSimulate) {
- aStack.stackSize--;
- }
- return tStats[3];
- }
- final long tChargeBefore = this.getRealCharge(aStack), tNewCharge = Math.max(0,
- tChargeBefore - (aIgnoreTransferLimit ? (long) aCharge : Math.min(tStats[1], (long) aCharge)));
- if (!aSimulate) {
- this.setCharge(aStack, tNewCharge);
- }
- return tChargeBefore - tNewCharge;
- }
-
- @Override
- public FluidStack drain(final ItemStack aStack, final int maxDrain, final boolean doDrain) {
- if (aStack == null || aStack.stackSize != 1) {
- return null;
- }
-
- FluidStack tFluid = GT_Utility.getFluidForFilledItem(aStack, false);
- if (tFluid != null && maxDrain >= tFluid.amount) {
- final ItemStack tStack = GT_Utility.getContainerItem(aStack, false);
- if (tStack == null) {
- aStack.stackSize = 0;
- return tFluid;
- }
- aStack.setItemDamage(tStack.getItemDamage());
- aStack.func_150996_a(tStack.getItem());
- return tFluid;
- }
-
- final Long[] tStats = this.getFluidContainerStats(aStack);
- if (tStats == null || tStats[0] <= 0) {
- return null;
- }
-
- tFluid = this.getFluidContent(aStack);
- if (tFluid == null) {
- return null;
- }
-
- int used = maxDrain;
- if (tFluid.amount < used) {
- used = tFluid.amount;
- }
- if (doDrain) {
- tFluid.amount -= used;
- this.setFluidContent(aStack, tFluid);
- }
-
- final FluidStack drained = tFluid.copy();
- drained.amount = used;
- return drained;
- }
-
- @Override
- public int fill(final ItemStack aStack, final FluidStack aFluid, final boolean doFill) {
- if (aStack == null || aStack.stackSize != 1) {
- return 0;
- }
-
- final ItemStack tStack = GT_Utility.fillFluidContainer(aFluid, aStack, false, false);
- if (tStack != null) {
- aStack.setItemDamage(tStack.getItemDamage());
- aStack.func_150996_a(tStack.getItem());
- return GT_Utility.getFluidForFilledItem(tStack, false).amount;
- }
-
- final Long[] tStats = this.getFluidContainerStats(aStack);
- if (tStats == null || tStats[0] <= 0 || aFluid == null || aFluid.getFluid().getID() <= 0
- || aFluid.amount <= 0) {
- return 0;
- }
-
- FluidStack tFluid = this.getFluidContent(aStack);
-
- if (tFluid == null || tFluid.getFluid().getID() <= 0) {
- if (aFluid.amount <= tStats[0]) {
- if (doFill) {
- this.setFluidContent(aStack, aFluid);
- }
- return aFluid.amount;
- }
- if (doFill) {
- tFluid = aFluid.copy();
- tFluid.amount = (int) (long) tStats[0];
- this.setFluidContent(aStack, tFluid);
- }
- return (int) (long) tStats[0];
- }
-
- if (!tFluid.isFluidEqual(aFluid)) {
- return 0;
- }
-
- final int space = (int) (long) tStats[0] - tFluid.amount;
- if (aFluid.amount <= space) {
- if (doFill) {
- tFluid.amount += aFluid.amount;
- this.setFluidContent(aStack, tFluid);
- }
- return aFluid.amount;
- }
- if (doFill) {
- tFluid.amount = (int) (long) tStats[0];
- this.setFluidContent(aStack, tFluid);
- }
- return space;
- }
-
- @Override
- public int getCapacity(final ItemStack aStack) {
- final Long[] tStats = this.getFluidContainerStats(aStack);
- return tStats == null ? 0 : (int) Math.max(0, tStats[0]);
- }
-
- @Override
- public final double getCharge(final ItemStack aStack) {
- return this.getRealCharge(aStack);
- }
-
- @Override
- public final Item getChargedItem(final ItemStack itemStack) {
- return this;
- }
-
- public short getChargedMetaData(final ItemStack aStack) {
- return (short) aStack.getItemDamage();
- }
-
- @Override
- public int getColorFromItemStack(final ItemStack stack, int HEX_OxFFFFFF) {
- if (stack.getDisplayName().contains("LuV")) {
- HEX_OxFFFFFF = 0xffffcc;
- }
- else if (stack.getDisplayName().contains("ZPM")) {
+public abstract class Gregtech_MetaItem_Base extends Gregtech_Generic_Item implements ISpecialElectricItem, IElectricItemManager, IFluidContainerItem {
+ /* ---------- CONSTRUCTOR AND MEMBER VARIABLES ---------- */
+ private final HashMap<Short, ArrayList<Interface_ItemBehaviour<Gregtech_MetaItem_Base>>> mItemBehaviors = new HashMap<Short, ArrayList<Interface_ItemBehaviour<Gregtech_MetaItem_Base>>>();
+
+ /**
+ * Creates the Item using these Parameters.
+ *
+ * @param aUnlocalized The Unlocalized Name of this Item.
+ * @param aGeneratedPrefixList The OreDict Prefixes you want to have generated.
+ */
+ public Gregtech_MetaItem_Base(String aUnlocalized) {
+ super(aUnlocalized, "Generated Item", null, false);
+ setHasSubtypes(true);
+ setMaxDamage(0);
+ }
+
+ /**
+ * Adds a special Item Behaviour to the Item.
+ * <p/>
+ * Note: the boolean Behaviours sometimes won't be executed if another boolean Behaviour returned true before.
+ *
+ * @param aMetaValue the Meta Value of the Item you want to add it to. [0 - 32765]
+ * @param aBehavior the Click Behavior you want to add.
+ * @return the Item itself for convenience in constructing.
+ */
+ public final Gregtech_MetaItem_Base addItemBehavior(int aMetaValue, Interface_ItemBehaviour<Gregtech_MetaItem_Base> aBehavior) {
+ if (aMetaValue < 0 || aMetaValue >= 32766 || aBehavior == null) return this;
+ ArrayList<Interface_ItemBehaviour<Gregtech_MetaItem_Base>> tList = mItemBehaviors.get((short) aMetaValue);
+ if (tList == null) {
+ tList = new ArrayList<Interface_ItemBehaviour<Gregtech_MetaItem_Base>>(1);
+ mItemBehaviors.put((short) aMetaValue, tList);
+ }
+ tList.add(aBehavior);
+ return this;
+ }
+
+ public abstract Long[] getElectricStats(ItemStack aStack);
+
+ public abstract Long[] getFluidContainerStats(ItemStack aStack);
+
+ @Override
+ public boolean hasProjectile(SubTag aProjectileType, ItemStack aStack) {
+ ArrayList<Interface_ItemBehaviour<Gregtech_MetaItem_Base>> tList = mItemBehaviors.get((short) getDamage(aStack));
+ if (tList != null) for (Interface_ItemBehaviour<Gregtech_MetaItem_Base> tBehavior : tList)
+ if (tBehavior.hasProjectile(this, aProjectileType, aStack)) return true;
+ return super.hasProjectile(aProjectileType, aStack);
+ }
+
+ @Override
+ public EntityArrow getProjectile(SubTag aProjectileType, ItemStack aStack, World aWorld, double aX, double aY, double aZ) {
+ ArrayList<Interface_ItemBehaviour<Gregtech_MetaItem_Base>> tList = mItemBehaviors.get((short) getDamage(aStack));
+ if (tList != null) for (Interface_ItemBehaviour<Gregtech_MetaItem_Base> tBehavior : tList) {
+ EntityArrow rArrow = tBehavior.getProjectile(this, aProjectileType, aStack, aWorld, aX, aY, aZ);
+ if (rArrow != null) return rArrow;
+ }
+ return super.getProjectile(aProjectileType, aStack, aWorld, aX, aY, aZ);
+ }
+
+ @Override
+ public EntityArrow getProjectile(SubTag aProjectileType, ItemStack aStack, World aWorld, EntityLivingBase aEntity, float aSpeed) {
+ ArrayList<Interface_ItemBehaviour<Gregtech_MetaItem_Base>> tList = mItemBehaviors.get((short) getDamage(aStack));
+ if (tList != null) for (Interface_ItemBehaviour<Gregtech_MetaItem_Base> tBehavior : tList) {
+ EntityArrow rArrow = tBehavior.getProjectile(this, aProjectileType, aStack, aWorld, aEntity, aSpeed);
+ if (rArrow != null) return rArrow;
+ }
+ return super.getProjectile(aProjectileType, aStack, aWorld, aEntity, aSpeed);
+ }
+
+ @Override
+ public ItemStack onDispense(IBlockSource aSource, ItemStack aStack) {
+ ArrayList<Interface_ItemBehaviour<Gregtech_MetaItem_Base>> tList = mItemBehaviors.get((short) getDamage(aStack));
+ if (tList != null) for (Interface_ItemBehaviour<Gregtech_MetaItem_Base> tBehavior : tList)
+ if (tBehavior.canDispense(this, aSource, aStack)) return tBehavior.onDispense(this, aSource, aStack);
+ return super.onDispense(aSource, aStack);
+ }
+
+ @Override
+ public boolean isItemStackUsable(ItemStack aStack) {
+ ArrayList<Interface_ItemBehaviour<Gregtech_MetaItem_Base>> tList = mItemBehaviors.get((short) getDamage(aStack));
+ if (tList != null) for (Interface_ItemBehaviour<Gregtech_MetaItem_Base> tBehavior : tList)
+ if (!tBehavior.isItemStackUsable(this, aStack)) return false;
+ return super.isItemStackUsable(aStack);
+ }
+
+ @Override
+ public boolean onLeftClickEntity(ItemStack aStack, EntityPlayer aPlayer, Entity aEntity) {
+ use(aStack, 0, aPlayer);
+ isItemStackUsable(aStack);
+ ArrayList<Interface_ItemBehaviour<Gregtech_MetaItem_Base>> tList = mItemBehaviors.get((short) getDamage(aStack));
+ if (tList != null) for (Interface_ItemBehaviour<Gregtech_MetaItem_Base> tBehavior : tList)
+ try {
+ if (tBehavior.onLeftClickEntity(this, aStack, aPlayer, aEntity)) {
+ if (aStack.stackSize <= 0) aPlayer.destroyCurrentEquippedItem();
+ return true;
+ }
+ if (aStack.stackSize <= 0) {
+ aPlayer.destroyCurrentEquippedItem();
+ return false;
+ }
+ } catch (Throwable e) {
+ if (D1) e.printStackTrace(GT_Log.err);
+ }
+ return false;
+ }
+
+ @Override
+ public boolean onItemUse(ItemStack aStack, EntityPlayer aPlayer, World aWorld, int aX, int aY, int aZ, int aSide, float hitX, float hitY, float hitZ) {
+ use(aStack, 0, aPlayer);
+ isItemStackUsable(aStack);
+ ArrayList<Interface_ItemBehaviour<Gregtech_MetaItem_Base>> tList = mItemBehaviors.get((short) getDamage(aStack));
+ if (tList != null) for (Interface_ItemBehaviour<Gregtech_MetaItem_Base> tBehavior : tList)
+ try {
+ if (tBehavior.onItemUse(this, aStack, aPlayer, aWorld, aX, aY, aZ, aSide, hitX, hitY, hitZ)) {
+ if (aStack.stackSize <= 0) aPlayer.destroyCurrentEquippedItem();
+ return true;
+ }
+ if (aStack.stackSize <= 0) {
+ aPlayer.destroyCurrentEquippedItem();
+ return false;
+ }
+ } catch (Throwable e) {
+ if (D1) e.printStackTrace(GT_Log.err);
+ }
+ return false;
+ }
+
+ @Override
+ public boolean onItemUseFirst(ItemStack aStack, EntityPlayer aPlayer, World aWorld, int aX, int aY, int aZ, int aSide, float hitX, float hitY, float hitZ) {
+ use(aStack, 0, aPlayer);
+ isItemStackUsable(aStack);
+ ArrayList<Interface_ItemBehaviour<Gregtech_MetaItem_Base>> tList = mItemBehaviors.get((short) getDamage(aStack));
+ if (tList != null) for (Interface_ItemBehaviour<Gregtech_MetaItem_Base> tBehavior : tList)
+ try {
+ if (tBehavior.onItemUseFirst(this, aStack, aPlayer, aWorld, aX, aY, aZ, aSide, hitX, hitY, hitZ)) {
+ if (aStack.stackSize <= 0) aPlayer.destroyCurrentEquippedItem();
+ return true;
+ }
+ if (aStack.stackSize <= 0) {
+ aPlayer.destroyCurrentEquippedItem();
+ return false;
+ }
+ } catch (Throwable e) {
+ if (D1) e.printStackTrace(GT_Log.err);
+ }
+ return false;
+ }
+
+ @Override
+ public ItemStack onItemRightClick(ItemStack aStack, World aWorld, EntityPlayer aPlayer) {
+ use(aStack, 0, aPlayer);
+ isItemStackUsable(aStack);
+ ArrayList<Interface_ItemBehaviour<Gregtech_MetaItem_Base>> tList = mItemBehaviors.get((short) getDamage(aStack));
+ if (tList != null) for (Interface_ItemBehaviour<Gregtech_MetaItem_Base> tBehavior : tList)
+ try {
+ aStack = tBehavior.onItemRightClick(this, aStack, aWorld, aPlayer);
+ } catch (Throwable e) {
+ if (D1) e.printStackTrace(GT_Log.err);
+ }
+ return aStack;
+ }
+
+ @Override
+ public final void addInformation(ItemStack aStack, EntityPlayer aPlayer, List aList, boolean aF3_H) {
+ String tKey = getUnlocalizedName(aStack) + ".tooltip", tString = GT_LanguageManager.getTranslation(tKey);
+ if (GT_Utility.isStringValid(tString) && !tKey.equals(tString)) aList.add(tString);
+
+ Long[]
+ tStats = getElectricStats(aStack);
+ if (tStats != null) {
+ if (tStats[3] > 0) {
+ aList.add(EnumChatFormatting.AQUA + "Contains " + GT_Utility.formatNumbers(tStats[3]) + " EU Tier: " + (tStats[2] >= 0 ? tStats[2] : 0) + EnumChatFormatting.GRAY);
+ } else {
+ long tCharge = getRealCharge(aStack);
+ if (tStats[3] == -2 && tCharge <= 0) {
+ aList.add(EnumChatFormatting.AQUA + "Empty. You should recycle it properly." + EnumChatFormatting.GRAY);
+ } else {
+ aList.add(EnumChatFormatting.AQUA + "" + GT_Utility.formatNumbers(tCharge) + " / " + GT_Utility.formatNumbers(Math.abs(tStats[0])) + " EU - Voltage: " + V[(int) (tStats[2] >= 0 ? tStats[2] < V.length ? tStats[2] : V.length - 1 : 1)] + EnumChatFormatting.GRAY);
+ }
+ }
+ }
+
+ tStats = getFluidContainerStats(aStack);
+ if (tStats != null && tStats[0] > 0) {
+ FluidStack tFluid = getFluidContent(aStack);
+ aList.add(EnumChatFormatting.BLUE + ((tFluid == null ? "No Fluids Contained" : GT_Utility.getFluidName(tFluid, true))) + EnumChatFormatting.GRAY);
+ aList.add(EnumChatFormatting.BLUE + ((tFluid == null ? 0 : tFluid.amount) + "L / " + tStats[0] + "L") + EnumChatFormatting.GRAY);
+ }
+
+ ArrayList<Interface_ItemBehaviour<Gregtech_MetaItem_Base>> tList = mItemBehaviors.get((short) getDamage(aStack));
+ if (tList != null) for (Interface_ItemBehaviour<Gregtech_MetaItem_Base> tBehavior : tList)
+ aList = tBehavior.getAdditionalToolTips(this, aList, aStack);
+
+ addAdditionalToolTips(aList, aStack);
+ }
+
+ @Override
+ public void onUpdate(ItemStack aStack, World aWorld, Entity aPlayer, int aTimer, boolean aIsInHand) {
+ ArrayList<Interface_ItemBehaviour<Gregtech_MetaItem_Base>> tList = mItemBehaviors.get((short) getDamage(aStack));
+ if (tList != null) for (Interface_ItemBehaviour<Gregtech_MetaItem_Base> tBehavior : tList)
+ tBehavior.onUpdate(this, aStack, aWorld, aPlayer, aTimer, aIsInHand);
+ }
+
+ @Override
+ public final boolean canProvideEnergy(ItemStack aStack) {
+ Long[] tStats = getElectricStats(aStack);
+ if (tStats == null) return false;
+ return tStats[3] > 0 || (aStack.stackSize == 1 && (tStats[3] == -2 || tStats[3] == -3));
+ }
+
+ @Override
+ public final double getMaxCharge(ItemStack aStack) {
+ Long[] tStats = getElectricStats(aStack);
+ if (tStats == null) return 0;
+ return Math.abs(tStats[0]);
+ }
+
+ @Override
+ public final double getTransferLimit(ItemStack aStack) {
+ Long[] tStats = getElectricStats(aStack);
+ if (tStats == null) return 0;
+ return Math.max(tStats[1], tStats[3]);
+ }
+
+ @Override
+ public final double charge(ItemStack aStack, double aCharge, int aTier, boolean aIgnoreTransferLimit, boolean aSimulate) {
+ Long[] tStats = getElectricStats(aStack);
+ if (tStats == null || tStats[2] > aTier || !(tStats[3] == -1 || tStats[3] == -3 || (tStats[3] < 0 && aCharge == Integer.MAX_VALUE)) || aStack.stackSize != 1)
+ return 0;
+ long tChargeBefore = getRealCharge(aStack), tNewCharge = aCharge == Integer.MAX_VALUE ? Long.MAX_VALUE : Math.min(Math.abs(tStats[0]), tChargeBefore + (aIgnoreTransferLimit ? (long) aCharge : Math.min(tStats[1], (long) aCharge)));
+ if (!aSimulate) setCharge(aStack, tNewCharge);
+ return tNewCharge - tChargeBefore;
+ }
+
+ @Override
+ public final double discharge(ItemStack aStack, double aCharge, int aTier, boolean aIgnoreTransferLimit, boolean aBatteryAlike, boolean aSimulate) {
+ Long[] tStats = getElectricStats(aStack);
+ if (tStats == null || tStats[2] > aTier) return 0;
+ if (aBatteryAlike && !canProvideEnergy(aStack)) return 0;
+ if (tStats[3] > 0) {
+ if (aCharge < tStats[3] || aStack.stackSize < 1) return 0;
+ if (!aSimulate) aStack.stackSize--;
+ return tStats[3];
+ }
+ long tChargeBefore = getRealCharge(aStack), tNewCharge = Math.max(0, tChargeBefore - (aIgnoreTransferLimit ? (long) aCharge : Math.min(tStats[1], (long) aCharge)));
+ if (!aSimulate) setCharge(aStack, tNewCharge);
+ return tChargeBefore - tNewCharge;
+ }
+
+ @Override
+ public final double getCharge(ItemStack aStack) {
+ return getRealCharge(aStack);
+ }
+
+ @Override
+ public final boolean canUse(ItemStack aStack, double aAmount) {
+ return getRealCharge(aStack) >= aAmount;
+ }
+
+ @Override
+ public final boolean use(ItemStack aStack, double aAmount, EntityLivingBase aPlayer) {
+ chargeFromArmor(aStack, aPlayer);
+ if (aPlayer instanceof EntityPlayer && ((EntityPlayer) aPlayer).capabilities.isCreativeMode) return true;
+ double tTransfer = discharge(aStack, aAmount, Integer.MAX_VALUE, true, false, true);
+ if (tTransfer == aAmount) {
+ discharge(aStack, aAmount, Integer.MAX_VALUE, true, false, false);
+ chargeFromArmor(aStack, aPlayer);
+ return true;
+ }
+ discharge(aStack, aAmount, Integer.MAX_VALUE, true, false, false);
+ chargeFromArmor(aStack, aPlayer);
+ return false;
+ }
+
+ @Override
+ public final void chargeFromArmor(ItemStack aStack, EntityLivingBase aPlayer) {
+ if (aPlayer == null || aPlayer.worldObj.isRemote) return;
+ for (int i = 1; i < 5; i++) {
+ ItemStack tArmor = aPlayer.getEquipmentInSlot(i);
+ if (GT_ModHandler.isElectricItem(tArmor)) {
+ IElectricItem tArmorItem = (IElectricItem) tArmor.getItem();
+ if (tArmorItem.canProvideEnergy(tArmor) && tArmorItem.getTier(tArmor) >= getTier(aStack)) {
+ double tCharge = ElectricItem.manager.discharge(tArmor, charge(aStack, Integer.MAX_VALUE - 1, Integer.MAX_VALUE, true, true), Integer.MAX_VALUE, true, true, false);
+ if (tCharge > 0) {
+ charge(aStack, tCharge, Integer.MAX_VALUE, true, false);
+ if (aPlayer instanceof EntityPlayer) {
+ Container tContainer = ((EntityPlayer) aPlayer).openContainer;
+ if (tContainer != null) tContainer.detectAndSendChanges();
+ }
+ }
+ }
+ }
+ }
+ }
+
+ public final long getRealCharge(ItemStack aStack) {
+ Long[] tStats = getElectricStats(aStack);
+ if (tStats == null) return 0;
+ if (tStats[3] > 0) return (int) (long) tStats[3];
+ NBTTagCompound tNBT = aStack.getTagCompound();
+ return tNBT == null ? 0 : tNBT.getLong("GT.ItemCharge");
+ }
+
+ public final boolean setCharge(ItemStack aStack, long aCharge) {
+ Long[] tStats = getElectricStats(aStack);
+ if (tStats == null || tStats[3] > 0) return false;
+ NBTTagCompound tNBT = aStack.getTagCompound();
+ if (tNBT == null) tNBT = new NBTTagCompound();
+ tNBT.removeTag("GT.ItemCharge");
+ aCharge = Math.min(tStats[0] < 0 ? Math.abs(tStats[0] / 2) : aCharge, Math.abs(tStats[0]));
+ if (aCharge > 0) {
+ aStack.setItemDamage(getChargedMetaData(aStack));
+ tNBT.setLong("GT.ItemCharge", aCharge);
+ } else {
+ aStack.setItemDamage(getEmptyMetaData(aStack));
+ }
+ if (tNBT.hasNoTags()) aStack.setTagCompound(null);
+ else aStack.setTagCompound(tNBT);
+ isItemStackUsable(aStack);
+ return true;
+ }
+
+ public short getChargedMetaData(ItemStack aStack) {
+ return (short) aStack.getItemDamage();
+ }
+
+ public short getEmptyMetaData(ItemStack aStack) {
+ return (short) aStack.getItemDamage();
+ }
+
+ @Override
+ public FluidStack getFluid(ItemStack aStack) {
+ return getFluidContent(aStack);
+ }
+
+ @Override
+ public int getCapacity(ItemStack aStack) {
+ Long[] tStats = getFluidContainerStats(aStack);
+ return tStats == null ? 0 : (int) Math.max(0, tStats[0]);
+ }
+
+ @Override
+ public int fill(ItemStack aStack, FluidStack aFluid, boolean doFill) {
+ if (aStack == null || aStack.stackSize != 1) return 0;
+
+ ItemStack tStack = GT_Utility.fillFluidContainer(aFluid, aStack, false, false);
+ if (tStack != null) {
+ aStack.setItemDamage(tStack.getItemDamage());
+ aStack.func_150996_a(tStack.getItem());
+ return GT_Utility.getFluidForFilledItem(tStack, false).amount;
+ }
+
+ Long[] tStats = getFluidContainerStats(aStack);
+ if (tStats == null || tStats[0] <= 0 || aFluid == null || aFluid.getFluid().getID() <= 0 || aFluid.amount <= 0)
+ return 0;
+
+ FluidStack tFluid = getFluidContent(aStack);
+
+ if (tFluid == null || tFluid.getFluid().getID() <= 0) {
+ if (aFluid.amount <= tStats[0]) {
+ if (doFill) {
+ setFluidContent(aStack, aFluid);
+ }
+ return aFluid.amount;
+ }
+ if (doFill) {
+ tFluid = aFluid.copy();
+ tFluid.amount = (int) (long) tStats[0];
+ setFluidContent(aStack, tFluid);
+ }
+ return (int) (long) tStats[0];
+ }
+
+ if (!tFluid.isFluidEqual(aFluid)) return 0;
+
+ int space = (int) (long) tStats[0] - tFluid.amount;
+ if (aFluid.amount <= space) {
+ if (doFill) {
+ tFluid.amount += aFluid.amount;
+ setFluidContent(aStack, tFluid);
+ }
+ return aFluid.amount;
+ }
+ if (doFill) {
+ tFluid.amount = (int) (long) tStats[0];
+ setFluidContent(aStack, tFluid);
+ }
+ return space;
+ }
+
+ @Override
+ public FluidStack drain(ItemStack aStack, int maxDrain, boolean doDrain) {
+ if (aStack == null || aStack.stackSize != 1) return null;
+
+ FluidStack tFluid = GT_Utility.getFluidForFilledItem(aStack, false);
+ if (tFluid != null && maxDrain >= tFluid.amount) {
+ ItemStack tStack = GT_Utility.getContainerItem(aStack, false);
+ if (tStack == null) {
+ aStack.stackSize = 0;
+ return tFluid;
+ }
+ aStack.setItemDamage(tStack.getItemDamage());
+ aStack.func_150996_a(tStack.getItem());
+ return tFluid;
+ }
+
+ Long[] tStats = getFluidContainerStats(aStack);
+ if (tStats == null || tStats[0] <= 0) return null;
+
+ tFluid = getFluidContent(aStack);
+ if (tFluid == null) return null;
+
+ int used = maxDrain;
+ if (tFluid.amount < used) used = tFluid.amount;
+ if (doDrain) {
+ tFluid.amount -= used;
+ setFluidContent(aStack, tFluid);
+ }
+
+ FluidStack drained = tFluid.copy();
+ drained.amount = used;
+ return drained;
+ }
+
+ public FluidStack getFluidContent(ItemStack aStack) {
+ Long[] tStats = getFluidContainerStats(aStack);
+ if (tStats == null || tStats[0] <= 0) return GT_Utility.getFluidForFilledItem(aStack, false);
+ NBTTagCompound tNBT = aStack.getTagCompound();
+ return tNBT == null ? null : FluidStack.loadFluidStackFromNBT(tNBT.getCompoundTag("GT.FluidContent"));
+ }
+
+ public void setFluidContent(ItemStack aStack, FluidStack aFluid) {
+ NBTTagCompound tNBT = aStack.getTagCompound();
+ if (tNBT == null) tNBT = new NBTTagCompound();
+ else tNBT.removeTag("GT.FluidContent");
+ if (aFluid != null && aFluid.amount > 0)
+ tNBT.setTag("GT.FluidContent", aFluid.writeToNBT(new NBTTagCompound()));
+ if (tNBT.hasNoTags()) aStack.setTagCompound(null);
+ else aStack.setTagCompound(tNBT);
+ isItemStackUsable(aStack);
+ }
+
+ @Override
+ public int getItemStackLimit(ItemStack aStack) {
+ Long[] tStats = getElectricStats(aStack);
+ if (tStats != null && (tStats[3] == -1 || tStats[3] == -3) && getRealCharge(aStack) > 0) return 1;
+ tStats = getFluidContainerStats(aStack);
+ if (tStats != null) return (int) (long) tStats[1];
+ return 64;
+ }
+
+ @Override
+ public final Item getChargedItem(ItemStack itemStack) {
+ return this;
+ }
+
+ @Override
+ public final Item getEmptyItem(ItemStack itemStack) {
+ return this;
+ }
+
+ @Override
+ public final int getTier(ItemStack aStack) {
+ Long[] tStats = getElectricStats(aStack);
+ return (int) (tStats == null ? Integer.MAX_VALUE : tStats[2]);
+ }
+
+ @Override
+ public final String getToolTip(ItemStack aStack) {
+ return null;
+ } // This has its own ToolTip Handler, no need to let the IC2 Handler screw us up at this Point
+
+ @Override
+ public final IElectricItemManager getManager(ItemStack aStack) {
+ return this;
+ } // We are our own Manager
+
+ @Override
+ public final boolean getShareTag() {
+ return true;
+ } // just to be sure.
+
+ @Override
+ public int getItemEnchantability() {
+ return 0;
+ }
+
+ @Override
+ public boolean isBookEnchantable(ItemStack aStack, ItemStack aBook) {
+ return false;
+ }
+
+ @Override
+ public boolean getIsRepairable(ItemStack aStack, ItemStack aMaterial) {
+ return false;
+ }
+
+ @Override
+ public int getColorFromItemStack(ItemStack stack, int HEX_OxFFFFFF) {
+ if (stack.getDisplayName().contains("LuV")){
+ HEX_OxFFFFFF = 0xffffcc;
+ }
+ else if (stack.getDisplayName().contains("ZPM")){
HEX_OxFFFFFF = 0xace600;
}
- else if (stack.getDisplayName().contains("UV")) {
+ else if (stack.getDisplayName().contains("UV")){
HEX_OxFFFFFF = 0xffff00;
}
- else if (stack.getDisplayName().contains("MAX")) {
+ else if (stack.getDisplayName().contains("MAX")){
HEX_OxFFFFFF = 0xff0000;
}
- else if (stack.getDisplayName().contains("Sodium")) {
+ else if (stack.getDisplayName().contains("Sodium")){
HEX_OxFFFFFF = Utils.rgbtoHexValue(0, 0, 150);
}
- else if (stack.getDisplayName().contains("Cadmium")) {
+ else if (stack.getDisplayName().contains("Cadmium")){
HEX_OxFFFFFF = Utils.rgbtoHexValue(50, 50, 60);
}
- else if (stack.getDisplayName().contains("Lithium")) {
+ else if (stack.getDisplayName().contains("Lithium")){
HEX_OxFFFFFF = Utils.rgbtoHexValue(225, 220, 255);
}
else {
HEX_OxFFFFFF = 0xffffff;
- }
+ }
return HEX_OxFFFFFF;
}
-
- public abstract Long[] getElectricStats(ItemStack aStack);
-
- @Override
- public final Item getEmptyItem(final ItemStack itemStack) {
- return this;
- }
-
- public short getEmptyMetaData(final ItemStack aStack) {
- return (short) aStack.getItemDamage();
- }
-
- @Override
- public FluidStack getFluid(final ItemStack aStack) {
- return this.getFluidContent(aStack);
- }
-
- public abstract Long[] getFluidContainerStats(ItemStack aStack);
-
- public FluidStack getFluidContent(final ItemStack aStack) {
- final Long[] tStats = this.getFluidContainerStats(aStack);
- if (tStats == null || tStats[0] <= 0) {
- return GT_Utility.getFluidForFilledItem(aStack, false);
- }
- final NBTTagCompound tNBT = aStack.getTagCompound();
- return tNBT == null ? null : FluidStack.loadFluidStackFromNBT(tNBT.getCompoundTag("GT.FluidContent"));
- }
-
- @Override
- public boolean getIsRepairable(final ItemStack aStack, final ItemStack aMaterial) {
- return false;
- }
-
- @Override
- public int getItemEnchantability() {
- return 0;
- }
-
- @Override
- public int getItemStackLimit(final ItemStack aStack) {
- Long[] tStats = this.getElectricStats(aStack);
- if (tStats != null && (tStats[3] == -1 || tStats[3] == -3) && this.getRealCharge(aStack) > 0) {
- return 1;
- }
- tStats = this.getFluidContainerStats(aStack);
- if (tStats != null) {
- return (int) (long) tStats[1];
- }
- return 64;
- }
-
- @Override
- public final IElectricItemManager getManager(final ItemStack aStack) {
- return this;
- } // We are our own Manager
-
- @Override
- public final double getMaxCharge(final ItemStack aStack) {
- final Long[] tStats = this.getElectricStats(aStack);
- if (tStats == null) {
- return 0;
- }
- return Math.abs(tStats[0]);
- }
-
- @Override
- public EntityArrow getProjectile(final SubTag aProjectileType, final ItemStack aStack, final World aWorld,
- final double aX, final double aY, final double aZ) {
- final ArrayList<Interface_ItemBehaviour<Gregtech_MetaItem_Base>> tList = this.mItemBehaviors
- .get((short) this.getDamage(aStack));
- if (tList != null) {
- for (final Interface_ItemBehaviour<Gregtech_MetaItem_Base> tBehavior : tList) {
- final EntityArrow rArrow = tBehavior.getProjectile(this, aProjectileType, aStack, aWorld, aX, aY, aZ);
- if (rArrow != null) {
- return rArrow;
- }
- }
- }
- return super.getProjectile(aProjectileType, aStack, aWorld, aX, aY, aZ);
- }
-
- @Override
- public EntityArrow getProjectile(final SubTag aProjectileType, final ItemStack aStack, final World aWorld,
- final EntityLivingBase aEntity, final float aSpeed) {
- final ArrayList<Interface_ItemBehaviour<Gregtech_MetaItem_Base>> tList = this.mItemBehaviors
- .get((short) this.getDamage(aStack));
- if (tList != null) {
- for (final Interface_ItemBehaviour<Gregtech_MetaItem_Base> tBehavior : tList) {
- final EntityArrow rArrow = tBehavior.getProjectile(this, aProjectileType, aStack, aWorld, aEntity,
- aSpeed);
- if (rArrow != null) {
- return rArrow;
- }
- }
- }
- return super.getProjectile(aProjectileType, aStack, aWorld, aEntity, aSpeed);
- }
-
- public final long getRealCharge(final ItemStack aStack) {
- final Long[] tStats = this.getElectricStats(aStack);
- if (tStats == null) {
- return 0;
- }
- if (tStats[3] > 0) {
- return (int) (long) tStats[3];
- }
- final NBTTagCompound tNBT = aStack.getTagCompound();
- return tNBT == null ? 0 : tNBT.getLong("GT.ItemCharge");
- }
-
- @Override
- public final boolean getShareTag() {
- return true;
- } // just to be sure.
-
- @Override
- public final int getTier(final ItemStack aStack) {
- final Long[] tStats = this.getElectricStats(aStack);
- return (int) (tStats == null ? Integer.MAX_VALUE : tStats[2]);
- }
-
- @Override
- public final String getToolTip(final ItemStack aStack) {
- return null;
- } // This has its own ToolTip Handler, no need to let the IC2 Handler screw
- // us up at this Point
-
- @Override
- public final double getTransferLimit(final ItemStack aStack) {
- final Long[] tStats = this.getElectricStats(aStack);
- if (tStats == null) {
- return 0;
- }
- return Math.max(tStats[1], tStats[3]);
- }
-
- @Override
- public boolean hasProjectile(final SubTag aProjectileType, final ItemStack aStack) {
- final ArrayList<Interface_ItemBehaviour<Gregtech_MetaItem_Base>> tList = this.mItemBehaviors
- .get((short) this.getDamage(aStack));
- if (tList != null) {
- for (final Interface_ItemBehaviour<Gregtech_MetaItem_Base> tBehavior : tList) {
- if (tBehavior.hasProjectile(this, aProjectileType, aStack)) {
- return true;
- }
- }
- }
- return super.hasProjectile(aProjectileType, aStack);
- }
-
- @Override
- public boolean isBookEnchantable(final ItemStack aStack, final ItemStack aBook) {
- return false;
- }
-
- @Override
- public boolean isItemStackUsable(final ItemStack aStack) {
- final ArrayList<Interface_ItemBehaviour<Gregtech_MetaItem_Base>> tList = this.mItemBehaviors
- .get((short) this.getDamage(aStack));
- if (tList != null) {
- for (final Interface_ItemBehaviour<Gregtech_MetaItem_Base> tBehavior : tList) {
- if (!tBehavior.isItemStackUsable(this, aStack)) {
- return false;
- }
- }
- }
- return super.isItemStackUsable(aStack);
- }
-
- @Override
- public ItemStack onDispense(final IBlockSource aSource, final ItemStack aStack) {
- final ArrayList<Interface_ItemBehaviour<Gregtech_MetaItem_Base>> tList = this.mItemBehaviors
- .get((short) this.getDamage(aStack));
- if (tList != null) {
- for (final Interface_ItemBehaviour<Gregtech_MetaItem_Base> tBehavior : tList) {
- if (tBehavior.canDispense(this, aSource, aStack)) {
- return tBehavior.onDispense(this, aSource, aStack);
- }
- }
- }
- return super.onDispense(aSource, aStack);
- }
-
- @Override
- public ItemStack onItemRightClick(ItemStack aStack, final World aWorld, final EntityPlayer aPlayer) {
- this.use(aStack, 0, aPlayer);
- this.isItemStackUsable(aStack);
- final ArrayList<Interface_ItemBehaviour<Gregtech_MetaItem_Base>> tList = this.mItemBehaviors
- .get((short) this.getDamage(aStack));
- if (tList != null) {
- for (final Interface_ItemBehaviour<Gregtech_MetaItem_Base> tBehavior : tList) {
- try {
- aStack = tBehavior.onItemRightClick(this, aStack, aWorld, aPlayer);
- }
- catch (final Throwable e) {
- if (GT_Values.D1) {
- e.printStackTrace(GT_Log.err);
- }
- }
- }
- }
- return aStack;
- }
-
- @Override
- public boolean onItemUse(final ItemStack aStack, final EntityPlayer aPlayer, final World aWorld, final int aX,
- final int aY, final int aZ, final int aSide, final float hitX, final float hitY, final float hitZ) {
- this.use(aStack, 0, aPlayer);
- this.isItemStackUsable(aStack);
- final ArrayList<Interface_ItemBehaviour<Gregtech_MetaItem_Base>> tList = this.mItemBehaviors
- .get((short) this.getDamage(aStack));
- if (tList != null) {
- for (final Interface_ItemBehaviour<Gregtech_MetaItem_Base> tBehavior : tList) {
- try {
- if (tBehavior.onItemUse(this, aStack, aPlayer, aWorld, aX, aY, aZ, aSide, hitX, hitY, hitZ)) {
- if (aStack.stackSize <= 0) {
- aPlayer.destroyCurrentEquippedItem();
- }
- return true;
- }
- if (aStack.stackSize <= 0) {
- aPlayer.destroyCurrentEquippedItem();
- return false;
- }
- }
- catch (final Throwable e) {
- if (GT_Values.D1) {
- e.printStackTrace(GT_Log.err);
- }
- }
- }
- }
- return false;
- }
-
- @Override
- public boolean onItemUseFirst(final ItemStack aStack, final EntityPlayer aPlayer, final World aWorld, final int aX,
- final int aY, final int aZ, final int aSide, final float hitX, final float hitY, final float hitZ) {
- this.use(aStack, 0, aPlayer);
- this.isItemStackUsable(aStack);
- final ArrayList<Interface_ItemBehaviour<Gregtech_MetaItem_Base>> tList = this.mItemBehaviors
- .get((short) this.getDamage(aStack));
- if (tList != null) {
- for (final Interface_ItemBehaviour<Gregtech_MetaItem_Base> tBehavior : tList) {
- try {
- if (tBehavior.onItemUseFirst(this, aStack, aPlayer, aWorld, aX, aY, aZ, aSide, hitX, hitY, hitZ)) {
- if (aStack.stackSize <= 0) {
- aPlayer.destroyCurrentEquippedItem();
- }
- return true;
- }
- if (aStack.stackSize <= 0) {
- aPlayer.destroyCurrentEquippedItem();
- return false;
- }
- }
- catch (final Throwable e) {
- if (GT_Values.D1) {
- e.printStackTrace(GT_Log.err);
- }
- }
- }
- }
- return false;
- }
-
- @Override
- public boolean onLeftClickEntity(final ItemStack aStack, final EntityPlayer aPlayer, final Entity aEntity) {
- this.use(aStack, 0, aPlayer);
- this.isItemStackUsable(aStack);
- final ArrayList<Interface_ItemBehaviour<Gregtech_MetaItem_Base>> tList = this.mItemBehaviors
- .get((short) this.getDamage(aStack));
- if (tList != null) {
- for (final Interface_ItemBehaviour<Gregtech_MetaItem_Base> tBehavior : tList) {
- try {
- if (tBehavior.onLeftClickEntity(this, aStack, aPlayer, aEntity)) {
- if (aStack.stackSize <= 0) {
- aPlayer.destroyCurrentEquippedItem();
- }
- return true;
- }
- if (aStack.stackSize <= 0) {
- aPlayer.destroyCurrentEquippedItem();
- return false;
- }
- }
- catch (final Throwable e) {
- if (GT_Values.D1) {
- e.printStackTrace(GT_Log.err);
- }
- }
- }
- }
- return false;
- }
-
- @Override
- public void onUpdate(final ItemStack aStack, final World aWorld, final Entity aPlayer, final int aTimer,
- final boolean aIsInHand) {
- final ArrayList<Interface_ItemBehaviour<Gregtech_MetaItem_Base>> tList = this.mItemBehaviors
- .get((short) this.getDamage(aStack));
- if (tList != null) {
- for (final Interface_ItemBehaviour<Gregtech_MetaItem_Base> tBehavior : tList) {
- tBehavior.onUpdate(this, aStack, aWorld, aPlayer, aTimer, aIsInHand);
- }
- }
- }
-
- public final boolean setCharge(final ItemStack aStack, long aCharge) {
- final Long[] tStats = this.getElectricStats(aStack);
- if (tStats == null || tStats[3] > 0) {
- return false;
- }
- NBTTagCompound tNBT = aStack.getTagCompound();
- if (tNBT == null) {
- tNBT = new NBTTagCompound();
- }
- tNBT.removeTag("GT.ItemCharge");
- aCharge = Math.min(tStats[0] < 0 ? Math.abs(tStats[0] / 2) : aCharge, Math.abs(tStats[0]));
- if (aCharge > 0) {
- aStack.setItemDamage(this.getChargedMetaData(aStack));
- tNBT.setLong("GT.ItemCharge", aCharge);
- }
- else {
- aStack.setItemDamage(this.getEmptyMetaData(aStack));
- }
- if (tNBT.hasNoTags()) {
- aStack.setTagCompound(null);
- }
- else {
- aStack.setTagCompound(tNBT);
- }
- this.isItemStackUsable(aStack);
- return true;
- }
-
- public void setFluidContent(final ItemStack aStack, final FluidStack aFluid) {
- NBTTagCompound tNBT = aStack.getTagCompound();
- if (tNBT == null) {
- tNBT = new NBTTagCompound();
- }
- else {
- tNBT.removeTag("GT.FluidContent");
- }
- if (aFluid != null && aFluid.amount > 0) {
- tNBT.setTag("GT.FluidContent", aFluid.writeToNBT(new NBTTagCompound()));
- }
- if (tNBT.hasNoTags()) {
- aStack.setTagCompound(null);
- }
- else {
- aStack.setTagCompound(tNBT);
- }
- this.isItemStackUsable(aStack);
- }
-
- @Override
- public final boolean use(final ItemStack aStack, final double aAmount, final EntityLivingBase aPlayer) {
- this.chargeFromArmor(aStack, aPlayer);
- if (aPlayer instanceof EntityPlayer && ((EntityPlayer) aPlayer).capabilities.isCreativeMode) {
- return true;
- }
- final double tTransfer = this.discharge(aStack, aAmount, Integer.MAX_VALUE, true, false, true);
- if (tTransfer == aAmount) {
- this.discharge(aStack, aAmount, Integer.MAX_VALUE, true, false, false);
- this.chargeFromArmor(aStack, aPlayer);
- return true;
- }
- this.discharge(aStack, aAmount, Integer.MAX_VALUE, true, false, false);
- this.chargeFromArmor(aStack, aPlayer);
- return false;
- }
} \ No newline at end of file
diff --git a/src/Java/gtPlusPlus/xmod/gregtech/api/items/Gregtech_MetaItem_X32.java b/src/Java/gtPlusPlus/xmod/gregtech/api/items/Gregtech_MetaItem_X32.java
index eae20c695e..5cd8aa0700 100644
--- a/src/Java/gtPlusPlus/xmod/gregtech/api/items/Gregtech_MetaItem_X32.java
+++ b/src/Java/gtPlusPlus/xmod/gregtech/api/items/Gregtech_MetaItem_X32.java
@@ -1,261 +1,217 @@
package gtPlusPlus.xmod.gregtech.api.items;
-import java.util.Arrays;
-import java.util.List;
-
-import cpw.mods.fml.relauncher.Side;
-import cpw.mods.fml.relauncher.SideOnly;
import gregtech.api.GregTech_API;
-import gregtech.api.enums.*;
+import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
import gregtech.api.interfaces.IIconContainer;
-import gregtech.api.util.*;
+import gregtech.api.util.GT_LanguageManager;
+import gregtech.api.util.GT_OreDictUnificator;
+import gregtech.api.util.GT_Utility;
import gtPlusPlus.core.util.Utils;
import gtPlusPlus.core.util.math.MathUtils;
+
+import java.util.Arrays;
+import java.util.List;
+
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.util.IIcon;
+import cpw.mods.fml.relauncher.Side;
+import cpw.mods.fml.relauncher.SideOnly;
/**
* @author Gregorius Techneticies
* <p/>
* One Item for everything!
* <p/>
- * This brilliant Item Class is used for automatically generating all
- * possible variations of Material Items, like Dusts, Ingots, Gems,
- * Plates and similar. It saves me a ton of work, when adding Items,
- * because I always have to make a new Item SubType for each OreDict
- * Prefix, when adding a new Material.
+ * This brilliant Item Class is used for automatically generating all possible variations of Material Items, like Dusts, Ingots, Gems, Plates and similar.
+ * It saves me a ton of work, when adding Items, because I always have to make a new Item SubType for each OreDict Prefix, when adding a new Material.
* <p/>
- * As you can see, up to 32766 Items can be generated using this Class.
- * And the last 766 Items can be custom defined, just to save space and
- * MetaData.
+ * As you can see, up to 32766 Items can be generated using this Class. And the last 766 Items can be custom defined, just to save space and MetaData.
* <p/>
- * These Items can also have special RightClick abilities, electric
- * Charge or even be set to become a Food alike Item.
+ * These Items can also have special RightClick abilities, electric Charge or even be set to become a Food alike Item.
*/
public abstract class Gregtech_MetaItem_X32 extends Gregtech_MetaItem {
- protected final OrePrefixes[] mGeneratedPrefixList;
-
- /**
- * Creates the Item using these Parameters.
- *
- * @param aUnlocalized
- * The Unlocalized Name of this Item.
- * @param aGeneratedPrefixList
- * The OreDict Prefixes you want to have generated.
- */
- public Gregtech_MetaItem_X32(final String aUnlocalized, final OrePrefixes... aGeneratedPrefixList) {
- super(aUnlocalized, (short) 32000, (short) 766);
- this.mGeneratedPrefixList = Arrays.copyOf(aGeneratedPrefixList, 32);
-
- for (int i = 0; i < 32000; i++) {
- final OrePrefixes tPrefix = this.mGeneratedPrefixList[i / 1000];
- if (tPrefix == null) {
- continue;
- }
- final Materials tMaterial = GregTech_API.sGeneratedMaterials[i % 1000];
- if (tMaterial == null) {
- continue;
- }
- if (this.doesMaterialAllowGeneration(tPrefix, tMaterial)) {
- final ItemStack tStack = new ItemStack(this, 1, i);
- GT_LanguageManager.addStringLocalization(this.getUnlocalizedName(tStack) + ".name",
- this.getDefaultLocalization(tPrefix, tMaterial, i));
- GT_LanguageManager.addStringLocalization(this.getUnlocalizedName(tStack) + ".tooltip",
- tMaterial.getToolTip(tPrefix.mMaterialAmount / GT_Values.M));
- if (tPrefix.mIsUnificatable) {
- GT_OreDictUnificator.set(tPrefix, tMaterial, tStack);
- }
- else {
- GT_OreDictUnificator.registerOre(tPrefix.get(tMaterial), tStack);
- }
- if ((tPrefix == OrePrefixes.stick || tPrefix == OrePrefixes.wireFine) && (tMaterial == Materials.Lead
- || tMaterial == Materials.Tin || tMaterial == Materials.SolderingAlloy)) {
- GregTech_API.sSolderingMetalList.add(tStack);
- }
- }
- }
- }
+ protected final OrePrefixes[] mGeneratedPrefixList;
+
+ /**
+ * Creates the Item using these Parameters.
+ *
+ * @param aUnlocalized The Unlocalized Name of this Item.
+ * @param aGeneratedPrefixList The OreDict Prefixes you want to have generated.
+ */
+ public Gregtech_MetaItem_X32(String aUnlocalized, OrePrefixes... aGeneratedPrefixList) {
+ super(aUnlocalized, (short) 32000, (short) 766);
+ mGeneratedPrefixList = Arrays.copyOf(aGeneratedPrefixList, 32);
+
+ for (int i = 0; i < 32000; i++) {
+ OrePrefixes tPrefix = mGeneratedPrefixList[i / 1000];
+ if (tPrefix == null) continue;
+ Materials tMaterial = GregTech_API.sGeneratedMaterials[i % 1000];
+ if (tMaterial == null) continue;
+ if (doesMaterialAllowGeneration(tPrefix, tMaterial)) {
+ ItemStack tStack = new ItemStack(this, 1, i);
+ GT_LanguageManager.addStringLocalization(getUnlocalizedName(tStack) + ".name", getDefaultLocalization(tPrefix, tMaterial, i));
+ GT_LanguageManager.addStringLocalization(getUnlocalizedName(tStack) + ".tooltip", tMaterial.getToolTip(tPrefix.mMaterialAmount / GT_Values.M));
+ if (tPrefix.mIsUnificatable) {
+ GT_OreDictUnificator.set(tPrefix, tMaterial, tStack);
+ } else {
+ GT_OreDictUnificator.registerOre(tPrefix.get(tMaterial), tStack);
+ }
+ if ((tPrefix == OrePrefixes.stick || tPrefix == OrePrefixes.wireFine) && (tMaterial == Materials.Lead || tMaterial == Materials.Tin || tMaterial == Materials.SolderingAlloy)) {
+ GregTech_API.sSolderingMetalList.add(tStack);
+ }
+ }
+ }
+ }
/* ---------- OVERRIDEABLE FUNCTIONS ---------- */
- /**
- * @param aPrefix
- * this can be null, you have to return false in that case
- * @param aMaterial
- * this can be null, you have to return false in that case
- * @return if this Item should be generated and visible.
- */
- public boolean doesMaterialAllowGeneration(final OrePrefixes aPrefix, final Materials aMaterial) {
- // You have to check for at least these Conditions in every Case! So add
- // a super Call like the following for this before executing your Code:
- // if (!super.doesMaterialAllowGeneration(aPrefix, aMaterial)) return
- // false;
- return aPrefix != null && aMaterial != null && aPrefix.doGenerateItem(aMaterial);
- }
-
- /**
- * @param aPrefix
- * always != null
- * @param aMaterial
- * always != null
- * @param aDoShowAllItems
- * this is the Configuration Setting of the User, if he wants to
- * see all the Stuff like Tiny Dusts or Crushed Ores as well.
- * @return if this Item should be visible in NEI or Creative
- */
- public boolean doesShowInCreative(final OrePrefixes aPrefix, final Materials aMaterial,
- final boolean aDoShowAllItems) {
- return true;
- }
-
+ /**
+ * @return the Color Modulation the Material is going to be rendered with.
+ */
+ @Override
+ public short[] getRGBa(ItemStack aStack) {
+ Materials tMaterial = GregTech_API.sGeneratedMaterials[getDamage(aStack) % 1000];
+ return tMaterial == null ? Materials._NULL.mRGBa : tMaterial.mRGBa;
+ }
+
+ /**
+ * @param aPrefix this can be null, you have to return false in that case
+ * @param aMaterial this can be null, you have to return false in that case
+ * @return if this Item should be generated and visible.
+ */
+ public boolean doesMaterialAllowGeneration(OrePrefixes aPrefix, Materials aMaterial) {
+ // You have to check for at least these Conditions in every Case! So add a super Call like the following for this before executing your Code:
+ // if (!super.doesMaterialAllowGeneration(aPrefix, aMaterial)) return false;
+ return aPrefix != null && aMaterial != null && aPrefix.doGenerateItem(aMaterial);
+ }
+
/* ---------- OVERRIDEABLE FUNCTIONS ---------- */
- @Override
- public int getColorFromItemStack(final ItemStack stack, int HEX_OxFFFFFF) {
- if (stack.getDisplayName().contains("LuV")) {
- HEX_OxFFFFFF = 0xffffcc;
- }
- else if (stack.getDisplayName().contains("ZPM")) {
+ /**
+ * @param aPrefix the OreDict Prefix
+ * @param aMaterial the Material
+ * @param aMetaData a Index from [0 - 31999]
+ * @return the Localized Name when default LangFiles are used.
+ */
+ public String getDefaultLocalization(OrePrefixes aPrefix, Materials aMaterial, int aMetaData) {
+ return aPrefix.getDefaultLocalNameForItem(aMaterial);
+ }
+
+ /**
+ * @param aMetaData a Index from [0 - 31999]
+ * @param aMaterial the Material
+ * @return an Icon Container for the Item Display.
+ */
+ public final IIconContainer getIconContainer(int aMetaData, Materials aMaterial) {
+ return mGeneratedPrefixList[aMetaData / 1000] != null && mGeneratedPrefixList[aMetaData / 1000].mTextureIndex >= 0 ? aMaterial.mIconSet.mTextures[mGeneratedPrefixList[aMetaData / 1000].mTextureIndex] : null;
+ }
+
+ /**
+ * @param aPrefix always != null
+ * @param aMaterial always != null
+ * @param aDoShowAllItems this is the Configuration Setting of the User, if he wants to see all the Stuff like Tiny Dusts or Crushed Ores as well.
+ * @return if this Item should be visible in NEI or Creative
+ */
+ public boolean doesShowInCreative(OrePrefixes aPrefix, Materials aMaterial, boolean aDoShowAllItems) {
+ return true;
+ }
+
+ /* ---------- INTERNAL OVERRIDES ---------- */
+
+ @Override
+ public ItemStack getContainerItem(ItemStack aStack) {
+ int aDamage = aStack.getItemDamage();
+ if (aDamage < 32000 && aDamage >= 0) {
+ Materials aMaterial = GregTech_API.sGeneratedMaterials[aDamage % 1000];
+ if (aMaterial != null && aMaterial != Materials.Empty && aMaterial != Materials._NULL) {
+ OrePrefixes aPrefix = mGeneratedPrefixList[aDamage / 1000];
+ if (aPrefix != null) return GT_Utility.copyAmount(1, aPrefix.mContainerItem);
+ }
+ }
+ return null;
+ }
+
+ @Override
+ public final IIconContainer getIconContainer(int aMetaData) {
+ return GregTech_API.sGeneratedMaterials[aMetaData % 1000] == null ? null : getIconContainer(aMetaData, GregTech_API.sGeneratedMaterials[aMetaData % 1000]);
+ }
+
+ @Override
+ @SideOnly(Side.CLIENT)
+ public final void getSubItems(Item var1, CreativeTabs aCreativeTab, List aList) {
+ for (int i = 0; i < 32000; i++)
+ if (doesMaterialAllowGeneration(mGeneratedPrefixList[i / 1000], GregTech_API.sGeneratedMaterials[i % 1000]) && doesShowInCreative(mGeneratedPrefixList[i / 1000], GregTech_API.sGeneratedMaterials[i % 1000], GregTech_API.sDoShowAllItemsInCreative)) {
+ ItemStack tStack = new ItemStack(this, 1, i);
+ isItemStackUsable(tStack);
+ aList.add(tStack);
+ }
+ super.getSubItems(var1, aCreativeTab, aList);
+ }
+
+ @Override
+ public final IIcon getIconFromDamage(int aMetaData) {
+ if (aMetaData < 0) return null;
+ if (aMetaData < 32000) {
+ Materials tMaterial = GregTech_API.sGeneratedMaterials[aMetaData % 1000];
+ if (tMaterial == null) return null;
+ IIconContainer tIcon = getIconContainer(aMetaData, tMaterial);
+ if (tIcon != null) return tIcon.getIcon();
+ return null;
+ }
+ return aMetaData - 32000 < mIconList.length ? mIconList[aMetaData - 32000][0] : null;
+ }
+
+ @Override
+ public int getItemStackLimit(ItemStack aStack) {
+ int tDamage = getDamage(aStack);
+ if (tDamage < 32000 && mGeneratedPrefixList[tDamage / 1000] != null)
+ return Math.min(super.getItemStackLimit(aStack), mGeneratedPrefixList[tDamage / 1000].mDefaultStackSize);
+ return super.getItemStackLimit(aStack);
+ }
+
+ @Override
+ public int getColorFromItemStack(ItemStack stack, int HEX_OxFFFFFF) {
+ if (stack.getDisplayName().contains("LuV")){
+ HEX_OxFFFFFF = 0xffffcc;
+ }
+ else if (stack.getDisplayName().contains("ZPM")){
HEX_OxFFFFFF = 0xffe600;
}
- else if (stack.getDisplayName().contains("UV")) {
+ else if (stack.getDisplayName().contains("UV")){
HEX_OxFFFFFF = 0xffb300;
}
- else if (stack.getDisplayName().contains("MAX")) {
- HEX_OxFFFFFF = Utils.rgbtoHexValue(MathUtils.randInt(220, 250), MathUtils.randInt(221, 251),
- MathUtils.randInt(220, 250));
+ else if (stack.getDisplayName().contains("MAX")){
+ HEX_OxFFFFFF = Utils.rgbtoHexValue(MathUtils.randInt(220, 250), MathUtils.randInt(221, 251), MathUtils.randInt(220, 250));
}
- else if (stack.getDisplayName().contains("Sodium")) {
+ else if (stack.getDisplayName().contains("Sodium")){
HEX_OxFFFFFF = Utils.rgbtoHexValue(90, 90, 255);
}
- else if (stack.getDisplayName().contains("Cadmium")) {
+ else if (stack.getDisplayName().contains("Cadmium")){
HEX_OxFFFFFF = Utils.rgbtoHexValue(150, 150, 80);
}
- else if (stack.getDisplayName().contains("Lithium")) {
+ else if (stack.getDisplayName().contains("Lithium")){
HEX_OxFFFFFF = Utils.rgbtoHexValue(225, 220, 255);
}
- else if (stack.getDisplayName().contains("Wrought")) {
+ else if (stack.getDisplayName().contains("Wrought")){
HEX_OxFFFFFF = Utils.rgbtoHexValue(200, 180, 180);
}
- else if (stack.getDisplayName().contains("Bronze")) {
+ else if (stack.getDisplayName().contains("Bronze")){
HEX_OxFFFFFF = Utils.rgbtoHexValue(255, 128, 0);
}
- else if (stack.getDisplayName().contains("Brass")) {
+ else if (stack.getDisplayName().contains("Brass")){
HEX_OxFFFFFF = Utils.rgbtoHexValue(255, 180, 0);
}
- else if (stack.getDisplayName().contains("Invar")) {
+ else if (stack.getDisplayName().contains("Invar")){
HEX_OxFFFFFF = Utils.rgbtoHexValue(180, 180, 120);
}
else {
HEX_OxFFFFFF = 0xffffff;
- }
+ }
return HEX_OxFFFFFF;
}
-
- @Override
- public ItemStack getContainerItem(final ItemStack aStack) {
- final int aDamage = aStack.getItemDamage();
- if (aDamage < 32000 && aDamage >= 0) {
- final Materials aMaterial = GregTech_API.sGeneratedMaterials[aDamage % 1000];
- if (aMaterial != null && aMaterial != Materials.Empty && aMaterial != Materials._NULL) {
- final OrePrefixes aPrefix = this.mGeneratedPrefixList[aDamage / 1000];
- if (aPrefix != null) {
- return GT_Utility.copyAmount(1, aPrefix.mContainerItem);
- }
- }
- }
- return null;
- }
-
- /**
- * @param aPrefix
- * the OreDict Prefix
- * @param aMaterial
- * the Material
- * @param aMetaData
- * a Index from [0 - 31999]
- * @return the Localized Name when default LangFiles are used.
- */
- public String getDefaultLocalization(final OrePrefixes aPrefix, final Materials aMaterial, final int aMetaData) {
- return aPrefix.getDefaultLocalNameForItem(aMaterial);
- }
-
- /* ---------- INTERNAL OVERRIDES ---------- */
-
- @Override
- public final IIconContainer getIconContainer(final int aMetaData) {
- return GregTech_API.sGeneratedMaterials[aMetaData % 1000] == null ? null
- : this.getIconContainer(aMetaData, GregTech_API.sGeneratedMaterials[aMetaData % 1000]);
- }
-
- /**
- * @param aMetaData
- * a Index from [0 - 31999]
- * @param aMaterial
- * the Material
- * @return an Icon Container for the Item Display.
- */
- public final IIconContainer getIconContainer(final int aMetaData, final Materials aMaterial) {
- return this.mGeneratedPrefixList[aMetaData / 1000] != null
- && this.mGeneratedPrefixList[aMetaData / 1000].mTextureIndex >= 0
- ? aMaterial.mIconSet.mTextures[this.mGeneratedPrefixList[aMetaData / 1000].mTextureIndex]
- : null;
- }
-
- @Override
- public final IIcon getIconFromDamage(final int aMetaData) {
- if (aMetaData < 0) {
- return null;
- }
- if (aMetaData < 32000) {
- final Materials tMaterial = GregTech_API.sGeneratedMaterials[aMetaData % 1000];
- if (tMaterial == null) {
- return null;
- }
- final IIconContainer tIcon = this.getIconContainer(aMetaData, tMaterial);
- if (tIcon != null) {
- return tIcon.getIcon();
- }
- return null;
- }
- return aMetaData - 32000 < this.mIconList.length ? this.mIconList[aMetaData - 32000][0] : null;
- }
-
- @Override
- public int getItemStackLimit(final ItemStack aStack) {
- final int tDamage = this.getDamage(aStack);
- if (tDamage < 32000 && this.mGeneratedPrefixList[tDamage / 1000] != null) {
- return Math.min(super.getItemStackLimit(aStack),
- this.mGeneratedPrefixList[tDamage / 1000].mDefaultStackSize);
- }
- return super.getItemStackLimit(aStack);
- }
-
- /**
- * @return the Color Modulation the Material is going to be rendered with.
- */
- @Override
- public short[] getRGBa(final ItemStack aStack) {
- final Materials tMaterial = GregTech_API.sGeneratedMaterials[this.getDamage(aStack) % 1000];
- return tMaterial == null ? Materials._NULL.mRGBa : tMaterial.mRGBa;
- }
-
- @Override
- @SideOnly(Side.CLIENT)
- public final void getSubItems(final Item var1, final CreativeTabs aCreativeTab, final List aList) {
- for (int i = 0; i < 32000; i++) {
- if (this.doesMaterialAllowGeneration(this.mGeneratedPrefixList[i / 1000],
- GregTech_API.sGeneratedMaterials[i % 1000])
- && this.doesShowInCreative(this.mGeneratedPrefixList[i / 1000],
- GregTech_API.sGeneratedMaterials[i % 1000], GregTech_API.sDoShowAllItemsInCreative)) {
- final ItemStack tStack = new ItemStack(this, 1, i);
- this.isItemStackUsable(tStack);
- aList.add(tStack);
- }
- }
- super.getSubItems(var1, aCreativeTab, aList);
- }
} \ No newline at end of file
diff --git a/src/Java/gtPlusPlus/xmod/gregtech/api/items/Gregtech_MetaTool.java b/src/Java/gtPlusPlus/xmod/gregtech/api/items/Gregtech_MetaTool.java
index ae034433c1..7f2042e05d 100644
--- a/src/Java/gtPlusPlus/xmod/gregtech/api/items/Gregtech_MetaTool.java
+++ b/src/Java/gtPlusPlus/xmod/gregtech/api/items/Gregtech_MetaTool.java
@@ -1,12 +1,7 @@
package gtPlusPlus.xmod.gregtech.api.items;
-import java.util.*;
-import java.util.Map.Entry;
-
-import buildcraft.api.tools.IToolWrench;
-import cpw.mods.fml.common.Optional;
+import static gregtech.api.enums.GT_Values.MOD_ID_RC;
import gregtech.api.enchants.Enchantment_Radioactivity;
-import gregtech.api.enums.GT_Values;
import gregtech.api.enums.Materials;
import gregtech.api.interfaces.IDamagableItem;
import gregtech.api.interfaces.IToolStats;
@@ -15,11 +10,19 @@ import gregtech.api.util.GT_ModHandler;
import gregtech.api.util.GT_Utility;
import gtPlusPlus.core.creative.AddToCreativeTab;
import gtPlusPlus.xmod.gregtech.api.interfaces.internal.Interface_ToolStats;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map.Entry;
+
import mods.railcraft.api.core.items.IToolCrowbar;
import net.minecraft.block.Block;
import net.minecraft.enchantment.Enchantment;
import net.minecraft.enchantment.EnchantmentHelper;
-import net.minecraft.entity.*;
+import net.minecraft.entity.Entity;
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.entity.SharedMonsterAttributes;
import net.minecraft.entity.item.EntityMinecart;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
@@ -31,336 +34,293 @@ import net.minecraft.util.EnumChatFormatting;
import net.minecraft.util.MathHelper;
import net.minecraft.world.World;
import net.minecraftforge.event.world.BlockEvent;
+import buildcraft.api.tools.IToolWrench;
+import cpw.mods.fml.common.Optional;
/**
- * This is an example on how you can create a Tool ItemStack, in this case a
- * Bismuth Wrench:
- * GT_MetaGenerated_Tool.sInstances.get("gt.metatool.01").getToolWithStats(16,
- * 1, Materials.Bismuth, Materials.Bismuth, null);
+ * This is an example on how you can create a Tool ItemStack, in this case a Bismuth Wrench:
+ * GT_MetaGenerated_Tool.sInstances.get("gt.metatool.01").getToolWithStats(16, 1, Materials.Bismuth, Materials.Bismuth, null);
*/
-@Optional.InterfaceList(value = {
- @Optional.Interface(iface = "mods.railcraft.api.core.items.IToolCrowbar", modid = GT_Values.MOD_ID_RC),
- @Optional.Interface(iface = "buildcraft.api.tools.IToolWrench", modid = "BuildCraft")
-})
-public abstract class Gregtech_MetaTool extends GT_MetaGenerated_Tool
- implements IDamagableItem, IToolCrowbar, IToolWrench {
+@Optional.InterfaceList(value = {@Optional.Interface(iface = "mods.railcraft.api.core.items.IToolCrowbar", modid = MOD_ID_RC), @Optional.Interface(iface = "buildcraft.api.tools.IToolWrench", modid = "BuildCraft")})
+public abstract class Gregtech_MetaTool extends GT_MetaGenerated_Tool implements IDamagableItem, IToolCrowbar, IToolWrench {
/**
- * All instances of this Item Class are listed here. This gets used to
- * register the Renderer to all Items of this Type, if
- * useStandardMetaItemRenderer() returns true.
+ * All instances of this Item Class are listed here.
+ * This gets used to register the Renderer to all Items of this Type, if useStandardMetaItemRenderer() returns true.
* <p/>
- * You can also use the unlocalized Name gotten from getUnlocalizedName() as
- * Key if you want to get a specific Item.
+ * You can also use the unlocalized Name gotten from getUnlocalizedName() as Key if you want to get a specific Item.
*/
- public static final HashMap<String, Gregtech_MetaTool> sInstances = new HashMap<String, Gregtech_MetaTool>();
+ public static final HashMap<String, Gregtech_MetaTool> sInstances = new HashMap<String, Gregtech_MetaTool>();
/* ---------- CONSTRUCTOR AND MEMBER VARIABLES ---------- */
- public final HashMap<Short, IToolStats> mToolStats = new HashMap<Short, IToolStats>();
+ public final HashMap<Short, IToolStats> mToolStats = new HashMap<Short, IToolStats>();
/**
* Creates the Item using these Parameters.
*
- * @param aUnlocalized
- * The Unlocalized Name of this Item.
+ * @param aUnlocalized The Unlocalized Name of this Item.
*/
- public Gregtech_MetaTool(final String aUnlocalized) {
+ public Gregtech_MetaTool(String aUnlocalized) {
super(aUnlocalized);
GT_ModHandler.registerBoxableItemToToolBox(this);
- this.setCreativeTab(AddToCreativeTab.tabMachines);
- this.setMaxStackSize(1);
- Gregtech_MetaTool.sInstances.put(this.getUnlocalizedName(), this);
+ setCreativeTab(AddToCreativeTab.tabMachines);
+ setMaxStackSize(1);
+ sInstances.put(getUnlocalizedName(), this);
}
+ /**
+ * Called by the Block Harvesting Event within the GT_Proxy
+ */
@Override
- public void addAdditionalToolTips(final List aList, final ItemStack aStack) {
- final long tMaxDamage = GT_MetaGenerated_Tool.getToolMaxDamage(aStack);
- final Materials tMaterial = GT_MetaGenerated_Tool.getPrimaryMaterial(aStack);
- final IToolStats tStats = this.getToolStats(aStack);
- final int tOffset = this.getElectricStats(aStack) != null ? 2 : 1;
- if (tStats != null) {
- final String name = aStack.getUnlocalizedName();
- if (name.equals("gt.metatool.01.170") || name.equals("gt.metatool.01.172")
- || name.equals("gt.metatool.01.174") || name.equals("gt.metatool.01.176")) {
- aList.add(tOffset + 0,
- EnumChatFormatting.WHITE + "Durability: " + EnumChatFormatting.GREEN
- + (tMaxDamage - GT_MetaGenerated_Tool.getToolDamage(aStack)) + " / " + tMaxDamage
- + EnumChatFormatting.GRAY);
- aList.add(tOffset + 1,
- EnumChatFormatting.WHITE + tMaterial.mDefaultLocalName + EnumChatFormatting.YELLOW + " lvl "
- + this.getHarvestLevel(aStack, "") + EnumChatFormatting.GRAY);
- aList.add(tOffset + 2, EnumChatFormatting.WHITE + "Turbine Efficency: " + EnumChatFormatting.BLUE
- + (50.0F + 10.0F * this.getToolCombatDamage(aStack)) + EnumChatFormatting.GRAY);
- aList.add(tOffset + 3,
- EnumChatFormatting.WHITE + "Optimal Steam flow: " + EnumChatFormatting.LIGHT_PURPLE
- + Math.max(Float.MIN_NORMAL,
- tStats.getSpeedMultiplier()
- * GT_MetaGenerated_Tool.getPrimaryMaterial(aStack).mToolSpeed * 1000)
- + EnumChatFormatting.GRAY + "L/sec");
- aList.add(tOffset + 3,
- EnumChatFormatting.WHITE + "Optimal Gas flow(EU burnvalue per tick): "
- + EnumChatFormatting.LIGHT_PURPLE
- + Math.max(Float.MIN_NORMAL,
- tStats.getSpeedMultiplier()
- * GT_MetaGenerated_Tool.getPrimaryMaterial(aStack).mToolSpeed * 25)
- + EnumChatFormatting.GRAY + "EU/t");
- aList.add(tOffset + 3,
- EnumChatFormatting.WHITE + "Optimal Plasma flow(Plasma energyvalue per tick): "
- + EnumChatFormatting.LIGHT_PURPLE
- + Math.max(Float.MIN_NORMAL,
- tStats.getSpeedMultiplier()
- * GT_MetaGenerated_Tool.getPrimaryMaterial(aStack).mToolSpeed * 1000)
- + EnumChatFormatting.GRAY + "EU/t");
+ public void onHarvestBlockEvent(ArrayList<ItemStack> aDrops, ItemStack aStack, EntityPlayer aPlayer, Block aBlock, int aX, int aY, int aZ, byte aMetaData, int aFortune, boolean aSilkTouch, BlockEvent.HarvestDropsEvent aEvent) {
+ IToolStats tStats = getToolStats(aStack);
+ if (isItemStackUsable(aStack) && getDigSpeed(aStack, aBlock, aMetaData) > 0.0F)
+ doDamage(aStack, tStats.convertBlockDrops(aDrops, aStack, aPlayer, aBlock, aX, aY, aZ, aMetaData, aFortune, aSilkTouch, aEvent) * tStats.getToolDamagePerDropConversion());
+ }
- }
- else {
- aList.add(tOffset + 0,
- EnumChatFormatting.WHITE + "Durability: " + EnumChatFormatting.GREEN
- + (tMaxDamage - GT_MetaGenerated_Tool.getToolDamage(aStack)) + " / " + tMaxDamage
- + EnumChatFormatting.GRAY);
- aList.add(tOffset + 1,
- EnumChatFormatting.WHITE + tMaterial.mDefaultLocalName + EnumChatFormatting.YELLOW + " lvl "
- + this.getHarvestLevel(aStack, "") + EnumChatFormatting.GRAY);
- aList.add(tOffset + 2, EnumChatFormatting.WHITE + "Attack Damage: " + EnumChatFormatting.BLUE
- + this.getToolCombatDamage(aStack) + EnumChatFormatting.GRAY);
- aList.add(tOffset + 3,
- EnumChatFormatting.WHITE + "Mining Speed: " + EnumChatFormatting.LIGHT_PURPLE
- + Math.max(Float.MIN_NORMAL,
- tStats.getSpeedMultiplier()
- * GT_MetaGenerated_Tool.getPrimaryMaterial(aStack).mToolSpeed)
- + EnumChatFormatting.GRAY);
+ @Override
+ public boolean onLeftClickEntity(ItemStack aStack, EntityPlayer aPlayer, Entity aEntity) {
+ IToolStats tStats = getToolStats(aStack);
+ if (tStats == null || !isItemStackUsable(aStack)) return true;
+ GT_Utility.doSoundAtClient(tStats.getEntityHitSound(), 1, 1.0F);
+ if (super.onLeftClickEntity(aStack, aPlayer, aEntity)) return true;
+ if (aEntity.canAttackWithItem() && !aEntity.hitByEntity(aPlayer)) {
+ float tMagicDamage = tStats.getMagicDamageAgainstEntity(aEntity instanceof EntityLivingBase ? EnchantmentHelper.getEnchantmentModifierLiving(aPlayer, (EntityLivingBase) aEntity) : 0.0F, aEntity, aStack, aPlayer), tDamage = tStats.getNormalDamageAgainstEntity((float) aPlayer.getEntityAttribute(SharedMonsterAttributes.attackDamage).getAttributeValue() + getToolCombatDamage(aStack), aEntity, aStack, aPlayer);
+ if (tDamage + tMagicDamage > 0.0F) {
+ boolean tCriticalHit = aPlayer.fallDistance > 0.0F && !aPlayer.onGround && !aPlayer.isOnLadder() && !aPlayer.isInWater() && !aPlayer.isPotionActive(Potion.blindness) && aPlayer.ridingEntity == null && aEntity instanceof EntityLivingBase;
+ if (tCriticalHit && tDamage > 0.0F) tDamage *= 1.5F;
+ tDamage += tMagicDamage;
+ if (aEntity.attackEntityFrom(tStats.getDamageSource(aPlayer, aEntity), tDamage)) {
+ if (aEntity instanceof EntityLivingBase)
+ aEntity.setFire(EnchantmentHelper.getFireAspectModifier(aPlayer) * 4);
+ int tKnockcack = (aPlayer.isSprinting() ? 1 : 0) + (aEntity instanceof EntityLivingBase ? EnchantmentHelper.getKnockbackModifier(aPlayer, (EntityLivingBase) aEntity) : 0);
+ if (tKnockcack > 0) {
+ aEntity.addVelocity(-MathHelper.sin(aPlayer.rotationYaw * (float) Math.PI / 180.0F) * tKnockcack * 0.5F, 0.1D, MathHelper.cos(aPlayer.rotationYaw * (float) Math.PI / 180.0F) * tKnockcack * 0.5F);
+ aPlayer.motionX *= 0.6D;
+ aPlayer.motionZ *= 0.6D;
+ aPlayer.setSprinting(false);
+ }
+ if (tCriticalHit) aPlayer.onCriticalHit(aEntity);
+ if (tMagicDamage > 0.0F) aPlayer.onEnchantmentCritical(aEntity);
+ if (tDamage >= 18.0F) aPlayer.triggerAchievement(AchievementList.overkill);
+ aPlayer.setLastAttacker(aEntity);
+ if (aEntity instanceof EntityLivingBase)
+ EnchantmentHelper.func_151384_a((EntityLivingBase) aEntity, aPlayer);
+ EnchantmentHelper.func_151385_b(aPlayer, aEntity);
+ if (aEntity instanceof EntityLivingBase)
+ aPlayer.addStat(StatList.damageDealtStat, Math.round(tDamage * 10.0F));
+ aEntity.hurtResistantTime = Math.max(1, tStats.getHurtResistanceTime(aEntity.hurtResistantTime, aEntity));
+ aPlayer.addExhaustion(0.3F);
+ doDamage(aStack, tStats.getToolDamagePerEntityAttack());
+ }
}
}
+ if (aStack.stackSize <= 0) aPlayer.destroyCurrentEquippedItem();
+ return true;
}
- public void addAdditionalToolTips(final List aList, final ItemStack aStack, final EntityPlayer aPlayer) {
- final long tMaxDamage = GT_MetaGenerated_Tool.getToolMaxDamage(aStack);
- final Materials tMaterial = GT_MetaGenerated_Tool.getPrimaryMaterial(aStack);
- final IToolStats tStats = this.getToolStats(aStack);
- final int tOffset = this.getElectricStats(aStack) != null ? 2 : 1;
- if (tStats != null) {
- final String name = aStack.getUnlocalizedName();
- if (name.equals("gt.metatool.01.170") || name.equals("gt.metatool.01.172")
- || name.equals("gt.metatool.01.174") || name.equals("gt.metatool.01.176")) {
- aList.add(tOffset + 0,
- EnumChatFormatting.WHITE + "Durability: " + EnumChatFormatting.GREEN
- + (tMaxDamage - GT_MetaGenerated_Tool.getToolDamage(aStack)) + " / " + tMaxDamage
- + EnumChatFormatting.GRAY);
- aList.add(tOffset + 1,
- EnumChatFormatting.WHITE + tMaterial.mDefaultLocalName + EnumChatFormatting.YELLOW + " lvl "
- + this.getHarvestLevel(aStack, "") + EnumChatFormatting.GRAY);
- aList.add(tOffset + 2, EnumChatFormatting.WHITE + "Turbine Efficency: " + EnumChatFormatting.BLUE
- + (50.0F + 10.0F * this.getToolCombatDamage(aStack)) + EnumChatFormatting.GRAY);
- aList.add(tOffset + 3,
- EnumChatFormatting.WHITE + "Optimal Steam flow: " + EnumChatFormatting.LIGHT_PURPLE
- + Math.max(Float.MIN_NORMAL,
- tStats.getSpeedMultiplier()
- * GT_MetaGenerated_Tool.getPrimaryMaterial(aStack).mToolSpeed * 1000)
- + EnumChatFormatting.GRAY + "L/sec");
- aList.add(tOffset + 3,
- EnumChatFormatting.WHITE + "Optimal Gas flow(EU burnvalue per tick): "
- + EnumChatFormatting.LIGHT_PURPLE
- + Math.max(Float.MIN_NORMAL,
- tStats.getSpeedMultiplier()
- * GT_MetaGenerated_Tool.getPrimaryMaterial(aStack).mToolSpeed * 50)
- + EnumChatFormatting.GRAY + "EU/t");
- aList.add(tOffset + 3,
- EnumChatFormatting.WHITE + "Optimal Plasma flow(Plasma energyvalue per tick): "
- + EnumChatFormatting.LIGHT_PURPLE
- + Math.max(Float.MIN_NORMAL,
- tStats.getSpeedMultiplier()
- * GT_MetaGenerated_Tool.getPrimaryMaterial(aStack).mToolSpeed * 1000)
- + EnumChatFormatting.GRAY + "EU/t");
+ @Override
+ public ItemStack onItemRightClick(ItemStack aStack, World aWorld, EntityPlayer aPlayer) {
+ IToolStats tStats = getToolStats(aStack);
+ if (tStats != null && tStats.canBlock()) aPlayer.setItemInUse(aStack, 72000);
+ return super.onItemRightClick(aStack, aWorld, aPlayer);
+ }
- }
- else {
- aList.add(tOffset + 0,
- EnumChatFormatting.WHITE + "Durability: " + EnumChatFormatting.GREEN
- + (tMaxDamage - GT_MetaGenerated_Tool.getToolDamage(aStack)) + " / " + tMaxDamage
- + EnumChatFormatting.GRAY);
- aList.add(tOffset + 1,
- EnumChatFormatting.WHITE + tMaterial.mDefaultLocalName + EnumChatFormatting.YELLOW + " lvl "
- + this.getHarvestLevel(aStack, "") + EnumChatFormatting.GRAY);
- aList.add(tOffset + 2, EnumChatFormatting.WHITE + "Attack Damage: " + EnumChatFormatting.BLUE
- + this.getToolCombatDamage(aStack) + EnumChatFormatting.GRAY);
- aList.add(tOffset + 3,
- EnumChatFormatting.WHITE + "Mining Speed: " + EnumChatFormatting.LIGHT_PURPLE
- + Math.max(Float.MIN_NORMAL,
- tStats.getSpeedMultiplier()
- * GT_MetaGenerated_Tool.getPrimaryMaterial(aStack).mToolSpeed)
- + EnumChatFormatting.GRAY);
- NBTTagCompound aNBT = aStack.getTagCompound();
- if (aNBT != null) {
- aNBT = aNBT.getCompoundTag("GT.ToolStats");
- if (aNBT != null && aNBT.hasKey("Heat")) {
- int tHeat = aNBT.getInteger("Heat");
- final long tWorldTime = aPlayer.getEntityWorld().getWorldTime();
- if (aNBT.hasKey("HeatTime")) {
- final long tHeatTime = aNBT.getLong("HeatTime");
- if (tWorldTime > tHeatTime + 10) {
- tHeat = (int) (tHeat - (tWorldTime - tHeatTime) / 10);
- if (tHeat < 300 && tHeat > -10000) {
- tHeat = 300;
- }
- }
- aNBT.setLong("HeatTime", tWorldTime);
- if (tHeat > -10000) {
- aNBT.setInteger("Heat", tHeat);
- }
- }
-
- aList.add(tOffset + 3, EnumChatFormatting.RED + "Heat: " + aNBT.getInteger("Heat") + " K"
- + EnumChatFormatting.GRAY);
- }
- }
+
+ public void addAdditionalToolTips(List aList, ItemStack aStack) {
+ long tMaxDamage = getToolMaxDamage(aStack);
+ Materials tMaterial = getPrimaryMaterial(aStack);
+ IToolStats tStats = getToolStats(aStack);
+ int tOffset = getElectricStats(aStack) != null ? 2 : 1;
+ if (tStats != null) {
+ String name = aStack.getUnlocalizedName();
+ if (name.equals("gt.metatool.01.170") || name.equals("gt.metatool.01.172") || name.equals("gt.metatool.01.174") || name.equals("gt.metatool.01.176")) {
+ aList.add(tOffset + 0, EnumChatFormatting.WHITE + "Durability: " + EnumChatFormatting.GREEN + (tMaxDamage - getToolDamage(aStack)) + " / " + tMaxDamage + EnumChatFormatting.GRAY);
+ aList.add(tOffset + 1, EnumChatFormatting.WHITE + tMaterial.mDefaultLocalName + EnumChatFormatting.YELLOW + " lvl " + getHarvestLevel(aStack, "") + EnumChatFormatting.GRAY);
+ aList.add(tOffset + 2, EnumChatFormatting.WHITE + "Turbine Efficency: " + EnumChatFormatting.BLUE + (50.0F + (10.0F * getToolCombatDamage(aStack))) + EnumChatFormatting.GRAY);
+ aList.add(tOffset + 3, EnumChatFormatting.WHITE + "Optimal Steam flow: " + EnumChatFormatting.LIGHT_PURPLE + Math.max(Float.MIN_NORMAL, tStats.getSpeedMultiplier() * getPrimaryMaterial(aStack).mToolSpeed * 1000) + EnumChatFormatting.GRAY + "L/sec");
+ aList.add(tOffset + 3, EnumChatFormatting.WHITE + "Optimal Gas flow(EU burnvalue per tick): " + EnumChatFormatting.LIGHT_PURPLE + Math.max(Float.MIN_NORMAL, tStats.getSpeedMultiplier() * getPrimaryMaterial(aStack).mToolSpeed * 25) + EnumChatFormatting.GRAY + "EU/t");
+ aList.add(tOffset + 3, EnumChatFormatting.WHITE + "Optimal Plasma flow(Plasma energyvalue per tick): " + EnumChatFormatting.LIGHT_PURPLE + Math.max(Float.MIN_NORMAL, tStats.getSpeedMultiplier() * getPrimaryMaterial(aStack).mToolSpeed * 1000) + EnumChatFormatting.GRAY + "EU/t");
+
+ } else {
+ aList.add(tOffset + 0, EnumChatFormatting.WHITE + "Durability: " + EnumChatFormatting.GREEN + (tMaxDamage - getToolDamage(aStack)) + " / " + tMaxDamage + EnumChatFormatting.GRAY);
+ aList.add(tOffset + 1, EnumChatFormatting.WHITE + tMaterial.mDefaultLocalName + EnumChatFormatting.YELLOW + " lvl " + getHarvestLevel(aStack, "") + EnumChatFormatting.GRAY);
+ aList.add(tOffset + 2, EnumChatFormatting.WHITE + "Attack Damage: " + EnumChatFormatting.BLUE + getToolCombatDamage(aStack) + EnumChatFormatting.GRAY);
+ aList.add(tOffset + 3, EnumChatFormatting.WHITE + "Mining Speed: " + EnumChatFormatting.LIGHT_PURPLE + Math.max(Float.MIN_NORMAL, tStats.getSpeedMultiplier() * getPrimaryMaterial(aStack).mToolSpeed) + EnumChatFormatting.GRAY);
}
}
}
+
+ public void addAdditionalToolTips(List aList, ItemStack aStack, EntityPlayer aPlayer) {
+ long tMaxDamage = getToolMaxDamage(aStack);
+ Materials tMaterial = getPrimaryMaterial(aStack);
+ IToolStats tStats = getToolStats(aStack);
+ int tOffset = getElectricStats(aStack) != null ? 2 : 1;
+ if (tStats != null) {
+ String name = aStack.getUnlocalizedName();
+ if (name.equals("gt.metatool.01.170") || name.equals("gt.metatool.01.172") || name.equals("gt.metatool.01.174") || name.equals("gt.metatool.01.176")) {
+ aList.add(tOffset + 0, EnumChatFormatting.WHITE + "Durability: " + EnumChatFormatting.GREEN + (tMaxDamage - getToolDamage(aStack)) + " / " + tMaxDamage + EnumChatFormatting.GRAY);
+ aList.add(tOffset + 1, EnumChatFormatting.WHITE + tMaterial.mDefaultLocalName + EnumChatFormatting.YELLOW + " lvl " + getHarvestLevel(aStack, "") + EnumChatFormatting.GRAY);
+ aList.add(tOffset + 2, EnumChatFormatting.WHITE + "Turbine Efficency: " + EnumChatFormatting.BLUE + (50.0F + (10.0F * getToolCombatDamage(aStack))) + EnumChatFormatting.GRAY);
+ aList.add(tOffset + 3, EnumChatFormatting.WHITE + "Optimal Steam flow: " + EnumChatFormatting.LIGHT_PURPLE + Math.max(Float.MIN_NORMAL, tStats.getSpeedMultiplier() * getPrimaryMaterial(aStack).mToolSpeed * 1000) + EnumChatFormatting.GRAY + "L/sec");
+ aList.add(tOffset + 3, EnumChatFormatting.WHITE + "Optimal Gas flow(EU burnvalue per tick): " + EnumChatFormatting.LIGHT_PURPLE + Math.max(Float.MIN_NORMAL, tStats.getSpeedMultiplier() * getPrimaryMaterial(aStack).mToolSpeed * 50) + EnumChatFormatting.GRAY + "EU/t");
+ aList.add(tOffset + 3, EnumChatFormatting.WHITE + "Optimal Plasma flow(Plasma energyvalue per tick): " + EnumChatFormatting.LIGHT_PURPLE + Math.max(Float.MIN_NORMAL, tStats.getSpeedMultiplier() * getPrimaryMaterial(aStack).mToolSpeed * 1000) + EnumChatFormatting.GRAY + "EU/t");
+
+ } else {
+ aList.add(tOffset + 0, EnumChatFormatting.WHITE + "Durability: " + EnumChatFormatting.GREEN + (tMaxDamage - getToolDamage(aStack)) + " / " + tMaxDamage + EnumChatFormatting.GRAY);
+ aList.add(tOffset + 1, EnumChatFormatting.WHITE + tMaterial.mDefaultLocalName + EnumChatFormatting.YELLOW + " lvl " + getHarvestLevel(aStack, "") + EnumChatFormatting.GRAY);
+ aList.add(tOffset + 2, EnumChatFormatting.WHITE + "Attack Damage: " + EnumChatFormatting.BLUE + getToolCombatDamage(aStack) + EnumChatFormatting.GRAY);
+ aList.add(tOffset + 3, EnumChatFormatting.WHITE + "Mining Speed: " + EnumChatFormatting.LIGHT_PURPLE + Math.max(Float.MIN_NORMAL, tStats.getSpeedMultiplier() * getPrimaryMaterial(aStack).mToolSpeed) + EnumChatFormatting.GRAY);
+ NBTTagCompound aNBT = aStack.getTagCompound();
+ if (aNBT != null) {
+ aNBT = aNBT.getCompoundTag("GT.ToolStats");
+ if (aNBT != null && aNBT.hasKey("Heat")){
+ int tHeat = aNBT.getInteger("Heat");
+ long tWorldTime = aPlayer.getEntityWorld().getWorldTime();
+ if(aNBT.hasKey("HeatTime")){
+ long tHeatTime = aNBT.getLong("HeatTime");
+ if(tWorldTime>(tHeatTime+10)){
+ tHeat = (int) (tHeat - ((tWorldTime-tHeatTime)/10));
+ if(tHeat<300&&tHeat>-10000)tHeat=300;
+ }
+ aNBT.setLong("HeatTime", tWorldTime);
+ if(tHeat>-10000)aNBT.setInteger("Heat", tHeat);
+ }
+
+ aList.add(tOffset + 3, EnumChatFormatting.RED + "Heat: " + aNBT.getInteger("Heat")+" K" + EnumChatFormatting.GRAY);
+ }
+ }
+ }
+ }
+ }
@Override
- public boolean canBoost(final EntityPlayer aPlayer, final ItemStack aStack, final EntityMinecart cart) {
- if (!this.isItemStackUsable(aStack)) {
- return false;
- }
- final IToolStats tStats = this.getToolStats(aStack);
- return tStats != null && tStats.isCrowbar();
+ public Long[] getFluidContainerStats(ItemStack aStack) {
+ return null;
}
@Override
- public boolean canLink(final EntityPlayer aPlayer, final ItemStack aStack, final EntityMinecart cart) {
- if (!this.isItemStackUsable(aStack)) {
- return false;
+ public Long[] getElectricStats(ItemStack aStack) {
+ NBTTagCompound aNBT = aStack.getTagCompound();
+ if (aNBT != null) {
+ aNBT = aNBT.getCompoundTag("GT.ToolStats");
+ if (aNBT != null && aNBT.getBoolean("Electric"))
+ return new Long[]{aNBT.getLong("MaxCharge"), aNBT.getLong("Voltage"), aNBT.getLong("Tier"), aNBT.getLong("SpecialData")};
}
- final IToolStats tStats = this.getToolStats(aStack);
- return tStats != null && tStats.isCrowbar();
+ return null;
}
@Override
- public boolean canWhack(final EntityPlayer aPlayer, final ItemStack aStack, final int aX, final int aY,
- final int aZ) {
- if (!this.isItemStackUsable(aStack)) {
- return false;
- }
- final IToolStats tStats = this.getToolStats(aStack);
- return tStats != null && tStats.isCrowbar();
+ public float getToolCombatDamage(ItemStack aStack) {
+ IToolStats tStats = getToolStats(aStack);
+ if (tStats == null) return 0;
+ return tStats.getBaseDamage() + getPrimaryMaterial(aStack).mToolQuality;
}
@Override
- public boolean canWrench(final EntityPlayer player, final int x, final int y, final int z) {
- // System.out.println("canWrench");
- if (player == null) {
- return false;
- }
- if (player.getCurrentEquippedItem() == null) {
- return false;
- }
- if (!this.isItemStackUsable(player.getCurrentEquippedItem())) {
- return false;
- }
- final Interface_ToolStats tStats = this.getToolStats(player.getCurrentEquippedItem());
- return tStats != null && tStats.isWrench();
+ public float getDigSpeed(ItemStack aStack, Block aBlock, int aMetaData) {
+ if (!isItemStackUsable(aStack)) return 0.0F;
+ IToolStats tStats = getToolStats(aStack);
+ if (tStats == null || Math.max(0, getHarvestLevel(aStack, "")) < aBlock.getHarvestLevel(aMetaData)) return 0.0F;
+ return tStats.isMinableBlock(aBlock, (byte) aMetaData) ? Math.max(Float.MIN_NORMAL, tStats.getSpeedMultiplier() * getPrimaryMaterial(aStack).mToolSpeed) : 0.0F;
}
@Override
- public short getChargedMetaData(final ItemStack aStack) {
- return (short) (aStack.getItemDamage() - aStack.getItemDamage() % 2);
+ public boolean onBlockDestroyed(ItemStack aStack, World aWorld, Block aBlock, int aX, int aY, int aZ, EntityLivingBase aPlayer) {
+ if (!isItemStackUsable(aStack)) return false;
+ IToolStats tStats = getToolStats(aStack);
+ if (tStats == null) return false;
+ GT_Utility.doSoundAtClient(tStats.getMiningSound(), 1, 1.0F);
+ doDamage(aStack, (int) Math.max(1, aBlock.getBlockHardness(aWorld, aX, aY, aZ) * tStats.getToolDamagePerBlockBreak()));
+ return getDigSpeed(aStack, aBlock, aWorld.getBlockMetadata(aX, aY, aZ)) > 0.0F;
}
- private ItemStack getContainerItem(ItemStack aStack, final boolean playSound) {
- if (!this.isItemStackUsable(aStack)) {
- return null;
- }
+ private ItemStack getContainerItem(ItemStack aStack, boolean playSound) {
+ if (!isItemStackUsable(aStack)) return null;
aStack = GT_Utility.copyAmount(1, aStack);
- final IToolStats tStats = this.getToolStats(aStack);
- if (tStats == null) {
- return null;
- }
- this.doDamage(aStack, tStats.getToolDamagePerContainerCraft());
+ IToolStats tStats = getToolStats(aStack);
+ if (tStats == null) return null;
+ doDamage(aStack, tStats.getToolDamagePerContainerCraft());
aStack = aStack.stackSize > 0 ? aStack : null;
if (playSound) {
- // String sound = (aStack == null) ? tStats.getBreakingSound() :
- // tStats.getCraftingSound();
- // GT_Utility.doSoundAtClient(sound, 1, 1.0F);
+ //String sound = (aStack == null) ? tStats.getBreakingSound() : tStats.getCraftingSound();
+ //GT_Utility.doSoundAtClient(sound, 1, 1.0F);
}
return aStack;
}
@Override
- public float getDigSpeed(final ItemStack aStack, final Block aBlock, final int aMetaData) {
- if (!this.isItemStackUsable(aStack)) {
- return 0.0F;
- }
- final IToolStats tStats = this.getToolStats(aStack);
- if (tStats == null || Math.max(0, this.getHarvestLevel(aStack, "")) < aBlock.getHarvestLevel(aMetaData)) {
- return 0.0F;
- }
- return tStats.isMinableBlock(aBlock, (byte) aMetaData)
- ? Math.max(Float.MIN_NORMAL,
- tStats.getSpeedMultiplier() * GT_MetaGenerated_Tool.getPrimaryMaterial(aStack).mToolSpeed)
- : 0.0F;
+ public Interface_ToolStats getToolStats(ItemStack aStack) {
+ isItemStackUsable(aStack);
+ return getToolStatsInternal(aStack);
+ }
+
+ private Interface_ToolStats getToolStatsInternal(ItemStack aStack) {
+ return (Interface_ToolStats) (aStack == null ? null : mToolStats.get((short) aStack.getItemDamage()));
}
@Override
- public Long[] getElectricStats(final ItemStack aStack) {
- NBTTagCompound aNBT = aStack.getTagCompound();
- if (aNBT != null) {
- aNBT = aNBT.getCompoundTag("GT.ToolStats");
- if (aNBT != null && aNBT.getBoolean("Electric")) {
- return new Long[] {
- aNBT.getLong("MaxCharge"), aNBT.getLong("Voltage"), aNBT.getLong("Tier"),
- aNBT.getLong("SpecialData")
- };
- }
- }
- return null;
+ public boolean canWhack(EntityPlayer aPlayer, ItemStack aStack, int aX, int aY, int aZ) {
+ if (!isItemStackUsable(aStack)) return false;
+ IToolStats tStats = getToolStats(aStack);
+ return tStats != null && tStats.isCrowbar();
}
@Override
- public short getEmptyMetaData(final ItemStack aStack) {
- final NBTTagCompound aNBT = aStack.getTagCompound();
- if (aNBT != null) {
- aNBT.removeTag("ench");
- }
- return (short) (aStack.getItemDamage() + 1 - aStack.getItemDamage() % 2);
+ public void onWhack(EntityPlayer aPlayer, ItemStack aStack, int aX, int aY, int aZ) {
+ IToolStats tStats = getToolStats(aStack);
+ if (tStats != null) doDamage(aStack, tStats.getToolDamagePerEntityAttack());
}
@Override
- public Long[] getFluidContainerStats(final ItemStack aStack) {
- return null;
+ public boolean canWrench(EntityPlayer player, int x, int y, int z) {
+ //System.out.println("canWrench");
+ if(player==null)return false;
+ if(player.getCurrentEquippedItem()==null)return false;
+ if (!isItemStackUsable(player.getCurrentEquippedItem())) return false;
+ Interface_ToolStats tStats = getToolStats(player.getCurrentEquippedItem());
+ return tStats != null && tStats.isWrench();
}
@Override
- public boolean getIsRepairable(final ItemStack aStack, final ItemStack aMaterial) {
- return false;
+ public void wrenchUsed(EntityPlayer player, int x, int y, int z) {
+ if(player==null)return;
+ if(player.getCurrentEquippedItem()==null)return;
+ IToolStats tStats = getToolStats(player.getCurrentEquippedItem());
+ if (tStats != null) doDamage(player.getCurrentEquippedItem(), tStats.getToolDamagePerEntityAttack());
}
@Override
- public int getItemEnchantability() {
- return 0;
+ public boolean canLink(EntityPlayer aPlayer, ItemStack aStack, EntityMinecart cart) {
+ if (!isItemStackUsable(aStack)) return false;
+ IToolStats tStats = getToolStats(aStack);
+ return tStats != null && tStats.isCrowbar();
}
@Override
- public float getToolCombatDamage(final ItemStack aStack) {
- final IToolStats tStats = this.getToolStats(aStack);
- if (tStats == null) {
- return 0;
- }
- return tStats.getBaseDamage() + GT_MetaGenerated_Tool.getPrimaryMaterial(aStack).mToolQuality;
+ public void onLink(EntityPlayer aPlayer, ItemStack aStack, EntityMinecart cart) {
+ IToolStats tStats = getToolStats(aStack);
+ if (tStats != null) doDamage(aStack, tStats.getToolDamagePerEntityAttack());
}
@Override
- public Interface_ToolStats getToolStats(final ItemStack aStack) {
- this.isItemStackUsable(aStack);
- return this.getToolStatsInternal(aStack);
+ public boolean canBoost(EntityPlayer aPlayer, ItemStack aStack, EntityMinecart cart) {
+ if (!isItemStackUsable(aStack)) return false;
+ IToolStats tStats = getToolStats(aStack);
+ return tStats != null && tStats.isCrowbar();
}
- private Interface_ToolStats getToolStatsInternal(final ItemStack aStack) {
- return (Interface_ToolStats) (aStack == null ? null : this.mToolStats.get((short) aStack.getItemDamage()));
+ @Override
+ public void onBoost(EntityPlayer aPlayer, ItemStack aStack, EntityMinecart cart) {
+ IToolStats tStats = getToolStats(aStack);
+ if (tStats != null) doDamage(aStack, tStats.getToolDamagePerEntityAttack());
}
@Override
- public boolean isBookEnchantable(final ItemStack aStack, final ItemStack aBook) {
- return false;
+ public void onCreated(ItemStack aStack, World aWorld, EntityPlayer aPlayer) {
+ IToolStats tStats = getToolStats(aStack);
+ if (tStats != null && aPlayer != null) tStats.onToolCrafted(aStack, aPlayer);
+ super.onCreated(aStack, aWorld, aPlayer);
}
@Override
@@ -369,238 +329,88 @@ public abstract class Gregtech_MetaTool extends GT_MetaGenerated_Tool
}
@Override
- public boolean isItemStackUsable(final ItemStack aStack) {
- final IToolStats tStats = this.getToolStatsInternal(aStack);
+ public boolean isItemStackUsable(ItemStack aStack) {
+ IToolStats tStats = getToolStatsInternal(aStack);
if (aStack.getItemDamage() % 2 == 1 || tStats == null) {
- final NBTTagCompound aNBT = aStack.getTagCompound();
- if (aNBT != null) {
- aNBT.removeTag("ench");
- }
+ NBTTagCompound aNBT = aStack.getTagCompound();
+ if (aNBT != null) aNBT.removeTag("ench");
return false;
}
- final Materials aMaterial = GT_MetaGenerated_Tool.getPrimaryMaterial(aStack);
- final HashMap<Integer, Integer> tMap = new HashMap<Integer, Integer>(),
- tResult = new HashMap<Integer, Integer>();
+ Materials aMaterial = getPrimaryMaterial(aStack);
+ HashMap<Integer, Integer> tMap = new HashMap<Integer, Integer>(), tResult = new HashMap<Integer, Integer>();
if (aMaterial.mEnchantmentTools != null) {
tMap.put(aMaterial.mEnchantmentTools.effectId, (int) aMaterial.mEnchantmentToolsLevel);
- if (aMaterial.mEnchantmentTools == Enchantment.fortune) {
+ if (aMaterial.mEnchantmentTools == Enchantment.fortune)
tMap.put(Enchantment.looting.effectId, (int) aMaterial.mEnchantmentToolsLevel);
- }
- if (aMaterial.mEnchantmentTools == Enchantment.knockback) {
+ if (aMaterial.mEnchantmentTools == Enchantment.knockback)
tMap.put(Enchantment.power.effectId, (int) aMaterial.mEnchantmentToolsLevel);
- }
- if (aMaterial.mEnchantmentTools == Enchantment.fireAspect) {
+ if (aMaterial.mEnchantmentTools == Enchantment.fireAspect)
tMap.put(Enchantment.flame.effectId, (int) aMaterial.mEnchantmentToolsLevel);
- }
}
- final Enchantment[] tEnchants = tStats.getEnchantments(aStack);
- final int[] tLevels = tStats.getEnchantmentLevels(aStack);
- for (int i = 0; i < tEnchants.length; i++) {
+ Enchantment[] tEnchants = tStats.getEnchantments(aStack);
+ int[] tLevels = tStats.getEnchantmentLevels(aStack);
+ for (int i = 0; i < tEnchants.length; i++)
if (tLevels[i] > 0) {
- final Integer tLevel = tMap.get(tEnchants[i].effectId);
- tMap.put(tEnchants[i].effectId,
- tLevel == null ? tLevels[i] : tLevel == tLevels[i] ? tLevel + 1 : Math.max(tLevel, tLevels[i]));
+ Integer tLevel = tMap.get(tEnchants[i].effectId);
+ tMap.put(tEnchants[i].effectId, tLevel == null ? tLevels[i] : tLevel == tLevels[i] ? tLevel + 1 : Math.max(tLevel, tLevels[i]));
}
- }
- for (final Entry<Integer, Integer> tEntry : tMap.entrySet()) {
- if (tEntry.getKey() == 33 || tEntry.getKey() == 20 && tEntry.getValue() > 2
- || tEntry.getKey() == Enchantment_Radioactivity.INSTANCE.effectId) {
+ for (Entry<Integer, Integer> tEntry : tMap.entrySet()) {
+ if (tEntry.getKey() == 33 || (tEntry.getKey() == 20 && tEntry.getValue() > 2) || tEntry.getKey() == Enchantment_Radioactivity.INSTANCE.effectId)
tResult.put(tEntry.getKey(), tEntry.getValue());
- }
- else {
+ else
switch (Enchantment.enchantmentsList[tEntry.getKey()].type) {
- case weapon:
- if (tStats.isWeapon()) {
- tResult.put(tEntry.getKey(), tEntry.getValue());
- }
- break;
- case all:
- tResult.put(tEntry.getKey(), tEntry.getValue());
- break;
- case armor:
- case armor_feet:
- case armor_head:
- case armor_legs:
- case armor_torso:
- break;
- case bow:
- if (tStats.isRangedWeapon()) {
- tResult.put(tEntry.getKey(), tEntry.getValue());
- }
- break;
- case breakable:
- break;
- case fishing_rod:
- break;
- case digger:
- if (tStats.isMiningTool()) {
- tResult.put(tEntry.getKey(), tEntry.getValue());
- }
- break;
+ case weapon:
+ if (tStats.isWeapon()) tResult.put(tEntry.getKey(), tEntry.getValue());
+ break;
+ case all:
+ tResult.put(tEntry.getKey(), tEntry.getValue());
+ break;
+ case armor:
+ case armor_feet:
+ case armor_head:
+ case armor_legs:
+ case armor_torso:
+ break;
+ case bow:
+ if (tStats.isRangedWeapon()) tResult.put(tEntry.getKey(), tEntry.getValue());
+ break;
+ case breakable:
+ break;
+ case fishing_rod:
+ break;
+ case digger:
+ if (tStats.isMiningTool()) tResult.put(tEntry.getKey(), tEntry.getValue());
+ break;
}
- }
}
EnchantmentHelper.setEnchantments(tResult, aStack);
return true;
}
@Override
- public boolean onBlockDestroyed(final ItemStack aStack, final World aWorld, final Block aBlock, final int aX,
- final int aY, final int aZ, final EntityLivingBase aPlayer) {
- if (!this.isItemStackUsable(aStack)) {
- return false;
- }
- final IToolStats tStats = this.getToolStats(aStack);
- if (tStats == null) {
- return false;
- }
- GT_Utility.doSoundAtClient(tStats.getMiningSound(), 1, 1.0F);
- this.doDamage(aStack,
- (int) Math.max(1, aBlock.getBlockHardness(aWorld, aX, aY, aZ) * tStats.getToolDamagePerBlockBreak()));
- return this.getDigSpeed(aStack, aBlock, aWorld.getBlockMetadata(aX, aY, aZ)) > 0.0F;
- }
-
- @Override
- public void onBoost(final EntityPlayer aPlayer, final ItemStack aStack, final EntityMinecart cart) {
- final IToolStats tStats = this.getToolStats(aStack);
- if (tStats != null) {
- this.doDamage(aStack, tStats.getToolDamagePerEntityAttack());
- }
+ public short getChargedMetaData(ItemStack aStack) {
+ return (short) (aStack.getItemDamage() - (aStack.getItemDamage() % 2));
}
@Override
- public void onCreated(final ItemStack aStack, final World aWorld, final EntityPlayer aPlayer) {
- final IToolStats tStats = this.getToolStats(aStack);
- if (tStats != null && aPlayer != null) {
- tStats.onToolCrafted(aStack, aPlayer);
- }
- super.onCreated(aStack, aWorld, aPlayer);
- }
-
- /**
- * Called by the Block Harvesting Event within the GT_Proxy
- */
- @Override
- public void onHarvestBlockEvent(final ArrayList<ItemStack> aDrops, final ItemStack aStack,
- final EntityPlayer aPlayer, final Block aBlock, final int aX, final int aY, final int aZ,
- final byte aMetaData, final int aFortune, final boolean aSilkTouch,
- final BlockEvent.HarvestDropsEvent aEvent) {
- final IToolStats tStats = this.getToolStats(aStack);
- if (this.isItemStackUsable(aStack) && this.getDigSpeed(aStack, aBlock, aMetaData) > 0.0F) {
- this.doDamage(aStack, tStats.convertBlockDrops(aDrops, aStack, aPlayer, aBlock, aX, aY, aZ, aMetaData,
- aFortune, aSilkTouch, aEvent) * tStats.getToolDamagePerDropConversion());
- }
- }
-
- @Override
- public ItemStack onItemRightClick(final ItemStack aStack, final World aWorld, final EntityPlayer aPlayer) {
- final IToolStats tStats = this.getToolStats(aStack);
- if (tStats != null && tStats.canBlock()) {
- aPlayer.setItemInUse(aStack, 72000);
- }
- return super.onItemRightClick(aStack, aWorld, aPlayer);
- }
-
- @Override
- public boolean onLeftClickEntity(final ItemStack aStack, final EntityPlayer aPlayer, final Entity aEntity) {
- final IToolStats tStats = this.getToolStats(aStack);
- if (tStats == null || !this.isItemStackUsable(aStack)) {
- return true;
- }
- GT_Utility.doSoundAtClient(tStats.getEntityHitSound(), 1, 1.0F);
- if (super.onLeftClickEntity(aStack, aPlayer, aEntity)) {
- return true;
- }
- if (aEntity.canAttackWithItem() && !aEntity.hitByEntity(aPlayer)) {
- final float tMagicDamage = tStats
- .getMagicDamageAgainstEntity(
- aEntity instanceof EntityLivingBase ? EnchantmentHelper
- .getEnchantmentModifierLiving(aPlayer, (EntityLivingBase) aEntity) : 0.0F,
- aEntity, aStack, aPlayer);
- float tDamage = tStats.getNormalDamageAgainstEntity(
- (float) aPlayer.getEntityAttribute(SharedMonsterAttributes.attackDamage).getAttributeValue()
- + this.getToolCombatDamage(aStack),
- aEntity, aStack, aPlayer);
- if (tDamage + tMagicDamage > 0.0F) {
- final boolean tCriticalHit = aPlayer.fallDistance > 0.0F && !aPlayer.onGround && !aPlayer.isOnLadder()
- && !aPlayer.isInWater() && !aPlayer.isPotionActive(Potion.blindness)
- && aPlayer.ridingEntity == null && aEntity instanceof EntityLivingBase;
- if (tCriticalHit && tDamage > 0.0F) {
- tDamage *= 1.5F;
- }
- tDamage += tMagicDamage;
- if (aEntity.attackEntityFrom(tStats.getDamageSource(aPlayer, aEntity), tDamage)) {
- if (aEntity instanceof EntityLivingBase) {
- aEntity.setFire(EnchantmentHelper.getFireAspectModifier(aPlayer) * 4);
- }
- final int tKnockcack = (aPlayer.isSprinting() ? 1 : 0) + (aEntity instanceof EntityLivingBase
- ? EnchantmentHelper.getKnockbackModifier(aPlayer, (EntityLivingBase) aEntity) : 0);
- if (tKnockcack > 0) {
- aEntity.addVelocity(
- -MathHelper.sin(aPlayer.rotationYaw * (float) Math.PI / 180.0F) * tKnockcack * 0.5F,
- 0.1D,
- MathHelper.cos(aPlayer.rotationYaw * (float) Math.PI / 180.0F) * tKnockcack * 0.5F);
- aPlayer.motionX *= 0.6D;
- aPlayer.motionZ *= 0.6D;
- aPlayer.setSprinting(false);
- }
- if (tCriticalHit) {
- aPlayer.onCriticalHit(aEntity);
- }
- if (tMagicDamage > 0.0F) {
- aPlayer.onEnchantmentCritical(aEntity);
- }
- if (tDamage >= 18.0F) {
- aPlayer.triggerAchievement(AchievementList.overkill);
- }
- aPlayer.setLastAttacker(aEntity);
- if (aEntity instanceof EntityLivingBase) {
- EnchantmentHelper.func_151384_a((EntityLivingBase) aEntity, aPlayer);
- }
- EnchantmentHelper.func_151385_b(aPlayer, aEntity);
- if (aEntity instanceof EntityLivingBase) {
- aPlayer.addStat(StatList.damageDealtStat, Math.round(tDamage * 10.0F));
- }
- aEntity.hurtResistantTime = Math.max(1,
- tStats.getHurtResistanceTime(aEntity.hurtResistantTime, aEntity));
- aPlayer.addExhaustion(0.3F);
- this.doDamage(aStack, tStats.getToolDamagePerEntityAttack());
- }
- }
- }
- if (aStack.stackSize <= 0) {
- aPlayer.destroyCurrentEquippedItem();
- }
- return true;
+ public short getEmptyMetaData(ItemStack aStack) {
+ NBTTagCompound aNBT = aStack.getTagCompound();
+ if (aNBT != null) aNBT.removeTag("ench");
+ return (short) (aStack.getItemDamage() + 1 - (aStack.getItemDamage() % 2));
}
@Override
- public void onLink(final EntityPlayer aPlayer, final ItemStack aStack, final EntityMinecart cart) {
- final IToolStats tStats = this.getToolStats(aStack);
- if (tStats != null) {
- this.doDamage(aStack, tStats.getToolDamagePerEntityAttack());
- }
+ public int getItemEnchantability() {
+ return 0;
}
@Override
- public void onWhack(final EntityPlayer aPlayer, final ItemStack aStack, final int aX, final int aY, final int aZ) {
- final IToolStats tStats = this.getToolStats(aStack);
- if (tStats != null) {
- this.doDamage(aStack, tStats.getToolDamagePerEntityAttack());
- }
+ public boolean isBookEnchantable(ItemStack aStack, ItemStack aBook) {
+ return false;
}
@Override
- public void wrenchUsed(final EntityPlayer player, final int x, final int y, final int z) {
- if (player == null) {
- return;
- }
- if (player.getCurrentEquippedItem() == null) {
- return;
- }
- final IToolStats tStats = this.getToolStats(player.getCurrentEquippedItem());
- if (tStats != null) {
- this.doDamage(player.getCurrentEquippedItem(), tStats.getToolDamagePerEntityAttack());
- }
+ public boolean getIsRepairable(ItemStack aStack, ItemStack aMaterial) {
+ return false;
}
} \ No newline at end of file
diff --git a/src/Java/gtPlusPlus/xmod/gregtech/api/items/tools/GT_MetaGenTool.java b/src/Java/gtPlusPlus/xmod/gregtech/api/items/tools/GT_MetaGenTool.java
index d47c5fe0fc..d1158c08c2 100644
--- a/src/Java/gtPlusPlus/xmod/gregtech/api/items/tools/GT_MetaGenTool.java
+++ b/src/Java/gtPlusPlus/xmod/gregtech/api/items/tools/GT_MetaGenTool.java
@@ -1,20 +1,28 @@
package gtPlusPlus.xmod.gregtech.api.items.tools;
-import java.util.*;
-import java.util.Map.Entry;
-
import gregtech.api.GregTech_API;
import gregtech.api.enchants.Enchantment_Radioactivity;
import gregtech.api.enums.Materials;
import gregtech.api.enums.TC_Aspects.TC_AspectStack;
import gregtech.api.interfaces.IToolStats;
import gregtech.api.items.GT_MetaGenerated_Tool;
-import gregtech.api.util.*;
+import gregtech.api.util.GT_LanguageManager;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.api.util.GT_OreDictUnificator;
+import gregtech.api.util.GT_Utility;
import gtPlusPlus.xmod.gregtech.api.interfaces.internal.Interface_ToolStats;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map.Entry;
+
import net.minecraft.block.Block;
import net.minecraft.enchantment.Enchantment;
import net.minecraft.enchantment.EnchantmentHelper;
-import net.minecraft.entity.*;
+import net.minecraft.entity.Entity;
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.entity.SharedMonsterAttributes;
import net.minecraft.entity.item.EntityMinecart;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
@@ -27,318 +35,328 @@ import net.minecraft.world.World;
import net.minecraftforge.event.world.BlockEvent;
/**
- * This is an example on how you can create a Tool ItemStack, in this case a
- * Bismuth Wrench:
- * GT_MetaGenerated_Tool.sInstances.get("gt.metatool.01").getToolWithStats(16,
- * 1, Materials.Bismuth, Materials.Bismuth, null);
+ * This is an example on how you can create a Tool ItemStack, in this case a Bismuth Wrench:
+ * GT_MetaGenerated_Tool.sInstances.get("gt.metatool.01").getToolWithStats(16, 1, Materials.Bismuth, Materials.Bismuth, null);
*/
public abstract class GT_MetaGenTool extends GT_MetaGenerated_Tool {
/**
- * All instances of this Item Class are listed here. This gets used to
- * register the Renderer to all Items of this Type, if
- * useStandardMetaItemRenderer() returns true.
+ * All instances of this Item Class are listed here.
+ * This gets used to register the Renderer to all Items of this Type, if useStandardMetaItemRenderer() returns true.
* <p/>
- * You can also use the unlocalized Name gotten from getUnlocalizedName() as
- * Key if you want to get a specific Item.
+ * You can also use the unlocalized Name gotten from getUnlocalizedName() as Key if you want to get a specific Item.
*/
- public static final HashMap<String, GT_MetaGenTool> sInstances = new HashMap<String, GT_MetaGenTool>();
+ public static final HashMap<String, GT_MetaGenTool> sInstances = new HashMap<String, GT_MetaGenTool>();
/* ---------- CONSTRUCTOR AND MEMBER VARIABLES ---------- */
- public static final Materials getPrimaryMaterialEx(final ItemStack aStack) {
+ public final HashMap<Short, IToolStats> mToolStats = new HashMap<Short, IToolStats>();
+
+ /**
+ * Creates the Item using these Parameters.
+ *
+ * @param aUnlocalized The Unlocalized Name of this Item.
+ */
+ public GT_MetaGenTool(String aUnlocalized) {
+ super(aUnlocalized);
+ GT_ModHandler.registerBoxableItemToToolBox(this);
+ setCreativeTab(GregTech_API.TAB_GREGTECH);
+ setMaxStackSize(1);
+ sInstances.put(getUnlocalizedName(), this);
+ }
+
+ /* ---------- FOR ADDING CUSTOM ITEMS INTO THE REMAINING 766 RANGE ---------- */
+
+ public static final Materials getPrimaryMaterialEx(ItemStack aStack) {
NBTTagCompound aNBT = aStack.getTagCompound();
if (aNBT != null) {
aNBT = aNBT.getCompoundTag("GT.ToolStats");
- if (aNBT != null) {
- return Materials.getRealMaterial(aNBT.getString("PrimaryMaterial"));
- }
+ if (aNBT != null) return Materials.getRealMaterial(aNBT.getString("PrimaryMaterial"));
}
return Materials._NULL;
}
- public static final Materials getSecondaryMaterialEx(final ItemStack aStack) {
+ public static final Materials getSecondaryMaterialEx(ItemStack aStack) {
NBTTagCompound aNBT = aStack.getTagCompound();
if (aNBT != null) {
aNBT = aNBT.getCompoundTag("GT.ToolStats");
- if (aNBT != null) {
- return Materials.getRealMaterial(aNBT.getString("SecondaryMaterial"));
- }
+ if (aNBT != null) return Materials.getRealMaterial(aNBT.getString("SecondaryMaterial"));
}
return Materials._NULL;
}
- /*
- * ---------- FOR ADDING CUSTOM ITEMS INTO THE REMAINING 766 RANGE
- * ----------
- */
-
- public final HashMap<Short, IToolStats> mToolStats = new HashMap<Short, IToolStats>();
-
- /**
- * Creates the Item using these Parameters.
- *
- * @param aUnlocalized
- * The Unlocalized Name of this Item.
- */
- public GT_MetaGenTool(final String aUnlocalized) {
- super(aUnlocalized);
- GT_ModHandler.registerBoxableItemToToolBox(this);
- this.setCreativeTab(GregTech_API.TAB_GREGTECH);
- this.setMaxStackSize(1);
- GT_MetaGenTool.sInstances.put(this.getUnlocalizedName(), this);
- }
-
/**
* This adds a Custom Item to the ending Range.
*
- * @param aID
- * The Id of the assigned Tool Class [0 - 32765] (only even
- * Numbers allowed! Uneven ID's are empty electric Items)
- * @param aEnglish
- * The Default Localized Name of the created Item
- * @param aToolTip
- * The Default ToolTip of the created Item, you can also insert
- * null for having no ToolTip
- * @param aToolStats
- * The Food Value of this Item. Can be null as well.
- * @param aOreDictNamesAndAspects
- * The OreDict Names you want to give the Item. Also used to
- * assign Thaumcraft Aspects.
- * @return An ItemStack containing the newly created Item, but without
- * specific Stats.
+ * @param aID The Id of the assigned Tool Class [0 - 32765] (only even Numbers allowed! Uneven ID's are empty electric Items)
+ * @param aEnglish The Default Localized Name of the created Item
+ * @param aToolTip The Default ToolTip of the created Item, you can also insert null for having no ToolTip
+ * @param aToolStats The Food Value of this Item. Can be null as well.
+ * @param aOreDictNamesAndAspects The OreDict Names you want to give the Item. Also used to assign Thaumcraft Aspects.
+ * @return An ItemStack containing the newly created Item, but without specific Stats.
*/
- public final ItemStack addToolEx(final int aID, final String aEnglish, String aToolTip, final IToolStats aToolStats,
- final Object... aOreDictNamesAndAspects) {
- if (aToolTip == null) {
- aToolTip = "";
- }
+ public final ItemStack addToolEx(int aID, String aEnglish, String aToolTip, IToolStats aToolStats, Object... aOreDictNamesAndAspects) {
+ if (aToolTip == null) aToolTip = "";
if (aID >= 0 && aID < 32766 && aID % 2 == 0) {
- GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + "." + aID + ".name", aEnglish);
- GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + "." + aID + ".tooltip", aToolTip);
- GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + "." + (aID + 1) + ".name",
- aEnglish + " (Empty)");
- GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + "." + (aID + 1) + ".tooltip",
- "You need to recharge it");
- this.mToolStats.put((short) aID, aToolStats);
- this.mToolStats.put((short) (aID + 1), aToolStats);
+ GT_LanguageManager.addStringLocalization(getUnlocalizedName() + "." + aID + ".name", aEnglish);
+ GT_LanguageManager.addStringLocalization(getUnlocalizedName() + "." + aID + ".tooltip", aToolTip);
+ GT_LanguageManager.addStringLocalization(getUnlocalizedName() + "." + (aID + 1) + ".name", aEnglish + " (Empty)");
+ GT_LanguageManager.addStringLocalization(getUnlocalizedName() + "." + (aID + 1) + ".tooltip", "You need to recharge it");
+ mToolStats.put((short) aID, aToolStats);
+ mToolStats.put((short) (aID + 1), aToolStats);
aToolStats.onStatsAddedToTool(this, aID);
- final ItemStack rStack = new ItemStack(this, 1, aID);
- final List<TC_AspectStack> tAspects = new ArrayList<TC_AspectStack>();
- for (final Object tOreDictNameOrAspect : aOreDictNamesAndAspects) {
- if (tOreDictNameOrAspect instanceof TC_AspectStack) {
+ ItemStack rStack = new ItemStack(this, 1, aID);
+ List<TC_AspectStack> tAspects = new ArrayList<TC_AspectStack>();
+ for (Object tOreDictNameOrAspect : aOreDictNamesAndAspects) {
+ if (tOreDictNameOrAspect instanceof TC_AspectStack)
((TC_AspectStack) tOreDictNameOrAspect).addToAspectList(tAspects);
- }
- else {
+ else
GT_OreDictUnificator.registerOre(tOreDictNameOrAspect, rStack);
- }
}
- if (GregTech_API.sThaumcraftCompat != null) {
+ if (GregTech_API.sThaumcraftCompat != null)
GregTech_API.sThaumcraftCompat.registerThaumcraftAspectsToItem(rStack, tAspects, false);
- }
return rStack;
}
return null;
}
- @Override
- public boolean canBoost(final EntityPlayer aPlayer, final ItemStack aStack, final EntityMinecart cart) {
- if (!this.isItemStackUsable(aStack)) {
- return false;
+ /**
+ * This Function gets an ItemStack Version of this Tool
+ *
+ * @param aToolID the ID of the Tool Class
+ * @param aAmount Amount of Items (well normally you only need 1)
+ * @param aPrimaryMaterial Primary Material of this Tool
+ * @param aSecondaryMaterial Secondary (Rod/Handle) Material of this Tool
+ * @param aElectricArray The Electric Stats of this Tool (or null if not electric)
+ */
+ public final ItemStack getToolWithStatsEx(int aToolID, int aAmount, Materials aPrimaryMaterial, Materials aSecondaryMaterial, long[] aElectricArray) {
+ ItemStack rStack = new ItemStack(this, aAmount, aToolID);
+ IToolStats tToolStats = getToolStats(rStack);
+ if (tToolStats != null) {
+ NBTTagCompound tMainNBT = new NBTTagCompound(), tToolNBT = new NBTTagCompound();
+ if (aPrimaryMaterial != null) {
+ tToolNBT.setString("PrimaryMaterial", aPrimaryMaterial.toString());
+ tToolNBT.setLong("MaxDamage", 100L * (long) (aPrimaryMaterial.mDurability * tToolStats.getMaxDurabilityMultiplier()));
+ }
+ if (aSecondaryMaterial != null) tToolNBT.setString("SecondaryMaterial", aSecondaryMaterial.toString());
+
+ if (aElectricArray != null) {
+ tToolNBT.setBoolean("Electric", true);
+ tToolNBT.setLong("MaxCharge", aElectricArray[0]);
+ tToolNBT.setLong("Voltage", aElectricArray[1]);
+ tToolNBT.setLong("Tier", aElectricArray[2]);
+ tToolNBT.setLong("SpecialData", aElectricArray[3]);
+ }
+
+ tMainNBT.setTag("GT.ToolStats", tToolNBT);
+ rStack.setTagCompound(tMainNBT);
}
- final IToolStats tStats = this.getToolStats(aStack);
- return tStats != null && tStats.isCrowbar();
+ isItemStackUsable(rStack);
+ return rStack;
+ }
+
+ /**
+ * Called by the Block Harvesting Event within the GT_Proxy
+ */
+ public void onHarvestBlockEvent(ArrayList<ItemStack> aDrops, ItemStack aStack, EntityPlayer aPlayer, Block aBlock, int aX, int aY, int aZ, byte aMetaData, int aFortune, boolean aSilkTouch, BlockEvent.HarvestDropsEvent aEvent) {
+ IToolStats tStats = getToolStats(aStack);
+ if (isItemStackUsable(aStack) && getDigSpeed(aStack, aBlock, aMetaData) > 0.0F)
+ doDamage(aStack, tStats.convertBlockDrops(aDrops, aStack, aPlayer, aBlock, aX, aY, aZ, aMetaData, aFortune, aSilkTouch, aEvent) * tStats.getToolDamagePerDropConversion());
}
@Override
- public boolean canLink(final EntityPlayer aPlayer, final ItemStack aStack, final EntityMinecart cart) {
- if (!this.isItemStackUsable(aStack)) {
- return false;
+ public boolean onLeftClickEntity(ItemStack aStack, EntityPlayer aPlayer, Entity aEntity) {
+ IToolStats tStats = getToolStats(aStack);
+ if (tStats == null || !isItemStackUsable(aStack)) return true;
+ GT_Utility.doSoundAtClient(tStats.getEntityHitSound(), 1, 1.0F);
+ if (super.onLeftClickEntity(aStack, aPlayer, aEntity)) return true;
+ if (aEntity.canAttackWithItem() && !aEntity.hitByEntity(aPlayer)) {
+ float tMagicDamage = tStats.getMagicDamageAgainstEntity(aEntity instanceof EntityLivingBase ? EnchantmentHelper.getEnchantmentModifierLiving(aPlayer, (EntityLivingBase) aEntity) : 0.0F, aEntity, aStack, aPlayer), tDamage = tStats.getNormalDamageAgainstEntity((float) aPlayer.getEntityAttribute(SharedMonsterAttributes.attackDamage).getAttributeValue() + getToolCombatDamage(aStack), aEntity, aStack, aPlayer);
+ if (tDamage + tMagicDamage > 0.0F) {
+ boolean tCriticalHit = aPlayer.fallDistance > 0.0F && !aPlayer.onGround && !aPlayer.isOnLadder() && !aPlayer.isInWater() && !aPlayer.isPotionActive(Potion.blindness) && aPlayer.ridingEntity == null && aEntity instanceof EntityLivingBase;
+ if (tCriticalHit && tDamage > 0.0F) tDamage *= 1.5F;
+ tDamage += tMagicDamage;
+ if (aEntity.attackEntityFrom(tStats.getDamageSource(aPlayer, aEntity), tDamage)) {
+ if (aEntity instanceof EntityLivingBase)
+ aEntity.setFire(EnchantmentHelper.getFireAspectModifier(aPlayer) * 4);
+ int tKnockcack = (aPlayer.isSprinting() ? 1 : 0) + (aEntity instanceof EntityLivingBase ? EnchantmentHelper.getKnockbackModifier(aPlayer, (EntityLivingBase) aEntity) : 0);
+ if (tKnockcack > 0) {
+ aEntity.addVelocity(-MathHelper.sin(aPlayer.rotationYaw * (float) Math.PI / 180.0F) * tKnockcack * 0.5F, 0.1D, MathHelper.cos(aPlayer.rotationYaw * (float) Math.PI / 180.0F) * tKnockcack * 0.5F);
+ aPlayer.motionX *= 0.6D;
+ aPlayer.motionZ *= 0.6D;
+ aPlayer.setSprinting(false);
+ }
+ if (tCriticalHit) aPlayer.onCriticalHit(aEntity);
+ if (tMagicDamage > 0.0F) aPlayer.onEnchantmentCritical(aEntity);
+ if (tDamage >= 18.0F) aPlayer.triggerAchievement(AchievementList.overkill);
+ aPlayer.setLastAttacker(aEntity);
+ if (aEntity instanceof EntityLivingBase)
+ EnchantmentHelper.func_151384_a((EntityLivingBase) aEntity, aPlayer);
+ EnchantmentHelper.func_151385_b(aPlayer, aEntity);
+ if (aEntity instanceof EntityLivingBase)
+ aPlayer.addStat(StatList.damageDealtStat, Math.round(tDamage * 10.0F));
+ aEntity.hurtResistantTime = Math.max(1, tStats.getHurtResistanceTime(aEntity.hurtResistantTime, aEntity));
+ aPlayer.addExhaustion(0.3F);
+ doDamage(aStack, tStats.getToolDamagePerEntityAttack());
+ }
+ }
}
- final IToolStats tStats = this.getToolStats(aStack);
- return tStats != null && tStats.isCrowbar();
+ if (aStack.stackSize <= 0) aPlayer.destroyCurrentEquippedItem();
+ return true;
}
- public boolean canUse(final ItemStack stack, final EntityPlayer player, final int x, final int y, final int z) {
- return this.canWrench(player, x, y, z);
+ @Override
+ public ItemStack onItemRightClick(ItemStack aStack, World aWorld, EntityPlayer aPlayer) {
+ IToolStats tStats = getToolStats(aStack);
+ if (tStats != null && tStats.canBlock()) aPlayer.setItemInUse(aStack, 72000);
+ return super.onItemRightClick(aStack, aWorld, aPlayer);
}
+
@Override
- public boolean canWhack(final EntityPlayer aPlayer, final ItemStack aStack, final int aX, final int aY,
- final int aZ) {
- if (!this.isItemStackUsable(aStack)) {
- return false;
- }
- final IToolStats tStats = this.getToolStats(aStack);
- return tStats != null && tStats.isCrowbar();
+ public Long[] getFluidContainerStats(ItemStack aStack) {
+ return null;
}
- public boolean canWrench(final EntityPlayer player, final int x, final int y, final int z) {
- System.out.println("canWrench");
- if (player == null) {
- return false;
- }
- if (player.getCurrentEquippedItem() == null) {
- return false;
- }
- if (!this.isItemStackUsable(player.getCurrentEquippedItem())) {
- return false;
+ @Override
+ public Long[] getElectricStats(ItemStack aStack) {
+ NBTTagCompound aNBT = aStack.getTagCompound();
+ if (aNBT != null) {
+ aNBT = aNBT.getCompoundTag("GT.ToolStats");
+ if (aNBT != null && aNBT.getBoolean("Electric"))
+ return new Long[]{aNBT.getLong("MaxCharge"), aNBT.getLong("Voltage"), aNBT.getLong("Tier"), aNBT.getLong("SpecialData")};
}
- final Interface_ToolStats tStats = this.getToolStats(player.getCurrentEquippedItem());
- return tStats != null && tStats.isWrench();
+ return null;
+ }
+
+ public float getToolCombatDamage(ItemStack aStack) {
+ IToolStats tStats = getToolStats(aStack);
+ if (tStats == null) return 0;
+ return tStats.getBaseDamage() + getPrimaryMaterial(aStack).mToolQuality;
}
@Override
- public short getChargedMetaData(final ItemStack aStack) {
- return (short) (aStack.getItemDamage() - aStack.getItemDamage() % 2);
+ public float getDigSpeed(ItemStack aStack, Block aBlock, int aMetaData) {
+ if (!isItemStackUsable(aStack)) return 0.0F;
+ IToolStats tStats = getToolStats(aStack);
+ if (tStats == null || Math.max(0, getHarvestLevel(aStack, "")) < aBlock.getHarvestLevel(aMetaData)) return 0.0F;
+ return tStats.isMinableBlock(aBlock, (byte) aMetaData) ? Math.max(Float.MIN_NORMAL, tStats.getSpeedMultiplier() * getPrimaryMaterial(aStack).mToolSpeed) : 0.0F;
}
- private ItemStack getContainerItem(ItemStack aStack, final boolean playSound) {
- if (!this.isItemStackUsable(aStack)) {
- return null;
- }
+ @Override
+ public boolean onBlockDestroyed(ItemStack aStack, World aWorld, Block aBlock, int aX, int aY, int aZ, EntityLivingBase aPlayer) {
+ if (!isItemStackUsable(aStack)) return false;
+ IToolStats tStats = getToolStats(aStack);
+ if (tStats == null) return false;
+ GT_Utility.doSoundAtClient(tStats.getMiningSound(), 1, 1.0F);
+ doDamage(aStack, (int) Math.max(1, aBlock.getBlockHardness(aWorld, aX, aY, aZ) * tStats.getToolDamagePerBlockBreak()));
+ return getDigSpeed(aStack, aBlock, aWorld.getBlockMetadata(aX, aY, aZ)) > 0.0F;
+ }
+
+ private ItemStack getContainerItem(ItemStack aStack, boolean playSound) {
+ if (!isItemStackUsable(aStack)) return null;
aStack = GT_Utility.copyAmount(1, aStack);
- final IToolStats tStats = this.getToolStats(aStack);
- if (tStats == null) {
- return null;
- }
- this.doDamage(aStack, tStats.getToolDamagePerContainerCraft());
+ IToolStats tStats = getToolStats(aStack);
+ if (tStats == null) return null;
+ doDamage(aStack, tStats.getToolDamagePerContainerCraft());
aStack = aStack.stackSize > 0 ? aStack : null;
if (playSound) {
- // String sound = (aStack == null) ? tStats.getBreakingSound() :
- // tStats.getCraftingSound();
- // GT_Utility.doSoundAtClient(sound, 1, 1.0F);
+ //String sound = (aStack == null) ? tStats.getBreakingSound() : tStats.getCraftingSound();
+ //GT_Utility.doSoundAtClient(sound, 1, 1.0F);
}
return aStack;
}
- @Override
- public float getDigSpeed(final ItemStack aStack, final Block aBlock, final int aMetaData) {
- if (!this.isItemStackUsable(aStack)) {
- return 0.0F;
- }
- final IToolStats tStats = this.getToolStats(aStack);
- if (tStats == null || Math.max(0, this.getHarvestLevel(aStack, "")) < aBlock.getHarvestLevel(aMetaData)) {
- return 0.0F;
- }
- return tStats.isMinableBlock(aBlock, (byte) aMetaData)
- ? Math.max(Float.MIN_NORMAL,
- tStats.getSpeedMultiplier() * GT_MetaGenerated_Tool.getPrimaryMaterial(aStack).mToolSpeed)
- : 0.0F;
+ public Interface_ToolStats getToolStats(ItemStack aStack) {
+ isItemStackUsable(aStack);
+ return getToolStatsInternal(aStack);
}
- @Override
- public Long[] getElectricStats(final ItemStack aStack) {
- NBTTagCompound aNBT = aStack.getTagCompound();
- if (aNBT != null) {
- aNBT = aNBT.getCompoundTag("GT.ToolStats");
- if (aNBT != null && aNBT.getBoolean("Electric")) {
- return new Long[] {
- aNBT.getLong("MaxCharge"), aNBT.getLong("Voltage"), aNBT.getLong("Tier"),
- aNBT.getLong("SpecialData")
- };
- }
- }
- return null;
+ private Interface_ToolStats getToolStatsInternal(ItemStack aStack) {
+ return (Interface_ToolStats) (aStack == null ? null : mToolStats.get((short) aStack.getItemDamage()));
}
@Override
- public short getEmptyMetaData(final ItemStack aStack) {
- final NBTTagCompound aNBT = aStack.getTagCompound();
- if (aNBT != null) {
- aNBT.removeTag("ench");
- }
- return (short) (aStack.getItemDamage() + 1 - aStack.getItemDamage() % 2);
+ public float getSaplingModifier(ItemStack aStack, World aWorld, EntityPlayer aPlayer, int aX, int aY, int aZ) {
+ IToolStats tStats = getToolStats(aStack);
+ return tStats != null && tStats.isGrafter() ? Math.min(100.0F, (1 + getHarvestLevel(aStack, "")) * 20.0F) : 0.0F;
}
@Override
- public Long[] getFluidContainerStats(final ItemStack aStack) {
- return null;
+ public boolean canWhack(EntityPlayer aPlayer, ItemStack aStack, int aX, int aY, int aZ) {
+ if (!isItemStackUsable(aStack)) return false;
+ IToolStats tStats = getToolStats(aStack);
+ return tStats != null && tStats.isCrowbar();
}
@Override
- public boolean getIsRepairable(final ItemStack aStack, final ItemStack aMaterial) {
- return false;
+ public void onWhack(EntityPlayer aPlayer, ItemStack aStack, int aX, int aY, int aZ) {
+ IToolStats tStats = getToolStats(aStack);
+ if (tStats != null) doDamage(aStack, tStats.getToolDamagePerEntityAttack());
}
- @Override
- public int getItemEnchantability() {
- return 0;
+ public boolean canWrench(EntityPlayer player, int x, int y, int z) {
+ System.out.println("canWrench");
+ if(player==null)return false;
+ if(player.getCurrentEquippedItem()==null)return false;
+ if (!isItemStackUsable(player.getCurrentEquippedItem())) return false;
+ Interface_ToolStats tStats = getToolStats(player.getCurrentEquippedItem());
+ return tStats != null && tStats.isWrench();
}
- @Override
- public float getSaplingModifier(final ItemStack aStack, final World aWorld, final EntityPlayer aPlayer,
- final int aX, final int aY, final int aZ) {
- final IToolStats tStats = this.getToolStats(aStack);
- return tStats != null && tStats.isGrafter() ? Math.min(100.0F, (1 + this.getHarvestLevel(aStack, "")) * 20.0F)
- : 0.0F;
+ public void wrenchUsed(EntityPlayer player, int x, int y, int z) {
+ if(player==null)return;
+ if(player.getCurrentEquippedItem()==null)return;
+ IToolStats tStats = getToolStats(player.getCurrentEquippedItem());
+ if (tStats != null) doDamage(player.getCurrentEquippedItem(), tStats.getToolDamagePerEntityAttack());
}
- @Override
- public float getToolCombatDamage(final ItemStack aStack) {
- final IToolStats tStats = this.getToolStats(aStack);
- if (tStats == null) {
- return 0;
- }
- return tStats.getBaseDamage() + GT_MetaGenerated_Tool.getPrimaryMaterial(aStack).mToolQuality;
+ public boolean canUse(ItemStack stack, EntityPlayer player, int x, int y, int z){
+ return canWrench(player, x, y, z);
}
- @Override
- public Interface_ToolStats getToolStats(final ItemStack aStack) {
- this.isItemStackUsable(aStack);
- return this.getToolStatsInternal(aStack);
+ public void used(ItemStack stack, EntityPlayer player, int x, int y, int z){
+ wrenchUsed(player, x, y, z);
}
- private Interface_ToolStats getToolStatsInternal(final ItemStack aStack) {
- return (Interface_ToolStats) (aStack == null ? null : this.mToolStats.get((short) aStack.getItemDamage()));
+ public boolean shouldHideFacades(ItemStack stack, EntityPlayer player) {
+ if(player==null)return false;
+ if(player.getCurrentEquippedItem()==null)return false;
+ if (!isItemStackUsable(player.getCurrentEquippedItem())) return false;
+ Interface_ToolStats tStats = getToolStats(player.getCurrentEquippedItem());
+ return tStats.isWrench();
}
- /**
- * This Function gets an ItemStack Version of this Tool
- *
- * @param aToolID
- * the ID of the Tool Class
- * @param aAmount
- * Amount of Items (well normally you only need 1)
- * @param aPrimaryMaterial
- * Primary Material of this Tool
- * @param aSecondaryMaterial
- * Secondary (Rod/Handle) Material of this Tool
- * @param aElectricArray
- * The Electric Stats of this Tool (or null if not electric)
- */
- public final ItemStack getToolWithStatsEx(final int aToolID, final int aAmount, final Materials aPrimaryMaterial,
- final Materials aSecondaryMaterial, final long[] aElectricArray) {
- final ItemStack rStack = new ItemStack(this, aAmount, aToolID);
- final IToolStats tToolStats = this.getToolStats(rStack);
- if (tToolStats != null) {
- final NBTTagCompound tMainNBT = new NBTTagCompound(), tToolNBT = new NBTTagCompound();
- if (aPrimaryMaterial != null) {
- tToolNBT.setString("PrimaryMaterial", aPrimaryMaterial.toString());
- tToolNBT.setLong("MaxDamage",
- 100L * (long) (aPrimaryMaterial.mDurability * tToolStats.getMaxDurabilityMultiplier()));
- }
- if (aSecondaryMaterial != null) {
- tToolNBT.setString("SecondaryMaterial", aSecondaryMaterial.toString());
- }
+ @Override
+ public boolean canLink(EntityPlayer aPlayer, ItemStack aStack, EntityMinecart cart) {
+ if (!isItemStackUsable(aStack)) return false;
+ IToolStats tStats = getToolStats(aStack);
+ return tStats != null && tStats.isCrowbar();
+ }
- if (aElectricArray != null) {
- tToolNBT.setBoolean("Electric", true);
- tToolNBT.setLong("MaxCharge", aElectricArray[0]);
- tToolNBT.setLong("Voltage", aElectricArray[1]);
- tToolNBT.setLong("Tier", aElectricArray[2]);
- tToolNBT.setLong("SpecialData", aElectricArray[3]);
- }
+ @Override
+ public void onLink(EntityPlayer aPlayer, ItemStack aStack, EntityMinecart cart) {
+ IToolStats tStats = getToolStats(aStack);
+ if (tStats != null) doDamage(aStack, tStats.getToolDamagePerEntityAttack());
+ }
- tMainNBT.setTag("GT.ToolStats", tToolNBT);
- rStack.setTagCompound(tMainNBT);
- }
- this.isItemStackUsable(rStack);
- return rStack;
+ @Override
+ public boolean canBoost(EntityPlayer aPlayer, ItemStack aStack, EntityMinecart cart) {
+ if (!isItemStackUsable(aStack)) return false;
+ IToolStats tStats = getToolStats(aStack);
+ return tStats != null && tStats.isCrowbar();
}
@Override
- public boolean isBookEnchantable(final ItemStack aStack, final ItemStack aBook) {
- return false;
+ public void onBoost(EntityPlayer aPlayer, ItemStack aStack, EntityMinecart cart) {
+ IToolStats tStats = getToolStats(aStack);
+ if (tStats != null) doDamage(aStack, tStats.getToolDamagePerEntityAttack());
+ }
+
+ @Override
+ public void onCreated(ItemStack aStack, World aWorld, EntityPlayer aPlayer) {
+ IToolStats tStats = getToolStats(aStack);
+ if (tStats != null && aPlayer != null) tStats.onToolCrafted(aStack, aPlayer);
+ super.onCreated(aStack, aWorld, aPlayer);
}
@Override
@@ -347,255 +365,88 @@ public abstract class GT_MetaGenTool extends GT_MetaGenerated_Tool {
}
@Override
- public boolean isItemStackUsable(final ItemStack aStack) {
- final IToolStats tStats = this.getToolStatsInternal(aStack);
+ public boolean isItemStackUsable(ItemStack aStack) {
+ IToolStats tStats = getToolStatsInternal(aStack);
if (aStack.getItemDamage() % 2 == 1 || tStats == null) {
- final NBTTagCompound aNBT = aStack.getTagCompound();
- if (aNBT != null) {
- aNBT.removeTag("ench");
- }
+ NBTTagCompound aNBT = aStack.getTagCompound();
+ if (aNBT != null) aNBT.removeTag("ench");
return false;
}
- final Materials aMaterial = GT_MetaGenerated_Tool.getPrimaryMaterial(aStack);
- final HashMap<Integer, Integer> tMap = new HashMap<Integer, Integer>(),
- tResult = new HashMap<Integer, Integer>();
+ Materials aMaterial = getPrimaryMaterial(aStack);
+ HashMap<Integer, Integer> tMap = new HashMap<Integer, Integer>(), tResult = new HashMap<Integer, Integer>();
if (aMaterial.mEnchantmentTools != null) {
tMap.put(aMaterial.mEnchantmentTools.effectId, (int) aMaterial.mEnchantmentToolsLevel);
- if (aMaterial.mEnchantmentTools == Enchantment.fortune) {
+ if (aMaterial.mEnchantmentTools == Enchantment.fortune)
tMap.put(Enchantment.looting.effectId, (int) aMaterial.mEnchantmentToolsLevel);
- }
- if (aMaterial.mEnchantmentTools == Enchantment.knockback) {
+ if (aMaterial.mEnchantmentTools == Enchantment.knockback)
tMap.put(Enchantment.power.effectId, (int) aMaterial.mEnchantmentToolsLevel);
- }
- if (aMaterial.mEnchantmentTools == Enchantment.fireAspect) {
+ if (aMaterial.mEnchantmentTools == Enchantment.fireAspect)
tMap.put(Enchantment.flame.effectId, (int) aMaterial.mEnchantmentToolsLevel);
- }
}
- final Enchantment[] tEnchants = tStats.getEnchantments(aStack);
- final int[] tLevels = tStats.getEnchantmentLevels(aStack);
- for (int i = 0; i < tEnchants.length; i++) {
+ Enchantment[] tEnchants = tStats.getEnchantments(aStack);
+ int[] tLevels = tStats.getEnchantmentLevels(aStack);
+ for (int i = 0; i < tEnchants.length; i++)
if (tLevels[i] > 0) {
- final Integer tLevel = tMap.get(tEnchants[i].effectId);
- tMap.put(tEnchants[i].effectId,
- tLevel == null ? tLevels[i] : tLevel == tLevels[i] ? tLevel + 1 : Math.max(tLevel, tLevels[i]));
+ Integer tLevel = tMap.get(tEnchants[i].effectId);
+ tMap.put(tEnchants[i].effectId, tLevel == null ? tLevels[i] : tLevel == tLevels[i] ? tLevel + 1 : Math.max(tLevel, tLevels[i]));
}
- }
- for (final Entry<Integer, Integer> tEntry : tMap.entrySet()) {
- if (tEntry.getKey() == 33 || tEntry.getKey() == 20 && tEntry.getValue() > 2
- || tEntry.getKey() == Enchantment_Radioactivity.INSTANCE.effectId) {
+ for (Entry<Integer, Integer> tEntry : tMap.entrySet()) {
+ if (tEntry.getKey() == 33 || (tEntry.getKey() == 20 && tEntry.getValue() > 2) || tEntry.getKey() == Enchantment_Radioactivity.INSTANCE.effectId)
tResult.put(tEntry.getKey(), tEntry.getValue());
- }
- else {
+ else
switch (Enchantment.enchantmentsList[tEntry.getKey()].type) {
- case weapon:
- if (tStats.isWeapon()) {
- tResult.put(tEntry.getKey(), tEntry.getValue());
- }
- break;
- case all:
- tResult.put(tEntry.getKey(), tEntry.getValue());
- break;
- case armor:
- case armor_feet:
- case armor_head:
- case armor_legs:
- case armor_torso:
- break;
- case bow:
- if (tStats.isRangedWeapon()) {
- tResult.put(tEntry.getKey(), tEntry.getValue());
- }
- break;
- case breakable:
- break;
- case fishing_rod:
- break;
- case digger:
- if (tStats.isMiningTool()) {
- tResult.put(tEntry.getKey(), tEntry.getValue());
- }
- break;
+ case weapon:
+ if (tStats.isWeapon()) tResult.put(tEntry.getKey(), tEntry.getValue());
+ break;
+ case all:
+ tResult.put(tEntry.getKey(), tEntry.getValue());
+ break;
+ case armor:
+ case armor_feet:
+ case armor_head:
+ case armor_legs:
+ case armor_torso:
+ break;
+ case bow:
+ if (tStats.isRangedWeapon()) tResult.put(tEntry.getKey(), tEntry.getValue());
+ break;
+ case breakable:
+ break;
+ case fishing_rod:
+ break;
+ case digger:
+ if (tStats.isMiningTool()) tResult.put(tEntry.getKey(), tEntry.getValue());
+ break;
}
- }
}
EnchantmentHelper.setEnchantments(tResult, aStack);
return true;
}
@Override
- public boolean onBlockDestroyed(final ItemStack aStack, final World aWorld, final Block aBlock, final int aX,
- final int aY, final int aZ, final EntityLivingBase aPlayer) {
- if (!this.isItemStackUsable(aStack)) {
- return false;
- }
- final IToolStats tStats = this.getToolStats(aStack);
- if (tStats == null) {
- return false;
- }
- GT_Utility.doSoundAtClient(tStats.getMiningSound(), 1, 1.0F);
- this.doDamage(aStack,
- (int) Math.max(1, aBlock.getBlockHardness(aWorld, aX, aY, aZ) * tStats.getToolDamagePerBlockBreak()));
- return this.getDigSpeed(aStack, aBlock, aWorld.getBlockMetadata(aX, aY, aZ)) > 0.0F;
+ public short getChargedMetaData(ItemStack aStack) {
+ return (short) (aStack.getItemDamage() - (aStack.getItemDamage() % 2));
}
@Override
- public void onBoost(final EntityPlayer aPlayer, final ItemStack aStack, final EntityMinecart cart) {
- final IToolStats tStats = this.getToolStats(aStack);
- if (tStats != null) {
- this.doDamage(aStack, tStats.getToolDamagePerEntityAttack());
- }
- }
-
- @Override
- public void onCreated(final ItemStack aStack, final World aWorld, final EntityPlayer aPlayer) {
- final IToolStats tStats = this.getToolStats(aStack);
- if (tStats != null && aPlayer != null) {
- tStats.onToolCrafted(aStack, aPlayer);
- }
- super.onCreated(aStack, aWorld, aPlayer);
- }
-
- /**
- * Called by the Block Harvesting Event within the GT_Proxy
- */
- @Override
- public void onHarvestBlockEvent(final ArrayList<ItemStack> aDrops, final ItemStack aStack,
- final EntityPlayer aPlayer, final Block aBlock, final int aX, final int aY, final int aZ,
- final byte aMetaData, final int aFortune, final boolean aSilkTouch,
- final BlockEvent.HarvestDropsEvent aEvent) {
- final IToolStats tStats = this.getToolStats(aStack);
- if (this.isItemStackUsable(aStack) && this.getDigSpeed(aStack, aBlock, aMetaData) > 0.0F) {
- this.doDamage(aStack, tStats.convertBlockDrops(aDrops, aStack, aPlayer, aBlock, aX, aY, aZ, aMetaData,
- aFortune, aSilkTouch, aEvent) * tStats.getToolDamagePerDropConversion());
- }
- }
-
- @Override
- public ItemStack onItemRightClick(final ItemStack aStack, final World aWorld, final EntityPlayer aPlayer) {
- final IToolStats tStats = this.getToolStats(aStack);
- if (tStats != null && tStats.canBlock()) {
- aPlayer.setItemInUse(aStack, 72000);
- }
- return super.onItemRightClick(aStack, aWorld, aPlayer);
+ public short getEmptyMetaData(ItemStack aStack) {
+ NBTTagCompound aNBT = aStack.getTagCompound();
+ if (aNBT != null) aNBT.removeTag("ench");
+ return (short) (aStack.getItemDamage() + 1 - (aStack.getItemDamage() % 2));
}
@Override
- public boolean onLeftClickEntity(final ItemStack aStack, final EntityPlayer aPlayer, final Entity aEntity) {
- final IToolStats tStats = this.getToolStats(aStack);
- if (tStats == null || !this.isItemStackUsable(aStack)) {
- return true;
- }
- GT_Utility.doSoundAtClient(tStats.getEntityHitSound(), 1, 1.0F);
- if (super.onLeftClickEntity(aStack, aPlayer, aEntity)) {
- return true;
- }
- if (aEntity.canAttackWithItem() && !aEntity.hitByEntity(aPlayer)) {
- final float tMagicDamage = tStats
- .getMagicDamageAgainstEntity(
- aEntity instanceof EntityLivingBase ? EnchantmentHelper
- .getEnchantmentModifierLiving(aPlayer, (EntityLivingBase) aEntity) : 0.0F,
- aEntity, aStack, aPlayer);
- float tDamage = tStats.getNormalDamageAgainstEntity(
- (float) aPlayer.getEntityAttribute(SharedMonsterAttributes.attackDamage).getAttributeValue()
- + this.getToolCombatDamage(aStack),
- aEntity, aStack, aPlayer);
- if (tDamage + tMagicDamage > 0.0F) {
- final boolean tCriticalHit = aPlayer.fallDistance > 0.0F && !aPlayer.onGround && !aPlayer.isOnLadder()
- && !aPlayer.isInWater() && !aPlayer.isPotionActive(Potion.blindness)
- && aPlayer.ridingEntity == null && aEntity instanceof EntityLivingBase;
- if (tCriticalHit && tDamage > 0.0F) {
- tDamage *= 1.5F;
- }
- tDamage += tMagicDamage;
- if (aEntity.attackEntityFrom(tStats.getDamageSource(aPlayer, aEntity), tDamage)) {
- if (aEntity instanceof EntityLivingBase) {
- aEntity.setFire(EnchantmentHelper.getFireAspectModifier(aPlayer) * 4);
- }
- final int tKnockcack = (aPlayer.isSprinting() ? 1 : 0) + (aEntity instanceof EntityLivingBase
- ? EnchantmentHelper.getKnockbackModifier(aPlayer, (EntityLivingBase) aEntity) : 0);
- if (tKnockcack > 0) {
- aEntity.addVelocity(
- -MathHelper.sin(aPlayer.rotationYaw * (float) Math.PI / 180.0F) * tKnockcack * 0.5F,
- 0.1D,
- MathHelper.cos(aPlayer.rotationYaw * (float) Math.PI / 180.0F) * tKnockcack * 0.5F);
- aPlayer.motionX *= 0.6D;
- aPlayer.motionZ *= 0.6D;
- aPlayer.setSprinting(false);
- }
- if (tCriticalHit) {
- aPlayer.onCriticalHit(aEntity);
- }
- if (tMagicDamage > 0.0F) {
- aPlayer.onEnchantmentCritical(aEntity);
- }
- if (tDamage >= 18.0F) {
- aPlayer.triggerAchievement(AchievementList.overkill);
- }
- aPlayer.setLastAttacker(aEntity);
- if (aEntity instanceof EntityLivingBase) {
- EnchantmentHelper.func_151384_a((EntityLivingBase) aEntity, aPlayer);
- }
- EnchantmentHelper.func_151385_b(aPlayer, aEntity);
- if (aEntity instanceof EntityLivingBase) {
- aPlayer.addStat(StatList.damageDealtStat, Math.round(tDamage * 10.0F));
- }
- aEntity.hurtResistantTime = Math.max(1,
- tStats.getHurtResistanceTime(aEntity.hurtResistantTime, aEntity));
- aPlayer.addExhaustion(0.3F);
- this.doDamage(aStack, tStats.getToolDamagePerEntityAttack());
- }
- }
- }
- if (aStack.stackSize <= 0) {
- aPlayer.destroyCurrentEquippedItem();
- }
- return true;
+ public int getItemEnchantability() {
+ return 0;
}
@Override
- public void onLink(final EntityPlayer aPlayer, final ItemStack aStack, final EntityMinecart cart) {
- final IToolStats tStats = this.getToolStats(aStack);
- if (tStats != null) {
- this.doDamage(aStack, tStats.getToolDamagePerEntityAttack());
- }
+ public boolean isBookEnchantable(ItemStack aStack, ItemStack aBook) {
+ return false;
}
@Override
- public void onWhack(final EntityPlayer aPlayer, final ItemStack aStack, final int aX, final int aY, final int aZ) {
- final IToolStats tStats = this.getToolStats(aStack);
- if (tStats != null) {
- this.doDamage(aStack, tStats.getToolDamagePerEntityAttack());
- }
- }
-
- public boolean shouldHideFacades(final ItemStack stack, final EntityPlayer player) {
- if (player == null) {
- return false;
- }
- if (player.getCurrentEquippedItem() == null) {
- return false;
- }
- if (!this.isItemStackUsable(player.getCurrentEquippedItem())) {
- return false;
- }
- final Interface_ToolStats tStats = this.getToolStats(player.getCurrentEquippedItem());
- return tStats.isWrench();
- }
-
- public void used(final ItemStack stack, final EntityPlayer player, final int x, final int y, final int z) {
- this.wrenchUsed(player, x, y, z);
- }
-
- public void wrenchUsed(final EntityPlayer player, final int x, final int y, final int z) {
- if (player == null) {
- return;
- }
- if (player.getCurrentEquippedItem() == null) {
- return;
- }
- final IToolStats tStats = this.getToolStats(player.getCurrentEquippedItem());
- if (tStats != null) {
- this.doDamage(player.getCurrentEquippedItem(), tStats.getToolDamagePerEntityAttack());
- }
+ public boolean getIsRepairable(ItemStack aStack, ItemStack aMaterial) {
+ return false;
}
} \ No newline at end of file
diff --git a/src/Java/gtPlusPlus/xmod/gregtech/api/items/types/ToolType_Base.java b/src/Java/gtPlusPlus/xmod/gregtech/api/items/types/ToolType_Base.java
index fba7bdd0b6..ed663188d9 100644
--- a/src/Java/gtPlusPlus/xmod/gregtech/api/items/types/ToolType_Base.java
+++ b/src/Java/gtPlusPlus/xmod/gregtech/api/items/types/ToolType_Base.java
@@ -1,12 +1,15 @@
package gtPlusPlus.xmod.gregtech.api.items.types;
-import java.util.List;
-
import gregtech.api.enums.SubTag;
import gtPlusPlus.xmod.gregtech.api.interfaces.internal.Interface_ItemBehaviour;
import gtPlusPlus.xmod.gregtech.api.items.Gregtech_MetaItem_Base;
+
+import java.util.List;
+
import net.minecraft.block.BlockDispenser;
-import net.minecraft.dispenser.*;
+import net.minecraft.dispenser.BehaviorDefaultDispenseItem;
+import net.minecraft.dispenser.IBlockSource;
+import net.minecraft.dispenser.IPosition;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.player.EntityPlayer;
@@ -16,78 +19,66 @@ import net.minecraft.util.EnumFacing;
import net.minecraft.world.World;
public class ToolType_Base implements Interface_ItemBehaviour<Gregtech_MetaItem_Base> {
- @Override
- public boolean canDispense(final Gregtech_MetaItem_Base aItem, final IBlockSource aSource, final ItemStack aStack) {
- return false;
- }
+ @Override
+ public boolean onLeftClickEntity(Gregtech_MetaItem_Base aItem, ItemStack aStack, EntityPlayer aPlayer, Entity aEntity) {
+ return false;
+ }
- @Override
- public List<String> getAdditionalToolTips(final Gregtech_MetaItem_Base aItem, final List<String> aList,
- final ItemStack aStack) {
- return aList;
- }
+ @Override
+ public boolean onItemUse(Gregtech_MetaItem_Base aItem, ItemStack aStack, EntityPlayer aPlayer, World aWorld, int aX, int aY, int aZ, int aSide, float hitX, float hitY, float hitZ) {
+ return false;
+ }
- @Override
- public EntityArrow getProjectile(final Gregtech_MetaItem_Base aItem, final SubTag aProjectileType,
- final ItemStack aStack, final World aWorld, final double aX, final double aY, final double aZ) {
- return null;
- }
+ @Override
+ public boolean onItemUseFirst(Gregtech_MetaItem_Base aItem, ItemStack aStack, EntityPlayer aPlayer, World aWorld, int aX, int aY, int aZ, int aSide, float hitX, float hitY, float hitZ) {
+ return false;
+ }
- @Override
- public EntityArrow getProjectile(final Gregtech_MetaItem_Base aItem, final SubTag aProjectileType,
- final ItemStack aStack, final World aWorld, final EntityLivingBase aEntity, final float aSpeed) {
- return null;
- }
+ @Override
+ public ItemStack onItemRightClick(Gregtech_MetaItem_Base aItem, ItemStack aStack, World aWorld, EntityPlayer aPlayer) {
+ return aStack;
+ }
- @Override
- public boolean hasProjectile(final Gregtech_MetaItem_Base aItem, final SubTag aProjectileType,
- final ItemStack aStack) {
- return false;
- }
+ @Override
+ public List<String> getAdditionalToolTips(Gregtech_MetaItem_Base aItem, List<String> aList, ItemStack aStack) {
+ return aList;
+ }
- @Override
- public boolean isItemStackUsable(final Gregtech_MetaItem_Base aItem, final ItemStack aStack) {
- return true;
- }
+ @Override
+ public void onUpdate(Gregtech_MetaItem_Base aItem, ItemStack aStack, World aWorld, Entity aPlayer, int aTimer, boolean aIsInHand) {
+ }
- @Override
- public ItemStack onDispense(final Gregtech_MetaItem_Base aItem, final IBlockSource aSource,
- final ItemStack aStack) {
- final EnumFacing enumfacing = BlockDispenser.func_149937_b(aSource.getBlockMetadata());
- final IPosition iposition = BlockDispenser.func_149939_a(aSource);
- final ItemStack itemstack1 = aStack.splitStack(1);
- BehaviorDefaultDispenseItem.doDispense(aSource.getWorld(), itemstack1, 6, enumfacing, iposition);
- return aStack;
- }
+ @Override
+ public boolean isItemStackUsable(Gregtech_MetaItem_Base aItem, ItemStack aStack) {
+ return true;
+ }
- @Override
- public ItemStack onItemRightClick(final Gregtech_MetaItem_Base aItem, final ItemStack aStack, final World aWorld,
- final EntityPlayer aPlayer) {
- return aStack;
- }
+ @Override
+ public boolean canDispense(Gregtech_MetaItem_Base aItem, IBlockSource aSource, ItemStack aStack) {
+ return false;
+ }
- @Override
- public boolean onItemUse(final Gregtech_MetaItem_Base aItem, final ItemStack aStack, final EntityPlayer aPlayer,
- final World aWorld, final int aX, final int aY, final int aZ, final int aSide, final float hitX,
- final float hitY, final float hitZ) {
- return false;
- }
+ @Override
+ public ItemStack onDispense(Gregtech_MetaItem_Base aItem, IBlockSource aSource, ItemStack aStack) {
+ EnumFacing enumfacing = BlockDispenser.func_149937_b(aSource.getBlockMetadata());
+ IPosition iposition = BlockDispenser.func_149939_a(aSource);
+ ItemStack itemstack1 = aStack.splitStack(1);
+ BehaviorDefaultDispenseItem.doDispense(aSource.getWorld(), itemstack1, 6, enumfacing, iposition);
+ return aStack;
+ }
- @Override
- public boolean onItemUseFirst(final Gregtech_MetaItem_Base aItem, final ItemStack aStack,
- final EntityPlayer aPlayer, final World aWorld, final int aX, final int aY, final int aZ, final int aSide,
- final float hitX, final float hitY, final float hitZ) {
- return false;
- }
+ @Override
+ public boolean hasProjectile(Gregtech_MetaItem_Base aItem, SubTag aProjectileType, ItemStack aStack) {
+ return false;
+ }
- @Override
- public boolean onLeftClickEntity(final Gregtech_MetaItem_Base aItem, final ItemStack aStack,
- final EntityPlayer aPlayer, final Entity aEntity) {
- return false;
- }
+ @Override
+ public EntityArrow getProjectile(Gregtech_MetaItem_Base aItem, SubTag aProjectileType, ItemStack aStack, World aWorld, double aX, double aY, double aZ) {
+ return null;
+ }
- @Override
- public void onUpdate(final Gregtech_MetaItem_Base aItem, final ItemStack aStack, final World aWorld,
- final Entity aPlayer, final int aTimer, final boolean aIsInHand) {
- }
+ @Override
+ public EntityArrow getProjectile(Gregtech_MetaItem_Base aItem, SubTag aProjectileType, ItemStack aStack, World aWorld, EntityLivingBase aEntity, float aSpeed) {
+ return null;
+ }
}
diff --git a/src/Java/gtPlusPlus/xmod/gregtech/api/items/types/ToolType_HardHammer.java b/src/Java/gtPlusPlus/xmod/gregtech/api/items/types/ToolType_HardHammer.java
index 5f01b2e44d..c59b4fe37f 100644
--- a/src/Java/gtPlusPlus/xmod/gregtech/api/items/types/ToolType_HardHammer.java
+++ b/src/Java/gtPlusPlus/xmod/gregtech/api/items/types/ToolType_HardHammer.java
@@ -1,16 +1,20 @@
package gtPlusPlus.xmod.gregtech.api.items.types;
-import java.util.List;
-import java.util.Random;
-
import gregtech.api.GregTech_API;
import gregtech.api.enums.Materials;
import gregtech.api.items.GT_MetaBase_Item;
import gregtech.api.items.GT_MetaGenerated_Tool;
import gregtech.api.objects.ItemData;
-import gregtech.api.util.*;
+import gregtech.api.util.GT_LanguageManager;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.api.util.GT_OreDictUnificator;
+import gregtech.api.util.GT_Utility;
import gregtech.common.blocks.GT_Block_Ores;
import gregtech.common.blocks.GT_TileEntity_Ores;
+
+import java.util.List;
+import java.util.Random;
+
import net.minecraft.block.Block;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Blocks;
@@ -20,117 +24,104 @@ import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
import net.minecraftforge.fluids.IFluidBlock;
-public class ToolType_HardHammer extends ToolType_Base {
- private final int mVanillaCosts;
- private final int mEUCosts;
- private final String mTooltip = GT_LanguageManager.addStringLocalization("gt.behaviour.prospecting",
- "Usable for Prospecting");
+public class ToolType_HardHammer
+ extends ToolType_Base {
+ private final int mVanillaCosts;
+ private final int mEUCosts;
+ private final String mTooltip = GT_LanguageManager.addStringLocalization("gt.behaviour.prospecting", "Usable for Prospecting");
+
+ public ToolType_HardHammer(int aVanillaCosts, int aEUCosts) {
+ this.mVanillaCosts = aVanillaCosts;
+ this.mEUCosts = aEUCosts;
+ }
- public ToolType_HardHammer(final int aVanillaCosts, final int aEUCosts) {
- this.mVanillaCosts = aVanillaCosts;
- this.mEUCosts = aEUCosts;
- }
+ public boolean onItemUseFirst(GT_MetaBase_Item aItem, ItemStack aStack, EntityPlayer aPlayer, World aWorld, int aX, int aY, int aZ, int aSide, float hitX, float hitY, float hitZ) {
+ if (aWorld.isRemote) {
+ return false;
+ }
+ Block aBlock = aWorld.getBlock(aX, aY, aZ);
+ if (aBlock == null) {
+ return false;
+ }
+ byte aMeta = (byte) aWorld.getBlockMetadata(aX, aY, aZ);
- public List<String> getAdditionalToolTips(final GT_MetaBase_Item aItem, final List<String> aList,
- final ItemStack aStack) {
- aList.add(this.mTooltip);
- return aList;
- }
- public boolean onItemUseFirst(final GT_MetaBase_Item aItem, final ItemStack aStack, final EntityPlayer aPlayer,
- final World aWorld, final int aX, final int aY, final int aZ, final int aSide, final float hitX,
- final float hitY, final float hitZ) {
- if (aWorld.isRemote) {
- return false;
- }
- final Block aBlock = aWorld.getBlock(aX, aY, aZ);
- if (aBlock == null) {
- return false;
- }
- final byte aMeta = (byte) aWorld.getBlockMetadata(aX, aY, aZ);
+ ItemData tAssotiation = GT_OreDictUnificator.getAssociation(new ItemStack(aBlock, 1, aMeta));
+ if ((tAssotiation != null) && (tAssotiation.mPrefix.toString().startsWith("ore"))) {
+ GT_Utility.sendChatToPlayer(aPlayer, "This is " + tAssotiation.mMaterial.mMaterial.mDefaultLocalName + " Ore.");
+ GT_Utility.sendSoundToPlayers(aWorld, (String) GregTech_API.sSoundList.get(Integer.valueOf(1)), 1.0F, -1.0F, aX, aY, aZ);
+ return true;
+ }
+ if ((aBlock.isReplaceableOreGen(aWorld, aX, aY, aZ, Blocks.stone)) || (aBlock.isReplaceableOreGen(aWorld, aX, aY, aZ, GregTech_API.sBlockGranites)) || (aBlock.isReplaceableOreGen(aWorld, aX, aY, aZ, Blocks.netherrack)) || (aBlock.isReplaceableOreGen(aWorld, aX, aY, aZ, Blocks.end_stone))) {
+ if (GT_ModHandler.damageOrDechargeItem(aStack, this.mVanillaCosts, this.mEUCosts, aPlayer)) {
+ GT_Utility.sendSoundToPlayers(aWorld, (String) GregTech_API.sSoundList.get(Integer.valueOf(1)), 1.0F, -1.0F, aX, aY, aZ);
+ int tX = aX;
+ int tY = aY;
+ int tZ = aZ;
+ int tMetaID = 0;
+ int tQuality = (aItem instanceof GT_MetaGenerated_Tool) ? ((GT_MetaGenerated_Tool) aItem).getHarvestLevel(aStack, "") : 0;
- ItemData tAssotiation = GT_OreDictUnificator.getAssociation(new ItemStack(aBlock, 1, aMeta));
- if (tAssotiation != null && tAssotiation.mPrefix.toString().startsWith("ore")) {
- GT_Utility.sendChatToPlayer(aPlayer,
- "This is " + tAssotiation.mMaterial.mMaterial.mDefaultLocalName + " Ore.");
- GT_Utility.sendSoundToPlayers(aWorld, GregTech_API.sSoundList.get(Integer.valueOf(1)), 1.0F, -1.0F, aX, aY,
- aZ);
- return true;
- }
- if (aBlock.isReplaceableOreGen(aWorld, aX, aY, aZ, Blocks.stone)
- || aBlock.isReplaceableOreGen(aWorld, aX, aY, aZ, GregTech_API.sBlockGranites)
- || aBlock.isReplaceableOreGen(aWorld, aX, aY, aZ, Blocks.netherrack)
- || aBlock.isReplaceableOreGen(aWorld, aX, aY, aZ, Blocks.end_stone)) {
- if (GT_ModHandler.damageOrDechargeItem(aStack, this.mVanillaCosts, this.mEUCosts, aPlayer)) {
- GT_Utility.sendSoundToPlayers(aWorld, GregTech_API.sSoundList.get(Integer.valueOf(1)), 1.0F, -1.0F, aX,
- aY, aZ);
- int tX = aX;
- int tY = aY;
- int tZ = aZ;
- int tMetaID = 0;
- final int tQuality = aItem instanceof GT_MetaGenerated_Tool
- ? ((GT_MetaGenerated_Tool) aItem).getHarvestLevel(aStack, "") : 0;
+ int i = 0;
+ for (int j = 6 + tQuality; i < j; i++) {
+ tX -= ForgeDirection.getOrientation(aSide).offsetX;
+ tY -= ForgeDirection.getOrientation(aSide).offsetY;
+ tZ -= ForgeDirection.getOrientation(aSide).offsetZ;
- int i = 0;
- for (final int j = 6 + tQuality; i < j; i++) {
- tX -= ForgeDirection.getOrientation(aSide).offsetX;
- tY -= ForgeDirection.getOrientation(aSide).offsetY;
- tZ -= ForgeDirection.getOrientation(aSide).offsetZ;
+ Block tBlock = aWorld.getBlock(tX, tY, tZ);
+ if ((tBlock == Blocks.lava) || (tBlock == Blocks.flowing_lava)) {
+ GT_Utility.sendChatToPlayer(aPlayer, "There is Lava behind this Rock.");
+ break;
+ }
+ if ((tBlock == Blocks.water) || (tBlock == Blocks.flowing_water) || ((tBlock instanceof IFluidBlock))) {
+ GT_Utility.sendChatToPlayer(aPlayer, "There is a Liquid behind this Rock.");
+ break;
+ }
+ if ((tBlock == Blocks.monster_egg) || (!GT_Utility.hasBlockHitBox(aWorld, tX, tY, tZ))) {
+ GT_Utility.sendChatToPlayer(aPlayer, "There is an Air Pocket behind this Rock.");
+ break;
+ }
+ if (tBlock != aBlock) {
+ if (i >= 4) {
+ break;
+ }
+ GT_Utility.sendChatToPlayer(aPlayer, "Material is changing behind this Rock.");
+ break;
+ }
+ }
+ Random tRandom = new Random(aX ^ aY ^ aZ ^ aSide);
+ i = 0;
+ for (int j = 9 + 2 * tQuality; i < j; i++) {
+ tX = aX - 4 - tQuality + tRandom.nextInt(j);
+ tY = aY - 4 - tQuality + tRandom.nextInt(j);
+ tZ = aZ - 4 - tQuality + tRandom.nextInt(j);
+ Block tBlock = aWorld.getBlock(tX, tY, tZ);
+ if ((tBlock instanceof GT_Block_Ores)) {
+ TileEntity tTileEntity = aWorld.getTileEntity(tX, tY, tZ);
+ if ((tTileEntity instanceof GT_TileEntity_Ores)) {
+ Materials tMaterial = GregTech_API.sGeneratedMaterials[(((GT_TileEntity_Ores) tTileEntity).mMetaData % 1000)];
+ if ((tMaterial != null) && (tMaterial != Materials._NULL)) {
+ GT_Utility.sendChatToPlayer(aPlayer, "Found traces of " + tMaterial.mDefaultLocalName + " Ore.");
+ return true;
+ }
+ }
+ } else {
+ tMetaID = aWorld.getBlockMetadata(tX, tY, tZ);
+ tAssotiation = GT_OreDictUnificator.getAssociation(new ItemStack(tBlock, 1, tMetaID));
+ if ((tAssotiation != null) && (tAssotiation.mPrefix.toString().startsWith("ore"))) {
+ GT_Utility.sendChatToPlayer(aPlayer, "Found traces of " + tAssotiation.mMaterial.mMaterial.mDefaultLocalName + " Ore.");
+ return true;
+ }
+ }
+ }
+ GT_Utility.sendChatToPlayer(aPlayer, "No Ores found.");
+ }
+ return true;
+ }
+ return false;
+ }
- final Block tBlock = aWorld.getBlock(tX, tY, tZ);
- if (tBlock == Blocks.lava || tBlock == Blocks.flowing_lava) {
- GT_Utility.sendChatToPlayer(aPlayer, "There is Lava behind this Rock.");
- break;
- }
- if (tBlock == Blocks.water || tBlock == Blocks.flowing_water || tBlock instanceof IFluidBlock) {
- GT_Utility.sendChatToPlayer(aPlayer, "There is a Liquid behind this Rock.");
- break;
- }
- if (tBlock == Blocks.monster_egg || !GT_Utility.hasBlockHitBox(aWorld, tX, tY, tZ)) {
- GT_Utility.sendChatToPlayer(aPlayer, "There is an Air Pocket behind this Rock.");
- break;
- }
- if (tBlock != aBlock) {
- if (i >= 4) {
- break;
- }
- GT_Utility.sendChatToPlayer(aPlayer, "Material is changing behind this Rock.");
- break;
- }
- }
- final Random tRandom = new Random(aX ^ aY ^ aZ ^ aSide);
- i = 0;
- for (final int j = 9 + 2 * tQuality; i < j; i++) {
- tX = aX - 4 - tQuality + tRandom.nextInt(j);
- tY = aY - 4 - tQuality + tRandom.nextInt(j);
- tZ = aZ - 4 - tQuality + tRandom.nextInt(j);
- final Block tBlock = aWorld.getBlock(tX, tY, tZ);
- if (tBlock instanceof GT_Block_Ores) {
- final TileEntity tTileEntity = aWorld.getTileEntity(tX, tY, tZ);
- if (tTileEntity instanceof GT_TileEntity_Ores) {
- final Materials tMaterial = GregTech_API.sGeneratedMaterials[((GT_TileEntity_Ores) tTileEntity).mMetaData
- % 1000];
- if (tMaterial != null && tMaterial != Materials._NULL) {
- GT_Utility.sendChatToPlayer(aPlayer,
- "Found traces of " + tMaterial.mDefaultLocalName + " Ore.");
- return true;
- }
- }
- }
- else {
- tMetaID = aWorld.getBlockMetadata(tX, tY, tZ);
- tAssotiation = GT_OreDictUnificator.getAssociation(new ItemStack(tBlock, 1, tMetaID));
- if (tAssotiation != null && tAssotiation.mPrefix.toString().startsWith("ore")) {
- GT_Utility.sendChatToPlayer(aPlayer,
- "Found traces of " + tAssotiation.mMaterial.mMaterial.mDefaultLocalName + " Ore.");
- return true;
- }
- }
- }
- GT_Utility.sendChatToPlayer(aPlayer, "No Ores found.");
- }
- return true;
- }
- return false;
- }
+ public List<String> getAdditionalToolTips(GT_MetaBase_Item aItem, List<String> aList, ItemStack aStack) {
+ aList.add(this.mTooltip);
+ return aList;
+ }
}
diff --git a/src/Java/gtPlusPlus/xmod/gregtech/api/items/types/ToolType_Wrench.java b/src/Java/gtPlusPlus/xmod/gregtech/api/items/types/ToolType_Wrench.java
index 72bd33a596..9eb44d91d6 100644
--- a/src/Java/gtPlusPlus/xmod/gregtech/api/items/types/ToolType_Wrench.java
+++ b/src/Java/gtPlusPlus/xmod/gregtech/api/items/types/ToolType_Wrench.java
@@ -1,13 +1,16 @@
package gtPlusPlus.xmod.gregtech.api.items.types;
-import java.util.Arrays;
-import java.util.List;
-
import gregtech.api.GregTech_API;
import gregtech.api.items.GT_MetaBase_Item;
import gregtech.api.items.GT_MetaGenerated_Tool;
-import gregtech.api.util.*;
+import gregtech.api.util.GT_LanguageManager;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.api.util.GT_Utility;
import ic2.api.tile.IWrenchable;
+
+import java.util.Arrays;
+import java.util.List;
+
import net.minecraft.block.Block;
import net.minecraft.entity.item.EntityItem;
import net.minecraft.entity.player.EntityPlayer;
@@ -17,165 +20,130 @@ import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
-public class ToolType_Wrench extends ToolType_Base {
- private final int mCosts;
- private final String mTooltip = GT_LanguageManager.addStringLocalization("gt.behaviour.wrench",
- "Rotates Blocks on Rightclick");
+public class ToolType_Wrench
+ extends ToolType_Base {
+ private final int mCosts;
+ private final String mTooltip = GT_LanguageManager.addStringLocalization("gt.behaviour.wrench", "Rotates Blocks on Rightclick");
- public ToolType_Wrench(final int aCosts) {
- this.mCosts = aCosts;
- }
+ public ToolType_Wrench(int aCosts) {
+ this.mCosts = aCosts;
+ }
- public List<String> getAdditionalToolTips(final GT_MetaBase_Item aItem, final List<String> aList,
- final ItemStack aStack) {
- aList.add(this.mTooltip);
- return aList;
- }
+ public boolean onItemUseFirst(GT_MetaBase_Item aItem, ItemStack aStack, EntityPlayer aPlayer, World aWorld, int aX, int aY, int aZ, int aSide, float hitX, float hitY, float hitZ) {
+ if (aWorld.isRemote) {
+ return false;
+ }
+ Block aBlock = aWorld.getBlock(aX, aY, aZ);
+ if (aBlock == null) {
+ return false;
+ }
+ byte aMeta = (byte) aWorld.getBlockMetadata(aX, aY, aZ);
+ byte aTargetSide = GT_Utility.determineWrenchingSide((byte) aSide, hitX, hitY, hitZ);
+ TileEntity aTileEntity = aWorld.getTileEntity(aX, aY, aZ);
+ try {
+ if ((aTileEntity != null) && ((aTileEntity instanceof IWrenchable))) {
+ if (((IWrenchable) aTileEntity).wrenchCanSetFacing(aPlayer, aTargetSide)) {
+ if ((aPlayer.capabilities.isCreativeMode) || (((GT_MetaGenerated_Tool) aItem).doDamage(aStack, this.mCosts))) {
+ ((IWrenchable) aTileEntity).setFacing((short) aTargetSide);
+ GT_Utility.sendSoundToPlayers(aWorld, (String) GregTech_API.sSoundList.get(Integer.valueOf(100)), 1.0F, -1.0F, aX, aY, aZ);
+ }
+ return true;
+ }
+ if (((IWrenchable) aTileEntity).wrenchCanRemove(aPlayer)) {
+ int tDamage = ((IWrenchable) aTileEntity).getWrenchDropRate() < 1.0F ? 10 : 3;
+ if ((aPlayer.capabilities.isCreativeMode) || (((GT_MetaGenerated_Tool) aItem).doDamage(aStack, tDamage * this.mCosts))) {
+ ItemStack tOutput = ((IWrenchable) aTileEntity).getWrenchDrop(aPlayer);
+ for (ItemStack tStack : aBlock.getDrops(aWorld, aX, aY, aZ, aMeta, 0)) {
+ if (tOutput == null) {
+ aWorld.spawnEntityInWorld(new EntityItem(aWorld, aX + 0.5D, aY + 0.5D, aZ + 0.5D, tStack));
+ } else {
+ aWorld.spawnEntityInWorld(new EntityItem(aWorld, aX + 0.5D, aY + 0.5D, aZ + 0.5D, tOutput));
+ tOutput = null;
+ }
+ }
+ aWorld.setBlockToAir(aX, aY, aZ);
+ GT_Utility.sendSoundToPlayers(aWorld, (String) GregTech_API.sSoundList.get(Integer.valueOf(100)), 1.0F, -1.0F, aX, aY, aZ);
+ }
+ return true;
+ }
+ return true;
+ }
+ } catch (Throwable e) {
+ }
+ if ((aBlock == Blocks.log) || (aBlock == Blocks.log2) || (aBlock == Blocks.hay_block)) {
+ if ((aPlayer.capabilities.isCreativeMode) || (((GT_MetaGenerated_Tool) aItem).doDamage(aStack, this.mCosts))) {
+ aWorld.setBlockMetadataWithNotify(aX, aY, aZ, (aMeta + 4) % 12, 3);
+ GT_Utility.sendSoundToPlayers(aWorld, (String) GregTech_API.sSoundList.get(Integer.valueOf(100)), 1.0F, -1.0F, aX, aY, aZ);
+ }
+ return true;
+ }
+ if ((aBlock == Blocks.powered_repeater) || (aBlock == Blocks.unpowered_repeater)) {
+ if ((aPlayer.capabilities.isCreativeMode) || (((GT_MetaGenerated_Tool) aItem).doDamage(aStack, this.mCosts))) {
+ aWorld.setBlockMetadataWithNotify(aX, aY, aZ, aMeta / 4 * 4 + (aMeta % 4 + 1) % 4, 3);
+ GT_Utility.sendSoundToPlayers(aWorld, (String) GregTech_API.sSoundList.get(Integer.valueOf(100)), 1.0F, -1.0F, aX, aY, aZ);
+ }
+ return true;
+ }
+ if ((aBlock == Blocks.powered_comparator) || (aBlock == Blocks.unpowered_comparator)) {
+ if ((aPlayer.capabilities.isCreativeMode) || (((GT_MetaGenerated_Tool) aItem).doDamage(aStack, this.mCosts))) {
+ aWorld.setBlockMetadataWithNotify(aX, aY, aZ, aMeta / 4 * 4 + (aMeta % 4 + 1) % 4, 3);
+ GT_Utility.sendSoundToPlayers(aWorld, (String) GregTech_API.sSoundList.get(Integer.valueOf(100)), 1.0F, -1.0F, aX, aY, aZ);
+ }
+ return true;
+ }
+ if ((aBlock == Blocks.crafting_table) || (aBlock == Blocks.bookshelf)) {
+ if ((aPlayer.capabilities.isCreativeMode) || (((GT_MetaGenerated_Tool) aItem).doDamage(aStack, this.mCosts))) {
+ aWorld.spawnEntityInWorld(new EntityItem(aWorld, aX + 0.5D, aY + 0.5D, aZ + 0.5D, new ItemStack(aBlock, 1, aMeta)));
+ aWorld.setBlockToAir(aX, aY, aZ);
+ GT_Utility.sendSoundToPlayers(aWorld, (String) GregTech_API.sSoundList.get(Integer.valueOf(100)), 1.0F, -1.0F, aX, aY, aZ);
+ }
+ return true;
+ }
+ if (aMeta == aTargetSide) {
+ if ((aBlock == Blocks.pumpkin) || (aBlock == Blocks.lit_pumpkin) || (aBlock == Blocks.piston) || (aBlock == Blocks.sticky_piston) || (aBlock == Blocks.dispenser) || (aBlock == Blocks.dropper) || (aBlock == Blocks.furnace) || (aBlock == Blocks.lit_furnace) || (aBlock == Blocks.chest) || (aBlock == Blocks.trapped_chest) || (aBlock == Blocks.ender_chest) || (aBlock == Blocks.hopper)) {
+ if ((aPlayer.capabilities.isCreativeMode) || (((GT_MetaGenerated_Tool) aItem).doDamage(aStack, this.mCosts))) {
+ aWorld.spawnEntityInWorld(new EntityItem(aWorld, aX + 0.5D, aY + 0.5D, aZ + 0.5D, new ItemStack(aBlock, 1, 0)));
+ aWorld.setBlockToAir(aX, aY, aZ);
+ GT_Utility.sendSoundToPlayers(aWorld, (String) GregTech_API.sSoundList.get(Integer.valueOf(100)), 1.0F, -1.0F, aX, aY, aZ);
+ }
+ return true;
+ }
+ } else {
+ if ((aBlock == Blocks.piston) || (aBlock == Blocks.sticky_piston) || (aBlock == Blocks.dispenser) || (aBlock == Blocks.dropper)) {
+ if ((aMeta < 6) && ((aPlayer.capabilities.isCreativeMode) || (((GT_MetaGenerated_Tool) aItem).doDamage(aStack, this.mCosts)))) {
+ aWorld.setBlockMetadataWithNotify(aX, aY, aZ, aTargetSide, 3);
+ GT_Utility.sendSoundToPlayers(aWorld, (String) GregTech_API.sSoundList.get(Integer.valueOf(100)), 1.0F, -1.0F, aX, aY, aZ);
+ }
+ return true;
+ }
+ if ((aBlock == Blocks.pumpkin) || (aBlock == Blocks.lit_pumpkin) || (aBlock == Blocks.furnace) || (aBlock == Blocks.lit_furnace) || (aBlock == Blocks.chest) || (aBlock == Blocks.ender_chest) || (aBlock == Blocks.trapped_chest)) {
+ if ((aTargetSide > 1) && ((aPlayer.capabilities.isCreativeMode) || (((GT_MetaGenerated_Tool) aItem).doDamage(aStack, this.mCosts)))) {
+ aWorld.setBlockMetadataWithNotify(aX, aY, aZ, aTargetSide, 3);
+ GT_Utility.sendSoundToPlayers(aWorld, (String) GregTech_API.sSoundList.get(Integer.valueOf(100)), 1.0F, -1.0F, aX, aY, aZ);
+ }
+ return true;
+ }
+ if (aBlock == Blocks.hopper) {
+ if ((aTargetSide != 1) && ((aPlayer.capabilities.isCreativeMode) || (((GT_MetaGenerated_Tool) aItem).doDamage(aStack, this.mCosts)))) {
+ aWorld.setBlockMetadataWithNotify(aX, aY, aZ, aTargetSide, 3);
+ GT_Utility.sendSoundToPlayers(aWorld, (String) GregTech_API.sSoundList.get(Integer.valueOf(100)), 1.0F, -1.0F, aX, aY, aZ);
+ }
+ return true;
+ }
+ }
+ if ((Arrays.asList(aBlock.getValidRotations(aWorld, aX, aY, aZ)).contains(ForgeDirection.getOrientation(aTargetSide))) &&
+ ((aPlayer.capabilities.isCreativeMode) || (!GT_ModHandler.isElectricItem(aStack)) || (GT_ModHandler.canUseElectricItem(aStack, this.mCosts))) &&
+ (aBlock.rotateBlock(aWorld, aX, aY, aZ, ForgeDirection.getOrientation(aTargetSide)))) {
+ if (!aPlayer.capabilities.isCreativeMode) {
+ ((GT_MetaGenerated_Tool) aItem).doDamage(aStack, this.mCosts);
+ }
+ GT_Utility.sendSoundToPlayers(aWorld, (String) GregTech_API.sSoundList.get(Integer.valueOf(100)), 1.0F, -1.0F, aX, aY, aZ);
+ }
+ return false;
+ }
- public boolean onItemUseFirst(final GT_MetaBase_Item aItem, final ItemStack aStack, final EntityPlayer aPlayer,
- final World aWorld, final int aX, final int aY, final int aZ, final int aSide, final float hitX,
- final float hitY, final float hitZ) {
- if (aWorld.isRemote) {
- return false;
- }
- final Block aBlock = aWorld.getBlock(aX, aY, aZ);
- if (aBlock == null) {
- return false;
- }
- final byte aMeta = (byte) aWorld.getBlockMetadata(aX, aY, aZ);
- final byte aTargetSide = GT_Utility.determineWrenchingSide((byte) aSide, hitX, hitY, hitZ);
- final TileEntity aTileEntity = aWorld.getTileEntity(aX, aY, aZ);
- try {
- if (aTileEntity != null && aTileEntity instanceof IWrenchable) {
- if (((IWrenchable) aTileEntity).wrenchCanSetFacing(aPlayer, aTargetSide)) {
- if (aPlayer.capabilities.isCreativeMode
- || ((GT_MetaGenerated_Tool) aItem).doDamage(aStack, this.mCosts)) {
- ((IWrenchable) aTileEntity).setFacing(aTargetSide);
- GT_Utility.sendSoundToPlayers(aWorld, GregTech_API.sSoundList.get(Integer.valueOf(100)), 1.0F,
- -1.0F, aX, aY, aZ);
- }
- return true;
- }
- if (((IWrenchable) aTileEntity).wrenchCanRemove(aPlayer)) {
- final int tDamage = ((IWrenchable) aTileEntity).getWrenchDropRate() < 1.0F ? 10 : 3;
- if (aPlayer.capabilities.isCreativeMode
- || ((GT_MetaGenerated_Tool) aItem).doDamage(aStack, tDamage * this.mCosts)) {
- ItemStack tOutput = ((IWrenchable) aTileEntity).getWrenchDrop(aPlayer);
- for (final ItemStack tStack : aBlock.getDrops(aWorld, aX, aY, aZ, aMeta, 0)) {
- if (tOutput == null) {
- aWorld.spawnEntityInWorld(
- new EntityItem(aWorld, aX + 0.5D, aY + 0.5D, aZ + 0.5D, tStack));
- }
- else {
- aWorld.spawnEntityInWorld(
- new EntityItem(aWorld, aX + 0.5D, aY + 0.5D, aZ + 0.5D, tOutput));
- tOutput = null;
- }
- }
- aWorld.setBlockToAir(aX, aY, aZ);
- GT_Utility.sendSoundToPlayers(aWorld, GregTech_API.sSoundList.get(Integer.valueOf(100)), 1.0F,
- -1.0F, aX, aY, aZ);
- }
- return true;
- }
- return true;
- }
- }
- catch (final Throwable e) {
- }
- if (aBlock == Blocks.log || aBlock == Blocks.log2 || aBlock == Blocks.hay_block) {
- if (aPlayer.capabilities.isCreativeMode || ((GT_MetaGenerated_Tool) aItem).doDamage(aStack, this.mCosts)) {
- aWorld.setBlockMetadataWithNotify(aX, aY, aZ, (aMeta + 4) % 12, 3);
- GT_Utility.sendSoundToPlayers(aWorld, GregTech_API.sSoundList.get(Integer.valueOf(100)), 1.0F, -1.0F,
- aX, aY, aZ);
- }
- return true;
- }
- if (aBlock == Blocks.powered_repeater || aBlock == Blocks.unpowered_repeater) {
- if (aPlayer.capabilities.isCreativeMode || ((GT_MetaGenerated_Tool) aItem).doDamage(aStack, this.mCosts)) {
- aWorld.setBlockMetadataWithNotify(aX, aY, aZ, aMeta / 4 * 4 + (aMeta % 4 + 1) % 4, 3);
- GT_Utility.sendSoundToPlayers(aWorld, GregTech_API.sSoundList.get(Integer.valueOf(100)), 1.0F, -1.0F,
- aX, aY, aZ);
- }
- return true;
- }
- if (aBlock == Blocks.powered_comparator || aBlock == Blocks.unpowered_comparator) {
- if (aPlayer.capabilities.isCreativeMode || ((GT_MetaGenerated_Tool) aItem).doDamage(aStack, this.mCosts)) {
- aWorld.setBlockMetadataWithNotify(aX, aY, aZ, aMeta / 4 * 4 + (aMeta % 4 + 1) % 4, 3);
- GT_Utility.sendSoundToPlayers(aWorld, GregTech_API.sSoundList.get(Integer.valueOf(100)), 1.0F, -1.0F,
- aX, aY, aZ);
- }
- return true;
- }
- if (aBlock == Blocks.crafting_table || aBlock == Blocks.bookshelf) {
- if (aPlayer.capabilities.isCreativeMode || ((GT_MetaGenerated_Tool) aItem).doDamage(aStack, this.mCosts)) {
- aWorld.spawnEntityInWorld(
- new EntityItem(aWorld, aX + 0.5D, aY + 0.5D, aZ + 0.5D, new ItemStack(aBlock, 1, aMeta)));
- aWorld.setBlockToAir(aX, aY, aZ);
- GT_Utility.sendSoundToPlayers(aWorld, GregTech_API.sSoundList.get(Integer.valueOf(100)), 1.0F, -1.0F,
- aX, aY, aZ);
- }
- return true;
- }
- if (aMeta == aTargetSide) {
- if (aBlock == Blocks.pumpkin || aBlock == Blocks.lit_pumpkin || aBlock == Blocks.piston
- || aBlock == Blocks.sticky_piston || aBlock == Blocks.dispenser || aBlock == Blocks.dropper
- || aBlock == Blocks.furnace || aBlock == Blocks.lit_furnace || aBlock == Blocks.chest
- || aBlock == Blocks.trapped_chest || aBlock == Blocks.ender_chest || aBlock == Blocks.hopper) {
- if (aPlayer.capabilities.isCreativeMode
- || ((GT_MetaGenerated_Tool) aItem).doDamage(aStack, this.mCosts)) {
- aWorld.spawnEntityInWorld(
- new EntityItem(aWorld, aX + 0.5D, aY + 0.5D, aZ + 0.5D, new ItemStack(aBlock, 1, 0)));
- aWorld.setBlockToAir(aX, aY, aZ);
- GT_Utility.sendSoundToPlayers(aWorld, GregTech_API.sSoundList.get(Integer.valueOf(100)), 1.0F,
- -1.0F, aX, aY, aZ);
- }
- return true;
- }
- }
- else {
- if (aBlock == Blocks.piston || aBlock == Blocks.sticky_piston || aBlock == Blocks.dispenser
- || aBlock == Blocks.dropper) {
- if (aMeta < 6 && (aPlayer.capabilities.isCreativeMode
- || ((GT_MetaGenerated_Tool) aItem).doDamage(aStack, this.mCosts))) {
- aWorld.setBlockMetadataWithNotify(aX, aY, aZ, aTargetSide, 3);
- GT_Utility.sendSoundToPlayers(aWorld, GregTech_API.sSoundList.get(Integer.valueOf(100)), 1.0F,
- -1.0F, aX, aY, aZ);
- }
- return true;
- }
- if (aBlock == Blocks.pumpkin || aBlock == Blocks.lit_pumpkin || aBlock == Blocks.furnace
- || aBlock == Blocks.lit_furnace || aBlock == Blocks.chest || aBlock == Blocks.ender_chest
- || aBlock == Blocks.trapped_chest) {
- if (aTargetSide > 1 && (aPlayer.capabilities.isCreativeMode
- || ((GT_MetaGenerated_Tool) aItem).doDamage(aStack, this.mCosts))) {
- aWorld.setBlockMetadataWithNotify(aX, aY, aZ, aTargetSide, 3);
- GT_Utility.sendSoundToPlayers(aWorld, GregTech_API.sSoundList.get(Integer.valueOf(100)), 1.0F,
- -1.0F, aX, aY, aZ);
- }
- return true;
- }
- if (aBlock == Blocks.hopper) {
- if (aTargetSide != 1 && (aPlayer.capabilities.isCreativeMode
- || ((GT_MetaGenerated_Tool) aItem).doDamage(aStack, this.mCosts))) {
- aWorld.setBlockMetadataWithNotify(aX, aY, aZ, aTargetSide, 3);
- GT_Utility.sendSoundToPlayers(aWorld, GregTech_API.sSoundList.get(Integer.valueOf(100)), 1.0F,
- -1.0F, aX, aY, aZ);
- }
- return true;
- }
- }
- if (Arrays.asList(aBlock.getValidRotations(aWorld, aX, aY, aZ))
- .contains(ForgeDirection.getOrientation(aTargetSide))
- && (aPlayer.capabilities.isCreativeMode || !GT_ModHandler.isElectricItem(aStack)
- || GT_ModHandler.canUseElectricItem(aStack, this.mCosts))
- && aBlock.rotateBlock(aWorld, aX, aY, aZ, ForgeDirection.getOrientation(aTargetSide))) {
- if (!aPlayer.capabilities.isCreativeMode) {
- ((GT_MetaGenerated_Tool) aItem).doDamage(aStack, this.mCosts);
- }
- GT_Utility.sendSoundToPlayers(aWorld, GregTech_API.sSoundList.get(Integer.valueOf(100)), 1.0F, -1.0F, aX,
- aY, aZ);
- }
- return false;
- }
+ public List<String> getAdditionalToolTips(GT_MetaBase_Item aItem, List<String> aList, ItemStack aStack) {
+ aList.add(this.mTooltip);
+ return aList;
+ }
}