diff --git a/Common/src/main/java/me/hypherionmc/craterlib/api/rendering/ItemDyable.java b/Common/src/main/java/me/hypherionmc/craterlib/api/rendering/ItemDyable.java index 3f86328..0b75aeb 100644 --- a/Common/src/main/java/me/hypherionmc/craterlib/api/rendering/ItemDyable.java +++ b/Common/src/main/java/me/hypherionmc/craterlib/api/rendering/ItemDyable.java @@ -1,6 +1,7 @@ package me.hypherionmc.craterlib.api.rendering; import net.minecraft.world.item.DyeColor; +import net.minecraft.world.item.ItemStack; /** * Helper Interface for Dyable Items @@ -12,6 +13,6 @@ public interface ItemDyable { * * @return */ - public DyeColor getColor(); + public DyeColor getColor(ItemStack stack); } diff --git a/Common/src/main/java/me/hypherionmc/craterlib/client/rendering/ItemColorHandler.java b/Common/src/main/java/me/hypherionmc/craterlib/client/rendering/ItemColorHandler.java index 1204388..998870f 100644 --- a/Common/src/main/java/me/hypherionmc/craterlib/client/rendering/ItemColorHandler.java +++ b/Common/src/main/java/me/hypherionmc/craterlib/client/rendering/ItemColorHandler.java @@ -28,7 +28,7 @@ public class ItemColorHandler implements ItemColor { */ private int getColorFromStack(ItemStack stack) { if (stack.getItem() instanceof ItemDyable itemDyable) { - return itemDyable.getColor().getMaterialColor().col; + return itemDyable.getColor(stack).getMaterialColor().col; } return 0; } diff --git a/Common/src/main/java/me/hypherionmc/craterlib/common/item/BlockItemDyable.java b/Common/src/main/java/me/hypherionmc/craterlib/common/item/BlockItemDyable.java index 93cd0af..8383b19 100644 --- a/Common/src/main/java/me/hypherionmc/craterlib/common/item/BlockItemDyable.java +++ b/Common/src/main/java/me/hypherionmc/craterlib/common/item/BlockItemDyable.java @@ -2,9 +2,21 @@ package me.hypherionmc.craterlib.common.item; import me.hypherionmc.craterlib.api.rendering.DyableBlock; import me.hypherionmc.craterlib.api.rendering.ItemDyable; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.network.chat.Component; +import net.minecraft.util.StringUtil; import net.minecraft.world.item.BlockItem; import net.minecraft.world.item.DyeColor; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.context.BlockPlaceContext; import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.properties.EnumProperty; +import net.minecraft.world.level.block.state.properties.Property; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.lang3.text.WordUtils; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; /** * Base Item for Blocks that implement @link {DyableBlock}. @@ -21,10 +33,42 @@ public class BlockItemDyable extends BlockItem implements ItemDyable { * @return */ @Override - public DyeColor getColor() { - if (this.getBlock() instanceof DyableBlock dyableBlock) { - return dyableBlock.defaultDyeColor(); + public DyeColor getColor(ItemStack stack) { + return this.getColorFromNBT(stack); + } + + @Override + public @NotNull Component getName(ItemStack stack) { + return Component.translatable( + this.getDescriptionId(), + WordUtils.capitalizeFully(getColorFromNBT( + stack).getName().replace("_", " ") + ) + ); + } + + private DyeColor getColorFromNBT(ItemStack stack) { + CompoundTag tag = stack.getOrCreateTag(); + if (tag.contains("color")) { + return DyeColor.byName(tag.getString("color"), DyeColor.BLACK); + } else { + if (this.getBlock() instanceof DyableBlock dyableBlock) { + return dyableBlock.defaultDyeColor(); + } } return DyeColor.BLACK; } + + @Nullable + @Override + protected BlockState getPlacementState(BlockPlaceContext ctx) { + BlockState state = this.getBlock().getStateForPlacement(ctx); + if (state != null && state.getBlock() instanceof DyableBlock) { + Property property = state.getBlock().getStateDefinition().getProperty("color"); + if (property != null) { + state = state.setValue(property, getColorFromNBT(ctx.getItemInHand())); + } + } + return state != null && this.canPlace(ctx, state) ? state : null; + } } diff --git a/Common/src/main/java/me/hypherionmc/craterlib/common/item/DyableWaterBottle.java b/Common/src/main/java/me/hypherionmc/craterlib/common/item/DyableWaterBottle.java index 19dde8d..d489d71 100644 --- a/Common/src/main/java/me/hypherionmc/craterlib/common/item/DyableWaterBottle.java +++ b/Common/src/main/java/me/hypherionmc/craterlib/common/item/DyableWaterBottle.java @@ -48,7 +48,7 @@ public class DyableWaterBottle extends DyeItem implements ItemDyable { * @return */ @Override - public DyeColor getColor() { + public DyeColor getColor(ItemStack stack) { return this.color; } diff --git a/Common/src/main/java/me/hypherionmc/craterlib/common/item/DyableWaterBucket.java b/Common/src/main/java/me/hypherionmc/craterlib/common/item/DyableWaterBucket.java index d684f9b..218308e 100644 --- a/Common/src/main/java/me/hypherionmc/craterlib/common/item/DyableWaterBucket.java +++ b/Common/src/main/java/me/hypherionmc/craterlib/common/item/DyableWaterBucket.java @@ -32,7 +32,7 @@ public class DyableWaterBucket extends BucketItem implements ItemDyable { } @Override - public DyeColor getColor() { + public DyeColor getColor(ItemStack stack) { return this.color; } diff --git a/gradle.properties b/gradle.properties index 704e882..eca00b0 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,7 +1,7 @@ # Project version_major=1 version_minor=0 -version_patch=6d +version_patch=7d group=me.hypherionmc.craterlib # Common