diff --git a/src/main/java/ru/betterend/registry/EndTags.java b/src/main/java/ru/betterend/registry/EndTags.java index c6ec7ef3..4c686a8b 100644 --- a/src/main/java/ru/betterend/registry/EndTags.java +++ b/src/main/java/ru/betterend/registry/EndTags.java @@ -1,7 +1,10 @@ package ru.betterend.registry; import java.util.Arrays; +import java.util.List; +import java.util.function.Supplier; +import com.google.common.collect.Lists; import net.fabricmc.fabric.api.tag.TagRegistry; import net.fabricmc.fabric.impl.tool.attribute.ToolManagerImpl; import net.fabricmc.fabric.impl.tool.attribute.handlers.ModdedToolsVanillaBlocksToolHandler; @@ -11,6 +14,7 @@ import net.minecraft.tags.BlockTags; import net.minecraft.tags.ItemTags; import net.minecraft.tags.Tag; import net.minecraft.tags.Tag.Named; +import net.minecraft.tags.TagCollection; import net.minecraft.world.food.FoodProperties; import net.minecraft.world.item.BlockItem; import net.minecraft.world.item.Item; @@ -26,6 +30,7 @@ import ru.betterend.blocks.EndTerrainBlock; import ru.betterend.blocks.basis.PedestalBlock; import ru.betterend.blocks.basis.SimpleLeavesBlock; import ru.betterend.blocks.basis.VineBlock; +import ru.betterend.item.tool.EndHammerItem; import ru.betterend.mixin.common.ComposterBlockAccessor; import ru.betterend.util.TagHelper; @@ -46,30 +51,31 @@ public class EndTags { public static final Tag.Named ITEM_CHEST = makeCommonItemTag("chest"); public static final Tag.Named IRON_INGOTS = makeCommonItemTag("iron_ingots"); public static final Tag.Named FURNACES = makeCommonItemTag("furnaces"); - public final static Tag HAMMERS = registerFabricItemTag("hammers"); - + public final static Tag.Named HAMMERS = makeFabricItemTag("hammers"); + + public static Tag.Named makeTag(Supplier> containerSupplier, ResourceLocation id) { + Tag tag = containerSupplier.get().getTag(id); + return tag == null ? TagRegistry.create(id, containerSupplier) : (Named) tag; + } + public static Tag.Named makeBlockTag(String name) { - ResourceLocation id = BetterEnd.makeID(name); - Tag tag = BlockTags.getAllTags().getTag(id); - return tag == null ? (Named) TagRegistry.block(id) : (Named) tag; + return makeTag(BlockTags::getAllTags, BetterEnd.makeID(name)); } public static Tag.Named makeItemTag(String name) { - ResourceLocation id = BetterEnd.makeID(name); - Tag tag = ItemTags.getAllTags().getTag(id); - return tag == null ? (Named) TagRegistry.item(id) : (Named) tag; + return makeTag(ItemTags::getAllTags, BetterEnd.makeID(name)); } public static Tag.Named makeCommonBlockTag(String name) { - ResourceLocation id = new ResourceLocation("c", name); - Tag tag = BlockTags.getAllTags().getTag(id); - return tag == null ? (Named) TagRegistry.block(id) : (Named) tag; + return makeTag(BlockTags::getAllTags, new ResourceLocation("c", name)); } public static Tag.Named makeCommonItemTag(String name) { - ResourceLocation id = new ResourceLocation("c", name); - Tag tag = ItemTags.getAllTags().getTag(id); - return tag == null ? (Named) TagRegistry.item(id) : (Named) tag; + return makeTag(ItemTags::getAllTags, new ResourceLocation("c", name)); + } + + public static Tag.Named makeFabricItemTag(String name) { + return makeTag(ItemTags::getAllTags, new ResourceLocation("fabric", name)); } public static Tag.Named getMCBlockTag(String name) { @@ -84,8 +90,8 @@ public class EndTags { addSurfaceBlock(EndBlocks.ENDSTONE_DUST); addSurfaceBlock(EndBlocks.AMBER_ORE); - EndItems.getModBlocks().forEach((item) -> { - Block block = ((BlockItem) item).getBlock(); + EndItems.getModBlocks().forEach(blockItem -> { + Block block = ((BlockItem) blockItem).getBlock(); if (block instanceof EndTerrainBlock) { addSurfaceBlock(block); TagHelper.addTag(BlockTags.NYLIUM, block); @@ -107,28 +113,23 @@ public class EndTags { } }); - EndItems.getModItems().forEach((item) -> { + List hammers = Lists.newArrayList(); + EndItems.getModItems().forEach(item -> { if (item.isEdible()) { FoodProperties food = item.getFoodProperties(); - float compost = food.getNutrition() * food.getSaturationModifier() * 0.18F; - ComposterBlockAccessor.callAdd(compost, item); + if (food != null) { + float compost = food.getNutrition() * food.getSaturationModifier() * 0.18F; + ComposterBlockAccessor.callAdd(compost, item); + } + } + if (item instanceof EndHammerItem) { + hammers.add(item); } }); + ToolManagerImpl.tag(HAMMERS).register(new ModdedToolsVanillaBlocksToolHandler(hammers)); TagHelper.addTag(GEN_TERRAIN, EndBlocks.ENDER_ORE, EndBlocks.FLAVOLITE.stone, EndBlocks.VIOLECITE.stone, EndBlocks.SULPHURIC_ROCK.stone, EndBlocks.BRIMSTONE); TagHelper.addTag(END_GROUND, EndBlocks.SULPHURIC_ROCK.stone, EndBlocks.BRIMSTONE); - - ToolManagerImpl.tag(HAMMERS).register(new ModdedToolsVanillaBlocksToolHandler( - Arrays.asList( - EndItems.IRON_HAMMER, - EndItems.GOLDEN_HAMMER, - EndItems.DIAMOND_HAMMER, - EndItems.NETHERITE_HAMMER, - EndItems.AETERNIUM_HAMMER, - EndBlocks.THALLASIUM.hammer, - EndBlocks.TERMINITE.hammer - ) - )); TagHelper.addTag(FURNACES, Blocks.FURNACE); TagHelper.addTag(BlockTags.ANVIL, EndBlocks.AETERNIUM_ANVIL); @@ -156,8 +157,4 @@ public class EndTags { }); END_STONES.getValues().forEach(EndTags::addSurfaceBlock); } - - public static Tag registerFabricItemTag(String name) { - return TagRegistry.item(new ResourceLocation("fabric", name)); - } }