diff --git a/mechanical/src/main/java/resonantinduction/mechanical/energy/gear/PartGear.java b/mechanical/src/main/java/resonantinduction/mechanical/energy/gear/PartGear.java index 63162a6b..02b6a3d2 100644 --- a/mechanical/src/main/java/resonantinduction/mechanical/energy/gear/PartGear.java +++ b/mechanical/src/main/java/resonantinduction/mechanical/energy/gear/PartGear.java @@ -83,16 +83,16 @@ public class PartGear extends PartMechanical implements IMechanical, IMultiBlock switch (tier) { default: - torque *= 0.97f; - angularVelocity *= 0.98f; - break; - case 1: - torque *= 0.98f; + torque *= 0.96f; angularVelocity *= 0.97f; break; + case 1: + torque *= 0.97f; + angularVelocity *= 0.96f; + break; case 2: - torque *= 0.99f; - angularVelocity *= 0.99f; + torque *= 0.98f; + angularVelocity *= 0.98f; break; } } diff --git a/mechanical/src/main/java/resonantinduction/mechanical/energy/network/TileMechanical.java b/mechanical/src/main/java/resonantinduction/mechanical/energy/network/TileMechanical.java index 96da4775..d5046ab6 100644 --- a/mechanical/src/main/java/resonantinduction/mechanical/energy/network/TileMechanical.java +++ b/mechanical/src/main/java/resonantinduction/mechanical/energy/network/TileMechanical.java @@ -99,8 +99,8 @@ public abstract class TileMechanical extends TileAdvanced implements IMechanical @Override public void invalidate() { - super.invalidate(); getNetwork().split(this); + super.invalidate(); } protected float getLoad() diff --git a/mechanical/src/main/java/resonantinduction/mechanical/energy/turbine/BlockMechanicalTurbine.java b/mechanical/src/main/java/resonantinduction/mechanical/energy/turbine/BlockMechanicalTurbine.java new file mode 100644 index 00000000..428167f5 --- /dev/null +++ b/mechanical/src/main/java/resonantinduction/mechanical/energy/turbine/BlockMechanicalTurbine.java @@ -0,0 +1,112 @@ +package resonantinduction.mechanical.energy.turbine; + +import net.minecraft.block.material.Material; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; +import resonantinduction.core.Reference; +import calclavia.lib.prefab.turbine.BlockTurbine; +import calclavia.lib.prefab.turbine.TileTurbine; + +public class BlockMechanicalTurbine extends BlockTurbine +{ + public BlockMechanicalTurbine(int id) + { + super(id, Material.iron); + setTextureName(Reference.PREFIX + "material_wood_surface"); + rotationMask = Byte.parseByte("111111", 2); + } + + @Override + public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase entityLiving, ItemStack itemStack) + { + super.onBlockPlacedBy(world, x, y, z, entityLiving, itemStack); + TileEntity tileEntity = world.getBlockTileEntity(x, y, z); + + if (tileEntity instanceof TileMechanicalTurbine) + { + ((TileMechanicalTurbine) tileEntity).tier = itemStack.getItemDamage(); + } + } + + @Override + public boolean onUseWrench(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) + { + TileEntity tileEntity = world.getBlockTileEntity(x, y, z); + + if (tileEntity instanceof TileTurbine) + { + if (!world.isRemote) + { + return ((TileTurbine) tileEntity).getMultiBlock().toggleConstruct(); + } + + return true; + } + + return false; + } + + @Override + public boolean onMachineActivated(World world, int x, int y, int z, EntityPlayer entityPlayer, int side, float hitX, float hitY, float hitZ) + { + if (entityPlayer.getCurrentEquippedItem() == null) + { + TileEntity tileEntity = world.getBlockTileEntity(x, y, z); + + if (tileEntity instanceof TileTurbine) + { + if (!world.isRemote && !((TileTurbine) tileEntity).getMultiBlock().isConstructed()) + { + ((TileTurbine) tileEntity).multiBlockRadius = Math.max(((TileTurbine) tileEntity).multiBlockRadius + 1, 1); + entityPlayer.addChatMessage("Turbine radius: " + ((TileTurbine) tileEntity).multiBlockRadius); + } + + return true; + } + } + + return false; + } + + @Override + public boolean onSneakMachineActivated(World world, int x, int y, int z, EntityPlayer entityPlayer, int side, float hitX, float hitY, float hitZ) + { + TileEntity tileEntity = world.getBlockTileEntity(x, y, z); + + if (tileEntity instanceof TileTurbine) + { + if (!world.isRemote && !((TileTurbine) tileEntity).getMultiBlock().isConstructed()) + { + ((TileTurbine) tileEntity).multiBlockRadius = Math.max(((TileTurbine) tileEntity).multiBlockRadius - 1, 1); + entityPlayer.addChatMessage("Turbine radius: " + ((TileTurbine) tileEntity).multiBlockRadius); + } + + return true; + } + + return false; + } + + @Override + public boolean onSneakUseWrench(World world, int x, int y, int z, EntityPlayer par5EntityPlayer, int side, float hitX, float hitY, float hitZ) + { + TileEntity tileEntity = world.getBlockTileEntity(x, y, z); + + if (tileEntity instanceof TileTurbine) + { + if (!world.isRemote && !((TileTurbine) tileEntity).getMultiBlock().isConstructed()) + { + if (side == ((TileTurbine) tileEntity).getDirection().ordinal()) + world.setBlockMetadataWithNotify(x, y, z, side ^ 1, 3); + else + world.setBlockMetadataWithNotify(x, y, z, side, 3); + } + } + + return true; + } + +} diff --git a/mechanical/src/main/java/resonantinduction/mechanical/energy/turbine/BlockWaterTurbine.java b/mechanical/src/main/java/resonantinduction/mechanical/energy/turbine/BlockWaterTurbine.java index 77578479..be0bece9 100644 --- a/mechanical/src/main/java/resonantinduction/mechanical/energy/turbine/BlockWaterTurbine.java +++ b/mechanical/src/main/java/resonantinduction/mechanical/energy/turbine/BlockWaterTurbine.java @@ -11,13 +11,11 @@ import calclavia.lib.prefab.turbine.TileTurbine; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -public class BlockWaterTurbine extends BlockTurbine +public class BlockWaterTurbine extends BlockMechanicalTurbine { public BlockWaterTurbine(int id) { - super(id, Material.iron); - setTextureName(Reference.PREFIX + "material_wood_surface"); - rotationMask = Byte.parseByte("111111", 2); + super(id); } @SideOnly(Side.CLIENT) @@ -27,25 +25,6 @@ public class BlockWaterTurbine extends BlockTurbine return RIBlockRenderingHandler.ID; } - @Override - public boolean onSneakUseWrench(World world, int x, int y, int z, EntityPlayer par5EntityPlayer, int side, float hitX, float hitY, float hitZ) - { - TileEntity tileEntity = world.getBlockTileEntity(x, y, z); - - if (tileEntity instanceof TileTurbine) - { - if (!world.isRemote && !((TileTurbine) tileEntity).getMultiBlock().isConstructed()) - { - if (side == ((TileTurbine) tileEntity).getDirection().ordinal()) - world.setBlockMetadataWithNotify(x, y, z, side ^ 1, 3); - else - world.setBlockMetadataWithNotify(x, y, z, side, 3); - } - } - - return true; - } - @Override public TileEntity createNewTileEntity(World var1) { diff --git a/mechanical/src/main/java/resonantinduction/mechanical/energy/turbine/BlockWindTurbine.java b/mechanical/src/main/java/resonantinduction/mechanical/energy/turbine/BlockWindTurbine.java index 8f9a67fc..2236362b 100644 --- a/mechanical/src/main/java/resonantinduction/mechanical/energy/turbine/BlockWindTurbine.java +++ b/mechanical/src/main/java/resonantinduction/mechanical/energy/turbine/BlockWindTurbine.java @@ -1,7 +1,11 @@ package resonantinduction.mechanical.energy.turbine; +import java.util.List; + import net.minecraft.block.material.Material; +import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; import resonantinduction.core.Reference; @@ -11,73 +15,18 @@ import calclavia.lib.prefab.turbine.TileTurbine; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -public class BlockWindTurbine extends BlockTurbine +public class BlockWindTurbine extends BlockMechanicalTurbine { public BlockWindTurbine(int id) { - super(id, Material.iron); - setTextureName(Reference.PREFIX + "material_wood_surface"); - rotationMask = Byte.parseByte("111111", 2); + super(id); } @Override - public boolean onMachineActivated(World world, int x, int y, int z, EntityPlayer entityPlayer, int side, float hitX, float hitY, float hitZ) + public void getSubBlocks(int par1, CreativeTabs par2CreativeTabs, List par3List) { - if (entityPlayer.getCurrentEquippedItem() == null) - { - TileEntity tileEntity = world.getBlockTileEntity(x, y, z); - - if (tileEntity instanceof TileTurbine) - { - if (!world.isRemote && !((TileTurbine) tileEntity).getMultiBlock().isConstructed()) - { - ((TileTurbine) tileEntity).multiBlockRadius = Math.max(((TileTurbine) tileEntity).multiBlockRadius + 1, 1); - entityPlayer.addChatMessage("Turbine radius: " + ((TileTurbine) tileEntity).multiBlockRadius); - } - - return true; - } - } - - return false; - } - - @Override - public boolean onSneakMachineActivated(World world, int x, int y, int z, EntityPlayer entityPlayer, int side, float hitX, float hitY, float hitZ) - { - TileEntity tileEntity = world.getBlockTileEntity(x, y, z); - - if (tileEntity instanceof TileTurbine) - { - if (!world.isRemote && !((TileTurbine) tileEntity).getMultiBlock().isConstructed()) - { - ((TileTurbine) tileEntity).multiBlockRadius = Math.max(((TileTurbine) tileEntity).multiBlockRadius - 1, 1); - entityPlayer.addChatMessage("Turbine radius: " + ((TileTurbine) tileEntity).multiBlockRadius); - } - - return true; - } - - return false; - } - - @Override - public boolean onSneakUseWrench(World world, int x, int y, int z, EntityPlayer par5EntityPlayer, int side, float hitX, float hitY, float hitZ) - { - TileEntity tileEntity = world.getBlockTileEntity(x, y, z); - - if (tileEntity instanceof TileTurbine) - { - if (!world.isRemote && !((TileTurbine) tileEntity).getMultiBlock().isConstructed()) - { - if (side == ((TileTurbine) tileEntity).getDirection().ordinal()) - world.setBlockMetadataWithNotify(x, y, z, side ^ 1, 3); - else - world.setBlockMetadataWithNotify(x, y, z, side, 3); - } - } - - return true; + for (int i = 0; i < 3; i++) + par3List.add(new ItemStack(par1, 1, i)); } @SideOnly(Side.CLIENT) diff --git a/mechanical/src/main/java/resonantinduction/mechanical/energy/turbine/RenderWindTurbine.java b/mechanical/src/main/java/resonantinduction/mechanical/energy/turbine/RenderWindTurbine.java index 300a44ed..ee72fcff 100644 --- a/mechanical/src/main/java/resonantinduction/mechanical/energy/turbine/RenderWindTurbine.java +++ b/mechanical/src/main/java/resonantinduction/mechanical/energy/turbine/RenderWindTurbine.java @@ -1,6 +1,7 @@ package resonantinduction.mechanical.energy.turbine; import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraftforge.client.model.AdvancedModelLoader; import net.minecraftforge.client.model.IModelCustom; @@ -8,20 +9,20 @@ import net.minecraftforge.client.model.IModelCustom; import org.lwjgl.opengl.GL11; import resonantinduction.core.Reference; -import calclavia.lib.prefab.turbine.TileTurbine; import calclavia.lib.render.RenderUtility; +import calclavia.lib.render.item.ISimpleItemRenderer; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; @SideOnly(Side.CLIENT) -public class RenderWindTurbine extends TileEntitySpecialRenderer +public class RenderWindTurbine extends TileEntitySpecialRenderer implements ISimpleItemRenderer { public static final IModelCustom MODEL = AdvancedModelLoader.loadModel(Reference.MODEL_DIRECTORY + "windTurbines.obj"); @Override public void renderTileEntityAt(TileEntity t, double x, double y, double z, float f) { - TileTurbine tile = (TileTurbine) t; + TileMechanicalTurbine tile = (TileMechanicalTurbine) t; if (tile.getMultiBlock().isPrimary()) { @@ -29,42 +30,66 @@ public class RenderWindTurbine extends TileEntitySpecialRenderer GL11.glTranslatef((float) x + 0.5f, (float) y + 0.5f, (float) z + 0.5f); GL11.glPushMatrix(); - if (tile.worldObj != null) - { - RenderUtility.rotateBlockBasedOnDirectionUp(tile.getDirection()); - } + RenderUtility.rotateBlockBasedOnDirectionUp(tile.getDirection()); GL11.glTranslatef(0, -0.35f, 0); GL11.glRotatef((float) Math.toDegrees(tile.rotation), 0, 1, 0); - /** - * TODO: Bind based on tier. - * cobblestone, iron_block - */ - if (tile.getMultiBlock().isConstructed()) - { - GL11.glScalef(0.3f, 1, 0.3f); - GL11.glScalef(tile.multiBlockRadius * 2 + 1, Math.min(tile.multiBlockRadius, 2), tile.multiBlockRadius * 2 + 1); - RenderUtility.bind(Reference.BLOCK_TEXTURE_DIRECTORY + "planks_oak.png"); - MODEL.renderOnly("LargeBladeArm"); - RenderUtility.bind(Reference.BLOCK_TEXTURE_DIRECTORY + "wool_colored_white.png"); - MODEL.renderOnly("LargeBlade"); - RenderUtility.bind(Reference.BLOCK_TEXTURE_DIRECTORY + "cobblestone.png"); - GL11.glScalef(1f, 2f, 1f); - GL11.glTranslatef(0, -0.05f, 0); - MODEL.renderOnly("LargeHub"); - } - else - { - RenderUtility.bind(Reference.BLOCK_TEXTURE_DIRECTORY + "cobblestone.png"); - MODEL.renderOnly("SmallHub"); - RenderUtility.bind(Reference.BLOCK_TEXTURE_DIRECTORY + "planks_oak.png"); - MODEL.renderOnly("SmallBlade"); - } + render(tile.tier, tile.multiBlockRadius, tile.getMultiBlock().isConstructed()); GL11.glPopMatrix(); GL11.glPopMatrix(); } } + @Override + public void renderInventoryItem(ItemStack itemStack) + { + GL11.glPushMatrix(); + GL11.glTranslatef(0.5f, 0.5f, 0.5f); + render(itemStack.getItemDamage(), 1, false); + GL11.glPopMatrix(); + } + + public void render(int tier, int size, boolean isConstructed) + { + switch (tier) + { + case 0: + RenderUtility.bind(Reference.BLOCK_TEXTURE_DIRECTORY + "planks_oak.png"); + break; + case 1: + RenderUtility.bind(Reference.BLOCK_TEXTURE_DIRECTORY + "cobblestone.png"); + break; + case 2: + RenderUtility.bind(Reference.BLOCK_TEXTURE_DIRECTORY + "iron_block.png"); + break; + } + + if (isConstructed) + { + if (tier == 2) + { + MODEL.renderOnly("LargeMetalHub", "LargeMetalBlade"); + } + else + { + GL11.glScalef(0.3f, 1, 0.3f); + GL11.glScalef(size * 2 + 1, Math.min(size, 2), size * 2 + 1); + MODEL.renderOnly("LargeBladeArm"); + GL11.glScalef(1f, 2f, 1f); + GL11.glTranslatef(0, -0.05f, 0); + MODEL.renderOnly("LargeHub"); + RenderUtility.bind(Reference.BLOCK_TEXTURE_DIRECTORY + "wool_colored_white.png"); + MODEL.renderOnly("LargeBlade"); + } + } + else + { + MODEL.renderOnly("SmallBlade"); + RenderUtility.bind(Reference.BLOCK_TEXTURE_DIRECTORY + "log_oak.png"); + MODEL.renderOnly("SmallHub"); + } + + } } \ No newline at end of file diff --git a/mechanical/src/main/java/resonantinduction/mechanical/energy/turbine/TileMechanicalTurbine.java b/mechanical/src/main/java/resonantinduction/mechanical/energy/turbine/TileMechanicalTurbine.java index 59e191dd..bfcb9bde 100644 --- a/mechanical/src/main/java/resonantinduction/mechanical/energy/turbine/TileMechanicalTurbine.java +++ b/mechanical/src/main/java/resonantinduction/mechanical/energy/turbine/TileMechanicalTurbine.java @@ -1,5 +1,6 @@ package resonantinduction.mechanical.energy.turbine; +import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraftforge.common.ForgeDirection; import resonantinduction.api.mechanical.IMechanical; @@ -7,10 +8,16 @@ import resonantinduction.api.mechanical.IMechanicalNetwork; import resonantinduction.mechanical.energy.network.MechanicalNetwork; import universalelectricity.api.energy.EnergyStorageHandler; import universalelectricity.api.vector.Vector3; +import calclavia.lib.network.Synced; +import calclavia.lib.network.Synced.SyncedInput; +import calclavia.lib.network.Synced.SyncedOutput; import calclavia.lib.prefab.turbine.TileTurbine; public class TileMechanicalTurbine extends TileTurbine implements IMechanical { + @Synced() + public int tier; + public TileMechanicalTurbine() { super(); @@ -96,4 +103,23 @@ public class TileMechanicalTurbine extends TileTurbine implements IMechanical { return null; } + + @Override + @SyncedInput + public void readFromNBT(NBTTagCompound nbt) + { + super.readFromNBT(nbt); + tier = nbt.getInteger("tier"); + } + + /** + * Writes a tile entity to NBT. + */ + @Override + @SyncedOutput + public void writeToNBT(NBTTagCompound nbt) + { + super.writeToNBT(nbt); + nbt.setInteger("tier", tier); + } } diff --git a/src/main/resources/assets/resonantinduction/languages/en_US.properties b/src/main/resources/assets/resonantinduction/languages/en_US.properties index 22809940..20ca3a22 100644 --- a/src/main/resources/assets/resonantinduction/languages/en_US.properties +++ b/src/main/resources/assets/resonantinduction/languages/en_US.properties @@ -73,8 +73,12 @@ item.resonantinduction\:gear.2.name=Metal Gear item.resonantinduction\:gearShaft.0.name=Wooden Gear Shaft item.resonantinduction\:gearShaft.1.name=Stone Gear Shaft item.resonantinduction\:gearShaft.2.name=Metal Gear Shaft -tile.resonantinduction\:windTurbine.name=Wind Turbine -tile.resonantinduction\:windTurbine.tooltip=The wind turbine generates power through air flow and pressure. +tile.resonantinduction\:windTurbine.0.name=Wooden Wind Turbine +tile.resonantinduction\:windTurbine.0.tooltip=The wooden wind turbine is light, fragile and spins fast. +tile.resonantinduction\:windTurbine.1.name=Stone Wind Turbine +tile.resonantinduction\:windTurbine.1.tooltip=The stone turbine is heavy, strong and durable. +tile.resonantinduction\:windTurbine.2.name=Metal Wind Turbine +tile.resonantinduction\:windTurbine.2,tooltip=The metal wind turbine is strong and lightweight. tile.resonantinduction\:waterTurbine.name=Water Turbine tile.resonantinduction\:waterTurbine.tooltip=The water turbine generates power through water flow.