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;
|
||||
|
||||
import org.spongepowered.asm.mixin.Final;
|
||||
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.Redirect;
|
||||
import org.spongepowered.asm.mixin.injection.ModifyVariable;
|
||||
|
||||
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.entity.effect.StatusEffect;
|
||||
import net.minecraft.entity.effect.StatusEffectInstance;
|
||||
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 {
|
||||
@Redirect(method = "update(F)V",
|
||||
at = @At(value = "INVOKE",
|
||||
target = "net/minecraft/client/network/ClientPlayerEntity.hasStatusEffect(Lnet/minecraft/entity/effect/StatusEffect;)Z")
|
||||
)
|
||||
private boolean redirectHasStatusEffect(ClientPlayerEntity entity, StatusEffect effect) {
|
||||
return (effect == StatusEffects.NIGHT_VISION && EquinePredicates.PLAYER_BAT.test(entity)) || entity.hasStatusEffect(effect);
|
||||
|
||||
private @Shadow boolean dirty;
|
||||
private @Shadow @Final MinecraftClient client;
|
||||
|
||||
private boolean batEyesApplied;
|
||||
|
||||
@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