Skip to content
This repository has been archived by the owner on Apr 12, 2022. It is now read-only.

Commit

Permalink
Statistic Changes Event
Browse files Browse the repository at this point in the history
  • Loading branch information
Xenmai committed Oct 13, 2017
1 parent ed7e79d commit 9607a4c
Show file tree
Hide file tree
Showing 4 changed files with 116 additions and 2 deletions.
Expand Up @@ -191,6 +191,7 @@ public void onServerStart(GamePreInitializationEvent event) {
Denizen2Core.register(new PlayerRightClicksBlockScriptEvent());
Denizen2Core.register(new PlayerRightClicksEntityScriptEvent());
Denizen2Core.register(new PlayerRightClicksScriptEvent());
Denizen2Core.register(new StatisticChangesScriptEvent());
// Events: Server
Denizen2Core.register(new ClientPingsServerScriptEvent());
Denizen2Core.register(new CommandSentScriptEvent());
Expand Down
Expand Up @@ -78,7 +78,7 @@ public static boolean checkString(String inpStr, ScriptEvent.ScriptEventData dat
return true;
}
for (AbstractTagObject ato : ListTag.getFor(error, data.switches.get(tname)).getInternal()) {
if (!CoreUtilities.toLowerCase((TextTag.getFor(error, ato)).getInternal()).equals(inpStr)) {
if (CoreUtilities.toLowerCase((TextTag.getFor(error, ato)).getInternal()).equals(inpStr)) {
return true;
}
}
Expand Down
@@ -0,0 +1,113 @@
package com.denizenscript.denizen2sponge.events.player;

import com.denizenscript.denizen2core.events.ScriptEvent;
import com.denizenscript.denizen2core.tags.AbstractTagObject;
import com.denizenscript.denizen2core.tags.objects.IntegerTag;
import com.denizenscript.denizen2core.tags.objects.TextTag;
import com.denizenscript.denizen2sponge.Denizen2Sponge;
import com.denizenscript.denizen2sponge.events.D2SpongeEventHelper;
import com.denizenscript.denizen2sponge.tags.objects.PlayerTag;
import org.spongepowered.api.Sponge;
import org.spongepowered.api.entity.living.player.Player;
import org.spongepowered.api.event.Listener;
import org.spongepowered.api.event.filter.cause.Root;
import org.spongepowered.api.event.statistic.ChangeStatisticEvent;

import java.util.HashMap;

public class StatisticChangesScriptEvent extends ScriptEvent {

// <--[event]
// @Events
// statistic changes
//
// @Updated 2017/10/13
//
// @Cancellable true
//
// @Group Player
//
// @Triggers when a player statistic changes.
//
// @Switch statistic (TextTag) checks the statistic.
//
// @Context
// player (PlayerTag) returns the player that owns the statistic.
// statistic (TextTag) returns the changed statistic.
// old_value (IntegerTag) returns the old statistic value.
// new_value (IntegerTag) returns the new statistic value.
//
// @Determinations
// value (IntegerTag) sets the new statistic value.
// -->

@Override
public String getName() {
return "StatisticChanges";
}

@Override
public boolean couldMatch(ScriptEventData data) {
return data.eventPath.startsWith("statistic changes");
}

@Override
public boolean matches(ScriptEventData data) {
return D2SpongeEventHelper.checkString(statistic.getInternal(), data, this::error, "statistic");
}

public PlayerTag player;

public TextTag statistic;

public IntegerTag old_value;

public IntegerTag new_value;

public ChangeStatisticEvent.TargetPlayer internal;

@Override
public HashMap<String, AbstractTagObject> getDefinitions(ScriptEventData data) {
HashMap<String, AbstractTagObject> defs = super.getDefinitions(data);
defs.put("player", player);
defs.put("statistic", statistic);
defs.put("old_value", old_value);
defs.put("new_value", new_value);
return defs;
}

@Override
public void enable() {
Sponge.getEventManager().registerListeners(Denizen2Sponge.instance, this);
}

@Override
public void disable() {
Sponge.getEventManager().unregisterListeners(this);
}

@Listener
public void onStatisticChanges(ChangeStatisticEvent.TargetPlayer evt, @Root Player player) {
StatisticChangesScriptEvent event = (StatisticChangesScriptEvent) clone();
event.internal = evt;
event.player = new PlayerTag(player);
event.statistic = new TextTag(evt.getStatistic().getId());
event.old_value = new IntegerTag(evt.getOriginalValue());
event.new_value = new IntegerTag(evt.getValue());
event.cancelled = evt.isCancelled();
event.run();
evt.setCancelled(event.cancelled);
}

@Override
public void applyDetermination(boolean errors, String determination, AbstractTagObject value) {
if (determination.equals("value")) {
IntegerTag it = IntegerTag.getFor(this::error, value);
new_value = it;
internal.setValue(it.getInternal());
}
else {
super.applyDetermination(errors, determination, value);
}
}
}
Expand Up @@ -175,7 +175,7 @@ else if (source instanceof CommandBlockMinecart) {
@Override
public void applyDetermination(boolean errors, String determination, AbstractTagObject value) {
if (determination.equals("command")) {
TextTag tt = TextTag.getFor(this::error, value);
TextTag tt = new TextTag(value.toString());
command = tt;
internal.setCommand(tt.getInternal());
}
Expand Down

0 comments on commit 9607a4c

Please sign in to comment.