Skip to content
This repository was archived by the owner on Sep 14, 2022. It is now read-only.

Commit 659e7b5

Browse files
authored
Merge pull request #117 from LXGaming/event
Rework PrismRecord, Command & Inventory Tracking
2 parents 2a37e91 + 44453dd commit 659e7b5

24 files changed

Lines changed: 1033 additions & 677 deletions

src/main/java/com/helion3/prism/Configuration.java

Lines changed: 40 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
2222
* THE SOFTWARE.
2323
*/
24+
2425
package com.helion3.prism;
2526

2627
import java.io.File;
@@ -158,21 +159,11 @@ public Configuration(File defaultConfig, ConfigurationLoader<CommentedConfigurat
158159
eventBlockDecay.setValue(true);
159160
}
160161

161-
ConfigurationNode eventItemDrop = rootNode.getNode("events", "drop");
162-
if (eventItemDrop.isVirtual()) {
163-
eventItemDrop.setValue(false);
164-
}
165-
166162
ConfigurationNode eventBlockGrow = rootNode.getNode("events", "grow");
167163
if (eventBlockGrow.isVirtual()) {
168164
eventBlockGrow.setValue(true);
169165
}
170166

171-
ConfigurationNode eventItemPickup = rootNode.getNode("events", "pickup");
172-
if (eventItemPickup.isVirtual()) {
173-
eventItemPickup.setValue(false);
174-
}
175-
176167
ConfigurationNode eventBlockPlace = rootNode.getNode("events", "place");
177168
if (eventBlockPlace.isVirtual()) {
178169
eventBlockPlace.setValue(true);
@@ -183,16 +174,51 @@ public Configuration(File defaultConfig, ConfigurationLoader<CommentedConfigurat
183174
eventEntityDeath.setValue(true);
184175
}
185176

186-
ConfigurationNode eventPlayerJoin = rootNode.getNode("events", "join");
187-
if (eventPlayerJoin.isVirtual()) {
188-
eventPlayerJoin.setValue(false);
177+
ConfigurationNode eventCommand = rootNode.getNode("events", "command");
178+
if (eventCommand.isVirtual()) {
179+
eventCommand.setValue(false);
180+
}
181+
182+
ConfigurationNode eventInventoryClose = rootNode.getNode("events", "close");
183+
if (eventInventoryClose.isVirtual()) {
184+
eventInventoryClose.setValue(false);
185+
}
186+
187+
ConfigurationNode eventInventoryOpen = rootNode.getNode("events", "open");
188+
if (eventInventoryOpen.isVirtual()) {
189+
eventInventoryOpen.setValue(false);
190+
}
191+
192+
ConfigurationNode eventItemDrop = rootNode.getNode("events", "drop");
193+
if (eventItemDrop.isVirtual()) {
194+
eventItemDrop.setValue(false);
195+
}
196+
197+
ConfigurationNode eventItemInsert = rootNode.getNode("events", "insert");
198+
if (eventItemInsert.isVirtual()) {
199+
eventItemInsert.setValue(false);
200+
}
201+
202+
ConfigurationNode eventItemPickup = rootNode.getNode("events", "pickup");
203+
if (eventItemPickup.isVirtual()) {
204+
eventItemPickup.setValue(false);
205+
}
206+
207+
ConfigurationNode eventItemRemove = rootNode.getNode("events", "remove");
208+
if (eventItemRemove.isVirtual()) {
209+
eventItemRemove.setValue(false);
189210
}
190211

191212
ConfigurationNode eventPlayerQuit = rootNode.getNode("events", "quit");
192213
if (eventPlayerQuit.isVirtual()) {
193214
eventPlayerQuit.setValue(false);
194215
}
195216

217+
ConfigurationNode eventPlayerJoin = rootNode.getNode("events", "join");
218+
if (eventPlayerJoin.isVirtual()) {
219+
eventPlayerJoin.setValue(false);
220+
}
221+
196222
// Default parameters
197223
ConfigurationNode defaults = rootNode.getNode("defaults", "enabled");
198224
if (defaults.isVirtual()) {
@@ -260,4 +286,4 @@ public Configuration(File defaultConfig, ConfigurationLoader<CommentedConfigurat
260286
public ConfigurationNode getNode(Object... path) {
261287
return rootNode.getNode(path);
262288
}
263-
}
289+
}

src/main/java/com/helion3/prism/Listening.java

Lines changed: 17 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -21,28 +21,23 @@
2121
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
2222
* THE SOFTWARE.
2323
*/
24+
2425
package com.helion3.prism;
2526

26-
public class Listening {
27-
public final boolean BREAK;
28-
public final boolean DEATH;
29-
public final boolean DECAY;
30-
public final boolean DROP;
31-
public final boolean GROW;
32-
public final boolean JOIN;
33-
public final boolean PICKUP;
34-
public final boolean PLACE;
35-
public final boolean QUIT;
27+
public final class Listening {
3628

37-
public Listening() {
38-
BREAK = Prism.getInstance().getConfiguration().getNode("events", "break").getBoolean();
39-
DEATH = Prism.getInstance().getConfiguration().getNode("events", "death").getBoolean();
40-
DECAY = Prism.getInstance().getConfiguration().getNode("events", "decay").getBoolean();
41-
DROP = Prism.getInstance().getConfiguration().getNode("events", "drop").getBoolean();
42-
GROW = Prism.getInstance().getConfiguration().getNode("events", "grow").getBoolean();
43-
JOIN = Prism.getInstance().getConfiguration().getNode("events", "join").getBoolean();
44-
PICKUP = Prism.getInstance().getConfiguration().getNode("events", "pickup").getBoolean();
45-
PLACE = Prism.getInstance().getConfiguration().getNode("events", "place").getBoolean();
46-
QUIT = Prism.getInstance().getConfiguration().getNode("events", "quit").getBoolean();
47-
}
48-
}
29+
public final boolean blockBreak = Prism.getInstance().getConfiguration().getNode("events", "break").getBoolean();
30+
public final boolean blockDecay = Prism.getInstance().getConfiguration().getNode("events", "decay").getBoolean();
31+
public final boolean blockGrow = Prism.getInstance().getConfiguration().getNode("events", "grow").getBoolean();
32+
public final boolean blockPlace = Prism.getInstance().getConfiguration().getNode("events", "place").getBoolean();
33+
public final boolean entityDeath = Prism.getInstance().getConfiguration().getNode("events", "death").getBoolean();
34+
public final boolean commandExecute = Prism.getInstance().getConfiguration().getNode("events", "command").getBoolean();
35+
public final boolean inventoryClose = Prism.getInstance().getConfiguration().getNode("events", "close").getBoolean();
36+
public final boolean inventoryOpen = Prism.getInstance().getConfiguration().getNode("events", "open").getBoolean();
37+
public final boolean itemDrop = Prism.getInstance().getConfiguration().getNode("events", "drop").getBoolean();
38+
public final boolean itemInsert = Prism.getInstance().getConfiguration().getNode("events", "insert").getBoolean();
39+
public final boolean itemPickup = Prism.getInstance().getConfiguration().getNode("events", "pickup").getBoolean();
40+
public final boolean itemRemove = Prism.getInstance().getConfiguration().getNode("events", "remove").getBoolean();
41+
public final boolean playerDisconnect = Prism.getInstance().getConfiguration().getNode("events", "quit").getBoolean();
42+
public final boolean playerJoin = Prism.getInstance().getConfiguration().getNode("events", "join").getBoolean();
43+
}

src/main/java/com/helion3/prism/Prism.java

Lines changed: 40 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import com.google.common.collect.Maps;
2929
import com.google.common.collect.Sets;
3030
import com.google.inject.Inject;
31+
import com.helion3.prism.api.data.PrismEvent;
3132
import com.helion3.prism.api.filters.FilterList;
3233
import com.helion3.prism.api.filters.FilterMode;
3334
import com.helion3.prism.api.flags.FlagClean;
@@ -44,22 +45,17 @@
4445
import com.helion3.prism.api.parameters.ParameterRadius;
4546
import com.helion3.prism.api.parameters.ParameterTime;
4647
import com.helion3.prism.api.records.ActionableResult;
47-
import com.helion3.prism.api.records.BlockResult;
48-
import com.helion3.prism.api.records.EntityResult;
49-
import com.helion3.prism.api.records.Result;
5048
import com.helion3.prism.api.storage.StorageAdapter;
5149
import com.helion3.prism.commands.PrismCommands;
5250
import com.helion3.prism.listeners.ChangeBlockListener;
53-
import com.helion3.prism.listeners.ChangeInventoryListener;
54-
import com.helion3.prism.listeners.DeathListener;
55-
import com.helion3.prism.listeners.DropItemListener;
56-
import com.helion3.prism.listeners.JoinListener;
57-
import com.helion3.prism.listeners.QuitListener;
51+
import com.helion3.prism.listeners.EntityListener;
52+
import com.helion3.prism.listeners.InventoryListener;
5853
import com.helion3.prism.listeners.RequiredInteractListener;
5954
import com.helion3.prism.queues.RecordingQueueManager;
6055
import com.helion3.prism.storage.h2.H2StorageAdapter;
6156
import com.helion3.prism.storage.mongodb.MongoStorageAdapter;
6257
import com.helion3.prism.storage.mysql.MySQLStorageAdapter;
58+
import com.helion3.prism.util.PrismEvents;
6359
import com.helion3.prism.util.Reference;
6460
import ninja.leaping.configurate.commented.CommentedConfigurationNode;
6561
import ninja.leaping.configurate.loader.ConfigurationLoader;
@@ -125,7 +121,7 @@ public final class Prism {
125121
private final Set<FlagHandler> flagHandlers = Sets.newHashSet();
126122
private final Map<UUID, List<ActionableResult>> lastActionResults = Maps.newHashMap();
127123
private final Set<ParameterHandler> parameterHandlers = Sets.newHashSet();
128-
private final Map<String, Class<? extends Result>> resultRecords = Maps.newHashMap();
124+
private final Set<PrismEvent> prismEvents = Sets.newHashSet();
129125

130126
@Listener
131127
public void onConstruction(GameConstructionEvent event) {
@@ -155,38 +151,29 @@ public void onInitialization(GameInitializationEvent event) {
155151
registerParameterHandler(new ParameterRadius());
156152
registerParameterHandler(new ParameterTime());
157153

158-
// Register ResultRecords
159-
registerResultRecord("break", BlockResult.class);
160-
registerResultRecord("decay", BlockResult.class);
161-
registerResultRecord("grow", BlockResult.class);
162-
registerResultRecord("place", BlockResult.class);
163-
registerResultRecord("death", EntityResult.class);
154+
// Register PrismEvents
155+
registerPrismEvent(PrismEvents.BLOCK_BREAK);
156+
registerPrismEvent(PrismEvents.BLOCK_DECAY);
157+
registerPrismEvent(PrismEvents.BLOCK_GROW);
158+
registerPrismEvent(PrismEvents.BLOCK_PLACE);
159+
registerPrismEvent(PrismEvents.ENTITY_DEATH);
160+
registerPrismEvent(PrismEvents.COMMAND_EXECUTE);
161+
registerPrismEvent(PrismEvents.INVENTORY_CLOSE);
162+
registerPrismEvent(PrismEvents.INVENTORY_OPEN);
163+
registerPrismEvent(PrismEvents.ITEM_DROP);
164+
registerPrismEvent(PrismEvents.ITEM_INSERT);
165+
registerPrismEvent(PrismEvents.ITEM_PICKUP);
166+
registerPrismEvent(PrismEvents.ITEM_REMOVE);
167+
registerPrismEvent(PrismEvents.PLAYER_DISCONNECT);
168+
registerPrismEvent(PrismEvents.PLAYER_JOIN);
164169

165170
// Register Commands
166171
Sponge.getCommandManager().register(this, PrismCommands.getCommand(), Reference.ID, "pr");
167172

168173
// Register Listeners
169174
Sponge.getEventManager().registerListeners(getPluginContainer(), new ChangeBlockListener());
170-
171-
if (getListening().DEATH) {
172-
Sponge.getEventManager().registerListeners(getPluginContainer(), new DeathListener());
173-
}
174-
175-
if (getListening().DROP) {
176-
Sponge.getEventManager().registerListeners(getPluginContainer(), new DropItemListener());
177-
}
178-
179-
if (getListening().JOIN) {
180-
Sponge.getEventManager().registerListeners(getPluginContainer(), new JoinListener());
181-
}
182-
183-
if (getListening().PICKUP) {
184-
Sponge.getEventManager().registerListeners(getPluginContainer(), new ChangeInventoryListener());
185-
}
186-
187-
if (getListening().QUIT) {
188-
Sponge.getEventManager().registerListeners(getPluginContainer(), new QuitListener());
189-
}
175+
Sponge.getEventManager().registerListeners(getPluginContainer(), new EntityListener());
176+
Sponge.getEventManager().registerListeners(getPluginContainer(), new InventoryListener());
190177

191178
// Events required for internal operation
192179
Sponge.getEventManager().registerListeners(getPluginContainer(), new RequiredInteractListener());
@@ -210,7 +197,7 @@ public void onStartedServer(GameStartedServerEvent event) {
210197
throw new Exception("Invalid storage engine configured.");
211198
}
212199

213-
Preconditions.checkArgument(getStorageAdapter().connect());
200+
Preconditions.checkState(getStorageAdapter().connect());
214201

215202
// Initialize the recording queue manager
216203
Task.builder()
@@ -354,34 +341,31 @@ public boolean registerParameterHandler(ParameterHandler parameterHandler) {
354341
}
355342

356343
/**
357-
* Returns all currently registered result records.
344+
* Returns all currently registered prism events.
358345
*
359-
* @return Map of event names to their {@link Result} class
346+
* @return List of {@link PrismEvent}
360347
*/
361-
private Map<String, Class<? extends Result>> getResultRecords() {
362-
return resultRecords;
348+
public Set<PrismEvent> getPrismEvents() {
349+
return prismEvents;
363350
}
364351

365-
/**
366-
* Returns the result record class for a given event
367-
*
368-
* @param event event name
369-
* @return {@link Result} Record class, or null if unsupported
370-
*/
371-
public Class<? extends Result> getResultRecord(String event) {
372-
return getResultRecords().get(event);
352+
public Optional<PrismEvent> getPrismEvent(String id) {
353+
for (PrismEvent prismEvent : getPrismEvents()) {
354+
if (StringUtils.equals(prismEvent.getId(), id)) {
355+
return Optional.of(prismEvent);
356+
}
357+
}
358+
359+
return Optional.empty();
373360
}
374361

375362
/**
376-
* Register a custom result record for a given event name.
363+
* Register a prism event.
377364
*
378-
* @param event {@link String} event name
379-
* @param resultRecord {@link Result} Record class
380-
* @return True if the {@link Result} Record class was registered
365+
* @param prismEvent
381366
*/
382-
public boolean registerResultRecord(String event, Class<? extends Result> resultRecord) {
383-
Preconditions.checkNotNull(event);
384-
Preconditions.checkNotNull(resultRecord);
385-
return getResultRecords().putIfAbsent(event, resultRecord) == null;
367+
public boolean registerPrismEvent(PrismEvent prismEvent) {
368+
Preconditions.checkNotNull(prismEvent);
369+
return getPrismEvents().add(prismEvent);
386370
}
387371
}

src/main/java/com/helion3/prism/listeners/DeathListener.java renamed to src/main/java/com/helion3/prism/api/data/PrismEvent.java

Lines changed: 35 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -21,16 +21,42 @@
2121
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
2222
* THE SOFTWARE.
2323
*/
24-
package com.helion3.prism.listeners;
2524

26-
import org.spongepowered.api.event.Listener;
27-
import org.spongepowered.api.event.entity.DestructEntityEvent;
25+
package com.helion3.prism.api.data;
2826

29-
import com.helion3.prism.api.records.PrismRecord;
27+
import com.helion3.prism.api.records.Result;
3028

31-
public class DeathListener {
32-
@Listener
33-
public void onDeath(final DestructEntityEvent.Death event) {
34-
PrismRecord.create().source(event.getCause()).killed(event.getTargetEntity()).save();
29+
public class PrismEvent {
30+
31+
private final String id;
32+
private final String name;
33+
private final String pastTense;
34+
private final Class<? extends Result> resultClass;
35+
36+
private PrismEvent(String id, String name, String pastTense, Class<? extends Result> resultClass) {
37+
this.id = id;
38+
this.name = name;
39+
this.pastTense = pastTense;
40+
this.resultClass = resultClass;
41+
}
42+
43+
public static PrismEvent of(String id, String name, String pastTense, Class<? extends Result> resultClass) {
44+
return new PrismEvent(id, name, pastTense, resultClass);
45+
}
46+
47+
public String getId() {
48+
return id;
49+
}
50+
51+
public String getName() {
52+
return name;
53+
}
54+
55+
public String getPastTense() {
56+
return pastTense;
57+
}
58+
59+
public Class<? extends Result> getResultClass() {
60+
return resultClass;
3561
}
36-
}
62+
}

0 commit comments

Comments
 (0)