mirror of
https://github.com/Sollace/Unicopia.git
synced 2025-02-08 06:26:43 +01:00
Fix incompatibility with the Origins mod
This commit is contained in:
parent
8c30f38cbc
commit
d68ada8a5b
1 changed files with 33 additions and 10 deletions
|
@ -1,23 +1,46 @@
|
||||||
package com.minelittlepony.unicopia.mixin.client;
|
package com.minelittlepony.unicopia.mixin.client;
|
||||||
|
|
||||||
|
import org.spongepowered.asm.mixin.Final;
|
||||||
import org.spongepowered.asm.mixin.Mixin;
|
import org.spongepowered.asm.mixin.Mixin;
|
||||||
|
import org.spongepowered.asm.mixin.Shadow;
|
||||||
import org.spongepowered.asm.mixin.injection.At;
|
import org.spongepowered.asm.mixin.injection.At;
|
||||||
import org.spongepowered.asm.mixin.injection.Redirect;
|
import org.spongepowered.asm.mixin.injection.ModifyVariable;
|
||||||
|
|
||||||
import com.minelittlepony.unicopia.EquinePredicates;
|
import com.minelittlepony.unicopia.EquinePredicates;
|
||||||
|
|
||||||
import net.minecraft.client.network.ClientPlayerEntity;
|
import net.minecraft.client.MinecraftClient;
|
||||||
import net.minecraft.client.render.LightmapTextureManager;
|
import net.minecraft.client.render.LightmapTextureManager;
|
||||||
import net.minecraft.entity.effect.StatusEffect;
|
import net.minecraft.entity.effect.StatusEffectInstance;
|
||||||
import net.minecraft.entity.effect.StatusEffects;
|
import net.minecraft.entity.effect.StatusEffects;
|
||||||
|
import net.minecraft.entity.player.PlayerEntity;
|
||||||
|
|
||||||
@Mixin(LightmapTextureManager.class)
|
@Mixin(value = LightmapTextureManager.class, priority = 999)
|
||||||
abstract class MixinLightmapTextureManager implements AutoCloseable {
|
abstract class MixinLightmapTextureManager implements AutoCloseable {
|
||||||
@Redirect(method = "update(F)V",
|
|
||||||
at = @At(value = "INVOKE",
|
private @Shadow boolean dirty;
|
||||||
target = "net/minecraft/client/network/ClientPlayerEntity.hasStatusEffect(Lnet/minecraft/entity/effect/StatusEffect;)Z")
|
private @Shadow @Final MinecraftClient client;
|
||||||
)
|
|
||||||
private boolean redirectHasStatusEffect(ClientPlayerEntity entity, StatusEffect effect) {
|
private boolean batEyesApplied;
|
||||||
return (effect == StatusEffects.NIGHT_VISION && EquinePredicates.PLAYER_BAT.test(entity)) || entity.hasStatusEffect(effect);
|
|
||||||
|
@ModifyVariable(method = "update(F)V", at = @At(value = "HEAD"), argsOnly = true)
|
||||||
|
private float beforeUpdate(float delta) {
|
||||||
|
if (dirty && client.world != null) {
|
||||||
|
PlayerEntity player = client.player;
|
||||||
|
if (!player.hasStatusEffect(StatusEffects.NIGHT_VISION) && EquinePredicates.PLAYER_BAT.test(player)) {
|
||||||
|
player.addStatusEffect(new StatusEffectInstance(StatusEffects.NIGHT_VISION, 1, 1, false, false));
|
||||||
|
batEyesApplied = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return delta;
|
||||||
|
}
|
||||||
|
|
||||||
|
@ModifyVariable(method = "update(F)V", at = @At(value = "RETURN"), argsOnly = true)
|
||||||
|
private float afterUpdate(float delta) {
|
||||||
|
if (batEyesApplied) {
|
||||||
|
client.player.removeStatusEffect(StatusEffects.NIGHT_VISION);
|
||||||
|
batEyesApplied = false;
|
||||||
|
}
|
||||||
|
return delta;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue