[Feature] New Block Behaviour Interfaces
This commit is contained in:
parent
7d0df8c4dd
commit
3b2a2d4294
13 changed files with 118 additions and 42 deletions
|
@ -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();
|
||||
}
|
||||
|
|
|
@ -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());
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -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() {
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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 {
|
||||
}
|
|
@ -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 {
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -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 {
|
||||
}
|
|
@ -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);
|
||||
|
|
|
@ -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());
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue