Skip to content

Commit

Permalink
add player spectates entity and stops events, fixes #2068
Browse files Browse the repository at this point in the history
  • Loading branch information
mcmonkey4eva committed Nov 10, 2019
1 parent 77c9783 commit 630aee4
Show file tree
Hide file tree
Showing 4 changed files with 174 additions and 3 deletions.
@@ -1,8 +1,6 @@
package com.denizenscript.denizen.paper;

import com.denizenscript.denizen.paper.events.PlayerEquipsArmorScriptEvent;
import com.denizenscript.denizen.paper.events.PlayerJumpsPaperScriptEventImpl;
import com.denizenscript.denizen.paper.events.TNTPrimesScriptEvent;
import com.denizenscript.denizen.paper.events.*;
import com.denizenscript.denizen.utilities.debugging.Debug;
import com.denizenscript.denizencore.events.ScriptEvent;

Expand All @@ -12,6 +10,8 @@ public static void init() {
Debug.log("Loading Paper support module...");
ScriptEvent.registerScriptEvent(new PlayerEquipsArmorScriptEvent());
ScriptEvent.registerScriptEvent(new PlayerJumpsPaperScriptEventImpl());
ScriptEvent.registerScriptEvent(new PlayerSpectatesEntityScriptEvent());
ScriptEvent.registerScriptEvent(new PlayerStopsSpectatingScriptEvent());
ScriptEvent.registerScriptEvent(new TNTPrimesScriptEvent());
}
}
@@ -0,0 +1,86 @@
package com.denizenscript.denizen.paper.events;

import com.denizenscript.denizen.events.BukkitScriptEvent;
import com.denizenscript.denizen.objects.EntityTag;
import com.denizenscript.denizen.objects.PlayerTag;
import com.denizenscript.denizen.utilities.implementation.BukkitScriptEntryData;
import com.denizenscript.denizencore.objects.ObjectTag;
import com.denizenscript.denizencore.scripts.ScriptEntryData;
import com.destroystokyo.paper.event.player.PlayerStartSpectatingEntityEvent;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;

public class PlayerSpectatesEntityScriptEvent extends BukkitScriptEvent implements Listener {

// <--[event]
// @Events
// player spectates <entity>
//
// @Regex ^on player spectates [^]s+$
//
// @Switch in <area>
//
// @Plugin Paper
//
// @Cancellable true
//
// @Triggers when a player starts spectating an entity.
//
// @Context
// <context.entity> returns the entity that is being spectated.
// <context.old_entity> returns the entity that was previously being spectated (or the player themself if they weren't spectating anything).
//
// @Player Always.
//
// -->

public PlayerSpectatesEntityScriptEvent() {
instance = this;
}

public static PlayerSpectatesEntityScriptEvent instance;
public PlayerStartSpectatingEntityEvent event;

@Override
public boolean couldMatch(ScriptPath path) {
return path.eventLower.startsWith("player spectates ");
}

@Override
public boolean matches(ScriptPath path) {
if (!tryEntity(new EntityTag(event.getNewSpectatorTarget()), path.eventArgLowerAt(2))) {
return false;
}
if (!runInCheck(path, event.getPlayer().getLocation())) {
return false;
}
return true;
}

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

@Override
public ScriptEntryData getScriptEntryData() {
return new BukkitScriptEntryData(new PlayerTag(event.getPlayer()), null);
}

@Override
public ObjectTag getContext(String name) {
if (name.equals("entity")) {
return new EntityTag(event.getNewSpectatorTarget());
}
else if (name.equals("old_entity")) {
return new EntityTag(event.getCurrentSpectatorTarget());
}
return super.getContext(name);
}

@EventHandler
public void playerSpectateEvent(PlayerStartSpectatingEntityEvent event) {
this.event = event;
fire(event);
}
}
@@ -0,0 +1,82 @@
package com.denizenscript.denizen.paper.events;

import com.denizenscript.denizen.events.BukkitScriptEvent;
import com.denizenscript.denizen.objects.EntityTag;
import com.denizenscript.denizen.objects.PlayerTag;
import com.denizenscript.denizen.utilities.implementation.BukkitScriptEntryData;
import com.denizenscript.denizencore.objects.ObjectTag;
import com.denizenscript.denizencore.scripts.ScriptEntryData;
import com.destroystokyo.paper.event.player.PlayerStopSpectatingEntityEvent;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;

public class PlayerStopsSpectatingScriptEvent extends BukkitScriptEvent implements Listener {

// <--[event]
// @Events
// player stops spectating (<entity>)
//
// @Regex ^on player stops spectating( [\^s]+)?$
//
// @Switch in <area>
//
// @Plugin Paper
//
// @Cancellable true
//
// @Triggers when a player stops spectating an entity.
//
// @Context
// <context.entity> returns the entity that was being spectated.
//
// @Player Always.
//
// -->

public PlayerStopsSpectatingScriptEvent() {
instance = this;
}

public static PlayerStopsSpectatingScriptEvent instance;
public PlayerStopSpectatingEntityEvent event;

@Override
public boolean couldMatch(ScriptPath path) {
return path.eventLower.startsWith("player stops spectating");
}

@Override
public boolean matches(ScriptPath path) {
if (path.eventArgLowerAt(3).length() > 0 && !tryEntity(new EntityTag(event.getSpectatorTarget()), path.eventArgLowerAt(3))) {
return false;
}
if (!runInCheck(path, event.getPlayer().getLocation())) {
return false;
}
return true;
}

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

@Override
public ScriptEntryData getScriptEntryData() {
return new BukkitScriptEntryData(new PlayerTag(event.getPlayer()), null);
}

@Override
public ObjectTag getContext(String name) {
if (name.equals("entity")) {
return new EntityTag(event.getSpectatorTarget());
}
return super.getContext(name);
}

@EventHandler
public void playerSpectateEvent(PlayerStopSpectatingEntityEvent event) {
this.event = event;
fire(event);
}
}
Expand Up @@ -33,6 +33,9 @@ public class TNTPrimesScriptEvent extends BukkitScriptEvent implements Listener
// <context.entity> returns the entity that primed the TNT, if any.
// <context.location> returns the location of the TNT block being primed.
// <context.reason> returns the reason the TNT was primed. Refer to <@link url https://papermc.io/javadocs/paper/com/destroystokyo/paper/event/block/TNTPrimeEvent.PrimeReason.html>
//
// @Player when the priming entity is a player.
//
// -->

public TNTPrimesScriptEvent() {
Expand Down

0 comments on commit 630aee4

Please sign in to comment.