public static boolean addEnderChest(AbstractHorse horse){ if(horse == null || !(horse instanceof AbstractChestHorse) || horse.getGrowingAge() != 0 || hasEnderChest(horse)) return false; AbstractChestHorse horseChest = (AbstractChestHorse)horse; if(horseChest.hasChest()){ ContainerHorseChest chest = getHorseChest(horse); if (!horse.world.isRemote && chest != null) { for (int i = 0; i < chest.getSizeInventory(); ++i) { ItemStack itemstack = chest.getStackInSlot(i); if (!itemstack.isEmpty()) { horse.entityDropItem(itemstack, 0.0F); } } } } setHasEnderChest(horse, true); return true; }
/** * Draws the background layer of this container (behind the items). */ protected void drawGuiContainerBackgroundLayer(float partialTicks, int mouseX, int mouseY) { GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); this.mc.getTextureManager().bindTexture(HORSE_GUI_TEXTURES); int i = (this.width - this.xSize) / 2; int j = (this.height - this.ySize) / 2; this.drawTexturedModalRect(i, j, 0, 0, this.xSize, this.ySize); if (this.horseEntity instanceof AbstractChestHorse) { AbstractChestHorse abstractchesthorse = (AbstractChestHorse)this.horseEntity; if (abstractchesthorse.func_190695_dh()) { this.drawTexturedModalRect(i + 79, j + 17, 0, this.ySize, abstractchesthorse.func_190696_dl() * 18, 54); } } if (this.horseEntity.func_190685_dA()) { this.drawTexturedModalRect(i + 7, j + 35 - 18, 18, this.ySize + 54, 18, 18); } if (this.horseEntity.func_190677_dK()) { if (this.horseEntity instanceof EntityLlama) { this.drawTexturedModalRect(i + 7, j + 35, 36, this.ySize + 54, 18, 18); } else { this.drawTexturedModalRect(i + 7, j + 35, 0, this.ySize + 54, 18, 18); } } GuiInventory.drawEntityOnScreen(i + 51, j + 60, 17, (float)(i + 51) - this.mousePosx, (float)(j + 75 - 50) - this.mousePosY, this.horseEntity); }
/** * Sets the models various rotation angles then renders the model. */ public void render(Entity entityIn, float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch, float scale) { AbstractChestHorse abstractchesthorse = (AbstractChestHorse)entityIn; boolean flag = !abstractchesthorse.isChild() && abstractchesthorse.func_190695_dh(); this.setRotationAngles(limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, scale, entityIn); if (this.isChild) { float f = 2.0F; GlStateManager.pushMatrix(); GlStateManager.translate(0.0F, this.childYOffset * scale, this.childZOffset * scale); GlStateManager.popMatrix(); GlStateManager.pushMatrix(); float f1 = 0.7F; GlStateManager.scale(0.71428573F, 0.64935064F, 0.7936508F); GlStateManager.translate(0.0F, 21.0F * scale, 0.22F); this.head.render(scale); GlStateManager.popMatrix(); GlStateManager.pushMatrix(); float f2 = 1.1F; GlStateManager.scale(0.625F, 0.45454544F, 0.45454544F); GlStateManager.translate(0.0F, 33.0F * scale, 0.0F); this.body.render(scale); GlStateManager.popMatrix(); GlStateManager.pushMatrix(); GlStateManager.scale(0.45454544F, 0.41322312F, 0.45454544F); GlStateManager.translate(0.0F, 33.0F * scale, 0.0F); this.leg1.render(scale); this.leg2.render(scale); this.leg3.render(scale); this.leg4.render(scale); GlStateManager.popMatrix(); } else { this.head.render(scale); this.body.render(scale); this.leg1.render(scale); this.leg2.render(scale); this.leg3.render(scale); this.leg4.render(scale); } if (flag) { this.field_191226_i.render(scale); this.field_191227_j.render(scale); } }
/** * Handles special slots of the horse inventory (Slot 0: Saddle, Slot 1: Armor) and * a special slot 99 which must be a chest (sets whether the horse is chested or not) * * @param slot the special horse slot (0, 1 or 99) * @param horse the horse * @param stack the item stack (must be saddle for slot 0, any horse armor for slot 1 and chest for slot 99) * @param tag the new nbt tag of the special slot (works only for 0 and 1, e.g. to enchant the armor) * @param mergeLists See the "mergeLists" parameter of {@link #nbtMerge(NBTTagCompound, NBTTagCompound, boolean)} * @return whether the given data was valid (valid slot, valid item, etc.) and whether the special slots could successfully be handled * @throws Exeption if reflective access failed */ private static boolean handleHorseSpecialSlots(AbstractHorse horse, int slot, ItemStack stack, NBTTagCompound tag, boolean mergeLists) throws Exception { IItemHandler h = horse.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, null); IItemHandlerModifiable inventory = h instanceof IItemHandlerModifiable ? (IItemHandlerModifiable) h : null; if (initChest == null || updateSlots == null || inventory == null) return false; if (tag != null) { if (slot < inventory.getSlots()) return false; if (inventory.getStackInSlot(slot) != ItemStack.EMPTY) { stack = inventory.getStackInSlot(slot).copy(); nbtMerge(stack.getTagCompound(), tag, mergeLists); inventory.setStackInSlot(slot, stack); updateSlots.invoke(horse); } return true; } if (slot == 99 && horse instanceof AbstractChestHorse) { if (stack == ItemStack.EMPTY || ((AbstractChestHorse) horse).hasChest()) { ((AbstractChestHorse) horse).setChested(false); initChest.invoke(horse); return true; } if (stack != ItemStack.EMPTY && stack.getItem() == Item.getItemFromBlock(Blocks.CHEST) && !(horse instanceof AbstractChestHorse)) { ((AbstractChestHorse) horse).setChested(true); initChest.invoke(horse); return true; } return false; } else if (slot >= 0 && slot < 2 && slot < inventory.getSlots()) { if (slot == 0 && stack != ItemStack.EMPTY && stack.getItem() != Items.SADDLE) return false; else if (slot != 1 || (stack == ItemStack.EMPTY || horse.isArmor(stack)) && horse.wearsArmor()) { inventory.setStackInSlot(slot, stack == ItemStack.EMPTY ? ItemStack.EMPTY : stack.copy()); updateSlots.invoke(horse); return true; } else return false; } else return false; }
@Override public String execute(CommandSender sender, String[] params) throws CommandException { EntityPlayerMP player = getSenderAsEntity(sender.getMinecraftISender(), EntityPlayerMP.class); Entity entity = EntityUtils.traceEntity(player, 128D); if (params.length == 0 && entity instanceof AbstractChestHorse) { ((AbstractChestHorse) entity).openGUI(player); } else if (params.length == 0 && entity instanceof EntityVillager) { player.displayVillagerTradeGui((EntityVillager) entity); } else if (params.length == 0 && entity instanceof EntityMinecartContainer) { player.displayGui((EntityMinecartContainer) entity); } else { if (params.length == 0 || params.length > 2) { BlockPos trace; try {trace = params.length > 2 ? getCoordFromParams(sender.getMinecraftISender(), params, 0) : EntityUtils.traceBlock(player, 128D);} catch (NumberFormatException nfe) {throw new CommandException("command.open.NAN", sender);} if (trace == null) throw new CommandException("command.open.noBlock", sender); TileEntity te = sender.getWorld().getTileEntity(trace); Block block = WorldUtils.getBlock(sender.getWorld(), trace); if (te instanceof IInteractionObject) player.displayGui((IInteractionObject) te); else if (te instanceof IInventory) player.displayGUIChest((IInventory) te); else if (block == Blocks.ANVIL) player.displayGui(new BlockAnvil.Anvil(sender.getWorld(), trace)); else if (block == Blocks.CRAFTING_TABLE) player.displayGui(new BlockWorkbench.InterfaceCraftingTable(sender.getWorld(), trace)); else throw new CommandException("command.open.invalidBlock", sender); } else if (params.length > 0) { if (params[0].equalsIgnoreCase("enderchest")) player.displayGUIChest(player.getInventoryEnderChest()); else if (params[0].equalsIgnoreCase("enchantment_table") || (params.length > 1 && params[0].equalsIgnoreCase("enchantment") && params[1].equalsIgnoreCase("table"))) { final World w = sender.getWorld(); player.displayGui(new IInteractionObject() { @Override public boolean hasCustomName() {return false;} @Override public String getName() {return "container.enchant";} @Override public ITextComponent getDisplayName() {return new TextComponentTranslation(this.getName());} @Override public String getGuiID() {return "minecraft:enchanting_table";} @Override public Container createContainer(InventoryPlayer playerInventory, EntityPlayer playerIn) { return new ContainerEnchantment(playerInventory, w, BlockPos.ORIGIN); } }); this.allowedInteractions.put(player, player.openContainer); } else if (params[0].equalsIgnoreCase("anvil")) { player.displayGui(new BlockAnvil.Anvil(sender.getWorld(), BlockPos.ORIGIN)); this.allowedInteractions.put(player, player.openContainer); } else if (params[0].equalsIgnoreCase("workbench") || params[0].equalsIgnoreCase("crafting_table") || (params.length > 1 && params[0].equalsIgnoreCase("crafting") && params[1].equalsIgnoreCase("table")) ) { player.displayGui(new BlockWorkbench.InterfaceCraftingTable(sender.getWorld(), BlockPos.ORIGIN)); this.allowedInteractions.put(player, player.openContainer); } else if (params[0].equalsIgnoreCase("furnace") || params[0].equalsIgnoreCase("brewing_stand") || (params.length > 1 && params[0].equalsIgnoreCase("brewing") && params[1].equalsIgnoreCase("stand"))) throw new CommandException("command.open.cantOpenTEs", sender); else throw new CommandException("command.open.invalidContainer", sender, params[0]); } else throw new CommandException("command.generic.invalidUsage", sender, this.getCommandName()); } return null; }