Skip to content

Commit

Permalink
Add quit reason (SkriptLang#5763)
Browse files Browse the repository at this point in the history
* Add quit reason

* Cleanup

* Versioning
  • Loading branch information
TheLimeGlass authored and Moderocky committed Sep 16, 2023
1 parent ff16fbf commit 5cd52ca
Show file tree
Hide file tree
Showing 4 changed files with 157 additions and 58 deletions.
68 changes: 38 additions & 30 deletions src/main/java/ch/njol/skript/classes/data/BukkitClasses.java
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,7 @@
import org.bukkit.event.inventory.ClickType;
import org.bukkit.event.inventory.InventoryAction;
import org.bukkit.event.inventory.InventoryType;
import org.bukkit.event.player.PlayerQuitEvent.QuitReason;
import org.bukkit.event.player.PlayerResourcePackStatusEvent.Status;
import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause;
import org.bukkit.inventory.Inventory;
Expand Down Expand Up @@ -1458,29 +1459,29 @@ public String toVariableNameString(GameRule o) {
);

Classes.registerClass(new ClassInfo<>(EnchantmentOffer.class, "enchantmentoffer")
.user("enchant[ment][ ]offers?")
.name("Enchantment Offer")
.description("The enchantmentoffer in an enchant prepare event.")
.examples("on enchant prepare:",
"\tset enchant offer 1 to sharpness 1",
"\tset the cost of enchant offer 1 to 10 levels")
.since("2.5")
.parser(new Parser<EnchantmentOffer>() {
@Override
public boolean canParse(ParseContext context) {
return false;
}

@Override
public String toString(EnchantmentOffer eo, int flags) {
return EnchantmentType.toString(eo.getEnchantment(), flags) + " " + eo.getEnchantmentLevel();
}

@Override
public String toVariableNameString(EnchantmentOffer eo) {
return "offer:" + EnchantmentType.toString(eo.getEnchantment()) + "=" + eo.getEnchantmentLevel();
}
}));
.user("enchant[ment][ ]offers?")
.name("Enchantment Offer")
.description("The enchantmentoffer in an enchant prepare event.")
.examples("on enchant prepare:",
"\tset enchant offer 1 to sharpness 1",
"\tset the cost of enchant offer 1 to 10 levels")
.since("2.5")
.parser(new Parser<EnchantmentOffer>() {
@Override
public boolean canParse(ParseContext context) {
return false;
}
@Override
public String toString(EnchantmentOffer eo, int flags) {
return EnchantmentType.toString(eo.getEnchantment(), flags) + " " + eo.getEnchantmentLevel();
}
@Override
public String toVariableNameString(EnchantmentOffer eo) {
return "offer:" + EnchantmentType.toString(eo.getEnchantment()) + "=" + eo.getEnchantmentLevel();
}
}));

Classes.registerClass(new EnumClassInfo<>(Attribute.class, "attributetype", "attribute types")
.user("attribute ?types?")
Expand All @@ -1495,13 +1496,20 @@ public String toVariableNameString(EnchantmentOffer eo) {
.description("Represents the environment of a world.")
.since("2.7"));

if (Skript.classExists("io.papermc.paper.world.MoonPhase")) {
if (Skript.classExists("io.papermc.paper.world.MoonPhase"))
Classes.registerClass(new EnumClassInfo<>(MoonPhase.class, "moonphase", "moon phases")
.user("(lunar|moon) ?phases?")
.name("Moon Phase")
.description("Represents the phase of a moon.")
.since("2.7")
.requiredPlugins("Paper 1.16+"));
}
.user("(lunar|moon) ?phases?")
.name("Moon Phase")
.description("Represents the phase of a moon.")
.requiredPlugins("Paper 1.16+")
.since("2.7"));

