Added stone and metal wind turbines

This commit is contained in:
Calclavia 2014-02-28 10:11:59 +08:00
parent 6c5f2f5ecb
commit b8e1661a84
8 changed files with 219 additions and 124 deletions

View file

@ -83,16 +83,16 @@ public class PartGear extends PartMechanical implements IMechanical, IMultiBlock
switch (tier) switch (tier)
{ {
default: default:
torque *= 0.97f; torque *= 0.96f;
angularVelocity *= 0.98f;
break;
case 1:
torque *= 0.98f;
angularVelocity *= 0.97f; angularVelocity *= 0.97f;
break; break;
case 1:
torque *= 0.97f;
angularVelocity *= 0.96f;
break;
case 2: case 2:
torque *= 0.99f; torque *= 0.98f;
angularVelocity *= 0.99f; angularVelocity *= 0.98f;
break; break;
} }
} }

View file

@ -99,8 +99,8 @@ public abstract class TileMechanical extends TileAdvanced implements IMechanical
@Override @Override
public void invalidate() public void invalidate()
{ {
super.invalidate();
getNetwork().split(this); getNetwork().split(this);
super.invalidate();
} }
protected float getLoad() protected float getLoad()

View file

@ -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;
}
}

View file

@ -11,13 +11,11 @@ import calclavia.lib.prefab.turbine.TileTurbine;
import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly; import cpw.mods.fml.relauncher.SideOnly;
public class BlockWaterTurbine extends BlockTurbine public class BlockWaterTurbine extends BlockMechanicalTurbine
{ {
public BlockWaterTurbine(int id) public BlockWaterTurbine(int id)
{ {
super(id, Material.iron); super(id);
setTextureName(Reference.PREFIX + "material_wood_surface");
rotationMask = Byte.parseByte("111111", 2);
} }
@SideOnly(Side.CLIENT) @SideOnly(Side.CLIENT)
@ -27,25 +25,6 @@ public class BlockWaterTurbine extends BlockTurbine
return RIBlockRenderingHandler.ID; 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 @Override
public TileEntity createNewTileEntity(World var1) public TileEntity createNewTileEntity(World var1)
{ {

View file

@ -1,7 +1,11 @@
package resonantinduction.mechanical.energy.turbine; package resonantinduction.mechanical.energy.turbine;
import java.util.List;
import net.minecraft.block.material.Material; import net.minecraft.block.material.Material;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World; import net.minecraft.world.World;
import resonantinduction.core.Reference; 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.Side;
import cpw.mods.fml.relauncher.SideOnly; import cpw.mods.fml.relauncher.SideOnly;
public class BlockWindTurbine extends BlockTurbine public class BlockWindTurbine extends BlockMechanicalTurbine
{ {
public BlockWindTurbine(int id) public BlockWindTurbine(int id)
{ {
super(id, Material.iron); super(id);
setTextureName(Reference.PREFIX + "material_wood_surface");
rotationMask = Byte.parseByte("111111", 2);
} }
@Override @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) for (int i = 0; i < 3; i++)
{ par3List.add(new ItemStack(par1, 1, i));
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;
} }
@SideOnly(Side.CLIENT) @SideOnly(Side.CLIENT)

View file

@ -1,6 +1,7 @@
package resonantinduction.mechanical.energy.turbine; package resonantinduction.mechanical.energy.turbine;
import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntity;
import net.minecraftforge.client.model.AdvancedModelLoader; import net.minecraftforge.client.model.AdvancedModelLoader;
import net.minecraftforge.client.model.IModelCustom; import net.minecraftforge.client.model.IModelCustom;
@ -8,20 +9,20 @@ import net.minecraftforge.client.model.IModelCustom;
import org.lwjgl.opengl.GL11; import org.lwjgl.opengl.GL11;
import resonantinduction.core.Reference; import resonantinduction.core.Reference;
import calclavia.lib.prefab.turbine.TileTurbine;
import calclavia.lib.render.RenderUtility; import calclavia.lib.render.RenderUtility;
import calclavia.lib.render.item.ISimpleItemRenderer;
import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly; import cpw.mods.fml.relauncher.SideOnly;
@SideOnly(Side.CLIENT) @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"); public static final IModelCustom MODEL = AdvancedModelLoader.loadModel(Reference.MODEL_DIRECTORY + "windTurbines.obj");
@Override @Override
public void renderTileEntityAt(TileEntity t, double x, double y, double z, float f) 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()) 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.glTranslatef((float) x + 0.5f, (float) y + 0.5f, (float) z + 0.5f);
GL11.glPushMatrix(); GL11.glPushMatrix();
if (tile.worldObj != null) RenderUtility.rotateBlockBasedOnDirectionUp(tile.getDirection());
{
RenderUtility.rotateBlockBasedOnDirectionUp(tile.getDirection());
}
GL11.glTranslatef(0, -0.35f, 0); GL11.glTranslatef(0, -0.35f, 0);
GL11.glRotatef((float) Math.toDegrees(tile.rotation), 0, 1, 0); GL11.glRotatef((float) Math.toDegrees(tile.rotation), 0, 1, 0);
/** render(tile.tier, tile.multiBlockRadius, tile.getMultiBlock().isConstructed());
* 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");
}
GL11.glPopMatrix(); GL11.glPopMatrix();
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");
}
}
} }

View file

@ -1,5 +1,6 @@
package resonantinduction.mechanical.energy.turbine; package resonantinduction.mechanical.energy.turbine;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntity;
import net.minecraftforge.common.ForgeDirection; import net.minecraftforge.common.ForgeDirection;
import resonantinduction.api.mechanical.IMechanical; import resonantinduction.api.mechanical.IMechanical;
@ -7,10 +8,16 @@ import resonantinduction.api.mechanical.IMechanicalNetwork;
import resonantinduction.mechanical.energy.network.MechanicalNetwork; import resonantinduction.mechanical.energy.network.MechanicalNetwork;
import universalelectricity.api.energy.EnergyStorageHandler; import universalelectricity.api.energy.EnergyStorageHandler;
import universalelectricity.api.vector.Vector3; 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; import calclavia.lib.prefab.turbine.TileTurbine;
public class TileMechanicalTurbine extends TileTurbine implements IMechanical public class TileMechanicalTurbine extends TileTurbine implements IMechanical
{ {
@Synced()
public int tier;
public TileMechanicalTurbine() public TileMechanicalTurbine()
{ {
super(); super();
@ -96,4 +103,23 @@ public class TileMechanicalTurbine extends TileTurbine implements IMechanical
{ {
return null; 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);
}
} }

View file

@ -73,8 +73,12 @@ item.resonantinduction\:gear.2.name=Metal Gear
item.resonantinduction\:gearShaft.0.name=Wooden Gear Shaft item.resonantinduction\:gearShaft.0.name=Wooden Gear Shaft
item.resonantinduction\:gearShaft.1.name=Stone Gear Shaft item.resonantinduction\:gearShaft.1.name=Stone Gear Shaft
item.resonantinduction\:gearShaft.2.name=Metal Gear Shaft item.resonantinduction\:gearShaft.2.name=Metal Gear Shaft
tile.resonantinduction\:windTurbine.name=Wind Turbine tile.resonantinduction\:windTurbine.0.name=Wooden Wind Turbine
tile.resonantinduction\:windTurbine.tooltip=The wind turbine generates power through air flow and pressure. 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.name=Water Turbine
tile.resonantinduction\:waterTurbine.tooltip=The water turbine generates power through water flow. tile.resonantinduction\:waterTurbine.tooltip=The water turbine generates power through water flow.