diff options
Diffstat (limited to 'src/main/java')
4 files changed, 159 insertions, 3 deletions
diff --git a/src/main/java/com/detrav/DetravScannerMod.java b/src/main/java/com/detrav/DetravScannerMod.java index 94b8af9311..3e68c7128a 100644 --- a/src/main/java/com/detrav/DetravScannerMod.java +++ b/src/main/java/com/detrav/DetravScannerMod.java @@ -22,7 +22,7 @@ import net.minecraftforge.common.config.Configuration; public class DetravScannerMod { public static final String MODID = "detravscannermod"; - public static final String VERSION = "0.25"; + public static final String VERSION = "0.26"; public static final CreativeTabs TAB_DETRAV = new DetravCreativeTab(); diff --git a/src/main/java/com/detrav/gui/containers/DetravPortableAnvilContainer.java b/src/main/java/com/detrav/gui/containers/DetravPortableAnvilContainer.java index 4136137d97..4f4b73fe4a 100644 --- a/src/main/java/com/detrav/gui/containers/DetravPortableAnvilContainer.java +++ b/src/main/java/com/detrav/gui/containers/DetravPortableAnvilContainer.java @@ -1,21 +1,81 @@ package com.detrav.gui.containers; +import com.detrav.items.DetravMetaGeneratedTool01; +import com.detrav.utils.PortableAnvilInventory; +import gregtech.api.gui.GT_Slot_Output; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.InventoryPlayer; -import net.minecraft.inventory.Container; +import net.minecraft.inventory.*; import net.minecraft.item.ItemStack; import net.minecraft.world.World; +import gregtech.common.items.armor.SlotLocked; /** * Created by Detrav on 30.10.2016. */ public class DetravPortableAnvilContainer extends Container { + + public InventoryPlayer inventoryPlayer; + public IInventory slots; + ItemStack stack; + World worldObj; + public DetravPortableAnvilContainer(InventoryPlayer inventory, World world, ItemStack currentEquippedItem) { + worldObj = world; + inventoryPlayer = inventory; + stack = currentEquippedItem; + slots = new PortableAnvilInventory("Item", false, 3); + + this.addSlotToContainer(new Slot(this.slots, 0, 27, 47)); + this.addSlotToContainer(new Slot(this.slots, 1, 76, 47)); + this.addSlotToContainer(new GT_Slot_Output(this.slots, 2, 134, 47)); + + slots.setInventorySlotContents(1, DetravMetaGeneratedTool01.INSTANCE.getItemStackFromDetravData(stack)); + + + for (int i = 0; i < 3; ++i) { + for (int j = 0; j < 9; ++j) { + this.addSlotToContainer(new Slot(inventory, j + i * 9 + 9, 8 + j * 18, 84 + i * 18)); + } + } + + for (int i = 0; i < 9; ++i) { + ItemStack stackInSlot = inventoryPlayer.getStackInSlot(i); + if (currentEquippedItem != null && stackInSlot != null && currentEquippedItem == stackInSlot) { + addSlotToContainer(new SlotLocked(inventoryPlayer, i, 8 + i * 18, 142)); + } else { + this.addSlotToContainer(new Slot(inventory, i, 8 + i * 18, 142)); + } + } + } + @Override + public ItemStack transferStackInSlot(EntityPlayer par1EntityPlayer, int par2) { + return null; } + public void onContainerClosed(EntityPlayer p_75134_1_) { + super.onContainerClosed(p_75134_1_); + if (!this.worldObj.isRemote) { + ItemStack itemstack = this.slots.getStackInSlot(0); + + if (itemstack != null) { + p_75134_1_.dropPlayerItemWithRandomChoice(itemstack, false); + } + itemstack = this.slots.getStackInSlot(1); + if (itemstack != null) { + if (stack == null || !DetravMetaGeneratedTool01.INSTANCE.setItemStackToDetravData(stack, itemstack)) { + p_75134_1_.dropPlayerItemWithRandomChoice(itemstack, false); + } + } + //itemstack.writeToNBT() + } + } + + + @Override public boolean canInteractWith(EntityPlayer p_75145_1_) { return true; } -} +}
\ No newline at end of file diff --git a/src/main/java/com/detrav/items/DetravMetaGeneratedTool01.java b/src/main/java/com/detrav/items/DetravMetaGeneratedTool01.java index f42289f205..3bcb293b51 100644 --- a/src/main/java/com/detrav/items/DetravMetaGeneratedTool01.java +++ b/src/main/java/com/detrav/items/DetravMetaGeneratedTool01.java @@ -135,6 +135,38 @@ public class DetravMetaGeneratedTool01 extends GT_MetaGenerated_Tool { return false; } + public boolean setItemStackToDetravData(ItemStack aStack, ItemStack what) + { + if(what == null || aStack == null) return false; + NBTTagCompound aNBT = aStack.getTagCompound(); + if(aNBT ==null) { + aNBT = new NBTTagCompound(); + NBTTagCompound detravData = new NBTTagCompound(); + aNBT.setTag("DetravData", detravData); + aStack.setTagCompound(aNBT); + } + { + NBTTagCompound detravData = aNBT.getCompoundTag("DetravData"); + if (detravData == null || detravData.getShort("id") == 0 ) + { + detravData = new NBTTagCompound(); + aNBT.setTag("DetravData", detravData); + } + what.writeToNBT(detravData); + return true; + } + } + + public ItemStack getItemStackFromDetravData(ItemStack aStack) + { + if(aStack == null) return null; + NBTTagCompound aNBT = aStack.getTagCompound(); + if(aNBT ==null) return null; + NBTTagCompound detravData = aNBT.getCompoundTag("DetravData"); + if(detravData == null) return null; + return ItemStack.loadItemStackFromNBT(detravData); + } + public void getDetravSubItems(Item item, CreativeTabs detravCreativeTab, List list) { ItemStack dStack; diff --git a/src/main/java/com/detrav/utils/PortableAnvilInventory.java b/src/main/java/com/detrav/utils/PortableAnvilInventory.java new file mode 100644 index 0000000000..d0a2add486 --- /dev/null +++ b/src/main/java/com/detrav/utils/PortableAnvilInventory.java @@ -0,0 +1,64 @@ +package com.detrav.utils; + +import gregtech.api.enums.Materials; +import gregtech.api.items.GT_MetaGenerated_Tool; +import gregtech.api.util.GT_Recipe; +import gregtech.common.items.GT_MetaGenerated_Tool_01; +import net.minecraft.inventory.InventoryBasic; +import net.minecraft.item.ItemStack; +import net.minecraftforge.fluids.FluidStack; + +/** + * Created by Detrav on 30.10.2016. + */ +public class PortableAnvilInventory extends InventoryBasic { + public PortableAnvilInventory(String p_i1561_1_, boolean p_i1561_2_, int p_i1561_3_) { + super(p_i1561_1_, p_i1561_2_, p_i1561_3_); + } + + + public void setInventorySlotContents(int slot, ItemStack stack) { + super.setInventorySlotContents(slot, stack); + if (super.getStackInSlot(2) != null) return; + ItemStack gtTool = super.getStackInSlot(0); + if (gtTool != null) { + if ((gtTool.getItem() instanceof GT_MetaGenerated_Tool)) { + Materials mat = GT_MetaGenerated_Tool_01.getPrimaryMaterial(gtTool); + FluidStack fstack = mat.getMolten(1); + if (fstack == null) fstack = mat.getFluid(1); + if (fstack != null) { + int fluidID = fstack.getFluidID(); + ItemStack gtMaterial = super.getStackInSlot(1); + if (gtMaterial != null) { + GT_Recipe recipe = GT_Recipe.GT_Recipe_Map.sFluidExtractionRecipes.findRecipe(null, false, 524288L, null, gtMaterial); + if (recipe != null) { + FluidStack fStack = recipe.getFluidOutput(0); + if (fStack.getFluidID() == fluidID) { + ItemStack gtCopy = gtTool; + float amount = fStack.amount * 2f / 1000f; + long maxDamage = GT_MetaGenerated_Tool.getToolMaxDamage(gtCopy); + long damage = GT_MetaGenerated_Tool.getToolDamage(gtCopy); + if (damage == 0) { + super.setInventorySlotContents(2, null); + return; + } + maxDamage = (long) (maxDamage * amount); + damage -= maxDamage; + if (damage < 0) damage = 0; + GT_MetaGenerated_Tool.setToolDamage(gtCopy, damage); + if (gtMaterial.stackSize > 1) + gtMaterial.stackSize -= 1; + else + super.setInventorySlotContents(1, null); + super.setInventorySlotContents(2, gtCopy); + super.setInventorySlotContents(0, null); + return; + } + } + } + } + } + } + super.setInventorySlotContents(2, null); + } +}
\ No newline at end of file |