if (Skript.classExists("org.bukkit.event.player.PlayerQuitEvent$QuitReason"))
Classes.registerClass(new EnumClassInfo<>(QuitReason.class, "quitreason", "quit reasons")
.user("(quit|disconnect) ?(reason|cause)s?")
.name("Quit Reason")
.description("Represents a quit reason from a player quit server event.")
.requiredPlugins("Paper 1.16.5+")
.since("INSERT VERSION"));
}
}
70 changes: 42 additions & 28 deletions src/main/java/ch/njol/skript/classes/data/BukkitEventValues.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,40 +18,24 @@
*/
package ch.njol.skript.classes.data;

import ch.njol.skript.Skript;
import ch.njol.skript.aliases.Aliases;
import ch.njol.skript.aliases.ItemType;
import ch.njol.skript.command.CommandEvent;
import ch.njol.skript.events.bukkit.ScriptEvent;
import ch.njol.skript.events.bukkit.SkriptStartEvent;
import ch.njol.skript.events.bukkit.SkriptStopEvent;
import ch.njol.skript.registrations.EventValues;
import ch.njol.skript.util.BlockStateBlock;
import ch.njol.skript.util.BlockUtils;
import ch.njol.skript.util.DelayedChangeBlock;
import ch.njol.skript.util.Direction;
import ch.njol.skript.util.EnchantmentType;
import ch.njol.skript.util.Getter;
import ch.njol.skript.util.slot.InventorySlot;
import ch.njol.skript.util.slot.Slot;
import com.destroystokyo.paper.event.block.AnvilDamagedEvent;
import com.destroystokyo.paper.event.entity.ProjectileCollideEvent;
import com.destroystokyo.paper.event.player.PlayerArmorChangeEvent;
import io.papermc.paper.event.entity.EntityMoveEvent;
import io.papermc.paper.event.player.PlayerInventorySlotChangeEvent;
import io.papermc.paper.event.player.PlayerTradeEvent;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import org.bukkit.Bukkit;
import org.bukkit.Chunk;
import org.bukkit.FireworkEffect;
import org.bukkit.GameMode;
import org.bukkit.Keyed;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.World;
import org.bukkit.GameMode;
import org.bukkit.block.Block;
import org.bukkit.block.BlockFace;
import org.bukkit.block.BlockState;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.AbstractVillager;
import org.bukkit.entity.Egg;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Firework;
Expand All @@ -62,7 +46,6 @@
import org.bukkit.entity.Player;
import org.bukkit.entity.Projectile;
import org.bukkit.entity.Vehicle;
import org.bukkit.entity.AbstractVillager;
import org.bukkit.event.block.BlockBreakEvent;
import org.bukkit.event.block.BlockCanBuildEvent;
import org.bukkit.event.block.BlockDamageEvent;
Expand Down Expand Up @@ -127,6 +110,8 @@
import org.bukkit.event.player.PlayerItemMendEvent;
import org.bukkit.event.player.PlayerMoveEvent;
import org.bukkit.event.player.PlayerPickupItemEvent;
import org.bukkit.event.player.PlayerQuitEvent;
import org.bukkit.event.player.PlayerQuitEvent.QuitReason;
import org.bukkit.event.player.PlayerRiptideEvent;
import org.bukkit.event.player.PlayerShearEntityEvent;
import org.bukkit.event.player.PlayerTeleportEvent;
Expand Down Expand Up @@ -154,10 +139,29 @@
import org.bukkit.potion.PotionEffectType;
import org.eclipse.jdt.annotation.Nullable;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import com.destroystokyo.paper.event.block.AnvilDamagedEvent;
import com.destroystokyo.paper.event.entity.ProjectileCollideEvent;
import com.destroystokyo.paper.event.player.PlayerArmorChangeEvent;

import ch.njol.skript.Skript;
import ch.njol.skript.aliases.Aliases;
import ch.njol.skript.aliases.ItemType;
import ch.njol.skript.command.CommandEvent;
import ch.njol.skript.events.bukkit.ScriptEvent;
import ch.njol.skript.events.bukkit.SkriptStartEvent;
import ch.njol.skript.events.bukkit.SkriptStopEvent;
import ch.njol.skript.registrations.EventValues;
import ch.njol.skript.util.BlockStateBlock;
import ch.njol.skript.util.BlockUtils;
import ch.njol.skript.util.DelayedChangeBlock;
import ch.njol.skript.util.Direction;
import ch.njol.skript.util.EnchantmentType;
import ch.njol.skript.util.Getter;
import ch.njol.skript.util.slot.InventorySlot;
import ch.njol.skript.util.slot.Slot;
import io.papermc.paper.event.entity.EntityMoveEvent;
import io.papermc.paper.event.player.PlayerInventorySlotChangeEvent;
import io.papermc.paper.event.player.PlayerTradeEvent;

