From 46abca1bb6254c6cd6d971d4ec8ffd2955b43609 Mon Sep 17 00:00:00 2001 From: Detrav Date: Fri, 25 Nov 2016 21:46:30 +0300 Subject: Updated repair tool --- src/main/java/com/detrav/DetravScannerMod.java | 2 +- .../containers/DetravPortableAnvilContainer.java | 7 ++- .../detrav/items/DetravMetaGeneratedTool01.java | 52 ++++++++++++++++++++++ .../com/detrav/utils/PortableAnvilInventory.java | 20 ++++++--- 4 files changed, 74 insertions(+), 7 deletions(-) (limited to 'src/main/java') diff --git a/src/main/java/com/detrav/DetravScannerMod.java b/src/main/java/com/detrav/DetravScannerMod.java index 29b53fa16d..1d00a570cc 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.28"; + public static final String VERSION = "0.29"; 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 fb18b539f3..8ea738df2c 100644 --- a/src/main/java/com/detrav/gui/containers/DetravPortableAnvilContainer.java +++ b/src/main/java/com/detrav/gui/containers/DetravPortableAnvilContainer.java @@ -24,7 +24,7 @@ public class DetravPortableAnvilContainer extends Container { worldObj = world; inventoryPlayer = inventory; stack = currentEquippedItem; - slots = new PortableAnvilInventory("Item", false, 3); + slots = new PortableAnvilInventory(stack,"Item", false, 3); this.addSlotToContainer(new Slot(this.slots, 0, 27, 47)); this.addSlotToContainer(new Slot(this.slots, 1, 76, 47)); @@ -66,6 +66,11 @@ public class DetravPortableAnvilContainer extends Container { if (stack == null || !DetravMetaGeneratedTool01.INSTANCE.setItemStackToDetravData(stack, itemstack)) { p_75134_1_.dropPlayerItemWithRandomChoice(itemstack, false); } + itemstack = this.slots.getStackInSlot(2); + + if (itemstack != null) { + p_75134_1_.dropPlayerItemWithRandomChoice(itemstack, false); + } //itemstack.writeToNBT() } } diff --git a/src/main/java/com/detrav/items/DetravMetaGeneratedTool01.java b/src/main/java/com/detrav/items/DetravMetaGeneratedTool01.java index 276d67518a..461ca97fe3 100644 --- a/src/main/java/com/detrav/items/DetravMetaGeneratedTool01.java +++ b/src/main/java/com/detrav/items/DetravMetaGeneratedTool01.java @@ -61,6 +61,18 @@ public class DetravMetaGeneratedTool01 extends GT_MetaGenerated_Tool { aList.add(tOffset + 7, "Large: 60-99"); aList.add(tOffset + 8, "Very large: 100-***"); break; + case 2: + int count; + count = ((int)(getLevel(aStack,0)*100)); if(count > 0) {aList.add(tOffset, "Bonus 0 level: +" + count + "%");tOffset++;} + count = ((int)(getLevel(aStack,1)*100)); if(count > 0) {aList.add(tOffset, "Bonus 1 level: +" + count + "%");tOffset++;} + count = ((int)(getLevel(aStack,2)*100)); if(count > 0) {aList.add(tOffset, "Bonus 2 level: +" + count + "%");tOffset++;} + count = ((int)(getLevel(aStack,3)*100)); if(count > 0) {aList.add(tOffset, "Bonus 3 level: +" + count + "%");tOffset++;} + count = ((int)(getLevel(aStack,4)*100)); if(count > 0) {aList.add(tOffset, "Bonus 4 level: +" + count + "%");tOffset++;} + count = ((int)(getLevel(aStack,5)*100)); if(count > 0) {aList.add(tOffset, "Bonus 5 level: +" + count + "%");tOffset++;} + count = ((int)(getLevel(aStack,6)*100)); if(count > 0) {aList.add(tOffset, "Bonus 6 level: +" + count + "%");tOffset++;} + count = ((int)(getLevel(aStack,7)*100)); if(count > 0) {aList.add(tOffset, "Bonus 7 level: +" + count + "%");tOffset++;} + count = ((int)(getLevel(aStack,8)*100)); if(count > 0) {aList.add(tOffset, "Bonus 8 level: +" + count + "%");tOffset++;} + break; case 100: case 101: case 102: @@ -135,6 +147,46 @@ public class DetravMetaGeneratedTool01 extends GT_MetaGenerated_Tool { return false; } + public void setLevelToItemStack(ItemStack aStack, int level, float percent) + { + if(aStack == null) return; + NBTTagCompound aNBT = aStack.getTagCompound(); + if(aNBT == null) { + aNBT = new NBTTagCompound(); + NBTTagCompound detravLevel = new NBTTagCompound(); + aNBT.setTag("DetravLevel", detravLevel); + aStack.setTagCompound(aNBT); + } + { + NBTTagCompound detravLevel = aNBT.getCompoundTag("DetravLevel"); + if (detravLevel == null || hasnolevel(detravLevel)) { + detravLevel = new NBTTagCompound(); + aNBT.setTag("DetravLevel", detravLevel); + } + detravLevel.setFloat("level"+Integer.toString(level),percent); + } + } + + private boolean hasnolevel(NBTTagCompound detravLevel) + { + for(int i=0;i<9;i++) + { + detravLevel.hasKey("level"+Integer.toString(i)); + return false; + } + return true; + } + + public float getLevel(ItemStack aStack, int level) + { + if(aStack == null) return 0; + NBTTagCompound aNBT = aStack.getTagCompound(); + if(aNBT ==null) return 0; + NBTTagCompound detravLevel = aNBT.getCompoundTag("DetravLevel"); + if(detravLevel == null) return 0; + return detravLevel.getFloat("level"+Integer.toString(level)); + } + public boolean setItemStackToDetravData(ItemStack aStack, ItemStack what) { if(aStack == null) return false; diff --git a/src/main/java/com/detrav/utils/PortableAnvilInventory.java b/src/main/java/com/detrav/utils/PortableAnvilInventory.java index e6d56a3464..05502b090e 100644 --- a/src/main/java/com/detrav/utils/PortableAnvilInventory.java +++ b/src/main/java/com/detrav/utils/PortableAnvilInventory.java @@ -1,5 +1,6 @@ package com.detrav.utils; +import com.detrav.items.DetravMetaGeneratedTool01; import gregtech.api.enums.Materials; import gregtech.api.items.GT_MetaGenerated_Tool; import gregtech.api.util.GT_Recipe; @@ -13,10 +14,12 @@ 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_) { + public PortableAnvilInventory(ItemStack me,String p_i1561_1_, boolean p_i1561_2_, int p_i1561_3_) { super(p_i1561_1_, p_i1561_2_, p_i1561_3_); + meStack = me; } + ItemStack meStack; public void setInventorySlotContents(int slot, ItemStack stack) { super.setInventorySlotContents(slot, stack); @@ -37,16 +40,23 @@ public class PortableAnvilInventory extends InventoryBasic { if (fStack.getFluidID() == fluidID) { ItemStack gtCopy = gtTool; //make copy - float amount = fStack.amount * 2f / 1000f; + float amount = fStack.amount / 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; + float flevel = DetravMetaGeneratedTool01.INSTANCE.getLevel(meStack,mat.mToolQuality); + int level = ((int)flevel + 1)*((int)flevel + 1); + long repair = (long) (maxDamage * amount * (flevel+1)); + repair = Math.min(repair,damage); + damage -= repair; + + float delta = ((float)repair) / ((float)maxDamage) / ((float)level); + flevel += delta; + DetravMetaGeneratedTool01.INSTANCE.setLevelToItemStack(meStack,mat.mToolQuality,flevel); + GT_MetaGenerated_Tool.setToolDamage(gtCopy, damage); if (gtMaterial.stackSize > 1) gtMaterial.stackSize -= 1; -- cgit