diff --git a/src/main/java/com/minelittlepony/unicopia/block/FruitBearingBlock.java b/src/main/java/com/minelittlepony/unicopia/block/FruitBearingBlock.java index 2009d87a..51c7b4a2 100644 --- a/src/main/java/com/minelittlepony/unicopia/block/FruitBearingBlock.java +++ b/src/main/java/com/minelittlepony/unicopia/block/FruitBearingBlock.java @@ -29,8 +29,6 @@ public class FruitBearingBlock extends LeavesBlock implements TintedBlock, Bucka public static final int WITHER_AGE = 15; public static final EnumProperty STAGE = EnumProperty.of("stage", Stage.class); - public static final List REGISTRY = new ArrayList<>(); - private final Supplier fruit; private final Supplier rottenFruitSupplier; @@ -47,7 +45,6 @@ public class FruitBearingBlock extends LeavesBlock implements TintedBlock, Bucka this.overlay = overlay; this.fruit = fruit; this.rottenFruitSupplier = rottenFruitSupplier; - REGISTRY.add(this); FlammableBlockRegistry.getDefaultInstance().add(this, 30, 60); } diff --git a/src/main/java/com/minelittlepony/unicopia/compat/sodium/Impl.java b/src/main/java/com/minelittlepony/unicopia/compat/sodium/Impl.java new file mode 100644 index 00000000..32b6d887 --- /dev/null +++ b/src/main/java/com/minelittlepony/unicopia/compat/sodium/Impl.java @@ -0,0 +1,17 @@ +package com.minelittlepony.unicopia.compat.sodium; + +import me.jellysquid.mods.sodium.client.SodiumClientMod; +import net.fabricmc.fabric.api.util.TriState; + +public class Impl implements SodiumDelegate { + static Impl INSTANCE = new Impl(); + + @Override + public TriState isFancyLeavesOrBetter() { + return switch (SodiumClientMod.options().quality.leavesQuality) { + case FAST -> TriState.FALSE; + case FANCY -> TriState.TRUE; + case DEFAULT -> TriState.DEFAULT; + }; + } +} diff --git a/src/main/java/com/minelittlepony/unicopia/compat/sodium/SodiumDelegate.java b/src/main/java/com/minelittlepony/unicopia/compat/sodium/SodiumDelegate.java new file mode 100644 index 00000000..c3cbb465 --- /dev/null +++ b/src/main/java/com/minelittlepony/unicopia/compat/sodium/SodiumDelegate.java @@ -0,0 +1,19 @@ +package com.minelittlepony.unicopia.compat.sodium; + +import net.fabricmc.fabric.api.util.TriState; +import net.fabricmc.loader.api.FabricLoader; + +public interface SodiumDelegate { + SodiumDelegate EMPTY = new SodiumDelegate() {}; + + static SodiumDelegate getInstance() { + if (FabricLoader.getInstance().isModLoaded("sodium")) { + return Impl.INSTANCE; + } + return EMPTY; + } + + default TriState isFancyLeavesOrBetter() { + return TriState.DEFAULT; + } +} diff --git a/src/main/java/com/minelittlepony/unicopia/mixin/client/MixinBlockModels.java b/src/main/java/com/minelittlepony/unicopia/mixin/client/MixinBlockModels.java new file mode 100644 index 00000000..fad25baa --- /dev/null +++ b/src/main/java/com/minelittlepony/unicopia/mixin/client/MixinBlockModels.java @@ -0,0 +1,29 @@ +package com.minelittlepony.unicopia.mixin.client; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.ModifyVariable; + +import com.minelittlepony.unicopia.block.FruitBearingBlock; +import com.minelittlepony.unicopia.compat.sodium.SodiumDelegate; + +import net.minecraft.block.BlockState; +import net.minecraft.client.MinecraftClient; +import net.minecraft.client.render.block.BlockModels; + +@Mixin(BlockModels.class) +abstract class MixinBlockModels { + @ModifyVariable( + method = "getModel(Lnet/minecraft/block/BlockState;)Lnet/minecraft/client/render/model/BakedModel;", + at = @At("HEAD"), + argsOnly = true, + ordinal = 0 + ) + private BlockState getAppearance(BlockState state) { + if (state.contains(FruitBearingBlock.STAGE) + && !SodiumDelegate.getInstance().isFancyLeavesOrBetter().orElse(MinecraftClient.isFancyGraphicsOrBetter())) { + return state.with(FruitBearingBlock.STAGE, FruitBearingBlock.Stage.IDLE); + } + return state; + } +} diff --git a/src/main/resources/unicopia.mixin.json b/src/main/resources/unicopia.mixin.json index 20a09367..5cdd7249 100644 --- a/src/main/resources/unicopia.mixin.json +++ b/src/main/resources/unicopia.mixin.json @@ -65,6 +65,7 @@ "client.MixinAnimalModel", "client.MixinArmorFeatureRenderer", "client.MixinBackgroundRenderer", + "client.MixinBlockModels", "client.MixinCamera", "client.MixinClientWorld", "client.MixinClientPlayNetworkHandler",