Friction Boots - semi-working

This commit is contained in:
Aidan C. Brady 2014-02-01 16:33:27 -05:00
parent c3a1b6b3c5
commit efe2502be1
9 changed files with 334 additions and 14 deletions

View file

@ -338,6 +338,7 @@ public class ClientProxy extends CommonProxy
MinecraftForgeClient.registerItemRenderer(Mekanism.GasMask.itemID, handler);
MinecraftForgeClient.registerItemRenderer(Mekanism.ScubaTank.itemID, handler);
MinecraftForgeClient.registerItemRenderer(Mekanism.Balloon.itemID, handler);
MinecraftForgeClient.registerItemRenderer(Mekanism.FrictionBoots.itemID, handler);
//Register block handlers
RenderingRegistry.registerBlockHandler(new MachineRenderingHandler());

View file

@ -24,7 +24,6 @@ public class ModelFrictionBoots extends ModelBase
SpringL.setTextureSize(64, 32);
SpringL.mirror = true;
setRotation(SpringL, 0.1047198F, 0F, 0F);
SpringR.mirror = true;
SpringR = new ModelRenderer(this, 8, 0);
SpringR.addBox(-2.5F, 18F, 0F, 1, 6, 1);
SpringR.setRotationPoint(0F, 0F, 0F);
@ -50,7 +49,6 @@ public class ModelFrictionBoots extends ModelBase
SupportL.setTextureSize(64, 32);
SupportL.mirror = true;
setRotation(SupportL, 0.296706F, 0F, 0F);
SupportR.mirror = true;
SupportR = new ModelRenderer(this, 0, 0);
SupportR.addBox(-3F, 16.5F, -4.2F, 2, 4, 2);
SupportR.setRotationPoint(0F, 0F, 0F);
@ -69,6 +67,20 @@ public class ModelFrictionBoots extends ModelBase
SupportL.render(size);
SupportR.render(size);
}
public void renderLeft(float size)
{
SpringL.render(size);
BraceL.render(size);
SupportL.render(size);
}
public void renderRight(float size)
{
SpringR.render(size);
BraceR.render(size);
SupportR.render(size);
}
private void setRotation(ModelRenderer model, float x, float y, float z)
{

View file

@ -1,5 +1,6 @@
package mekanism.client.render;
import mekanism.client.model.ModelFrictionBoots;
import mekanism.client.model.ModelGasMask;
import mekanism.client.model.ModelJetpack;
import mekanism.client.model.ModelScubaTank;
@ -35,8 +36,8 @@ public class ModelCustomArmor extends ModelBiped
resetPart(bipedBody, 0, 0, 0);
resetPart(bipedRightArm, 5, 2, 0);
resetPart(bipedLeftArm, -5, 2, 0);
resetPart(bipedRightLeg, 2, 12, 0);
resetPart(bipedLeftLeg, -2, 12, 0);
resetPart(bipedRightLeg, 0, 0, 0);
resetPart(bipedLeftLeg, 0, 0, 0);
bipedHeadwear.cubeList.clear();
bipedEars.cubeList.clear();
@ -64,6 +65,13 @@ public class ModelCustomArmor extends ModelBiped
bipedBody.isHidden = false;
bipedBody.showModel = true;
}
else if(modelType.armorSlot == 3)
{
bipedLeftLeg.isHidden = false;
bipedLeftLeg.showModel = true;
bipedRightLeg.isHidden = false;
bipedRightLeg.showModel = true;
}
setRotationAngles(f, f1, f2, f3, f4, size, entity);
}
@ -137,6 +145,21 @@ public class ModelCustomArmor extends ModelBiped
GL11.glTranslatef(0, 0, -0.05F);
ArmorModel.gasMaskModel.render(0.0625F);
}
else if(biped.modelType == ArmorModel.FRICTIONBOOTS)
{
GL11.glScalef(0.99F, 0.99F, 0.99F);
if(partRender == biped.bipedLeftLeg)
{
GL11.glTranslatef(-0.1375F, -0.75F, 0);
ArmorModel.frictionBootsModel.renderLeft(0.0625F);
}
else if(partRender == biped.bipedRightLeg)
{
GL11.glTranslatef(0.1375F, -0.75F, 0);
ArmorModel.frictionBootsModel.renderRight(0.0625F);
}
}
}
GL11.glPopMatrix();
@ -161,6 +184,10 @@ public class ModelCustomArmor extends ModelBiped
{
return partRender == biped.bipedBody;
}
else if(type.armorSlot == 3)
{
return partRender == biped.bipedLeftLeg || partRender == biped.bipedRightLeg;
}
return false;
}
@ -169,7 +196,8 @@ public class ModelCustomArmor extends ModelBiped
{
JETPACK(1, MekanismUtils.getResource(ResourceType.RENDER, "Jetpack.png")),
SCUBATANK(1, MekanismUtils.getResource(ResourceType.RENDER, "ScubaSet.png")),
GASMASK(0, MekanismUtils.getResource(ResourceType.RENDER, "ScubaSet.png"));
GASMASK(0, MekanismUtils.getResource(ResourceType.RENDER, "ScubaSet.png")),
FRICTIONBOOTS(3, MekanismUtils.getResource(ResourceType.RENDER, "FrictionBoots.png"));
public int armorSlot;
public ResourceLocation resource;
@ -177,6 +205,7 @@ public class ModelCustomArmor extends ModelBiped
public static ModelJetpack jetpackModel = new ModelJetpack();
public static ModelGasMask gasMaskModel = new ModelGasMask();
public static ModelScubaTank scubaTankModel = new ModelScubaTank();
public static ModelFrictionBoots frictionBootsModel = new ModelFrictionBoots();
private ArmorModel(int i, ResourceLocation r)
{

View file

@ -6,6 +6,7 @@ import mekanism.client.ClientProxy;
import mekanism.client.MekanismClient;
import mekanism.client.model.ModelEnergyCube;
import mekanism.client.model.ModelEnergyCube.ModelEnergyCore;
import mekanism.client.model.ModelFrictionBoots;
import mekanism.client.model.ModelGasMask;
import mekanism.client.model.ModelGasTank;
import mekanism.client.model.ModelJetpack;
@ -25,6 +26,7 @@ import mekanism.common.inventory.InventoryBin;
import mekanism.common.item.ItemBalloon;
import mekanism.common.item.ItemBlockBasic;
import mekanism.common.item.ItemBlockMachine;
import mekanism.common.item.ItemFrictionBoots;
import mekanism.common.item.ItemGasMask;
import mekanism.common.item.ItemJetpack;
import mekanism.common.item.ItemRobit;
@ -69,9 +71,10 @@ public class ItemRenderingHandler implements IItemRenderer
public ModelJetpack jetpack = new ModelJetpack();
public ModelGasMask gasMask = new ModelGasMask();
public ModelScubaTank scubaTank = new ModelScubaTank();
public ModelFrictionBoots frictionBoots = new ModelFrictionBoots();
public RenderBalloon balloonRenderer = new RenderBalloon();
public RenderBin binRenderer = (RenderBin)TileEntityRenderer.instance.specialRendererMap.get(TileEntityBin.class);
private final RenderBalloon balloonRenderer = new RenderBalloon();
private final RenderBin binRenderer = (RenderBin)TileEntityRenderer.instance.specialRendererMap.get(TileEntityBin.class);
private final RenderItem renderItem = (RenderItem)RenderManager.instance.getEntityClassRenderObject(EntityItem.class);
@Override
@ -343,6 +346,15 @@ public class ItemRenderingHandler implements IItemRenderer
Minecraft.getMinecraft().renderEngine.bindTexture(MekanismUtils.getResource(ResourceType.RENDER, "ScubaSet.png"));
scubaTank.render(0.0625F);
}
else if(item.getItem() instanceof ItemFrictionBoots)
{
GL11.glRotatef(180, 0.0F, 0.0F, 1.0F);
GL11.glRotatef(90, 0.0F, -1.0F, 0.0F);
GL11.glScalef(2.0F, 2.0F, 2.0F);
GL11.glTranslatef(0.2F, -1.43F, 0.12F);
Minecraft.getMinecraft().renderEngine.bindTexture(MekanismUtils.getResource(ResourceType.RENDER, "FrictionBoots.png"));
frictionBoots.render(0.0625F);
}
else if(item.getItem() instanceof ItemBalloon)
{
if(type == ItemRenderType.EQUIPPED || type == ItemRenderType.EQUIPPED_FIRST_PERSON)
@ -362,7 +374,6 @@ public class ItemRenderingHandler implements IItemRenderer
GL11.glDisable(GL11.GL_CULL_FACE);
RenderPartTransmitter.getInstance().renderItem(TransmitterType.values()[item.getItemDamage()]);
GL11.glEnable(GL11.GL_CULL_FACE);
}
else {
if(item.getItem() instanceof ItemBlockMachine)

View file

@ -65,6 +65,7 @@ import mekanism.common.item.ItemDirtyDust;
import mekanism.common.item.ItemDust;
import mekanism.common.item.ItemElectricBow;
import mekanism.common.item.ItemEnergized;
import mekanism.common.item.ItemFrictionBoots;
import mekanism.common.item.ItemGasMask;
import mekanism.common.item.ItemIngot;
import mekanism.common.item.ItemJetpack;
@ -253,6 +254,7 @@ public class Mekanism
public static Item Sawdust;
public static Item Salt;
public static Item BrineBucket;
public static Item FrictionBoots;
//Blocks
public static Block BasicBlock;
@ -556,6 +558,9 @@ public class Mekanism
CraftingManager.getInstance().getRecipeList().add(new MekanismRecipe(new ItemStack(MachineBlock2, 1, 8), new Object[] {
"CGC", "ASA", "CGC", Character.valueOf('G'), MekanismUtils.getEmptyGasTank(), Character.valueOf('C'), "circuitBasic", Character.valueOf('A'), AtomicCore, Character.valueOf('S'), new ItemStack(BasicBlock, 1, 8)
}));
CraftingManager.getInstance().getRecipeList().add(new MekanismRecipe(new ItemStack(FrictionBoots), new Object[] {
"C C", "A A", "T T", Character.valueOf('C'), "circuitBasic", Character.valueOf('A'), EnrichedAlloy, Character.valueOf('T'), EnergyTablet.getUnchargedItem()
}));
for(RecipeType type : RecipeType.values())
{
@ -782,6 +787,7 @@ public class Mekanism
Salt = new ItemMekanism(configuration.getItem("Salt", 11231).getInt()).setUnlocalizedName("Salt");
BrineBucket = new ItemMekanism(configuration.getItem("BrineBucket", 11232).getInt()).setMaxStackSize(1).setUnlocalizedName("BrineBucket");
Crystal = new ItemCrystal(configuration.getItem("Crystal", 11233).getInt());
FrictionBoots = new ItemFrictionBoots(configuration.getItem("FrictionBoots", 11234).getInt()).setUnlocalizedName("FrictionBoots");
configuration.save();
@ -822,6 +828,7 @@ public class Mekanism
GameRegistry.registerItem(Salt, "Salt");
GameRegistry.registerItem(BrineBucket, "BrineBucket");
GameRegistry.registerItem(Crystal, "Crystal");
GameRegistry.registerItem(FrictionBoots, "FrictionBoots");
}
/**

View file

@ -38,12 +38,6 @@ public class ItemEnergized extends ItemMekanism implements IEnergizedItem, ISpec
list.add(EnumColor.AQUA + "Stored Energy: " + EnumColor.GREY + MekanismUtils.getEnergyDisplay(getEnergy(itemstack)));
}
@Override
public void onCreated(ItemStack itemstack, World world, EntityPlayer entityplayer)
{
itemstack = getUnchargedItem();
}
public ItemStack getUnchargedItem()
{
ItemStack charged = new ItemStack(this);

View file

@ -0,0 +1,262 @@
package mekanism.common.item;
import ic2.api.item.IElectricItemManager;
import ic2.api.item.ISpecialElectricItem;
import java.util.List;
import cofh.api.energy.IEnergyContainerItem;
import mekanism.api.EnumColor;
import mekanism.api.energy.IEnergizedItem;
import mekanism.client.render.ModelCustomArmor;
import mekanism.client.render.ModelCustomArmor.ArmorModel;
import mekanism.common.Mekanism;
import mekanism.common.integration.IC2ItemManager;
import mekanism.common.util.MekanismUtils;
import net.minecraft.client.model.ModelBiped;
import net.minecraft.client.renderer.texture.IconRegister;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemArmor;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.DamageSource;
import net.minecraft.world.World;
import net.minecraftforge.common.EnumHelper;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.event.ForgeSubscribe;
import net.minecraftforge.event.entity.living.LivingAttackEvent;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
public class ItemFrictionBoots extends ItemArmor implements IEnergizedItem, ISpecialElectricItem, IEnergyContainerItem
{
/** The maximum amount of energy this item can hold. */
public double MAX_ELECTRICITY = 12000;
public ItemFrictionBoots(int id)
{
super(id, EnumHelper.addArmorMaterial("FRICTIONBOOTS", 0, new int[] {0, 0, 0, 0}, 0), 0, 3);
setMaxStackSize(1);
setMaxDamage(100);
setNoRepair();
setCreativeTab(Mekanism.tabMekanism);
MinecraftForge.EVENT_BUS.register(this);
}
@Override
@SideOnly(Side.CLIENT)
public void registerIcons(IconRegister register) {}
@Override
public boolean isValidArmor(ItemStack stack, int armorType, Entity entity)
{
return armorType == 3;
}
@Override
public String getArmorTexture(ItemStack stack, Entity entity, int slot, String type)
{
return "mekanism:render/NullArmor.png";
}
@Override
@SideOnly(Side.CLIENT)
public ModelBiped getArmorModel(EntityLivingBase entityLiving, ItemStack itemStack, int armorSlot)
{
ModelCustomArmor model = ModelCustomArmor.INSTANCE;
model.modelType = ArmorModel.FRICTIONBOOTS;
return model;
}
@Override
public void addInformation(ItemStack itemstack, EntityPlayer entityplayer, List list, boolean flag)
{
list.add(EnumColor.AQUA + "Stored Energy: " + EnumColor.GREY + MekanismUtils.getEnergyDisplay(getEnergy(itemstack)));
}
public ItemStack getUnchargedItem()
{
ItemStack charged = new ItemStack(this);
charged.setItemDamage(100);
return charged;
}
@Override
public void getSubItems(int i, CreativeTabs tabs, List list)
{
ItemStack discharged = new ItemStack(this);
discharged.setItemDamage(100);
list.add(discharged);
ItemStack charged = new ItemStack(this);
setEnergy(charged, ((IEnergizedItem)charged.getItem()).getMaxEnergy(charged));
list.add(charged);
}
@Override
public boolean canProvideEnergy(ItemStack itemStack)
{
return canSend(itemStack);
}
@Override
public int getChargedItemId(ItemStack itemStack)
{
return itemID;
}
@Override
public int getEmptyItemId(ItemStack itemStack)
{
return itemID;
}
@Override
public int getMaxCharge(ItemStack itemStack)
{
return 0;
}
@Override
public int getTier(ItemStack itemStack)
{
return 4;
}
@Override
public int getTransferLimit(ItemStack itemStack)
{
return 0;
}
@Override
public double getEnergy(ItemStack itemStack)
{
if(itemStack.stackTagCompound == null)
{
return 0;
}
double electricityStored = itemStack.stackTagCompound.getDouble("electricity");
itemStack.setItemDamage((int)Math.max(1, (Math.abs(((electricityStored/getMaxEnergy(itemStack))*100)-100))));
return electricityStored;
}
@Override
public void setEnergy(ItemStack itemStack, double amount)
{
if(itemStack.stackTagCompound == null)
{
itemStack.setTagCompound(new NBTTagCompound());
}
double electricityStored = Math.max(Math.min(amount, getMaxEnergy(itemStack)), 0);
itemStack.stackTagCompound.setDouble("electricity", electricityStored);
itemStack.setItemDamage((int)Math.max(1, (Math.abs(((electricityStored/getMaxEnergy(itemStack))*100)-100))));
}
@Override
public double getMaxEnergy(ItemStack itemStack)
{
return MAX_ELECTRICITY;
}
@Override
public double getMaxTransfer(ItemStack itemStack)
{
return getMaxEnergy(itemStack)*0.005;
}
@Override
public boolean canReceive(ItemStack itemStack)
{
return getMaxEnergy(itemStack)-getEnergy(itemStack) > 0;
}
@Override
public boolean canSend(ItemStack itemStack)
{
return false;
}
@Override
public int receiveEnergy(ItemStack theItem, int energy, boolean simulate)
{
if(canReceive(theItem))
{
double energyNeeded = getMaxEnergy(theItem)-getEnergy(theItem);
double toReceive = Math.min(energy*Mekanism.FROM_TE, energyNeeded);
if(!simulate)
{
setEnergy(theItem, getEnergy(theItem) + toReceive);
}
return (int)Math.round(toReceive*Mekanism.TO_TE);
}
return 0;
}
@Override
public int extractEnergy(ItemStack theItem, int energy, boolean simulate)
{
if(canSend(theItem))
{
double energyRemaining = getEnergy(theItem);
double toSend = Math.min((energy*Mekanism.FROM_TE), energyRemaining);
if(!simulate)
{
setEnergy(theItem, getEnergy(theItem) - toSend);
}
return (int)Math.round(toSend*Mekanism.TO_TE);
}
return 0;
}
@Override
public int getEnergyStored(ItemStack theItem)
{
return (int)Math.round(getEnergy(theItem)*Mekanism.TO_TE);
}
@Override
public int getMaxEnergyStored(ItemStack theItem)
{
return (int)Math.round(getMaxEnergy(theItem)*Mekanism.TO_TE);
}
@Override
public boolean isMetadataSpecific()
{
return false;
}
@Override
public IElectricItemManager getManager(ItemStack itemStack)
{
return IC2ItemManager.getManager(this);
}
@ForgeSubscribe
public void onEntityAttacked(LivingAttackEvent event)
{
EntityLivingBase base = event.entityLiving;
if(base.getCurrentItemOrArmor(1) != null && base.getCurrentItemOrArmor(1).getItem() instanceof ItemFrictionBoots)
{
ItemFrictionBoots boots = (ItemFrictionBoots)base.getCurrentItemOrArmor(1).getItem();
if(event.source == DamageSource.fall)
{
event.setCanceled(true);
}
}
}
}

View file

@ -31,6 +31,7 @@ item.CompressedRedstone.name=Compressed Redstone
item.Sawdust.name=Sawdust
item.Salt.name=Salt
item.BrineBucket.name=Brine Bucket
item.FrictionBoots.name=Friction Boots
//Gas Tank
tile.GasTank.GasTank.name=Gas Tank
@ -380,6 +381,9 @@ tooltip.RotaryCondensentrator=A machine capable of converting gasses into !nthei
tooltip.ChemicalInjectionChamber=An elite machine capable of processing !nores into four shards, serving as the initial !nstage of 400% ore processing.
tooltip.ElectrolyticSeparator=A machine that uses the process of !nelectrolysis to split apart a certain !ngas into two different gasses.
tooltip.PrecisionSawmill=A machine used to process logs and other !nwood-based items more efficiently, as well !nas to obtain sawdust.
tooltip.ChemicalDissolutionChamber=An ultimate machine used to !nchemically dissolve all impurities of an !nore, leaving an unprocessed slurry !nbehind.
tooltip.ChemicalWasher=An ultimate machine that cleans unprocessed !nslurry and prepares it for crystallization.
tooltip.ChemicalCrystalizer=An ultimate machine used to crystalize !npurified ore slurry into ore crystals.
tooltip.OsmiumOre=A strong mineral that can be found !nat nearly any height in the world. !nIt is known to have many uses in !nthe construction of machinery.
tooltip.CopperOre=A common, conductive material that !ncan be used in the production of !nwires. It's ability to withstand !nhigh heats also makes it essential !nto advanced machinery.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.5 KiB

After

Width:  |  Height:  |  Size: 4.4 KiB