Java tutorial
/* * This file is part of Matter Overdrive * Copyright (c) 2015., Simeon Radivoev, All rights reserved. * * Matter Overdrive is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * Matter Overdrive is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with Matter Overdrive. If not, see <http://www.gnu.org/licenses>. */ package matteroverdrive.items.android; import com.google.common.collect.Multimap; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import matteroverdrive.Reference; import matteroverdrive.api.inventory.IBionicPart; import matteroverdrive.client.render.entity.EntityRendererRangedRougeAndroid; import matteroverdrive.client.render.entity.EntityRendererRougeAndroid; import matteroverdrive.entity.player.AndroidPlayer; import matteroverdrive.proxy.ClientProxy; import matteroverdrive.util.MOStringHelper; import net.minecraft.client.model.ModelBiped; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.SharedMonsterAttributes; import net.minecraft.entity.ai.attributes.AttributeModifier; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.IIcon; import net.minecraft.util.MathHelper; import net.minecraft.util.ResourceLocation; import java.util.List; import java.util.UUID; /** * Created by Simeon on 5/28/2015. */ public class RougeAndroidParts extends BionicPart implements IBionicPart { String[] names = new String[] { "head", "arms", "legs", "chest" }; String[] healtModifiersIDs = new String[] { "1bb8df41-63d1-4f58-92c4-43adea7528b2", "73983b14-e605-40be-8567-36a9dec51d4f", "29419afc-63ad-4b74-87e2-38219e867119", "e4b38c80-7407-48fd-b837-8f36ae516c4d" }; IIcon[] icons = new IIcon[names.length]; public RougeAndroidParts(String name) { super(name); setHasSubtypes(true); } public void addDetails(ItemStack itemstack, EntityPlayer player, List infos) { if (itemstack.getTagCompound() != null) { if (itemstack.getTagCompound().getByte("Type") == 1) { infos.add( EnumChatFormatting.AQUA + MOStringHelper.translateToLocal("item.rouge_android_part.range")); } else { infos.add( EnumChatFormatting.GOLD + MOStringHelper.translateToLocal("item.rouge_android_part.melee")); } } else { infos.add(EnumChatFormatting.GOLD + MOStringHelper.translateToLocal("item.rouge_android_part.melee")); } super.addDetails(itemstack, player, infos); } @Override @SideOnly(Side.CLIENT) public void registerIcons(IIconRegister iconRegister) { for (int i = 0; i < names.length; i++) { icons[i] = iconRegister.registerIcon(Reference.MOD_ID + ":" + "rouge_android_" + names[i]); } } @Override public String getUnlocalizedName(ItemStack stack) { int i = MathHelper.clamp_int(stack.getItemDamage(), 0, 3); return super.getUnlocalizedName() + "." + names[MathHelper.clamp_int(i, 0, names.length - 1)]; } @Override @SideOnly(Side.CLIENT) public void getSubItems(Item item, CreativeTabs creativeTabs, List list) { for (int i = 0; i < names.length; i++) { list.add(new ItemStack(this, 1, i)); } } @SideOnly(Side.CLIENT) public IIcon getIconFromDamage(int damage) { int j = MathHelper.clamp_int(damage, 0, names.length - 1); return this.icons[j]; } @Override public int getType(ItemStack itemStack) { return itemStack.getItemDamage(); } @Override public boolean affectAndroid(AndroidPlayer player, ItemStack itemStack) { return true; } @Override public Multimap<String, AttributeModifier> getModifiers(AndroidPlayer player, ItemStack itemStack) { Multimap multimap = super.getModifiers(player, itemStack); if (multimap.isEmpty()) { multimap.put(SharedMonsterAttributes.maxHealth.getAttributeUnlocalizedName(), new AttributeModifier( UUID.fromString(healtModifiersIDs[itemStack.getItemDamage()]), MOStringHelper.translateToLocal( "attribute.name." + SharedMonsterAttributes.maxHealth.getAttributeUnlocalizedName()), 1f, 0)); } return multimap; } @SideOnly(Side.CLIENT) @Override public ResourceLocation getTexture(AndroidPlayer androidPlayer, ItemStack itemStack) { if (itemStack.getTagCompound() != null) { if (itemStack.getTagCompound().getByte("Type") == 1) { return EntityRendererRangedRougeAndroid.texture; } } return EntityRendererRougeAndroid.texture; } @SideOnly(Side.CLIENT) @Override public ModelBiped getModel(AndroidPlayer androidPlayer, ItemStack itemStack) { int type = getType(itemStack); ModelBiped model = ClientProxy.renderHandler.modelMeleeRogueAndroidParts; if (itemStack.getTagCompound() != null) { if (itemStack.getTagCompound().getByte("Type") == 1) { model = ClientProxy.renderHandler.modelRangedRogueAndroidParts; } } model.bipedHead.showModel = type == 0; model.bipedHeadwear.showModel = type == 0; model.bipedBody.showModel = type == 3; model.bipedRightArm.showModel = type == 1; model.bipedLeftArm.showModel = type == 1; model.bipedRightLeg.showModel = type == 2; model.bipedLeftLeg.showModel = type == 2; return model; } }