diff options
Diffstat (limited to 'src/main')
-rw-r--r-- | src/main/java/gregtech/api/enums/ItemList.java | 1 | ||||
-rw-r--r-- | src/main/java/gregtech/common/GT_Client.java | 6 | ||||
-rw-r--r-- | src/main/java/gregtech/common/items/GT_MetaGenerated_Item_01.java | 15 | ||||
-rw-r--r-- | src/main/java/gregtech/common/items/behaviors/Behaviour_Cover_Tool.java | 165 | ||||
-rw-r--r-- | src/main/resources/assets/gregtech/textures/items/gt.metaitem.01/709.png | bin | 0 -> 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 Binary files differnew file mode 100644 index 0000000000..df921688fb --- /dev/null +++ b/src/main/resources/assets/gregtech/textures/items/gt.metaitem.01/709.png |