Unicopia/src/main/java/com/minelittlepony/unicopia/ability/Abilities.java

38 lines
1.5 KiB
Java
Raw Normal View History

2020-04-15 17:22:29 +02:00
package com.minelittlepony.unicopia.ability;
2020-05-06 15:55:25 +02:00
import java.util.EnumMap;
import java.util.HashSet;
import java.util.Map;
2020-05-06 15:55:25 +02:00
import java.util.Set;
2020-04-15 17:22:29 +02:00
2020-06-26 11:44:47 +02:00
import com.minelittlepony.unicopia.util.Registries;
import net.minecraft.util.Identifier;
2020-06-26 11:44:47 +02:00
import net.minecraft.util.registry.Registry;
2020-04-15 17:22:29 +02:00
public interface Abilities {
2020-05-06 15:55:25 +02:00
Map<AbilitySlot, Set<Ability<?>>> BY_SLOT = new EnumMap<>(AbilitySlot.class);
2020-06-26 11:44:47 +02:00
Registry<Ability<?>> REGISTRY = Registries.createSimple(new Identifier("unicopia", "abilities"));
2020-04-15 17:22:29 +02:00
2020-04-25 15:46:29 +02:00
// unicorn / alicorn
Ability<?> CAST = register(new UnicornCastingAbility(), "cast", AbilitySlot.PRIMARY);
Ability<?> TELEPORT = register(new UnicornTeleportAbility(), "teleport", AbilitySlot.SECONDARY);
2020-04-15 17:22:29 +02:00
2020-04-25 15:46:29 +02:00
// earth / alicorn
2020-05-06 15:55:25 +02:00
Ability<?> STOMP = register(new EarthPonyStompAbility(), "stomp", AbilitySlot.PRIMARY);
Ability<?> GROW = register(new EarthPonyGrowAbility(), "grow", AbilitySlot.SECONDARY);
2020-04-15 17:22:29 +02:00
2020-04-25 15:46:29 +02:00
// pegasus / bat / alicorn / changeling
2020-05-06 15:55:25 +02:00
Ability<?> CARRY = register(new CarryAbility(), "carry", AbilitySlot.PASSIVE);
2020-04-25 15:46:29 +02:00
// changeling
2020-05-06 15:55:25 +02:00
Ability<?> DISGUISE = register(new ChangelingDisguiseAbility(), "disguise", AbilitySlot.PRIMARY);
Ability<?> FEED = register(new ChangelingFeedAbility(), "feed", AbilitySlot.SECONDARY);
2020-04-15 17:22:29 +02:00
2020-05-06 15:55:25 +02:00
static <T extends Ability<?>> T register(T power, String name, AbilitySlot slot) {
Identifier id = new Identifier("unicopia", name);
2020-05-06 15:55:25 +02:00
BY_SLOT.computeIfAbsent(slot, s -> new HashSet<>()).add(power);
2020-06-26 11:44:47 +02:00
return Registry.register(REGISTRY, id, power);
2020-04-15 17:22:29 +02:00
}
}