diff --git a/src/main/java/com/minelittlepony/unicopia/Affinity.java b/src/main/java/com/minelittlepony/unicopia/Affinity.java index 23cdfd84..2a25d21a 100644 --- a/src/main/java/com/minelittlepony/unicopia/Affinity.java +++ b/src/main/java/com/minelittlepony/unicopia/Affinity.java @@ -11,8 +11,6 @@ public enum Affinity { private final int corruption; - private Affinity[] implications; - public static final Affinity[] VALUES = values(); Affinity(Formatting color, int corruption) { @@ -40,20 +38,6 @@ public enum Affinity { return isNeutral() || other.isNeutral() || this == other; } - public Affinity[] getImplicators() { - if (implications != null) { - return implications; - } - - if (this == NEUTRAL) { - implications = new Affinity[] { GOOD, BAD }; - } else { - implications = new Affinity[] { this }; - } - - return implications; - } - public static Affinity of(int ordinal, Affinity fallback) { return ordinal < 0 || ordinal >= VALUES.length ? fallback : VALUES[ordinal]; } diff --git a/src/main/java/com/minelittlepony/unicopia/ability/UnicornCastingAbility.java b/src/main/java/com/minelittlepony/unicopia/ability/UnicornCastingAbility.java index 466eb141..c037c298 100644 --- a/src/main/java/com/minelittlepony/unicopia/ability/UnicornCastingAbility.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/UnicornCastingAbility.java @@ -7,8 +7,6 @@ import javax.annotation.Nullable; import com.google.common.collect.Streams; import com.minelittlepony.unicopia.Race; import com.minelittlepony.unicopia.ability.data.Hit; -import com.minelittlepony.unicopia.ability.magic.Attached; -import com.minelittlepony.unicopia.ability.magic.Spell; import com.minelittlepony.unicopia.ability.magic.spell.SpellType; import com.minelittlepony.unicopia.entity.player.Pony; import com.minelittlepony.unicopia.item.AmuletItem; @@ -109,17 +107,17 @@ public class UnicornCastingAbility implements Ability { } } } else { - TypedActionResult newSpell = getNewSpell(player); + TypedActionResult> newSpell = getNewSpell(player); if (newSpell.getResult() != ActionResult.FAIL) { @Nullable - Spell spell = newSpell.getValue(); + SpellType spell = newSpell.getValue(); if (!player.hasSpell() && spell == null) { - spell = SpellType.SHIELD.create(); + spell = SpellType.SHIELD; } player.subtractEnergyCost(spell == null ? 2 : 4); - player.setSpell(spell); + player.setSpell(spell == null ? null : spell.create()); } } } @@ -139,13 +137,13 @@ public class UnicornCastingAbility implements Ability { return TypedActionResult.pass(stack); } - private TypedActionResult getNewSpell(Pony player) { + private TypedActionResult> getNewSpell(Pony player) { final SpellType current = player.hasSpell() ? player.getSpell(true).getType() : null; return Streams.stream(player.getMaster().getItemsHand()) .filter(GemstoneItem::isEnchanted) - .map(stack -> GemstoneItem.consumeSpell(stack, player.getMaster(), current, i -> i instanceof Attached)) + .map(stack -> GemstoneItem.consumeSpell(stack, player.getMaster(), current, SpellType::mayAttach)) .findFirst() - .orElse(TypedActionResult.pass(null)); + .orElse(TypedActionResult.>pass(null)); } @Override diff --git a/src/main/java/com/minelittlepony/unicopia/ability/UnicornProjectileAbility.java b/src/main/java/com/minelittlepony/unicopia/ability/UnicornProjectileAbility.java index 0a6a8884..b1a1887b 100644 --- a/src/main/java/com/minelittlepony/unicopia/ability/UnicornProjectileAbility.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/UnicornProjectileAbility.java @@ -5,7 +5,6 @@ import javax.annotation.Nullable; import com.google.common.collect.Streams; import com.minelittlepony.unicopia.Race; import com.minelittlepony.unicopia.ability.data.Hit; -import com.minelittlepony.unicopia.ability.magic.Spell; import com.minelittlepony.unicopia.ability.magic.Thrown; import com.minelittlepony.unicopia.ability.magic.spell.SpellType; import com.minelittlepony.unicopia.entity.player.Pony; @@ -63,27 +62,27 @@ public class UnicornProjectileAbility implements Ability { @Override public void apply(Pony player, Hit data) { - TypedActionResult thrown = getNewSpell(player); + TypedActionResult> thrown = getNewSpell(player); if (thrown.getResult() != ActionResult.FAIL) { @Nullable - Thrown spell = (Thrown)thrown.getValue(); + SpellType spell = thrown.getValue(); if (spell == null) { - spell = SpellType.VORTEX.create(); + spell = SpellType.VORTEX; } player.subtractEnergyCost(getCostEstimate(player)); - spell.toss(player); + ((Thrown)spell.create()).toss(player); } } - private TypedActionResult getNewSpell(Pony player) { + private TypedActionResult> getNewSpell(Pony player) { return Streams.stream(player.getMaster().getItemsHand()) .filter(GemstoneItem::isEnchanted) - .map(stack -> GemstoneItem.consumeSpell(stack, player.getMaster(), null, i -> i instanceof Thrown)) + .map(stack -> GemstoneItem.consumeSpell(stack, player.getMaster(), null, SpellType::mayThrow)) .findFirst() - .orElse(TypedActionResult.pass(null)); + .orElse(TypedActionResult.>pass(null)); } @Override diff --git a/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/AbstractSpell.java b/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/AbstractSpell.java index 56d8ac0e..f347018a 100644 --- a/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/AbstractSpell.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/AbstractSpell.java @@ -12,11 +12,8 @@ public abstract class AbstractSpell implements Spell { private final SpellType type; - private Affinity affinity; - - protected AbstractSpell(SpellType type, Affinity affinity) { + protected AbstractSpell(SpellType type) { this.type = type; - this.affinity = affinity; } @Override @@ -46,19 +43,17 @@ public abstract class AbstractSpell implements Spell { @Override public Affinity getAffinity() { - return affinity; + return getType().getAffinity(); } @Override public void toNBT(CompoundTag compound) { compound.putBoolean("dead", isDead); - compound.putInt("affinity", affinity.ordinal()); } @Override public void fromNBT(CompoundTag compound) { setDirty(false); isDead = compound.getBoolean("dead"); - affinity = Affinity.of(compound.getInt("affinity"), getType().getAffinity()); } } diff --git a/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/AttractiveSpell.java b/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/AttractiveSpell.java index d025b3c8..86b3989d 100644 --- a/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/AttractiveSpell.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/AttractiveSpell.java @@ -3,7 +3,6 @@ package com.minelittlepony.unicopia.ability.magic.spell; import java.util.List; import javax.annotation.Nullable; -import com.minelittlepony.unicopia.Affinity; import com.minelittlepony.unicopia.ability.magic.Caster; import com.minelittlepony.unicopia.ability.magic.Thrown; import com.minelittlepony.unicopia.entity.player.Pony; @@ -26,8 +25,8 @@ public class AttractiveSpell extends ShieldSpell implements Thrown { @Nullable private BlockPos homingPos; - protected AttractiveSpell(SpellType type, Affinity affinity) { - super(type, affinity); + protected AttractiveSpell(SpellType type) { + super(type); } @Override diff --git a/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/AwkwardSpell.java b/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/AwkwardSpell.java index f2fac1d2..daab266b 100644 --- a/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/AwkwardSpell.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/AwkwardSpell.java @@ -3,7 +3,6 @@ package com.minelittlepony.unicopia.ability.magic.spell; import java.util.ArrayList; import java.util.List; -import com.minelittlepony.unicopia.Affinity; import com.minelittlepony.unicopia.ability.magic.Caster; import com.minelittlepony.unicopia.ability.magic.Thrown; import com.minelittlepony.unicopia.util.shape.Sphere; @@ -18,8 +17,8 @@ import net.minecraft.util.registry.Registry; public class AwkwardSpell extends AbstractSpell implements Thrown { - protected AwkwardSpell(SpellType type, Affinity affinity) { - super(type, affinity); + protected AwkwardSpell(SpellType type) { + super(type); } @Override diff --git a/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/DisguiseSpell.java b/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/DisguiseSpell.java index 782c9b2b..2853ba99 100644 --- a/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/DisguiseSpell.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/DisguiseSpell.java @@ -4,7 +4,6 @@ import java.util.Optional; import javax.annotation.Nullable; -import com.minelittlepony.unicopia.Affinity; import com.minelittlepony.unicopia.FlightType; import com.minelittlepony.unicopia.Owned; import com.minelittlepony.unicopia.ability.magic.Attached; @@ -32,8 +31,8 @@ public class DisguiseSpell extends AbstractSpell implements Attached, Suppressab private int suppressionCounter; - protected DisguiseSpell(SpellType type, Affinity affinity) { - super(type, affinity); + protected DisguiseSpell(SpellType type) { + super(type); } @Override diff --git a/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/FireSpell.java b/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/FireSpell.java index 4ede2dff..3bbba357 100644 --- a/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/FireSpell.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/FireSpell.java @@ -1,6 +1,5 @@ package com.minelittlepony.unicopia.ability.magic.spell; -import com.minelittlepony.unicopia.Affinity; import com.minelittlepony.unicopia.EquinePredicates; import com.minelittlepony.unicopia.ability.magic.Attached; import com.minelittlepony.unicopia.ability.magic.Caster; @@ -41,8 +40,8 @@ public class FireSpell extends AbstractSpell implements Thrown, Attached { private static final Shape VISUAL_EFFECT_RANGE = new Sphere(false, 0.5); private static final Shape EFFECT_RANGE = new Sphere(false, 4); - protected FireSpell(SpellType type, Affinity affinity) { - super(type, affinity); + protected FireSpell(SpellType type) { + super(type); } @Override diff --git a/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/IceSpell.java b/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/IceSpell.java index cec97e8f..74e53f1e 100644 --- a/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/IceSpell.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/IceSpell.java @@ -1,6 +1,5 @@ package com.minelittlepony.unicopia.ability.magic.spell; -import com.minelittlepony.unicopia.Affinity; import com.minelittlepony.unicopia.ability.magic.Attached; import com.minelittlepony.unicopia.ability.magic.Caster; import com.minelittlepony.unicopia.ability.magic.Thrown; @@ -30,8 +29,8 @@ public class IceSpell extends AbstractSpell implements Thrown, Attached { private final int rad = 3; private final Shape effect_range = new Sphere(false, rad); - protected IceSpell(SpellType type, Affinity affinity) { - super(type, affinity); + protected IceSpell(SpellType type) { + super(type); } @Override diff --git a/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/InfernoSpell.java b/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/InfernoSpell.java index fbc6d6ec..31c4716d 100644 --- a/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/InfernoSpell.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/InfernoSpell.java @@ -1,6 +1,5 @@ package com.minelittlepony.unicopia.ability.magic.spell; -import com.minelittlepony.unicopia.Affinity; import com.minelittlepony.unicopia.ability.magic.Caster; import com.minelittlepony.unicopia.block.state.StateMaps; import com.minelittlepony.unicopia.util.MagicalDamageSource; @@ -17,8 +16,8 @@ import net.minecraft.world.World; public class InfernoSpell extends FireSpell { - protected InfernoSpell(SpellType type, Affinity affinity) { - super(type, affinity); + protected InfernoSpell(SpellType type) { + super(type); } @Override diff --git a/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/JoustingSpell.java b/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/JoustingSpell.java index c35b5856..6a277647 100644 --- a/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/JoustingSpell.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/JoustingSpell.java @@ -1,6 +1,5 @@ package com.minelittlepony.unicopia.ability.magic.spell; -import com.minelittlepony.unicopia.Affinity; import com.minelittlepony.unicopia.UTags; import com.minelittlepony.unicopia.ability.magic.Attached; import com.minelittlepony.unicopia.ability.magic.Caster; @@ -30,8 +29,8 @@ public class JoustingSpell extends AbstractSpell implements Attached { private int age; - protected JoustingSpell(SpellType type, Affinity affinity) { - super(type, affinity); + protected JoustingSpell(SpellType type) { + super(type); } @Override diff --git a/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/NecromancySpell.java b/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/NecromancySpell.java index 13771b2b..85bef602 100644 --- a/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/NecromancySpell.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/NecromancySpell.java @@ -3,7 +3,6 @@ package com.minelittlepony.unicopia.ability.magic.spell; import java.util.List; import com.google.common.collect.Lists; -import com.minelittlepony.unicopia.Affinity; import com.minelittlepony.unicopia.ability.magic.Attached; import com.minelittlepony.unicopia.ability.magic.Caster; import com.minelittlepony.unicopia.util.WorldEvent; @@ -27,8 +26,8 @@ public class NecromancySpell extends AbstractSpell implements Attached { EntityType.ZOMBIFIED_PIGLIN ); - protected NecromancySpell(SpellType type, Affinity affinity) { - super(type, affinity); + protected NecromancySpell(SpellType type) { + super(type); } @Override diff --git a/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/RevealingSpell.java b/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/RevealingSpell.java index d69b1958..44858efd 100644 --- a/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/RevealingSpell.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/RevealingSpell.java @@ -1,6 +1,5 @@ package com.minelittlepony.unicopia.ability.magic.spell; -import com.minelittlepony.unicopia.Affinity; import com.minelittlepony.unicopia.ability.magic.Attached; import com.minelittlepony.unicopia.ability.magic.Caster; import com.minelittlepony.unicopia.ability.magic.Suppressable; @@ -19,8 +18,8 @@ import net.minecraft.util.math.Vec3d; public class RevealingSpell extends AbstractSpell implements Attached, Thrown { private static final Shape AREA = new Sphere(false, 15); - protected RevealingSpell(SpellType type, Affinity affinity) { - super(type, affinity); + protected RevealingSpell(SpellType type) { + super(type); } @Override diff --git a/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/ScorchSpell.java b/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/ScorchSpell.java index f3e048d9..4eb16a41 100644 --- a/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/ScorchSpell.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/ScorchSpell.java @@ -2,7 +2,6 @@ package com.minelittlepony.unicopia.ability.magic.spell; import javax.annotation.Nullable; -import com.minelittlepony.unicopia.Affinity; import com.minelittlepony.unicopia.ability.magic.Caster; import com.minelittlepony.unicopia.block.state.StateMaps; import com.minelittlepony.unicopia.particle.MagicParticleEffect; @@ -17,8 +16,8 @@ import net.minecraft.util.math.Vec3d; public class ScorchSpell extends FireSpell { - protected ScorchSpell(SpellType type, Affinity affinity) { - super(type, affinity); + protected ScorchSpell(SpellType type) { + super(type); } @Override diff --git a/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/ShieldSpell.java b/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/ShieldSpell.java index 08d09379..ee95ee80 100644 --- a/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/ShieldSpell.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/ShieldSpell.java @@ -6,7 +6,6 @@ import java.util.TreeMap; import java.util.UUID; import java.util.stream.Collectors; -import com.minelittlepony.unicopia.Affinity; import com.minelittlepony.unicopia.EquinePredicates; import com.minelittlepony.unicopia.Unicopia; import com.minelittlepony.unicopia.ability.magic.Attached; @@ -40,8 +39,8 @@ public class ShieldSpell extends AbstractSpell implements Attached, Thrown { private final Map targets = new TreeMap<>(); - protected ShieldSpell(SpellType type, Affinity affinity) { - super(type, affinity); + protected ShieldSpell(SpellType type) { + super(type); } @Override diff --git a/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/SiphoningSpell.java b/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/SiphoningSpell.java index 2cecb344..55c9b920 100644 --- a/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/SiphoningSpell.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/SiphoningSpell.java @@ -3,7 +3,6 @@ package com.minelittlepony.unicopia.ability.magic.spell; import java.util.List; import java.util.stream.Collectors; -import com.minelittlepony.unicopia.Affinity; import com.minelittlepony.unicopia.Race; import com.minelittlepony.unicopia.ability.magic.Attached; import com.minelittlepony.unicopia.ability.magic.Caster; @@ -23,8 +22,8 @@ import net.minecraft.util.math.Vec3d; */ public class SiphoningSpell extends AbstractSpell implements Attached { - protected SiphoningSpell(SpellType type, Affinity affinity) { - super(type, affinity); + protected SiphoningSpell(SpellType type) { + super(type); } @Override diff --git a/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/SpellType.java b/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/SpellType.java index 6ef04e3e..4dd547bf 100644 --- a/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/SpellType.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/SpellType.java @@ -10,7 +10,9 @@ import javax.annotation.Nullable; import com.minelittlepony.unicopia.Affinity; import com.minelittlepony.unicopia.ability.magic.Affine; +import com.minelittlepony.unicopia.ability.magic.Attached; import com.minelittlepony.unicopia.ability.magic.Spell; +import com.minelittlepony.unicopia.ability.magic.Thrown; import net.minecraft.nbt.CompoundTag; import net.minecraft.text.Text; @@ -21,7 +23,7 @@ import net.minecraft.util.Util; public class SpellType implements Affine { public static final Identifier EMPTY_ID = new Identifier("unicopia", "null"); - public static final SpellType EMPTY_KEY = new SpellType<>(EMPTY_ID, Affinity.NEUTRAL, 0xFFFFFF, false, (t, a) -> null); + public static final SpellType EMPTY_KEY = new SpellType<>(EMPTY_ID, Affinity.NEUTRAL, 0xFFFFFF, false, t -> null); private static final Map> REGISTRY = new HashMap<>(); private static final Map>> BY_AFFINITY = new EnumMap<>(Affinity.class); @@ -30,10 +32,13 @@ public class SpellType implements Affine { public static final SpellType SCORCH = register("scorch", Affinity.BAD, 0, true, ScorchSpell::new); public static final SpellType FLAME = register("flame", Affinity.GOOD, 0xFF5D00, true, FireSpell::new); public static final SpellType INFERNAL = register("infernal", Affinity.BAD, 0xF00F00, true, InfernoSpell::new); - public static final SpellType SHIELD = register("shield", Affinity.NEUTRAL, 0x66CDAA, true, ShieldSpell::new); - public static final SpellType VORTEX = register("vortex", Affinity.NEUTRAL, 0x4CDEE7, true, AttractiveSpell::new); + public static final SpellType SHIELD = register("shield", Affinity.GOOD, 0x66CDAA, true, ShieldSpell::new); + public static final SpellType REPULSE = register("repulse", Affinity.BAD, 0x66CDAA, true, ShieldSpell::new); + public static final SpellType VORTEX = register("vortex", Affinity.GOOD, 0x4CDEE7, true, AttractiveSpell::new); + public static final SpellType SUFFER = register("suffer", Affinity.BAD, 0x4CDEE7, true, AttractiveSpell::new); public static final SpellType NECROMANCY = register("necromancy", Affinity.BAD, 0x3A3A3A, true, NecromancySpell::new); - public static final SpellType SIPHONING = register("siphoning", Affinity.NEUTRAL, 0xe308ab, true, SiphoningSpell::new); + public static final SpellType SIPHONING = register("siphoning", Affinity.GOOD, 0xe308ab, true, SiphoningSpell::new); + public static final SpellType DRAINING = register("draining", Affinity.BAD, 0xe308ab, true, SiphoningSpell::new); public static final SpellType DISGUISE = register("disguise", Affinity.BAD, 0x19E48E, false, DisguiseSpell::new); public static final SpellType REVEALING = register("reveal", Affinity.GOOD, 0x5CE81F, true, RevealingSpell::new); public static final SpellType JOUSTING = register("joust", Affinity.GOOD, 0xBDBDF9, false, JoustingSpell::new); @@ -46,7 +51,11 @@ public class SpellType implements Affine { private final Factory factory; - private final Map translationKeys = new EnumMap<>(Affinity.class); + private final boolean thrown; + private final boolean attached; + + @Nullable + private String translationKey; SpellType(Identifier id, Affinity affinity, int color, boolean obtainable, Factory factory) { this.id = id; @@ -54,12 +63,24 @@ public class SpellType implements Affine { this.color = color; this.obtainable = obtainable; this.factory = factory; + + Spell inst = create(); + thrown = inst instanceof Thrown; + attached = inst instanceof Attached; } public boolean isObtainable() { return obtainable; } + public boolean mayThrow() { + return thrown; + } + + public boolean mayAttach() { + return attached; + } + public Identifier getId() { return id; } @@ -76,23 +97,21 @@ public class SpellType implements Affine { return affinity; } - public String getTranslationKey(Affinity affinity) { - return translationKeys.computeIfAbsent(affinity, a -> Util.createTranslationKey(a.getTranslationKey(), getId())); + public String getTranslationKey() { + if (translationKey == null) { + translationKey = Util.createTranslationKey(getAffinity().getTranslationKey(), getId()); + } + return translationKey; } - public Text getName(Affinity affinity) { - return new TranslatableText(getTranslationKey(affinity)); + public Text getName() { + return new TranslatableText(getTranslationKey()); } @Nullable public T create() { - return create(getAffinity()); - } - - @Nullable - public T create(Affinity affinity) { try { - return factory.create(this, affinity); + return factory.create(this); } catch (Exception e) { e.printStackTrace(); } @@ -102,11 +121,7 @@ public class SpellType implements Affine { public static SpellType register(Identifier id, Affinity affinity, int color, boolean obtainable, Factory factory) { SpellType type = new SpellType<>(id, affinity, color, obtainable, factory); - - for (Affinity i : affinity.getImplicators()) { - byAffinity(i).add(type); - } - + byAffinity(affinity).add(type); REGISTRY.put(id, type); return type; } @@ -153,6 +168,6 @@ public class SpellType implements Affine { } public interface Factory { - T create(SpellType type, Affinity affinity); + T create(SpellType type); } } diff --git a/src/main/java/com/minelittlepony/unicopia/client/URenderers.java b/src/main/java/com/minelittlepony/unicopia/client/URenderers.java index cdec16d3..89f8cab9 100644 --- a/src/main/java/com/minelittlepony/unicopia/client/URenderers.java +++ b/src/main/java/com/minelittlepony/unicopia/client/URenderers.java @@ -93,7 +93,7 @@ public interface URenderers { }); FabricModelPredicateProviderRegistry.register(UItems.GEMSTONE, new Identifier("affinity"), (stack, world, entity) -> { - return GemstoneItem.isEnchanted(stack) ? 1 + GemstoneItem.getAffinity(stack).ordinal() : 0; + return GemstoneItem.isEnchanted(stack) ? 1 + GemstoneItem.getSpellKey(stack).getAffinity().ordinal() : 0; }); ColorProviderRegistry.ITEM.register((stack, i) -> { return i > 0 || !GemstoneItem.isEnchanted(stack) ? -1 : GemstoneItem.getSpellKey(stack).getColor(); diff --git a/src/main/java/com/minelittlepony/unicopia/item/GemstoneItem.java b/src/main/java/com/minelittlepony/unicopia/item/GemstoneItem.java index 3f53ad30..71eb4ba4 100644 --- a/src/main/java/com/minelittlepony/unicopia/item/GemstoneItem.java +++ b/src/main/java/com/minelittlepony/unicopia/item/GemstoneItem.java @@ -37,9 +37,8 @@ public class GemstoneItem extends Item { if (isEnchanted(stack)) { SpellType key = getSpellKey(stack); - Affinity affinity = getAffinity(stack); - MutableText line = new TranslatableText(key.getTranslationKey(affinity) + ".lore").formatted(affinity.getColor()); + MutableText line = new TranslatableText(key.getTranslationKey() + ".lore").formatted(key.getAffinity().getColor()); if (!Unicopia.SIDE.getPlayerSpecies().canCast()) { line = line.formatted(Formatting.OBFUSCATED); @@ -75,26 +74,24 @@ public class GemstoneItem extends Item { return new TranslatableText(getTranslationKey(stack) + ".obfuscated"); } - return new TranslatableText(getTranslationKey(stack) + ".enchanted", getSpellKey(stack).getName(getAffinity(stack))); + return new TranslatableText(getTranslationKey(stack) + ".enchanted", getSpellKey(stack).getName()); } return super.getName(); } - public static TypedActionResult consumeSpell(ItemStack stack, PlayerEntity player, @Nullable SpellType exclude, Predicate test) { + public static TypedActionResult> consumeSpell(ItemStack stack, PlayerEntity player, @Nullable SpellType exclude, Predicate> test) { if (!isEnchanted(stack)) { return TypedActionResult.pass(null); } - SpellType key = GemstoneItem.getSpellKey(stack); + SpellType key = getSpellKey(stack); if (Objects.equals(key, exclude)) { return TypedActionResult.fail(null); } - Spell spell = key.create(getAffinity(stack)); - - if (spell == null || !test.test(spell)) { + if (key == SpellType.EMPTY_KEY || !test.test(key)) { return TypedActionResult.fail(null); } @@ -102,13 +99,13 @@ public class GemstoneItem extends Item { player.swingHand(player.getStackInHand(Hand.OFF_HAND) == stack ? Hand.OFF_HAND : Hand.MAIN_HAND); if (stack.getCount() == 1) { - GemstoneItem.unenchanted(stack); + unenchanted(stack); } else { - player.giveItemStack(GemstoneItem.unenchanted(stack.split(1))); + player.giveItemStack(unenchanted(stack.split(1))); } } - return TypedActionResult.consume(spell); + return TypedActionResult.consume(key); } public static boolean isEnchanted(ItemStack stack) { @@ -121,26 +118,15 @@ public class GemstoneItem extends Item { public static ItemStack enchanted(ItemStack stack, SpellType type, Affinity affinity) { stack.getOrCreateTag().putString("spell", type.getId().toString()); - stack.getOrCreateTag().putInt("affinity", affinity.ordinal()); return stack; } public static ItemStack unenchanted(ItemStack stack) { stack.removeSubTag("spell"); - stack.removeSubTag("affinity"); return stack; } public static SpellType getSpellKey(ItemStack stack) { return SpellType.getKey(isEnchanted(stack) ? new Identifier(stack.getTag().getString("spell")) : SpellType.EMPTY_ID); } - - public static Affinity getAffinity(ItemStack stack) { - Affinity fallback = getSpellKey(stack).getAffinity(); - - if (stack.hasTag() && stack.getTag().contains("affinity")) { - return Affinity.of(stack.getTag().getInt("affinity"), fallback); - } - return fallback; - } } diff --git a/src/main/resources/assets/unicopia/lang/en_us.json b/src/main/resources/assets/unicopia/lang/en_us.json index 1187e490..49f8fbad 100644 --- a/src/main/resources/assets/unicopia/lang/en_us.json +++ b/src/main/resources/assets/unicopia/lang/en_us.json @@ -108,14 +108,14 @@ "spell.unicopia.shield": "Protective", "spell.unicopia.shield.lore": "Protection I", - "curse.unicopia.shield": "Repulsive", - "curse.unicopia.shield.lore": "Hostility I", + "curse.unicopia.repulse": "Repulsive", + "curse.unicopia.repulse.lore": "Hostility I", "spell.unicopia.vortex": "Attractive", "spell.unicopia.vortex.lore": "Containment I", - "curse.unicopia.vortex": "Suffering", - "curse.unicopia.vortex.lore": "Torture I", + "curse.unicopia.suffer": "Suffering", + "curse.unicopia.suffer.lore": "Torture I", "curse.unicopia.necromancy": "Resurrection", "curse.unicopia.necromancy.lore": "Resurrection I", @@ -123,8 +123,8 @@ "spell.unicopia.siphoning": "Siphoning", "spell.unicopia.siphoning.lore": "Energy II", - "curse.unicopia.siphoning": "Siphoning", - "curse.unicopia.siphoning.lore": "Energy III", + "curse.unicopia.draining": "Siphoning", + "curse.unicopia.draining.lore": "Energy III", "spell.unicopia.reveal": "Revealing", "spell.unicopia.reveal.lore": "Discovery II",