diff --git a/src/main/java/org/moddingx/libx/base/BlockBase.java b/src/main/java/org/moddingx/libx/base/BlockBase.java index 622c6298..c8bd6776 100644 --- a/src/main/java/org/moddingx/libx/base/BlockBase.java +++ b/src/main/java/org/moddingx/libx/base/BlockBase.java @@ -1,6 +1,7 @@ package org.moddingx.libx.base; import net.minecraft.core.registries.Registries; +import net.minecraft.world.flag.FeatureFlagSet; import net.minecraft.world.item.BlockItem; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; @@ -85,5 +86,10 @@ public int getBurnTime(@Nonnull ItemStack stack, @Nullable RecipeType recipeT public Stream makeCreativeTabStacks() { return BlockBase.this.makeCreativeTabStacks(); } + + @Override + public boolean isEnabled(@Nonnull FeatureFlagSet enabledFeatures) { + return this.getBlock().isEnabled(enabledFeatures); + } } } diff --git a/src/main/java/org/moddingx/libx/base/FluidBase.java b/src/main/java/org/moddingx/libx/base/FluidBase.java index 8fb7c813..016a8398 100644 --- a/src/main/java/org/moddingx/libx/base/FluidBase.java +++ b/src/main/java/org/moddingx/libx/base/FluidBase.java @@ -2,6 +2,7 @@ import net.minecraft.core.registries.Registries; import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.flag.FeatureFlagSet; import net.minecraft.world.item.BucketItem; import net.minecraft.world.item.Item; import net.minecraft.world.item.Items; @@ -30,6 +31,7 @@ import javax.annotation.OverridingMethodsMustInvokeSuper; import java.util.function.BiFunction; import java.util.function.Function; +import java.util.function.Supplier; import java.util.function.UnaryOperator; /** @@ -168,18 +170,20 @@ public static class Builder { private BlockBehaviour.Properties blockProperties; private Item.Properties bucketItemProperties; private UnaryOperator fluidProperties; + private Supplier enabled; private Builder() { this.fluidTypeFactory = FluidType::new; this.sourceFluidFactory = BaseFlowingFluid.Source::new; this.flowingFluidFactory = BaseFlowingFluid.Flowing::new; - this.liquidBlockFactory = LiquidBlock::new; - this.bucketItemFactory = DefaultBucketItem::new; + this.liquidBlockFactory = this.defaultLiquidBlockFactory(); + this.bucketItemFactory = this.defaultBucketItemFactory(); this.fluidTypeProperties = FluidType.Properties.create(); this.blockProperties = BlockBehaviour.Properties.ofFullCopy(Blocks.WATER); this.bucketItemProperties = new Item.Properties().craftRemainder(Items.BUCKET).stacksTo(1); this.fluidProperties = UnaryOperator.identity(); + this.enabled = () -> true; } /** @@ -278,6 +282,29 @@ public FluidBase.Builder fluidProperties(UnaryOperator enabled) { + this.enabled = enabled; + return this; + } + + private BiFunction defaultLiquidBlockFactory() { + return (FlowingFluid fluid, BlockBehaviour.Properties properties) -> new LiquidBlock(fluid, properties) { + @Override + public boolean isEnabled(@Nonnull FeatureFlagSet enabledFeatures) { + return Builder.this.enabled.get(); + } + }; + } + + private BiFunction defaultBucketItemFactory() { + return (Fluid content, Item.Properties properties) -> new DefaultBucketItem(content, properties) { + @Override + public boolean isEnabled(@Nonnull FeatureFlagSet enabledFeatures) { + return Builder.this.enabled.get(); + } + }; + } private static UnaryOperator compose(UnaryOperator a, UnaryOperator b) { return t -> b.apply(a.apply(t)); diff --git a/src/main/java/org/moddingx/libx/impl/base/decoration/BlockDecorationType.java b/src/main/java/org/moddingx/libx/impl/base/decoration/BlockDecorationType.java index 414c9572..f44a7006 100644 --- a/src/main/java/org/moddingx/libx/impl/base/decoration/BlockDecorationType.java +++ b/src/main/java/org/moddingx/libx/impl/base/decoration/BlockDecorationType.java @@ -3,6 +3,7 @@ import net.minecraft.core.Registry; import net.minecraft.core.registries.Registries; import net.minecraft.resources.ResourceKey; +import net.minecraft.world.flag.FeatureFlagSet; import net.minecraft.world.item.BlockItem; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; @@ -89,5 +90,10 @@ public int getBurnTime(@Nonnull ItemStack stack, @Nullable RecipeType recipeT if (burnTime < 0) return burnTime; return (int) Math.round(this.burnTimeModifier * burnTime); } + + @Override + public boolean isEnabled(@Nonnull FeatureFlagSet enabledFeatures) { + return this.parent.isEnabled(enabledFeatures); + } } } diff --git a/src/main/java/org/moddingx/libx/impl/base/decoration/blocks/DecoratedButton.java b/src/main/java/org/moddingx/libx/impl/base/decoration/blocks/DecoratedButton.java index 97848339..fe3bf74c 100644 --- a/src/main/java/org/moddingx/libx/impl/base/decoration/blocks/DecoratedButton.java +++ b/src/main/java/org/moddingx/libx/impl/base/decoration/blocks/DecoratedButton.java @@ -2,6 +2,7 @@ import net.minecraft.core.BlockPos; import net.minecraft.util.RandomSource; +import net.minecraft.world.flag.FeatureFlagSet; import net.minecraft.world.level.BlockGetter; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.ButtonBlock; @@ -39,4 +40,9 @@ public int getLightBlock(@Nonnull BlockState state, @Nonnull BlockGetter level, public int getLightEmission(@Nonnull BlockState state, @Nonnull BlockGetter world, @Nonnull BlockPos pos) { return this.parent.getLightEmission(state, world, pos); } + + @Override + public boolean isEnabled(@Nonnull FeatureFlagSet enabledFeatures) { + return this.parent.isEnabled(enabledFeatures); + } } diff --git a/src/main/java/org/moddingx/libx/impl/base/decoration/blocks/DecoratedDoorBlock.java b/src/main/java/org/moddingx/libx/impl/base/decoration/blocks/DecoratedDoorBlock.java index d72a5f4c..5aa5d381 100644 --- a/src/main/java/org/moddingx/libx/impl/base/decoration/blocks/DecoratedDoorBlock.java +++ b/src/main/java/org/moddingx/libx/impl/base/decoration/blocks/DecoratedDoorBlock.java @@ -2,6 +2,7 @@ import net.minecraft.core.BlockPos; import net.minecraft.util.RandomSource; +import net.minecraft.world.flag.FeatureFlagSet; import net.minecraft.world.level.BlockGetter; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.DoorBlock; @@ -40,4 +41,9 @@ public int getLightBlock(@Nonnull BlockState state, @Nonnull BlockGetter level, public int getLightEmission(@Nonnull BlockState state, @Nonnull BlockGetter world, @Nonnull BlockPos pos) { return this.parent.getLightEmission(state, world, pos); } + + @Override + public boolean isEnabled(@Nonnull FeatureFlagSet enabledFeatures) { + return this.parent.isEnabled(enabledFeatures); + } } diff --git a/src/main/java/org/moddingx/libx/impl/base/decoration/blocks/DecoratedFenceBlock.java b/src/main/java/org/moddingx/libx/impl/base/decoration/blocks/DecoratedFenceBlock.java index a51f090f..506c1106 100644 --- a/src/main/java/org/moddingx/libx/impl/base/decoration/blocks/DecoratedFenceBlock.java +++ b/src/main/java/org/moddingx/libx/impl/base/decoration/blocks/DecoratedFenceBlock.java @@ -2,6 +2,7 @@ import net.minecraft.core.BlockPos; import net.minecraft.util.RandomSource; +import net.minecraft.world.flag.FeatureFlagSet; import net.minecraft.world.level.BlockGetter; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.FenceBlock; @@ -39,4 +40,9 @@ public int getLightBlock(@Nonnull BlockState state, @Nonnull BlockGetter level, public int getLightEmission(@Nonnull BlockState state, @Nonnull BlockGetter world, @Nonnull BlockPos pos) { return this.parent.getLightEmission(state, world, pos); } + + @Override + public boolean isEnabled(@Nonnull FeatureFlagSet enabledFeatures) { + return this.parent.isEnabled(enabledFeatures); + } } diff --git a/src/main/java/org/moddingx/libx/impl/base/decoration/blocks/DecoratedFenceGateBlock.java b/src/main/java/org/moddingx/libx/impl/base/decoration/blocks/DecoratedFenceGateBlock.java index 997d7095..38869f1d 100644 --- a/src/main/java/org/moddingx/libx/impl/base/decoration/blocks/DecoratedFenceGateBlock.java +++ b/src/main/java/org/moddingx/libx/impl/base/decoration/blocks/DecoratedFenceGateBlock.java @@ -2,6 +2,7 @@ import net.minecraft.core.BlockPos; import net.minecraft.util.RandomSource; +import net.minecraft.world.flag.FeatureFlagSet; import net.minecraft.world.level.BlockGetter; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.FenceGateBlock; @@ -39,4 +40,9 @@ public int getLightBlock(@Nonnull BlockState state, @Nonnull BlockGetter level, public int getLightEmission(@Nonnull BlockState state, @Nonnull BlockGetter world, @Nonnull BlockPos pos) { return this.parent.getLightEmission(state, world, pos); } + + @Override + public boolean isEnabled(@Nonnull FeatureFlagSet enabledFeatures) { + return this.parent.isEnabled(enabledFeatures); + } } diff --git a/src/main/java/org/moddingx/libx/impl/base/decoration/blocks/DecoratedHangingSign.java b/src/main/java/org/moddingx/libx/impl/base/decoration/blocks/DecoratedHangingSign.java index 074764a4..ead88e64 100644 --- a/src/main/java/org/moddingx/libx/impl/base/decoration/blocks/DecoratedHangingSign.java +++ b/src/main/java/org/moddingx/libx/impl/base/decoration/blocks/DecoratedHangingSign.java @@ -5,6 +5,7 @@ import net.minecraft.client.renderer.blockentity.HangingSignRenderer; import net.minecraft.core.BlockPos; import net.minecraft.core.registries.Registries; +import net.minecraft.world.flag.FeatureFlagSet; import net.minecraft.world.item.HangingSignItem; import net.minecraft.world.item.Item; import net.minecraft.world.level.block.CeilingHangingSignBlock; @@ -47,7 +48,13 @@ public DecoratedHangingSign(ModX mod, DecoratedBlock parent) { this.wall = new Wall(this.parent, this::getBlockEntityType, this.parent.getMaterialProperties().woodType()); //noinspection ConstantConditions this.beType = new BlockEntityType<>((pos, state) -> new Entity(this.getBlockEntityType(), pos, state), Set.of(this.ceiling, this.wall), null); - this.item = new HangingSignItem(this.ceiling, this.wall, new Item.Properties().stacksTo(16)); + this.item = new HangingSignItem(this.ceiling, this.wall, new Item.Properties().stacksTo(16)) { + + @Override + public boolean isEnabled(@Nonnull FeatureFlagSet enabledFeatures) { + return parent.isEnabled(enabledFeatures); + } + }; } @Override @@ -108,6 +115,11 @@ public Ceiling(DecoratedBlock parent, Supplier> beType, public BlockEntity newBlockEntity(@Nonnull BlockPos pos, @Nonnull BlockState state) { return this.beType.get().create(pos, state); } + + @Override + public boolean isEnabled(@Nonnull FeatureFlagSet enabledFeatures) { + return this.parent.isEnabled(enabledFeatures); + } } public static class Wall extends WallHangingSignBlock { @@ -127,6 +139,11 @@ public Wall(DecoratedBlock parent, Supplier> beType, Woo public BlockEntity newBlockEntity(@Nonnull BlockPos pos, @Nonnull BlockState state) { return this.beType.get().create(pos, state); } + + @Override + public boolean isEnabled(@Nonnull FeatureFlagSet enabledFeatures) { + return this.parent.isEnabled(enabledFeatures); + } } public static class Entity extends HangingSignBlockEntity { diff --git a/src/main/java/org/moddingx/libx/impl/base/decoration/blocks/DecoratedPressurePlate.java b/src/main/java/org/moddingx/libx/impl/base/decoration/blocks/DecoratedPressurePlate.java index 8b0dd894..95b1792d 100644 --- a/src/main/java/org/moddingx/libx/impl/base/decoration/blocks/DecoratedPressurePlate.java +++ b/src/main/java/org/moddingx/libx/impl/base/decoration/blocks/DecoratedPressurePlate.java @@ -2,6 +2,7 @@ import net.minecraft.core.BlockPos; import net.minecraft.util.RandomSource; +import net.minecraft.world.flag.FeatureFlagSet; import net.minecraft.world.level.BlockGetter; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.PressurePlateBlock; @@ -39,4 +40,9 @@ public int getLightBlock(@Nonnull BlockState state, @Nonnull BlockGetter level, public int getLightEmission(@Nonnull BlockState state, @Nonnull BlockGetter world, @Nonnull BlockPos pos) { return this.parent.getLightEmission(state, world, pos); } + + @Override + public boolean isEnabled(@Nonnull FeatureFlagSet enabledFeatures) { + return this.parent.isEnabled(enabledFeatures); + } } diff --git a/src/main/java/org/moddingx/libx/impl/base/decoration/blocks/DecoratedSign.java b/src/main/java/org/moddingx/libx/impl/base/decoration/blocks/DecoratedSign.java index 13b0f01a..675e835b 100644 --- a/src/main/java/org/moddingx/libx/impl/base/decoration/blocks/DecoratedSign.java +++ b/src/main/java/org/moddingx/libx/impl/base/decoration/blocks/DecoratedSign.java @@ -5,6 +5,7 @@ import net.minecraft.client.renderer.blockentity.SignRenderer; import net.minecraft.core.BlockPos; import net.minecraft.core.registries.Registries; +import net.minecraft.world.flag.FeatureFlagSet; import net.minecraft.world.item.Item; import net.minecraft.world.item.SignItem; import net.minecraft.world.level.block.StandingSignBlock; @@ -47,7 +48,12 @@ public DecoratedSign(ModX mod, DecoratedBlock parent) { this.wall = new Wall(this.parent, this::getBlockEntityType, this.parent.getMaterialProperties().woodType()); //noinspection ConstantConditions this.beType = new BlockEntityType<>((pos, state) -> new Entity(this.getBlockEntityType(), pos, state), Set.of(this.standing, this.wall), null); - this.item = new SignItem(new Item.Properties().stacksTo(16), this.standing, this.wall); + this.item = new SignItem(new Item.Properties().stacksTo(16), this.standing, this.wall) { + @Override + public boolean isEnabled(@Nonnull FeatureFlagSet enabledFeatures) { + return parent.isEnabled(enabledFeatures); + } + }; } @Override @@ -108,6 +114,11 @@ public Standing(DecoratedBlock parent, Supplier> beType, public BlockEntity newBlockEntity(@Nonnull BlockPos pos, @Nonnull BlockState state) { return this.beType.get().create(pos, state); } + + @Override + public boolean isEnabled(@Nonnull FeatureFlagSet enabledFeatures) { + return this.parent.isEnabled(enabledFeatures); + } } public static class Wall extends WallSignBlock { @@ -127,6 +138,11 @@ public Wall(DecoratedBlock parent, Supplier> beType, Woo public BlockEntity newBlockEntity(@Nonnull BlockPos pos, @Nonnull BlockState state) { return this.beType.get().create(pos, state); } + + @Override + public boolean isEnabled(@Nonnull FeatureFlagSet enabledFeatures) { + return this.parent.isEnabled(enabledFeatures); + } } public static class Entity extends SignBlockEntity { diff --git a/src/main/java/org/moddingx/libx/impl/base/decoration/blocks/DecoratedSlabBlock.java b/src/main/java/org/moddingx/libx/impl/base/decoration/blocks/DecoratedSlabBlock.java index 2e9285a5..043b6702 100644 --- a/src/main/java/org/moddingx/libx/impl/base/decoration/blocks/DecoratedSlabBlock.java +++ b/src/main/java/org/moddingx/libx/impl/base/decoration/blocks/DecoratedSlabBlock.java @@ -2,6 +2,7 @@ import net.minecraft.core.BlockPos; import net.minecraft.util.RandomSource; +import net.minecraft.world.flag.FeatureFlagSet; import net.minecraft.world.level.BlockGetter; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.SlabBlock; @@ -39,4 +40,9 @@ public int getLightBlock(@Nonnull BlockState state, @Nonnull BlockGetter level, public int getLightEmission(@Nonnull BlockState state, @Nonnull BlockGetter world, @Nonnull BlockPos pos) { return this.parent.getLightEmission(state, world, pos); } + + @Override + public boolean isEnabled(@Nonnull FeatureFlagSet enabledFeatures) { + return this.parent.isEnabled(enabledFeatures); + } } diff --git a/src/main/java/org/moddingx/libx/impl/base/decoration/blocks/DecoratedStairBlock.java b/src/main/java/org/moddingx/libx/impl/base/decoration/blocks/DecoratedStairBlock.java index 3bdfb0d2..e1551109 100644 --- a/src/main/java/org/moddingx/libx/impl/base/decoration/blocks/DecoratedStairBlock.java +++ b/src/main/java/org/moddingx/libx/impl/base/decoration/blocks/DecoratedStairBlock.java @@ -2,6 +2,7 @@ import net.minecraft.core.BlockPos; import net.minecraft.util.RandomSource; +import net.minecraft.world.flag.FeatureFlagSet; import net.minecraft.world.level.BlockGetter; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.StairBlock; @@ -39,4 +40,9 @@ public int getLightBlock(@Nonnull BlockState state, @Nonnull BlockGetter level, public int getLightEmission(@Nonnull BlockState state, @Nonnull BlockGetter world, @Nonnull BlockPos pos) { return this.parent.getLightEmission(state, world, pos); } + + @Override + public boolean isEnabled(@Nonnull FeatureFlagSet enabledFeatures) { + return this.parent.isEnabled(enabledFeatures); + } } diff --git a/src/main/java/org/moddingx/libx/impl/base/decoration/blocks/DecoratedTrapdoorBlock.java b/src/main/java/org/moddingx/libx/impl/base/decoration/blocks/DecoratedTrapdoorBlock.java index b1183afc..a61674db 100644 --- a/src/main/java/org/moddingx/libx/impl/base/decoration/blocks/DecoratedTrapdoorBlock.java +++ b/src/main/java/org/moddingx/libx/impl/base/decoration/blocks/DecoratedTrapdoorBlock.java @@ -2,6 +2,7 @@ import net.minecraft.core.BlockPos; import net.minecraft.util.RandomSource; +import net.minecraft.world.flag.FeatureFlagSet; import net.minecraft.world.level.BlockGetter; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.TrapDoorBlock; @@ -40,4 +41,9 @@ public int getLightBlock(@Nonnull BlockState state, @Nonnull BlockGetter level, public int getLightEmission(@Nonnull BlockState state, @Nonnull BlockGetter world, @Nonnull BlockPos pos) { return this.parent.getLightEmission(state, world, pos); } + + @Override + public boolean isEnabled(@Nonnull FeatureFlagSet enabledFeatures) { + return this.parent.isEnabled(enabledFeatures); + } } diff --git a/src/main/java/org/moddingx/libx/impl/base/decoration/blocks/DecoratedWallBlock.java b/src/main/java/org/moddingx/libx/impl/base/decoration/blocks/DecoratedWallBlock.java index 85452340..b05ca761 100644 --- a/src/main/java/org/moddingx/libx/impl/base/decoration/blocks/DecoratedWallBlock.java +++ b/src/main/java/org/moddingx/libx/impl/base/decoration/blocks/DecoratedWallBlock.java @@ -2,6 +2,7 @@ import net.minecraft.core.BlockPos; import net.minecraft.util.RandomSource; +import net.minecraft.world.flag.FeatureFlagSet; import net.minecraft.world.level.BlockGetter; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.WallBlock; @@ -39,4 +40,9 @@ public int getLightBlock(@Nonnull BlockState state, @Nonnull BlockGetter level, public int getLightEmission(@Nonnull BlockState state, @Nonnull BlockGetter world, @Nonnull BlockPos pos) { return this.parent.getLightEmission(state, world, pos); } + + @Override + public boolean isEnabled(@Nonnull FeatureFlagSet enabledFeatures) { + return this.parent.isEnabled(enabledFeatures); + } } diff --git a/src/main/java/org/moddingx/libx/impl/base/decoration/blocks/DecoratedWoodBlock.java b/src/main/java/org/moddingx/libx/impl/base/decoration/blocks/DecoratedWoodBlock.java index 25204a3d..7f468974 100644 --- a/src/main/java/org/moddingx/libx/impl/base/decoration/blocks/DecoratedWoodBlock.java +++ b/src/main/java/org/moddingx/libx/impl/base/decoration/blocks/DecoratedWoodBlock.java @@ -2,6 +2,7 @@ import net.minecraft.core.BlockPos; import net.minecraft.util.RandomSource; +import net.minecraft.world.flag.FeatureFlagSet; import net.minecraft.world.item.context.UseOnContext; import net.minecraft.world.level.BlockGetter; import net.minecraft.world.level.Level; @@ -61,4 +62,9 @@ public BlockState getToolModifiedState(@Nonnull BlockState state, @Nonnull UseOn return super.getToolModifiedState(state, context, itemAbility, simulate); } } + + @Override + public boolean isEnabled(@Nonnull FeatureFlagSet enabledFeatures) { + return this.parent.isEnabled(enabledFeatures); + } }