Skip to content
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,9 @@ public static void init() {
ScriptEvent.registerScriptEvent(TNTPrimesScriptEvent.class);
}
ScriptEvent.registerScriptEvent(UnknownCommandScriptEvent.class);
if (NMSHandler.getVersion().isAtLeast(NMSVersion.v1_21)) {
ScriptEvent.registerScriptEvent(VaultChangesStateScriptEvent.class);
}
if (NMSHandler.getVersion().isAtLeast(NMSVersion.v1_19)) {
ScriptEvent.registerScriptEvent(WardenChangesAngerLevelScriptEvent.class);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
package com.denizenscript.denizen.paper.events;

import com.denizenscript.denizen.events.BukkitScriptEvent;
import com.denizenscript.denizen.objects.LocationTag;
import com.denizenscript.denizen.utilities.implementation.BukkitScriptEntryData;
import com.denizenscript.denizencore.objects.ObjectTag;
import com.denizenscript.denizencore.objects.core.ElementTag;
import com.denizenscript.denizencore.scripts.ScriptEntryData;
import io.papermc.paper.event.block.VaultChangeStateEvent;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;

public class VaultChangesStateScriptEvent extends BukkitScriptEvent implements Listener {

// <--[event]
// @Events
// vault changes state
//
// @Plugin Paper
//
// @Group Block
//
// @Cancellable true
//
// @Location true
//
// @Triggers when a vault block's state changes. A list of states can be found at <@link url https://hub.spigotmc.org/javadocs/spigot/org/bukkit/block/data/type/Vault.State.html>.
//
// @Context
// <context.location> returns the LocationTag of the vault block.
// <context.old_state> returns the vault state before the change.
// <context.new_state> returns the vault state after the change.
//
// @Player when the entity who triggered the change is a player.
//
// -->

public VaultChangesStateScriptEvent() {
registerCouldMatcher("vault changes state");
}

public LocationTag location;
public VaultChangeStateEvent event;

@Override
public boolean matches(ScriptPath path) {
if (!runInCheck(path, location)) {
return false;
}
return super.matches(path);
}

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

@Override
public ObjectTag getContext(String name) {
return switch (name) {
case "old_state" -> new ElementTag(event.getCurrentState());
case "new_state" -> new ElementTag(event.getNewState());
case "location" -> location;
default -> super.getContext(name);
};
}

@EventHandler
public void onVaultChangesStateEvent(VaultChangeStateEvent event) {
location = new LocationTag(event.getBlock().getLocation());
this.event = event;
fire(event);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -80,26 +80,34 @@ public static void registerMainEvents() {
ScriptEvent.registerScriptEvent(BlockShearEntityScriptEvent.class);
ScriptEvent.registerScriptEvent(BlockSpreadsScriptEvent.class);
ScriptEvent.registerScriptEvent(BrewingStandFueledScriptEvent.class);
if (NMSHandler.getVersion().isAtLeast(NMSVersion.v1_19)) {
ScriptEvent.registerScriptEvent(BrewingStartsScriptEvent.class);
}
ScriptEvent.registerScriptEvent(BrewsScriptEvent.class);
ScriptEvent.registerScriptEvent(CauldronLevelChangeScriptEvent.class);
if (NMSHandler.getVersion().isAtLeast(NMSVersion.v1_21)) {
ScriptEvent.registerScriptEvent(CrafterCraftsScriptEvent.class);
}
ScriptEvent.registerScriptEvent(DragonEggMovesScriptEvent.class);
ScriptEvent.registerScriptEvent(FurnaceBurnsItemScriptEvent.class);
ScriptEvent.registerScriptEvent(FurnaceStartsSmeltingScriptEvent.class);
ScriptEvent.registerScriptEvent(LeafDecaysScriptEvent.class);
ScriptEvent.registerScriptEvent(LiquidLevelChangeScriptEvent.class);
ScriptEvent.registerScriptEvent(LiquidSpreadScriptEvent.class);
if (NMSHandler.getVersion().isAtLeast(NMSVersion.v1_21)) {
ScriptEvent.registerScriptEvent(LootDispensesFromBlockScriptEvent.class);
}
ScriptEvent.registerScriptEvent(MoistureChangeScriptEvent.class);
ScriptEvent.registerScriptEvent(NoteBlockPlaysNoteScriptEvent.class);
ScriptEvent.registerScriptEvent(PistonExtendsScriptEvent.class);
ScriptEvent.registerScriptEvent(PistonRetractsScriptEvent.class);
ScriptEvent.registerScriptEvent(RedstoneScriptEvent.class);
ScriptEvent.registerScriptEvent(SpongeAbsorbsScriptEvent.class);
if (NMSHandler.getVersion().isAtLeast(NMSVersion.v1_19)) {
ScriptEvent.registerScriptEvent(BrewingStartsScriptEvent.class);
ScriptEvent.registerScriptEvent(TNTPrimesScriptEvent.class);
}
if (NMSHandler.getVersion().isAtLeast(NMSVersion.v1_21)) {
ScriptEvent.registerScriptEvent(CrafterCraftsScriptEvent.class);
ScriptEvent.registerScriptEvent(VaultDisplayItemScriptEvent.class);
}

// Entity events
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ public class BlockDispensesScriptEvent extends BukkitScriptEvent implements List
//
// @Cancellable true
//
// @Triggers when a block dispenses an item.
// @Triggers when a block dispenses a single item.
//
// @Context
// <context.location> returns the LocationTag of the dispenser.
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
package com.denizenscript.denizen.events.block;

import com.denizenscript.denizen.events.BukkitScriptEvent;
import com.denizenscript.denizen.objects.*;
import com.denizenscript.denizen.utilities.implementation.BukkitScriptEntryData;
import com.denizenscript.denizencore.objects.ObjectTag;
import com.denizenscript.denizencore.objects.core.ListTag;
import com.denizenscript.denizencore.scripts.ScriptEntryData;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.BlockDispenseLootEvent;
import org.bukkit.inventory.ItemStack;

import java.util.ArrayList;
import java.util.List;

public class LootDispensesFromBlockScriptEvent extends BukkitScriptEvent implements Listener {

// <--[event]
// @Events
// loot dispenses from <block>
//
// @Group Block
//
// @Location true
//
// @Cancellable true
//
// @Player When a player triggered the loot to dispense.
//
// @Triggers when a block dispenses loot containing multiple items.
//
// @Context
// <context.loot> returns a ListTag(ItemTag) of loot items.
// <context.location> returns a LocationTag of the block that is dispensing the items.
//
// @Determine
// "LOOT:<ListTag(ItemTag)>" to determine the new items that are outputted.
//
// -->

public LootDispensesFromBlockScriptEvent() {
registerCouldMatcher("loot dispenses from <block>");
this.<LootDispensesFromBlockScriptEvent, ListTag>registerDetermination("loot", ListTag.class, (evt, context, input) -> {
List<ItemStack> items = new ArrayList<>(input.size());
for (ItemTag item : input.filter(ItemTag.class, context)) {
items.add(item.getItemStack());
}
evt.event.setDispensedLoot(items);
});
}

public MaterialTag block;
public LocationTag location;
public BlockDispenseLootEvent event;

@Override
public boolean matches(ScriptPath path) {
if (!path.tryArgObject(3, block)) {
return false;
}
if (!runInCheck(path, location)) {
return false;
}
return super.matches(path);
}

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

@Override
public ObjectTag getContext(String name) {
return switch (name) {
case "loot" -> new ListTag(event.getDispensedLoot(), ItemTag::new);
case "location" -> location;
default -> super.getContext(name);
};
}

@EventHandler
public void onLootDispensesFromBlock(BlockDispenseLootEvent event) {
block = new MaterialTag(event.getBlock().getType());
location = new LocationTag(event.getBlock().getLocation());
this.event = event;
fire(event);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
package com.denizenscript.denizen.events.block;

import com.denizenscript.denizen.events.BukkitScriptEvent;
import com.denizenscript.denizen.objects.ItemTag;
import com.denizenscript.denizen.objects.LocationTag;
import com.denizenscript.denizencore.objects.ObjectTag;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.VaultDisplayItemEvent;

public class VaultDisplayItemScriptEvent extends BukkitScriptEvent implements Listener {

// <--[event]
// @Events
// vault displays <item>
//
// @Group Block
//
// @Location true
//
// @Cancellable true
//
// @Triggers when a vault block displays an item.
//
// @Context
// <context.location> returns the LocationTag of the vault block.
// <context.item> returns the ItemTag being displayed.
//
// @Determine
// "ITEM:<ItemTag>" to set the item being displayed.
//
// -->

public VaultDisplayItemScriptEvent() {
registerCouldMatcher("vault displays <item>");
this.<VaultDisplayItemScriptEvent, ItemTag>registerDetermination("item", ItemTag.class, (evt, context, input) -> {
evt.event.setDisplayItem(input.getItemStack());
});
}

public LocationTag location;
public VaultDisplayItemEvent event;
public ItemTag item;

@Override
public boolean matches(ScriptPath path) {
if (!runInCheck(path, location)) {
return false;
}
if (!path.tryArgObject(2, item)) {
return false;
}
return super.matches(path);
}

@Override
public ObjectTag getContext(String name) {
return switch (name) {
case "item" -> new ItemTag(event.getDisplayItem());
case "location" -> location;
default -> super.getContext(name);
};
}

@EventHandler
public void onVaultDisplayItemEvent(VaultDisplayItemEvent event) {
location = new LocationTag(event.getBlock().getLocation());
item = new ItemTag(event.getDisplayItem());
this.event = event;
fire(event);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -296,6 +296,9 @@ public static void registerMainProperties() {
PropertyParser.registerProperty(MaterialLightable.class, MaterialTag.class);
PropertyParser.registerProperty(MaterialMode.class, MaterialTag.class);
PropertyParser.registerProperty(MaterialNote.class, MaterialTag.class);
if (NMSHandler.getVersion().isAtLeast(NMSVersion.v1_21)) {
PropertyParser.registerProperty(MaterialOminous.class, MaterialTag.class);
}
PropertyParser.registerProperty(MaterialPersistent.class, MaterialTag.class);
PropertyParser.registerProperty(MaterialPower.class, MaterialTag.class);
PropertyParser.registerProperty(MaterialShape.class, MaterialTag.class);
Expand Down
Loading