forked from Upstream/mmocore
Combos now ignore unused keys
This commit is contained in:
parent
88d02f140f
commit
e784230ce7
@ -240,9 +240,8 @@ public class MMOCore extends JavaPlugin {
|
|||||||
|
|
||||||
// Skill casting
|
// Skill casting
|
||||||
try {
|
try {
|
||||||
SkillCastingMode mode = SkillCastingMode.valueOf(UtilityMethods.enumName(getConfig().getString("skill-casting.mode")));
|
final SkillCastingMode mode = SkillCastingMode.valueOf(UtilityMethods.enumName(getConfig().getString("skill-casting.mode")));
|
||||||
mode.setCurrent(getConfig().getConfigurationSection("skill-casting"));
|
mode.setCurrent(getConfig().getConfigurationSection("skill-casting"));
|
||||||
|
|
||||||
} catch (RuntimeException exception) {
|
} catch (RuntimeException exception) {
|
||||||
getLogger().log(Level.WARNING, "Could not load skill casting: " + exception.getMessage());
|
getLogger().log(Level.WARNING, "Could not load skill casting: " + exception.getMessage());
|
||||||
}
|
}
|
||||||
|
@ -3,6 +3,7 @@ package net.Indyuce.mmocore.skill.cast;
|
|||||||
import io.lumine.mythic.lib.UtilityMethods;
|
import io.lumine.mythic.lib.UtilityMethods;
|
||||||
import org.apache.commons.lang.Validate;
|
import org.apache.commons.lang.Validate;
|
||||||
import org.bukkit.configuration.ConfigurationSection;
|
import org.bukkit.configuration.ConfigurationSection;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
@ -20,7 +21,7 @@ public class ComboMap {
|
|||||||
/**
|
/**
|
||||||
* All the keys that are at the start of a combo.
|
* All the keys that are at the start of a combo.
|
||||||
*/
|
*/
|
||||||
private final Set<PlayerKey> firstKeys = new HashSet<>();
|
private final Set<PlayerKey> firstKeys = new HashSet<>(), keys = new HashSet<>();
|
||||||
|
|
||||||
private final int longestCombo;
|
private final int longestCombo;
|
||||||
|
|
||||||
@ -32,9 +33,12 @@ public class ComboMap {
|
|||||||
final int spellSlot = Integer.valueOf(key);
|
final int spellSlot = Integer.valueOf(key);
|
||||||
Validate.isTrue(spellSlot >= 0, "Spell slot must be at least 0");
|
Validate.isTrue(spellSlot >= 0, "Spell slot must be at least 0");
|
||||||
Validate.isTrue(!combos.values().contains(spellSlot), "There is already a key combo with the same skill slot");
|
Validate.isTrue(!combos.values().contains(spellSlot), "There is already a key combo with the same skill slot");
|
||||||
KeyCombo combo = new KeyCombo();
|
final KeyCombo combo = new KeyCombo();
|
||||||
for (String str : config.getStringList(key))
|
for (String str : config.getStringList(key)) {
|
||||||
combo.registerKey(PlayerKey.valueOf(UtilityMethods.enumName(str)));
|
final PlayerKey newKey = PlayerKey.valueOf(UtilityMethods.enumName(str));
|
||||||
|
keys.add(newKey);
|
||||||
|
combo.registerKey(newKey);
|
||||||
|
}
|
||||||
|
|
||||||
combos.put(combo, spellSlot);
|
combos.put(combo, spellSlot);
|
||||||
firstKeys.add(combo.getAt(0));
|
firstKeys.add(combo.getAt(0));
|
||||||
@ -46,6 +50,7 @@ public class ComboMap {
|
|||||||
this.longestCombo = currentLongestCombo;
|
this.longestCombo = currentLongestCombo;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
public Map<KeyCombo, Integer> getCombos() {
|
public Map<KeyCombo, Integer> getCombos() {
|
||||||
return combos;
|
return combos;
|
||||||
}
|
}
|
||||||
@ -54,6 +59,10 @@ public class ComboMap {
|
|||||||
return longestCombo;
|
return longestCombo;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isComboKey(PlayerKey key) {
|
||||||
|
return keys.contains(key);
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isComboStart(PlayerKey key) {
|
public boolean isComboStart(PlayerKey key) {
|
||||||
return firstKeys.contains(key);
|
return firstKeys.contains(key);
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
package net.Indyuce.mmocore.skill.cast;
|
package net.Indyuce.mmocore.skill.cast;
|
||||||
|
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
@ -17,7 +19,7 @@ public class KeyCombo {
|
|||||||
return keys.size();
|
return keys.size();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void registerKey(PlayerKey key) {
|
public void registerKey(@NotNull PlayerKey key) {
|
||||||
keys.add(key);
|
keys.add(key);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
package net.Indyuce.mmocore.skill.cast;
|
package net.Indyuce.mmocore.skill.cast;
|
||||||
|
|
||||||
import net.Indyuce.mmocore.MMOCore;
|
import net.Indyuce.mmocore.MMOCore;
|
||||||
import net.Indyuce.mmocore.skill.cast.listener.KeyCombos;
|
import net.Indyuce.mmocore.skill.cast.handler.KeyCombos;
|
||||||
import net.Indyuce.mmocore.skill.cast.listener.SkillBar;
|
import net.Indyuce.mmocore.skill.cast.handler.SkillBar;
|
||||||
import net.Indyuce.mmocore.skill.cast.listener.SkillCastingDisabled;
|
import net.Indyuce.mmocore.skill.cast.handler.SkillCastingDisabled;
|
||||||
import net.Indyuce.mmocore.skill.cast.listener.SkillScroller;
|
import net.Indyuce.mmocore.skill.cast.handler.SkillScroller;
|
||||||
import org.apache.commons.lang.Validate;
|
import org.apache.commons.lang.Validate;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.configuration.ConfigurationSection;
|
import org.bukkit.configuration.ConfigurationSection;
|
||||||
@ -74,9 +74,6 @@ public enum SkillCastingMode {
|
|||||||
public void setCurrent(@NotNull ConfigurationSection config) {
|
public void setCurrent(@NotNull ConfigurationSection config) {
|
||||||
Validate.isTrue(current == null, "Skill casting mode already initialized");
|
Validate.isTrue(current == null, "Skill casting mode already initialized");
|
||||||
current = listenerLoader.apply(config);
|
current = listenerLoader.apply(config);
|
||||||
if (this == NONE) return;
|
|
||||||
|
|
||||||
// Register listener
|
|
||||||
Bukkit.getPluginManager().registerEvents(current, MMOCore.plugin);
|
Bukkit.getPluginManager().registerEvents(current, MMOCore.plugin);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
package net.Indyuce.mmocore.skill.cast.listener;
|
package net.Indyuce.mmocore.skill.cast.handler;
|
||||||
|
|
||||||
import io.lumine.mythic.lib.UtilityMethods;
|
import io.lumine.mythic.lib.UtilityMethods;
|
||||||
import io.lumine.mythic.lib.api.event.skill.PlayerCastSkillEvent;
|
import io.lumine.mythic.lib.api.event.skill.PlayerCastSkillEvent;
|
||||||
@ -16,12 +16,13 @@ import org.bukkit.GameMode;
|
|||||||
import org.bukkit.configuration.ConfigurationSection;
|
import org.bukkit.configuration.ConfigurationSection;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
|
import org.bukkit.event.Listener;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
public class KeyCombos extends SkillCastingHandler {
|
public class KeyCombos extends SkillCastingHandler implements Listener {
|
||||||
private final ComboMap comboMap;
|
private final ComboMap comboMap;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -71,8 +72,7 @@ public class KeyCombos extends SkillCastingHandler {
|
|||||||
public void whenPressingKey(PlayerKeyPressEvent event) {
|
public void whenPressingKey(PlayerKeyPressEvent event) {
|
||||||
PlayerData playerData = event.getData();
|
PlayerData playerData = event.getData();
|
||||||
Player player = playerData.getPlayer();
|
Player player = playerData.getPlayer();
|
||||||
if (player.getGameMode() == GameMode.CREATIVE && !MMOCore.plugin.configManager.canCreativeCast)
|
if (player.getGameMode() == GameMode.CREATIVE && !MMOCore.plugin.configManager.canCreativeCast) return;
|
||||||
return;
|
|
||||||
|
|
||||||
// Don't start combos if no skills are bound
|
// Don't start combos if no skills are bound
|
||||||
if (playerData.getBoundSkills().isEmpty()) return;
|
if (playerData.getBoundSkills().isEmpty()) return;
|
||||||
@ -85,28 +85,27 @@ public class KeyCombos extends SkillCastingHandler {
|
|||||||
if (event.getPressed().shouldCancelEvent()) event.setCancelled(true);
|
if (event.getPressed().shouldCancelEvent()) event.setCancelled(true);
|
||||||
|
|
||||||
// Start combo
|
// Start combo
|
||||||
if (playerData.setSkillCasting() && beginComboSound != null)
|
if (playerData.setSkillCasting() && beginComboSound != null) beginComboSound.playTo(player);
|
||||||
beginComboSound.playTo(player);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nullable CustomSkillCastingInstance casting = null;
|
// Make sure key is part of the combo map
|
||||||
|
final ComboMap comboMap = Objects.requireNonNullElse(playerData.getProfess().getComboMap(), this.comboMap);
|
||||||
|
if (!comboMap.isComboKey(event.getPressed())) return;
|
||||||
|
|
||||||
// Player is already casting
|
// Player already casting
|
||||||
|
final CustomSkillCastingInstance casting;
|
||||||
if (event.getData().isCasting()) casting = (CustomSkillCastingInstance) playerData.getSkillCasting();
|
if (event.getData().isCasting()) casting = (CustomSkillCastingInstance) playerData.getSkillCasting();
|
||||||
|
|
||||||
// Start combo when there is NO initializer key
|
// Start combo when there is NO initializer key
|
||||||
else {
|
else if (comboMap.isComboStart(event.getPressed()) && playerData.setSkillCasting()) {
|
||||||
final @NotNull ComboMap comboMap = Objects.requireNonNullElse(playerData.getProfess().getComboMap(), this.comboMap);
|
|
||||||
if (comboMap.isComboStart(event.getPressed()) && playerData.setSkillCasting()) {
|
|
||||||
casting = (CustomSkillCastingInstance) playerData.getSkillCasting();
|
casting = (CustomSkillCastingInstance) playerData.getSkillCasting();
|
||||||
if (beginComboSound != null) beginComboSound.playTo(player);
|
if (beginComboSound != null) beginComboSound.playTo(player);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (casting == null) return;
|
// Just return
|
||||||
|
else return;
|
||||||
|
|
||||||
// Adding pressed key
|
// Adding pressed key
|
||||||
casting.refreshTimeOut();
|
casting.refreshTimeOut();
|
||||||
@ -159,12 +158,7 @@ public class KeyCombos extends SkillCastingHandler {
|
|||||||
else getCaster().displayActionBar(actionBarOptions.format(this));
|
else getCaster().displayActionBar(actionBarOptions.format(this));
|
||||||
}
|
}
|
||||||
|
|
||||||
private static final List<TriggerType> IGNORED_WHEN_CASTING = Arrays.asList(
|
private static final List<TriggerType> IGNORED_WHEN_CASTING = Arrays.asList(TriggerType.RIGHT_CLICK, TriggerType.LEFT_CLICK, TriggerType.SHIFT_RIGHT_CLICK, TriggerType.SHIFT_LEFT_CLICK, TriggerType.SNEAK);
|
||||||
TriggerType.RIGHT_CLICK,
|
|
||||||
TriggerType.LEFT_CLICK,
|
|
||||||
TriggerType.SHIFT_RIGHT_CLICK,
|
|
||||||
TriggerType.SHIFT_LEFT_CLICK,
|
|
||||||
TriggerType.SNEAK);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This makes sure NO skills are cast when in casting mode so that
|
* This makes sure NO skills are cast when in casting mode so that
|
@ -1,4 +1,4 @@
|
|||||||
package net.Indyuce.mmocore.skill.cast.listener;
|
package net.Indyuce.mmocore.skill.cast.handler;
|
||||||
|
|
||||||
import io.lumine.mythic.lib.UtilityMethods;
|
import io.lumine.mythic.lib.UtilityMethods;
|
||||||
import io.lumine.mythic.lib.api.player.EquipmentSlot;
|
import io.lumine.mythic.lib.api.player.EquipmentSlot;
|
@ -1,4 +1,4 @@
|
|||||||
package net.Indyuce.mmocore.skill.cast.listener;
|
package net.Indyuce.mmocore.skill.cast.handler;
|
||||||
|
|
||||||
import net.Indyuce.mmocore.api.player.PlayerData;
|
import net.Indyuce.mmocore.api.player.PlayerData;
|
||||||
import net.Indyuce.mmocore.skill.cast.SkillCastingHandler;
|
import net.Indyuce.mmocore.skill.cast.SkillCastingHandler;
|
@ -1,4 +1,4 @@
|
|||||||
package net.Indyuce.mmocore.skill.cast.listener;
|
package net.Indyuce.mmocore.skill.cast.handler;
|
||||||
|
|
||||||
import io.lumine.mythic.lib.UtilityMethods;
|
import io.lumine.mythic.lib.UtilityMethods;
|
||||||
import io.lumine.mythic.lib.api.player.EquipmentSlot;
|
import io.lumine.mythic.lib.api.player.EquipmentSlot;
|
Loading…
Reference in New Issue
Block a user