Jump to content

Recommended Posts

Posted (edited)

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 by urbanxx001
Posted (edited)

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 by urbanxx001
Posted (edited)

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 by urbanxx001
Posted
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.

  • Thanks 1
Posted (edited)
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 by urbanxx001
Posted
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.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Announcements



  • Recently Browsing

    • No registered users viewing this page.
  • Posts

    • I also just tried with iron's spellbooks removed, since that seemed related, but i am still having the same problem, even in newly created worlds. https://mclo.gs/AtrAfaj 
    • My Gradle Project for my Minecraft mod isn't building. Terminal: * Where: Settings file 'C:\Users\csonn\OneDrive\Desktop\fusionlucky\settings.gradle' line: 2 * What went wrong: Could not compile settings file 'C:\Users\csonn\OneDrive\Desktop\fusionlucky\settings.gradle'. > startup failed:   settings file 'C:\Users\csonn\OneDrive\Desktop\fusionlucky\settings.gradle': 2: The pluginManagement {} block must appear before any other statements in the script.   For more information on the pluginManagement {} block, please refer to https://docs.gradle.org/9.0.0/userguide/plugins.html#sec:plugin_management in the Gradle documentation.    @ line 2, column 1.      pluginManagement {      ^   1 error * Try: > Run with --stacktrace option to get the stack trace. > Run with --info or --debug option to get more log output. > Run with --scan to generate a Build Scan (Powered by Develocity). > Get more help at https://help.gradle.org.   Setting.Gradle File:   rootProject.name = 'fusion-lucky-block' pluginManagement {     repositories {         gradlePluginPortal()         maven { url "https://maven.minecraftforge.net/" }         mavenCentral()     } }
    • no change still. here's a new log  https://mclo.gs/RXwiZmn 
    • Whenever I go to build my it says "Build failed in " how many seconds   Here is what is said in my terminal * Where: Build file 'C:\Users\csonn\OneDrive\Desktop\fusionlucky\build.gradle' line: 3 * What went wrong: Plugin [id: 'net.minecraftforge.gradle', version: '6.1.51'] was not found in any of the following sources: - Gradle Core Plugins (plugin is not in 'org.gradle' namespace) - Included Builds (No included builds contain this plugin) - Plugin Repositories (could not resolve plugin artifact 'net.minecraftforge.gradle:net.minecraftforge.gradle.gradle.plugin:6.1.51')   Searched in the following repositories:     Gradle Central Plugin Repository     MinecraftForge(https://maven.minecraftforge.net/) * Try: > Run with --stacktrace option to get the stack trace. > Run with --info or --debug option to get more log output. > Get more help at https://help.gradle.org.   Here is what is in my build.gradle file plugins {     id 'java'     id 'net.minecraftforge.gradle' version '6.1+' }   group = 'io.github.csonnic03.fusionlucky' version = '1.0.0' archivesBaseName = 'fusionlucky'   java {     toolchain {         languageVersion = JavaLanguageVersion.of(17)     } }   repositories {     mavenCentral()     maven {         name "forgeMaven"         url "https://maven.minecraftforge.net/<repository>" } }   dependencies {     minecraft 'net.minecraftforge:forge:1.20.1-47.1.0' }   minecraft {     mappings channel: 'official', version: '1.20.1'     runs {         client {             workingDirectory project.file('run')         }         server {             workingDirectory project.file('run')         }     } }   tasks.withType(JavaCompile) {     options.encoding = 'UTF-8' }   jar {     manifest {         attributes(             "Specification-Title": "Fusion Lucky Block",             "Specification-Vendor": "example",             "Implementation-Title": project.name,             "Implementation-Version": project.version,             "Implementation-Vendor": "example",             "ModLauncher-TargetFMLVersion": "[47,)"         )     } }  
  • Topics

×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.