diff options
Diffstat (limited to 'src/Java/miscutil/xmod/ic2')
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 directionF |