/**
* @author Peter Güttinger
Expand Down Expand Up @@ -1644,5 +1648,15 @@ public Location get(LootGenerateEvent event) {
}
}, EventValues.TIME_NOW);
}

//PlayerQuitEvent
if (Skript.classExists("org.bukkit.event.player.PlayerQuitEvent$QuitReason"))
EventValues.registerEventValue(PlayerQuitEvent.class, QuitReason.class, new Getter<QuitReason, PlayerQuitEvent>() {
@Override
@Nullable
public QuitReason get(PlayerQuitEvent event) {
return event.getReason();
}
}, EventValues.TIME_NOW);
}
}
69 changes: 69 additions & 0 deletions src/main/java/ch/njol/skript/expressions/ExprQuitReason.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
/**
* This file is part of Skript.
*
* Skript is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Skript is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Skript. If not, see <http://www.gnu.org/licenses/>.
*
* Copyright Peter Güttinger, SkriptLang team and contributors
*/
package ch.njol.skript.expressions;

import org.bukkit.event.Event;
import org.bukkit.event.player.PlayerQuitEvent.QuitReason;
import org.eclipse.jdt.annotation.Nullable;

import ch.njol.skript.Skript;
import ch.njol.skript.doc.Description;
import ch.njol.skript.doc.Examples;
import ch.njol.skript.doc.Name;
import ch.njol.skript.doc.RequiredPlugins;
import ch.njol.skript.doc.Since;
import ch.njol.skript.expressions.base.EventValueExpression;
import ch.njol.skript.lang.ExpressionType;
import ch.njol.skript.registrations.EventValues;

@Name("Quit Reason")
@Description("The <a href='classes.html#quitreason'>quit reason</a> as to why a player disconnected in a <a href='events.html#quit'>quit</a> event.")
@Examples({
"on quit:",
"\tquit reason was kicked",
"\tplayer is banned",
"\tclear {server::player::%uuid of player%::*}"
})
@RequiredPlugins("Paper 1.16.5+")
@Since("INSERT VERSION")
public class ExprQuitReason extends EventValueExpression<QuitReason> {

static {
if (Skript.classExists("org.bukkit.event.player.PlayerQuitEvent$QuitReason"))
Skript.registerExpression(ExprQuitReason.class, QuitReason.class, ExpressionType.SIMPLE, "[the] (quit|disconnect) (cause|reason)");
}

public ExprQuitReason() {
super(QuitReason.class);
}

// Allow for 'the quit reason was ...' as that's proper grammar support for this event value.
@Override
public boolean setTime(int time) {
if (time == EventValues.TIME_FUTURE)
return super.setTime(time);
return true;
}

@Override
public String toString(@Nullable Event event, boolean debug) {
return "quit reason";
}

}
8 changes: 8 additions & 0 deletions src/main/resources/lang/default.lang
Original file line number Diff line number Diff line change
Expand Up @@ -1933,6 +1933,13 @@ moon phases:
waxing_crescent: waxing crescent
waxing_gibbous: waxing gibbous

# -- Quit Reasons --
quit reasons:
disconnected: disconnected, quit
erroneous_state: erroneous, erroneous state
kicked: kicked
timed_out: timed out

# -- Boolean --
boolean:
true:
Expand Down Expand Up @@ -2001,6 +2008,7 @@ types:
resourcepackstate: resource pack state¦s @a
gene: panda gene¦s @a
gamerulevalue: gamerule value¦s @a
quitreason: quit reason¦s @a

# Skript
weathertype: weather type¦s @a
Expand Down

0 comments on commit 5cd52ca

Please sign in to comment.