From e1d6a52112eafd9027af671b47745ca56ec6075e Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Wed, 29 Jan 2020 20:22:10 +0100 Subject: [PATCH] fixed the color changer --- .../models/item/color_changer.json | 6 -- .../java/de/ellpeck/naturesaura/Helper.java | 39 ------------ .../naturesaura/items/ItemColorChanger.java | 60 +++++++++---------- .../naturesaura/misc/ColoredBlockHelper.java | 38 ++++++++++++ .../naturesaura/recipes/ModRecipes.java | 4 +- 5 files changed, 70 insertions(+), 77 deletions(-) delete mode 100644 src/generated/resources/assets/naturesaura/models/item/color_changer.json create mode 100644 src/main/java/de/ellpeck/naturesaura/misc/ColoredBlockHelper.java diff --git a/src/generated/resources/assets/naturesaura/models/item/color_changer.json b/src/generated/resources/assets/naturesaura/models/item/color_changer.json deleted file mode 100644 index 52caee3a..00000000 --- a/src/generated/resources/assets/naturesaura/models/item/color_changer.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "item/generated", - "textures": { - "layer0": "naturesaura:item/color_changer" - } -} \ No newline at end of file diff --git a/src/main/java/de/ellpeck/naturesaura/Helper.java b/src/main/java/de/ellpeck/naturesaura/Helper.java index 86e810d9..69b53387 100644 --- a/src/main/java/de/ellpeck/naturesaura/Helper.java +++ b/src/main/java/de/ellpeck/naturesaura/Helper.java @@ -11,14 +11,12 @@ import de.ellpeck.naturesaura.compat.Compat; import net.minecraft.advancements.Advancement; import net.minecraft.block.Block; import net.minecraft.block.BlockState; -import net.minecraft.block.Blocks; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.RenderHelper; import net.minecraft.entity.item.ItemEntity; import net.minecraft.entity.item.ItemFrameEntity; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.ServerPlayerEntity; -import net.minecraft.item.DyeColor; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.item.crafting.Ingredient; @@ -334,43 +332,6 @@ public final class Helper { } } - public static Block getWool(DyeColor color) { - switch (color) { - case ORANGE: - return Blocks.ORANGE_WOOL; - case MAGENTA: - return Blocks.MAGENTA_WOOL; - case LIGHT_BLUE: - return Blocks.LIGHT_BLUE_WOOL; - case YELLOW: - return Blocks.YELLOW_WOOL; - case LIME: - return Blocks.LIME_WOOL; - case PINK: - return Blocks.PINK_WOOL; - case GRAY: - return Blocks.GRAY_WOOL; - case LIGHT_GRAY: - return Blocks.LIGHT_GRAY_WOOL; - case CYAN: - return Blocks.CYAN_WOOL; - case PURPLE: - return Blocks.PURPLE_WOOL; - case BLUE: - return Blocks.BLUE_WOOL; - case BROWN: - return Blocks.BROWN_WOOL; - case GREEN: - return Blocks.GREEN_WOOL; - case RED: - return Blocks.RED_WOOL; - case BLACK: - return Blocks.BLACK_WOOL; - default: - return Blocks.WHITE_WOOL; - } - } - public static ItemStack getEquippedItem(Predicate predicate, PlayerEntity player) { if (Compat.hasCompat("curios")) { Optional stack = CuriosAPI.getCurioEquipped(predicate, player).map(ImmutableTriple::getRight); diff --git a/src/main/java/de/ellpeck/naturesaura/items/ItemColorChanger.java b/src/main/java/de/ellpeck/naturesaura/items/ItemColorChanger.java index 255eaf17..e7e85567 100644 --- a/src/main/java/de/ellpeck/naturesaura/items/ItemColorChanger.java +++ b/src/main/java/de/ellpeck/naturesaura/items/ItemColorChanger.java @@ -3,21 +3,23 @@ package de.ellpeck.naturesaura.items; import de.ellpeck.naturesaura.NaturesAura; import de.ellpeck.naturesaura.api.NaturesAuraAPI; import de.ellpeck.naturesaura.data.ItemModelGenerator; +import de.ellpeck.naturesaura.misc.ColoredBlockHelper; import de.ellpeck.naturesaura.reg.IColorProvidingItem; import de.ellpeck.naturesaura.reg.ICustomItemModel; -import net.minecraft.block.BlockState; +import net.minecraft.block.Block; import net.minecraft.client.renderer.color.IItemColor; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.DyeColor; import net.minecraft.item.ItemStack; import net.minecraft.item.ItemUseContext; -import net.minecraft.state.IProperty; import net.minecraft.util.*; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; +import java.util.List; + public class ItemColorChanger extends ItemImpl implements IColorProvidingItem, ICustomItemModel { public ItemColorChanger() { @@ -40,40 +42,38 @@ public class ItemColorChanger extends ItemImpl implements IColorProvidingItem, I } private static boolean changeOrCopyColor(PlayerEntity player, ItemStack stack, World world, BlockPos pos, DyeColor firstColor) { - BlockState state = world.getBlockState(pos); - for (IProperty prop : state.getProperties()) { - // TODO Fix this since it's now not state-based anymore - if (prop.getValueClass() == DyeColor.class) { - DyeColor color = (DyeColor) state.get(prop); - if (firstColor == null || color == firstColor) { - DyeColor stored = getStoredColor(stack); - if (player.isShiftKeyDown()) { - if (stored != color) { + Block block = world.getBlockState(pos).getBlock(); + List blocks = ColoredBlockHelper.getBlocksContaining(block); + if (blocks == null) + return false; + DyeColor color = DyeColor.byId(blocks.indexOf(block)); + if (firstColor == null || color == firstColor) { + DyeColor stored = getStoredColor(stack); + if (player.isShiftKeyDown()) { + if (stored != color) { + world.playSound(player, pos.getX() + 0.5, pos.getY() + 0.5, pos.getZ() + 0.5, + SoundEvents.ITEM_BUCKET_FILL, SoundCategory.PLAYERS, 0.65F, 1F); + if (!world.isRemote) + storeColor(stack, color); + return true; + } + } else { + if (stored != null && stored != color) { + if (NaturesAuraAPI.instance().extractAuraFromPlayer(player, 1000, world.isRemote)) { + if (firstColor == null) { world.playSound(player, pos.getX() + 0.5, pos.getY() + 0.5, pos.getZ() + 0.5, - SoundEvents.ITEM_BUCKET_FILL, SoundCategory.PLAYERS, 0.65F, 1F); - if (!world.isRemote) - storeColor(stack, color); - return true; + SoundEvents.ITEM_BUCKET_EMPTY, SoundCategory.PLAYERS, 0.65F, 1F); } - } else { - if (stored != null && stored != color) { - if (NaturesAuraAPI.instance().extractAuraFromPlayer(player, 1000, world.isRemote)) { - if (firstColor == null) { - world.playSound(player, pos.getX() + 0.5, pos.getY() + 0.5, pos.getZ() + 0.5, - SoundEvents.ITEM_BUCKET_EMPTY, SoundCategory.PLAYERS, 0.65F, 1F); - } - if (!world.isRemote) { - world.setBlockState(pos, state.with(prop, stored)); + if (!world.isRemote) { + world.setBlockState(pos, blocks.get(stored.getId()).getDefaultState()); - if (isFillMode(stack)) { - for (Direction off : Direction.values()) { - changeOrCopyColor(player, stack, world, pos.offset(off), color); - } - } + if (isFillMode(stack)) { + for (Direction off : Direction.values()) { + changeOrCopyColor(player, stack, world, pos.offset(off), color); } - return true; } } + return true; } } } diff --git a/src/main/java/de/ellpeck/naturesaura/misc/ColoredBlockHelper.java b/src/main/java/de/ellpeck/naturesaura/misc/ColoredBlockHelper.java new file mode 100644 index 00000000..d0746927 --- /dev/null +++ b/src/main/java/de/ellpeck/naturesaura/misc/ColoredBlockHelper.java @@ -0,0 +1,38 @@ +package de.ellpeck.naturesaura.misc; + +import net.minecraft.block.Block; +import net.minecraft.item.DyeColor; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.registries.ForgeRegistries; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + +public final class ColoredBlockHelper { + + public static final List WOOL = collectBlocks("wool"); + public static final List TERRACOTTA = collectBlocks("terracotta"); + public static final List CONCRETE_POWDER = collectBlocks("concrete_powder"); + public static final List CONCRETE = collectBlocks("concrete"); + public static final List GLASS = collectBlocks("stained_glass"); + public static final List GLASS_PANE = collectBlocks("glass_pane"); + public static final List CARPET = collectBlocks("carpet"); + public static final List> LISTS = Arrays.asList(WOOL, TERRACOTTA, CONCRETE_POWDER, CONCRETE, GLASS, GLASS_PANE, CARPET); + + private static List collectBlocks(String name) { + List blocks = new ArrayList<>(); + for (DyeColor color : DyeColor.values()) + blocks.add(ForgeRegistries.BLOCKS.getValue(new ResourceLocation(color.getName() + '_' + name))); + return Collections.unmodifiableList(blocks); + } + + public static List getBlocksContaining(Block block) { + for (List list : LISTS) { + if (list.contains(block)) + return list; + } + return null; + } +} diff --git a/src/main/java/de/ellpeck/naturesaura/recipes/ModRecipes.java b/src/main/java/de/ellpeck/naturesaura/recipes/ModRecipes.java index 661ac233..f35dd547 100644 --- a/src/main/java/de/ellpeck/naturesaura/recipes/ModRecipes.java +++ b/src/main/java/de/ellpeck/naturesaura/recipes/ModRecipes.java @@ -1,6 +1,5 @@ package de.ellpeck.naturesaura.recipes; -import de.ellpeck.naturesaura.Helper; import de.ellpeck.naturesaura.NaturesAura; import de.ellpeck.naturesaura.api.NaturesAuraAPI; import de.ellpeck.naturesaura.api.recipes.*; @@ -14,6 +13,7 @@ import de.ellpeck.naturesaura.chunk.effect.PlantBoostEffect; import de.ellpeck.naturesaura.items.ItemAuraBottle; import de.ellpeck.naturesaura.items.ItemEffectPowder; import de.ellpeck.naturesaura.items.ModItems; +import de.ellpeck.naturesaura.misc.ColoredBlockHelper; import net.minecraft.block.Block; import net.minecraft.block.Blocks; import net.minecraft.block.FlowerBlock; @@ -226,7 +226,7 @@ public final class ModRecipes { for (DyeColor color : DyeColor.values()) new AnimalSpawnerRecipe(res("sheep_" + color.getName()), EntityType.SHEEP, 500, 60, ing(ModItems.BIRTH_SPIRIT), ing(Items.MUTTON), - ing(Helper.getWool(color))) { + ing(ColoredBlockHelper.WOOL.get(color.getId()))) { @Override public Entity makeEntity(World world, double x, double y, double z) { SheepEntity sheep = (SheepEntity) super.makeEntity(world, x, y, z);