Skip to content

Commit

Permalink
Add PlayerReceivesMessageScriptEvent
Browse files Browse the repository at this point in the history
  • Loading branch information
Morphan1 committed Feb 9, 2016
1 parent 8f51ed4 commit 0e8a605
Show file tree
Hide file tree
Showing 3 changed files with 102 additions and 1 deletion.
1 change: 1 addition & 0 deletions src/main/java/net/aufdemrand/denizen/Denizen.java
Expand Up @@ -670,6 +670,7 @@ public void onEnable() {
ScriptEvent.registerScriptEvent(new PlayerPlacesBlockScriptEvent());
ScriptEvent.registerScriptEvent(new PlayerPlacesHangingScriptEvent());
ScriptEvent.registerScriptEvent(new PlayerQuitsScriptEvent());
ScriptEvent.registerScriptEvent(new PlayerReceivesMessageScriptEvent());
ScriptEvent.registerScriptEvent(new PlayerRespawnsScriptEvent());
ScriptEvent.registerScriptEvent(new PlayerShearsScriptEvent());
ScriptEvent.registerScriptEvent(new PlayerSneakScriptEvent());
Expand Down
@@ -0,0 +1,82 @@
package net.aufdemrand.denizen.events.player;

import net.aufdemrand.denizen.BukkitScriptEntryData;
import net.aufdemrand.denizen.events.BukkitScriptEvent;
import net.aufdemrand.denizen.objects.dPlayer;
import net.aufdemrand.denizencore.objects.Element;
import net.aufdemrand.denizencore.objects.dObject;
import net.aufdemrand.denizencore.scripts.ScriptEntryData;
import net.aufdemrand.denizencore.scripts.containers.ScriptContainer;
import net.aufdemrand.denizencore.utilities.CoreUtilities;

public class PlayerReceivesMessageScriptEvent extends BukkitScriptEvent {

// <--[event]
// @Events
// player receives message
//
// @Regex ^on player receives message$
//
// @Cancellable true
//
// @Triggers when a player receives any chat message from the server.
//
// @Context
// <context.message> returns an Element of the message.
// <context.system_message> returns true if the message is a system message (not player chat).
//
// @Determine
// "MESSAGE:" + Element to change the message.
//
// -->

public PlayerReceivesMessageScriptEvent() {
instance = this;
}

public static PlayerReceivesMessageScriptEvent instance;
public Element message;
public Element system;
public dPlayer player;

@Override
public boolean couldMatch(ScriptContainer scriptContainer, String s) {
return CoreUtilities.toLowerCase(s).startsWith("player receives message");
}

@Override
public boolean matches(ScriptContainer scriptContainer, String s) {
return true;
}

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

@Override
public boolean applyDetermination(ScriptContainer container, String determination) {
String lower = CoreUtilities.toLowerCase(determination);
if (lower.startsWith("message:")) {
message = new Element(determination.substring("message:".length()));
return true;
}
return super.applyDetermination(container, determination);
}

@Override
public ScriptEntryData getScriptEntryData() {
return new BukkitScriptEntryData(player, null);
}

@Override
public dObject getContext(String name) {
if (name.equals("message")) {
return message;
}
if (name.equals("system_message")) {
return system;
}
return super.getContext(name);
}
}
@@ -1,6 +1,8 @@
package net.aufdemrand.denizen.utilities.packets.intercept;

import io.netty.buffer.Unpooled;
import net.aufdemrand.denizen.events.player.PlayerReceivesMessageScriptEvent;
import net.aufdemrand.denizen.objects.dPlayer;
import net.aufdemrand.denizen.scripts.commands.server.ExecuteCommand;
import net.aufdemrand.denizen.scripts.containers.core.ItemScriptHelper;
import net.aufdemrand.denizen.utilities.DenizenAPI;
Expand All @@ -9,6 +11,7 @@
import net.aufdemrand.denizen.utilities.entity.EntityFakePlayer;
import net.aufdemrand.denizen.utilities.entity.HideEntity;
import net.aufdemrand.denizen.utilities.packets.PacketHelper;
import net.aufdemrand.denizencore.objects.Element;
import net.minecraft.server.v1_8_R3.*;
import org.bukkit.Bukkit;

Expand All @@ -31,6 +34,16 @@ public static boolean handle(final EntityPlayer player, Packet packet) {
if (ExecuteCommand.silencedPlayers.contains(player.getUniqueID())) {
return true;
}
PacketPlayOutChat cPacket = (PacketPlayOutChat) packet;
int pos = chat_position.getInt(cPacket);
if (pos != 2) {
PlayerReceivesMessageScriptEvent event = PlayerReceivesMessageScriptEvent.instance;
event.message = new Element(((IChatBaseComponent) chat_message.get(cPacket)).getText());
event.system = new Element(pos == 1);
event.player = dPlayer.mirrorBukkitPlayer(player.getBukkitEntity());
event.fire();
return event.cancelled;
}
}
else if (packet instanceof PacketPlayOutSetSlot) {
PacketPlayOutSetSlot ssPacket = (PacketPlayOutSetSlot) packet;
Expand Down Expand Up @@ -187,6 +200,7 @@ private static boolean entityIsHiding(EntityPlayer player, int entityId) {
//// Packet Fields
///////////

private static final Field chat_message, chat_position;
private static final Field set_slot_windowId, set_slot_slotId, set_slot_itemStack;
private static final Field window_items_windowId, window_items_itemStackArray;
private static final Field named_spawn_entityId, named_spawn_entityUUID;
Expand All @@ -197,7 +211,11 @@ private static boolean entityIsHiding(EntityPlayer player, int entityId) {
private static final Field custom_name, custom_serializer;

static {
Map<String, Field> fields = PacketHelper.registerFields(PacketPlayOutSetSlot.class);
Map<String, Field> fields = PacketHelper.registerFields(PacketPlayOutChat.class);
chat_message = fields.get("a");
chat_position = fields.get("b");

fields = PacketHelper.registerFields(PacketPlayOutSetSlot.class);
set_slot_windowId = fields.get("a");
set_slot_slotId = fields.get("b");
set_slot_itemStack = fields.get("c");
Expand Down

0 comments on commit 0e8a605

Please sign in to comment.