package mods.ocminecart.common.items; import cpw.mods.fml.common.FMLCommonHandler; import cpw.mods.fml.common.Loader; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import mods.ocminecart.OCMinecart; import mods.ocminecart.Settings; import mods.ocminecart.common.assemble.util.TooltipUtil; import mods.ocminecart.common.entityextend.RemoteCartExtender; import mods.ocminecart.common.entityextend.RemoteExtenderRegister; import mods.ocminecart.common.items.interfaces.ItemEntityInteract; import mods.ocminecart.network.ModNetwork; import mods.ocminecart.network.message.ItemUseMessage; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.client.settings.GameSettings; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.Entity; import net.minecraft.entity.item.EntityMinecart; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.ChatComponentText; import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.IIcon; import net.minecraft.util.StatCollector; import net.minecraft.world.World; import org.lwjgl.input.Keyboard; import java.util.List; import java.util.Random; public class ItemCartRemoteModule extends Item implements ItemEntityInteract{ private IIcon icons[] = new IIcon[3]; public static int[] range; public ItemCartRemoteModule(){ super(); this.setMaxStackSize(64); this.setUnlocalizedName(OCMinecart.MODID+".remotemodule"); this.setHasSubtypes(true); if(FMLCommonHandler.instance().getEffectiveSide().isServer()) range = Settings.RemoteRange; } public boolean doesSneakBypassUse(World world, int x, int y, int z, EntityPlayer player){ return true; } public String getItemStackDisplayName(ItemStack stack){ return this.getDisplayString(stack, false); } //Called in the EventHandler public boolean onEntityClick(EntityPlayer p, Entity e, ItemStack s, Type t){ if((e instanceof EntityMinecart) && t == Type.RIGHT_CLICK){ if(p.worldObj.isRemote) return true; int err = RemoteExtenderRegister.enableRemote((EntityMinecart) e, true); if(err==0){ RemoteCartExtender ext = RemoteExtenderRegister.getExtender((EntityMinecart) e); if(ext!=null){ ext.setRemoteItem(s); ext.setMaxWlanStrength(getRangeByTier(s.getItemDamage())); ext.setOwner(p.getUniqueID().toString()); } } NBTTagCompound usedat = new NBTTagCompound(); usedat.setDouble("posX", e.posX); usedat.setDouble("posY", e.posY); usedat.setDouble("posZ", e.posZ); usedat.setByte("error", (byte)err); ModNetwork.sendToNearPlayers(new ItemUseMessage(0,p.getEntityId(),usedat), e.posX, e.posY, e.posZ, e.worldObj); if(!p.capabilities.isCreativeMode && err == 0) s.stackSize--; return true; } return false; } @SideOnly(Side.CLIENT) public void onMPUsage(EntityPlayer p, NBTTagCompound data){ World worldObj = p.worldObj; double posX = data.getDouble("posX"); double posY = data.getDouble("posY"); double posZ = data.getDouble("posZ"); byte error = data.getByte("error"); Random r = new Random(); if(error == 0){ p.swingItem(); if(p.equals(Minecraft.getMinecraft().thePlayer)) p.addChatMessage(new ChatComponentText(EnumChatFormatting.GREEN+StatCollector.translateToLocal("chat."+OCMinecart.MODID+".moduleinstalled"))); } else if(error == 1) p.addChatMessage(new ChatComponentText(EnumChatFormatting.RED+StatCollector.translateToLocal("chat."+OCMinecart.MODID+".invalidcart"))); else p.addChatMessage(new ChatComponentText(EnumChatFormatting.RED+StatCollector.translateToLocal("chat."+OCMinecart.MODID+".hasmodule"))); for(int i=0;i<100;i++){ if(error == 0) worldObj.spawnParticle("happyVillager", posX+(r.nextDouble()-0.5)*1.4, posY+(r.nextDouble()-0.5)*1.4, posZ+(r.nextDouble()-0.5)*1.4, 0, 0, 0); else worldObj.spawnParticle("smoke", posX+(r.nextDouble()-0.5)*1.4, posY-0.3, posZ+(r.nextDouble()-0.5)*1.4, 0, 0, 0); } } public int getRangeByTier(int tier){ switch(tier){ case 1: return range[1]; case 2: return range[2]; default: return range[0]; } } @Override public void getSubItems(Item item, CreativeTabs tab, List list){ for(int i=0;i<3;i+=1){ list.add(new ItemStack(item,1,i)); } } @SideOnly(Side.CLIENT) public IIcon getIconFromDamage(int damage) { if(damage>2) return null; return icons[damage]; } @SideOnly(Side.CLIENT) public void registerIcons(IIconRegister register){ for(int i=0;i<3;i+=1){ icons[i]=register.registerIcon(OCMinecart.MODID+":remotemodule"+(i+1)); } } public String getDisplayString(ItemStack stack,boolean hasColor){ EnumChatFormatting color; String tier; tier=StatCollector.translateToLocal("tooltip."+OCMinecart.MODID+".tier"+(stack.getItemDamage()+1)); switch(stack.getItemDamage()){ case 0: color = EnumChatFormatting.WHITE; break; case 1: color = EnumChatFormatting.YELLOW; break; case 2: color = EnumChatFormatting.AQUA; break; default: color = EnumChatFormatting.DARK_RED; tier = "ERROR!"; break; } if(!hasColor){ color=EnumChatFormatting.RESET; } return color+super.getItemStackDisplayName(stack)+" "+tier; } public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean adv) { list.clear(); list.add(this.getDisplayString(stack, true)); if(!Keyboard.isKeyDown(Minecraft.getMinecraft().gameSettings.keyBindSneak.getKeyCode())){ String key = GameSettings.getKeyDisplayString(Minecraft.getMinecraft().gameSettings.keyBindSneak.getKeyCode()); String formkey = "[" + EnumChatFormatting.WHITE + key + EnumChatFormatting.GRAY + "]"; list.add(StatCollector.translateToLocalFormatted("tooltip."+OCMinecart.MODID+".moreinfo", formkey)); } else{ list.addAll(TooltipUtil.trimString(StatCollector.translateToLocal("tooltip."+OCMinecart.MODID+".remotemodule.desc"))); list.add("Max. Range: "+EnumChatFormatting.WHITE+getRangeByTier(stack.getItemDamage())); list.add("Railcraft is "+(!Loader.isModLoaded("Railcraft")? EnumChatFormatting.RED+"not " : EnumChatFormatting.GREEN) +"avaiable"); } } }