EndTags refactor

This commit is contained in:
Aleksey 2021-04-17 11:25:30 +03:00
parent 50d42c1218
commit 2b19382e88

View file

@ -1,7 +1,10 @@
package ru.betterend.registry; package ru.betterend.registry;
import java.util.Arrays; 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.api.tag.TagRegistry;
import net.fabricmc.fabric.impl.tool.attribute.ToolManagerImpl; import net.fabricmc.fabric.impl.tool.attribute.ToolManagerImpl;
import net.fabricmc.fabric.impl.tool.attribute.handlers.ModdedToolsVanillaBlocksToolHandler; 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.ItemTags;
import net.minecraft.tags.Tag; import net.minecraft.tags.Tag;
import net.minecraft.tags.Tag.Named; import net.minecraft.tags.Tag.Named;
import net.minecraft.tags.TagCollection;
import net.minecraft.world.food.FoodProperties; import net.minecraft.world.food.FoodProperties;
import net.minecraft.world.item.BlockItem; import net.minecraft.world.item.BlockItem;
import net.minecraft.world.item.Item; 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.PedestalBlock;
import ru.betterend.blocks.basis.SimpleLeavesBlock; import ru.betterend.blocks.basis.SimpleLeavesBlock;
import ru.betterend.blocks.basis.VineBlock; import ru.betterend.blocks.basis.VineBlock;
import ru.betterend.item.tool.EndHammerItem;
import ru.betterend.mixin.common.ComposterBlockAccessor; import ru.betterend.mixin.common.ComposterBlockAccessor;
import ru.betterend.util.TagHelper; import ru.betterend.util.TagHelper;
@ -46,30 +51,31 @@ public class EndTags {
public static final Tag.Named<Item> ITEM_CHEST = makeCommonItemTag("chest"); public static final Tag.Named<Item> ITEM_CHEST = makeCommonItemTag("chest");
public static final Tag.Named<Item> IRON_INGOTS = makeCommonItemTag("iron_ingots"); public static final Tag.Named<Item> IRON_INGOTS = makeCommonItemTag("iron_ingots");
public static final Tag.Named<Item> FURNACES = makeCommonItemTag("furnaces"); public static final Tag.Named<Item> FURNACES = makeCommonItemTag("furnaces");
public final static Tag<Item> HAMMERS = registerFabricItemTag("hammers"); public final static Tag.Named<Item> HAMMERS = makeFabricItemTag("hammers");
public static <T> Tag.Named<T> makeTag(Supplier<TagCollection<T>> containerSupplier, ResourceLocation id) {
Tag<T> tag = containerSupplier.get().getTag(id);
return tag == null ? TagRegistry.create(id, containerSupplier) : (Named<T>) tag;
}
public static Tag.Named<Block> makeBlockTag(String name) { public static Tag.Named<Block> makeBlockTag(String name) {
ResourceLocation id = BetterEnd.makeID(name); return makeTag(BlockTags::getAllTags, BetterEnd.makeID(name));
Tag<Block> tag = BlockTags.getAllTags().getTag(id);
return tag == null ? (Named<Block>) TagRegistry.block(id) : (Named<Block>) tag;
} }
public static Tag.Named<Item> makeItemTag(String name) { public static Tag.Named<Item> makeItemTag(String name) {
ResourceLocation id = BetterEnd.makeID(name); return makeTag(ItemTags::getAllTags, BetterEnd.makeID(name));
Tag<Item> tag = ItemTags.getAllTags().getTag(id);
return tag == null ? (Named<Item>) TagRegistry.item(id) : (Named<Item>) tag;
} }
public static Tag.Named<Block> makeCommonBlockTag(String name) { public static Tag.Named<Block> makeCommonBlockTag(String name) {
ResourceLocation id = new ResourceLocation("c", name); return makeTag(BlockTags::getAllTags, new ResourceLocation("c", name));
Tag<Block> tag = BlockTags.getAllTags().getTag(id);
return tag == null ? (Named<Block>) TagRegistry.block(id) : (Named<Block>) tag;
} }
public static Tag.Named<Item> makeCommonItemTag(String name) { public static Tag.Named<Item> makeCommonItemTag(String name) {
ResourceLocation id = new ResourceLocation("c", name); return makeTag(ItemTags::getAllTags, new ResourceLocation("c", name));
Tag<Item> tag = ItemTags.getAllTags().getTag(id); }
return tag == null ? (Named<Item>) TagRegistry.item(id) : (Named<Item>) tag;
public static Tag.Named<Item> makeFabricItemTag(String name) {
return makeTag(ItemTags::getAllTags, new ResourceLocation("fabric", name));
} }
public static Tag.Named<Block> getMCBlockTag(String name) { public static Tag.Named<Block> getMCBlockTag(String name) {
@ -84,8 +90,8 @@ public class EndTags {
addSurfaceBlock(EndBlocks.ENDSTONE_DUST); addSurfaceBlock(EndBlocks.ENDSTONE_DUST);
addSurfaceBlock(EndBlocks.AMBER_ORE); addSurfaceBlock(EndBlocks.AMBER_ORE);
EndItems.getModBlocks().forEach((item) -> { EndItems.getModBlocks().forEach(blockItem -> {
Block block = ((BlockItem) item).getBlock(); Block block = ((BlockItem) blockItem).getBlock();
if (block instanceof EndTerrainBlock) { if (block instanceof EndTerrainBlock) {
addSurfaceBlock(block); addSurfaceBlock(block);
TagHelper.addTag(BlockTags.NYLIUM, block); TagHelper.addTag(BlockTags.NYLIUM, block);
@ -107,29 +113,24 @@ public class EndTags {
} }
}); });
EndItems.getModItems().forEach((item) -> { List<Item> hammers = Lists.newArrayList();
EndItems.getModItems().forEach(item -> {
if (item.isEdible()) { if (item.isEdible()) {
FoodProperties food = item.getFoodProperties(); FoodProperties food = item.getFoodProperties();
if (food != null) {
float compost = food.getNutrition() * food.getSaturationModifier() * 0.18F; float compost = food.getNutrition() * food.getSaturationModifier() * 0.18F;
ComposterBlockAccessor.callAdd(compost, item); 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(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); 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(FURNACES, Blocks.FURNACE);
TagHelper.addTag(BlockTags.ANVIL, EndBlocks.AETERNIUM_ANVIL); TagHelper.addTag(BlockTags.ANVIL, EndBlocks.AETERNIUM_ANVIL);
@ -156,8 +157,4 @@ public class EndTags {
}); });
END_STONES.getValues().forEach(EndTags::addSurfaceBlock); END_STONES.getValues().forEach(EndTags::addSurfaceBlock);
} }
public static Tag<Item> registerFabricItemTag(String name) {
return TagRegistry.item(new ResourceLocation("fabric", name));
}
} }