aboutsummaryrefslogtreecommitdiff
path: root/src/Java/miscutil/xmod/ic2
diff options
context:
space:
mode:
authorDraknyte1 <Draknyte1@hotmail.com>2016-08-27 01:34:08 +1000
committerDraknyte1 <Draknyte1@hotmail.com>2016-08-27 01:34:08 +1000
commit072f6322fb789703f163030edf4b60bf5a0201af (patch)
tree9d2d9c2ba6fe3bc5139a9868ee4eca95629fdd95 /src/Java/miscutil/xmod/ic2
parentf555ac2e146e572155e176131c23e73cd74684f1 (diff)
downloadGT5-Unofficial-072f6322fb789703f163030edf4b60bf5a0201af.tar.gz
GT5-Unofficial-072f6322fb789703f163030edf4b60bf5a0201af.tar.bz2
GT5-Unofficial-072f6322fb789703f163030edf4b60bf5a0201af.zip
+ Attempted to add custom IC2 generators.
% Refactored the xmod package to be a parent, beside core. No longer is it a child, it needs room to grow.
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)<