aboutsummaryrefslogtreecommitdiff
path: root/src/Java/miscutil/xmod/ic2
diff options
context:
space:
mode:
Diffstat (limited to 'src/Java/miscutil/xmod/ic2')
-rw-r--r--src/Java/miscutil/xmod/ic2/HANDLER_IC2.java30
-rw-r--r--src/Java/miscutil/xmod/ic2/block/RTGGenerator/BlockRTG.java187
-rw-r--r--src/Java/miscutil/xmod/ic2/block/RTGGenerator/TileEntityRTG.java94
-rw-r--r--src/Java/miscutil/xmod/ic2/block/RTGGenerator/gui/CONTAINER_RadioThermalGenerator.java98
-rw-r--r--src/Java/miscutil/xmod/ic2/block/RTGGenerator/gui/GUI_RadioThermalGenerator.java49
-rw-r--r--src/Java/miscutil/xmod/ic2/block/kieticgenerator/IC2_BlockKineticGenerator.java76
-rw-r--r--src/Java/miscutil/xmod/ic2/block/kieticgenerator/IC2_TEComponent.java48
-rw-r--r--src/Java/miscutil/xmod/ic2/block/kieticgenerator/container/ContainerKineticWindgenerator.java27
-rw-r--r--src/Java/miscutil/xmod/ic2/block/kieticgenerator/container/IC2_ContainerBase.java5
-rw-r--r--src/Java/miscutil/xmod/ic2/block/kieticgenerator/gui/GuiKineticWindGenerator.java76
-rw-r--r--src/Java/miscutil/xmod/ic2/block/kieticgenerator/tileentity/TileEntityKineticWindGenerator.java392
-rw-r--r--src/Java/miscutil/xmod/ic2/item/IC2_ItemGradual.java41
-rw-r--r--src/Java/miscutil/xmod/ic2/item/IC2_ItemGradualInteger.java53
-rw-r--r--src/Java/miscutil/xmod/ic2/item/IC2_ItemIC2.java104
-rw-r--r--src/Java/miscutil/xmod/ic2/item/IC2_Items.java72
-rw-r--r--src/Java/miscutil/xmod/ic2/item/RotorBase.java99
-rw-r--r--src/Java/miscutil/xmod/ic2/item/RotorIridium.java121
-rw-r--r--src/Java/miscutil/xmod/ic2/recipe/RECIPE_IC2.java151
18 files changed, 1723 insertions, 0 deletions
diff --git a/src/Java/miscutil/xmod/ic2/HANDLER_IC2.java b/src/Java/miscutil/xmod/ic2/HANDLER_IC2.java
new file mode 100644
index 0000000000..fd348eef69
--- /dev/null
+++ b/src/Java/miscutil/xmod/ic2/HANDLER_IC2.java
@@ -0,0 +1,30 @@
+package miscutil.xmod.ic2;
+
+import ic2.core.init.InternalName;
+import miscutil.core.lib.LoadedMods;
+import miscutil.xmod.ic2.block.RTGGenerator.BlockRTG;
+import miscutil.xmod.ic2.item.IC2_Items;
+import miscutil.xmod.ic2.recipe.RECIPE_IC2;
+
+public class HANDLER_IC2{
+
+ public static void preInit() {
+ if (LoadedMods.IndustrialCraft2){
+ IC2_Items.register();
+ new BlockRTG(InternalName.blockGenerator);
+ }
+ }
+
+ public static void init() {
+ if (LoadedMods.IndustrialCraft2){
+
+ }
+ }
+
+ public static void postInit() {
+ if (LoadedMods.IndustrialCraft2){
+ RECIPE_IC2.initRecipes();
+ }
+ }
+
+}
diff --git a/src/Java/miscutil/xmod/ic2/block/RTGGenerator/BlockRTG.java b/src/Java/miscutil/xmod/ic2/block/RTGGenerator/BlockRTG.java
new file mode 100644
index 0000000000..bda119af5c
--- /dev/null
+++ b/src/Java/miscutil/xmod/ic2/block/RTGGenerator/BlockRTG.java
@@ -0,0 +1,187 @@
+package miscutil.xmod.ic2.block.RTGGenerator;
+
+import ic2.core.IC2;
+import ic2.core.Ic2Items;
+import ic2.core.block.BlockMultiID;
+import ic2.core.block.TileEntityBlock;
+import ic2.core.block.generator.tileentity.TileEntityKineticGenerator;
+import ic2.core.block.generator.tileentity.TileEntityRTGenerator;
+import ic2.core.block.reactor.tileentity.TileEntityNuclearReactorElectric;
+import ic2.core.init.InternalName;
+import ic2.core.item.block.ItemGenerator;
+
+import java.util.Random;
+
+import miscutil.xmod.ic2.block.kieticgenerator.tileentity.TileEntityKineticWindGenerator;
+import miscutil.xmod.ic2.item.IC2_Items;
+import net.minecraft.block.material.Material;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.item.EnumRarity;
+import net.minecraft.item.ItemStack;
+import net.minecraft.tileentity.TileEntity;
+import net.minecraft.world.World;
+
+import org.apache.commons.lang3.mutable.MutableObject;
+
+import cpw.mods.fml.common.registry.GameRegistry;
+import cpw.mods.fml.relauncher.Side;
+import cpw.mods.fml.relauncher.SideOnly;
+
+public class BlockRTG
+ extends BlockMultiID
+{
+ public BlockRTG(InternalName internalName1)
+ {
+ super(internalName1, Material.iron, ItemGenerator.class);
+
+ setHardness(3.0F);
+ setStepSound(soundTypeMetal);
+
+ IC2_Items.blockRTG = new ItemStack(this, 1, 0);
+ IC2_Items.blockKineticGenerator = new ItemStack(this, 1, 1);
+
+ GameRegistry.registerTileEntity(TileEntityRTG.class, "Radioisotope Thermoelectric Generator Mach II");
+ GameRegistry.registerTileEntity(TileEntityKineticWindGenerator.class, "Kinetic Wind Generator Mach II");
+ }
+
+ @Override
+public String getTextureFolder(int id)
+ {
+ return "generator";
+ }
+
+ @Override
+public int damageDropped(int meta)
+ {
+ switch (meta)
+ {
+ case 2:
+ return 2;
+ }
+ return 0;
+ }
+
+ @Override
+public Class<? extends TileEntity> getTeClass(int meta, MutableObject<Class<?>[]> ctorArgTypes, MutableObject<Object[]> ctorArgs)
+ {
+ try
+ {
+ switch (meta)
+ {
+ case 0:
+ return TileEntityRTGenerator.class;
+ case 1:
+ return TileEntityKineticGenerator.class;
+ }
+ }
+ catch (Exception e)
+ {
+ throw new RuntimeException(e);
+ }
+ return null;
+ }
+
+ /*
+ *
+ * {
+ case 0:
+ return TileEntityGenerator.class;
+ case 1:
+ return TileEntityGeoGenerator.class;
+ case 2:
+ return TileEntityWaterGenerator.class;
+ case 3:
+ return TileEntitySolarGenerator.class;
+ case 4:
+ return TileEntityWindGenerator.class;
+ case 5:
+ return TileEntityNuclearReactorElectric.class;
+ case 6:
+ return TileEntityRTGenerator.class;
+ case 7:
+ return TileEntitySemifluidGenerator.class;
+ case 8:
+ return TileEntityStirlingGenerator.class;
+ case 9:
+ return TileEntityKineticGenerator.class;
+ }
+ *
+ * (non-Javadoc)
+ * @see net.minecraft.block.Block#randomDisplayTick(net.minecraft.world.World, int, int, int, java.util.Random)
+ */
+
+ @Override
+public void randomDisplayTick(World world, int x, int y, int z, Random random)
+ {
+ if (!IC2.platform.isRendering()) {
+ return;
+ }
+ int meta = world.getBlockMetadata(x, y, z);
+ if ((meta == 0) && (isActive(world, x, y, z)))
+ {
+ TileEntityBlock te = (TileEntityBlock)getOwnTe(world, x, y, z);
+ if (te == null) {
+ return;
+ }
+ int l = te.getFacing();
+ float f = x + 0.5F;
+ float f1 = y + 0.0F + random.nextFloat() * 6.0F / 16.0F;
+ float f2 = z + 0.5F;
+ float f3 = 0.52F;
+ float f4 = random.nextFloat() * 0.6F - 0.3F;
+ switch (l)
+ {
+ case 4:
+ world.spawnParticle("smoke", f - f3, f1, f2 + f4, 0.0D, 0.0D, 0.0D);
+ world.spawnParticle("flame", f - f3, f1, f2 + f4, 0.0D, 0.0D, 0.0D);
+ break;
+ case 5:
+ world.spawnParticle("smoke", f + f3, f1, f2 + f4, 0.0D, 0.0D, 0.0D);
+ world.spawnParticle("flame", f + f3, f1, f2 + f4, 0.0D, 0.0D, 0.0D);
+ break;
+ case 2:
+ world.spawnParticle("smoke", f + f4, f1, f2 - f3, 0.0D, 0.0D, 0.0D);
+ world.spawnParticle("flame", f + f4, f1, f2 - f3, 0.0D, 0.0D, 0.0D);
+ break;
+ case 3:
+ world.spawnParticle("smoke", f + f4, f1, f2 + f3, 0.0D, 0.0D, 0.0D);
+ world.spawnParticle("flame", f + f4, f1, f2 + f3, 0.0D, 0.0D, 0.0D);
+ }
+ }
+ else if (meta == 5)
+ {
+ TileEntityNuclearReactorElectric te = (TileEntityNuclearReactorElectric)getOwnTe(world, x, y, z);
+ if (te == null) {
+ return;
+ }
+ int puffs = te.heat / 1000;
+ if (puffs <= 0) {
+ return;
+ }
+ puffs = world.rand.nextInt(puffs);
+ for (int n = 0; n < puffs; n++) {
+ world.spawnParticle("smoke", x + random.nextFloat(), y + 0.95F, z + random.nextFloat(), 0.0D, 0.0D, 0.0D);
+ }
+ puffs -= world.rand.nextInt(4) + 3;
+ for (int n = 0; n < puffs; n++) {
+ world.spawnParticle("flame", x + random.nextFloat(), y + 1.0F, z + random.nextFloat(), 0.0D, 0.0D, 0.0D);
+ }
+ }
+ }
+
+ @Override
+public boolean onBlockActivated(World world, int i, int j, int k, EntityPlayer entityplayer, int side, float a, float b, float c)
+ {
+ if ((entityplayer.getCurrentEquippedItem() != null) && (entityplayer.getCurrentEquippedItem().isItemEqual(Ic2Items.reactorChamber))) {
+ return false;
+ }
+ return super.onBlockActivated(world, i, j, k, entityplayer, side, a, b, c);
+ }
+
+ @Override
+@SideOnly(Side.CLIENT)
+ public EnumRarity getRarity(ItemStack stack)
+ {
+ return stack.getItemDamage() == 5 ? EnumRarity.uncommon : EnumRarity.common;
+ }
+}
diff --git a/src/Java/miscutil/xmod/ic2/block/RTGGenerator/TileEntityRTG.java b/src/Java/miscutil/xmod/ic2/block/RTGGenerator/TileEntityRTG.java
new file mode 100644
index 0000000000..f3b7949db2
--- /dev/null
+++ b/src/Java/miscutil/xmod/ic2/block/RTGGenerator/TileEntityRTG.java
@@ -0,0 +1,94 @@
+package miscutil.xmod.ic2.block.RTGGenerator;
+
+import ic2.core.ContainerBase;
+import ic2.core.block.generator.tileentity.TileEntityBaseGenerator;
+import ic2.core.block.invslot.InvSlot;
+import miscutil.xmod.ic2.block.RTGGenerator.gui.CONTAINER_RadioThermalGenerator;
+import miscutil.xmod.ic2.block.RTGGenerator.gui.GUI_RadioThermalGenerator;
+import net.minecraft.client.gui.GuiScreen;
+import net.minecraft.entity.player.EntityPlayer;
+
+public class TileEntityRTG
+extends TileEntityBaseGenerator
+{
+ public final InvSlot fuelSlot;
+
+ public TileEntityRTG()
+ {
+ super(Math.round(16.0F * efficiency), 1, 20000);
+
+ this.fuelSlot = this.invSlots.get(0);
+ }
+
+ @Override
+ public int gaugeFuelScaled(int i)
+ {
+ return i;
+ }
+
+ @Override
+ public boolean gainEnergy()
+ {
+ int counter = 0;
+ for (int i = 0; i < this.fuelSlot.size(); i++) {
+ if (this.fuelSlot.get(i) != null) {
+ counter++;
+ }
+ }
+ if (counter == 0) {
+ return false;
+ }
+ this.storage += (int)(Math.pow(2.0D, counter - 1) * efficiency);
+ return true;
+ }
+
+ @Override
+ public boolean gainFuel()
+ {
+ return false;
+ }
+
+ @Override
+ public boolean needsFuel()
+ {
+ return true;
+ }
+
+ @Override
+ public String getInventoryName()
+ {
+ return "RTGenerator";
+ }
+
+
+ public Object getGui(EntityPlayer player, int data)
+ {
+ return new GUI_RadioThermalGenerator(this, player);
+ }
+
+
+ public Object getGuiContainer(EntityPlayer player, int data)
+ {
+ return new CONTAINER_RadioThermalGenerator(this, player);
+ }
+
+ @Override
+ public boolean delayActiveUpdate()
+ {
+ return true;
+ }
+
+ private static final float efficiency = 100;
+
+ @Override
+ public GuiScreen getGui(EntityPlayer arg0, boolean arg1) {
+ getGui(arg0, 1);
+ return null;
+ }
+
+ @Override
+ public ContainerBase<?> getGuiContainer(EntityPlayer arg0) {
+ getGuiContainer(arg0, 1);
+ return null;
+ }
+}
diff --git a/src/Java/miscutil/xmod/ic2/block/RTGGenerator/gui/CONTAINER_RadioThermalGenerator.java b/src/Java/miscutil/xmod/ic2/block/RTGGenerator/gui/CONTAINER_RadioThermalGenerator.java
new file mode 100644
index 0000000000..b70bb6bd8d
--- /dev/null
+++ b/src/Java/miscutil/xmod/ic2/block/RTGGenerator/gui/CONTAINER_RadioThermalGenerator.java
@@ -0,0 +1,98 @@
+package miscutil.xmod.ic2.block.RTGGenerator.gui;
+
+import miscutil.core.lib.CORE;
+import miscutil.core.slots.SlotRTG;
+import miscutil.xmod.ic2.block.RTGGenerator.TileEntityRTG;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.inventory.Container;
+import net.minecraft.inventory.Slot;
+import net.minecraft.item.ItemStack;
+import net.minecraft.util.ResourceLocation;
+import forestry.api.apiculture.IHiveFrame;
+import forestry.core.gui.tooltips.ToolTip;
+
+public class CONTAINER_RadioThermalGenerator extends Container
+{
+ private TileEntityRTG te;
+
+ public static final int INPUT_1 = 0;
+ private final ResourceLocation beeFrameIcon = new ResourceLocation(CORE.MODID, "textures/items/machine_Charger.png");
+ public ToolTip newTip = new ToolTip();
+ public final SlotRTG rtgSlot;
+
+ private int slotID = 0;
+
+ public CONTAINER_RadioThermalGenerator(TileEntityRTG te, EntityPlayer player)
+ {
+ this.te = te;
+ this.rtgSlot = new SlotRTG(te, slotID++, 80, 35);
+
+ //Fuel Slot A
+ rtgSlot.setBackgroundIconTexture(beeFrameIcon);
+
+ addSlotToContainer(rtgSlot);
+
+ //Inventory
+ for (int i = 0; i < 3; i++)
+ {
+ for (int j = 0; j < 9; j++)
+ {
+ addSlotToContainer(new Slot(player.inventory, j + i * 9 + 9, 8 + j * 18, 84 + i * 18));
+ }
+ }
+ // Hotbar
+ for (int i = 0; i < 9; i++)
+ {
+ addSlotToContainer(new Slot(player.inventory, i, 8 + i * 18, 142));
+ }
+ }
+
+ @Override
+ public ItemStack transferStackInSlot(EntityPlayer player, int slotRaw)
+ {
+ ItemStack stack = null;
+ Slot slot = (Slot)inventorySlots.get(slotRaw);
+
+ if (slot != null && slot.getHasStack())
+ {
+ ItemStack stackInSlot = slot.getStack();
+ stack = stackInSlot.copy();
+
+
+ //If your inventory only stores certain instances of Items,
+ //you can implement shift-clicking to your inventory like this:
+ // Check that the item is the right type
+ if (!(stack.getItem() instanceof IHiveFrame)){
+ return null;
+ }
+
+ if (slotRaw < 1)
+ {
+ if (!mergeItemStack(stackInSlot, 3 * 9, inventorySlots.size(), true))
+ {
+ return null;
+ }
+ }
+ else if (!mergeItemStack(stackInSlot, 0, 3 * 9, false))
+ {
+ return null;
+ }
+
+ if (stackInSlot.stackSize == 0)
+ {
+ slot.putStack((ItemStack)null);
+ }
+ else
+ {
+ slot.onSlotChanged();
+ }
+ }
+ return stack;
+ }
+
+ @Override
+ public boolean canInteractWith(EntityPlayer player)
+ {
+ return te.isUseableByPlayer(player);
+ }
+} \ No newline at end of file
diff --git a/src/Java/miscutil/xmod/ic2/block/RTGGenerator/gui/GUI_RadioThermalGenerator.java b/src/Java/miscutil/xmod/ic2/block/RTGGenerator/gui/GUI_RadioThermalGenerator.java
new file mode 100644
index 0000000000..4c9442d56d
--- /dev/null
+++ b/src/Java/miscutil/xmod/ic2/block/RTGGenerator/gui/GUI_RadioThermalGenerator.java
@@ -0,0 +1,49 @@
+package miscutil.xmod.ic2.block.RTGGenerator.gui;
+
+import miscutil.core.lib.CORE;
+import miscutil.xmod.ic2.block.RTGGenerator.TileEntityRTG;
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.gui.inventory.GuiContainer;
+import net.minecraft.client.resources.I18n;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.entity.player.InventoryPlayer;
+import net.minecraft.util.ResourceLocation;
+
+import org.lwjgl.opengl.GL11;
+
+public class GUI_RadioThermalGenerator extends GuiContainer
+{
+ private ResourceLocation texture = new ResourceLocation(CORE.MODID, "textures/gui/machine_Charger.png");
+
+ private InventoryPlayer inventory;
+ private TileEntityRTG te;
+
+ public GUI_RadioThermalGenerator(TileEntityRTG te, EntityPlayer player)
+ {
+ super(new CONTAINER_RadioThermalGenerator(te, player));
+ inventory = player.inventory;
+ this.te = te;
+ }
+
+ @Override
+ protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3)
+ {
+ Minecraft.getMinecraft().renderEngine.bindTexture(texture);
+
+ GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
+
+ int x = (width - xSize) / 2;
+ int y = (height - ySize) / 2;
+
+ drawTexturedModalRect(x, y, 0, 0, xSize, ySize);
+ }
+
+ @Override
+ protected void drawGuiContainerForegroundLayer(int par1, int par2)
+ {
+ fontRendererObj.drawString(I18n.format("Alveary Frame Housing"), (xSize / 2) - (fontRendererObj.getStringWidth(I18n.format("Alveary Frame Housing")) / 2), 6, 4210752, false);
+ fontRendererObj.drawString(I18n.format(inventory.getInventoryName()), 8, ySize - 96 + 2, 4210752);
+ //fontRendererObj.drawString(I18n.format("Charge:"+te.getCharge()+"~"), 8, ySize - 96 + 2, 4210752);
+ //fontRendererObj.drawString(I18n.format("Progress:"+te.getProgress()+"ticks"), 80, ySize - 96 + 2, 4210752);
+ }
+} \ No newline at end of file
diff --git a/src/Java/miscutil/xmod/ic2/block/kieticgenerator/IC2_BlockKineticGenerator.java b/src/Java/miscutil/xmod/ic2/block/kieticgenerator/IC2_BlockKineticGenerator.java
new file mode 100644
index 0000000000..75f4f5f072
--- /dev/null
+++ b/src/Java/miscutil/xmod/ic2/block/kieticgenerator/IC2_BlockKineticGenerator.java
@@ -0,0 +1,76 @@
+package miscutil.xmod.ic2.block.kieticgenerator;
+
+import ic2.core.block.BlockMultiID;
+import ic2.core.block.kineticgenerator.tileentity.TileEntityManualKineticGenerator;
+import ic2.core.block.kineticgenerator.tileentity.TileEntityWindKineticGenerator;
+import ic2.core.init.InternalName;
+import ic2.core.item.block.ItemKineticGenerator;
+import miscutil.core.creative.AddToCreativeTab;
+import net.minecraft.block.Block;
+import net.minecraft.block.material.Material;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.tileentity.TileEntity;
+import net.minecraft.world.World;
+
+import org.apache.commons.lang3.mutable.MutableObject;
+
+import cpw.mods.fml.common.registry.GameRegistry;
+
+public class IC2_BlockKineticGenerator
+ extends BlockMultiID
+{
+ public IC2_BlockKineticGenerator(InternalName internalName1)
+ {
+ super(internalName1, Material.iron, ItemKineticGenerator.class);
+
+ setHardness(3.0F);
+ setStepSound(Block.soundTypeMetal);
+ this.setCreativeTab(AddToCreativeTab.tabMachines);
+
+ GameRegistry.registerTileEntity(TileEntityWindKineticGenerator.class, "Advanced Kinetic Wind Generator");
+
+ }
+
+ @Override
+public String getTextureFolder(int id)
+ {
+ return "kineticgenerator";
+ }
+
+ @Override
+public int damageDropped(int meta)
+ {
+ return meta;
+ }
+
+ @Override
+public Class<? extends TileEntity> getTeClass(int meta, MutableObject<Class<?>[]> ctorArgTypes, MutableObject<Object[]> ctorArgs)
+ {
+ try
+ {
+ switch (meta)
+ {
+ case 0:
+ return TileEntityWindKineticGenerator.class;
+ }
+ }
+ catch (Exception e)
+ {
+ throw new RuntimeException(e);
+ }
+ return null;
+ }
+
+ @Override
+public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer entityPlayer, int side, float a, float b, float c)
+ {
+ if (entityPlayer.isSneaking()) {
+ return false;
+ }
+ TileEntity te = getOwnTe(world, x, y, z);
+ if ((te != null) && ((te instanceof TileEntityManualKineticGenerator))) {
+ return ((TileEntityManualKineticGenerator)te).playerKlicked(entityPlayer);
+ }
+ return super.onBlockActivated(world, x, y, z, entityPlayer, side, a, b, c);
+ }
+}
diff --git a/src/Java/miscutil/xmod/ic2/block/kieticgenerator/IC2_TEComponent.java b/src/Java/miscutil/xmod/ic2/block/kieticgenerator/IC2_TEComponent.java
new file mode 100644
index 0000000000..bd417968d6
--- /dev/null
+++ b/src/Java/miscutil/xmod/ic2/block/kieticgenerator/IC2_TEComponent.java
@@ -0,0 +1,48 @@
+package miscutil.xmod.ic2.block.kieticgenerator;
+
+import ic2.core.block.TileEntityBlock;
+
+import java.io.DataInput;
+import java.io.IOException;
+
+import net.minecraft.block.Block;
+import net.minecraft.entity.player.EntityPlayerMP;
+import net.minecraft.nbt.NBTTagCompound;
+
+public abstract class IC2_TEComponent
+{
+ protected final TileEntityBlock parent;
+
+ public IC2_TEComponent(TileEntityBlock parent)
+ {
+ this.parent = parent;
+ }
+
+ public abstract String getDefaultName();
+
+ public void readFromNbt(NBTTagCompound nbt) {}
+
+ public NBTTagCompound writeToNbt()
+ {
+ return null;
+ }
+
+ public void onLoaded() {}
+
+ public void onUnloaded() {}
+
+ public void onNeighborUpdate(Block srcBlock) {}
+
+ public void onContainerUpdate(String name, EntityPlayerMP player) {}
+
+ public void onNetworkUpdate(DataInput is)
+ throws IOException
+ {}
+
+ public boolean enableWorldTick()
+ {
+ return false;
+ }
+
+ public void onWorldTick() {}
+}
diff --git a/src/Java/miscutil/xmod/ic2/block/kieticgenerator/container/ContainerKineticWindgenerator.java b/src/Java/miscutil/xmod/ic2/block/kieticgenerator/container/ContainerKineticWindgenerator.java
new file mode 100644
index 0000000000..c8c6b05c1e
--- /dev/null
+++ b/src/Java/miscutil/xmod/ic2/block/kieticgenerator/container/ContainerKineticWindgenerator.java
@@ -0,0 +1,27 @@
+package miscutil.xmod.ic2.block.kieticgenerator.container;
+
+import ic2.core.ContainerFullInv;
+import ic2.core.block.kineticgenerator.tileentity.TileEntityWindKineticGenerator;
+import ic2.core.slot.SlotInvSlot;
+
+import java.util.List;
+
+import net.minecraft.entity.player.EntityPlayer;
+
+public class ContainerKineticWindgenerator
+ extends ContainerFullInv<TileEntityWindKineticGenerator>
+{
+ public ContainerKineticWindgenerator(EntityPlayer entityPlayer, TileEntityWindKineticGenerator tileEntity1)
+ {
+ super(entityPlayer, tileEntity1, 166);
+
+ addSlotToContainer(new SlotInvSlot(tileEntity1.rotorSlot, 0, 80, 26));
+ }
+
+ public List<String> getNetworkedFields()
+ {
+ List<String> ret = super.getNetworkedFields();
+ ret.add("windStrength");
+ return ret;
+ }
+}
diff --git a/src/Java/miscutil/xmod/ic2/block/kieticgenerator/container/IC2_ContainerBase.java b/src/Java/miscutil/xmod/ic2/block/kieticgenerator/container/IC2_ContainerBase.java
new file mode 100644
index 0000000000..6892220b06
--- /dev/null
+++ b/src/Java/miscutil/xmod/ic2/block/kieticgenerator/container/IC2_ContainerBase.java
@@ -0,0 +1,5 @@
+package miscutil.xmod.ic2.block.kieticgenerator.container;
+
+public class IC2_ContainerBase {
+
+}
diff --git a/src/Java/miscutil/xmod/ic2/block/kieticgenerator/gui/GuiKineticWindGenerator.java b/src/Java/miscutil/xmod/ic2/block/kieticgenerator/gui/GuiKineticWindGenerator.java
new file mode 100644
index 0000000000..9b816b7f90
--- /dev/null
+++ b/src/Java/miscutil/xmod/ic2/block/kieticgenerator/gui/GuiKineticWindGenerator.java
@@ -0,0 +1,76 @@
+package miscutil.xmod.ic2.block.kieticgenerator.gui;
+
+import ic2.core.IC2;
+import ic2.core.block.kineticgenerator.container.ContainerWindKineticGenerator;
+import ic2.core.block.kineticgenerator.tileentity.TileEntityWindKineticGenerator;
+import ic2.core.util.GuiTooltiphelper;
+import net.minecraft.client.gui.inventory.GuiContainer;
+import net.minecraft.util.ResourceLocation;
+import net.minecraft.util.StatCollector;
+
+import org.lwjgl.opengl.GL11;
+
+import cpw.mods.fml.relauncher.Side;
+import cpw.mods.fml.relauncher.SideOnly;
+
+@SideOnly(Side.CLIENT)
+public class GuiKineticWindGenerator
+ extends GuiContainer
+{
+ public ContainerWindKineticGenerator container;
+ public String name;
+
+ public GuiKineticWindGenerator(ContainerWindKineticGenerator container1)
+ {
+ super(container1);
+
+ this.container = container1;
+ this.name = StatCollector.translateToLocal("ic2.WindKineticGenerator.gui.name");
+ }
+
+ protected void drawGuiContainerForegroundLayer(int par1, int par2)
+ {
+ this.fontRendererObj.drawString(this.name, (this.xSize - this.fontRendererObj.getStringWidth(this.name)) / 2, 6, 4210752);
+ if (((TileEntityWindKineticGenerator)this.container.base).checkrotor())
+ {
+ if (!((TileEntityWindKineticGenerator)this.container.base).rotorspace())
+ {
+ this.fontRendererObj.drawString(StatCollector.translateToLocal("ic2.WindKineticGenerator.gui.rotorspace"), 20, 52, 2157374);
+ }
+ else if ((((TileEntityWindKineticGenerator)this.container.base).checkrotor()) && (!((TileEntityWindKineticGenerator)this.container.base).guiisminWindStrength()))
+ {
+ this.fontRendererObj.drawString(StatCollector.translateToLocal("ic2.WindKineticGenerator.gui.windweak1"), 27, 52, 2157374);
+ this.fontRendererObj.drawString(StatCollector.translateToLocal("ic2.WindKineticGenerator.gui.windweak2"), 24, 69, 2157374);
+ }
+ else
+ {
+ this.fontRendererObj.drawString(StatCollector.translateToLocalFormatted("ic2.WindKineticGenerator.gui.output", new Object[] { Integer.valueOf(((TileEntityWindKineticGenerator)this.container.base).getKuOutput()) }), 55, 52, 2157374);
+ this.fontRendererObj.drawString(((TileEntityWindKineticGenerator)this.container.base).getRotorhealth() + " %", 46, 70, 2157374);
+ if (((TileEntityWindKineticGenerator)this.container.base).guiisoverload())
+ {
+ GuiTooltiphelper.drawAreaTooltip(par1 - this.guiLeft, par2 - this.guiTop, StatCollector.translateToLocal("ic2.WindKineticGenerator.error.overload"), 44, 20, 79, 45);
+ GuiTooltiphelper.drawAreaTooltip(par1 - this.guiLeft, par2 - this.guiTop, StatCollector.translateToLocal("ic2.WindKineticGenerator.error.overload2"), 102, 20, 131, 45);
+ }
+ }
+ }
+ else {
+ this.fontRendererObj.drawString(StatCollector.translateToLocal("ic2.WindKineticGenerator.gui.rotormiss"), 27, 52, 2157374);
+ }
+ }
+
+ protected void drawGuiContainerBackgroundLayer(float f, int x, int y)
+ {
+ GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
+ this.mc.getTextureManager().bindTexture(background);
+ int j = (this.width - this.xSize) / 2;
+ int k = (this.height - this.ySize) / 2;
+ drawTexturedModalRect(j, k, 0, 0, this.xSize, this.ySize);
+ if ((((TileEntityWindKineticGenerator)this.container.base).guiisoverload()) && (((TileEntityWindKineticGenerator)this.container.base).checkrotor()))
+ {
+ drawTexturedModalRect(j + 44, k + 20, 176, 0, 30, 26);
+ drawTexturedModalRect(j + 102, k + 20, 176, 0, 30, 26);
+ }
+ }
+
+ private static final ResourceLocation background = new ResourceLocation(IC2.textureDomain, "textures/gui/GUIWindKineticGenerator.png");
+}
diff --git a/src/Java/miscutil/xmod/ic2/block/kieticgenerator/tileentity/TileEntityKineticWindGenerator.java b/src/Java/miscutil/xmod/ic2/block/kieticgenerator/tileentity/TileEntityKineticWindGenerator.java
new file mode 100644
index 0000000000..076697956d
--- /dev/null
+++ b/src/Java/miscutil/xmod/ic2/block/kieticgenerator/tileentity/TileEntityKineticWindGenerator.java
@@ -0,0 +1,392 @@
+package miscutil.xmod.ic2.block.kieticgenerator.tileentity;
+
+import ic2.api.energy.tile.IKineticSource;
+import ic2.api.item.IKineticWindRotor;
+import ic2.core.ContainerBase;
+import ic2.core.IC2;
+import ic2.core.IHasGui;
+import ic2.core.WorldData;
+import ic2.core.block.invslot.InvSlotConsumableIKineticWindRotor;
+import ic2.core.block.kineticgenerator.container.ContainerWindKineticGenerator;
+import ic2.core.block.kineticgenerator.gui.GuiWindKineticGenerator;
+import ic2.core.block.kineticgenerator.tileentity.TileEntityWindKineticGenerator;
+import ic2.core.network.NetworkManager;
+import ic2.core.util.Util;
+
+import java.util.List;
+import java.util.Vector;
+
+import net.minecraft.block.Block;
+import net.minecraft.client.gui.GuiScreen;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.item.ItemStack;
+import net.minecraft.util.ResourceLocation;
+import net.minecraft.util.StatCollector;
+import net.minecraft.world.ChunkCache;
+import net.minecraftforge.common.util.ForgeDirection;
+import cpw.mods.fml.relauncher.Side;
+import cpw.mods.fml.relauncher.SideOnly;
+
+public class TileEntityKineticWindGenerator
+extends TileEntityWindKineticGenerator
+implements IKineticSource, IHasGui
+{
+ public final InvSlotConsumableIKineticWindRotor rotorSlot;
+ private double windStrength;
+ private int obstructedCrossSection;
+ private int crossSection;
+ private int updateTicker;
+ private float rotationSpeed;
+ private static final double efficiencyRollOffExponent = 2.0D;
+ private static final int nominalRotationPeriod = 500;
+
+ public TileEntityKineticWindGenerator()
+ {
+ this.updateTicker = IC2.random.nextInt(getTickRate());
+ this.rotorSlot = new InvSlotConsumableIKineticWindRotor(this, "rotorslot", 0, 1);
+ }
+
+ @Override
+ public void updateEntity()
+ {
+ super.updateEntity();
+
+ assert (IC2.platform.isSimulating());
+ if (this.updateTicker++ % getTickRate() != 0) {
+ return;
+ }
+ boolean needsInvUpdate = false;
+ if (!this.rotorSlot.isEmpty())
+ {
+ if (checkSpace(1, true) == 0)
+ {
+ if (getActive() != true) {
+ setActive(true);
+ }
+ needsInvUpdate = true;
+ }
+ else
+ {
+ if (getActive()) {
+ setActive(false);
+ }
+ needsInvUpdate = true;
+ }
+ }
+ else
+ {
+ if (getActive()) {
+ setActive(false);
+ }
+ needsInvUpdate = true;
+ }
+ if (getActive())
+ {
+ this.crossSection = (getRotorDiameter() / 2 * 2 * 2 + 1);
+
+ this.crossSection *= this.crossSection;
+ this.obstructedCrossSection = checkSpace(getRotorDiameter() * 3, false);
+ if ((this.obstructedCrossSection > 0) && (this.obstructedCrossSection <= (getRotorDiameter() + 1) / 2)) {
+ this.obstructedCrossSection = 0;
+ } else if (this.obstructedCrossSection < 0) {
+ this.obstructedCrossSection = this.crossSection;
+ }
+ this.windStrength = calcWindStrength();
+
+ float speed = (float)Util.limit((this.windStrength - getMinWindStrength()) / getMaxWindStrength(), 0.0D, 2.0D);
+
+
+ setRotationSpeed(speed*2);
+ if (this.windStrength >= getMinWindStrength()) {
+ if (this.windStrength <= getMaxWindStrength()) {
+ this.rotorSlot.damage(1, false);
+ } else {
+ this.rotorSlot.damage(4, false);
+ }
+ }
+ }
+ }
+
+
+
+ @Override
+ public List<String> getNetworkedFields()
+ {
+ List<String> ret = new Vector<String>(1);
+
+ ret.add("rotationSpeed");
+ ret.add("rotorSlot");
+ ret.addAll(super.getNetworkedFields());
+
+ return ret;
+ }
+
+ @Override
+ public ContainerBase<TileEntityWindKineticGenerator> getGuiContainer(EntityPlayer entityPlayer)
+ {
+ return new ContainerWindKineticGenerator(entityPlayer, this);
+ }
+
+ @Override
+ @SideOnly(Side.CLIENT)
+ public GuiScreen getGui(EntityPlayer entityPlayer, boolean isAdmin)
+ {
+ return new GuiWindKineticGenerator(new ContainerWindKineticGenerator(entityPlayer, this));
+ }
+
+ @Override
+ public boolean facingMatchesDirection(ForgeDirection direction)
+ {
+ return direction.ordinal() == getFacing();
+ }
+
+ @Override
+ public boolean wrenchCanSetFacing(EntityPlayer entityPlayer, int side)
+ {
+ if ((side == 0) || (side == 1)) {
+ return false;
+ }
+ return getFacing() != side;
+ }
+
+ @Override
+ public void setFacing(short side)
+ {
+ super.setFacing(side);
+ }
+
+ @Override
+ public boolean enableUpdateEntity()
+ {
+ return IC2.platform.isSimulating();
+ }
+
+ @Override
+ public String getRotorhealth()
+ {
+ if (!this.rotorSlot.isEmpty()) {
+ return StatCollector.translateToLocalFormatted("ic2.WindKineticGenerator.gui.rotorhealth", new Object[] { Integer.valueOf((int)(100.0F - this.rotorSlot.get().getItemDamage() / this.rotorSlot.get().getMaxDamage() * 100.0F)) });
+ }
+ return "";
+ }
+
+ @Override
+ public int maxrequestkineticenergyTick(ForgeDirection directionFrom)
+ {
+ return getKuOutput();
+ }
+
+ @Override
+ public int requestkineticenergy(ForgeDirection directionFrom, int requestkineticenergy)
+ {
+ if (facingMatchesDirection(directionFrom.getOpposite())) {
+ return Math.min(requestkineticenergy, getKuOutput());
+ }
+ return 0;
+ }
+
+ @Override
+ public String getInventoryName()
+ {
+ return "Advanced Kinetic Wind Generator";
+ }
+
+ @Override
+ public void onGuiClosed(EntityPlayer entityPlayer) {}
+
+ @Override
+ public boolean shouldRenderInPass(int pass)
+ {
+ return pass == 0;
+ }
+
+ @Override
+ public int checkSpace(int length, boolean onlyrotor)
+ {
+ int box = getRotorDiameter() / 2;
+ int lentemp = 0;
+ if (onlyrotor)
+ {
+ length = 1;
+ lentemp = length + 1;
+ }
+ if (!onlyrotor) {
+ box *= 2;
+ }
+ ForgeDirection fwdDir = ForgeDirection.VALID_DIRECTIONS[getFacing()];
+ ForgeDirection rightDir = fwdDir.getRotation(ForgeDirection.DOWN);
+
+ int xMaxDist = Math.abs(length * fwdDir.offsetX + box * rightDir.offsetX);
+
+ int zMaxDist = Math.abs(length * fwdDir.offsetZ + box * rightDir.offsetZ);
+
+
+ ChunkCache chunkCache = new ChunkCache(this.worldObj, this.xCoord - xMaxDist, this.yCoord - box, this.zCoord - zMaxDist, this.xCoord + xMaxDist, this.yCoord + box, this.zCoord + zMaxDist, 0);
+
+
+
+ int ret = 0;
+ for (int up = -box; up <= box; up++)
+ {
+ int y = this.yCoord + up;
+ for (int right = -box; right <= box; right++)
+ {
+ boolean occupied = false;
+ for (int fwd = lentemp - length; fwd <= length; fwd++)
+ {
+ int x = this.xCoord + fwd * fwdDir.offsetX + right * rightDir.offsetX;
+
+ int z = this.zCoord + fwd * fwdDir.offsetZ + right * rightDir.offsetZ;
+
+
+ assert (Math.abs(x - this.xCoord) <= xMaxDist);
+ assert (Math.abs(z - this.zCoord) <= zMaxDist);
+
+ Block block = chunkCache.getBlock(x, y, z);
+ if (!block.isAir(chunkCache, x, y, z))
+ {
+ occupied = true;
+ if (((up != 0) || (right != 0) || (fwd != 0)) && ((chunkCache.getTileEntity(x, y, z) instanceof TileEntityKineticWindGenerator)) && (!onlyrotor)) {
+ return -1;
+ }
+ }
+ }
+ if (occupied) {
+ ret++;
+ }
+ }
+ }
+ return ret;
+ }
+
+ @Override
+ public boolean checkrotor()
+ {
+ return !this.rotorSlot.isEmpty();
+ }
+
+ @Override
+ public boolean rotorspace()
+ {
+ return checkSpace(1, true) == 0;
+ }
+
+ private void setRotationSpeed(float speed)
+ {
+ if (this.rotationSpeed != speed)
+ {
+ this.rotationSpeed = speed;
+ ((NetworkManager)IC2.network.get()).updateTileEntityField(this, "rotationSpeed");
+ }
+ }
+
+ @Override
+ public int getTickRate()
+ {
+ return 32;
+ }
+
+ @Override
+ public double calcWindStrength()
+ {
+ double windStr = WorldData.get(this.worldObj).windSim.getWindAt(this.yCoord);
+
+ windStr *= (1.0D - Math.pow(this.obstructedCrossSection / this.crossSection, 2.0D));
+
+
+ return Math.max(0.0D, windStr);
+ }
+
+ @Override
+ public float getAngle()
+ {
+ if (this.rotationSpeed > 0.0F)
+ {
+ long period = (long) (5.0E+008F / this.rotationSpeed);
+
+
+ return (float)(System.nanoTime() % period) / (float)period * 360.0F;
+ }
+ return 0.0F;
+ }
+
+ @Override
+ public float getefficiency()
+ {
+ ItemStack stack = this.rotorSlot.get();
+ if ((stack != null) && ((stack.getItem() instanceof IKineticWindRotor))) {
+ return (float) (((IKineticWindRotor)stack.getItem()).getEfficiency(stack)*1.5);
+ }
+ return 0.0F;
+ }
+
+ @Override
+ public int getMinWindStrength()
+ {
+ ItemStack stack = this.rotorSlot.get();
+ if ((stack != null) && ((stack.getItem() instanceof IKineticWindRotor))) {
+ return ((IKineticWindRotor)stack.getItem()).getMinWindStrength(stack)/2;
+ }
+ return 0;
+ }
+
+ @Override
+ public int getMaxWindStrength()
+ {
+ ItemStack stack = this.rotorSlot.get();
+ if ((stack != null) && ((stack.getItem() instanceof IKineticWindRotor))) {
+ return ((IKineticWindRotor)stack.getItem()).getMaxWindStrength(stack)*2;
+ }
+ return 0;
+ }
+
+ @Override
+ public int getRotorDiameter()
+ {
+ ItemStack stack = this.rotorSlot.get();
+ if ((stack != null) && ((stack.getItem() instanceof IKineticWindRotor))) {
+ return ((IKineticWindRotor)stack.getItem()).getDiameter(stack)/2;
+ }
+ return 0;
+ }
+
+ @Override
+ public ResourceLocation getRotorRenderTexture()
+ {
+ ItemStack stack = this.rotorSlot.get();
+ if ((stack != null) && ((stack.getItem() instanceof IKineticWindRotor))) {
+ return ((IKineticWindRotor)stack.getItem()).getRotorRenderTexture(stack);
+ }
+ return new ResourceLocation(IC2.textureDomain, "textures/items/rotors/rotorWoodmodel.png");
+ }
+
+ @Override
+ public boolean guiisoverload()
+ {
+ if (this.windStrength > getMaxWindStrength()) {
+ return true;
+ }
+ return false;
+ }
+
+ @Override
+ public boolean guiisminWindStrength()
+ {
+ return this.windStrength >= getMinWindStrength();
+ }
+
+ @Override
+ public int getKuOutput()
+ {
+ if ((this.windStrength >= getMinWindStrength()) && (getActive())) {
+ return (int)(this.windStrength * 50.0D * getefficiency());
+ }
+ return 0;
+ }
+
+ @Override
+ public int getWindStrength()
+ {
+ return (int)this.windStrength;
+ }
+}
diff --git a/src/Java/miscutil/xmod/ic2/item/IC2_ItemGradual.java b/src/Java/miscutil/xmod/ic2/item/IC2_ItemGradual.java
new file mode 100644
index 0000000000..66f40576da
--- /dev/null
+++ b/src/Java/miscutil/xmod/ic2/item/IC2_ItemGradual.java
@@ -0,0 +1,41 @@
+package miscutil.xmod.ic2.item;
+
+import java.util.List;
+
+import miscutil.core.creative.AddToCreativeTab;
+import miscutil.core.item.base.CoreItem;
+import net.minecraft.creativetab.CreativeTabs;
+import net.minecraft.item.EnumRarity;
+import net.minecraft.item.Item;
+import net.minecraft.item.ItemStack;
+import cpw.mods.fml.relauncher.Side;
+import cpw.mods.fml.relauncher.SideOnly;
+
+public class IC2_ItemGradual
+extends CoreItem
+{
+ public IC2_ItemGradual(String internalName)
+ {
+ super(internalName, AddToCreativeTab.tabMachines, 1, 10000, "", EnumRarity.uncommon);
+ setNoRepair();
+ }
+
+ @Override
+ public boolean isDamaged(ItemStack stack)
+ {
+ return getDamage(stack) > 1;
+ }
+
+ @Override
+ public boolean showDurabilityBar(ItemStack stack)
+ {
+ return true;
+ }
+
+ @Override
+ @SideOnly(Side.CLIENT)
+ public void getSubItems(Item item, CreativeTabs tabs, List itemList)
+ {
+ itemList.add(new ItemStack(this, 1, 1));
+ }
+}
diff --git a/src/Java/miscutil/xmod/ic2/item/IC2_ItemGradualInteger.java b/src/Java/miscutil/xmod/ic2/item/IC2_ItemGradualInteger.java
new file mode 100644
index 0000000000..28fce8fc6e
--- /dev/null
+++ b/src/Java/miscutil/xmod/ic2/item/IC2_ItemGradualInteger.java
@@ -0,0 +1,53 @@
+package miscutil.xmod.ic2.item;
+
+import ic2.api.item.ICustomDamageItem;
+import ic2.core.util.StackUtil;
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NBTTagCompound;
+
+public class IC2_ItemGradualInteger
+ extends IC2_ItemGradual
+ implements ICustomDamageItem
+{
+ private final int maxDmg;
+
+ public IC2_ItemGradualInteger(String internalName, int maxdmg)
+ {
+ super(internalName);
+
+ this.maxDmg = maxdmg;
+ }
+
+ @Override
+public int getCustomDamage(ItemStack stack)
+ {
+ NBTTagCompound nbt = StackUtil.getOrCreateNbtData(stack);
+ return nbt.getInteger("advDmg");
+ }
+
+ @Override
+public int getMaxCustomDamage(ItemStack stack)
+ {
+ return this.maxDmg;
+ }
+
+ @Override
+public void setCustomDamage(ItemStack stack, int damage)
+ {
+ NBTTagCompound nbt = StackUtil.getOrCreateNbtData(stack);
+ nbt.setInteger("advDmg", 0);
+
+ int maxStackDamage = stack.getMaxDamage();
+ if (maxStackDamage > 2) {
+ //stack.setItemDamage(1 + (int)Util.map(damage, this.maxDmg, maxStackDamage - 2));
+ }
+ }
+
+ @Override
+public boolean applyCustomDamage(ItemStack stack, int damage, EntityLivingBase src)
+ {
+ setCustomDamage(stack, getCustomDamage(stack) + damage);
+ return true;
+ }
+}
diff --git a/src/Java/miscutil/xmod/ic2/item/IC2_ItemIC2.java b/src/Java/miscutil/xmod/ic2/item/IC2_ItemIC2.java
new file mode 100644
index 0000000000..0c6a28a4bc
--- /dev/null
+++ b/src/Java/miscutil/xmod/ic2/item/IC2_ItemIC2.java
@@ -0,0 +1,104 @@
+package miscutil.xmod.ic2.item;
+
+import miscutil.core.creative.AddToCreativeTab;
+import miscutil.core.lib.CORE;
+import net.minecraft.item.EnumRarity;
+import net.minecraft.item.Item;
+import net.minecraft.item.ItemStack;
+import net.minecraft.util.IIcon;
+import net.minecraft.util.StatCollector;
+import cpw.mods.fml.common.registry.GameRegistry;
+import cpw.mods.fml.relauncher.Side;
+import cpw.mods.fml.relauncher.SideOnly;
+
+public class IC2_ItemIC2
+extends Item
+{
+ public IC2_ItemIC2(String internalName)
+ {
+ setUnlocalizedName(internalName);
+ setCreativeTab(AddToCreativeTab.tabMachines);
+ setTextureName(CORE.MODID + ":" + internalName);
+
+ GameRegistry.registerItem(this, internalName);
+ }
+
+ public String getTextureFolder()
+ {
+ return null;
+ }
+
+ /* public String getTextureName(int index)
+ {
+ if ((!this.hasSubtypes) && (index > 0)) {
+ return null;
+ }
+ String name = getUnlocalizedName(new ItemStack(this, 1, index));
+ if ((name != null) && (name.length() > 4)) {
+ return name.substring(4);
+ }
+ return name;
+ }
+
+ @Override
+@SideOnly(Side.CLIENT)
+ public void registerIcons(IIconRegister iconRegister)
+ {
+ int indexCount = 0;
+ while (getTextureName(indexCount) != null)
+ {
+ indexCount++;
+ if (indexCount > 32767) {
+ throw new RuntimeException("More Item Icons than actually possible @ " + getUnlocalizedName());
+ }
+ }
+ this.textures = new IIcon[indexCount];
+ for (int index = 0; index < indexCount; index++) {
+ this.textures[index] = iconRegister.registerIcon(CORE.MODID + ":" + getUnlocalizedName());
+ }
+ }
+
+ @Override
+@SideOnly(Side.CLIENT)
+ public IIcon getIconFromDamage(int meta)
+ {
+ if (meta < this.textures.length) {
+ return this.textures[meta];
+ }
+ return this.textures.length < 1 ? null : this.textures[0];
+ }*/
+
+ @Override
+ public String getUnlocalizedName()
+ {
+ return super.getUnlocalizedName();
+ }
+
+ @Override
+ public String getUnlocalizedName(ItemStack itemStack)
+ {
+ return getUnlocalizedName();
+ }
+
+ @Override
+ public String getItemStackDisplayName(ItemStack itemStack)
+ {
+ return StatCollector.translateToLocal(getUnlocalizedName(itemStack));
+ }
+
+ public IC2_ItemIC2 setRarity(int aRarity)
+ {
+ this.rarity = aRarity;
+ return this;
+ }
+
+ @Override
+ @SideOnly(Side.CLIENT)
+ public EnumRarity getRarity(ItemStack stack)
+ {
+ return EnumRarity.values()[this.rarity];
+ }
+
+ private int rarity = 0;
+ protected IIcon[] textures;
+}
diff --git a/src/Java/miscutil/xmod/ic2/item/IC2_Items.java b/src/Java/miscutil/xmod/ic2/item/IC2_Items.java
new file mode 100644
index 0000000000..227c8970b0
--- /dev/null
+++ b/src/Java/miscutil/xmod/ic2/item/IC2_Items.java
@@ -0,0 +1,72 @@
+package miscutil.xmod.ic2.item;
+
+import ic2.core.IC2;
+import ic2.core.init.InternalName;
+import miscutil.core.creative.AddToCreativeTab;
+import miscutil.core.item.base.CoreItem;
+import miscutil.core.lib.LoadedMods;
+import net.minecraft.item.ItemStack;
+import net.minecraft.util.ResourceLocation;
+
+public class IC2_Items {
+
+ public static ItemStack rotor_Material_1; //Energetic Alloy
+ public static ItemStack rotor_Material_2; //TungstenSteel
+ public static ItemStack rotor_Material_3; //Vibrant Alloy
+ public static ItemStack rotor_Material_4; //Iridium
+
+ public static ItemStack rotor_Blade_Material_1;
+ public static ItemStack rotor_Blade_Material_2;
+ public static ItemStack rotor_Blade_Material_3;
+ public static ItemStack rotor_Blade_Material_4;
+
+ public static ItemStack shaft_Material_1; //Energetic Alloy
+ public static ItemStack shaft_Material_2; //TungstenSteel
+ public static ItemStack shaft_Material_3; //Vibrant Alloy
+ public static ItemStack shaft_Material_4; //Iridium
+
+ public static ItemStack blockRTG;
+ public static ItemStack blockKineticGenerator;
+
+ public static void register(){
+
+ if(LoadedMods.EnderIO){
+ //Tier 1
+ rotor_Blade_Material_1 = new ItemStack (new CoreItem("itemEnergeticRotorBlade", AddToCreativeTab.tabMachines, 16, "A part for an advanced Kinetic Rotor"));
+ shaft_Material_1 = new ItemStack (new CoreItem("itemEnergeticShaft", AddToCreativeTab.tabMachines, 16, "A part for an advanced Kinetic Rotor"));
+ rotor_Material_1 = new ItemStack (new RotorBase(InternalName.itemwoodrotor, 9, 512000, 0.9F, 12, 80, new ResourceLocation(IC2.textureDomain, "textures/items/rotors/rotorEnergeticModel.png")).setCreativeTab(AddToCreativeTab.tabMachines).setUnlocalizedName("itemEnergeticRotor"));
+ //Tier 2
+ rotor_Blade_Material_2 = new ItemStack (new CoreItem("itemTungstenSteelRotorBlade", AddToCreativeTab.tabMachines, 16, "A part for an advanced Kinetic Rotor"));
+ shaft_Material_2 = new ItemStack (new CoreItem("itemTungstenSteelShaft", AddToCreativeTab.tabMachines, 16, "A part for an advanced Kinetic Rotor"));
+ rotor_Material_2 = new ItemStack (new RotorBase(InternalName.itemironrotor, 11, 809600, 1.0F, 14, 120, new ResourceLocation(IC2.textureDomain, "textures/items/rotors/rotorTungstenSteelModel.png")).setCreativeTab(AddToCreativeTab.tabMachines).setUnlocalizedName("itemTungstenSteelRotor"));
+ //Tier 3
+ rotor_Blade_Material_3 = new ItemStack (new CoreItem("itemVibrantRotorBlade", AddToCreativeTab.tabMachines, 16, "A part for an advanced Kinetic Rotor"));
+ shaft_Material_3 = new ItemStack (new CoreItem("itemVibrantShaft", AddToCreativeTab.tabMachines, 16, "A part for an advanced Kinetic Rotor"));
+ rotor_Material_3 = new ItemStack (new RotorBase(InternalName.itemsteelrotor, 13, 1600000, 1.2F, 16, 160, new ResourceLocation(IC2.textureDomain, "textures/items/rotors/rotorVibrantModel.png")).setCreativeTab(AddToCreativeTab.tabMachines).setUnlocalizedName("itemVibrantRotor"));
+ //Tier 4
+ rotor_Blade_Material_4 = new ItemStack (new CoreItem("itemIridiumRotorBlade", AddToCreativeTab.tabMachines, 16, "A part for an advanced Kinetic Rotor"));
+ shaft_Material_4 = new ItemStack (new CoreItem("itemIridiumShaft", AddToCreativeTab.tabMachines, 16, "A part for an advanced Kinetic Rotor"));
+ rotor_Material_4 = new ItemStack (new RotorIridium(InternalName.itemwcarbonrotor, 15, 3200000, 1.5F, 18, 320, new ResourceLocation(IC2.textureDomain, "textures/items/rotors/rotorIridiumModel.png")).setCreativeTab(AddToCreativeTab.tabMachines).setUnlocalizedName("itemIridiumRotor"));
+
+ }
+ else {
+ //Tier 1 - Magnalium
+ rotor_Blade_Material_1 = new ItemStack (new CoreItem("itemMagnaliumRotorBlade", AddToCreativeTab.tabMachines, 16, "A part for an advanced Kinetic Rotor"));
+ shaft_Material_1 = new ItemStack (new CoreItem("itemMagnaliumShaft", AddToCreativeTab.tabMachines, 16, "A part for an advanced Kinetic Rotor"));
+ rotor_Material_1 = new ItemStack (new RotorBase(InternalName.itemwoodrotor, 9, 512000, 0.9F, 12, 80, new ResourceLocation(IC2.textureDomain, "textures/items/rotors/rotorMagnaliumModel.png")).setCreativeTab(AddToCreativeTab.tabMachines).setUnlocalizedName("itemMagnaliumRotor"));
+ //Tier 2
+ rotor_Blade_Material_2 = new ItemStack (new CoreItem("itemTungstenSteelRotorBlade", AddToCreativeTab.tabMachines, 16, "A part for an advanced Kinetic Rotor"));
+ shaft_Material_2 = new ItemStack (new CoreItem("itemTungstenSteelShaft", AddToCreativeTab.tabMachines, 16, "A part for an advanced Kinetic Rotor"));
+ rotor_Material_2 = new ItemStack (new RotorBase(InternalName.itemironrotor, 11, 809600, 1.0F, 14, 120, new ResourceLocation(IC2.textureDomain, "textures/items/rotors/rotorTungstenSteelModel.png")).setCreativeTab(AddToCreativeTab.tabMachines).setUnlocalizedName("itemTungstenSteelRotor"));
+ //Tier 3 - Ultimet
+ rotor_Blade_Material_3 = new ItemStack (new CoreItem("itemUltimetRotorBlade", AddToCreativeTab.tabMachines, 16, "A part for an advanced Kinetic Rotor"));
+ shaft_Material_3 = new ItemStack (new CoreItem("itemUltimetShaft", AddToCreativeTab.tabMachines, 16, "A part for an advanced Kinetic Rotor"));
+ rotor_Material_3 = new ItemStack (new RotorBase(InternalName.itemsteelrotor, 13, 1600000, 1.2F, 16, 160, new ResourceLocation(IC2.textureDomain, "textures/items/rotors/rotorUltimetModel.png")).setCreativeTab(AddToCreativeTab.tabMachines).setUnlocalizedName("itemUltimetRotor"));
+ //Tier 4
+ rotor_Blade_Material_4 = new ItemStack (new CoreItem("itemIridiumRotorBlade", AddToCreativeTab.tabMachines, 16, "A part for an advanced Kinetic Rotor"));
+ shaft_Material_4 = new ItemStack (new CoreItem("itemIridiumShaft", AddToCreativeTab.tabMachines, 16, "A part for an advanced Kinetic Rotor"));
+ rotor_Material_4 = new ItemStack (new RotorIridium(InternalName.itemwcarbonrotor, 15, 3200000, 1.5F, 18, 320, new ResourceLocation(IC2.textureDomain, "textures/items/rotors/rotorIridiumModel.png")).setCreativeTab(AddToCreativeTab.tabMachines).setUnlocalizedName("itemIridiumRotor"));
+ }
+
+ }
+}
diff --git a/src/Java/miscutil/xmod/ic2/item/RotorBase.java b/src/Java/miscutil/xmod/ic2/item/RotorBase.java
new file mode 100644
index 0000000000..8ddfff20c9
--- /dev/null
+++ b/src/Java/miscutil/xmod/ic2/item/RotorBase.java
@@ -0,0 +1,99 @@
+package miscutil.xmod.ic2.item;
+
+import ic2.api.item.IKineticRotor;
+import ic2.core.block.kineticgenerator.gui.GuiWaterKineticGenerator;
+import ic2.core.block.kineticgenerator.gui.GuiWindKineticGenerator;
+import ic2.core.init.InternalName;
+import ic2.core.item.resources.ItemWindRotor;
+
+import java.util.List;
+
+import net.minecraft.client.Minecraft;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.item.ItemStack;
+import net.minecraft.util.ResourceLocation;
+import net.minecraft.util.StatCollector;
+
+public class RotorBase extends ItemWindRotor{
+
+ private final int maxWindStrength;
+ private final int minWindStrength;
+ private final int radius;
+ private final float efficiency;
+ private final ResourceLocation renderTexture;
+ private final boolean water;
+
+ public RotorBase(InternalName internalName, int Radius, int durability, float efficiency, int minWindStrength, int maxWindStrength, ResourceLocation RenderTexture)
+ {
+ super(internalName, Radius, durability, efficiency, minWindStrength, maxWindStrength, RenderTexture);
+
+
+
+ setMaxStackSize(1);
+ setMaxDamage(durability);
+
+ this.radius = Radius;
+ this.efficiency = efficiency;
+ this.renderTexture = RenderTexture;
+ this.minWindStrength = minWindStrength;
+ this.maxWindStrength = maxWindStrength;
+ this.water = (internalName != InternalName.itemwoodrotor);
+ }
+
+ @Override
+ public void addInformation(ItemStack itemStack, EntityPlayer player, List info, boolean b)
+ {
+ info.add(StatCollector.translateToLocalFormatted("ic2.itemrotor.wind.info", new Object[] { Integer.valueOf(this.minWindStrength), Integer.valueOf(this.maxWindStrength) }));
+ IKineticRotor.GearboxType type = null;
+ if ((Minecraft.getMinecraft().currentScreen != null) && ((Minecraft.getMinecraft().currentScreen instanceof GuiWaterKineticGenerator))) {
+ type = IKineticRotor.GearboxType.WATER;
+ } else if ((Minecraft.getMinecraft().currentScreen != null) && ((Minecraft.getMinecraft().currentScreen instanceof GuiWindKineticGenerator))) {
+ type = IKineticRotor.GearboxType.WIND;
+ }
+ if (type != null) {
+ //info.add(StatCollector.translateToLocal("ic2.itemrotor.fitsin." + isAcceptedType(itemStack, type)));
+ }
+ }
+
+ @Override
+ public String getTextureFolder()
+ {
+ return "rotors";
+ }
+
+ @Override
+ public int getDiameter(ItemStack stack)
+ {
+ return this.radius;
+ }
+
+ @Override
+ public ResourceLocation getRotorRenderTexture(ItemStack stack)
+ {
+ return this.renderTexture;
+ }
+
+ @Override
+ public float getEfficiency(ItemStack stack)
+ {
+ return this.efficiency;
+ }
+
+ @Override
+ public int getMinWindStrength(ItemStack stack)
+ {
+ return this.minWindStrength;
+ }
+
+ @Override
+ public int getMaxWindStrength(ItemStack stack)
+ {
+ return this.maxWindStrength;
+ }
+
+ public boolean isAcceptedType(ItemStack stack, IKineticRotor.GearboxType type)
+ {
+ return (type == IKineticRotor.GearboxType.WIND) || (this.water);
+ }
+}
+
diff --git a/src/Java/miscutil/xmod/ic2/item/RotorIridium.java b/src/Java/miscutil/xmod/ic2/item/RotorIridium.java
new file mode 100644
index 0000000000..a4037410d5
--- /dev/null
+++ b/src/Java/miscutil/xmod/ic2/item/RotorIridium.java
@@ -0,0 +1,121 @@
+package miscutil.xmod.ic2.item;
+
+import ic2.api.item.IKineticRotor;
+import ic2.core.block.kineticgenerator.gui.GuiWaterKineticGenerator;
+import ic2.core.block.kineticgenerator.gui.GuiWindKineticGenerator;
+import ic2.core.init.InternalName;
+import ic2.core.util.StackUtil;
+
+import java.util.List;
+
+import net.minecraft.client.Minecraft;
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NBTTagCompound;
+import net.minecraft.util.ResourceLocation;
+import net.minecraft.util.StatCollector;
+
+public class RotorIridium extends RotorBase{
+
+ private final int maxWindStrength;
+ private final int minWindStrength;
+ private final int radius;
+ private final float efficiency;
+ private final ResourceLocation renderTexture;
+ private final boolean water;
+
+ public RotorIridium(InternalName internalName, int Radius, int durability, float efficiency, int minWindStrength, int maxWindStrength, ResourceLocation RenderTexture)
+ {
+ super(internalName, Radius, durability, efficiency, minWindStrength, maxWindStrength, RenderTexture);
+
+
+
+ setMaxStackSize(1);
+ setMaxDamage(Integer.MAX_VALUE);
+
+ this.radius = Radius;
+ this.efficiency = efficiency;
+ this.renderTexture = RenderTexture;
+ this.minWindStrength = minWindStrength;
+ this.maxWindStrength = maxWindStrength;
+ this.water = (internalName != InternalName.itemwoodrotor);
+ }
+
+ @Override
+ public void addInformation(ItemStack itemStack, EntityPlayer player, List info, boolean b)
+ {
+ info.add(StatCollector.translateToLocalFormatted("ic2.itemrotor.wind.info", new Object[] { Integer.valueOf(this.minWindStrength), Integer.valueOf(this.maxWindStrength) }));
+ IKineticRotor.GearboxType type = null;
+ if ((Minecraft.getMinecraft().currentScreen != null) && ((Minecraft.getMinecraft().currentScreen instanceof GuiWaterKineticGenerator))) {
+ type = IKineticRotor.GearboxType.WATER;
+ } else if ((Minecraft.getMinecraft().currentScreen != null) && ((Minecraft.getMinecraft().currentScreen instanceof GuiWindKineticGenerator))) {
+ type = IKineticRotor.GearboxType.WIND;
+ }
+ if (type != null) {
+ //info.add(StatCollector.translateToLocal("ic2.itemrotor.fitsin." + isAcceptedType(itemStack, type)));
+ }
+ }
+
+ @Override
+ public String getTextureFolder()
+ {
+ return "rotors";
+ }
+
+ @Override
+ public int getDiameter(ItemStack stack)
+ {
+ return this.radius;
+ }
+
+ @Override
+ public ResourceLocation getRotorRenderTexture(ItemStack stack)
+ {
+ return this.renderTexture;
+ }
+
+ @Override
+ public float getEfficiency(ItemStack stack)
+ {
+ return this.efficiency;
+ }
+
+ @Override
+ public int getMinWindStrength(ItemStack stack)
+ {
+ return this.minWindStrength;
+ }
+
+ @Override
+ public int getMaxWindStrength(ItemStack stack)
+ {
+ return this.maxWindStrength;
+ }
+
+ public boolean isAcceptedType(ItemStack stack, IKineticRotor.GearboxType type)
+ {
+ return (type == IKineticRotor.GearboxType.WIND) || (this.water);
+ }
+
+
+ @Override
+ public void setCustomDamage(ItemStack stack, int damage)
+ {
+ NBTTagCompound nbt = StackUtil.getOrCreateNbtData(stack);
+ nbt.setInteger("advDmg", 0);
+
+ int maxStackDamage = stack.getMaxDamage();
+ if (maxStackDamage > 2) {
+ //stack.setItemDamage(1 + (int)Util.map(damage, this.maxDmg, maxStackDamage - 2));
+ }
+ }
+
+ @Override
+ public boolean applyCustomDamage(ItemStack stack, int damage, EntityLivingBase src)
+ {
+ setCustomDamage(stack, getCustomDamage(stack) + damage);
+ return true;
+ }
+ }
+
diff --git a/src/Java/miscutil/xmod/ic2/recipe/RECIPE_IC2.java b/src/Java/miscutil/xmod/ic2/recipe/RECIPE_IC2.java
new file mode 100644
index 0000000000..b50ce28480
--- /dev/null
+++ b/src/Java/miscutil/xmod/ic2/recipe/RECIPE_IC2.java
@@ -0,0 +1,151 @@
+package miscutil.xmod.ic2.recipe;
+
+import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.ItemList;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.api.util.GT_OreDictUnificator;
+import gregtech.api.util.GT_Utility;
+import miscutil.core.lib.LoadedMods;
+import miscutil.core.util.Utils;
+import miscutil.core.util.item.UtilsItems;
+import miscutil.core.util.recipe.UtilsRecipe;
+import miscutil.xmod.gregtech.api.enums.GregtechItemList;
+import miscutil.xmod.ic2.item.IC2_Items;
+import net.minecraft.item.ItemStack;
+
+public class RECIPE_IC2 {
+
+ public static String plate_T1 = "plateEnergeticAlloy";
+ public static String plate_T2 = "plateTungstenSteel";
+ public static String plate_T3 = "plateVibrantAlloy";
+ public static String plate_T4 = "plateAlloyIridium";
+
+ public static ItemStack block_T1 = GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.EnergeticAlloy, 1L);
+ public static ItemStack block_T2 = GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.TungstenSteel, 1L);
+ public static ItemStack block_T3 = GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.VibrantAlloy, 1L);
+ public static ItemStack block_T4 = GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Iridium, 1L);
+
+ public static String ingot_T1 = "ingotEnergeticAlloy";
+ public static String ingot_T2 = "ingotTungstenSteel";
+ public static String ingot_T3 = "ingotVibrantAlloy";
+ public static String ingot_T4 = "ingotIridium";
+
+ private static ItemStack rotor_blade_T1 = UtilsItems.getSimpleStack(IC2_Items.rotor_Blade_Material_1.getItem());
+ private static ItemStack rotor_blade_T2 = UtilsItems.getSimpleStack(IC2_Items.rotor_Blade_Material_2.getItem());
+ private static ItemStack rotor_blade_T3 = UtilsItems.getSimpleStack(IC2_Items.rotor_Blade_Material_3.getItem());
+ private static ItemStack rotor_blade_T4 = UtilsItems.getSimpleStack(IC2_Items.rotor_Blade_Material_4.getItem());
+
+ private static ItemStack shaft_T1 = UtilsItems.getSimpleStack(IC2_Items.shaft_Material_1.getItem());
+ private static ItemStack shaft_T2 = UtilsItems.getSimpleStack(IC2_Items.shaft_Material_2.getItem());
+ private static ItemStack shaft_T3 = UtilsItems.getSimpleStack(IC2_Items.shaft_Material_3.getItem());
+ private static ItemStack shaft_T4 = UtilsItems.getSimpleStack(IC2_Items.shaft_Material_4.getItem());
+
+ private static ItemStack rotor_T1 = UtilsItems.getSimpleStack(IC2_Items.rotor_Material_1.getItem());
+ private static ItemStack rotor_T2 = UtilsItems.getSimpleStack(IC2_Items.rotor_Material_2.getItem());
+ private static ItemStack rotor_T3 = UtilsItems.getSimpleStack(IC2_Items.rotor_Material_3.getItem());
+ private static ItemStack rotor_T4 = UtilsItems.getSimpleStack(IC2_Items.rotor_Material_4.getItem());
+
+ private static void checkForEnderIO(){
+ if(!LoadedMods.EnderIO){
+ plate_T1 = "plateMagnalium";
+ plate_T2 = "plateTungstenSteel";
+ plate_T3 = "plateUltimet";
+ plate_T4 = "plateAlloyIridium";
+
+ block_T1 = GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Magnalium, 1L);
+ block_T2 = GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.TungstenSteel, 1L);
+ block_T3 = GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Ultimet, 1L);
+ block_T4 = GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Iridium, 1L);
+
+ ingot_T1 = "ingotMagnalium";
+ ingot_T2 = "ingotTungstenSteel";
+ ingot_T3 = "ingotUltimet";
+ ingot_T4 = "ingotIridium";
+ }
+ }
+
+ public static void initRecipes(){
+
+ //Rotor Blade Recipes
+ UtilsRecipe.recipeBuilder(
+ plate_T1, ingot_T1, plate_T1,
+ plate_T1, ingot_T1, plate_T1,
+ plate_T1, ingot_T1, plate_T1,
+ rotor_blade_T1);
+
+ UtilsRecipe.recipeBuilder(
+ plate_T2, ingot_T2, plate_T2,
+ plate_T2, ingot_T2, plate_T2,
+ plate_T2, ingot_T2, plate_T2,
+ rotor_blade_T2);
+
+ UtilsRecipe.recipeBuilder(
+ plate_T3, ingot_T3, plate_T3,
+ plate_T3, ingot_T3, plate_T3,
+ plate_T3, ingot_T3, plate_T3,
+ rotor_blade_T3);
+
+ UtilsRecipe.recipeBuilder(
+ plate_T4, ingot_T4, plate_T4,
+ plate_T4, ingot_T4, plate_T4,
+ plate_T4, ingot_T4, plate_T4,
+ rotor_blade_T4);
+
+ //Shaft Extruder Recipe
+ GT_ModHandler.addCraftingRecipe(GregtechItemList.Shape_Extruder_WindmillShaft.get(1L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[]{"hXS", "XPX", "fXd", Character.valueOf('P'), ItemList.Shape_Extruder_Rod, Character.valueOf('X'), OrePrefixes.plate.get(Materials.DarkIron), Character.valueOf('S'), OrePrefixes.screw.get(Materials.DarkIron)});
+ GT_ModHandler.addCraftingRecipe(GregtechItemList.Shape_Extruder_WindmillShaft.get(1L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[]{"hXS", "XPX", "fXd", Character.valueOf('P'), ItemList.Shape_Extruder_Rod, Character.valueOf('X'), OrePrefixes.plate.get(Materials.TungstenSteel), Character.valueOf('S'), OrePrefixes.screw.get(Materials.TungstenSteel)});
+ GT_ModHandler.addCraftingRecipe(GregtechItemList.Shape_Extruder_WindmillShaft.get(1L, new Object[0]), GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, new Object[]{"hXS", "XPX", "fXd", Character.valueOf('P'), ItemList.Shape_Extruder_Rod, Character.valueOf('X'), OrePrefixes.plate.get(Materials.Molybdenum), Character.valueOf('S'), OrePrefixes.screw.get(Materials.Molybdenum)});
+ Utils.LOG_INFO("Added recipe item for GT5 Extruder: Shaft Shape");
+
+ //Shaft Recipes
+ GT_Values.RA.addExtruderRecipe(GT_Utility.copyAmount(9L, block_T1), GregtechItemList.Shape_Extruder_WindmillShaft.get(0L, new Object[0]), shaft_T1, 2560, 250);
+ if (LoadedMods.EnderIO){
+ Utils.LOG_INFO("Added recipe for GT5 Extruder: Windmill Shaft [Energetic]");
+ }
+ else {
+ Utils.LOG_INFO("Added recipe for GT5 Extruder: Windmill Shaft [Magnalium]");
+ }
+ GT_Values.RA.addExtruderRecipe(GT_Utility.copyAmount(9L, block_T2), GregtechItemList.Shape_Extruder_WindmillShaft.get(0L, new Object[0]), shaft_T2, 5120, 500);
+ Utils.LOG_INFO("Added recipe for GT5 Extruder: Windmill Shaft [TungstenSteel]");
+ GT_Values.RA.addExtruderRecipe(GT_Utility.copyAmount(9L, block_T3), GregtechItemList.Shape_Extruder_WindmillShaft.get(0L, new Object[0]), shaft_T3, 10240, 2000);
+ if (LoadedMods.EnderIO){
+ Utils.LOG_INFO("Added recipe for GT5 Extruder: Windmill Shaft [Vibrant]");
+ }
+ else {
+ Utils.LOG_INFO("Added recipe for GT5 Extruder: Windmill Shaft [Ultimet]");
+ }
+ GT_Values.RA.addExtruderRecipe(GT_Utility.copyAmount(9L, block_T4), GregtechItemList.Shape_Extruder_WindmillShaft.get(0L, new Object[0]), shaft_T4, 20480, 4000);
+ Utils.LOG_INFO("Added recipe for GT5 Extruder: Windmill Shaft [Iridium]");
+
+ //Rotor Recipes
+ UtilsRecipe.recipeBuilder(
+ null, rotor_blade_T1, null,
+ rotor_blade_T1, shaft_T1, rotor_blade_T1,
+ null, rotor_blade_T1, null,
+ rotor_T1);
+
+ UtilsRecipe.recipeBuilder(
+ null, rotor_blade_T2, null,
+ rotor_blade_T2, shaft_T2, rotor_blade_T2,
+ null, rotor_blade_T2, null,
+ rotor_T2);
+
+ UtilsRecipe.recipeBuilder(
+ null, rotor_blade_T3, null,
+ rotor_blade_T3, shaft_T3, rotor_blade_T3,
+ null, rotor_blade_T3, null,
+ rotor_T3);
+
+ UtilsRecipe.recipeBuilder(
+ null, rotor_blade_T4, null,
+ rotor_blade_T4, shaft_T4, rotor_blade_T4,
+ null, rotor_blade_T4, null,
+ rotor_T4);
+
+ }
+
+
+
+}