diff options
4 files changed, 186 insertions, 318 deletions
diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/common/items/BW_Stonage_Rotors.java b/src/main/java/com/github/bartimaeusnek/bartworks/common/items/BW_Stonage_Rotors.java index f2559f3066..92969360bd 100644 --- a/src/main/java/com/github/bartimaeusnek/bartworks/common/items/BW_Stonage_Rotors.java +++ b/src/main/java/com/github/bartimaeusnek/bartworks/common/items/BW_Stonage_Rotors.java @@ -40,6 +40,8 @@ import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.util.ResourceLocation; import net.minecraft.util.StatCollector; +import net.minecraft.nbt.NBTTagCompound; +import ic2.core.util.StackUtil; public class BW_Stonage_Rotors extends Item implements IKineticRotor { @@ -48,10 +50,16 @@ public class BW_Stonage_Rotors extends Item implements IKineticRotor { private final IKineticRotor.GearboxType type; private final ResourceLocation tex; private final String itemTex; + private final int speed; + private final float mRotor; + private final int maxDamageEx; + private int dura; public BW_Stonage_Rotors( int diameter, float eff, + int speed, + float mRotor, int min, int max, int durability, @@ -63,9 +71,12 @@ public class BW_Stonage_Rotors extends Item implements IKineticRotor { this.DiaMinMax[1] = min; this.DiaMinMax[2] = max; this.eff = eff; + this.mRotor = mRotor; + this.speed = speed; this.type = type; this.tex = tex; - this.setMaxDamage(durability); + this.setMaxDamage(30000); + this.maxDamageEx = durability; this.setUnlocalizedName(Name); this.setCreativeTab(MainMod.BWT); this.itemTex = itemTex; @@ -88,8 +99,10 @@ public class BW_Stonage_Rotors extends Item implements IKineticRotor { } info.add(StatCollector.translateToLocal("tooltip.rotor.0.name") + " " + this.DiaMinMax[0]); info.add(StatCollector.translateToLocal("tooltip.rotor.1.name") + " " - + (this.getMaxDamage() - this.getDamage(itemStack)) + "/" + this.getMaxDamage()); + + ((this.getMaxDamageEx() - this.getDamageOfStack(itemStack)) / 100) + "/" + (this.getMaxDamageEx() / 100)); info.add(StatCollector.translateToLocal("tooltip.rotor.2.name") + " " + this.eff); + info.add(StatCollector.translateToLocal("tooltip.rotor.3.name") + " " + this.speed); + info.add(StatCollector.translateToLocal("tooltip.rotor.4.name") + " " + this.mRotor); if (type != null) { info.add(StatCollector.translateToLocal(("ic2.itemrotor.fitsin." + this.isAcceptedType(itemStack, type)))); } @@ -125,4 +138,40 @@ public class BW_Stonage_Rotors extends Item implements IKineticRotor { public boolean isAcceptedType(ItemStack itemStack, IKineticRotor.GearboxType gearboxType) { return gearboxType.equals(this.type); } + + public int getSpeed() { + return speed; + } + + public float getmRotor() { + return mRotor; + } + + public void setDamageForStack(ItemStack stack, int advDmg) { + NBTTagCompound nbtData = StackUtil.getOrCreateNbtData(stack); + nbtData.setInteger("DmgEx", advDmg); + if (this.maxDamageEx > 0) { + double p = (double) advDmg / (double) this.maxDamageEx; + int newDmg = (int) (stack.getMaxDamage() * p); + if (newDmg >= stack.getMaxDamage()) { + newDmg = stack.getMaxDamage() - 1; + } + stack.setItemDamage(newDmg); + this.dura = newDmg; + } + } + + public int getDamageOfStack(ItemStack stack) { + NBTTagCompound nbtData = StackUtil.getOrCreateNbtData(stack); + this.dura = nbtData.getInteger("DmgEx"); + return this.dura; + } + + public int getMaxDamageEx() { + return this.maxDamageEx; + } + + public void damageItemStack(ItemStack stack, int Dmg) { + setDamageForStack(stack, getDamageOfStack(stack) + Dmg); + } } diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/common/loaders/ItemRegistry.java b/src/main/java/com/github/bartimaeusnek/bartworks/common/loaders/ItemRegistry.java index 4b976838c3..95f3943cd8 100644 --- a/src/main/java/com/github/bartimaeusnek/bartworks/common/loaders/ItemRegistry.java +++ b/src/main/java/com/github/bartimaeusnek/bartworks/common/loaders/ItemRegistry.java @@ -71,11 +71,13 @@ public class ItemRegistry { public static final Block ROTORBLOCK = new BW_TileEntityContainer_MachineBlock(Material.wood, BW_RotorBlock.class, "BWRotorBlock"); public static final Item LEATHER_ROTOR = new BW_Stonage_Rotors( - 5, + 7, 0.15f, - 15, - 30, - 2400, + 5, + 1.15f, + 1, + 50, + 10000000, IKineticRotor.GearboxType.WIND, new ResourceLocation(MainMod.MOD_ID, "textures/items/rotors/rotorLeather.png"), "BW_LeatherRotor", @@ -83,29 +85,35 @@ public class ItemRegistry { public static final Item WOOL_ROTOR = new BW_Stonage_Rotors( 7, 0.18f, - 10, - 20, - 1600, + 3, + 1.35f, + 1, + 50, + 9000000, IKineticRotor.GearboxType.WIND, new ResourceLocation(MainMod.MOD_ID, "textures/items/rotors/rotorWool.png"), "BW_WoolRotor", "rotors/itemRotorWool"); public static final Item PAPER_ROTOR = new BW_Stonage_Rotors( - 9, + 7, 0.2f, + 12, + 0.9f, 1, - 10, - 800, + 50, + 800000, IKineticRotor.GearboxType.WIND, new ResourceLocation(MainMod.MOD_ID, "textures/items/rotors/rotorPaper.png"), "BW_PaperRotor", "rotors/itemRotorPaper"); public static final Item COMBINED_ROTOR = new BW_Stonage_Rotors( - 11, + 9, 0.22f, + 7, + 1.05f, 1, 50, - 5800, + 6000000, IKineticRotor.GearboxType.WIND, new ResourceLocation(MainMod.MOD_ID, "textures/items/rotors/rotorCombined.png"), "BW_CombinedRotor", diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/multis/GT_TileEntity_Windmill.java b/src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/multis/GT_TileEntity_Windmill.java index 78ff775ca5..3735c52cba 100644 --- a/src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/multis/GT_TileEntity_Windmill.java +++ b/src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/multis/GT_TileEntity_Windmill.java @@ -29,6 +29,7 @@ import static gregtech.api.enums.GT_Values.V; import com.github.bartimaeusnek.bartworks.MainMod; import com.github.bartimaeusnek.bartworks.client.gui.BW_GUIContainer_Windmill; import com.github.bartimaeusnek.bartworks.common.tileentities.classic.BW_RotorBlock; +import com.github.bartimaeusnek.bartworks.common.items.BW_Stonage_Rotors; import com.github.bartimaeusnek.bartworks.server.container.BW_Container_Windmill; import com.github.bartimaeusnek.bartworks.util.BW_Util; import com.gtnewhorizon.structurelib.StructureLibAPI; @@ -58,6 +59,8 @@ import gregtech.api.util.GT_Utility; import java.util.Arrays; import java.util.HashSet; import java.util.Set; +import java.util.List; +import java.util.ArrayList; import net.minecraft.block.Block; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.entity.player.EntityPlayerMP; @@ -69,6 +72,7 @@ import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntityDispenser; import net.minecraft.util.IIcon; import net.minecraft.util.ResourceLocation; +import ic2.api.item.IKineticRotor; public class GT_TileEntity_Windmill extends GT_MetaTileEntity_EnhancedMultiBlockBase<GT_TileEntity_Windmill> implements ISurvivalConstructable { @@ -81,6 +85,7 @@ public class GT_TileEntity_Windmill extends GT_MetaTileEntity_EnhancedMultiBlock private BW_RotorBlock rotorBlock; private int mDoor = 0; private int mHardenedClay = 0; + private int mMulti = 16; public GT_TileEntity_Windmill(int aID, String aName, String aNameRegional) { super(aID, aName, aNameRegional); @@ -136,6 +141,9 @@ public class GT_TileEntity_Windmill extends GT_MetaTileEntity_EnhancedMultiBlock tt.addMachineType("Windmill") .addInfo("Controller block for the Windmill") .addInfo("A primitive Grinder powered by Kinetic energy") + .addInfo("Speed and output will be affected by wind speed, recipe and rotor") + .addInfo("Please use the Primitive Rotor") + .addInfo("Macerates 16 items at a time") .addInfo("The structure is too complex!") .addInfo("Follow the StructureLib hologram projector to build the main structure.") .addSeparator() @@ -159,6 +167,7 @@ public class GT_TileEntity_Windmill extends GT_MetaTileEntity_EnhancedMultiBlock @Override public boolean onRunningTick(ItemStack aStack) { if (this.mMaxProgresstime > 0) this.mProgresstime += this.rotorBlock.getGrindPower(); + if (!rotorBlock.rotorSlot.isEmpty()) this.setRotorDamage(rotorBlock, this.rotorBlock.getGrindPower()); return this.rotorBlock.getGrindPower() > 0; } @@ -167,275 +176,97 @@ public class GT_TileEntity_Windmill extends GT_MetaTileEntity_EnhancedMultiBlock return true; } - public boolean recipe_fallback(ItemStack aStack) { - // sight... fallback to the macerator recipes - GT_Recipe.GT_Recipe_Map tMap = GT_Recipe.GT_Recipe_Map.sMaceratorRecipes; - GT_Recipe tRecipe = tMap.findRecipe(this.getBaseMetaTileEntity(), false, false, V[1], null, aStack); - if (tRecipe == null) return false; - if (tRecipe.getOutput(0) != null) { - // Decrease input stack by appropriate amount (Not always 1) - tRecipe.isRecipeInputEqual(true, null, aStack); - this.mOutputItems[0] = tRecipe.getOutput(0); - - if (new XSTR().nextInt(2) == 0) { - if (tRecipe.getOutput(1) != null) this.mOutputItems[1] = tRecipe.getOutput(1); - else if (!BW_Util.checkStackAndPrefix(this.mOutputItems[0]) - || !(BW_Util.checkStackAndPrefix(this.mOutputItems[0]) - && GT_OreDictUnificator.getAssociation(this.mOutputItems[0]) - .mMaterial - .mMaterial - .mSubTags - .contains(SubTag.METAL) - || BW_Util.checkStackAndPrefix(this.mOutputItems[0]) - && GT_OreDictUnificator.getAssociation(this.mOutputItems[0]) - .mMaterial - .mMaterial - .mSubTags - .contains(SubTag.CRYSTAL) - || BW_Util.checkStackAndPrefix(this.mOutputItems[0]) - && GT_OreDictUnificator.getAssociation(this.mOutputItems[0]) - .mMaterial - .mMaterial - .mSubTags - .contains(SubTag.CRYSTALLISABLE)) - || BW_Util.checkStackAndPrefix(this.mOutputItems[0]) - && GT_OreDictUnificator.getAssociation(this.mOutputItems[0]).mMaterial.mMaterial - == Materials.Flint - || BW_Util.checkStackAndPrefix(this.mOutputItems[0]) - && GT_OreDictUnificator.getAssociation(this.mOutputItems[0]).mMaterial.mMaterial - == Materials.Sugar - || BW_Util.checkStackAndPrefix(this.mOutputItems[0]) - && GT_OreDictUnificator.getAssociation(this.mOutputItems[0]).mMaterial.mMaterial - == Materials.Wheat - || BW_Util.checkStackAndPrefix(this.mOutputItems[0]) - && GT_OreDictUnificator.getAssociation(this.mOutputItems[0]).mMaterial.mMaterial - == Materials.Wood - || BW_Util.checkStackAndPrefix(this.mOutputItems[0]) - && GT_OreDictUnificator.getAssociation(this.mOutputItems[0]).mMaterial.mMaterial - == Materials.Ash - || BW_Util.checkStackAndPrefix(this.mOutputItems[0]) - && GT_OreDictUnificator.getAssociation(this.mOutputItems[0]).mMaterial.mMaterial - == Materials.Snow - || BW_Util.checkStackAndPrefix(this.mOutputItems[0]) - && GT_OreDictUnificator.getAssociation(this.mOutputItems[0]).mMaterial.mMaterial - == Materials.Stone - || BW_Util.checkStackAndPrefix(this.mOutputItems[0]) - && GT_OreDictUnificator.getAssociation(this.mOutputItems[0]).mMaterial.mMaterial - == Materials.MeatRaw - || BW_Util.checkStackAndPrefix(this.mOutputItems[0]) - && GT_OreDictUnificator.getAssociation(this.mOutputItems[0]).mMaterial.mMaterial - == Materials.MeatCooked) this.mOutputItems[1] = tRecipe.getOutput(0); - } - } - this.mMaxProgresstime = (tRecipe.mDuration * 2 * 100); - return true; - } - @Override public boolean doRandomMaintenanceDamage() { return true; } - private boolean hardOverride(int maxProgresstime, boolean randomise, ItemStack input, ItemStack... outputs) { - input.stackSize -= 1; - this.mMaxProgresstime = maxProgresstime; - if (randomise) { - if (localRandomInstance.nextInt(2) == 0) this.mOutputItems[0] = outputs[0]; - else this.mOutputItems[0] = outputs[1]; - } else { - this.mOutputItems[0] = outputs[0]; - if (outputs.length == 2) this.mOutputItems[1] = outputs[1]; - } - return true; + private float[] multiplierRecipe(ItemStack itemStack) { + //will return max and min value of the multiplier, the average of these is used to calculate the multiplier. + if (itemStack.getItem().equals(Items.wheat)) return new float[] {1.13f, 1.5f}; + else if (itemStack.getItem().equals(Items.bone) + || Block.getBlockFromItem(itemStack.getItem()).equals(Blocks.glowstone) + || Block.getBlockFromItem(itemStack.getItem()).equals(Blocks.pumpkin)) return new float[] {0.8f, 1f}; + else if (Block.getBlockFromItem(itemStack.getItem()).equals(Blocks.gravel) + || Block.getBlockFromItem(itemStack.getItem()).equals(Blocks.cobblestone) + || Block.getBlockFromItem(itemStack.getItem()).equals(Blocks.stone) + || Block.getBlockFromItem(itemStack.getItem()).equals(Blocks.sandstone) + || Block.getBlockFromItem(itemStack.getItem()).equals(Blocks.clay) + || Block.getBlockFromItem(itemStack.getItem()).equals(Blocks.hardened_clay) + || Block.getBlockFromItem(itemStack.getItem()).equals(Blocks.stained_hardened_clay) + || Block.getBlockFromItem(itemStack.getItem()).equals(Blocks.wool) + || Block.getBlockFromItem(itemStack.getItem()).equals(Blocks.netherrack) + || Block.getBlockFromItem(itemStack.getItem()).equals(Blocks.log) + || Block.getBlockFromItem(itemStack.getItem()).equals(Blocks.log2)) return new float[] {1f, 1.5f}; + else if (GT_OreDictUnificator.getAssociation(itemStack) == null + || GT_OreDictUnificator.getAssociation(itemStack).mPrefix == null + || GT_OreDictUnificator.getAssociation(itemStack).mMaterial == null + || GT_OreDictUnificator.getAssociation(itemStack).mMaterial.mMaterial == null + || GT_OreDictUnificator.getAssociation(itemStack).mMaterial.mMaterial.getDust(1) == null) return new float[] {1f, 1f}; + else if (OrePrefixes.ore.equals(GT_OreDictUnificator.getAssociation(itemStack).mPrefix) + || OrePrefixes.oreNetherrack.equals(GT_OreDictUnificator.getAssociation(itemStack).mPrefix) + || OrePrefixes.oreEndstone.equals(GT_OreDictUnificator.getAssociation(itemStack).mPrefix) + || OrePrefixes.oreBlackgranite.equals(GT_OreDictUnificator.getAssociation(itemStack).mPrefix) + || OrePrefixes.oreRedgranite.equals(GT_OreDictUnificator.getAssociation(itemStack).mPrefix) + || OrePrefixes.oreMarble.equals(GT_OreDictUnificator.getAssociation(itemStack).mPrefix) + || OrePrefixes.oreBasalt.equals(GT_OreDictUnificator.getAssociation(itemStack).mPrefix)) return new float[] {0.5f, 1f}; + else if (OrePrefixes.stone.equals(GT_OreDictUnificator.getAssociation(itemStack).mPrefix) + || OrePrefixes.stoneBricks.equals(GT_OreDictUnificator.getAssociation(itemStack).mPrefix) + || OrePrefixes.stoneChiseled.equals(GT_OreDictUnificator.getAssociation(itemStack).mPrefix) + || OrePrefixes.stoneCobble.equals(GT_OreDictUnificator.getAssociation(itemStack).mPrefix) + || OrePrefixes.stoneCracked.equals(GT_OreDictUnificator.getAssociation(itemStack).mPrefix) + || OrePrefixes.stoneMossy.equals(GT_OreDictUnificator.getAssociation(itemStack).mPrefix) + || OrePrefixes.stoneMossyBricks.equals(GT_OreDictUnificator.getAssociation(itemStack).mPrefix) + || OrePrefixes.stoneSmooth.equals(GT_OreDictUnificator.getAssociation(itemStack).mPrefix) + || OrePrefixes.cobblestone.equals(GT_OreDictUnificator.getAssociation(itemStack).mPrefix)) return new float[] {1f, 1.5f}; + return new float[] {1f, 1f}; } @Override public boolean checkRecipe(ItemStack itemStack) { - if (itemStack == null || itemStack.getItem() == null) return false; if (this.mOutputItems == null) this.mOutputItems = new ItemStack[2]; - // Override Recipes that doesnt quite work well with OreUnificator - // Items - if (itemStack.getItem().equals(Items.wheat)) { - return hardOverride( - 30000, - false, - itemStack, - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Wheat, 1L), - GT_OreDictUnificator.get(OrePrefixes.dustSmall, Materials.Wheat, 1L)); - } else if (itemStack.getItem().equals(Items.bone)) { - return hardOverride( - 30000, true, itemStack, new ItemStack(Items.dye, 4, 15), new ItemStack(Items.dye, 3, 15)); - } - // Blocks - else if (Block.getBlockFromItem(itemStack.getItem()).equals(Blocks.gravel)) { - return hardOverride(60000, true, itemStack, new ItemStack(Items.flint, 2), new ItemStack(Items.flint)); - } else if (Block.getBlockFromItem(itemStack.getItem()).equals(Blocks.cobblestone) - || Block.getBlockFromItem(itemStack.getItem()).equals(Blocks.stone)) { - return hardOverride( - 120000, - true, - itemStack, - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Stone, 2L), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Stone, 1L)); - } else if (Block.getBlockFromItem(itemStack.getItem()).equals(Blocks.sandstone)) { - return hardOverride(120000, true, itemStack, new ItemStack(Blocks.sand, 3), new ItemStack(Blocks.sand, 2)); - } else if (Block.getBlockFromItem(itemStack.getItem()).equals(Blocks.clay) - || Block.getBlockFromItem(itemStack.getItem()).equals(Blocks.hardened_clay) - || Block.getBlockFromItem(itemStack.getItem()).equals(Blocks.stained_hardened_clay)) { - return hardOverride(120000, true, itemStack, Materials.Clay.getDust(2), Materials.Clay.getDust(1)); - } else if (Block.getBlockFromItem(itemStack.getItem()).equals(Blocks.redstone_block)) { - return hardOverride(120000, false, itemStack, Materials.Redstone.getDust(9)); - } else if (Block.getBlockFromItem(itemStack.getItem()).equals(Blocks.glass)) { - return hardOverride( - 120000, false, itemStack, (GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Glass, 1L))); - } else if (Block.getBlockFromItem(itemStack.getItem()).equals(Blocks.wool)) { - return hardOverride( - 120000, true, itemStack, new ItemStack(Items.string, 3), new ItemStack(Items.string, 2)); - } else if (Block.getBlockFromItem(itemStack.getItem()).equals(Blocks.glowstone)) { - return hardOverride( - 120000, - true, - itemStack, - new ItemStack(Items.glowstone_dust, 4), - new ItemStack(Items.glowstone_dust, 3)); - } else if (Block.getBlockFromItem(itemStack.getItem()).equals(Blocks.netherrack)) { - return hardOverride( - 120000, - true, - itemStack, - (GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Netherrack, 2L)), - (GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Netherrack, 1L))); - } else if (Block.getBlockFromItem(itemStack.getItem()).equals(Blocks.log)) { - return hardOverride( - 120000, - true, - itemStack, - (GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Wood, 12L)), - (GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Wood, 6L))); - } else if (Block.getBlockFromItem(itemStack.getItem()).equals(Blocks.log2)) { - return hardOverride( - 120000, - true, - itemStack, - (GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Wood, 12L)), - (GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Wood, 6L))); - } else if (Block.getBlockFromItem(itemStack.getItem()).equals(Blocks.pumpkin)) { - return hardOverride( - 30000, - true, - itemStack, - new ItemStack(Items.pumpkin_seeds, 2), - new ItemStack(Items.pumpkin_seeds, 1)); - } else if (Block.getBlockFromItem(itemStack.getItem()).equals(Blocks.melon_block)) { - return hardOverride( - 30000, true, itemStack, new ItemStack(Items.melon_seeds, 2), new ItemStack(Items.melon_seeds, 1)); + GT_Recipe.GT_Recipe_Map tMap = GT_Recipe.GT_Recipe_Map.sMaceratorRecipes; + GT_Recipe tRecipe = tMap.findRecipe(this.getBaseMetaTileEntity(), false, false, V[1], null, itemStack); + if (tRecipe == null) { + return false; } - // null checks for GT shit - if (GT_OreDictUnificator.getAssociation(itemStack) == null - || GT_OreDictUnificator.getAssociation(itemStack).mPrefix == null - || GT_OreDictUnificator.getAssociation(itemStack).mMaterial == null - || GT_OreDictUnificator.getAssociation(itemStack).mMaterial.mMaterial == null - || GT_OreDictUnificator.getAssociation(itemStack) - .mMaterial - .mMaterial - .getDust(1) - == null) return this.recipe_fallback(itemStack); // fallback for all non-unificated Items - - // Ore Unificator shit for balance - if (OrePrefixes.ingot.equals(GT_OreDictUnificator.getAssociation(itemStack).mPrefix) - || OrePrefixes.gem.equals(GT_OreDictUnificator.getAssociation(itemStack).mPrefix)) { - return hardOverride( - 90000, - false, - itemStack, - (GT_OreDictUnificator.get( - OrePrefixes.dust, GT_OreDictUnificator.getAssociation(itemStack).mMaterial.mMaterial, 1L))); - } else if (OrePrefixes.ore.equals(GT_OreDictUnificator.getAssociation(itemStack).mPrefix)) { - return hardOverride( - 120000, - false, - itemStack, - (GT_OreDictUnificator.get( - OrePrefixes.crushed, - GT_OreDictUnificator.getAssociation(itemStack).mMaterial.mMaterial, - 1L))); - } else if (OrePrefixes.nugget.equals(GT_OreDictUnificator.getAssociation(itemStack).mPrefix)) { - return hardOverride( - 30000, - false, - itemStack, - (GT_OreDictUnificator.get( - OrePrefixes.dustTiny, - GT_OreDictUnificator.getAssociation(itemStack).mMaterial.mMaterial, - 1L))); - } else if (OrePrefixes.crushed.equals(GT_OreDictUnificator.getAssociation(itemStack).mPrefix)) { - return hardOverride( - 60000, - false, - itemStack, - (GT_OreDictUnificator.get( - OrePrefixes.dustImpure, - GT_OreDictUnificator.getAssociation(itemStack).mMaterial.mMaterial, - 1L))); - } else if (OrePrefixes.crushedPurified.equals(GT_OreDictUnificator.getAssociation(itemStack).mPrefix)) { - return hardOverride( - 60000, - false, - itemStack, - (GT_OreDictUnificator.get( - OrePrefixes.dustPure, - GT_OreDictUnificator.getAssociation(itemStack).mMaterial.mMaterial, - 1L))); - } else if (OrePrefixes.crushedCentrifuged.equals(GT_OreDictUnificator.getAssociation(itemStack).mPrefix)) { - return hardOverride( - 60000, - false, - itemStack, - (GT_OreDictUnificator.get( - OrePrefixes.dust, GT_OreDictUnificator.getAssociation(itemStack).mMaterial.mMaterial, 1L))); - } else if (OrePrefixes.block.equals(GT_OreDictUnificator.getAssociation(itemStack).mPrefix)) { - return hardOverride( - 120000, - false, - itemStack, - (GT_OreDictUnificator.get( - OrePrefixes.dust, - GT_OreDictUnificator.getAssociation(itemStack).mMaterial.mMaterial, - (GT_OreDictUnificator.getAssociation(itemStack) - .mMaterial - .mMaterial - .mSubTags - .contains(SubTag.METAL) - || GT_OreDictUnificator.getAssociation(itemStack) - .mMaterial - .mMaterial - .mSubTags - .contains(SubTag.CRYSTAL)) - ? 9L - : 1L))); - } else if (OrePrefixes.stone.equals(GT_OreDictUnificator.getAssociation(itemStack).mPrefix) - || OrePrefixes.stoneBricks.equals(GT_OreDictUnificator.getAssociation(itemStack).mPrefix) - || OrePrefixes.stoneChiseled.equals(GT_OreDictUnificator.getAssociation(itemStack).mPrefix) - || OrePrefixes.stoneCobble.equals(GT_OreDictUnificator.getAssociation(itemStack).mPrefix) - || OrePrefixes.stoneCracked.equals(GT_OreDictUnificator.getAssociation(itemStack).mPrefix) - || OrePrefixes.stoneMossy.equals(GT_OreDictUnificator.getAssociation(itemStack).mPrefix) - || OrePrefixes.stoneMossyBricks.equals(GT_OreDictUnificator.getAssociation(itemStack).mPrefix) - || OrePrefixes.stoneSmooth.equals(GT_OreDictUnificator.getAssociation(itemStack).mPrefix) - || OrePrefixes.cobblestone.equals(GT_OreDictUnificator.getAssociation(itemStack).mPrefix)) { - return hardOverride( - 120000, - true, - itemStack, - (GT_OreDictUnificator.get( - OrePrefixes.dust, GT_OreDictUnificator.getAssociation(itemStack).mMaterial.mMaterial, 2L)), - (GT_OreDictUnificator.get( - OrePrefixes.dust, GT_OreDictUnificator.getAssociation(itemStack).mMaterial.mMaterial, 1L))); + if (tRecipe.getOutput(0) != null) { + // Decrease input stack by appropriate amount (Not always 1) + for (int i = 0; i < this.mMulti; i++) { + if (!tRecipe.isRecipeInputEqual(true, null, itemStack)) { + this.mMulti = i + 1; + break; + } + } + this.updateSlots(); + this.mOutputItems[0] = tRecipe.getOutput(0); + float[] mRecipe = multiplierRecipe(itemStack); + float multiper = Math.min(mRecipe[1], Math.max(mRecipe[0] , + 2f * ((float) Math.sqrt((float)1 / (this.rotorBlock.getWindStrength() + 1))) + * OutputMultiplier(rotorBlock) + * (mRecipe[0] + mRecipe[1]))); + int amount = Math.round(multiper * (this.mOutputItems[0].stackSize * this.mMulti)); + + //Split ItemStack --by gtpp + List<ItemStack> splitStacks = new ArrayList<>(); + while (amount > this.mOutputItems[0].getMaxStackSize()) { + ItemStack tmp = this.mOutputItems[0]; + tmp.stackSize = this.mOutputItems[0].getMaxStackSize(); + amount -= this.mOutputItems[0].getMaxStackSize(); + splitStacks.add(tmp); + } + ItemStack tmp = this.mOutputItems[0]; + tmp.stackSize = amount; + splitStacks.add(tmp); + mOutputItems = splitStacks.toArray(new ItemStack[splitStacks.size()]); } - return this.recipe_fallback(itemStack); // 2nd fallback + this.mMaxProgresstime = (tRecipe.mDuration * 2 * 100 * this.mMulti) / (int) getSpeed(rotorBlock); + this.mMulti = 16; + return true; } @Override @@ -448,6 +279,11 @@ public class GT_TileEntity_Windmill extends GT_MetaTileEntity_EnhancedMultiBlock return new BW_Container_Windmill(aPlayerInventory, aBaseMetaTileEntity); } + @Override + public void stopMachine() { + getBaseMetaTileEntity().disableWorking(); + } + public boolean addDispenserToOutputSet(TileEntity aTileEntity) { if (aTileEntity instanceof TileEntityDispenser) { this.tileEntityDispensers.add((TileEntityDispenser) aTileEntity); @@ -518,57 +354,6 @@ public class GT_TileEntity_Windmill extends GT_MetaTileEntity_EnhancedMultiBlock } @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - this.mProgresstime++; - if (aBaseMetaTileEntity.isServerSide()) { - if (this.mEfficiency < 0) this.mEfficiency = 0; - if (--this.mUpdate == 0 || --this.mStartUpCheck == 0 || this.mStructureChanged) { - checkStructure(true, aBaseMetaTileEntity); - this.mUpdate = 100; - } - if (this.mStartUpCheck < 0) { - if (this.mMachine) { - if (this.mMaxProgresstime > 0) { - if (this.onRunningTick(this.mInventory[1])) { - if (this.mMaxProgresstime > 0 && this.mProgresstime >= this.mMaxProgresstime) { - if (this.mOutputItems != null) - for (ItemStack tStack : this.mOutputItems) - if (tStack != null) { - this.addOutput(tStack); - } - this.mEfficiency = 10000; - this.mOutputItems = new ItemStack[2]; - this.mProgresstime = 0; - this.mMaxProgresstime = 0; - this.mEfficiencyIncrease = 0; - if (aBaseMetaTileEntity.isAllowedToWork()) { - if (this.checkRecipe(this.mInventory[1])) this.updateSlots(); - } - } - } - } else { - if (aTick % 100 == 0 - || aBaseMetaTileEntity.hasWorkJustBeenEnabled() - || aBaseMetaTileEntity.hasInventoryBeenModified()) { - if (aBaseMetaTileEntity.isAllowedToWork()) { - if (this.checkRecipe(this.mInventory[1])) this.updateSlots(); - } - } - } - } else { - // this.mMachine = this.checkMachine(aBaseMetaTileEntity, this.mInventory[1]); - return; - } - } else { - this.stopMachine(); - } - } - aBaseMetaTileEntity.setErrorDisplayID( - (aBaseMetaTileEntity.getErrorDisplayID() & ~127) | (this.mMachine ? 0 : 64)); - aBaseMetaTileEntity.setActive(this.mMaxProgresstime > 0); - } - - @Override public int getCurrentEfficiency(ItemStack itemStack) { return 10000; } @@ -701,4 +486,28 @@ public class GT_TileEntity_Windmill extends GT_MetaTileEntity_EnhancedMultiBlock return survivialBuildPiece( STRUCTURE_PIECE_MAIN, stackSize, 3, 11, 0, elementBudget, source, actor, false, true); } + + public float OutputMultiplier(BW_RotorBlock rotorBlock) { + try { + return ((BW_Stonage_Rotors) rotorBlock.rotorSlot.get().getItem()).getmRotor(); + } catch (Exception e){ + return 1f; + } + } + + public int getSpeed(BW_RotorBlock rotorBlock) { + try { + return ((BW_Stonage_Rotors) rotorBlock.rotorSlot.get().getItem()).getSpeed(); + } catch (Exception e){ + return 1; + } + } + + public void setRotorDamage(BW_RotorBlock rotorBlock, int damage) { + try { + ((BW_Stonage_Rotors) rotorBlock.rotorSlot.get().getItem()).damageItemStack(rotorBlock.rotorSlot.get() , damage); + } catch (Exception e){ + rotorBlock.rotorSlot.damage(damage, false); + } + } } diff --git a/src/main/resources/assets/bartworks/lang/en_US.lang b/src/main/resources/assets/bartworks/lang/en_US.lang index 951ceca7dd..5fbbd79986 100644 --- a/src/main/resources/assets/bartworks/lang/en_US.lang +++ b/src/main/resources/assets/bartworks/lang/en_US.lang @@ -75,6 +75,8 @@ tooltip.windmeter.8.name=The wind here seems to be tooltip.rotor.0.name=Diameter: tooltip.rotor.1.name=Durability: tooltip.rotor.2.name=Efficiency: +tooltip.rotor.3.name=Speed: +tooltip.rotor.4.name=Output: tooltip.cp.0.name=Has Circuit inside? tooltip.bw.0.name=Added by |