Registry changes (WIP)

This commit is contained in:
paulevsGitch 2021-10-26 16:12:10 +03:00
parent 449d7cc0d0
commit b66c8cd5a6
3 changed files with 98 additions and 64 deletions

View file

@ -3,12 +3,10 @@ package ru.bclib.registry;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.google.common.collect.Maps; import com.google.common.collect.Maps;
import net.fabricmc.fabric.api.item.v1.FabricItemSettings; import net.fabricmc.fabric.api.item.v1.FabricItemSettings;
import net.minecraft.core.Registry;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.item.CreativeModeTab; import net.minecraft.world.item.CreativeModeTab;
import net.minecraft.world.item.Item; import net.minecraft.world.item.Item;
import net.minecraft.world.item.Items; import ru.bclib.config.PathConfig;
import ru.bclib.BCLib;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@ -19,6 +17,24 @@ public abstract class BaseRegistry<T> {
private static final Map<String, List<Item>> MOD_ITEMS = Maps.newHashMap(); private static final Map<String, List<Item>> MOD_ITEMS = Maps.newHashMap();
protected final CreativeModeTab creativeTab; protected final CreativeModeTab creativeTab;
protected final PathConfig config;
protected BaseRegistry(CreativeModeTab creativeTab, PathConfig config) {
this.creativeTab = creativeTab;
this.config = config;
REGISTRIES.add(this);
}
public abstract T register(ResourceLocation objId, T obj);
public abstract void registerItem(ResourceLocation id, Item item);
public FabricItemSettings makeItemSettings() {
FabricItemSettings properties = new FabricItemSettings();
return (FabricItemSettings) properties.tab(creativeTab);
}
private void registerInternal() {}
public static Map<String, List<Item>> getRegisteredBlocks() { public static Map<String, List<Item>> getRegisteredBlocks() {
return MOD_BLOCKS; return MOD_BLOCKS;
@ -49,33 +65,4 @@ public abstract class BaseRegistry<T> {
public static void register() { public static void register() {
REGISTRIES.forEach(BaseRegistry::registerInternal); REGISTRIES.forEach(BaseRegistry::registerInternal);
} }
protected BaseRegistry(CreativeModeTab creativeTab) {
this.creativeTab = creativeTab;
REGISTRIES.add(this);
}
public T register(String name, T obj) {
return register(createModId(name), obj);
}
public abstract T register(ResourceLocation objId, T obj);
public ResourceLocation createModId(String name) {
return BCLib.makeID(name);
}
public void registerItem(ResourceLocation id, Item item, List<Item> registry) {
if (item != Items.AIR) {
Registry.register(Registry.ITEM, id, item);
registry.add(item);
}
}
public FabricItemSettings makeItemSettings() {
FabricItemSettings properties = new FabricItemSettings();
return (FabricItemSettings) properties.tab(creativeTab);
}
private void registerInternal() {}
} }

View file

@ -6,19 +6,25 @@ import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.item.BlockItem; import net.minecraft.world.item.BlockItem;
import net.minecraft.world.item.CreativeModeTab; import net.minecraft.world.item.CreativeModeTab;
import net.minecraft.world.item.Item; import net.minecraft.world.item.Item;
import net.minecraft.world.item.Items;
import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Block;
import ru.bclib.api.TagAPI; import ru.bclib.api.TagAPI;
import ru.bclib.blocks.BaseLeavesBlock; import ru.bclib.blocks.BaseLeavesBlock;
import ru.bclib.blocks.FeatureSaplingBlock; import ru.bclib.blocks.FeatureSaplingBlock;
import ru.bclib.config.PathConfig;
import ru.bclib.interfaces.CustomItemProvider; import ru.bclib.interfaces.CustomItemProvider;
public class BlockRegistry extends BaseRegistry<Block> { public class BlockRegistry extends BaseRegistry<Block> {
protected BlockRegistry(CreativeModeTab creativeTab) { public BlockRegistry(CreativeModeTab creativeTab, PathConfig config) {
super(creativeTab); super(creativeTab, config);
} }
@Override @Override
public Block register(ResourceLocation id, Block block) { public Block register(ResourceLocation id, Block block) {
if (!config.getBooleanRoot(id.getNamespace(), true)) {
return block;
}
BlockItem item = null; BlockItem item = null;
if (block instanceof CustomItemProvider) { if (block instanceof CustomItemProvider) {
item = ((CustomItemProvider) block).getCustomItem(id, makeItemSettings()); item = ((CustomItemProvider) block).getCustomItem(id, makeItemSettings());
@ -27,9 +33,7 @@ public class BlockRegistry extends BaseRegistry<Block> {
item = new BlockItem(block, makeItemSettings()); item = new BlockItem(block, makeItemSettings());
} }
registerBlockItem(id, item); registerBlockItem(id, item);
if (block.defaultBlockState().getMaterial().isFlammable() && FlammableBlockRegistry.getDefaultInstance() if (block.defaultBlockState().getMaterial().isFlammable() && FlammableBlockRegistry.getDefaultInstance().get(block).getBurnChance() == 0) {
.get(block)
.getBurnChance() == 0) {
FlammableBlockRegistry.getDefaultInstance().add(block, 5, 5); FlammableBlockRegistry.getDefaultInstance().add(block, 5, 5);
} }
@ -51,11 +55,22 @@ public class BlockRegistry extends BaseRegistry<Block> {
} }
public Block registerBlockOnly(ResourceLocation id, Block block) { public Block registerBlockOnly(ResourceLocation id, Block block) {
if (!config.getBooleanRoot(id.getNamespace(), true)) {
return block;
}
return Registry.register(Registry.BLOCK, id, block); return Registry.register(Registry.BLOCK, id, block);
} }
private Item registerBlockItem(ResourceLocation id, Item item) { private Item registerBlockItem(ResourceLocation id, Item item) {
registerItem(id, item, BaseRegistry.getModBlocks(id.getNamespace())); registerItem(id, item);
return item; return item;
} }
@Override
public void registerItem(ResourceLocation id, Item item) {
if (item != null && item != Items.AIR) {
Registry.register(Registry.ITEM, id, item);
getModBlocks(id.getNamespace()).add(item);
}
}
} }

View file

@ -3,6 +3,7 @@ package ru.bclib.registry;
import net.fabricmc.fabric.api.tool.attribute.v1.FabricToolTags; import net.fabricmc.fabric.api.tool.attribute.v1.FabricToolTags;
import net.minecraft.core.BlockSource; import net.minecraft.core.BlockSource;
import net.minecraft.core.Direction; import net.minecraft.core.Direction;
import net.minecraft.core.Registry;
import net.minecraft.core.dispenser.DefaultDispenseItemBehavior; import net.minecraft.core.dispenser.DefaultDispenseItemBehavior;
import net.minecraft.core.dispenser.ShearsDispenseItemBehavior; import net.minecraft.core.dispenser.ShearsDispenseItemBehavior;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
@ -16,43 +17,58 @@ import net.minecraft.world.food.FoodProperties;
import net.minecraft.world.item.CreativeModeTab; import net.minecraft.world.item.CreativeModeTab;
import net.minecraft.world.item.Item; import net.minecraft.world.item.Item;
import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.Items;
import net.minecraft.world.item.ShovelItem; import net.minecraft.world.item.ShovelItem;
import net.minecraft.world.item.SpawnEggItem; import net.minecraft.world.item.SpawnEggItem;
import net.minecraft.world.item.SwordItem; import net.minecraft.world.item.SwordItem;
import net.minecraft.world.level.block.DispenserBlock; import net.minecraft.world.level.block.DispenserBlock;
import ru.bclib.api.TagAPI; import ru.bclib.api.TagAPI;
import ru.bclib.config.PathConfig;
import ru.bclib.items.BaseDiscItem; import ru.bclib.items.BaseDiscItem;
import ru.bclib.items.BaseDrinkItem; import ru.bclib.items.BaseDrinkItem;
import ru.bclib.items.tool.BaseShearsItem;
import ru.bclib.items.BaseSpawnEggItem; import ru.bclib.items.BaseSpawnEggItem;
import ru.bclib.items.ModelProviderItem; import ru.bclib.items.ModelProviderItem;
import ru.bclib.items.tool.BaseAxeItem; import ru.bclib.items.tool.BaseAxeItem;
import ru.bclib.items.tool.BaseHoeItem; import ru.bclib.items.tool.BaseHoeItem;
import ru.bclib.items.tool.BasePickaxeItem; import ru.bclib.items.tool.BasePickaxeItem;
import ru.bclib.items.tool.BaseShearsItem;
public class ItemRegistry extends BaseRegistry<Item> { public class ItemRegistry extends BaseRegistry<Item> {
public ItemRegistry(CreativeModeTab creativeTab, PathConfig config) {
protected ItemRegistry(CreativeModeTab creativeTab) { super(creativeTab, config);
super(creativeTab);
} }
public Item registerDisc(String name, int power, SoundEvent sound) { public Item registerDisc(ResourceLocation itemId, int power, SoundEvent sound) {
return register(name, new BaseDiscItem(power, sound, makeItemSettings().stacksTo(1))); BaseDiscItem item = new BaseDiscItem(power, sound, makeItemSettings().stacksTo(1));
if (!config.getBoolean("musicDiscs", itemId.getPath(), true)) {
return item;
}
return register(itemId, new BaseDiscItem(power, sound, makeItemSettings().stacksTo(1)));
} }
public Item registerItem(String name) { public Item register(ResourceLocation itemId) {
return register(name, new ModelProviderItem(makeItemSettings())); return register(itemId, new ModelProviderItem(makeItemSettings()));
} }
@Override @Override
public Item register(ResourceLocation itemId, Item item) { public Item register(ResourceLocation itemId, Item item) {
registerItem(itemId, item, BaseRegistry.getModItems(itemId.getNamespace())); if (!config.getBoolean("items", itemId.getPath(), true)) {
return item;
}
registerItem(itemId, item);
return item; return item;
} }
public Item registerTool(String name, Item item) { public Item registerTool(ResourceLocation itemId, Item item) {
ResourceLocation id = createModId(name); if (!config.getBoolean("tools", itemId.getPath(), true)) {
registerItem(id, item, BaseRegistry.getModItems(id.getNamespace())); return item;
}
registerItem(itemId, item);
if (item instanceof ShovelItem) { if (item instanceof ShovelItem) {
TagAPI.addTag((Tag.Named<Item>) FabricToolTags.SHOVELS, item); TagAPI.addTag((Tag.Named<Item>) FabricToolTags.SHOVELS, item);
@ -77,8 +93,13 @@ public class ItemRegistry extends BaseRegistry<Item> {
return item; return item;
} }
public Item registerEgg(String name, EntityType<? extends Mob> type, int background, int dots) { public Item registerEgg(ResourceLocation itemId, EntityType<? extends Mob> type, int background, int dots) {
SpawnEggItem item = new BaseSpawnEggItem(type, background, dots, makeItemSettings()); SpawnEggItem item = new BaseSpawnEggItem(type, background, dots, makeItemSettings());
if (!config.getBoolean("spawnEggs", itemId.getPath(), true)) {
return item;
}
DefaultDispenseItemBehavior behavior = new DefaultDispenseItemBehavior() { DefaultDispenseItemBehavior behavior = new DefaultDispenseItemBehavior() {
public ItemStack execute(BlockSource pointer, ItemStack stack) { public ItemStack execute(BlockSource pointer, ItemStack stack) {
Direction direction = pointer.getBlockState().getValue(DispenserBlock.FACING); Direction direction = pointer.getBlockState().getValue(DispenserBlock.FACING);
@ -97,31 +118,42 @@ public class ItemRegistry extends BaseRegistry<Item> {
} }
}; };
DispenserBlock.registerBehavior(item, behavior); DispenserBlock.registerBehavior(item, behavior);
return register(name, item); return register(itemId, item);
} }
public Item registerFood(String name, int hunger, float saturation, MobEffectInstance... effects) { public Item registerFood(ResourceLocation itemId, int hunger, float saturation, MobEffectInstance... effects) {
FoodProperties.Builder builder = new FoodProperties.Builder().nutrition(hunger).saturationMod(saturation); FoodProperties.Builder builder = new FoodProperties.Builder().nutrition(hunger).saturationMod(saturation);
for (MobEffectInstance effect : effects) { for (MobEffectInstance effect : effects) {
builder.effect(effect, 1F); builder.effect(effect, 1F);
} }
return registerFood(name, builder.build()); return registerFood(itemId, builder.build());
} }
public Item registerFood(String name, FoodProperties foodComponent) { public Item registerFood(ResourceLocation itemId, FoodProperties foodComponent) {
return register(name, new ModelProviderItem(makeItemSettings().food(foodComponent))); return register(itemId, new ModelProviderItem(makeItemSettings().food(foodComponent)));
} }
public Item registerDrink(String name) { public Item registerDrink(ResourceLocation itemId, FoodProperties foodComponent) {
return register(name, new BaseDrinkItem(makeItemSettings().stacksTo(1))); return register(itemId, new BaseDrinkItem(makeItemSettings().stacksTo(1).food(foodComponent)));
} }
public Item registerDrink(String name, FoodProperties foodComponent) { public Item registerDrink(ResourceLocation itemId, int hunger, float saturation) {
return register(name, new BaseDrinkItem(makeItemSettings().stacksTo(1).food(foodComponent)));
}
public Item registerDrink(String name, int hunger, float saturation) {
FoodProperties.Builder builder = new FoodProperties.Builder().nutrition(hunger).saturationMod(saturation); FoodProperties.Builder builder = new FoodProperties.Builder().nutrition(hunger).saturationMod(saturation);
return registerDrink(name, builder.build()); return registerDrink(itemId, builder.build());
}
@Override
public void registerItem(ResourceLocation id, Item item) {
if (item != null && item != Items.AIR) {
Registry.register(Registry.ITEM, id, item);
getModItems(id.getNamespace()).add(item);
}
}
public Item register(ResourceLocation itemId, Item item, String category) {
if (config.getBoolean(category, itemId.getPath(), true)) {
registerItem(itemId, item);
}
return item;
} }
} }