aboutsummaryrefslogtreecommitdiff
path: root/src/main
diff options
context:
space:
mode:
Diffstat (limited to 'src/main')
-rw-r--r--src/main/java/gregtech/api/enums/ItemList.java1
-rw-r--r--src/main/java/gregtech/common/GT_Client.java6
-rw-r--r--src/main/java/gregtech/common/items/GT_MetaGenerated_Item_01.java15
-rw-r--r--src/main/java/gregtech/common/items/behaviors/Behaviour_Cover_Tool.java165
-rw-r--r--src/main/resources/assets/gregtech/textures/items/gt.metaitem.01/709.pngbin0 -> 258 bytes
5 files changed, 177 insertions, 10 deletions
diff --git a/src/main/java/gregtech/api/enums/ItemList.java b/src/main/java/gregtech/api/enums/ItemList.java
index 06502b3491..4ec6f8f916 100644
--- a/src/main/java/gregtech/api/enums/ItemList.java
+++ b/src/main/java/gregtech/api/enums/ItemList.java
@@ -622,6 +622,7 @@ public enum ItemList implements IItemContainer {
Paper_Punch_Card_Empty,
Paper_Punch_Card_Encoded,
McGuffium_239,
+ Tool_Cover_Copy_Paste,
NC_SensorCard,
NC_SensorKit,
Tool_Matches,
diff --git a/src/main/java/gregtech/common/GT_Client.java b/src/main/java/gregtech/common/GT_Client.java
index 21e8eba584..2025de9551 100644
--- a/src/main/java/gregtech/common/GT_Client.java
+++ b/src/main/java/gregtech/common/GT_Client.java
@@ -19,6 +19,7 @@ import cpw.mods.fml.common.network.FMLNetworkEvent;
import gregtech.GT_Mod;
import gregtech.api.GregTech_API;
import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.ItemList;
import gregtech.api.enums.Materials;
import gregtech.api.interfaces.IHasFluidDisplayItem;
import gregtech.api.interfaces.tileentity.ICoverable;
@@ -619,6 +620,11 @@ public class GT_Client extends GT_Proxy
if (((ICoverable) aTileEntity).getCoverIDAtSide((byte) aEvent.target.sideHit) == 0)
drawGrid(aEvent, true, false, aEvent.player.isSneaking());
}
+
+ if (GT_Utility.areStacksEqual(ItemList.Tool_Cover_Copy_Paste.get(1), aEvent.currentItem, true)) {
+ if (((ICoverable) aTileEntity).getCoverIDAtSide((byte) aEvent.target.sideHit) == 0)
+ drawGrid(aEvent, true, false, aEvent.player.isSneaking());
+ }
}
@SubscribeEvent
diff --git a/src/main/java/gregtech/common/items/GT_MetaGenerated_Item_01.java b/src/main/java/gregtech/common/items/GT_MetaGenerated_Item_01.java
index 4501efb20c..b9ae028820 100644
--- a/src/main/java/gregtech/common/items/GT_MetaGenerated_Item_01.java
+++ b/src/main/java/gregtech/common/items/GT_MetaGenerated_Item_01.java
@@ -23,16 +23,7 @@ import gregtech.api.util.GT_OreDictUnificator;
import gregtech.api.util.GT_Recipe;
import gregtech.api.util.GT_Utility;
import gregtech.common.covers.*;
-import gregtech.common.items.behaviors.Behaviour_Arrow_Potion;
-import gregtech.common.items.behaviors.Behaviour_DataOrb;
-import gregtech.common.items.behaviors.Behaviour_DataStick;
-import gregtech.common.items.behaviors.Behaviour_Lighter;
-import gregtech.common.items.behaviors.Behaviour_PrintedPages;
-import gregtech.common.items.behaviors.Behaviour_Scanner;
-import gregtech.common.items.behaviors.Behaviour_SensorKit;
-import gregtech.common.items.behaviors.Behaviour_Sonictron;
-import gregtech.common.items.behaviors.Behaviour_Spray_Color;
-import gregtech.common.items.behaviors.Behaviour_WrittenBook;
+import gregtech.common.items.behaviors.*;
import net.minecraft.block.Block;
import net.minecraft.enchantment.Enchantment;
import net.minecraft.entity.item.EntityItem;
@@ -751,6 +742,8 @@ public class GT_MetaGenerated_Item_01 extends GT_MetaGenerated_Item_X32 {
GT_ModHandler.addShapelessCraftingRecipe(ItemList.Tool_DataOrb.get(1L), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[]{ItemList.Tool_DataOrb.get(1L)});
ItemList.Tool_DataStick.set(addItem(tLastID = 708, "Data Stick", "A Low Capacity Data Storage", SubTag.NO_UNIFICATION, new Behaviour_DataStick()));
GT_ModHandler.addShapelessCraftingRecipe(ItemList.Tool_DataStick.get(1L), GT_ModHandler.RecipeBits.NOT_REMOVABLE, new Object[]{ItemList.Tool_DataStick.get(1L)});
+ ItemList.Tool_Cover_Copy_Paste.set(addItem(tLastID = 709, "Cover Copy/Paste tool", "Set Cover Massively.", Behaviour_Cover_Tool.INSTANCE, new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 6L), new TC_Aspects.TC_AspectStack(TC_Aspects.SENSUS, 6L), new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 6L)));
+ setElectricStats(32000 + tLastID, 400000L, GT_Values.V[2], 2L, -1L, false);
ItemList.Circuit_Board_Basic.set(addItem(tLastID = 710, "Coated Circuit Board", "A Basic Board")); ItemList.Circuit_Board_Coated.set(ItemList.Circuit_Board_Basic.get(1));
ItemList.Circuit_Board_Advanced.set(addItem(tLastID = 711, "Epoxy Circuit Board", "An Advanced Board")); ItemList.Circuit_Board_Epoxy.set(ItemList.Circuit_Board_Advanced.get(1));
@@ -888,6 +881,8 @@ public class GT_MetaGenerated_Item_01 extends GT_MetaGenerated_Item_X32 {
GT_Values.RA.addAssemblerRecipe(new ItemStack[]{GT_OreDictUnificator.get(OrePrefixes.plate,Materials.Tin,2L), ItemList.Component_Filter.get(1L), ItemList.Conveyor_Module_LV.get(1L), GT_Utility.getIntegratedCircuit(1)}, null, ItemList.ItemFilter_Export.get(1L), 100, 30);
GT_Values.RA.addAssemblerRecipe(new ItemStack[]{GT_OreDictUnificator.get(OrePrefixes.plate,Materials.Tin,2L), ItemList.Component_Filter.get(1L), ItemList.Conveyor_Module_LV.get(1L), GT_Utility.getIntegratedCircuit(2)}, null, ItemList.ItemFilter_Import.get(1L), 100, 30);
+
+ GT_ModHandler.addCraftingRecipe(ItemList.Tool_Cover_Copy_Paste.get(1L), GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[]{"PSP", "PCP", "PBP", 'P', OrePrefixes.plate.get(Materials.Aluminium), 'S', ItemList.Tool_DataStick.get(1L), 'C', ItemList.Cover_Screen.get(1L), 'B', ItemList.Battery_RE_MV_Lithium.get(1L)});
}
private static final Map<Materials,Materials> cauldronRemap =new HashMap<>();
diff --git a/src/main/java/gregtech/common/items/behaviors/Behaviour_Cover_Tool.java b/src/main/java/gregtech/common/items/behaviors/Behaviour_Cover_Tool.java
new file mode 100644
index 0000000000..4856c209fe
--- /dev/null
+++ b/src/main/java/gregtech/common/items/behaviors/Behaviour_Cover_Tool.java
@@ -0,0 +1,165 @@
+package gregtech.common.items.behaviors;
+
+import gregtech.api.GregTech_API;
+import gregtech.api.interfaces.IItemBehaviour;
+import gregtech.api.interfaces.tileentity.ICoverable;
+import gregtech.api.items.GT_MetaBase_Item;
+import gregtech.api.util.*;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.entity.player.EntityPlayerMP;
+import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NBTBase;
+import net.minecraft.nbt.NBTTagCompound;
+import net.minecraft.tileentity.TileEntity;
+import net.minecraft.util.EnumChatFormatting;
+import net.minecraft.world.World;
+import net.minecraftforge.common.util.ForgeDirection;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class Behaviour_Cover_Tool extends Behaviour_None {
+ public static final IItemBehaviour<GT_MetaBase_Item> INSTANCE = new Behaviour_Cover_Tool();
+ private final String mTooltip = GT_LanguageManager.addStringLocalization("gt.behaviour.cover_copy_paste", "Can copy/paste cover data.");
+
+ private ISerializableObject mStoredData = GregTech_API.sNoBehavior.createDataObject();
+ private int mCoverType;
+
+ @Override
+ 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;
+ }
+ NBTTagCompound tNBT = aStack.getTagCompound();
+ TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ);
+ boolean isCopyMode = aPlayer.isSneaking();
+ initDataFromNBT(tNBT);
+ if (((aPlayer instanceof EntityPlayerMP)) && (aItem.canUse(aStack, 100.0D))) {
+ if (isCopyMode) {
+ ArrayList<String> tList = new ArrayList();
+ doCopy(tTileEntity, aWorld, aX, aY, aZ, aSide, hitX, hitY, hitZ, tList);
+ aItem.discharge(aStack, 100.0D, Integer.MAX_VALUE, true, false, false);
+ writeListToNBT(tList, tNBT, aPlayer);
+ saveDataToNBT(tNBT);
+ }
+ else {
+ doPaste(tTileEntity, aWorld, aX, aY, aZ, aSide, hitX, hitY, hitZ, aPlayer);
+ aItem.discharge(aStack, 25.0D, Integer.MAX_VALUE, true, false, false);
+ }
+ }
+ GT_Utility.doSoundAtClient(GregTech_API.sSoundList.get(108), 1, 1.0F, aX, aY, aZ);
+ return aPlayer instanceof EntityPlayerMP;
+ }
+
+ private void initDataFromNBT(NBTTagCompound aNBT) {
+ if (aNBT != null) {
+ mCoverType = aNBT.getInteger("mCoverType");
+ GT_CoverBehaviorBase<?> tBehavior = GregTech_API.getCoverBehaviorNew(mCoverType);
+ NBTBase tData = aNBT.getTag("mCoverData");
+ if (tData != null)
+ mStoredData = tBehavior.createDataObject(tData);
+ else
+ mStoredData = GregTech_API.sNoBehavior.createDataObject();
+ }
+ }
+
+ private void saveDataToNBT(NBTTagCompound aNBT) {
+ aNBT.setInteger("mCoverType", mCoverType);
+ if (mStoredData == null) mStoredData = GregTech_API.sNoBehavior.createDataObject();
+ aNBT.setTag("mCoverData", mStoredData.saveDataToNBT());
+ }
+
+ @SuppressWarnings("rawtypes")
+ private void writeListToNBT(List aList, NBTTagCompound aNBT, EntityPlayer aPlayer) {
+ if (aList != null && aNBT != null) {
+ int tSize = aList.size();
+ aNBT.setInteger("dataLinesCount", tSize);
+ for (int i = 0; i < tSize; i++) {
+ aNBT.setString("dataLines" + i, (String) aList.get(i));
+ GT_Utility.sendChatToPlayer(aPlayer, (String) aList.get(i));
+ }
+ }
+ }
+
+ @SuppressWarnings({"unchecked", "rawtypes"})
+ private void doCopy(TileEntity aTileEntity, World aWorld, int aX, int aY, int aZ, int aSide, float hitX, float hitY, float hitZ, List aList) {
+ aList.add(
+ "----- X: " + EnumChatFormatting.AQUA + GT_Utility.formatNumbers(aX) + EnumChatFormatting.RESET +
+ " Y: " + EnumChatFormatting.AQUA + GT_Utility.formatNumbers(aY) + EnumChatFormatting.RESET +
+ " Z: " + EnumChatFormatting.AQUA + GT_Utility.formatNumbers(aZ) + EnumChatFormatting.RESET +
+ " D: " + EnumChatFormatting.AQUA + aWorld.provider.dimensionId + EnumChatFormatting.RESET + " -----"
+ );
+ if (aTileEntity instanceof ICoverable) {
+ ICoverable tCoverable = (ICoverable) aTileEntity;
+ int tSide = tCoverable.getCoverItemAtSide((byte) aSide) != null ? aSide :
+ tCoverable.getCoverItemAtSide(GT_Utility.determineWrenchingSide((byte) aSide, hitX, hitY, hitZ)) != null ?
+ GT_Utility.determineWrenchingSide((byte) aSide, hitX, hitY, hitZ) : -1;
+ if (tSide != -1) {
+ mStoredData = tCoverable.getComplexCoverDataAtSide((byte) tSide);
+ mCoverType = tCoverable.getCoverIDAtSide((byte) tSide);
+ aList.add(
+ "Block Side: " + EnumChatFormatting.AQUA + ForgeDirection.getOrientation(tSide).name() + EnumChatFormatting.RESET
+ );
+ aList.add(
+ "Cover Type: " + EnumChatFormatting.GREEN + tCoverable.getCoverItemAtSide((byte) tSide).getDisplayName() + EnumChatFormatting.RESET
+ );
+ }
+ else {
+ mStoredData = GregTech_API.sNoBehavior.createDataObject();
+ mCoverType = 0;
+ aList.add(
+ "No Cover Found"
+ );
+ }
+ }
+ else {
+ mStoredData = GregTech_API.sNoBehavior.createDataObject();
+ mCoverType = 0;
+ aList.add(
+ "No Cover Found"
+ );
+ }
+ }
+
+ private void doPaste(TileEntity aTileEntity, World aWorld, int aX, int aY, int aZ, int aSide, float hitX, float hitY, float hitZ, EntityPlayer aPlayer) {
+ if (aTileEntity instanceof ICoverable) {
+ ICoverable tCoverable = (ICoverable) aTileEntity;
+ if (mCoverType == 0 || mStoredData == null) {
+ GT_Utility.sendChatToPlayer(aPlayer, "Please Copy a Valid Cover First.");
+ return;
+ }
+ int tSide = tCoverable.getCoverItemAtSide((byte) aSide) != null ? aSide :
+ tCoverable.getCoverItemAtSide(GT_Utility.determineWrenchingSide((byte) aSide, hitX, hitY, hitZ)) != null ?
+ GT_Utility.determineWrenchingSide((byte) aSide, hitX, hitY, hitZ) : -1;
+ if (tSide != -1) {
+ int tCoverID = tCoverable.getCoverIDAtSide((byte) tSide);
+ if (tCoverID == mCoverType) {
+ tCoverable.setCoverDataAtSide((byte) tSide, mStoredData);
+ GT_Utility.sendChatToPlayer(aPlayer, "Cover Data Pasted.");
+ }
+ else {
+ GT_Utility.sendChatToPlayer(aPlayer, "Not Matched Cover.");
+ }
+ }
+ else {
+ GT_Utility.sendChatToPlayer(aPlayer, "No Cover Found.");
+ }
+ }
+ }
+
+ @Override
+ public List<String> getAdditionalToolTips(GT_MetaBase_Item aItem, List<String> aList, ItemStack aStack) {
+ try {
+ NBTTagCompound tNBT = aStack.getTagCompound();
+ int tSize = tNBT.getInteger("dataLinesCount");
+ if (tSize < 1) throw new Exception();
+ aList.add(EnumChatFormatting.BLUE+"Stored Cover Data:");
+ for (int i = 0; i < tSize; i++) {
+ aList.add(EnumChatFormatting.RESET + tNBT.getString("dataLines" + i));
+ }
+ } catch (Exception e){
+ aList.add(this.mTooltip);
+ }
+ return aList;
+ }
+}
diff --git a/src/main/resources/assets/gregtech/textures/items/gt.metaitem.01/709.png b/src/main/resources/assets/gregtech/textures/items/gt.metaitem.01/709.png
new file mode 100644
index 0000000000..df921688fb
--- /dev/null
+++ b/src/main/resources/assets/gregtech/textures/items/gt.metaitem.01/709.png
Binary files differ