mirror of
https://github.com/Sollace/Unicopia.git
synced 2024-12-17 23:48:00 +01:00
Properly implement death messages for pegasi
This commit is contained in:
parent
a36c1bead3
commit
f55dff6b87
4 changed files with 81 additions and 17 deletions
|
@ -1,8 +1,10 @@
|
||||||
package com.minelittlepony.unicopia.mixin;
|
package com.minelittlepony.unicopia.mixin;
|
||||||
|
|
||||||
import org.spongepowered.asm.mixin.Mixin;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
import org.spongepowered.asm.mixin.*;
|
||||||
import org.spongepowered.asm.mixin.injection.At;
|
import org.spongepowered.asm.mixin.injection.At;
|
||||||
import org.spongepowered.asm.mixin.injection.Inject;
|
import org.spongepowered.asm.mixin.injection.Inject;
|
||||||
|
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
|
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
|
||||||
|
|
||||||
import com.minelittlepony.unicopia.entity.Equine;
|
import com.minelittlepony.unicopia.entity.Equine;
|
||||||
|
@ -10,30 +12,50 @@ import com.minelittlepony.unicopia.entity.player.Pony;
|
||||||
|
|
||||||
import net.minecraft.entity.Entity;
|
import net.minecraft.entity.Entity;
|
||||||
import net.minecraft.entity.LivingEntity;
|
import net.minecraft.entity.LivingEntity;
|
||||||
import net.minecraft.entity.damage.DamageSource;
|
import net.minecraft.entity.damage.*;
|
||||||
import net.minecraft.text.Text;
|
import net.minecraft.text.Text;
|
||||||
|
|
||||||
@Mixin(DamageSource.class)
|
@Mixin(DamageSource.class)
|
||||||
abstract class MixinDamageSource {
|
abstract class MixinDamageSource {
|
||||||
@Inject(method = "getDeathMessage", at = @At("RETURN"), cancellable = true)
|
@Inject(method = "getDeathMessage", at = @At("RETURN"), cancellable = true)
|
||||||
private void onGetDeathMessage(LivingEntity entity, CallbackInfoReturnable<Text> info) {
|
private void onGetDeathMessage(LivingEntity entity, CallbackInfoReturnable<Text> info) {
|
||||||
Equine.of(entity).map(Equine::getAttacker).ifPresent(attacker -> {
|
final DamageSource self = (DamageSource)(Object)this;
|
||||||
DamageSource self = (DamageSource)(Object)this;
|
|
||||||
|
|
||||||
Entity prime = entity.getPrimeAdversary();
|
if (self.isFromFalling()) {
|
||||||
if (prime != null && !attacker.isOwnedBy(prime)) {
|
info.setReturnValue(new DamageSource(self.name + ".pegasus").getDeathMessage(entity));
|
||||||
info.setReturnValue(Text.translatable("death.attack.generic.and_also", info.getReturnValue(), attacker.asEntity().getDisplayName()));
|
} else {
|
||||||
return;
|
Equine.of(entity).map(Equine::getAttacker).ifPresent(attacker -> {
|
||||||
}
|
Entity prime = entity.getPrimeAdversary();
|
||||||
|
if (prime != null && !attacker.isOwnedBy(prime)) {
|
||||||
|
info.setReturnValue(Text.translatable("death.attack.generic.and_also", info.getReturnValue(), attacker.asEntity().getDisplayName()));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
info.setReturnValue(Text.translatable("death.attack." + self.getName() + ".player", entity.getDisplayName(), attacker.asEntity().getDisplayName()));
|
info.setReturnValue(Text.translatable("death.attack." + self.getName() + ".player", entity.getDisplayName(), attacker.asEntity().getDisplayName()));
|
||||||
});
|
});
|
||||||
|
|
||||||
DamageSource self = (DamageSource)(Object)this;
|
|
||||||
|
|
||||||
Pony.of(entity).filter(e -> e.getSpecies().canFly()).ifPresent(pony -> {
|
Pony.of(entity).filter(e -> e.getSpecies().canFly()).ifPresent(pony -> {
|
||||||
if (pony.getPhysics().isFlying()) {
|
if (pony.getPhysics().isFlying()) {
|
||||||
info.setReturnValue(Text.translatable("death.attack.generic.whilst_flying", info.getReturnValue()));
|
info.setReturnValue(Text.translatable("death.attack.generic.whilst_flying", info.getReturnValue()));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Mixin(DamageTracker.class)
|
||||||
|
abstract class MixinDamageTracker {
|
||||||
|
@Shadow
|
||||||
|
private @Final LivingEntity entity;
|
||||||
|
@Nullable
|
||||||
|
private String fallDeathSuffix;
|
||||||
|
|
||||||
|
@Inject(method = "setFallDeathSuffix", at = @At("RETURN"))
|
||||||
|
private void onSetFallDeathSuffix(CallbackInfo info) {
|
||||||
|
Pony.of(entity).ifPresent(pony -> {
|
||||||
|
if (pony.getSpecies().canFly()) {
|
||||||
|
fallDeathSuffix = (fallDeathSuffix == null ? "" : fallDeathSuffix + ".") + "pegasus";
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,33 @@
|
||||||
|
package com.minelittlepony.unicopia.mixin.client;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import org.spongepowered.asm.mixin.*;
|
||||||
|
import org.spongepowered.asm.mixin.injection.At;
|
||||||
|
import org.spongepowered.asm.mixin.injection.Inject;
|
||||||
|
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
|
||||||
|
|
||||||
|
import net.minecraft.client.resource.language.TranslationStorage;
|
||||||
|
|
||||||
|
@Mixin(TranslationStorage.class)
|
||||||
|
abstract class MixinTranslationStorage {
|
||||||
|
@Shadow
|
||||||
|
private @Final Map<String, String> translations;
|
||||||
|
|
||||||
|
@Inject(method = "get", at = @At("HEAD"), cancellable = true)
|
||||||
|
public void onGet(String key, CallbackInfoReturnable<String> info) {
|
||||||
|
if (key != null && key.contains(".pegasus") && !translations.containsKey(key)) {
|
||||||
|
info.setReturnValue(translations.getOrDefault(key.replace(".pegasus", ""), key));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Inject(method = "hasTranslation", at = @At("RETURN"), cancellable = true)
|
||||||
|
public void onHasTranslation(String key, CallbackInfoReturnable<Boolean> info) {
|
||||||
|
if (key != null
|
||||||
|
&& key.contains(".pegasus")
|
||||||
|
&& !info.getReturnValueZ()
|
||||||
|
&& translations.containsKey(key.replace(".pegasus", ""))) {
|
||||||
|
info.setReturnValue(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -526,10 +526,17 @@
|
||||||
"death.attack.black_hole.player": "%1$s got sucked into %2$s's black hole",
|
"death.attack.black_hole.player": "%1$s got sucked into %2$s's black hole",
|
||||||
"death.attack.kick": "%1$s was kicked really hard",
|
"death.attack.kick": "%1$s was kicked really hard",
|
||||||
"death.attack.kick.player": "%2$s kicked %1$s really hard",
|
"death.attack.kick.player": "%2$s kicked %1$s really hard",
|
||||||
"death.attack.fall.pegasus": "%1$s forgot they could fly",
|
|
||||||
"death.attack.fall.pegasus.player": "%1$s forgot they could fly and hit the ground too hard whilst trying to escape %2$s",
|
|
||||||
"death.attack.stalagmite.pegasus": "%1$s tried to perch on a stalagmite",
|
"death.attack.stalagmite.pegasus": "%1$s tried to perch on a stalagmite",
|
||||||
"death.attack.stalagmite.pegasus.player": "%1$s flew into a stalagmite whilst fighting %2$s",
|
"death.attack.stalagmite.pegasus.player": "%1$s flew into a stalagmite whilst fighting %2$s",
|
||||||
|
|
||||||
|
"death.fell.accident.ladder.pegasus": "%1$s forgot they could fly and fell off a ladder",
|
||||||
|
"death.fell.accident.vines.pegasus": "%1$s forgot they could fly and fell off some vines",
|
||||||
|
"death.fell.accident.weeping_vines.pegasus": "%1$s forgot they could fly and fell off some weeping vines",
|
||||||
|
"death.fell.accident.twisting_vines.pegasus": "%1$s forgot they could fly and fell off some twisting vines",
|
||||||
|
"death.fell.accident.scaffolding.pegasus": "%1$s forgot they could fly and fell off scaffolding",
|
||||||
|
"death.fell.accident.other_climbable.pegasus": "%1$s forgot they could fly and fell while climbing",
|
||||||
|
"death.fell.accident.generic.pegasus": "%1$s forgot they could fly",
|
||||||
|
"death.fell.accident.pegasus": "%1$s forgot they could fly",
|
||||||
|
|
||||||
"unicopia.subtitle.flap_wings": "Wing flaps",
|
"unicopia.subtitle.flap_wings": "Wing flaps",
|
||||||
"unicopia.subtitle.dash": "Pony Dashes",
|
"unicopia.subtitle.dash": "Pony Dashes",
|
||||||
|
|
|
@ -11,6 +11,7 @@
|
||||||
"MixinBoatEntity",
|
"MixinBoatEntity",
|
||||||
"MixinBrain",
|
"MixinBrain",
|
||||||
"MixinDamageSource",
|
"MixinDamageSource",
|
||||||
|
"MixinDamageTracker",
|
||||||
"MixinEntity",
|
"MixinEntity",
|
||||||
"MixinFallingBlock",
|
"MixinFallingBlock",
|
||||||
"MixinFallingBlockEntity",
|
"MixinFallingBlockEntity",
|
||||||
|
@ -55,6 +56,7 @@
|
||||||
"client.MixinMouse",
|
"client.MixinMouse",
|
||||||
"client.MixinPlayerEntityRenderer",
|
"client.MixinPlayerEntityRenderer",
|
||||||
"client.MixinTooltipComponent",
|
"client.MixinTooltipComponent",
|
||||||
|
"client.MixinTranslationStorage",
|
||||||
"client.MixinWorldRenderer",
|
"client.MixinWorldRenderer",
|
||||||
"client.sodium.MixinSodiumWorldRenderer",
|
"client.sodium.MixinSodiumWorldRenderer",
|
||||||
"trinkets.MixinTrinketCreativeSlot"
|
"trinkets.MixinTrinketCreativeSlot"
|
||||||
|
|
Loading…
Reference in a new issue