Skip to content

Commit

Permalink
Add "player steers entity" event http://one.denizenscript.com/haste/3…
Browse files Browse the repository at this point in the history
  • Loading branch information
Morphan1 committed Sep 15, 2016
1 parent cb3a236 commit b424a44
Show file tree
Hide file tree
Showing 3 changed files with 149 additions and 0 deletions.
1 change: 1 addition & 0 deletions plugin/src/main/java/net/aufdemrand/denizen/Denizen.java
Expand Up @@ -702,6 +702,7 @@ public void onEnable() {
ScriptEvent.registerScriptEvent(new PlayerSneakScriptEvent());
ScriptEvent.registerScriptEvent(new PlayerSprintScriptEvent());
ScriptEvent.registerScriptEvent(new PlayerStatisticIncrementsScriptEvent());
ScriptEvent.registerScriptEvent(new PlayerSteersEntityScriptEvent());
ScriptEvent.registerScriptEvent(new PlayerStepsOnScriptEvent());
ScriptEvent.registerScriptEvent(new PlayerSwapsItemsScriptEvent());
ScriptEvent.registerScriptEvent(new PlayerTakesFromFurnaceScriptEvent());
Expand Down
@@ -0,0 +1,107 @@
package net.aufdemrand.denizen.events.player;

import net.aufdemrand.denizen.BukkitScriptEntryData;
import net.aufdemrand.denizen.events.BukkitScriptEvent;
import net.aufdemrand.denizen.objects.dEntity;
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 PlayerSteersEntityScriptEvent extends BukkitScriptEvent {

// <--[event]
// @Events
// player steers entity (in <area>)
// player steers <entity> (in <area>)
//
// @Regex ^on player steers [^\s]+( in ((notable (cuboid|ellipsoid))|([^\s]+)))?$
//
// @Cancellable true
//
// @Triggers when a player attempts to steer an entity.
//
// @Context
// <context.entity> returns the dEntity being steered by the player.
// <context.sideways> returns an Element(Decimal) where a positive number signifies leftward movement.
// <context.forward> returns an Element(Decimal) where a positive number signifies forward movement.
// <context.jump> returns an Element(Boolean) that signifies whether the player is attempting to jump with the entity.
// <context.dismount> returns an Element(Boolean) that signifies whether the player is attempting to dismount.
//
// -->

public PlayerSteersEntityScriptEvent() {
instance = this;
}

public static PlayerSteersEntityScriptEvent instance;
public boolean enabled;
public dEntity entity;
public dPlayer player;
public Element sideways;
public Element forward;
public Element jump;
public Element dismount;

@Override
public boolean couldMatch(ScriptContainer scriptContainer, String s) {
return CoreUtilities.getXthArg(1, CoreUtilities.toLowerCase(s)).startsWith("steers");
}

@Override
public boolean matches(ScriptContainer scriptContainer, String s) {
String lower = CoreUtilities.toLowerCase(s);
String entityName = CoreUtilities.getXthArg(2, lower);
if (!tryEntity(entity, entityName)) {
return false;
}
return runInCheck(scriptContainer, s, lower, entity.getLocation());
}

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

@Override
public void init() {
enabled = true;
}

@Override
public void destroy() {
enabled = false;
}

@Override
public boolean applyDetermination(ScriptContainer container, String determination) {
return super.applyDetermination(container, determination);
}

@Override
public ScriptEntryData getScriptEntryData() {
return new BukkitScriptEntryData(player, entity.isCitizensNPC() ? entity.getDenizenNPC() : null);
}

@Override
public dObject getContext(String name) {
if (name.equals("entity")) {
return entity;
}
else if (name.equals("sideways")) {
return sideways;
}
else if (name.equals("forward")) {
return forward;
}
else if (name.equals("jump")) {
return jump;
}
else if (name.equals("dismount")) {
return dismount;
}
return super.getContext(name);
}
}
@@ -1,6 +1,8 @@
package net.aufdemrand.denizen.utilities.packets.intercept;

import net.aufdemrand.denizen.events.player.PlayerSteersEntityScriptEvent;
import net.aufdemrand.denizen.events.player.ResourcePackStatusScriptEvent;
import net.aufdemrand.denizen.objects.dEntity;
import net.aufdemrand.denizen.objects.dPlayer;
import net.aufdemrand.denizen.utilities.DenizenAPI;
import net.aufdemrand.denizen.utilities.debugging.dB;
Expand All @@ -9,6 +11,7 @@
import net.minecraft.server.v1_10_R1.*;
import net.minecraft.server.v1_10_R1.PacketPlayInResourcePackStatus.EnumResourcePackStatus;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
Expand All @@ -17,6 +20,9 @@
import java.lang.reflect.Field;
import java.util.List;
import java.util.Map;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;

public class DenizenPacketListener extends AbstractListenerPlayIn {

Expand Down Expand Up @@ -79,6 +85,41 @@ public void run() {
super.a(packet);
}

@Override
public void a(final PacketPlayInSteerVehicle packet) {
if (PlayerSteersEntityScriptEvent.instance.enabled) {
Future<Boolean> future = Bukkit.getScheduler().callSyncMethod(DenizenAPI.getCurrentInstance(),
new Callable<Boolean>() {
@Override
public Boolean call() throws Exception {
PlayerSteersEntityScriptEvent event = PlayerSteersEntityScriptEvent.instance;
Player pl = player.getBukkitEntity();
event.player = dPlayer.mirrorBukkitPlayer(pl);
event.entity = pl.isInsideVehicle() ? new dEntity(pl.getVehicle()) : null;
event.sideways = new Element(packet.a());
event.forward = new Element(packet.b());
event.jump = new Element(packet.c());
event.dismount = new Element(packet.d());
event.fire();
return event.cancelled;
}
}
);
try {
if (future.get()) {
return;
}
}
catch (InterruptedException e) {
e.printStackTrace();
}
catch (ExecutionException e) {
e.printStackTrace();
}
}
super.a(packet);
}

// For compatibility with other plugins using Reflection weirdly...
@Override
public void sendPacket(Packet packet) {
Expand Down

0 comments on commit b424a44

Please sign in to comment.