diff --git a/src/main/java/com/minelittlepony/unicopia/BlockInteractions.java b/src/main/java/com/minelittlepony/unicopia/CustomDrops.java similarity index 96% rename from src/main/java/com/minelittlepony/unicopia/BlockInteractions.java rename to src/main/java/com/minelittlepony/unicopia/CustomDrops.java index be7afd33..fcae8b03 100644 --- a/src/main/java/com/minelittlepony/unicopia/BlockInteractions.java +++ b/src/main/java/com/minelittlepony/unicopia/CustomDrops.java @@ -13,9 +13,9 @@ import net.minecraft.item.ItemStack; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; -// TODO: forge events -public class BlockInteractions { - +@Deprecated +public class CustomDrops { + // TODO: replace with a loot table public void addAuxiliaryDrops(World world, BlockState state, BlockPos pos, List drops, int fortune) { Block block = state.getBlock(); diff --git a/src/main/java/com/minelittlepony/unicopia/UnicopiaCore.java b/src/main/java/com/minelittlepony/unicopia/UnicopiaCore.java index 12374b01..e6f5c1ae 100644 --- a/src/main/java/com/minelittlepony/unicopia/UnicopiaCore.java +++ b/src/main/java/com/minelittlepony/unicopia/UnicopiaCore.java @@ -10,7 +10,7 @@ import org.apache.logging.log4j.Logger; import com.minelittlepony.common.util.GamePaths; import com.minelittlepony.jumpingcastle.api.Channel; import com.minelittlepony.jumpingcastle.api.JumpingCastle; -import com.minelittlepony.unicopia.ability.PowersRegistry; +import com.minelittlepony.unicopia.ability.Abilities; import com.minelittlepony.unicopia.command.Commands; import com.minelittlepony.unicopia.enchanting.Pages; import com.minelittlepony.unicopia.enchanting.recipe.AffineIngredients; @@ -48,7 +48,7 @@ public class UnicopiaCore implements ModInitializer { UItems.bootstrap(); UContainers.bootstrap(); UStructures.bootstrap(); - PowersRegistry.instance().init(); + Abilities.getInstance().init(); ResourceManagerHelper.get(ResourceType.SERVER_DATA).registerReloadListener(Pages.instance()); ResourceManagerHelper.get(ResourceType.SERVER_DATA).registerReloadListener(AffineIngredients.instance()); diff --git a/src/main/java/com/minelittlepony/unicopia/ability/Abilities.java b/src/main/java/com/minelittlepony/unicopia/ability/Abilities.java new file mode 100644 index 00000000..0e02eee0 --- /dev/null +++ b/src/main/java/com/minelittlepony/unicopia/ability/Abilities.java @@ -0,0 +1,65 @@ +package com.minelittlepony.unicopia.ability; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Optional; + +import com.minelittlepony.unicopia.Race; + +public final class Abilities { + + private static final Abilities INSTANCE = new Abilities(); + + public static Abilities getInstance() { + return INSTANCE; + } + + private final Map>> keyToPowerMap = new HashMap<>(); + + private final Map> powerNamesMap = new HashMap<>(); + + private Abilities() { + } + + public void init() { + register(new UnicornTeleportAbility()); + register(new UnicornCastingAbility()); + register(new EarthPonyGrowAbility()); + register(new ChangelingFeedAbility()); + register(new PegasusCarryAbility()); + register(new PegasusCloudInteractionAbility()); + register(new ChangelingTrapAbility()); + register(new EarthPonyStompAbility()); + register(new ChangelingDisguiseAbility()); + } + + public boolean hasRegisteredPower(int keyCode) { + return keyToPowerMap.containsKey(keyCode); + } + + public Optional> getCapablePowerFromKey(int keyCode, Race race) { + return getKeyCodePool(keyCode).stream() + .filter(power -> power.canUse(race)) + .findFirst(); + } + + public Optional> getPowerFromName(String name) { + return Optional.ofNullable(powerNamesMap.get(name)); + } + + private List> getKeyCodePool(int keyCode) { + return keyToPowerMap.computeIfAbsent(keyCode, ArrayList::new); + } + + public void register(Ability power) { + getKeyCodePool(power.getKeyCode()).add(power); + powerNamesMap.put(power.getKeyName(), power); + } + + public Collection> getValues() { + return powerNamesMap.values(); + } +} diff --git a/src/main/java/com/minelittlepony/unicopia/ability/IPower.java b/src/main/java/com/minelittlepony/unicopia/ability/Ability.java similarity index 69% rename from src/main/java/com/minelittlepony/unicopia/ability/IPower.java rename to src/main/java/com/minelittlepony/unicopia/ability/Ability.java index 05f1c5f7..0624379e 100644 --- a/src/main/java/com/minelittlepony/unicopia/ability/IPower.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/Ability.java @@ -2,13 +2,15 @@ package com.minelittlepony.unicopia.ability; import javax.annotation.Nullable; +import com.google.gson.annotations.Expose; import com.minelittlepony.unicopia.IKeyBinding; import com.minelittlepony.unicopia.Race; import com.minelittlepony.unicopia.entity.player.IPlayer; +import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; -public interface IPower extends IKeyBinding { +public interface Ability extends IKeyBinding { @Override default String getKeyCategory() { @@ -77,4 +79,44 @@ public interface IPower extends IKeyBinding { public interface IData { } + + class Pos implements Ability.IData { + @Expose + public int x; + + @Expose + public int y; + + @Expose + public int z; + + public Pos(int x, int y, int z) { + this.x = x; + this.y = y; + this.z = z; + } + + public Pos(BlockPos pos) { + x = pos.getX(); + y = pos.getY(); + z = pos.getZ(); + } + + public BlockPos pos() { + return new BlockPos(x, y, z); + } + } + + class Hit implements Ability.IData { + + } + + class Numeric implements IData { + @Expose + public int type; + + public Numeric(int t) { + type = t; + } + } } diff --git a/src/main/java/com/minelittlepony/unicopia/ability/AbilityReceiver.java b/src/main/java/com/minelittlepony/unicopia/ability/AbilityReceiver.java new file mode 100644 index 00000000..59842bdd --- /dev/null +++ b/src/main/java/com/minelittlepony/unicopia/ability/AbilityReceiver.java @@ -0,0 +1,12 @@ +package com.minelittlepony.unicopia.ability; + +import com.minelittlepony.unicopia.ability.Ability; + +public interface AbilityReceiver { + + void tryUseAbility(Ability power); + + void tryClearAbility(); + + int getRemainingCooldown(); +} diff --git a/src/main/java/com/minelittlepony/unicopia/ability/PowerDisguise.java b/src/main/java/com/minelittlepony/unicopia/ability/ChangelingDisguiseAbility.java similarity index 97% rename from src/main/java/com/minelittlepony/unicopia/ability/PowerDisguise.java rename to src/main/java/com/minelittlepony/unicopia/ability/ChangelingDisguiseAbility.java index 23d6fd34..b8e0234b 100644 --- a/src/main/java/com/minelittlepony/unicopia/ability/PowerDisguise.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/ChangelingDisguiseAbility.java @@ -28,7 +28,7 @@ import net.minecraft.util.math.BlockPos; /** * Changeling ability to disguise themselves as other players. */ -public class PowerDisguise extends PowerFeed { +public class ChangelingDisguiseAbility extends ChangelingFeedAbility { @Override public String getKeyName() { diff --git a/src/main/java/com/minelittlepony/unicopia/ability/PowerFeed.java b/src/main/java/com/minelittlepony/unicopia/ability/ChangelingFeedAbility.java similarity index 98% rename from src/main/java/com/minelittlepony/unicopia/ability/PowerFeed.java rename to src/main/java/com/minelittlepony/unicopia/ability/ChangelingFeedAbility.java index 0ad5375a..00b63148 100644 --- a/src/main/java/com/minelittlepony/unicopia/ability/PowerFeed.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/ChangelingFeedAbility.java @@ -28,7 +28,7 @@ import net.minecraft.particle.ParticleTypes; /** * Changeling ability to restore health from mobs */ -public class PowerFeed implements IPower { +public class ChangelingFeedAbility implements Ability { @Override public String getKeyName() { diff --git a/src/main/java/com/minelittlepony/unicopia/ability/PowerEngulf.java b/src/main/java/com/minelittlepony/unicopia/ability/ChangelingTrapAbility.java similarity index 94% rename from src/main/java/com/minelittlepony/unicopia/ability/PowerEngulf.java rename to src/main/java/com/minelittlepony/unicopia/ability/ChangelingTrapAbility.java index 1404eba5..df401c83 100644 --- a/src/main/java/com/minelittlepony/unicopia/ability/PowerEngulf.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/ChangelingTrapAbility.java @@ -8,7 +8,7 @@ import com.minelittlepony.unicopia.Race; import com.minelittlepony.unicopia.entity.player.IPlayer; import com.minelittlepony.unicopia.magic.spell.ChangelingTrapSpell; -public class PowerEngulf implements IPower { +public class ChangelingTrapAbility implements Ability { @Override public String getKeyName() { diff --git a/src/main/java/com/minelittlepony/unicopia/ability/PowerGrow.java b/src/main/java/com/minelittlepony/unicopia/ability/EarthPonyGrowAbility.java similarity index 88% rename from src/main/java/com/minelittlepony/unicopia/ability/PowerGrow.java rename to src/main/java/com/minelittlepony/unicopia/ability/EarthPonyGrowAbility.java index b3efa376..3ac3a52a 100644 --- a/src/main/java/com/minelittlepony/unicopia/ability/PowerGrow.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/EarthPonyGrowAbility.java @@ -20,7 +20,7 @@ import net.minecraft.world.World; /** * Earth Pony ability to grow crops */ -public class PowerGrow implements IPower { +public class EarthPonyGrowAbility implements Ability { @Override public String getKeyName() { @@ -48,23 +48,23 @@ public class PowerGrow implements IPower { } @Override - public Location tryActivate(IPlayer player) { + public Pos tryActivate(IPlayer player) { HitResult ray = VecHelper.getObjectMouseOver(player.getOwner(), 3, 1); if (ray instanceof BlockHitResult && ray.getType() == HitResult.Type.BLOCK) { - return new Location(((BlockHitResult)ray).getBlockPos()); + return new Pos(((BlockHitResult)ray).getBlockPos()); } return null; } @Override - public Class getPackageType() { - return Location.class; + public Class getPackageType() { + return Pos.class; } @Override - public void apply(IPlayer player, Location data) { + public void apply(IPlayer player, Pos data) { int count = 0; for (BlockPos pos : BlockPos.iterate( diff --git a/src/main/java/com/minelittlepony/unicopia/ability/PowerStomp.java b/src/main/java/com/minelittlepony/unicopia/ability/EarthPonyStompAbility.java similarity index 98% rename from src/main/java/com/minelittlepony/unicopia/ability/PowerStomp.java rename to src/main/java/com/minelittlepony/unicopia/ability/EarthPonyStompAbility.java index 1c839e4b..234dd74b 100644 --- a/src/main/java/com/minelittlepony/unicopia/ability/PowerStomp.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/EarthPonyStompAbility.java @@ -43,7 +43,7 @@ import net.minecraft.world.World; /** * Earth Pony stomping ability */ -public class PowerStomp implements IPower { +public class EarthPonyStompAbility implements Ability { private final double rad = 4; @@ -78,7 +78,7 @@ public class PowerStomp implements IPower { } @Override - public PowerStomp.Data tryActivate(IPlayer player) { + public EarthPonyStompAbility.Data tryActivate(IPlayer player) { HitResult mop = VecHelper.getObjectMouseOver(player.getOwner(), 6, 1); if (mop instanceof BlockHitResult && mop.getType() == HitResult.Type.BLOCK) { @@ -101,8 +101,8 @@ public class PowerStomp implements IPower { } @Override - public Class getPackageType() { - return PowerStomp.Data.class; + public Class getPackageType() { + return EarthPonyStompAbility.Data.class; } public static BlockPos getSolidBlockBelow(BlockPos pos, World w) { @@ -472,7 +472,7 @@ public class PowerStomp implements IPower { return null; } - protected static class Data extends Location { + protected static class Data extends Ability.Pos { @Expose public int hitType; diff --git a/src/main/java/com/minelittlepony/unicopia/ability/IFlyingPredicate.java b/src/main/java/com/minelittlepony/unicopia/ability/FlightPredicate.java similarity index 87% rename from src/main/java/com/minelittlepony/unicopia/ability/IFlyingPredicate.java rename to src/main/java/com/minelittlepony/unicopia/ability/FlightPredicate.java index 3830f07c..6a7b5416 100644 --- a/src/main/java/com/minelittlepony/unicopia/ability/IFlyingPredicate.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/FlightPredicate.java @@ -7,6 +7,6 @@ import com.minelittlepony.unicopia.entity.player.IPlayer; * * This overrides what the race specifies. */ -public interface IFlyingPredicate { +public interface FlightPredicate { boolean checkCanFly(IPlayer player); } \ No newline at end of file diff --git a/src/main/java/com/minelittlepony/unicopia/ability/IHeightPredicate.java b/src/main/java/com/minelittlepony/unicopia/ability/HeightPredicate.java similarity index 89% rename from src/main/java/com/minelittlepony/unicopia/ability/IHeightPredicate.java rename to src/main/java/com/minelittlepony/unicopia/ability/HeightPredicate.java index 25a46daf..b27650b7 100644 --- a/src/main/java/com/minelittlepony/unicopia/ability/IHeightPredicate.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/HeightPredicate.java @@ -7,7 +7,7 @@ import com.minelittlepony.unicopia.entity.player.IPlayer; * * This overrides the default. */ -public interface IHeightPredicate { +public interface HeightPredicate { float getTargetEyeHeight(IPlayer player); float getTargetBodyHeight(IPlayer player); diff --git a/src/main/java/com/minelittlepony/unicopia/ability/Hit.java b/src/main/java/com/minelittlepony/unicopia/ability/Hit.java deleted file mode 100644 index b4494755..00000000 --- a/src/main/java/com/minelittlepony/unicopia/ability/Hit.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.minelittlepony.unicopia.ability; - -public class Hit implements IPower.IData { - -} diff --git a/src/main/java/com/minelittlepony/unicopia/ability/IAbilityReceiver.java b/src/main/java/com/minelittlepony/unicopia/ability/IAbilityReceiver.java deleted file mode 100644 index cf98e25b..00000000 --- a/src/main/java/com/minelittlepony/unicopia/ability/IAbilityReceiver.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.minelittlepony.unicopia.ability; - -import com.minelittlepony.unicopia.ability.IPower; - -public interface IAbilityReceiver { - - void tryUseAbility(IPower power); - - void tryClearAbility(); - - int getRemainingCooldown(); -} diff --git a/src/main/java/com/minelittlepony/unicopia/ability/Location.java b/src/main/java/com/minelittlepony/unicopia/ability/Location.java deleted file mode 100644 index 6c664598..00000000 --- a/src/main/java/com/minelittlepony/unicopia/ability/Location.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.minelittlepony.unicopia.ability; - -import com.google.gson.annotations.Expose; - -import net.minecraft.util.math.BlockPos; - -public class Location implements IPower.IData { - - @Expose - public int x; - - @Expose - public int y; - - @Expose - public int z; - - public Location(int x, int y, int z) { - this.x = x; - this.y = y; - this.z = z; - } - - public Location(BlockPos pos) { - x = pos.getX(); - y = pos.getY(); - z = pos.getZ(); - } - - public BlockPos pos() { - return new BlockPos(x, y, z); - } -} diff --git a/src/main/java/com/minelittlepony/unicopia/ability/Numeric.java b/src/main/java/com/minelittlepony/unicopia/ability/Numeric.java deleted file mode 100644 index edab9c96..00000000 --- a/src/main/java/com/minelittlepony/unicopia/ability/Numeric.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.minelittlepony.unicopia.ability; - -import com.google.gson.annotations.Expose; - -public class Numeric implements IPower.IData { - - @Expose - public int type; - - public Numeric(int t) { - type = t; - } -} diff --git a/src/main/java/com/minelittlepony/unicopia/ability/PowerCarry.java b/src/main/java/com/minelittlepony/unicopia/ability/PegasusCarryAbility.java similarity index 97% rename from src/main/java/com/minelittlepony/unicopia/ability/PowerCarry.java rename to src/main/java/com/minelittlepony/unicopia/ability/PegasusCarryAbility.java index 8e50cf27..fd1b9373 100644 --- a/src/main/java/com/minelittlepony/unicopia/ability/PowerCarry.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/PegasusCarryAbility.java @@ -16,7 +16,7 @@ import net.minecraft.world.World; /** * Pegasi ability to pick up and carry other players */ -public class PowerCarry implements IPower { +public class PegasusCarryAbility implements Ability { @Override public String getKeyName() { diff --git a/src/main/java/com/minelittlepony/unicopia/ability/PowerCloudBase.java b/src/main/java/com/minelittlepony/unicopia/ability/PegasusCloudInteractionAbility.java similarity index 96% rename from src/main/java/com/minelittlepony/unicopia/ability/PowerCloudBase.java rename to src/main/java/com/minelittlepony/unicopia/ability/PegasusCloudInteractionAbility.java index 0fb18bf1..b7ad95ac 100644 --- a/src/main/java/com/minelittlepony/unicopia/ability/PowerCloudBase.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/PegasusCloudInteractionAbility.java @@ -11,7 +11,7 @@ import com.minelittlepony.unicopia.util.VecHelper; import net.minecraft.entity.Entity; -public class PowerCloudBase implements IPower { +public class PegasusCloudInteractionAbility implements Ability { @Override public String getKeyName() { diff --git a/src/main/java/com/minelittlepony/unicopia/ability/PowersRegistry.java b/src/main/java/com/minelittlepony/unicopia/ability/PowersRegistry.java deleted file mode 100644 index 8a700c63..00000000 --- a/src/main/java/com/minelittlepony/unicopia/ability/PowersRegistry.java +++ /dev/null @@ -1,65 +0,0 @@ -package com.minelittlepony.unicopia.ability; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Optional; - -import com.minelittlepony.unicopia.Race; - -public class PowersRegistry { - - private static final PowersRegistry INSTANCE = new PowersRegistry(); - - public static PowersRegistry instance() { - return INSTANCE; - } - - private final Map>> keyToPowerMap = new HashMap<>(); - - private final Map> powerNamesMap = new HashMap<>(); - - private PowersRegistry() { - } - - public void init() { - register(new PowerTeleport()); - register(new PowerMagic()); - register(new PowerGrow()); - register(new PowerFeed()); - register(new PowerCarry()); - register(new PowerCloudBase()); - register(new PowerEngulf()); - register(new PowerStomp()); - register(new PowerDisguise()); - } - - public boolean hasRegisteredPower(int keyCode) { - return keyToPowerMap.containsKey(keyCode); - } - - public Optional> getCapablePowerFromKey(int keyCode, Race race) { - return getKeyCodePool(keyCode).stream() - .filter(power -> power.canUse(race)) - .findFirst(); - } - - public Optional> getPowerFromName(String name) { - return Optional.ofNullable(powerNamesMap.get(name)); - } - - private List> getKeyCodePool(int keyCode) { - return keyToPowerMap.computeIfAbsent(keyCode, ArrayList::new); - } - - public void register(IPower power) { - getKeyCodePool(power.getKeyCode()).add(power); - powerNamesMap.put(power.getKeyName(), power); - } - - public Collection> getValues() { - return powerNamesMap.values(); - } -} diff --git a/src/main/java/com/minelittlepony/unicopia/ability/PowerMagic.java b/src/main/java/com/minelittlepony/unicopia/ability/UnicornCastingAbility.java similarity index 95% rename from src/main/java/com/minelittlepony/unicopia/ability/PowerMagic.java rename to src/main/java/com/minelittlepony/unicopia/ability/UnicornCastingAbility.java index e3c69dc2..9b92ff71 100644 --- a/src/main/java/com/minelittlepony/unicopia/ability/PowerMagic.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/UnicornCastingAbility.java @@ -11,7 +11,7 @@ import com.minelittlepony.unicopia.magic.spell.ShieldSpell; * A magic casting ability for unicorns. * (only shields for now) */ -public class PowerMagic implements IPower { +public class UnicornCastingAbility implements Ability { @Override public String getKeyName() { diff --git a/src/main/java/com/minelittlepony/unicopia/ability/PowerTeleport.java b/src/main/java/com/minelittlepony/unicopia/ability/UnicornTeleportAbility.java similarity index 94% rename from src/main/java/com/minelittlepony/unicopia/ability/PowerTeleport.java rename to src/main/java/com/minelittlepony/unicopia/ability/UnicornTeleportAbility.java index e8cc6da9..3c4ae930 100644 --- a/src/main/java/com/minelittlepony/unicopia/ability/PowerTeleport.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/UnicornTeleportAbility.java @@ -27,7 +27,7 @@ import net.minecraft.world.World; /** * Unicorn teleport ability */ -public class PowerTeleport implements IPower { +public class UnicornTeleportAbility implements Ability { @Override public String getKeyName() { @@ -55,7 +55,7 @@ public class PowerTeleport implements IPower { } @Override - public Location tryActivate(IPlayer player) { + public Pos tryActivate(IPlayer player) { HitResult ray = VecHelper.getObjectMouseOver(player.getOwner(), 100, 1); World w = player.getWorld(); @@ -104,18 +104,18 @@ public class PowerTeleport implements IPower { return null; } - return new Location(pos.getX(), pos.getY(), pos.getZ()); + return new Pos(pos.getX(), pos.getY(), pos.getZ()); } @Override - public Class getPackageType() { - return Location.class; + public Class getPackageType() { + return Pos.class; } @Override - public void apply(IPlayer iplayer, Location data) { + public void apply(IPlayer iplayer, Pos data) { iplayer.getWorld().playSound(null, iplayer.getOrigin(), SoundEvents.ENTITY_ITEM_PICKUP, SoundCategory.PLAYERS, 1, 1); PlayerEntity player = iplayer.getOwner(); diff --git a/src/main/java/com/minelittlepony/unicopia/client/KeyBindingsHandler.java b/src/main/java/com/minelittlepony/unicopia/client/KeyBindingsHandler.java index bfbd0e29..3f550483 100644 --- a/src/main/java/com/minelittlepony/unicopia/client/KeyBindingsHandler.java +++ b/src/main/java/com/minelittlepony/unicopia/client/KeyBindingsHandler.java @@ -6,7 +6,7 @@ import java.util.Set; import com.minelittlepony.unicopia.IKeyBinding; import com.minelittlepony.unicopia.SpeciesList; import com.minelittlepony.unicopia.UnicopiaCore; -import com.minelittlepony.unicopia.ability.PowersRegistry; +import com.minelittlepony.unicopia.ability.Abilities; import com.minelittlepony.unicopia.entity.player.IPlayer; import net.fabricmc.fabric.api.client.keybinding.FabricKeyBinding; @@ -45,11 +45,11 @@ class KeyBindingsHandler { if (i.isPressed()) { if (pressed.add(i)) { - if (!PowersRegistry.instance().hasRegisteredPower(i.getDefaultKeyCode().getKeyCode())) { + if (!Abilities.getInstance().hasRegisteredPower(i.getDefaultKeyCode().getKeyCode())) { removed.add(i); System.out.println("Error: Keybinding(" + i.getLocalizedName() + ") does not have a registered pony power. Keybinding will be removed from event."); } else { - PowersRegistry.instance() + Abilities.getInstance() .getCapablePowerFromKey(i.getDefaultKeyCode().getKeyCode(), iplayer.getSpecies()) .ifPresent(iplayer.getAbilities()::tryUseAbility); } diff --git a/src/main/java/com/minelittlepony/unicopia/client/UnicopiaCoreClient.java b/src/main/java/com/minelittlepony/unicopia/client/UnicopiaCoreClient.java index 5bbbe6be..b06e15cd 100644 --- a/src/main/java/com/minelittlepony/unicopia/client/UnicopiaCoreClient.java +++ b/src/main/java/com/minelittlepony/unicopia/client/UnicopiaCoreClient.java @@ -13,7 +13,7 @@ import com.minelittlepony.unicopia.Race; import com.minelittlepony.unicopia.SpeciesList; import com.minelittlepony.unicopia.UBlocks; import com.minelittlepony.unicopia.UnicopiaCore; -import com.minelittlepony.unicopia.ability.PowersRegistry; +import com.minelittlepony.unicopia.ability.Abilities; import com.minelittlepony.unicopia.client.render.DisguiseRenderer; import com.minelittlepony.unicopia.ducks.Colourful; import com.minelittlepony.unicopia.entity.player.IPlayer; @@ -143,7 +143,7 @@ public class UnicopiaCoreClient extends InteractionManager implements ClientModI ClientTickCallback.EVENT.register(this::tick); ClientReadyCallback.EVENT.register(client -> { - PowersRegistry.instance().getValues().forEach(keyboard::addKeybind); + Abilities.getInstance().getValues().forEach(keyboard::addKeybind); }); //BuildInTexturesBakery.getBuiltInTextures().add(new Identifier(Unicopia.MODID, "items/empty_slot_gem")); diff --git a/src/main/java/com/minelittlepony/unicopia/entity/CloudEntity.java b/src/main/java/com/minelittlepony/unicopia/entity/CloudEntity.java index f031924c..d80a17d0 100644 --- a/src/main/java/com/minelittlepony/unicopia/entity/CloudEntity.java +++ b/src/main/java/com/minelittlepony/unicopia/entity/CloudEntity.java @@ -9,7 +9,7 @@ import com.minelittlepony.unicopia.Race; import com.minelittlepony.unicopia.SpeciesList; import com.minelittlepony.unicopia.UBlocks; import com.minelittlepony.unicopia.UParticles; -import com.minelittlepony.unicopia.ability.PowerCloudBase.ICloudEntity; +import com.minelittlepony.unicopia.ability.PegasusCloudInteractionAbility.ICloudEntity; import com.minelittlepony.unicopia.item.UItems; import com.minelittlepony.unicopia.util.particles.ParticleEmitter; diff --git a/src/main/java/com/minelittlepony/unicopia/entity/player/AbilityDelegate.java b/src/main/java/com/minelittlepony/unicopia/entity/player/AbilityDelegate.java index 19387e0a..3fec004e 100644 --- a/src/main/java/com/minelittlepony/unicopia/entity/player/AbilityDelegate.java +++ b/src/main/java/com/minelittlepony/unicopia/entity/player/AbilityDelegate.java @@ -5,16 +5,16 @@ import javax.annotation.Nullable; import com.minelittlepony.jumpingcastle.api.Target; import com.minelittlepony.unicopia.UnicopiaCore; -import com.minelittlepony.unicopia.ability.IAbilityReceiver; -import com.minelittlepony.unicopia.ability.IPower; -import com.minelittlepony.unicopia.ability.PowersRegistry; +import com.minelittlepony.unicopia.ability.AbilityReceiver; +import com.minelittlepony.unicopia.ability.Ability; +import com.minelittlepony.unicopia.ability.Abilities; import com.minelittlepony.unicopia.entity.Updatable; import com.minelittlepony.unicopia.network.MsgPlayerAbility; import com.minelittlepony.unicopia.util.InbtSerialisable; import net.minecraft.nbt.CompoundTag; -class AbilityDelegate implements IAbilityReceiver, Updatable, InbtSerialisable { +class AbilityDelegate implements AbilityReceiver, Updatable, InbtSerialisable { private final IPlayer player; @@ -34,7 +34,7 @@ class AbilityDelegate implements IAbilityReceiver, Updatable, InbtSerialisable { private boolean triggered; @Nullable - private IPower activeAbility = null; + private Ability activeAbility = null; public AbilityDelegate(IPlayer player) { this.player = player; @@ -48,7 +48,7 @@ class AbilityDelegate implements IAbilityReceiver, Updatable, InbtSerialisable { } @Override - public void tryUseAbility(IPower power) { + public void tryUseAbility(Ability power) { if (canSwitchStates()) { setAbility(power); } @@ -61,7 +61,7 @@ class AbilityDelegate implements IAbilityReceiver, Updatable, InbtSerialisable { } } - protected synchronized void setAbility(@Nullable IPower power) { + protected synchronized void setAbility(@Nullable Ability power) { if (activeAbility != power) { triggered = false; activeAbility = power; @@ -71,7 +71,7 @@ class AbilityDelegate implements IAbilityReceiver, Updatable, InbtSerialisable { } @Nullable - protected synchronized IPower getUsableAbility() { + protected synchronized Ability getUsableAbility() { if (!(activeAbility == null || (triggered && warmup == 0 && cooldown == 0)) && activeAbility.canUse(player.getSpecies())) { return activeAbility; } @@ -85,7 +85,7 @@ class AbilityDelegate implements IAbilityReceiver, Updatable, InbtSerialisable { @Override public void onUpdate() { - IPower ability = getUsableAbility(); + Ability ability = getUsableAbility(); if (ability == null) { return; @@ -129,7 +129,7 @@ class AbilityDelegate implements IAbilityReceiver, Updatable, InbtSerialisable { compound.putInt("warmup", warmup); compound.putInt("cooldown", cooldown); - IPower ability = getUsableAbility(); + Ability ability = getUsableAbility(); if (ability != null) { compound.putString("activeAbility", ability.getKeyName()); @@ -145,7 +145,7 @@ class AbilityDelegate implements IAbilityReceiver, Updatable, InbtSerialisable { cooldown = compound.getInt("cooldown"); if (compound.containsKey("activeAbility")) { - PowersRegistry.instance() + Abilities.getInstance() .getPowerFromName(compound.getString("activeAbility")) .ifPresent(p -> activeAbility = p); } @@ -155,8 +155,8 @@ class AbilityDelegate implements IAbilityReceiver, Updatable, InbtSerialisable { * Attempts to activate the current stored ability. * Returns true if the ability suceeded, otherwise false. */ - protected boolean activateAbility(@Nonnull IPower ability) { - IPower.IData data = ability.tryActivate(player); + protected boolean activateAbility(@Nonnull Ability ability) { + Ability.IData data = ability.tryActivate(player); if (data != null) { UnicopiaCore.getConnection().send(new MsgPlayerAbility(player.getOwner(), ability, data), Target.SERVER); diff --git a/src/main/java/com/minelittlepony/unicopia/entity/player/GravityDelegate.java b/src/main/java/com/minelittlepony/unicopia/entity/player/GravityDelegate.java index 6519b630..2848a2b4 100644 --- a/src/main/java/com/minelittlepony/unicopia/entity/player/GravityDelegate.java +++ b/src/main/java/com/minelittlepony/unicopia/entity/player/GravityDelegate.java @@ -5,8 +5,8 @@ import java.util.Random; import com.minelittlepony.unicopia.Race; import com.minelittlepony.unicopia.UParticles; import com.minelittlepony.unicopia.USounds; -import com.minelittlepony.unicopia.ability.IFlyingPredicate; -import com.minelittlepony.unicopia.ability.IHeightPredicate; +import com.minelittlepony.unicopia.ability.FlightPredicate; +import com.minelittlepony.unicopia.ability.HeightPredicate; import com.minelittlepony.unicopia.entity.FlightControl; import com.minelittlepony.unicopia.entity.Updatable; import com.minelittlepony.unicopia.magic.IMagicEffect; @@ -24,7 +24,7 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.MathHelper; import net.minecraft.util.math.Vec3d; -public class GravityDelegate implements Updatable, FlightControl, InbtSerialisable, IFlyingPredicate, IHeightPredicate { +public class GravityDelegate implements Updatable, FlightControl, InbtSerialisable, FlightPredicate, HeightPredicate { private final IPlayer player; @@ -53,8 +53,8 @@ public class GravityDelegate implements Updatable, FlightControl, InbtSerialisab if (player.hasEffect()) { IMagicEffect effect = player.getEffect(); - if (!effect.isDead() && effect instanceof IFlyingPredicate) { - return ((IFlyingPredicate)effect).checkCanFly(player); + if (!effect.isDead() && effect instanceof FlightPredicate) { + return ((FlightPredicate)effect).checkCanFly(player); } } @@ -69,8 +69,8 @@ public class GravityDelegate implements Updatable, FlightControl, InbtSerialisab public float getTargetEyeHeight(IPlayer player) { if (player.hasEffect()) { IMagicEffect effect = player.getEffect(); - if (!effect.isDead() && effect instanceof IHeightPredicate) { - float val = ((IHeightPredicate)effect).getTargetEyeHeight(player); + if (!effect.isDead() && effect instanceof HeightPredicate) { + float val = ((HeightPredicate)effect).getTargetEyeHeight(player); if (val > 0) { return val; } @@ -88,8 +88,8 @@ public class GravityDelegate implements Updatable, FlightControl, InbtSerialisab public float getTargetBodyHeight(IPlayer player) { if (player.hasEffect()) { IMagicEffect effect = player.getEffect(); - if (!effect.isDead() && effect instanceof IHeightPredicate) { - float val = ((IHeightPredicate)effect).getTargetBodyHeight(player); + if (!effect.isDead() && effect instanceof HeightPredicate) { + float val = ((HeightPredicate)effect).getTargetBodyHeight(player); if (val > 0) { return val; } diff --git a/src/main/java/com/minelittlepony/unicopia/entity/player/IPlayer.java b/src/main/java/com/minelittlepony/unicopia/entity/player/IPlayer.java index 5e37aa07..a5e59fd6 100644 --- a/src/main/java/com/minelittlepony/unicopia/entity/player/IPlayer.java +++ b/src/main/java/com/minelittlepony/unicopia/entity/player/IPlayer.java @@ -3,7 +3,7 @@ package com.minelittlepony.unicopia.entity.player; import javax.annotation.Nullable; import com.minelittlepony.unicopia.InteractionManager; -import com.minelittlepony.unicopia.ability.IAbilityReceiver; +import com.minelittlepony.unicopia.ability.AbilityReceiver; import com.minelittlepony.unicopia.enchanting.IPageOwner; import com.minelittlepony.unicopia.entity.FlightControl; import com.minelittlepony.unicopia.entity.RaceContainer; @@ -29,7 +29,7 @@ public interface IPlayer extends ICaster, RaceContainer power, IPower.IData data) { + public MsgPlayerAbility(PlayerEntity player, Ability power, Ability.IData data) { senderId = player.getUuid(); powerIdentifier = power.getKeyName(); abilityJson = gson.toJson(data, power.getPackageType()); } - private void apply(IPower power, Channel channel) { + private void apply(Ability power, Channel channel) { MinecraftServer server = channel.getServer(); IPlayer player = SpeciesList.instance().getPlayer(server.getPlayerManager().getPlayer(senderId)); if (player == null) { @@ -50,6 +50,6 @@ public class MsgPlayerAbility implements Message, Message.Handler apply(power, channel)); + Abilities.getInstance().getPowerFromName(powerIdentifier).ifPresent(power -> apply(power, channel)); } }