Added stone and metal wind turbines
This commit is contained in:
parent
6c5f2f5ecb
commit
b8e1661a84
8 changed files with 219 additions and 124 deletions
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
|
@ -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)
|
||||
{
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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());
|
||||
}
|
||||
|
||||
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())
|
||||
render(tile.tier, tile.multiBlockRadius, tile.getMultiBlock().isConstructed());
|
||||
|
||||
GL11.glPopMatrix();
|
||||
GL11.glPopMatrix();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void renderInventoryItem(ItemStack itemStack)
|
||||
{
|
||||
GL11.glScalef(0.3f, 1, 0.3f);
|
||||
GL11.glScalef(tile.multiBlockRadius * 2 + 1, Math.min(tile.multiBlockRadius, 2), tile.multiBlockRadius * 2 + 1);
|
||||
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");
|
||||
MODEL.renderOnly("LargeBladeArm");
|
||||
RenderUtility.bind(Reference.BLOCK_TEXTURE_DIRECTORY + "wool_colored_white.png");
|
||||
MODEL.renderOnly("LargeBlade");
|
||||
break;
|
||||
case 1:
|
||||
RenderUtility.bind(Reference.BLOCK_TEXTURE_DIRECTORY + "cobblestone.png");
|
||||
GL11.glScalef(1f, 2f, 1f);
|
||||
GL11.glTranslatef(0, -0.05f, 0);
|
||||
MODEL.renderOnly("LargeHub");
|
||||
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
|
||||
{
|
||||
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();
|
||||
}
|
||||
RenderUtility.bind(Reference.BLOCK_TEXTURE_DIRECTORY + "log_oak.png");
|
||||
MODEL.renderOnly("SmallHub");
|
||||
}
|
||||
|
||||
}
|
||||
}
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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.
|
||||
|
||||
|
|
Loading…
Reference in a new issue