diff --git a/src/main/java/org/betterx/bclib/api/v2/levelgen/structures/StructureWorldNBT.java b/src/main/java/org/betterx/bclib/api/v2/levelgen/structures/StructureWorldNBT.java index 2917ce4e..adaed8b3 100644 --- a/src/main/java/org/betterx/bclib/api/v2/levelgen/structures/StructureWorldNBT.java +++ b/src/main/java/org/betterx/bclib/api/v2/levelgen/structures/StructureWorldNBT.java @@ -233,7 +233,7 @@ public class StructureWorldNBT extends StructureNBT { POS.setY(y); for (int z = start.getZ(); z <= end.getZ(); z++) { POS.setZ(z); - if (world.getBlockState(POS).getMaterial().isReplaceable()) + if (world.getBlockState(POS).canBeReplaced()) airCount++; count++; } @@ -263,7 +263,7 @@ public class StructureWorldNBT extends StructureNBT { POS.setY(y); for (int z = start.getZ(); z <= end.getZ(); z++) { POS.setZ(z); - if (world.getBlockState(POS).getMaterial().isReplaceable()) + if (world.getBlockState(POS).canBeReplaced()) airCount++; count++; } diff --git a/src/main/java/org/betterx/bclib/api/v2/levelgen/structures/TemplateStructure.java b/src/main/java/org/betterx/bclib/api/v2/levelgen/structures/TemplateStructure.java index bf8ab098..c235a0c3 100644 --- a/src/main/java/org/betterx/bclib/api/v2/levelgen/structures/TemplateStructure.java +++ b/src/main/java/org/betterx/bclib/api/v2/levelgen/structures/TemplateStructure.java @@ -79,7 +79,7 @@ public abstract class TemplateStructure extends Structure { } protected boolean isFloorPlaceable(BlockState state, BlockState before) { - return (state == null || state.is(Blocks.AIR)) && before.getMaterial().isSolid(); + return (state == null || state.is(Blocks.AIR)) && before.isSolid(); } protected int erosion(RandomSource rnd) { @@ -219,7 +219,7 @@ public abstract class TemplateStructure extends Structure { int airCount = 0; for (int i = y; i < y + height && i > y - height; i += searchStep) { BlockState state = column.getBlock(i); - if (state.isAir() || state.getMaterial().isReplaceable()) { + if (state.isAir() || state.canBeReplaced()) { airCount++; } } diff --git a/src/main/java/org/betterx/bclib/api/v3/levelgen/features/CommonPlacedFeatureBuilder.java b/src/main/java/org/betterx/bclib/api/v3/levelgen/features/CommonPlacedFeatureBuilder.java index 453a3135..4035d584 100644 --- a/src/main/java/org/betterx/bclib/api/v3/levelgen/features/CommonPlacedFeatureBuilder.java +++ b/src/main/java/org/betterx/bclib/api/v3/levelgen/features/CommonPlacedFeatureBuilder.java @@ -17,7 +17,6 @@ import net.minecraft.world.level.levelgen.blockpredicates.BlockPredicate; import net.minecraft.world.level.levelgen.feature.Feature; import net.minecraft.world.level.levelgen.feature.configurations.FeatureConfiguration; import net.minecraft.world.level.levelgen.placement.*; -import net.minecraft.world.level.material.Material; import java.util.LinkedList; import java.util.List; @@ -278,7 +277,7 @@ abstract class CommonPlacedFeatureBuilder, FC extends Feat /** * Cast a ray with max {@code distance} length to find the next solid Block. The ray will travel through replaceable - * Blocks (see {@link Material#isReplaceable()}) and will be accepted if it hits a block with the + * Blocks and will be accepted if it hits a block with the * {@link CommonBlockTags#TERRAIN}-tag * * @param dir The direction the ray is cast diff --git a/src/main/java/org/betterx/bclib/blocks/BaseDoublePlantBlock.java b/src/main/java/org/betterx/bclib/blocks/BaseDoublePlantBlock.java index 328e74f8..4b5f8df1 100644 --- a/src/main/java/org/betterx/bclib/blocks/BaseDoublePlantBlock.java +++ b/src/main/java/org/betterx/bclib/blocks/BaseDoublePlantBlock.java @@ -1,6 +1,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.items.tool.BaseShearsItem; import org.betterx.bclib.util.BlocksHelper; @@ -27,7 +28,6 @@ import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.StateDefinition; import net.minecraft.world.level.block.state.properties.BooleanProperty; import net.minecraft.world.level.block.state.properties.IntegerProperty; -import net.minecraft.world.level.material.Material; import net.minecraft.world.level.storage.loot.LootContext; import net.minecraft.world.level.storage.loot.parameters.LootContextParams; import net.minecraft.world.phys.Vec3; @@ -45,20 +45,20 @@ public abstract class BaseDoublePlantBlock extends BaseBlockNotFull implements R public BaseDoublePlantBlock() { this( - Properties.of(Material.PLANT) - .sound(SoundType.GRASS) - .noCollission() - .offsetType(BlockBehaviour.OffsetType.NONE) + BehaviourBuilders + .createPlant() + .sound(SoundType.GRASS) + .offsetType(BlockBehaviour.OffsetType.NONE) ); } public BaseDoublePlantBlock(int light) { this( - Properties.of(Material.PLANT) - .sound(SoundType.GRASS) - .lightLevel((state) -> state.getValue(TOP) ? light : 0) - .noCollission() - .offsetType(BlockBehaviour.OffsetType.NONE) + BehaviourBuilders + .createPlant() + .sound(SoundType.GRASS) + .lightLevel((state) -> state.getValue(TOP) ? light : 0) + .offsetType(BlockBehaviour.OffsetType.NONE) ); } @@ -84,7 +84,7 @@ public abstract class BaseDoublePlantBlock extends BaseBlockNotFull implements R public boolean canSurvive(BlockState state, LevelReader world, BlockPos pos) { BlockState down = world.getBlockState(pos.below()); BlockState up = world.getBlockState(pos.above()); - return state.getValue(TOP) ? down.getBlock() == this : isTerrain(down) && (up.getMaterial().isReplaceable()); + return state.getValue(TOP) ? down.getBlock() == this : isTerrain(down) && (up.canBeReplaced()); } public boolean canStayAt(BlockState state, LevelReader world, BlockPos pos) { diff --git a/src/main/java/org/betterx/bclib/blocks/BaseOreBlock.java b/src/main/java/org/betterx/bclib/blocks/BaseOreBlock.java index 48935e7b..4d599a72 100644 --- a/src/main/java/org/betterx/bclib/blocks/BaseOreBlock.java +++ b/src/main/java/org/betterx/bclib/blocks/BaseOreBlock.java @@ -1,5 +1,6 @@ package org.betterx.bclib.blocks; +import org.betterx.bclib.complexmaterials.BehaviourBuilders; import org.betterx.bclib.interfaces.BlockModelProvider; import org.betterx.bclib.interfaces.TagProvider; import org.betterx.bclib.util.LootUtil; @@ -25,7 +26,6 @@ import net.minecraft.world.level.block.DropExperienceBlock; import net.minecraft.world.level.block.SoundType; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.material.MapColor; -import net.minecraft.world.level.material.Material; import net.minecraft.world.level.storage.loot.LootContext; import net.minecraft.world.level.storage.loot.parameters.LootContextParams; @@ -45,8 +45,8 @@ public class BaseOreBlock extends DropExperienceBlock implements BlockModelProvi public BaseOreBlock(Supplier drop, int minCount, int maxCount, int experience, int miningLevel) { this( - Properties - .of(Material.STONE, MapColor.SAND) + BehaviourBuilders + .createStone(MapColor.SAND) .requiresCorrectToolForDrops() .destroyTime(3F) .explosionResistance(9F) diff --git a/src/main/java/org/betterx/bclib/blocks/BasePlantBlock.java b/src/main/java/org/betterx/bclib/blocks/BasePlantBlock.java index 84414e76..6160183a 100644 --- a/src/main/java/org/betterx/bclib/blocks/BasePlantBlock.java +++ b/src/main/java/org/betterx/bclib/blocks/BasePlantBlock.java @@ -4,6 +4,7 @@ import org.betterx.bclib.client.models.BasePatterns; import org.betterx.bclib.client.models.ModelsHelper; import org.betterx.bclib.client.models.PatternsHelper; import org.betterx.bclib.client.render.BCLRenderLayer; +import org.betterx.bclib.complexmaterials.BehaviourBuilders; import org.betterx.bclib.interfaces.RenderLayerProvider; import org.betterx.bclib.interfaces.SettingsExtender; import org.betterx.bclib.items.tool.BaseShearsItem; @@ -27,7 +28,6 @@ import net.minecraft.world.level.block.BonemealableBlock; import net.minecraft.world.level.block.SoundType; import net.minecraft.world.level.block.state.BlockBehaviour; import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.material.Material; import net.minecraft.world.level.storage.loot.LootContext; import net.minecraft.world.level.storage.loot.parameters.LootContextParams; import net.minecraft.world.phys.Vec3; @@ -57,12 +57,13 @@ public abstract class BasePlantBlock extends BaseBlockNotFull implements RenderL } public static Properties basePlantSettings(boolean replaceable, int light) { - return basePlantSettings(replaceable ? Material.REPLACEABLE_PLANT : Material.PLANT, light); + return basePlantSettings(replaceable + ? BehaviourBuilders.createReplaceablePlant() + : BehaviourBuilders.createPlant(), light); } - public static Properties basePlantSettings(Material mat, int light) { - Properties props = Properties - .of(mat) + public static Properties basePlantSettings(BlockBehaviour.Properties props, int light) { + props .sound(SoundType.GRASS) .noCollission() .offsetType(BlockBehaviour.OffsetType.XZ); @@ -102,12 +103,14 @@ public abstract class BasePlantBlock extends BaseBlockNotFull implements RenderL @Deprecated(forRemoval = true) public BasePlantBlock(boolean replaceable, int light, SettingsExtender propMod) { this( - propMod.amend(Properties - .of(replaceable ? Material.REPLACEABLE_PLANT : Material.PLANT) - .lightLevel((state) -> light) - .sound(SoundType.GRASS) - .noCollission() - .offsetType(BlockBehaviour.OffsetType.XZ) + propMod.amend( + (replaceable + ? BehaviourBuilders.createReplaceablePlant() + : BehaviourBuilders.createPlant() + ) + .lightLevel((state) -> light) + .sound(SoundType.GRASS) + .offsetType(BlockBehaviour.OffsetType.XZ) ) ); } diff --git a/src/main/java/org/betterx/bclib/blocks/BaseSignBlock.java b/src/main/java/org/betterx/bclib/blocks/BaseSignBlock.java index 59b299ef..07851c6e 100644 --- a/src/main/java/org/betterx/bclib/blocks/BaseSignBlock.java +++ b/src/main/java/org/betterx/bclib/blocks/BaseSignBlock.java @@ -122,9 +122,9 @@ public class BaseSignBlock extends SignBlock implements BlockModelProvider, Cust public boolean canSurvive(BlockState state, LevelReader world, BlockPos pos) { if (!state.getValue(FLOOR)) { int index = (((state.getValue(ROTATION) >> 2) + 2)) & 3; - return world.getBlockState(pos.relative(BlocksHelper.HORIZONTAL[index])).getMaterial().isSolid(); + return world.getBlockState(pos.relative(BlocksHelper.HORIZONTAL[index])).isSolid(); } else { - return world.getBlockState(pos.below()).getMaterial().isSolid(); + return world.getBlockState(pos.below()).isSolid(); } } diff --git a/src/main/java/org/betterx/bclib/blocks/BaseVineBlock.java b/src/main/java/org/betterx/bclib/blocks/BaseVineBlock.java index 07cc5667..7ccddf45 100644 --- a/src/main/java/org/betterx/bclib/blocks/BaseVineBlock.java +++ b/src/main/java/org/betterx/bclib/blocks/BaseVineBlock.java @@ -2,6 +2,7 @@ package org.betterx.bclib.blocks; import org.betterx.bclib.blocks.BlockProperties.TripleShape; import org.betterx.bclib.client.render.BCLRenderLayer; +import org.betterx.bclib.complexmaterials.BehaviourBuilders; import org.betterx.bclib.interfaces.RenderLayerProvider; import org.betterx.bclib.items.tool.BaseShearsItem; import org.betterx.bclib.util.BlocksHelper; @@ -26,7 +27,6 @@ import net.minecraft.world.level.block.state.BlockBehaviour; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.StateDefinition; import net.minecraft.world.level.block.state.properties.EnumProperty; -import net.minecraft.world.level.material.Material; import net.minecraft.world.level.storage.loot.LootContext; import net.minecraft.world.level.storage.loot.parameters.LootContextParams; import net.minecraft.world.phys.Vec3; @@ -57,13 +57,14 @@ public class BaseVineBlock extends BaseBlockNotFull implements RenderLayerProvid public BaseVineBlock(int light, boolean bottomOnly, Function propMod) { this( - propMod.apply(Properties - .of(Material.PLANT) + propMod.apply(BehaviourBuilders + .createPlant() .sound(SoundType.GRASS) - .lightLevel((state) -> bottomOnly ? state.getValue(SHAPE) == TripleShape.BOTTOM + .lightLevel((state) -> bottomOnly + ? state.getValue(SHAPE) == TripleShape.BOTTOM ? light - : 0 : light) - .noCollission() + : 0 + : light) .offsetType(BlockBehaviour.OffsetType.XZ)) ); } diff --git a/src/main/java/org/betterx/bclib/blocks/BaseWallPlantBlock.java b/src/main/java/org/betterx/bclib/blocks/BaseWallPlantBlock.java index 06bed55b..d42730f9 100644 --- a/src/main/java/org/betterx/bclib/blocks/BaseWallPlantBlock.java +++ b/src/main/java/org/betterx/bclib/blocks/BaseWallPlantBlock.java @@ -61,7 +61,7 @@ public abstract class BaseWallPlantBlock extends BasePlantBlock { } public boolean isSupport(LevelReader world, BlockPos pos, BlockState blockState, Direction direction) { - return blockState.getMaterial().isSolid() && blockState.isFaceSturdy(world, pos, direction); + return blockState.isSolid() && blockState.isFaceSturdy(world, pos, direction); } @Override diff --git a/src/main/java/org/betterx/bclib/blocks/FeatureSaplingBlock.java b/src/main/java/org/betterx/bclib/blocks/FeatureSaplingBlock.java index 1f25f68f..2332494b 100644 --- a/src/main/java/org/betterx/bclib/blocks/FeatureSaplingBlock.java +++ b/src/main/java/org/betterx/bclib/blocks/FeatureSaplingBlock.java @@ -5,6 +5,7 @@ import org.betterx.bclib.client.models.BasePatterns; import org.betterx.bclib.client.models.ModelsHelper; import org.betterx.bclib.client.models.PatternsHelper; 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; @@ -26,7 +27,6 @@ import net.minecraft.world.level.block.state.BlockBehaviour; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.levelgen.feature.Feature; import net.minecraft.world.level.levelgen.feature.configurations.FeatureConfiguration; -import net.minecraft.world.level.material.Material; import net.minecraft.world.level.storage.loot.LootContext; import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.VoxelShape; @@ -51,23 +51,17 @@ public class FeatureSaplingBlock, FC extends FeatureConfig public FeatureSaplingBlock(FeatureSupplier featureSupplier) { this( - BlockBehaviour.Properties.of(Material.PLANT) - .noCollission() - .instabreak() - .sound(SoundType.GRASS) - .randomTicks(), + BehaviourBuilders.createTickingPlant() + .sound(SoundType.GRASS), featureSupplier ); } public FeatureSaplingBlock(int light, FeatureSupplier featureSupplier) { this( - BlockBehaviour.Properties.of(Material.PLANT) - .noCollission() - .lightLevel(state -> light) - .instabreak() - .sound(SoundType.GRASS) - .randomTicks(), + BehaviourBuilders.createTickingPlant() + .lightLevel(state -> light) + .sound(SoundType.GRASS), featureSupplier ); } diff --git a/src/main/java/org/betterx/bclib/blocks/SimpleLeavesBlock.java b/src/main/java/org/betterx/bclib/blocks/SimpleLeavesBlock.java index a85e82d7..067298a6 100644 --- a/src/main/java/org/betterx/bclib/blocks/SimpleLeavesBlock.java +++ b/src/main/java/org/betterx/bclib/blocks/SimpleLeavesBlock.java @@ -1,6 +1,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.TagProvider; import org.betterx.bclib.interfaces.tools.AddMineableHoe; @@ -14,37 +15,24 @@ 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 net.minecraft.world.level.material.Material; import java.util.List; public class SimpleLeavesBlock extends BaseBlockNotFull implements RenderLayerProvider, TagProvider, AddMineableShears, AddMineableHoe { public SimpleLeavesBlock(MapColor color) { this( - Properties - .of(Material.LEAVES) - .strength(0.2F) - .color(color) + BehaviourBuilders + .createLeaves(color) .sound(SoundType.GRASS) - .noOcclusion() - .isValidSpawn((state, world, pos, type) -> false) - .isSuffocating((state, world, pos) -> false) - .isViewBlocking((state, world, pos) -> false) ); } public SimpleLeavesBlock(MapColor color, int light) { this( - Properties - .of(Material.LEAVES) + BehaviourBuilders + .createLeaves(color) .lightLevel(ignored -> light) - .color(color) - .strength(0.2F) .sound(SoundType.GRASS) - .noOcclusion() - .isValidSpawn((state, world, pos, type) -> false) - .isSuffocating((state, world, pos) -> false) - .isViewBlocking((state, world, pos) -> false) ); } diff --git a/src/main/java/org/betterx/bclib/blocks/UnderwaterPlantBlock.java b/src/main/java/org/betterx/bclib/blocks/UnderwaterPlantBlock.java index 5f606590..edafd9da 100644 --- a/src/main/java/org/betterx/bclib/blocks/UnderwaterPlantBlock.java +++ b/src/main/java/org/betterx/bclib/blocks/UnderwaterPlantBlock.java @@ -1,6 +1,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.items.tool.BaseShearsItem; @@ -25,15 +26,12 @@ import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.material.Fluid; import net.minecraft.world.level.material.FluidState; import net.minecraft.world.level.material.Fluids; -import net.minecraft.world.level.material.Material; import net.minecraft.world.level.storage.loot.LootContext; import net.minecraft.world.level.storage.loot.parameters.LootContextParams; import net.minecraft.world.phys.Vec3; import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.VoxelShape; -import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; - import com.google.common.collect.Lists; import java.util.List; @@ -54,14 +52,13 @@ public abstract class UnderwaterPlantBlock extends BaseBlockNotFull implements R public static Properties baseUnderwaterPlantSettings(boolean replaceable, int light) { return baseUnderwaterPlantSettings( - replaceable ? Material.REPLACEABLE_WATER_PLANT : Material.WATER_PLANT, + replaceable ? BehaviourBuilders.createReplaceableWaterPlant() : BehaviourBuilders.createWaterPlant(), light ); } - public static Properties baseUnderwaterPlantSettings(Material mat, int light) { - Properties props = FabricBlockSettings - .of(mat) + public static Properties baseUnderwaterPlantSettings(BlockBehaviour.Properties props, int light) { + props .sound(SoundType.WET_GRASS) .noCollission() .offsetType(BlockBehaviour.OffsetType.XZ); diff --git a/src/main/java/org/betterx/bclib/blocks/UpDownPlantBlock.java b/src/main/java/org/betterx/bclib/blocks/UpDownPlantBlock.java index 67f759ca..2c9f502d 100644 --- a/src/main/java/org/betterx/bclib/blocks/UpDownPlantBlock.java +++ b/src/main/java/org/betterx/bclib/blocks/UpDownPlantBlock.java @@ -1,6 +1,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.tools.AddMineableHoe; import org.betterx.bclib.interfaces.tools.AddMineableShears; @@ -21,13 +22,11 @@ import net.minecraft.world.level.block.SoundType; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.state.BlockBehaviour; import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.material.Material; import net.minecraft.world.level.storage.loot.LootContext; import net.minecraft.world.level.storage.loot.parameters.LootContextParams; import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.VoxelShape; - import com.google.common.collect.Lists; import java.util.List; @@ -36,10 +35,9 @@ public abstract class UpDownPlantBlock extends BaseBlockNotFull implements Rende private static final VoxelShape SHAPE = box(4, 0, 4, 12, 16, 12); public UpDownPlantBlock() { - this(Properties - .of(Material.PLANT) + this(BehaviourBuilders + .createPlant() .sound(SoundType.GRASS) - .noCollission() ); } diff --git a/src/main/java/org/betterx/bclib/blocks/WallMushroomBlock.java b/src/main/java/org/betterx/bclib/blocks/WallMushroomBlock.java index 10e5867e..016362a2 100644 --- a/src/main/java/org/betterx/bclib/blocks/WallMushroomBlock.java +++ b/src/main/java/org/betterx/bclib/blocks/WallMushroomBlock.java @@ -29,6 +29,6 @@ public abstract class WallMushroomBlock extends BaseWallPlantBlock { @Override public boolean isSupport(LevelReader world, BlockPos pos, BlockState blockState, Direction direction) { - return blockState.getMaterial().isSolid() && blockState.isFaceSturdy(world, pos, direction); + return blockState.isSolid() && blockState.isFaceSturdy(world, pos, direction); } } diff --git a/src/main/java/org/betterx/bclib/complexmaterials/BehaviourBuilders.java b/src/main/java/org/betterx/bclib/complexmaterials/BehaviourBuilders.java new file mode 100644 index 00000000..c9ab893b --- /dev/null +++ b/src/main/java/org/betterx/bclib/complexmaterials/BehaviourBuilders.java @@ -0,0 +1,65 @@ +package org.betterx.bclib.complexmaterials; + +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.state.BlockBehaviour; +import net.minecraft.world.level.block.state.properties.NoteBlockInstrument; +import net.minecraft.world.level.material.MapColor; +import net.minecraft.world.level.material.PushReaction; + +public class BehaviourBuilders { + public static BlockBehaviour.Properties createPlant() { + return BlockBehaviour.Properties.of() + .mapColor(MapColor.PLANT) + .noCollission() + .instabreak() + .pushReaction(PushReaction.DESTROY); + } + + public static BlockBehaviour.Properties createTickingPlant() { + return createPlant().randomTicks(); + } + + public static BlockBehaviour.Properties createReplaceablePlant() { + return createPlant().replaceable(); + } + + public static BlockBehaviour.Properties createWaterPlant() { + return BlockBehaviour.Properties.of() + .mapColor(MapColor.WATER) + .noCollission() + .instabreak() + .pushReaction(PushReaction.DESTROY); + } + + public static BlockBehaviour.Properties createReplaceableWaterPlant() { + return createWaterPlant().replaceable(); + } + + public static BlockBehaviour.Properties createLeaves() { + return createLeaves(MapColor.PLANT); + } + + public static BlockBehaviour.Properties createLeaves(MapColor color) { + return BlockBehaviour.Properties.of() + .mapColor(color) + .strength(0.2f) + .randomTicks() + .noOcclusion() + .isValidSpawn(Blocks::ocelotOrParrot) + .isSuffocating(Blocks::never) + .isViewBlocking(Blocks::never) + .ignitedByLava() + .pushReaction(PushReaction.DESTROY) + .isRedstoneConductor(Blocks::never); + } + + public static BlockBehaviour.Properties createStone() { + return createStone(MapColor.STONE); + } + + public static BlockBehaviour.Properties createStone(MapColor color) { + return BlockBehaviour.Properties.of() + .mapColor(color) + .instrument(NoteBlockInstrument.BASEDRUM); + } +} diff --git a/src/main/java/org/betterx/bclib/registry/BlockRegistry.java b/src/main/java/org/betterx/bclib/registry/BlockRegistry.java index 86205692..69901afa 100644 --- a/src/main/java/org/betterx/bclib/registry/BlockRegistry.java +++ b/src/main/java/org/betterx/bclib/registry/BlockRegistry.java @@ -43,7 +43,7 @@ public class BlockRegistry extends BaseRegistry { } registerBlockItem(id, item); - if (block.defaultBlockState().getMaterial().isFlammable() + if (block.defaultBlockState().ignitedByLava() && FlammableBlockRegistry.getDefaultInstance() .get(block) .getBurnChance() == 0) { diff --git a/src/main/java/org/betterx/bclib/sdf/SDF.java b/src/main/java/org/betterx/bclib/sdf/SDF.java index 31adeabe..5d865265 100644 --- a/src/main/java/org/betterx/bclib/sdf/SDF.java +++ b/src/main/java/org/betterx/bclib/sdf/SDF.java @@ -20,7 +20,7 @@ import java.util.function.Function; public abstract class SDF { private final List> postProcesses = Lists.newArrayList(); private Function canReplace = (state) -> { - return state.getMaterial().isReplaceable(); + return state.canBeReplaced(); }; public abstract float getDistance(float x, float y, float z); diff --git a/src/main/java/org/betterx/bclib/util/BlocksHelper.java b/src/main/java/org/betterx/bclib/util/BlocksHelper.java index d385855b..06537412 100644 --- a/src/main/java/org/betterx/bclib/util/BlocksHelper.java +++ b/src/main/java/org/betterx/bclib/util/BlocksHelper.java @@ -85,7 +85,7 @@ public class BlocksHelper { public static int downRayRep(LevelAccessor world, BlockPos pos, int maxDist) { final MutableBlockPos POS = TL_POS.get(); POS.set(pos); - for (int j = 1; j < maxDist && (world.getBlockState(POS)).getMaterial().isReplaceable(); j++) { + for (int j = 1; j < maxDist && (world.getBlockState(POS)).canBeReplaced(); j++) { POS.setY(POS.getY() - 1); } return pos.getY() - POS.getY(); @@ -94,7 +94,7 @@ public class BlocksHelper { public static int raycastSqr(LevelAccessor world, BlockPos pos, int dx, int dy, int dz, int maxDist) { final MutableBlockPos POS = TL_POS.get(); POS.set(pos); - for (int j = 1; j < maxDist && (world.getBlockState(POS)).getMaterial().isReplaceable(); j++) { + for (int j = 1; j < maxDist && (world.getBlockState(POS)).canBeReplaced(); j++) { POS.move(dx, dy, dz); } return (int) pos.distSqr(POS); @@ -326,7 +326,7 @@ public class BlocksHelper { } public static boolean isFluid(BlockState state) { - return state.getMaterial().isLiquid(); + return state.liquid(); } public static boolean isFree(BlockState state) { @@ -334,7 +334,7 @@ public class BlocksHelper { } public static boolean isFreeOrReplaceable(BlockState state) { - return state.isAir() || state.getMaterial().isReplaceable(); + return state.isAir() || state.canBeReplaced(); } public static boolean isFreeOrFluid(BlockState state) { diff --git a/src/main/java/org/betterx/bclib/util/StructureErode.java b/src/main/java/org/betterx/bclib/util/StructureErode.java index 0a451a22..1345ebf2 100644 --- a/src/main/java/org/betterx/bclib/util/StructureErode.java +++ b/src/main/java/org/betterx/bclib/util/StructureErode.java @@ -11,8 +11,8 @@ import net.minecraft.util.RandomSource; import net.minecraft.world.level.WorldGenLevel; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.properties.NoteBlockInstrument; import net.minecraft.world.level.levelgen.structure.BoundingBox; -import net.minecraft.world.level.material.Material; import com.google.common.collect.Sets; @@ -149,7 +149,7 @@ public class StructureErode { int px = MHelper.floor(random.nextGaussian() * 2 + x + 0.5); int pz = MHelper.floor(random.nextGaussian() * 2 + z + 0.5); mut2.set(px, y, pz); - while (world.getBlockState(mut2).getMaterial().isReplaceable() && mut2.getY() > minY) { + while (world.getBlockState(mut2).canBeReplaced() && mut2.getY() > minY) { mut2.setY(mut2.getY() - 1); } if (!world.getBlockState(mut2).isAir() && state.canSurvive(world, mut2)) { @@ -225,7 +225,7 @@ public class StructureErode { BlockState state = world.getBlockState(mut); if (!ignore(state, world, mut) && !blocks.contains(mut)) { BlocksHelper.setWithoutUpdate(world, mut, Blocks.AIR); - while (world.getBlockState(mut).getMaterial().isReplaceable() && mut.getY() > minY) { + while (world.getBlockState(mut).canBeReplaced() && mut.getY() > minY) { mut.setY(mut.getY() - 1); } if (mut.getY() > minY) { @@ -242,7 +242,10 @@ public class StructureErode { if (state.is(CommonBlockTags.GEN_END_STONES) || state.is(BlockTags.NYLIUM)) { return true; } - return !state.getMaterial().equals(Material.STONE) || BlocksHelper.isInvulnerable(state, world, pos); + + //NoteBlockInstrument.BASEDRUM this is basically what Material.STONE was previously + return !state.instrument().equals(NoteBlockInstrument.BASEDRUM) + || BlocksHelper.isInvulnerable(state, world, pos); } private static boolean isTerrainNear(WorldGenLevel world, BlockPos pos) { @@ -266,8 +269,7 @@ public class StructureErode { mut.setY(y); BlockState state = world.getBlockState(mut); if (state.is(CommonBlockTags.TERRAIN) && !world.getBlockState(mut.above()) - .getMaterial() - .isSolidBlocking()) { + .isSolid()) { BlocksHelper.setWithoutUpdate(world, mut, top); } } diff --git a/src/main/resources/bclib.accesswidener b/src/main/resources/bclib.accesswidener index 90bc1787..d946e0d9 100644 --- a/src/main/resources/bclib.accesswidener +++ b/src/main/resources/bclib.accesswidener @@ -28,7 +28,9 @@ accessible method net/minecraft/world/level/levelgen/NoiseRouterData noNewCaves accessible method net/minecraft/world/level/levelgen/NoiseRouterData slideNetherLike (Lnet/minecraft/core/HolderGetter;II)Lnet/minecraft/world/level/levelgen/DensityFunction; accessible method net/minecraft/tags/TagEntry elementOrTag ()Lnet/minecraft/util/ExtraCodecs$TagOrElementLocation; accessible method net/minecraft/data/worldgen/biome/OverworldBiomes calculateSkyColor (F)I -accessible method net/minecraft/advancements/Advancement$Builder (Lnet/minecraft/resources/ResourceLocation;Lnet/minecraft/advancements/DisplayInfo;Lnet/minecraft/advancements/AdvancementRewards;Ljava/util/Map;[[Ljava/lang/String;)V +accessible method net/minecraft/world/level/block/Blocks ocelotOrParrot (Lnet/minecraft/world/level/block/state/BlockState;Lnet/minecraft/world/level/BlockGetter;Lnet/minecraft/core/BlockPos;Lnet/minecraft/world/entity/EntityType;)Ljava/lang/Boolean; +accessible method net/minecraft/world/level/block/Blocks never (Lnet/minecraft/world/level/block/state/BlockState;Lnet/minecraft/world/level/BlockGetter;Lnet/minecraft/core/BlockPos;Lnet/minecraft/world/entity/EntityType;)Ljava/lang/Boolean; +accessible method net/minecraft/world/level/block/Blocks never (Lnet/minecraft/world/level/block/state/BlockState;Lnet/minecraft/world/level/BlockGetter;Lnet/minecraft/core/BlockPos;)Z #Fields accessible field net/minecraft/world/entity/ai/village/poi/PoiTypes TYPE_BY_STATE Ljava/util/Map; \ No newline at end of file