diff --git a/fabric-block-api-v1/src/main/java/net/fabricmc/fabric/mixin/block/ChunkSectionBlockStateCounterMixin.java b/fabric-block-api-v1/src/main/java/net/fabricmc/fabric/mixin/block/ChunkSectionBlockStateCounterMixin.java new file mode 100644 index 000000000..709d54d8b --- /dev/null +++ b/fabric-block-api-v1/src/main/java/net/fabricmc/fabric/mixin/block/ChunkSectionBlockStateCounterMixin.java @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2016, 2017, 2018, 2019 FabricMC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package net.fabricmc.fabric.mixin.block; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Redirect; + +import net.minecraft.block.BlockState; +import net.minecraft.block.Blocks; + +@Mixin(targets = "net/minecraft/world/chunk/ChunkSection$BlockStateCounter") +public class ChunkSectionBlockStateCounterMixin { + /** + * Makes Chunk Sections not have isAir = true modded blocks be replaced with AIR against their will. + * Mojang report: https://bugs.mojang.com/browse/MC-232360 + */ + @Redirect(method = "accept(Lnet/minecraft/block/BlockState;I)V", + at = @At(value = "INVOKE", target = "Lnet/minecraft/block/BlockState;isAir()Z")) + private boolean modifyAirCheck(BlockState blockState) { + return blockState.isOf(Blocks.AIR) || blockState.isOf(Blocks.CAVE_AIR) || blockState.isOf(Blocks.VOID_AIR); + } +} diff --git a/fabric-block-api-v1/src/main/java/net/fabricmc/fabric/mixin/block/ChunkSectionMixin.java b/fabric-block-api-v1/src/main/java/net/fabricmc/fabric/mixin/block/ChunkSectionMixin.java new file mode 100644 index 000000000..dea294326 --- /dev/null +++ b/fabric-block-api-v1/src/main/java/net/fabricmc/fabric/mixin/block/ChunkSectionMixin.java @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2016, 2017, 2018, 2019 FabricMC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package net.fabricmc.fabric.mixin.block; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Redirect; + +import net.minecraft.block.BlockState; +import net.minecraft.block.Blocks; +import net.minecraft.world.chunk.ChunkSection; + +@Mixin(ChunkSection.class) +public class ChunkSectionMixin { + /** + * Makes Chunk Sections not have isAir = true modded blocks be replaced with AIR against their will. + * Mojang report: https://bugs.mojang.com/browse/MC-232360 + */ + @Redirect(method = "setBlockState(IIILnet/minecraft/block/BlockState;Z)Lnet/minecraft/block/BlockState;", + at = @At(value = "INVOKE", target = "Lnet/minecraft/block/BlockState;isAir()Z")) + private boolean modifyAirCheck(BlockState blockState) { + return blockState.isOf(Blocks.AIR) || blockState.isOf(Blocks.CAVE_AIR) || blockState.isOf(Blocks.VOID_AIR); + } +} diff --git a/fabric-block-api-v1/src/main/resources/fabric-block-api-v1.mixins.json b/fabric-block-api-v1/src/main/resources/fabric-block-api-v1.mixins.json index 74146a233..090d0938c 100644 --- a/fabric-block-api-v1/src/main/resources/fabric-block-api-v1.mixins.json +++ b/fabric-block-api-v1/src/main/resources/fabric-block-api-v1.mixins.json @@ -4,7 +4,9 @@ "compatibilityLevel": "JAVA_17", "mixins": [ "BlockMixin", - "BlockStateMixin" + "BlockStateMixin", + "ChunkSectionBlockStateCounterMixin", + "ChunkSectionMixin" ], "injectors": { "defaultRequire": 1