mirror of
https://github.com/KAMKEEL/CustomNPC-Plus.git
synced 2026-11-12 23:37:32 +00:00
Effect Command
This commit is contained in:
1 parent
3f91be9498
commit
c2c101641f
2 files changed
+229
-101
No files matched your search
@@ -35,6 +35,7 @@ public class CommandKamkeel extends CommandBase{
|
||||
registerCommand(new AnimationCommand());
|
||||
registerCommand(new OverlayCommand());
|
||||
registerCommand(new CommandCommand());
|
||||
registerCommand(new EffectCommand());
|
||||
}
|
||||
|
||||
public void registerCommand(CommandKamkeelBase command){
|
||||
|
||||
@@ -3,12 +3,15 @@ package kamkeel.npcs.command;
|
||||
import net.minecraft.command.CommandException;
|
||||
import net.minecraft.command.ICommandSender;
|
||||
import noppes.npcs.controllers.PlayerDataController;
|
||||
import noppes.npcs.controllers.CustomEffectController;
|
||||
import noppes.npcs.controllers.data.CustomEffect;
|
||||
import noppes.npcs.controllers.data.PlayerData;
|
||||
import noppes.npcs.scripted.event.PlayerEvent.EffectEvent.ExpirationType;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
public class EffectCommand extends CommandKamkeelBase {
|
||||
|
||||
@@ -22,118 +25,242 @@ public class EffectCommand extends CommandKamkeelBase {
|
||||
return "effect";
|
||||
}
|
||||
|
||||
// info all
|
||||
@SubCommand(desc = "Lists all effects")
|
||||
@SubCommand(desc = "Lists all Effects")
|
||||
public void infoAll(ICommandSender sender, String[] args) throws CommandException {
|
||||
// TODO: FIX EFFECT COMMAND
|
||||
// Set<Map.Entry<Integer, StatusEffect>> effects = DBCEffectController.getInstance().standardEffects.entrySet();
|
||||
// Set<Map.Entry<Integer, CustomEffect>> customEffects = DBCEffectController.getInstance().customEffects.entrySet();
|
||||
//
|
||||
// if (effects.isEmpty() && customEffects.isEmpty()) {
|
||||
// sendError(sender, "No effects found.");
|
||||
// return;
|
||||
// }
|
||||
//
|
||||
// sendResult(sender, "--------------------");
|
||||
//
|
||||
// for (Map.Entry<Integer, StatusEffect> entry : effects) {
|
||||
// sendResult(sender, String.format("\u00a7b%2$s \u00a77(ID%3$s: %1$s)", entry.getKey(), entry.getValue().getName(), entry.getValue().isCustom() ? " - CUSTOM" : " "));
|
||||
// }
|
||||
// for (Map.Entry<Integer, CustomEffect> entry : customEffects) {
|
||||
// sendResult(sender, String.format("\u00a7b%2$s \u00a77(ID%3$s: %1$s)", entry.getKey(), entry.getValue().getName(), entry.getValue().isCustom() ? " - CUSTOM" : " "));
|
||||
// }
|
||||
//
|
||||
// sendResult(sender, "--------------------");
|
||||
CustomEffectController controller = CustomEffectController.getInstance();
|
||||
if (controller.indexMapper.isEmpty()) {
|
||||
sendError(sender, "No effects found.");
|
||||
return;
|
||||
}
|
||||
|
||||
sendResult(sender, "--------------------");
|
||||
|
||||
// Get all indices, sort them in ascending order.
|
||||
List<Integer> indices = new ArrayList<>(controller.indexMapper.keySet());
|
||||
Collections.sort(indices);
|
||||
for (Integer idx : indices) {
|
||||
Map<Integer, CustomEffect> effects = controller.indexMapper.get(idx);
|
||||
if (effects == null || effects.isEmpty())
|
||||
continue;
|
||||
// Sort the effect IDs in ascending order.
|
||||
List<Integer> effectIds = new ArrayList<>(effects.keySet());
|
||||
Collections.sort(effectIds);
|
||||
for (Integer id : effectIds) {
|
||||
CustomEffect effect = effects.get(id);
|
||||
sendResult(sender, String.format("\u00a7b%s \u00a77(ID: %d, INDEX: %d)",
|
||||
effect.getName(),
|
||||
id,
|
||||
idx));
|
||||
}
|
||||
}
|
||||
|
||||
sendResult(sender, "--------------------");
|
||||
}
|
||||
|
||||
@SubCommand(desc = "Gives a effect to a player", usage = "<player> <time> <effectName>")
|
||||
// Give effect by name.
|
||||
// Usage: <player> <time> <effectName> [index]
|
||||
@SubCommand(desc = "Gives an effect to a player", usage = "<player> <time> <effectName> [index]")
|
||||
public void give(ICommandSender sender, String[] args) throws CommandException {
|
||||
// String playername = args[0];
|
||||
// int time = Integer.parseInt(args[1]);
|
||||
// String name = "";
|
||||
// for (int i = 2; i < args.length; i++) {
|
||||
// name += args[i] + (i != args.length - 1 ? " " : "");
|
||||
// }
|
||||
//
|
||||
// List<PlayerData> data = PlayerDataController.Instance.getPlayersData(sender, playername);
|
||||
// if (data.isEmpty()) {
|
||||
// sendError(sender, "Unknown player: " + playername);
|
||||
// return;
|
||||
// }
|
||||
//
|
||||
// StatusEffect statusEffect = DBCEffectController.getInstance().get(name);
|
||||
// if (statusEffect == null) {
|
||||
// sendError(sender, "Unknown effect: " + name);
|
||||
// return;
|
||||
// }
|
||||
//
|
||||
// for (PlayerData playerdata : data) {
|
||||
// DBCEffectController.getInstance().applyEffect(playerdata.player, statusEffect.getID(), time);
|
||||
// sendResult(sender, String.format("%s §agiven to §7'§b%s§7'", statusEffect.getName(), playerdata.playername));
|
||||
// if (sender != playerdata.player) {
|
||||
// sendResult(playerdata.player, String.format("§Effect §7%s §aadded.", statusEffect.getName()));
|
||||
// }
|
||||
// }
|
||||
if (args.length < 3) {
|
||||
sendError(sender, "Usage: <player> <time> <effectName> [index]");
|
||||
return;
|
||||
}
|
||||
|
||||
String playername = args[0];
|
||||
int time;
|
||||
try {
|
||||
time = Integer.parseInt(args[1]);
|
||||
} catch (NumberFormatException e) {
|
||||
sendError(sender, "Invalid time: " + args[1]);
|
||||
return;
|
||||
}
|
||||
|
||||
int index = 0;
|
||||
String effectName;
|
||||
if (args.length > 3) {
|
||||
// Try to parse the last argument as the index.
|
||||
try {
|
||||
index = Integer.parseInt(args[args.length - 1]);
|
||||
StringBuilder sb = new StringBuilder();
|
||||
for (int i = 2; i < args.length - 1; i++) {
|
||||
sb.append(args[i]).append(i < args.length - 2 ? " " : "");
|
||||
}
|
||||
effectName = sb.toString();
|
||||
} catch (NumberFormatException e) {
|
||||
// If parsing fails, assume the entire remainder is the effect name.
|
||||
StringBuilder sb = new StringBuilder();
|
||||
for (int i = 2; i < args.length; i++) {
|
||||
sb.append(args[i]).append(i < args.length - 1 ? " " : "");
|
||||
}
|
||||
effectName = sb.toString();
|
||||
}
|
||||
} else {
|
||||
effectName = args[2];
|
||||
}
|
||||
|
||||
List<PlayerData> players = PlayerDataController.Instance.getPlayersData(sender, playername);
|
||||
if (players.isEmpty()) {
|
||||
sendError(sender, "Unknown player: " + playername);
|
||||
return;
|
||||
}
|
||||
|
||||
CustomEffect effect = CustomEffectController.getInstance().get(effectName, index);
|
||||
if (effect == null) {
|
||||
sendError(sender, "Unknown effect: " + effectName + " with index " + index);
|
||||
return;
|
||||
}
|
||||
|
||||
for (PlayerData pdata : players) {
|
||||
CustomEffectController.getInstance().applyEffect(pdata.player, effect.getID(), time, (byte) 1, index);
|
||||
sendResult(sender, String.format("%s §agiven to §7'§b%s§7'", effect.getName(), pdata.playername));
|
||||
if (sender != pdata.player) {
|
||||
sendResult(pdata.player, String.format("Effect §7%s §aadded.", effect.getName()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@SubCommand(desc = "Removes a effect from a player", usage = "<player> <effectName>")
|
||||
// Remove effect by name.
|
||||
// Usage: <player> <effectName> [index]
|
||||
@SubCommand(desc = "Removes an effect from a player", usage = "<player> <effectName> [index]")
|
||||
public void remove(ICommandSender sender, String[] args) throws CommandException {
|
||||
// String playername = args[0];
|
||||
// String name = "";
|
||||
// for (int i = 1; i < args.length; i++) {
|
||||
// name += args[i] + (i != args.length - 1 ? " " : "");
|
||||
// }
|
||||
//
|
||||
// List<PlayerData> data = PlayerDataController.Instance.getPlayersData(sender, playername);
|
||||
// if (data.isEmpty()) {
|
||||
// sendError(sender, "Unknown player: " + playername);
|
||||
// return;
|
||||
// }
|
||||
//
|
||||
// StatusEffect statusEffect = DBCEffectController.getInstance().get(name);
|
||||
// if (statusEffect == null) {
|
||||
// sendError(sender, "Unknown effect: " + name);
|
||||
// return;
|
||||
// }
|
||||
//
|
||||
// for (PlayerData playerData : data) {
|
||||
// DBCEffectController.getInstance().removeEffect(playerData.player, statusEffect.getID(), DBCPlayerEvent.EffectEvent.ExpirationType.REMOVED);
|
||||
// sendResult(sender, String.format("Effect %s removed from %s", statusEffect.getName(), playerData.playername));
|
||||
// }
|
||||
if (args.length < 2) {
|
||||
sendError(sender, "Usage: <player> <effectName> [index]");
|
||||
return;
|
||||
}
|
||||
|
||||
String playername = args[0];
|
||||
int index = 0;
|
||||
String effectName;
|
||||
if (args.length > 2) {
|
||||
try {
|
||||
index = Integer.parseInt(args[args.length - 1]);
|
||||
StringBuilder sb = new StringBuilder();
|
||||
for (int i = 1; i < args.length - 1; i++) {
|
||||
sb.append(args[i]).append(i < args.length - 2 ? " " : "");
|
||||
}
|
||||
effectName = sb.toString();
|
||||
} catch (NumberFormatException e) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
for (int i = 1; i < args.length; i++) {
|
||||
sb.append(args[i]).append(i < args.length - 1 ? " " : "");
|
||||
}
|
||||
effectName = sb.toString();
|
||||
}
|
||||
} else {
|
||||
effectName = args[1];
|
||||
}
|
||||
|
||||
List<PlayerData> players = PlayerDataController.Instance.getPlayersData(sender, playername);
|
||||
if (players.isEmpty()) {
|
||||
sendError(sender, "Unknown player: " + playername);
|
||||
return;
|
||||
}
|
||||
|
||||
CustomEffect effect = CustomEffectController.getInstance().get(effectName, index);
|
||||
if (effect == null) {
|
||||
sendError(sender, "Unknown effect: " + effectName + " with index " + index);
|
||||
return;
|
||||
}
|
||||
|
||||
for (PlayerData pdata : players) {
|
||||
CustomEffectController.getInstance().removeEffect(pdata.player, effect.getID(), index, ExpirationType.REMOVED);
|
||||
sendResult(sender, String.format("Effect %s removed from %s", effect.getName(), pdata.playername));
|
||||
}
|
||||
}
|
||||
|
||||
@SubCommand(desc = "Gives a effect to a player", usage = "<player> <time> <effectId>")
|
||||
// Give effect by ID.
|
||||
// Usage: <player> <time> <effectId> [index]
|
||||
@SubCommand(desc = "Gives an effect to a player by ID", usage = "<player> <time> <effectId> [index]")
|
||||
public void giveId(ICommandSender sender, String[] args) throws CommandException {
|
||||
// String playername = args[0];
|
||||
// int time = Integer.parseInt(args[1]);
|
||||
//
|
||||
// List<PlayerData> data = PlayerDataController.Instance.getPlayersData(sender, playername);
|
||||
// if (data.isEmpty()) {
|
||||
// sendError(sender, "Unknown player: " + playername);
|
||||
// return;
|
||||
// }
|
||||
//
|
||||
// for (PlayerData playerdata : data) {
|
||||
// int statusEffectId = Integer.parseInt(args[2]);
|
||||
// DBCEffectController.getInstance().applyEffect(playerdata.player, statusEffectId, time);
|
||||
// sendResult(sender, String.format("Effect %d given to %s", statusEffectId, playerdata.playername));
|
||||
// }
|
||||
if (args.length < 3) {
|
||||
sendError(sender, "Usage: <player> <time> <effectId> [index]");
|
||||
return;
|
||||
}
|
||||
|
||||
String playername = args[0];
|
||||
int time;
|
||||
try {
|
||||
time = Integer.parseInt(args[1]);
|
||||
} catch (NumberFormatException e) {
|
||||
sendError(sender, "Invalid time: " + args[1]);
|
||||
return;
|
||||
}
|
||||
|
||||
int effectId;
|
||||
int index = 0;
|
||||
try {
|
||||
effectId = Integer.parseInt(args[2]);
|
||||
} catch (NumberFormatException e) {
|
||||
sendError(sender, "Invalid effect ID: " + args[2]);
|
||||
return;
|
||||
}
|
||||
if (args.length > 3) {
|
||||
try {
|
||||
index = Integer.parseInt(args[3]);
|
||||
} catch (NumberFormatException e) {
|
||||
index = 0;
|
||||
}
|
||||
}
|
||||
|
||||
List<PlayerData> players = PlayerDataController.Instance.getPlayersData(sender, playername);
|
||||
if (players.isEmpty()) {
|
||||
sendError(sender, "Unknown player: " + playername);
|
||||
return;
|
||||
}
|
||||
|
||||
CustomEffect effect = CustomEffectController.getInstance().get(effectId, index);
|
||||
if (effect == null) {
|
||||
sendError(sender, "Unknown effect with ID: " + effectId + " and index " + index);
|
||||
return;
|
||||
}
|
||||
|
||||
for (PlayerData pdata : players) {
|
||||
CustomEffectController.getInstance().applyEffect(pdata.player, effectId, time, (byte) 1, index);
|
||||
sendResult(sender, String.format("Effect %d given to %s", effectId, pdata.playername));
|
||||
}
|
||||
}
|
||||
|
||||
@SubCommand(desc = "Removes a effect from a player", usage = "<player> <effectId>")
|
||||
// Remove effect by ID.
|
||||
// Usage: <player> <effectId> [index]
|
||||
@SubCommand(desc = "Removes an effect from a player by ID", usage = "<player> <effectId> [index]")
|
||||
public void removeId(ICommandSender sender, String[] args) throws CommandException {
|
||||
// String playername = args[0];
|
||||
// List<PlayerData> data = PlayerDataController.Instance.getPlayersData(sender, playername);
|
||||
// if (data.isEmpty()) {
|
||||
// sendError(sender, "Unknown player: " + playername);
|
||||
// return;
|
||||
// }
|
||||
//
|
||||
// for (PlayerData playerData : data) {
|
||||
// int statusEffectId = Integer.parseInt(args[1]);
|
||||
// DBCEffectController.getInstance().removeEffect(playerData.player, statusEffectId, DBCPlayerEvent.EffectEvent.ExpirationType.REMOVED);
|
||||
// sendResult(sender, String.format("Effect %d removed from %s", statusEffectId, playerData.playername));
|
||||
// }
|
||||
if (args.length < 2) {
|
||||
sendError(sender, "Usage: <player> <effectId> [index]");
|
||||
return;
|
||||
}
|
||||
|
||||
String playername = args[0];
|
||||
int effectId;
|
||||
int index = 0;
|
||||
try {
|
||||
effectId = Integer.parseInt(args[1]);
|
||||
} catch (NumberFormatException e) {
|
||||
sendError(sender, "Invalid effect ID: " + args[1]);
|
||||
return;
|
||||
}
|
||||
if (args.length > 2) {
|
||||
try {
|
||||
index = Integer.parseInt(args[2]);
|
||||
} catch (NumberFormatException e) {
|
||||
index = 0;
|
||||
}
|
||||
}
|
||||
|
||||
List<PlayerData> players = PlayerDataController.Instance.getPlayersData(sender, playername);
|
||||
if (players.isEmpty()) {
|
||||
sendError(sender, "Unknown player: " + playername);
|
||||
return;
|
||||
}
|
||||
|
||||
CustomEffect effect = CustomEffectController.getInstance().get(effectId, index);
|
||||
if (effect == null) {
|
||||
sendError(sender, "Unknown effect with ID: " + effectId + " and index " + index);
|
||||
return;
|
||||
}
|
||||
|
||||
for (PlayerData pdata : players) {
|
||||
CustomEffectController.getInstance().removeEffect(pdata.player, effectId, index, ExpirationType.REMOVED);
|
||||
sendResult(sender, String.format("Effect %d removed from %s", effectId, pdata.playername));
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user