Posted September 16, 20205 yr After following a tutorial I still have a small problem (I know the anti-tut ppl will berate me). Layer0 is dyeable but returns a black color, and layer1 (overlay) returns the default color that layer0 should be. The layer0 texture is properly grayscale. Item code below. It's probably due to getItemColor, but I've toyed with it with no success public class DyeableBackpackItem extends Item implements IBackpack { private final Backpack backpack; private static final String NBT_COLOR = "BackpackColor"; public DyeableBackpackItem(Backpack backpack, Properties properties) { super(properties); this.backpack = backpack; } public static int getBackpackColor(ItemStack stack) { return stack.getOrCreateTag().getInt(NBT_COLOR); } public static void setBackpackColor(ItemStack stack, int color) { stack.getOrCreateTag().putInt(NBT_COLOR, color); } public static int getItemColor(ItemStack stack, int tintIndex) { if (tintIndex == 0) { return getBackpackColor(stack); } return 10511680; } @Override public ActionResult<ItemStack> onItemRightClick(World worldIn, PlayerEntity playerIn, Hand handIn) { ItemStack itemstack = playerIn.getHeldItem(handIn); if (playerIn.isSneaking()) { if (!worldIn.isRemote && playerIn instanceof ServerPlayerEntity) { double pX = playerIn.getPosX(); double pY = playerIn.getPosY(); double pZ = playerIn.getPosZ(); worldIn.playSound(null, pX, pY + 0.5D, pZ, SoundEvents.ITEM_ARMOR_EQUIP_LEATHER, SoundCategory.PLAYERS, 1.0F, 1.0F); open((ServerPlayerEntity)playerIn, itemstack, handIn == Hand.MAIN_HAND ? playerIn.inventory.currentItem : -1); return ActionResult.resultConsume(itemstack); } } return ActionResult.resultFail(itemstack); } @Override public void open(ServerPlayerEntity player, ItemStack stack, int selectedSlot) { NetworkHooks.openGui(player, new SimpleNamedContainerProvider((id, playerInventory, openPlayer) -> new BackpackContainer(id, playerInventory, new BackpackInventory(stack, backpack.getInventorySize()), backpack, selectedSlot), stack.getDisplayName()), buffer -> { buffer.writeEnumValue(backpack); buffer.writeVarInt(selectedSlot); }); } public Backpack getBackpack() { return backpack; } // Fixes bug @Override public CompoundNBT getShareTag(ItemStack stack) { if (ServerConfig.getInstance().shareAllNBTData.get()) { return super.getShareTag(stack); } if (!stack.hasTag()) { return null; } final CompoundNBT compound = stack.getTag().copy(); compound.remove("Items"); if (compound.isEmpty()) { return null; } return compound; } // Fixes bug @Override public boolean onDroppedByPlayer(ItemStack item, PlayerEntity player) { return !(player.openContainer instanceof BackpackContainer); } } Edited September 16, 20205 yr by urbanxx001
September 16, 20205 yr Author Yeah. In the main class: eventBus.addListener(ColorHandler::registerItemColors); With: public class ColorHandler { public static void registerItemColors(ColorHandlerEvent.Item event) { event.getItemColors().register(DyeableBackpackItem::getItemColor, ModItems.LEATHER_BACKPACK); } } Edited September 16, 20205 yr by urbanxx001
September 16, 20205 yr Author The method is definitely called, again layer0 is dyeable, and the dyeing recipe uses getItemColor, it's just the default color is applied to layer1 instead of 0. Edited September 16, 20205 yr by urbanxx001
September 16, 20205 yr 34 minutes ago, urbanxx001 said: The method is definitely called, again layer0 is dyeable, and the dyeing recipe uses getItemColor, it's just the default color is applied to layer1 instead of 0. The default color is returned for layer1 because you are returning 10511680 in getItemColor() if the layer is not 0. Try changing the last return to -1.
September 16, 20205 yr Author 4 hours ago, vemerion said: Try changing the last return to -1. That did the trick, thanks for your help yesterday and now today. I wonder why it wasn't that way in the tutorial. Fixed Layer0 by using fillItemGroup, I first avoided it as I thought it would register 2 instances of the item. Edited September 17, 20205 yr by urbanxx001
September 17, 20205 yr 10 hours ago, urbanxx001 said: That did the trick, thanks for your help yesterday and now today. I wonder why it wasn't that way in the tutorial. Fixed Layer0 by using fillItemGroup, I first avoided it as I thought it would register 2 instances of the item. No problem, glad I could be of help
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.