Disable leaf flowers on fast graphics

This commit is contained in:
Sollace 2024-02-18 14:37:49 +00:00
parent c924d81331
commit 2abeff5767
No known key found for this signature in database
GPG key ID: E52FACE7B5C773DB
5 changed files with 66 additions and 3 deletions

View file

@ -29,8 +29,6 @@ public class FruitBearingBlock extends LeavesBlock implements TintedBlock, Bucka
public static final int WITHER_AGE = 15; public static final int WITHER_AGE = 15;
public static final EnumProperty<Stage> STAGE = EnumProperty.of("stage", Stage.class); public static final EnumProperty<Stage> STAGE = EnumProperty.of("stage", Stage.class);
public static final List<FruitBearingBlock> REGISTRY = new ArrayList<>();
private final Supplier<Block> fruit; private final Supplier<Block> fruit;
private final Supplier<ItemStack> rottenFruitSupplier; private final Supplier<ItemStack> rottenFruitSupplier;
@ -47,7 +45,6 @@ public class FruitBearingBlock extends LeavesBlock implements TintedBlock, Bucka
this.overlay = overlay; this.overlay = overlay;
this.fruit = fruit; this.fruit = fruit;
this.rottenFruitSupplier = rottenFruitSupplier; this.rottenFruitSupplier = rottenFruitSupplier;
REGISTRY.add(this);
FlammableBlockRegistry.getDefaultInstance().add(this, 30, 60); FlammableBlockRegistry.getDefaultInstance().add(this, 30, 60);
} }

View file

@ -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;
};
}
}

View file

@ -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;
}
}

View file

@ -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;
}
}

View file

@ -65,6 +65,7 @@
"client.MixinAnimalModel", "client.MixinAnimalModel",
"client.MixinArmorFeatureRenderer", "client.MixinArmorFeatureRenderer",
"client.MixinBackgroundRenderer", "client.MixinBackgroundRenderer",
"client.MixinBlockModels",
"client.MixinCamera", "client.MixinCamera",
"client.MixinClientWorld", "client.MixinClientWorld",
"client.MixinClientPlayNetworkHandler", "client.MixinClientPlayNetworkHandler",