Registries, Base blocks with entities
This commit is contained in:
parent
5aeee09cfc
commit
8ab247f861
45 changed files with 1684 additions and 40 deletions
90
src/main/java/ru/bclib/registry/BaseBlockEntities.java
Normal file
90
src/main/java/ru/bclib/registry/BaseBlockEntities.java
Normal file
|
@ -0,0 +1,90 @@
|
|||
package ru.bclib.registry;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
|
||||
import net.minecraft.core.Registry;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import net.minecraft.world.item.BlockItem;
|
||||
import net.minecraft.world.level.block.Block;
|
||||
import net.minecraft.world.level.block.entity.BlockEntity;
|
||||
import net.minecraft.world.level.block.entity.BlockEntityType;
|
||||
import ru.bclib.BCLib;
|
||||
import ru.bclib.blockentities.BaseBarrelBlockEntity;
|
||||
import ru.bclib.blockentities.BaseChestBlockEntity;
|
||||
import ru.bclib.blockentities.BaseFurnaceBlockEntity;
|
||||
import ru.bclib.blockentities.BaseSignBlockEntity;
|
||||
import ru.bclib.blocks.BaseBarrelBlock;
|
||||
import ru.bclib.blocks.BaseChestBlock;
|
||||
import ru.bclib.blocks.BaseFurnaceBlock;
|
||||
import ru.bclib.blocks.BaseSignBlock;
|
||||
|
||||
public class BaseBlockEntities {
|
||||
public static final BlockEntityType<BaseChestBlockEntity> CHEST = registerBlockEntity(BCLib.makeID("chest"),
|
||||
BlockEntityType.Builder.of(BaseChestBlockEntity::new, getChests()));
|
||||
public static final BlockEntityType<BaseBarrelBlockEntity> BARREL = registerBlockEntity(BCLib.makeID("barrel"),
|
||||
BlockEntityType.Builder.of(BaseBarrelBlockEntity::new, getBarrels()));
|
||||
public static final BlockEntityType<BaseSignBlockEntity> SIGN = registerBlockEntity(BCLib.makeID("sign"),
|
||||
BlockEntityType.Builder.of(BaseSignBlockEntity::new, getSigns()));
|
||||
public static final BlockEntityType<BaseFurnaceBlockEntity> FURNACE = registerBlockEntity(BCLib.makeID("furnace"),
|
||||
BlockEntityType.Builder.of(BaseFurnaceBlockEntity::new, getFurnaces()));
|
||||
|
||||
public static <T extends BlockEntity> BlockEntityType<T> registerBlockEntity(ResourceLocation blockId, BlockEntityType.Builder<T> builder) {
|
||||
return Registry.register(Registry.BLOCK_ENTITY_TYPE, blockId, builder.build(null));
|
||||
}
|
||||
|
||||
public static void register() {}
|
||||
|
||||
static Block[] getChests() {
|
||||
List<Block> result = Lists.newArrayList();
|
||||
BaseRegistry.getModBlocks().forEach((item) -> {
|
||||
if (item instanceof BlockItem) {
|
||||
Block block = ((BlockItem) item).getBlock();
|
||||
if (block instanceof BaseChestBlock) {
|
||||
result.add(block);
|
||||
}
|
||||
}
|
||||
});
|
||||
return result.toArray(new Block[] {});
|
||||
}
|
||||
|
||||
static Block[] getBarrels() {
|
||||
List<Block> result = Lists.newArrayList();
|
||||
BaseRegistry.getModBlocks().forEach((item) -> {
|
||||
if (item instanceof BlockItem) {
|
||||
Block block = ((BlockItem) item).getBlock();
|
||||
if (block instanceof BaseBarrelBlock) {
|
||||
result.add(block);
|
||||
}
|
||||
}
|
||||
});
|
||||
return result.toArray(new Block[] {});
|
||||
}
|
||||
|
||||
static Block[] getSigns() {
|
||||
List<Block> result = Lists.newArrayList();
|
||||
BaseRegistry.getModBlocks().forEach((item) -> {
|
||||
if (item instanceof BlockItem) {
|
||||
Block block = ((BlockItem) item).getBlock();
|
||||
if (block instanceof BaseSignBlock) {
|
||||
result.add(block);
|
||||
}
|
||||
}
|
||||
});
|
||||
return result.toArray(new Block[] {});
|
||||
}
|
||||
|
||||
static Block[] getFurnaces() {
|
||||
List<Block> result = Lists.newArrayList();
|
||||
BaseRegistry.getModBlocks().forEach((item) -> {
|
||||
if (item instanceof BlockItem) {
|
||||
Block block = ((BlockItem) item).getBlock();
|
||||
if (block instanceof BaseFurnaceBlock) {
|
||||
result.add(block);
|
||||
}
|
||||
}
|
||||
});
|
||||
return result.toArray(new Block[] {});
|
||||
}
|
||||
}
|
15
src/main/java/ru/bclib/registry/BaseBlockEntityRenders.java
Normal file
15
src/main/java/ru/bclib/registry/BaseBlockEntityRenders.java
Normal file
|
@ -0,0 +1,15 @@
|
|||
package ru.bclib.registry;
|
||||
|
||||
import net.fabricmc.api.EnvType;
|
||||
import net.fabricmc.api.Environment;
|
||||
import net.fabricmc.fabric.api.client.rendereregistry.v1.BlockEntityRendererRegistry;
|
||||
import ru.bclib.client.render.BaseChestBlockEntityRenderer;
|
||||
import ru.bclib.client.render.BaseSignBlockEntityRenderer;
|
||||
|
||||
@Environment(EnvType.CLIENT)
|
||||
public class BaseBlockEntityRenders {
|
||||
public static void register() {
|
||||
BlockEntityRendererRegistry.INSTANCE.register(BaseBlockEntities.CHEST, BaseChestBlockEntityRenderer::new);
|
||||
BlockEntityRendererRegistry.INSTANCE.register(BaseBlockEntities.SIGN, BaseSignBlockEntityRenderer::new);
|
||||
}
|
||||
}
|
50
src/main/java/ru/bclib/registry/BaseRegistry.java
Normal file
50
src/main/java/ru/bclib/registry/BaseRegistry.java
Normal file
|
@ -0,0 +1,50 @@
|
|||
package ru.bclib.registry;
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
import net.fabricmc.fabric.api.item.v1.FabricItemSettings;
|
||||
import net.minecraft.core.Registry;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import net.minecraft.world.item.*;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public abstract class BaseRegistry<T> {
|
||||
protected static final List<Item> MOD_BLOCKS = Lists.newArrayList();
|
||||
protected static final List<Item> MOD_ITEMS = Lists.newArrayList();
|
||||
|
||||
public static void register() {}
|
||||
|
||||
public static List<Item> getModBlocks() {
|
||||
return MOD_BLOCKS;
|
||||
}
|
||||
|
||||
public static List<Item> getModItems() {
|
||||
return MOD_ITEMS;
|
||||
}
|
||||
|
||||
protected final CreativeModeTab creativeTab;
|
||||
|
||||
protected BaseRegistry(CreativeModeTab creativeTab) {
|
||||
this.creativeTab = creativeTab;
|
||||
}
|
||||
|
||||
protected T register(String name, T obj) {
|
||||
return register(createModId(name), obj);
|
||||
}
|
||||
|
||||
protected abstract T register(ResourceLocation objId, T obj);
|
||||
|
||||
protected abstract ResourceLocation createModId(String name);
|
||||
|
||||
protected 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);
|
||||
}
|
||||
}
|
49
src/main/java/ru/bclib/registry/BlocksRegistry.java
Normal file
49
src/main/java/ru/bclib/registry/BlocksRegistry.java
Normal file
|
@ -0,0 +1,49 @@
|
|||
package ru.bclib.registry;
|
||||
|
||||
import net.fabricmc.fabric.api.registry.FlammableBlockRegistry;
|
||||
import net.minecraft.core.Registry;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import net.minecraft.world.item.BlockItem;
|
||||
import net.minecraft.world.item.CreativeModeTab;
|
||||
import net.minecraft.world.item.Item;
|
||||
import net.minecraft.world.item.Item.Properties;
|
||||
import net.minecraft.world.item.WaterLilyBlockItem;
|
||||
import net.minecraft.world.level.block.Block;
|
||||
import ru.bclib.interfaces.ISpetialItem;
|
||||
|
||||
public abstract class BlocksRegistry extends BaseRegistry<Block> {
|
||||
|
||||
protected BlocksRegistry(CreativeModeTab creativeTab) {
|
||||
super(creativeTab);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Block register(ResourceLocation id, Block block) {
|
||||
int maxCount = 64;
|
||||
boolean placeOnWater = false;
|
||||
if (block instanceof ISpetialItem) {
|
||||
ISpetialItem item = (ISpetialItem) block;
|
||||
maxCount = item.getStackSize();
|
||||
placeOnWater = item.canPlaceOnWater();
|
||||
}
|
||||
Properties item = makeItemSettings().stacksTo(maxCount);
|
||||
if (placeOnWater) {
|
||||
registerBlockItem(id, new WaterLilyBlockItem(block, item));
|
||||
} else {
|
||||
registerBlockItem(id, new BlockItem(block, item));
|
||||
}
|
||||
if (block.defaultBlockState().getMaterial().isFlammable() && FlammableBlockRegistry.getDefaultInstance().get(block).getBurnChance() == 0) {
|
||||
FlammableBlockRegistry.getDefaultInstance().add(block, 5, 5);
|
||||
}
|
||||
return Registry.register(Registry.BLOCK, id, block);
|
||||
}
|
||||
|
||||
public Block registerBlockOnly(String name, Block block) {
|
||||
return Registry.register(Registry.BLOCK, createModId(name), block);
|
||||
}
|
||||
|
||||
public Item registerBlockItem(ResourceLocation id, Item item) {
|
||||
registerItem(id, item, BaseRegistry.MOD_BLOCKS);
|
||||
return item;
|
||||
}
|
||||
}
|
111
src/main/java/ru/bclib/registry/ItemsRegistry.java
Normal file
111
src/main/java/ru/bclib/registry/ItemsRegistry.java
Normal file
|
@ -0,0 +1,111 @@
|
|||
package ru.bclib.registry;
|
||||
|
||||
import net.fabricmc.fabric.api.tool.attribute.v1.FabricToolTags;
|
||||
import net.minecraft.core.BlockSource;
|
||||
import net.minecraft.core.Direction;
|
||||
import net.minecraft.core.dispenser.DefaultDispenseItemBehavior;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import net.minecraft.sounds.SoundEvent;
|
||||
import net.minecraft.tags.Tag;
|
||||
import net.minecraft.world.effect.MobEffectInstance;
|
||||
import net.minecraft.world.entity.EntityType;
|
||||
import net.minecraft.world.entity.MobSpawnType;
|
||||
import net.minecraft.world.food.FoodProperties;
|
||||
import net.minecraft.world.item.*;
|
||||
import net.minecraft.world.level.block.DispenserBlock;
|
||||
import ru.bclib.items.BaseDrinkItem;
|
||||
import ru.bclib.items.BaseSpawnEggItem;
|
||||
import ru.bclib.items.EndDiscItem;
|
||||
import ru.bclib.items.ModelProviderItem;
|
||||
import ru.bclib.items.tool.BaseAxeItem;
|
||||
import ru.bclib.items.tool.BaseHoeItem;
|
||||
import ru.bclib.items.tool.BasePickaxeItem;
|
||||
import ru.bclib.util.TagHelper;
|
||||
|
||||
public abstract class ItemsRegistry extends BaseRegistry<Item> {
|
||||
|
||||
protected ItemsRegistry(CreativeModeTab creativeTab) {
|
||||
super(creativeTab);
|
||||
}
|
||||
|
||||
public Item registerDisc(String name, int power, SoundEvent sound) {
|
||||
return register(name, new EndDiscItem(power, sound, makeItemSettings()));
|
||||
}
|
||||
|
||||
public Item registerItem(String name) {
|
||||
return register(name, new ModelProviderItem(makeItemSettings()));
|
||||
}
|
||||
|
||||
@Override
|
||||
public Item register(ResourceLocation itemId, Item item) {
|
||||
if (item instanceof ArmorItem) {
|
||||
return registerArmor(itemId, item);
|
||||
}
|
||||
registerItem(itemId, item, BaseRegistry.MOD_ITEMS);
|
||||
return item;
|
||||
}
|
||||
|
||||
private Item registerArmor(ResourceLocation id, Item item) {
|
||||
registerItem(id, item, BaseRegistry.MOD_ITEMS);
|
||||
return item;
|
||||
}
|
||||
|
||||
public TieredItem registerTool(String name, TieredItem item) {
|
||||
ResourceLocation id = createModId(name);
|
||||
registerItem(id, item, BaseRegistry.MOD_ITEMS);
|
||||
|
||||
if (item instanceof ShovelItem) {
|
||||
TagHelper.addTag((Tag.Named<Item>) FabricToolTags.SHOVELS, item);
|
||||
} else if (item instanceof SwordItem) {
|
||||
TagHelper.addTag((Tag.Named<Item>) FabricToolTags.SWORDS, item);
|
||||
} else if (item instanceof BasePickaxeItem) {
|
||||
TagHelper.addTag((Tag.Named<Item>) FabricToolTags.PICKAXES, item);
|
||||
} else if (item instanceof BaseAxeItem) {
|
||||
TagHelper.addTag((Tag.Named<Item>) FabricToolTags.AXES, item);
|
||||
} else if (item instanceof BaseHoeItem) {
|
||||
TagHelper.addTag((Tag.Named<Item>) FabricToolTags.HOES, item);
|
||||
}
|
||||
|
||||
return item;
|
||||
}
|
||||
|
||||
public Item registerEgg(String name, EntityType<?> type, int background, int dots) {
|
||||
SpawnEggItem item = new BaseSpawnEggItem(type, background, dots, makeItemSettings());
|
||||
DefaultDispenseItemBehavior behavior = new DefaultDispenseItemBehavior() {
|
||||
public ItemStack execute(BlockSource pointer, ItemStack stack) {
|
||||
Direction direction = pointer.getBlockState().getValue(DispenserBlock.FACING);
|
||||
EntityType<?> entityType = ((SpawnEggItem) stack.getItem()).getType(stack.getTag());
|
||||
entityType.spawn(pointer.getLevel(), stack, null, pointer.getPos().relative(direction), MobSpawnType.DISPENSER, direction != Direction.UP, false);
|
||||
stack.shrink(1);
|
||||
return stack;
|
||||
}
|
||||
};
|
||||
DispenserBlock.registerBehavior(item, behavior);
|
||||
return register(name, item);
|
||||
}
|
||||
|
||||
public Item registerFood(String name, int hunger, float saturation, MobEffectInstance... effects) {
|
||||
FoodProperties.Builder builder = new FoodProperties.Builder().nutrition(hunger).saturationMod(saturation);
|
||||
for (MobEffectInstance effect: effects) {
|
||||
builder.effect(effect, 1F);
|
||||
}
|
||||
return registerFood(name, builder.build());
|
||||
}
|
||||
|
||||
public Item registerFood(String name, FoodProperties foodComponent) {
|
||||
return register(name, new ModelProviderItem(makeItemSettings().food(foodComponent)));
|
||||
}
|
||||
|
||||
public Item registerDrink(String name) {
|
||||
return register(name, new BaseDrinkItem(makeItemSettings().stacksTo(1)));
|
||||
}
|
||||
|
||||
public Item registerDrink(String name, FoodProperties foodComponent) {
|
||||
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);
|
||||
return registerDrink(name, builder.build());
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue