RuneHive-Game
Loading...
Searching...
No Matches
CommandExtension.java
Go to the documentation of this file.
1package com.runehive.game.plugin.extension;
2
3import com.google.common.collect.ArrayListMultimap;
4import com.google.common.collect.Multimap;
5import com.runehive.game.plugin.PluginContext;
6import com.runehive.game.world.entity.mob.data.PacketType;
7import com.runehive.game.world.entity.mob.player.command.CommandParser;
8import com.runehive.game.world.entity.mob.player.Player;
9import com.runehive.game.world.entity.mob.player.command.Command;
10import org.apache.logging.log4j.LogManager;
11import org.apache.logging.log4j.Logger;
12
13import java.util.Collection;
14import java.util.HashSet;
15import java.util.Set;
16
17public abstract class CommandExtension extends PluginContext {
18
19 public static final Logger logger = LogManager.getLogger(CommandExtension.class);
20 protected static final Set<CommandExtension> extensions = new HashSet<>();
21
22 protected final Set<Command> commands = new HashSet<>();
23 public final Multimap<String, Command> multimap = ArrayListMultimap.create();
24
25 @Override
26 public void onInit() {
27 extensions.add(this);
28 register();
29 multimap.clear();
30 for (Command command : commands) {
31 if (command.getNames().length == 0) {
32 logger.warn(String.format("plugin=%s command missing name.", this.getClass().getSimpleName()));
33 continue;
34 }
35
36 for (String name : command.getNames()) {
37 final String key = name.toLowerCase();
38 if (multimap.containsKey(key)) {
39 logger.warn(String.format("plugin=%s duplicate command=%s", this.getClass().getSimpleName(), key));
40 continue;
41 }
42
43 multimap.put(key, command);
44 }
45 }
46 commands.clear();
47 }
48
49 protected abstract void register();
50
51 public abstract boolean canAccess(Player player);
52
53 private static boolean canExecute(Player player, CommandParser parser) {
54 return !player.locking.locked(PacketType.COMMANDS) || parser.getCommand().startsWith("key");
55 }
56
57 @Override
58 protected boolean handleCommand(Player player, CommandParser parser) {
59 if (!canExecute(player, parser)) {
60 return true;
61 }
62
64
65 if (!extension.canAccess(player)) {
66 continue;
67 }
68
69 final Collection<Command> collection = extension.multimap.get(parser.getCommand().toLowerCase());
70
71 if (collection == null) {
72 continue;
73 }
74
75 if (collection.isEmpty()) {
76 continue;
77 }
78
79 final Command command = collection.toArray(new Command[0])[0];
80
81 // execute error
82 try {
83 command.execute(player, parser);
84 } catch (Exception ex) {
85 // but dont care about the exception
86 }
87
88 return true;
89
90 }
91 return false;
92 }
93
94}
The base class that all plugins should extend.
static boolean canExecute(Player player, CommandParser parser)
static final Set< CommandExtension > extensions
abstract boolean canAccess(Player player)
boolean handleCommand(Player player, CommandParser parser)
boolean locked()
Checks if the mob is locked.
Definition Locking.java:52
This class represents a character controlled by a player.
Definition Player.java:125
abstract void execute(Player player, CommandParser parser)