-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
21 changed files
with
942 additions
and
32 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
97 changes: 97 additions & 0 deletions
97
src/main/java/info/itsthesky/itemcreator/api/abilities/Ability.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,97 @@ | ||
package info.itsthesky.itemcreator.api.abilities; | ||
|
||
import com.cryptomorin.xseries.XMaterial; | ||
import de.leonhard.storage.Config; | ||
import info.itsthesky.itemcreator.ItemCreator; | ||
import info.itsthesky.itemcreator.api.ISnowflake; | ||
import info.itsthesky.itemcreator.api.cooldown.CooldownManager; | ||
import info.itsthesky.itemcreator.core.CustomItem; | ||
import info.itsthesky.itemcreator.core.GUIRepresentation; | ||
import info.itsthesky.itemcreator.core.langs.LangLoader; | ||
import org.bukkit.entity.Player; | ||
import org.bukkit.event.Event; | ||
import org.bukkit.event.Listener; | ||
import org.jetbrains.annotations.NotNull; | ||
import org.jetbrains.annotations.Nullable; | ||
|
||
import java.util.Arrays; | ||
import java.util.concurrent.TimeUnit; | ||
import java.util.stream.Stream; | ||
|
||
public abstract class Ability<E extends Event> implements Listener, ISnowflake { | ||
|
||
public void onGenericEvent(@NotNull E event) { | ||
if (!validate(event)) | ||
return; | ||
final Player player = getPlayer(event); | ||
final CustomItem item = getItem(event); | ||
if (item == null) | ||
return; | ||
if (ItemCreator.getCooldownManager().isOnCooldown(player.getUniqueId(), "ability_" + getId())) { | ||
player.sendMessage(LangLoader.get().format("messages.ability_on_cooldown", ItemCreator.getCooldownManager().getUserCooldown(player.getUniqueId(), "ability_" + getId()) / 20)); | ||
return; | ||
} | ||
ItemCreator.getCooldownManager().setUserCooldown(player.getUniqueId(), "ability_" + getId(), TimeUnit.SECONDS, getCooldown(item)); | ||
launch(event, item, Stream.of(item.getAbilities().get(getId())) | ||
.map(para -> new AbilityParameter(para.getParameter().parse(para.getValue().toString(), null), para.getParameter())).toArray(AbilityParameter[]::new)); | ||
}; | ||
|
||
public abstract @Nullable CustomItem getItem(E event); | ||
|
||
public abstract @NotNull Player getPlayer(E event); | ||
|
||
public abstract boolean validate(E event); | ||
|
||
public abstract XMaterial getMaterial(); | ||
|
||
public abstract @NotNull RawAbilityParameter<?>[] getParameters(); | ||
|
||
public abstract void launch(@NotNull E event, | ||
@Nullable CustomItem item, | ||
@NotNull AbilityParameter<?>[] parameters); | ||
|
||
public boolean hasCooldown() { | ||
return Arrays.stream(getParameters()).anyMatch(para -> para.getId().equals(DefaultParameters.ABILITY_COOLDOWN.getId())); | ||
} | ||
|
||
public @NotNull Integer getCooldown(final CustomItem item) { | ||
if (!hasCooldown()) | ||
return 0; | ||
return DefaultParameters.ABILITY_COOLDOWN.parse( | ||
Stream.of(item.getAbilityParameters(this)) | ||
.filter(para -> para.getParameter().getId().equals(DefaultParameters.ABILITY_COOLDOWN.getId())) | ||
.map(AbilityParameter::getValue) | ||
.findAny() | ||
.orElse("0") | ||
.toString(), null).intValue(); | ||
} | ||
|
||
public GUIRepresentation getRepresentation() { | ||
return new GUIRepresentation(getMaterial(), "abilities." + getId() + ".name", "abilities." + getId() + ".lore"); | ||
} | ||
|
||
public <T> AbilityParameter<T> getParameterValue(RawAbilityParameter<T> raw, CustomItem item) { | ||
final Config config = ItemCreator.getInstance().getApi().getItemConfig(item); | ||
final T value = config.getOrSetDefault("abilities." + getId() + "." + raw.getId(), raw.getDefaultValue()); | ||
return new AbilityParameter<>(value, raw); | ||
} | ||
|
||
public static class AbilityParameter<T> { | ||
|
||
private final T value; | ||
private final RawAbilityParameter<T> parameter; | ||
|
||
public AbilityParameter(T value, RawAbilityParameter<T> parameter) { | ||
this.value = value; | ||
this.parameter = parameter; | ||
} | ||
|
||
public T getValue() { | ||
return value; | ||
} | ||
|
||
public RawAbilityParameter<T> getParameter() { | ||
return parameter; | ||
} | ||
} | ||
} |
30 changes: 30 additions & 0 deletions
30
src/main/java/info/itsthesky/itemcreator/api/abilities/DefaultParameters.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,30 @@ | ||
package info.itsthesky.itemcreator.api.abilities; | ||
|
||
import com.cryptomorin.xseries.XMaterial; | ||
import info.itsthesky.itemcreator.core.ParameterImpl; | ||
import info.itsthesky.itemcreator.core.langs.LangLoader; | ||
import org.bukkit.entity.Player; | ||
|
||
import java.util.Random; | ||
import java.util.function.BiFunction; | ||
|
||
/** | ||
* List of default ability parameters | ||
*/ | ||
public final class DefaultParameters { | ||
|
||
private static final BiFunction<String, Player, Integer> INTEGER_PARSER = (input, player) -> { | ||
try { | ||
return Integer.parseInt(input); | ||
} catch (Exception ex) { | ||
player.sendMessage(LangLoader.get().format("messages.wrong_number")); | ||
return null; | ||
} | ||
}; | ||
|
||
public static final RawAbilityParameter<Integer> ABILITY_FORCE = | ||
new ParameterImpl<>("ability_force", XMaterial.GOLDEN_SWORD, 2, INTEGER_PARSER); | ||
public static final RawAbilityParameter<Integer> ABILITY_COOLDOWN = | ||
new ParameterImpl<>("ability_cooldown", XMaterial.CLOCK, 0, INTEGER_PARSER); | ||
|
||
} |
24 changes: 24 additions & 0 deletions
24
src/main/java/info/itsthesky/itemcreator/api/abilities/RawAbilityParameter.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,24 @@ | ||
package info.itsthesky.itemcreator.api.abilities; | ||
|
||
import com.cryptomorin.xseries.XMaterial; | ||
import info.itsthesky.itemcreator.api.ISnowflake; | ||
import info.itsthesky.itemcreator.core.GUIRepresentation; | ||
import org.bukkit.entity.Player; | ||
import org.jetbrains.annotations.NotNull; | ||
import org.jetbrains.annotations.Nullable; | ||
|
||
public interface RawAbilityParameter<T> extends ISnowflake { | ||
|
||
XMaterial getMaterial(); | ||
|
||
default GUIRepresentation getRepresentation() { | ||
return new GUIRepresentation(getMaterial(), | ||
"abilities.parameters." + getId() + "name", | ||
"abilities.parameters." + getId() + "lore"); | ||
} | ||
|
||
T getDefaultValue(); | ||
|
||
T parse(@NotNull String input, @Nullable Player player); | ||
|
||
} |
36 changes: 36 additions & 0 deletions
36
src/main/java/info/itsthesky/itemcreator/api/abilities/RightClickAbility.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,36 @@ | ||
package info.itsthesky.itemcreator.api.abilities; | ||
|
||
import info.itsthesky.itemcreator.ItemCreator; | ||
import info.itsthesky.itemcreator.core.CustomItem; | ||
import org.bukkit.Material; | ||
import org.bukkit.event.EventHandler; | ||
import org.bukkit.event.EventPriority; | ||
import org.bukkit.event.block.Action; | ||
import org.bukkit.event.player.PlayerInteractEvent; | ||
import org.bukkit.inventory.ItemStack; | ||
import org.jetbrains.annotations.NotNull; | ||
import org.jetbrains.annotations.Nullable; | ||
|
||
public abstract class RightClickAbility extends Ability<PlayerInteractEvent> { | ||
|
||
// Check https://spigotmc.org/threads/204644/ | ||
@EventHandler(priority = EventPriority.HIGHEST) | ||
public void onEvent(@NotNull PlayerInteractEvent event) { | ||
onGenericEvent(event); | ||
} | ||
|
||
@Override | ||
public @Nullable CustomItem getItem(PlayerInteractEvent event) { | ||
final ItemStack stack = event.getItem(); | ||
if (stack == null || stack.getType().equals(Material.AIR)) | ||
return null; | ||
return ItemCreator.getInstance().getApi().convert(stack); | ||
} | ||
|
||
@Override | ||
public boolean validate(PlayerInteractEvent event) { | ||
return event.getAction().equals(Action.RIGHT_CLICK_AIR) | ||
|| event.getAction().equals(Action.RIGHT_CLICK_BLOCK); | ||
} | ||
|
||
} |
Oops, something went wrong.