From 0af0cb218253dfe5cdd091a73195dca10b224315 Mon Sep 17 00:00:00 2001 From: Sollace Date: Mon, 4 May 2020 00:40:43 +0200 Subject: [PATCH] Fixed crash when dying --- .../unicopia/util/MagicalDamageSource.java | 85 +++++++++---------- .../resources/assets/unicopia/lang/en_us.json | 14 +-- 2 files changed, 47 insertions(+), 52 deletions(-) diff --git a/src/main/java/com/minelittlepony/unicopia/util/MagicalDamageSource.java b/src/main/java/com/minelittlepony/unicopia/util/MagicalDamageSource.java index a2b7d516..462dfa75 100644 --- a/src/main/java/com/minelittlepony/unicopia/util/MagicalDamageSource.java +++ b/src/main/java/com/minelittlepony/unicopia/util/MagicalDamageSource.java @@ -1,5 +1,8 @@ package com.minelittlepony.unicopia.util; +import java.util.ArrayList; +import java.util.List; + import javax.annotation.Nullable; import net.minecraft.entity.Entity; @@ -12,18 +15,21 @@ import net.minecraft.entity.projectile.ArrowEntity; import net.minecraft.item.ItemStack; import net.minecraft.text.Text; import net.minecraft.text.TranslatableText; -import net.minecraft.util.Language; public class MagicalDamageSource extends EntityDamageSource { - public static final DamageSource FOOD_POISONING = new MundaneDamageSource("food_poisoning").setBypassesArmor(); - public static final DamageSource ACID = new MundaneDamageSource("acid"); - public static final DamageSource ALICORN_AMULET = new MagicalDamageSource("alicorn_amulet").setUnblockable().setBypassesArmor(); - public static final DamageSource DARKNESS = new MagicalDamageSource("darkness"); - public static final DamageSource ZAP_APPLE = new MagicalDamageSource("zap"); + public static final DamageSource FOOD_POISONING = mundane("food_poisoning"); + public static final DamageSource ACID = mundane("acid"); + public static final DamageSource ALICORN_AMULET = new MagicalDamageSource("alicorn_amulet", true, true); + public static final DamageSource DARKNESS = create("darkness"); + public static final DamageSource ZAP_APPLE = create("zap"); + + public static DamageSource mundane(String type) { + return new DamageSource(type) {}; + } public static DamageSource create(String type) { - return new MagicalDamageSource(type); + return new MagicalDamageSource(type, false, false); } public static DamageSource causePlayerDamage(String type, PlayerEntity player) { @@ -31,65 +37,54 @@ public class MagicalDamageSource extends EntityDamageSource { } public static DamageSource causeMobDamage(String type, LivingEntity source) { - return new MagicalDamageSource(type, source); + return new MagicalDamageSource(type, source, false, false); } public static DamageSource causeIndirect(String type, ArrowEntity source, @Nullable Entity instigator) { return new ProjectileDamageSource(type, source, instigator).setProjectile(); } - protected MagicalDamageSource(String type) { - this(type, null); + protected MagicalDamageSource(String type, boolean direct, boolean unblockable) { + this(type, null, direct, unblockable); } - protected MagicalDamageSource(String type, Entity source) { + protected MagicalDamageSource(String type, Entity source, boolean direct, boolean unblockable) { super(type, source); setUsesMagic(); + if (direct) { + setBypassesArmor(); + } + if (unblockable) { + setUnblockable(); + } } @Override public Text getDeathMessage(LivingEntity target) { - Entity attacker = source instanceof LivingEntity ? (LivingEntity)source : target.getVehicle(); + String basic = "death.attack." + name; - if (attacker != null && attacker instanceof LivingEntity) { - String withAttecker = basic + ".player"; - ItemStack held = ((LivingEntity)attacker).getMainHandStack(); + List params = new ArrayList<>(); + params.add(target.getDisplayName()); - if (!held.isEmpty() && held.hasCustomName()) { - return new TranslatableText(withAttecker + ".item", target.getDisplayName(), attacker.getDisplayName(), held.toHoverableText()); + @Nullable + Entity attacker = source instanceof LivingEntity ? source : target.getPrimeAdversary(); + + if (attacker instanceof LivingEntity) { + if (attacker == target) { + basic += ".self"; + } else { + basic += ".attacker"; + params.add(((LivingEntity)attacker).getDisplayName()); } - if (Language.getInstance().hasTranslation(withAttecker)) { - return new TranslatableText(withAttecker, target.getDisplayName(), attacker.getDisplayName()); + ItemStack item = ((LivingEntity)attacker).getMainHandStack(); + if (!item.isEmpty() && item.hasCustomName()) { + basic += ".item"; + params.add(item.toHoverableText()); } } - return new TranslatableText(basic, target.getDisplayName(), source.getDisplayName()); - } - - @Override - public MagicalDamageSource setUnblockable() { - super.setUnblockable(); - return this; - } - - - @Override - public MagicalDamageSource setBypassesArmor() { - super.setBypassesArmor(); - return this; - } - - private static class MundaneDamageSource extends DamageSource { - - public MundaneDamageSource(String key) { - super(key); - } - - @Override - public DamageSource setBypassesArmor() { - return super.setBypassesArmor(); - } + return new TranslatableText(basic, params.toArray()); } } diff --git a/src/main/resources/assets/unicopia/lang/en_us.json b/src/main/resources/assets/unicopia/lang/en_us.json index dd956c0f..b45899ff 100644 --- a/src/main/resources/assets/unicopia/lang/en_us.json +++ b/src/main/resources/assets/unicopia/lang/en_us.json @@ -280,20 +280,20 @@ "death.attack.alicorn_amulet": "%1$s was driven insane", "death.attack.darkness": "%1$s went missing", "death.attack.feed": "%1$s was drained of all life", - "death.attack.feed.player": "%1$s died to feed %2$s", + "death.attack.feed.attacker": "%1$s died to feed %2$s", "death.attack.cold": "%1$s died of frost bite", - "death.attack.cold.player": "%1$s was frozen to death by %2$s", - "death.attack.cold.player.item": "%1$s was frozen to death by %2$s using %3$s", + "death.attack.cold.attacker": "%1$s was frozen to death by %2$s", + "death.attack.cold.attacker.item": "%1$s was frozen to death by %2$s using %3$s", "death.attack.smash": "%1$s was crushed under hoof", - "death.attack.smash.player": "%1$s was crushed by %2$s", + "death.attack.smash.attacker": "%1$s was crushed by %2$s", "death.attack.fire": "%1$s was burnt to a crisp by magic", - "death.attack.fire.player": "%1$s was burnt to a crisp by %2$s", - "death.attack.fire.own": "%1$s was burnt to a crisp by their own spell", + "death.attack.fire.attacker": "%1$s was burnt to a crisp by %2$s", + "death.attack.fire.self": "%1$s was burnt to a crisp by their own spell", "death.attack.zap": "%1$s ate a Zap Apple", "death.attack.paradox": "%1$s imploded", "death.attack.acid": "%1$s drowned in acid", "death.attack.food_poisoning": "%1$s died of food poisoning", - "death.attack.food_poisoning.player": "%1$s poisoned %1$s' to death", + "death.attack.food_poisoning.attacker": "%2$s poisoned %1$s to death", "advancements.adventure.bag_of_holding.title": "Read the Manual", "advancements.adventure.bag_of_holding.description": "Successfully die using the Bag of Holding",