[Feature] New Block Behaviour Interfaces

This commit is contained in:
Frank 2023-05-21 15:12:48 +02:00
parent 7d0df8c4dd
commit 3b2a2d4294
13 changed files with 118 additions and 42 deletions

View file

@ -12,16 +12,24 @@ import org.betterx.bclib.interfaces.Fuel;
import org.betterx.bclib.interfaces.PostInitable;
import org.betterx.bclib.interfaces.RenderLayerProvider;
import org.betterx.bclib.interfaces.TagProvider;
import org.betterx.bclib.interfaces.behaviours.BehaviourClimable;
import org.betterx.bclib.interfaces.behaviours.BehaviourCompostable;
import org.betterx.bclib.interfaces.behaviours.BehaviourLeaves;
import org.betterx.bclib.interfaces.tools.*;
import org.betterx.bclib.networking.VersionChecker;
import org.betterx.bclib.registry.BaseBlockEntities;
import org.betterx.worlds.together.tag.v3.CommonBlockTags;
import org.betterx.worlds.together.tag.v3.CommonItemTags;
import org.betterx.worlds.together.tag.v3.MineableTags;
import org.betterx.worlds.together.tag.v3.TagManager;
import net.minecraft.client.renderer.RenderType;
import net.minecraft.core.registries.BuiltInRegistries;
import net.minecraft.tags.BlockTags;
import net.minecraft.tags.ItemTags;
import net.minecraft.tags.TagKey;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.Items;
import net.minecraft.world.level.block.Block;
import net.fabricmc.api.EnvType;
@ -104,6 +112,7 @@ public class PostInitAPI {
}
private static void processBlockCommon(Block block) {
final Item item = block.asItem();
if (block instanceof PostInitable) {
((PostInitable) block).postInit();
}
@ -137,10 +146,31 @@ public class PostInitAPI {
TagManager.BLOCKS.add(block, MineableTags.HAMMER);
}
}
if (block instanceof BehaviourCompostable c) {
if (item != null && item != Items.AIR) {
TagManager.ITEMS.add(block, CommonItemTags.COMPOSTABLE);
ComposterAPI.allowCompost(c.compostingChance(), item);
} else if (BCLib.isDatagen() && Configs.MAIN_CONFIG.verboseLogging()) {
BCLib.LOGGER.warning("Block " + block + " has compostable behaviour but no item!");
}
}
if (block instanceof BehaviourClimable c) {
TagManager.BLOCKS.add(block, BlockTags.CLIMBABLE);
}
if (block instanceof BehaviourLeaves) {
TagManager.BLOCKS.add(block, BlockTags.LEAVES, CommonBlockTags.LEAVES);
if (item != null && item != Items.AIR)
TagManager.ITEMS.add(item, ItemTags.LEAVES, CommonItemTags.LEAVES);
}
if (block instanceof TagProvider) {
((TagProvider) block).addTags(blockTags, itemTags);
blockTags.forEach(tag -> TagManager.BLOCKS.add(tag, block));
itemTags.forEach(tag -> TagManager.ITEMS.add(tag, block.asItem()));
if (item != null && item != Items.AIR)
itemTags.forEach(tag -> TagManager.ITEMS.add(tag, item));
blockTags.clear();
itemTags.clear();
}

View file

