aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/gregtech
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/gregtech')
-rw-r--r--src/main/java/gregtech/api/enums/ToolModes.java18
-rw-r--r--src/main/java/gregtech/api/interfaces/IToolStats.java4
-rw-r--r--src/main/java/gregtech/api/interfaces/metatileentity/IMetaTileEntity.java11
-rw-r--r--src/main/java/gregtech/api/items/GT_MetaGenerated_Tool.java46
-rw-r--r--src/main/java/gregtech/api/metatileentity/BaseMetaPipeEntity.java11
-rw-r--r--src/main/java/gregtech/api/metatileentity/BaseMetaTileEntity.java9
-rw-r--r--src/main/java/gregtech/api/metatileentity/MetaPipeEntity.java38
-rw-r--r--src/main/java/gregtech/api/metatileentity/MetaTileEntity.java55
-rw-r--r--src/main/java/gregtech/api/multitileentity/base/MultiTileEntity.java63
-rw-r--r--src/main/java/gregtech/api/multitileentity/multiblock/base/Controller.java2
-rw-r--r--src/main/java/gregtech/api/multitileentity/multiblock/base/MultiBlockPart.java2
-rw-r--r--src/main/java/gregtech/api/recipe/RecipeMaps.java23
-rw-r--r--src/main/java/gregtech/api/util/GT_Utility.java18
-rw-r--r--src/main/java/gregtech/common/items/behaviors/Behaviour_Switch_Mode.java53
-rw-r--r--src/main/java/gregtech/common/tools/GT_Tool.java10
-rw-r--r--src/main/java/gregtech/common/tools/GT_Tool_Wrench.java12
16 files changed, 329 insertions, 46 deletions
diff --git a/src/main/java/gregtech/api/enums/ToolModes.java b/src/main/java/gregtech/api/enums/ToolModes.java
new file mode 100644
index 0000000000..2f849279a4
--- /dev/null
+++ b/src/main/java/gregtech/api/enums/ToolModes.java
@@ -0,0 +1,18 @@
+package gregtech.api.enums;
+
+public enum ToolModes {
+
+ REGULAR(0),
+ WRENCH_LINE(1);
+
+ private final byte modeValue;
+
+ ToolModes(int modeValue) {
+ this.modeValue = (byte) modeValue;
+ }
+
+ public byte get() {
+ return modeValue;
+ }
+
+}
diff --git a/src/main/java/gregtech/api/interfaces/IToolStats.java b/src/main/java/gregtech/api/interfaces/IToolStats.java
index c25056d1b1..ac17e327e3 100644
--- a/src/main/java/gregtech/api/interfaces/IToolStats.java
+++ b/src/main/java/gregtech/api/interfaces/IToolStats.java
@@ -194,4 +194,8 @@ public interface IToolStats {
float getMiningSpeed(Block aBlock, byte aMetaData, float aDefault, EntityPlayer aPlayer, World worldObj, int aX,
int aY, int aZ);
+
+ String getToolTypeName();
+
+ byte getMaxMode();
}
diff --git a/src/main/java/gregtech/api/interfaces/metatileentity/IMetaTileEntity.java b/src/main/java/gregtech/api/interfaces/metatileentity/IMetaTileEntity.java
index 04522b1012..2c222e76a8 100644
--- a/src/main/java/gregtech/api/interfaces/metatileentity/IMetaTileEntity.java
+++ b/src/main/java/gregtech/api/interfaces/metatileentity/IMetaTileEntity.java
@@ -132,27 +132,28 @@ public interface IMetaTileEntity extends ISidedInventory, IFluidTank, IFluidHand
boolean allowCoverOnSide(ForgeDirection side, GT_ItemStack aStack);
/**
- * When a Player rightclicks the Facing with a Screwdriver.
+ * When a Player right-clicks the Facing with a Screwdriver.
*/
- void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ);
+ void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ,
+ ItemStack aTool);
/**
* When a Player right-clicks the Facing with a Wrench.
*/
boolean onWrenchRightClick(ForgeDirection side, ForgeDirection wrenchingSide, EntityPlayer entityPlayer, float aX,
- float aY, float aZ);
+ float aY, float aZ, ItemStack aTool);
/**
* When a Player right-clicks the Facing with a wire cutter.
*/
boolean onWireCutterRightClick(ForgeDirection side, ForgeDirection wrenchingSide, EntityPlayer entityPlayer,
- float aX, float aY, float aZ);
+ float aX, float aY, float aZ, ItemStack aTool);
/**
* When a Player right-clicks the Facing with a soldering iron.
*/
boolean onSolderingToolRightClick(ForgeDirection side, ForgeDirection wrenchingSide, EntityPlayer entityPlayer,
- float aX, float aY, float aZ);
+ float aX, float aY, float aZ, ItemStack aTool);
/**
* Called right before this Machine explodes
diff --git a/src/main/java/gregtech/api/items/GT_MetaGenerated_Tool.java b/src/main/java/gregtech/api/items/GT_MetaGenerated_Tool.java
index ecbea37697..acf62e0661 100644
--- a/src/main/java/gregtech/api/items/GT_MetaGenerated_Tool.java
+++ b/src/main/java/gregtech/api/items/GT_MetaGenerated_Tool.java
@@ -30,6 +30,7 @@ import net.minecraft.stats.StatList;
import net.minecraft.util.EnumChatFormatting;
import net.minecraft.util.IIcon;
import net.minecraft.util.MathHelper;
+import net.minecraft.util.StatCollector;
import net.minecraft.world.World;
import net.minecraftforge.common.IShearable;
import net.minecraftforge.event.entity.player.PlayerEvent;
@@ -148,6 +149,27 @@ public abstract class GT_MetaGenerated_Tool extends GT_MetaBase_Item
return false;
}
+ public static final boolean setToolMode(ItemStack aStack, byte aMode) {
+ NBTTagCompound aNBT = aStack.getTagCompound();
+ if (aNBT != null) {
+ aNBT = aNBT.getCompoundTag("GT.ToolStats");
+ if (aNBT != null) {
+ aNBT.setByte("Mode", aMode);
+ return true;
+ }
+ }
+ return false;
+ }
+
+ public static final byte getToolMode(ItemStack aStack) {
+ NBTTagCompound aNBT = aStack.getTagCompound();
+ if (aNBT != null) {
+ aNBT = aNBT.getCompoundTag("GT.ToolStats");
+ if (aNBT != null) return aNBT.getByte("Mode");
+ }
+ return 0;
+ }
+
/**
* This adds a Custom Item to the ending Range.
*
@@ -204,6 +226,7 @@ public abstract class GT_MetaGenerated_Tool extends GT_MetaBase_Item
IToolStats tToolStats = getToolStats(rStack);
if (tToolStats != null) {
NBTTagCompound tMainNBT = new NBTTagCompound(), tToolNBT = new NBTTagCompound();
+ tToolNBT.setByte("Mode", (byte) 0);
if (aPrimaryMaterial != null) {
tToolNBT.setString("PrimaryMaterial", aPrimaryMaterial.mName);
tToolNBT.setLong(
@@ -719,6 +742,14 @@ public abstract class GT_MetaGenerated_Tool extends GT_MetaBase_Item
return getToolStatsInternal(aStack);
}
+ public byte getToolMaxMode(ItemStack aStack) {
+ IToolStats stats = getToolStats(aStack);
+ if (stats != null) {
+ return stats.getMaxMode();
+ }
+ return 1;
+ }
+
private IToolStats getToolStatsInternal(ItemStack aStack) {
return aStack == null ? null : mToolStats.get((short) aStack.getItemDamage());
}
@@ -905,6 +936,21 @@ public abstract class GT_MetaGenerated_Tool extends GT_MetaBase_Item
}
@Override
+ public String getItemStackDisplayName(ItemStack aStack) {
+
+ String result = super.getItemStackDisplayName(aStack);
+ IToolStats toolStats = getToolStats(aStack);
+ if (toolStats != null) {
+ String key = "gt." + toolStats.getToolTypeName() + ".mode." + getToolMode(aStack);
+ if (StatCollector.canTranslate(key)) {
+ result += " (" + StatCollector.translateToLocal(key) + ")";
+ }
+ }
+ return result;
+
+ }
+
+ @Override
public short getChargedMetaData(ItemStack aStack) {
return (short) (aStack.getItemDamage() - (aStack.getItemDamage() % 2));
}
diff --git a/src/main/java/gregtech/api/metatileentity/BaseMetaPipeEntity.java b/src/main/java/gregtech/api/metatileentity/BaseMetaPipeEntity.java
index 19e5afebc0..b2458fbdcc 100644
--- a/src/main/java/gregtech/api/metatileentity/BaseMetaPipeEntity.java
+++ b/src/main/java/gregtech/api/metatileentity/BaseMetaPipeEntity.java
@@ -816,7 +816,8 @@ public class BaseMetaPipeEntity extends CommonMetaTileEntity
}
final ForgeDirection tSide = GT_Utility.determineWrenchingSide(side, aX, aY, aZ);
if (GT_Utility.isStackInList(tCurrentItem, GregTech_API.sWrenchList)) {
- if (mMetaTileEntity.onWrenchRightClick(side, tSide, aPlayer, aX, aY, aZ)) {
+
+ if (mMetaTileEntity.onWrenchRightClick(side, tSide, aPlayer, aX, aY, aZ, tCurrentItem)) {
mMetaTileEntity.markDirty();
GT_ModHandler.damageOrDechargeItem(tCurrentItem, 1, 1000, aPlayer);
GT_Utility.sendSoundToPlayers(
@@ -836,7 +837,7 @@ public class BaseMetaPipeEntity extends CommonMetaTileEntity
setCoverDataAtSide(
tSide,
getCoverInfoAtSide(tSide).onCoverScrewdriverClick(aPlayer, 0.5F, 0.5F, 0.5F));
- mMetaTileEntity.onScrewdriverRightClick(tSide, aPlayer, aX, aY, aZ);
+ mMetaTileEntity.onScrewdriverRightClick(tSide, aPlayer, aX, aY, aZ, tCurrentItem);
mMetaTileEntity.markDirty();
GT_Utility.sendSoundToPlayers(
worldObj,
@@ -852,7 +853,7 @@ public class BaseMetaPipeEntity extends CommonMetaTileEntity
setCoverDataAtSide(
side,
getCoverInfoAtSide(side).onCoverScrewdriverClick(aPlayer, aX, aY, aZ));
- mMetaTileEntity.onScrewdriverRightClick(side, aPlayer, aX, aY, aZ);
+ mMetaTileEntity.onScrewdriverRightClick(side, aPlayer, aX, aY, aZ, tCurrentItem);
mMetaTileEntity.markDirty();
GT_Utility.sendSoundToPlayers(
worldObj,
@@ -894,7 +895,7 @@ public class BaseMetaPipeEntity extends CommonMetaTileEntity
}
if (GT_Utility.isStackInList(tCurrentItem, GregTech_API.sWireCutterList)) {
- if (mMetaTileEntity.onWireCutterRightClick(side, tSide, aPlayer, aX, aY, aZ)) {
+ if (mMetaTileEntity.onWireCutterRightClick(side, tSide, aPlayer, aX, aY, aZ, tCurrentItem)) {
mMetaTileEntity.markDirty();
// logic handled internally
GT_Utility.sendSoundToPlayers(
@@ -911,7 +912,7 @@ public class BaseMetaPipeEntity extends CommonMetaTileEntity
}
if (GT_Utility.isStackInList(tCurrentItem, GregTech_API.sSolderingToolList)) {
- if (mMetaTileEntity.onSolderingToolRightClick(side, tSide, aPlayer, aX, aY, aZ)) {
+ if (mMetaTileEntity.onSolderingToolRightClick(side, tSide, aPlayer, aX, aY, aZ, tCurrentItem)) {
mMetaTileEntity.markDirty();
// logic handled internally
GT_Utility.sendSoundToPlayers(
diff --git a/src/main/java/gregtech/api/metatileentity/BaseMetaTileEntity.java b/src/main/java/gregtech/api/metatileentity/BaseMetaTileEntity.java
index 2ef6d51776..e8f607aae1 100644
--- a/src/main/java/gregtech/api/metatileentity/BaseMetaTileEntity.java
+++ b/src/main/java/gregtech/api/metatileentity/BaseMetaTileEntity.java
@@ -1524,7 +1524,8 @@ public class BaseMetaTileEntity extends CommonMetaTileEntity
aPlayer,
aX,
aY,
- aZ)) {
+ aZ,
+ tCurrentItem)) {
GT_ModHandler.damageOrDechargeItem(tCurrentItem, 1, 1000, aPlayer);
GT_Utility.sendSoundToPlayers(
worldObj,
@@ -1552,7 +1553,7 @@ public class BaseMetaTileEntity extends CommonMetaTileEntity
aX,
aY,
aZ));
- mMetaTileEntity.onScrewdriverRightClick(side, aPlayer, aX, aY, aZ);
+ mMetaTileEntity.onScrewdriverRightClick(side, aPlayer, aX, aY, aZ, tCurrentItem);
GT_Utility.sendSoundToPlayers(
worldObj,
SoundResource.IC2_TOOLS_WRENCH,
@@ -1614,7 +1615,7 @@ public class BaseMetaTileEntity extends CommonMetaTileEntity
if (GT_Utility.isStackInList(tCurrentItem, GregTech_API.sSolderingToolList)) {
final ForgeDirection tSide = GT_Utility.determineWrenchingSide(side, aX, aY, aZ);
- if (mMetaTileEntity.onSolderingToolRightClick(side, tSide, aPlayer, aX, aY, aZ)) {
+ if (mMetaTileEntity.onSolderingToolRightClick(side, tSide, aPlayer, aX, aY, aZ, tCurrentItem)) {
// logic handled internally
GT_Utility.sendSoundToPlayers(
worldObj,
@@ -1649,7 +1650,7 @@ public class BaseMetaTileEntity extends CommonMetaTileEntity
if (GT_Utility.isStackInList(tCurrentItem, GregTech_API.sWireCutterList)) {
final ForgeDirection tSide = GT_Utility.determineWrenchingSide(side, aX, aY, aZ);
- if (mMetaTileEntity.onWireCutterRightClick(side, tSide, aPlayer, aX, aY, aZ)) {
+ if (mMetaTileEntity.onWireCutterRightClick(side, tSide, aPlayer, aX, aY, aZ, tCurrentItem)) {
// logic handled internally
GT_Utility.sendSoundToPlayers(
worldObj,
diff --git a/src/main/java/gregtech/api/metatileentity/MetaPipeEntity.java b/src/main/java/gregtech/api/metatileentity/MetaPipeEntity.java
index f548949807..381381f3a8 100644
--- a/src/main/java/gregtech/api/metatileentity/MetaPipeEntity.java
+++ b/src/main/java/gregtech/api/metatileentity/MetaPipeEntity.java
@@ -92,14 +92,14 @@ public abstract class MetaPipeEntity implements IMetaTileEntity, IConnectable {
* <p>
* The constructor can be overloaded as follows:
* <blockquote>
- *
+ *
* <pre>
- *
+ *
* public GT_MetaTileEntity_EBench(int id, String name, String nameRegional) {
* super(id, name, nameRegional);
* }
* </pre>
- *
+ *
* </blockquote>
*
* @param aID the machine ID
@@ -260,30 +260,54 @@ public abstract class MetaPipeEntity implements IMetaTileEntity, IConnectable {
return true;
}
- @Override
+ @Deprecated
public void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) {
/* Do nothing */
}
- @Override
+ @Deprecated
public boolean onWrenchRightClick(ForgeDirection side, ForgeDirection wrenchingSide, EntityPlayer entityPlayer,
float aX, float aY, float aZ) {
return false;
}
- @Override
+ @Deprecated
public boolean onWireCutterRightClick(ForgeDirection side, ForgeDirection wrenchingSide, EntityPlayer aPlayer,
float aX, float aY, float aZ) {
return false;
}
- @Override
+ @Deprecated
public boolean onSolderingToolRightClick(ForgeDirection side, ForgeDirection wrenchingSide, EntityPlayer aPlayer,
float aX, float aY, float aZ) {
return false;
}
@Override
+ public void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ,
+ ItemStack aTool) {
+ onScrewdriverRightClick(side, aPlayer, aX, aY, aZ);
+ }
+
+ @Override
+ public boolean onWrenchRightClick(ForgeDirection side, ForgeDirection wrenchingSide, EntityPlayer aPlayer, float aX,
+ float aY, float aZ, ItemStack aTool) {
+ return onWrenchRightClick(side, wrenchingSide, aPlayer, aX, aY, aZ);
+ }
+
+ @Override
+ public boolean onWireCutterRightClick(ForgeDirection side, ForgeDirection wrenchingSide, EntityPlayer aPlayer,
+ float aX, float aY, float aZ, ItemStack aTool) {
+ return onWireCutterRightClick(side, wrenchingSide, aPlayer, aX, aY, aZ);
+ }
+
+ @Override
+ public boolean onSolderingToolRightClick(ForgeDirection side, ForgeDirection wrenchingSide, EntityPlayer aPlayer,
+ float aX, float aY, float aZ, ItemStack aTool) {
+ return onSolderingToolRightClick(side, wrenchingSide, aPlayer, aX, aY, aZ);
+ }
+
+ @Override
public void onExplosion() {
/* Do nothing */
}
diff --git a/src/main/java/gregtech/api/metatileentity/MetaTileEntity.java b/src/main/java/gregtech/api/metatileentity/MetaTileEntity.java
index 6267e7b3da..0b7c14ae84 100644
--- a/src/main/java/gregtech/api/metatileentity/MetaTileEntity.java
+++ b/src/main/java/gregtech/api/metatileentity/MetaTileEntity.java
@@ -236,13 +236,19 @@ public abstract class MetaTileEntity implements IMetaTileEntity, ICleanroomRecei
}
@Override
- public void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) {
- /* Do nothing */
+ public void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ,
+ ItemStack aTool) {
+ onScrewdriverRightClick(side, aPlayer, aX, aY, aZ);
}
@Override
public boolean onWrenchRightClick(ForgeDirection side, ForgeDirection wrenchingSide, EntityPlayer entityPlayer,
- float aX, float aY, float aZ) {
+ float aX, float aY, float aZ, ItemStack aTool) {
+
+ // glue
+ if (onWrenchRightClick(side, wrenchingSide, entityPlayer, aX, aY, aZ)) {
+ return true;
+ }
if (getBaseMetaTileEntity().isValidFacing(wrenchingSide)) {
getBaseMetaTileEntity().setFrontFacing(wrenchingSide);
return true;
@@ -252,34 +258,69 @@ public abstract class MetaTileEntity implements IMetaTileEntity, ICleanroomRecei
@Override
public boolean onWireCutterRightClick(ForgeDirection side, ForgeDirection wrenchingSide, EntityPlayer aPlayer,
- float aX, float aY, float aZ) {
+ float aX, float aY, float aZ, ItemStack aTool) {
+ // glue
+ if (onWrenchRightClick(side, wrenchingSide, aPlayer, aX, aY, aZ)) {
+ return true;
+ }
if (!aPlayer.isSneaking()) return false;
final ForgeDirection oppositeSide = wrenchingSide.getOpposite();
final TileEntity tTileEntity = getBaseMetaTileEntity().getTileEntityAtSide(wrenchingSide);
if ((tTileEntity instanceof IGregTechTileEntity gtTE)
&& (gtTE.getMetaTileEntity() instanceof GT_MetaPipeEntity_Cable)) {
+
// The tile entity we're facing is a cable, let's try to connect to it
return gtTE.getMetaTileEntity()
- .onWireCutterRightClick(wrenchingSide, oppositeSide, aPlayer, aX, aY, aZ);
+ .onWireCutterRightClick(wrenchingSide, oppositeSide, aPlayer, aX, aY, aZ, aTool);
}
return false;
}
@Override
public boolean onSolderingToolRightClick(ForgeDirection side, ForgeDirection wrenchingSide, EntityPlayer aPlayer,
- float aX, float aY, float aZ) {
+ float aX, float aY, float aZ, ItemStack aTool) {
+
+ // glue
+ if (onWrenchRightClick(side, wrenchingSide, aPlayer, aX, aY, aZ)) {
+ return true;
+ }
+
if (!aPlayer.isSneaking()) return false;
final ForgeDirection oppositeSide = wrenchingSide.getOpposite();
TileEntity tTileEntity = getBaseMetaTileEntity().getTileEntityAtSide(wrenchingSide);
if ((tTileEntity instanceof IGregTechTileEntity gtTE)
&& (gtTE.getMetaTileEntity() instanceof GT_MetaPipeEntity_Cable)) {
+
// The tile entity we're facing is a cable, let's try to connect to it
return gtTE.getMetaTileEntity()
- .onSolderingToolRightClick(wrenchingSide, oppositeSide, aPlayer, aX, aY, aZ);
+ .onSolderingToolRightClick(wrenchingSide, oppositeSide, aPlayer, aX, aY, aZ, aTool);
}
return false;
}
+ @Deprecated
+ public boolean onSolderingToolRightClick(ForgeDirection side, ForgeDirection wrenchingSide, EntityPlayer aPlayer,
+ float aX, float aY, float aZ) {
+ return false;
+ }
+
+ @Deprecated
+ public boolean onWireCutterRightClick(ForgeDirection side, ForgeDirection wrenchingSide, EntityPlayer aPlayer,
+ float aX, float aY, float aZ) {
+ return false;
+ }
+
+ @Deprecated
+ public boolean onWrenchRightClick(ForgeDirection side, ForgeDirection wrenchingSide, EntityPlayer aPlayer, float aX,
+ float aY, float aZ) {
+ return false;
+ }
+
+ @Deprecated
+ public void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) {
+
+ }
+
@Override
public void onExplosion() {
GT_Log.exp.println(
diff --git a/src/main/java/gregtech/api/multitileentity/base/MultiTileEntity.java b/src/main/java/gregtech/api/multitileentity/base/MultiTileEntity.java
index e0d23f0237..4b2a5aca67 100644
--- a/src/main/java/gregtech/api/multitileentity/base/MultiTileEntity.java
+++ b/src/main/java/gregtech/api/multitileentity/base/MultiTileEntity.java
@@ -761,18 +761,19 @@ public abstract class MultiTileEntity extends CoverableTileEntity
&& GT_Utility.areStacksEqual(new ItemStack(Items.water_bucket, 1), tCurrentItem)) {
// TODO (Colorization)
}
+
if (GT_Utility.isStackInList(tCurrentItem, GregTech_API.sWrenchList))
- return onWrenchRightClick(aPlayer, tCurrentItem, wrenchSide, aX, aY, aZ);
+ return onWrenchRightClick(aPlayer, tCurrentItem, wrenchSide, aX, aY, aZ, tCurrentItem);
if (GT_Utility.isStackInList(tCurrentItem, GregTech_API.sScrewdriverList))
- return onScrewdriverRightClick(aPlayer, tCurrentItem, wrenchSide, aX, aY, aZ);
+ return onScrewdriverRightClick(aPlayer, tCurrentItem, wrenchSide, aX, aY, aZ, tCurrentItem);
if (GT_Utility.isStackInList(tCurrentItem, GregTech_API.sHardHammerList))
- return onHammerRightClick(aPlayer, tCurrentItem, wrenchSide, aX, aY, aZ);
+ return onHammerRightClick(aPlayer, tCurrentItem, wrenchSide, aX, aY, aZ, tCurrentItem);
if (GT_Utility.isStackInList(tCurrentItem, GregTech_API.sSoftHammerList))
- return onMalletRightClick(aPlayer, tCurrentItem, wrenchSide, aX, aY, aZ);
+ return onMalletRightClick(aPlayer, tCurrentItem, wrenchSide, aX, aY, aZ, tCurrentItem);
if (GT_Utility.isStackInList(tCurrentItem, GregTech_API.sSolderingToolList))
- return onSolderingRightClick(aPlayer, tCurrentItem, wrenchSide, aX, aY, aZ);
+ return onSolderingRightClick(aPlayer, tCurrentItem, wrenchSide, aX, aY, aZ, tCurrentItem);
if (GT_Utility.isStackInList(tCurrentItem, GregTech_API.sWireCutterList))
- return onWireCutterRightClick(aPlayer, tCurrentItem, wrenchSide, aX, aY, aZ);
+ return onWireCutterRightClick(aPlayer, tCurrentItem, wrenchSide, aX, aY, aZ, tCurrentItem);
final ForgeDirection coverSide = getCoverIDAtSide(side) == 0 ? wrenchSide : side;
@@ -857,16 +858,16 @@ public abstract class MultiTileEntity extends CoverableTileEntity
}
public boolean onWrenchRightClick(EntityPlayer aPlayer, ItemStack tCurrentItem, ForgeDirection wrenchSide, float aX,
- float aY, float aZ) {
+ float aY, float aZ, ItemStack aTool) {
if (setMainFacing(wrenchSide)) {
GT_ModHandler.damageOrDechargeItem(tCurrentItem, 1, 1000, aPlayer);
GT_Utility.sendSoundToPlayers(worldObj, SoundResource.IC2_TOOLS_WRENCH, 1.0F, -1, xCoord, yCoord, zCoord);
}
- return true;
+ return onWrenchRightClick(aPlayer, tCurrentItem, wrenchSide, aX, aY, aZ);
}
public boolean onScrewdriverRightClick(EntityPlayer aPlayer, ItemStack tCurrentItem, ForgeDirection wrenchSide,
- float aX, float aY, float aZ) {
+ float aX, float aY, float aZ, ItemStack aTool) {
if (GT_ModHandler.damageOrDechargeItem(tCurrentItem, 1, 200, aPlayer)) {
setCoverDataAtSide(
wrenchSide,
@@ -882,30 +883,66 @@ public abstract class MultiTileEntity extends CoverableTileEntity
// TODO: Update connections!
GT_Utility.sendSoundToPlayers(worldObj, SoundResource.IC2_TOOLS_WRENCH, 1.0F, -1, xCoord, yCoord, zCoord);
}
- return true;
+ return onScrewdriverRightClick(aPlayer, tCurrentItem, wrenchSide, aX, aY, aZ);
}
public boolean onHammerRightClick(EntityPlayer aPlayer, ItemStack tCurrentItem, ForgeDirection wrenchSide, float aX,
- float aY, float aZ) {
+ float aY, float aZ, ItemStack aTool) {
- return true;
+ return onHammerRightClick(aPlayer, tCurrentItem, wrenchSide, aX, aY, aZ);
}
public boolean onMalletRightClick(EntityPlayer aPlayer, ItemStack tCurrentItem, ForgeDirection wrenchSide, float aX,
- float aY, float aZ) {
+ float aY, float aZ, ItemStack aTool) {
+ return onMalletRightClick(aPlayer, tCurrentItem, wrenchSide, aX, aY, aZ);
+ }
+
+ public boolean onSolderingRightClick(EntityPlayer aPlayer, ItemStack tCurrentItem, ForgeDirection wrenchSide,
+ float aX, float aY, float aZ, ItemStack aTool) {
+
+ return onSolderingRightClick(aPlayer, tCurrentItem, wrenchSide, aX, aY, aZ);
+ }
+
+ public boolean onWireCutterRightClick(EntityPlayer aPlayer, ItemStack tCurrentItem, ForgeDirection wrenchSide,
+ float aX, float aY, float aZ, ItemStack aTool) {
+
+ return onWireCutterRightClick(aPlayer, tCurrentItem, wrenchSide, aX, aY, aZ);
+ }
+
+ @Deprecated
+ public boolean onHammerRightClick(EntityPlayer aPlayer, ItemStack tCurrentItem, ForgeDirection wrenchSide, float aX,
+ float aY, float aZ) {
return true;
}
+ @Deprecated
public boolean onSolderingRightClick(EntityPlayer aPlayer, ItemStack tCurrentItem, ForgeDirection wrenchSide,
float aX, float aY, float aZ) {
+ return true;
+ }
+ @Deprecated
+ public boolean onMalletRightClick(EntityPlayer aPlayer, ItemStack tCurrentItem, ForgeDirection wrenchSide, float aX,
+ float aY, float aZ) {
return true;
}
+ @Deprecated
public boolean onWireCutterRightClick(EntityPlayer aPlayer, ItemStack tCurrentItem, ForgeDirection wrenchSide,
float aX, float aY, float aZ) {
+ return true;
+ }
+
+ @Deprecated
+ public boolean onWrenchRightClick(EntityPlayer aPlayer, ItemStack tCurrentItem, ForgeDirection wrenchSide, float aX,
+ float aY, float aZ) {
+ return true;
+ }
+ @Deprecated
+ public boolean onScrewdriverRightClick(EntityPlayer aPlayer, ItemStack tCurrentItem, ForgeDirection wrenchSide,
+ float aX, float aY, float aZ) {
return true;
}
diff --git a/src/main/java/gregtech/api/multitileentity/multiblock/base/Controller.java b/src/main/java/gregtech/api/multitileentity/multiblock/base/Controller.java
index 00201171a8..606d957fd6 100644
--- a/src/main/java/gregtech/api/multitileentity/multiblock/base/Controller.java
+++ b/src/main/java/gregtech/api/multitileentity/multiblock/base/Controller.java
@@ -650,7 +650,7 @@ public abstract class Controller<T extends Controller<T>> extends MultiTileBasic
@Override
public boolean onWrenchRightClick(EntityPlayer aPlayer, ItemStack tCurrentItem, ForgeDirection wrenchSide, float aX,
- float aY, float aZ) {
+ float aY, float aZ, ItemStack aTool) {
if (wrenchSide != getFrontFacing())
return super.onWrenchRightClick(aPlayer, tCurrentItem, wrenchSide, aX, aY, aZ);
if (aPlayer.isSneaking()) {
diff --git a/src/main/java/gregtech/api/multitileentity/multiblock/base/MultiBlockPart.java b/src/main/java/gregtech/api/multitileentity/multiblock/base/MultiBlockPart.java
index 1453502ea0..db9053b0d7 100644
--- a/src/main/java/gregtech/api/multitileentity/multiblock/base/MultiBlockPart.java
+++ b/src/main/java/gregtech/api/multitileentity/multiblock/base/MultiBlockPart.java
@@ -420,7 +420,7 @@ public abstract class MultiBlockPart extends NonTickableMultiTileEntity
@Override
public boolean onMalletRightClick(EntityPlayer aPlayer, ItemStack tCurrentItem, ForgeDirection wrenchSide, float aX,
- float aY, float aZ) {
+ float aY, float aZ, ItemStack aTool) {
if (mAllowedModes == NOTHING) return true;
if (mMode == NOTHING) {
facing = wrenchSide;
diff --git a/src/main/java/gregtech/api/recipe/RecipeMaps.java b/src/main/java/gregtech/api/recipe/RecipeMaps.java
index f11466a426..b86fdac9bf 100644
--- a/src/main/java/gregtech/api/recipe/RecipeMaps.java
+++ b/src/main/java/gregtech/api/recipe/RecipeMaps.java
@@ -1,10 +1,27 @@
package gregtech.api.recipe;
-import static gregtech.api.enums.Mods.*;
+import static gregtech.api.enums.Mods.GTNHIntergalactic;
+import static gregtech.api.enums.Mods.GTPlusPlus;
+import static gregtech.api.enums.Mods.NEICustomDiagrams;
+import static gregtech.api.enums.Mods.Railcraft;
import static gregtech.api.util.GT_RecipeConstants.ADDITIVE_AMOUNT;
import static gregtech.api.util.GT_RecipeConstants.FUEL_VALUE;
-import static gregtech.api.util.GT_RecipeMapUtil.*;
-import static gregtech.api.util.GT_Utility.*;
+import static gregtech.api.util.GT_RecipeMapUtil.FIRST_FLUIDSTACK_INPUT;
+import static gregtech.api.util.GT_RecipeMapUtil.FIRST_FLUIDSTACK_OUTPUT;
+import static gregtech.api.util.GT_RecipeMapUtil.FIRST_FLUID_OUTPUT;
+import static gregtech.api.util.GT_RecipeMapUtil.FIRST_ITEM_INPUT;
+import static gregtech.api.util.GT_RecipeMapUtil.FIRST_ITEM_OR_FLUID_INPUT;
+import static gregtech.api.util.GT_RecipeMapUtil.FIRST_ITEM_OR_FLUID_OUTPUT;
+import static gregtech.api.util.GT_RecipeMapUtil.FIRST_ITEM_OUTPUT;
+import static gregtech.api.util.GT_RecipeMapUtil.GT_RecipeTemplate;
+import static gregtech.api.util.GT_RecipeMapUtil.asTemplate;
+import static gregtech.api.util.GT_RecipeMapUtil.buildOrEmpty;
+import static gregtech.api.util.GT_Utility.clamp;
+import static gregtech.api.util.GT_Utility.copyAmount;
+import static gregtech.api.util.GT_Utility.getFluidForFilledItem;
+import static gregtech.api.util.GT_Utility.isArrayEmptyOrNull;
+import static gregtech.api.util.GT_Utility.isArrayOfLength;
+import static gregtech.api.util.GT_Utility.multiplyStack;
import java.util.ArrayList;
import java.util.Collection;
diff --git a/src/main/java/gregtech/api/util/GT_Utility.java b/src/main/java/gregtech/api/util/GT_Utility.java
index 13ce66ddbf..75451d9fdf 100644
--- a/src/main/java/gregtech/api/util/GT_Utility.java
+++ b/src/main/java/gregtech/api/util/GT_Utility.java
@@ -55,6 +55,7 @@ import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import net.minecraft.block.Block;
+import net.minecraft.client.Minecraft;
import net.minecraft.enchantment.Enchantment;
import net.minecraft.enchantment.EnchantmentHelper;
import net.minecraft.entity.Entity;
@@ -88,7 +89,9 @@ import net.minecraft.util.ChatComponentText;
import net.minecraft.util.DamageSource;
import net.minecraft.util.EnumChatFormatting;
import net.minecraft.util.MathHelper;
+import net.minecraft.util.MovingObjectPosition;
import net.minecraft.util.ResourceLocation;
+import net.minecraft.util.Vec3;
import net.minecraft.world.World;
import net.minecraft.world.WorldServer;
import net.minecraft.world.chunk.Chunk;
@@ -4879,4 +4882,19 @@ public class GT_Utility {
if (tFuel != null) return tFuel.mSpecialValue;
return 0;
}
+
+ public static MovingObjectPosition getPlayerLookingTarget() {
+ // Basically copied from waila, thanks Caedis for such challenge
+ Minecraft mc = Minecraft.getMinecraft();
+ EntityLivingBase viewpoint = mc.renderViewEntity;
+ if (viewpoint == null) return null;
+
+ float reachDistance = mc.playerController.getBlockReachDistance();
+ Vec3 posVec = viewpoint.getPosition(0);
+ Vec3 lookVec = viewpoint.getLook(0);
+ Vec3 modifiedPosVec = posVec
+ .addVector(lookVec.xCoord * reachDistance, lookVec.yCoord * reachDistance, lookVec.zCoord * reachDistance);
+
+ return viewpoint.worldObj.rayTraceBlocks(posVec, modifiedPosVec);
+ }
}
diff --git a/src/main/java/gregtech/common/items/behaviors/Behaviour_Switch_Mode.java b/src/main/java/gregtech/common/items/behaviors/Behaviour_Switch_Mode.java
new file mode 100644
index 0000000000..1e93362882
--- /dev/null
+++ b/src/main/java/gregtech/common/items/behaviors/Behaviour_Switch_Mode.java
@@ -0,0 +1,53 @@
+package gregtech.common.items.behaviors;
+
+import java.util.List;
+
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.item.ItemStack;
+import net.minecraft.util.MovingObjectPosition;
+import net.minecraft.world.World;
+
+import gregtech.api.items.GT_MetaBase_Item;
+import gregtech.api.items.GT_MetaGenerated_Tool;
+import gregtech.api.util.GT_Utility;
+
+public class Behaviour_Switch_Mode extends Behaviour_None {
+
+ public Behaviour_Switch_Mode() {}
+
+ @Override
+ public ItemStack onItemRightClick(GT_MetaBase_Item aItem, ItemStack aStack, World aWorld, EntityPlayer aPlayer) {
+ if (aStack != null && (aPlayer == null || aPlayer.isSneaking()) && !aWorld.isRemote) {
+
+ GT_MetaGenerated_Tool itemTool = (GT_MetaGenerated_Tool) aItem;
+ final byte maxMode = itemTool.getToolMaxMode(aStack);
+ if (maxMode == 1) {
+ return aStack;
+ }
+
+ MovingObjectPosition mop = GT_Utility.getPlayerLookingTarget();
+ if (mop == null) {
+ byte currentMode = itemTool.getToolMode(aStack);
+ currentMode = (byte) ((currentMode + 1) % maxMode);
+ itemTool.setToolMode(aStack, currentMode);
+ }
+ return aStack;
+ }
+ return aStack;
+ }
+
+ @Override
+ public List<String> getAdditionalToolTips(GT_MetaBase_Item aItem, List<String> aList, ItemStack aStack) {
+ super.getAdditionalToolTips(aItem, aList, aStack);
+ if ((aItem instanceof GT_MetaGenerated_Tool)) {
+ GT_MetaGenerated_Tool itemTool = (GT_MetaGenerated_Tool) aItem;
+ final int maxMode = itemTool.getToolMaxMode(aStack);
+ if (maxMode > 1) {
+ aList.add("Shift+Rclick to change mode");
+ }
+ }
+
+ return aList;
+ }
+
+}
diff --git a/src/main/java/gregtech/common/tools/GT_Tool.java b/src/main/java/gregtech/common/tools/GT_Tool.java
index ac3fe66542..89c0a79ed0 100644
--- a/src/main/java/gregtech/common/tools/GT_Tool.java
+++ b/src/main/java/gregtech/common/tools/GT_Tool.java
@@ -188,4 +188,14 @@ public abstract class GT_Tool implements IToolStats {
int aX, int aY, int aZ) {
return aDefault;
}
+
+ @Override
+ public String getToolTypeName() {
+ return "tool";
+ }
+
+ @Override
+ public byte getMaxMode() {
+ return 1;
+ }
}
diff --git a/src/main/java/gregtech/common/tools/GT_Tool_Wrench.java b/src/main/java/gregtech/common/tools/GT_Tool_Wrench.java
index 0b27806160..5a5a69ad80 100644
--- a/src/main/java/gregtech/common/tools/GT_Tool_Wrench.java
+++ b/src/main/java/gregtech/common/tools/GT_Tool_Wrench.java
@@ -29,6 +29,7 @@ import gregtech.api.interfaces.IIconContainer;
import gregtech.api.interfaces.IToolStats;
import gregtech.api.items.GT_MetaGenerated_Tool;
import gregtech.api.util.GT_ToolHarvestHelper;
+import gregtech.common.items.behaviors.Behaviour_Switch_Mode;
import gregtech.common.items.behaviors.Behaviour_Wrench;
import ic2.api.tile.IWrenchable;
@@ -145,6 +146,7 @@ public class GT_Tool_Wrench extends GT_Tool {
@Override
public void onStatsAddedToTool(GT_MetaGenerated_Tool aItem, int aID) {
+ aItem.addItemBehavior(aID, new Behaviour_Switch_Mode());
aItem.addItemBehavior(aID, new Behaviour_Wrench(100));
}
@@ -188,4 +190,14 @@ public class GT_Tool_Wrench extends GT_Tool {
world.spawnEntityInWorld(new EntityItem(world, x, y, z, drop));
}
}
+
+ @Override
+ public String getToolTypeName() {
+ return "wrench";
+ }
+
+ @Override
+ public byte getMaxMode() {
+ return 2;
+ }
}