@ -6,6 +6,7 @@ import org.betterx.bclib.client.models.PatternsHelper;
import org.betterx.bclib.client.render.BCLRenderLayer;
import org.betterx.bclib.interfaces.BlockModelProvider;
import org.betterx.bclib.interfaces.RenderLayerProvider;
import org.betterx.bclib.interfaces.behaviours.BehaviourClimable;
import net.minecraft.client.renderer.block.model.BlockModel;
import net.minecraft.client.resources.model.UnbakedModel;
@ -26,7 +27,7 @@ import java.util.Map;
import java.util.Optional;
import org.jetbrains.annotations.Nullable;
public class BaseLadderBlock extends LadderBlock implements RenderLayerProvider, BlockModelProvider {
public class BaseLadderBlock extends LadderBlock implements RenderLayerProvider, BlockModelProvider, BehaviourClimable {
public BaseLadderBlock(Block block) {
this(Properties.copy(block).noOcclusion());
}

View file

@ -4,18 +4,12 @@ import org.betterx.bclib.client.render.BCLRenderLayer;
import org.betterx.bclib.complexmaterials.BehaviourBuilders;
import org.betterx.bclib.interfaces.BlockModelProvider;
import org.betterx.bclib.interfaces.RenderLayerProvider;
import org.betterx.bclib.interfaces.TagProvider;
import org.betterx.bclib.interfaces.tools.AddMineableHoe;
import org.betterx.bclib.interfaces.tools.AddMineableShears;
import org.betterx.bclib.interfaces.behaviours.BehaviourLeaves;
import org.betterx.bclib.items.tool.BaseShearsItem;
import org.betterx.bclib.util.MHelper;
import net.minecraft.client.renderer.block.model.BlockModel;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.tags.BlockTags;
import net.minecraft.tags.ItemTags;
import net.minecraft.tags.TagKey;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.enchantment.EnchantmentHelper;
import net.minecraft.world.item.enchantment.Enchantments;
@ -34,7 +28,7 @@ import java.util.Collections;
import java.util.List;
import java.util.function.Consumer;
public class BaseLeavesBlock extends LeavesBlock implements BlockModelProvider, RenderLayerProvider, TagProvider, AddMineableShears, AddMineableHoe {
public class BaseLeavesBlock extends LeavesBlock implements BlockModelProvider, RenderLayerProvider, BehaviourLeaves {
protected final Block sapling;
public BaseLeavesBlock(
@ -123,9 +117,9 @@ public class BaseLeavesBlock extends LeavesBlock implements BlockModelProvider,
return getBlockModel(resourceLocation, defaultBlockState());
}
@Override
public void addTags(List<TagKey<Block>> blockTags, List<TagKey<Item>> itemTags) {
blockTags.add(BlockTags.LEAVES);
itemTags.add(ItemTags.LEAVES);
public float compostingChance() {
return 0.3f;
}
}

View file

@ -3,22 +3,13 @@ package org.betterx.bclib.blocks;
import org.betterx.bclib.client.render.BCLRenderLayer;
import org.betterx.bclib.complexmaterials.BehaviourBuilders;
import org.betterx.bclib.interfaces.RenderLayerProvider;
import org.betterx.bclib.interfaces.TagProvider;
import org.betterx.bclib.interfaces.tools.AddMineableHoe;
import org.betterx.bclib.interfaces.tools.AddMineableShears;
import org.betterx.bclib.interfaces.behaviours.BehaviourLeaves;
import net.minecraft.tags.BlockTags;
import net.minecraft.tags.ItemTags;
import net.minecraft.tags.TagKey;
import net.minecraft.world.item.Item;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.SoundType;
import net.minecraft.world.level.block.state.BlockBehaviour;
import net.minecraft.world.level.material.MapColor;
import java.util.List;
public class SimpleLeavesBlock extends BaseBlockNotFull implements RenderLayerProvider, TagProvider, AddMineableShears, AddMineableHoe {
public class SimpleLeavesBlock extends BaseBlockNotFull implements RenderLayerProvider, BehaviourLeaves {
public SimpleLeavesBlock(MapColor color) {
this(
BehaviourBuilders
@ -45,9 +36,9 @@ public class SimpleLeavesBlock extends BaseBlockNotFull implements RenderLayerPr
return BCLRenderLayer.CUTOUT;
}
@Override
public void addTags(List<TagKey<Block>> blockTags, List<TagKey<Item>> itemTags) {
blockTags.add(BlockTags.LEAVES);
itemTags.add(ItemTags.LEAVES);
public float compostingChance() {
return 0.3f;
}
}

View file

@ -3,6 +3,7 @@ package org.betterx.bclib.blocks;
import org.betterx.bclib.client.render.BCLRenderLayer;
import org.betterx.bclib.complexmaterials.BehaviourBuilders;
import org.betterx.bclib.interfaces.RenderLayerProvider;
import org.betterx.bclib.interfaces.behaviours.BehaviourCompostable;
import org.betterx.bclib.interfaces.tools.AddMineableHoe;
import org.betterx.bclib.interfaces.tools.AddMineableShears;
import org.betterx.bclib.items.tool.BaseShearsItem;
@ -31,7 +32,7 @@ import com.google.common.collect.Lists;
import java.util.List;
public abstract class UpDownPlantBlock extends BaseBlockNotFull implements RenderLayerProvider, AddMineableShears, AddMineableHoe {
public abstract class UpDownPlantBlock extends BaseBlockNotFull implements RenderLayerProvider, AddMineableShears, AddMineableHoe, BehaviourCompostable {
private static final VoxelShape SHAPE = box(4, 0, 4, 12, 16, 12);
public UpDownPlantBlock() {

View file

@ -31,7 +31,7 @@ public class Ladder extends SimpleMaterialSlot<WoodenComplexMaterial> {
@Override
protected void modifyBlockEntry(WoodenComplexMaterial parentMaterial, @NotNull BlockEntry entry) {
entry.setBlockTags(BlockTags.MINEABLE_WITH_AXE, BlockTags.CLIMBABLE);
entry.setBlockTags(BlockTags.MINEABLE_WITH_AXE);
}
@Override

View file

@ -0,0 +1,10 @@
package org.betterx.bclib.interfaces.behaviours;
/**
* Interface for blocks that can be climbed.
* <p>
* {@link org.betterx.bclib.api.v2.PostInitAPI} will add the {@link net.minecraft.tags.BlockTags#CLIMBABLE} tag to all blocks that
* implement this interface.
*/
public interface BehaviourClimable {
}

View file

@ -0,0 +1,9 @@
package org.betterx.bclib.interfaces.behaviours;
/**
* Interface for blocks that can be climbed and are vines.
* <p>
* This will combine the {@link BehaviourClimable} behaviours with all {@link BehaviourVine} behaviours.
*/
public interface BehaviourClimableVine extends BehaviourClimable, BehaviourVine {
}

View file

@ -0,0 +1,22 @@
package org.betterx.bclib.interfaces.behaviours;
/**
* Interface for blocks that can be composted.
* <p>
* {@link org.betterx.bclib.api.v2.PostInitAPI} will add the
* {@link org.betterx.worlds.together.tag.v3.CommonItemTags#COMPOSTABLE} tag to the items of all blocks that
* implement this interface. It will also register the Block with the {@link org.betterx.bclib.api.v2.ComposterAPI}
*/
public interface BehaviourCompostable {
/**
* The chance that this block will be composted.
* <p>
* The default value is 0.1f.
*
* @return The chance that this block will be composted.
*/
default float compostingChance() {
return 0.1f;
}
}

View file

@ -0,0 +1,16 @@
package org.betterx.bclib.interfaces.behaviours;
import org.betterx.bclib.interfaces.tools.AddMineableHoe;
import org.betterx.bclib.interfaces.tools.AddMineableShears;
/**
* Interface for leaves blocks.
* <p>
* Adds composting chance, mineable with shears and hoe.
*/
public interface BehaviourLeaves extends AddMineableShears, AddMineableHoe, BehaviourCompostable {
@Override
default float compostingChance() {
return 0.3f;
}
}

View file

@ -0,0 +1,12 @@
package org.betterx.bclib.interfaces.behaviours;
import org.betterx.bclib.interfaces.tools.AddMineableHoe;
import org.betterx.bclib.interfaces.tools.AddMineableShears;
/**
* Interface for blocks that are vines.
* <p>
* This will add the {@link AddMineableShears}, {@link AddMineableHoe} and {@link BehaviourCompostable} behaviours.
*/
public interface BehaviourVine extends AddMineableShears, AddMineableHoe, BehaviourCompostable {
}

View file

@ -1,7 +1,6 @@
package org.betterx.bclib.registry;
import org.betterx.bclib.BCLib;
import org.betterx.bclib.blocks.BaseLeavesBlock;
import org.betterx.bclib.blocks.BaseOreBlock;
import org.betterx.bclib.blocks.FeatureSaplingBlock;
import org.betterx.bclib.config.PathConfig;
@ -52,18 +51,7 @@ public class BlockRegistry extends BaseRegistry<Block> {
block = Registry.register(BuiltInRegistries.BLOCK, id, block);
getModBlocks(id.getNamespace()).add(block);
if (block instanceof BaseLeavesBlock) {
TagManager.BLOCKS.add(
block,
BlockTags.LEAVES,
CommonBlockTags.LEAVES,
MineableTags.HOE,
MineableTags.SHEARS
);
if (item != null) {
TagManager.ITEMS.add(item, CommonItemTags.LEAVES, ItemTags.LEAVES);
}
} else if (block instanceof BaseOreBlock) {
if (block instanceof BaseOreBlock) {
TagManager.BLOCKS.add(block, MineableTags.PICKAXE);
} else if (block instanceof FeatureSaplingBlock) {
TagManager.BLOCKS.add(block, CommonBlockTags.SAPLINGS, BlockTags.SAPLINGS);

View file

@ -20,6 +20,8 @@ public class CommonItemTags {
public static final TagKey<Item> WORKBENCHES = TagManager.ITEMS.makeCommonTag("workbench");
public static final TagKey<Item> WATER_BOTTLES = TagManager.ITEMS.makeCommonTag("water_bottles");
public static final TagKey<Item> COMPOSTABLE = TagManager.ITEMS.makeCommonTag("compostable");
;
static void prepareTags() {
TagManager.ITEMS.add(SOUL_GROUND, Blocks.SOUL_SAND.asItem(), Blocks.SOUL_SOIL.asItem());