Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion src/main/java/ch/njol/skript/Skript.java
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,7 @@
import org.skriptlang.skript.bukkit.input.InputModule;
import org.skriptlang.skript.bukkit.log.runtime.BukkitRuntimeErrorConsumer;
import org.skriptlang.skript.bukkit.loottables.LootTableModule;
import org.skriptlang.skript.bukkit.portal.PortalModule;
import org.skriptlang.skript.bukkit.registration.BukkitRegistryKeys;
import org.skriptlang.skript.bukkit.registration.BukkitSyntaxInfos;
import org.skriptlang.skript.bukkit.tags.TagModule;
Expand Down Expand Up @@ -587,7 +588,7 @@ public void onEnable() {
TagModule.load();
FurnaceModule.load();
LootTableModule.load();
skript.loadModules(new DamageSourceModule());
skript.loadModules(new DamageSourceModule(), new PortalModule());
} catch (final Exception e) {
exception(e, "Could not load required .class files: " + e.getLocalizedMessage());
setEnabled(false);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1632,5 +1632,12 @@ public String toVariableNameString(WorldBorder border) {
.since("2.12")
);

Classes.registerClass(new EnumClassInfo<>(PortalType.class, "portaltype", "portal types")
.user("portal ?types?")
.name("Portal Type")
.description("Represents the type of a portal.")
.since("INSERT VERSION")
);

}
}
Original file line number Diff line number Diff line change
Expand Up @@ -510,14 +510,6 @@ else if (hand == EquipmentSlot.OFF_HAND)
EventValues.registerEventValue(InventoryPickupItemEvent.class, Inventory.class, InventoryPickupItemEvent::getInventory);
EventValues.registerEventValue(InventoryPickupItemEvent.class, Item.class, InventoryPickupItemEvent::getItem);
EventValues.registerEventValue(InventoryPickupItemEvent.class, ItemStack.class, event -> event.getItem().getItemStack());
//PortalCreateEvent
EventValues.registerEventValue(PortalCreateEvent.class, World.class, WorldEvent::getWorld);
EventValues.registerEventValue(PortalCreateEvent.class, Block[].class, event -> event.getBlocks().stream()
.map(BlockState::getBlock)
.toArray(Block[]::new));
if (Skript.methodExists(PortalCreateEvent.class, "getEntity")) { // Minecraft 1.14+
EventValues.registerEventValue(PortalCreateEvent.class, Entity.class, PortalCreateEvent::getEntity);
}
//PlayerEditBookEvent
EventValues.registerEventValue(PlayerEditBookEvent.class, ItemStack.class, event -> {
ItemStack book = new ItemStack(Material.WRITABLE_BOOK);
Expand Down
57 changes: 0 additions & 57 deletions src/main/java/ch/njol/skript/events/EvtPortal.java

This file was deleted.

10 changes: 0 additions & 10 deletions src/main/java/ch/njol/skript/events/SimpleEvents.java
Original file line number Diff line number Diff line change
Expand Up @@ -116,10 +116,6 @@ public class SimpleEvents {
.examples("on explosion:")
.since("1.0");
// Skript.registerEvent(SimpleEvent.class, EntityInteractEvent.class, "interact");// = entity interacts with block, e.g. endermen?; player -> PlayerInteractEvent // likely tripwires, pressure plates, etc.
Skript.registerEvent("Portal Enter", SimpleEvent.class, EntityPortalEnterEvent.class, "portal enter[ing]", "entering [a] portal")
.description("Called when an entity enters a nether portal or an end portal. Please note that this event will be fired many times for a nether portal.")
.examples("on portal enter:")
.since("1.0");
Skript.registerEvent("Tame", SimpleEvent.class, EntityTameEvent.class, "[entity] tam(e|ing)")
.description("Called when a player tames a wolf or ocelot. Can be cancelled to prevent the entity from being tamed.")
.examples("on tame:")
Expand Down Expand Up @@ -221,12 +217,6 @@ public class SimpleEvents {
" player is not sprinting",
" send \"Run!\"")
.since("1.0");
Skript.registerEvent("Portal Create", SimpleEvent.class, PortalCreateEvent.class, "portal creat(e|ion)")
.description("Called when a portal is created, either by a player or mob lighting an obsidian frame on fire, or by a nether portal creating its teleportation target in the nether/overworld.",
"In Minecraft 1.14+, you can use <a href='#ExprEntity'>the player</a> in this event.", "Please note that there may not always be a player (or other entity) in this event.")
.examples("on portal create:")
.requiredPlugins("Minecraft 1.14+ (event-entity support)")
.since("1.0, 2.5.3 (event-entity support)");
Skript.registerEvent("Projectile Hit", SimpleEvent.class, ProjectileHitEvent.class, "projectile hit")
.description("Called when a projectile hits an entity or a block.")
.examples("on projectile hit:",
Expand Down
100 changes: 0 additions & 100 deletions src/main/java/ch/njol/skript/expressions/ExprPortal.java

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
package org.skriptlang.skript.bukkit.portal;

import org.bukkit.Location;
import org.bukkit.PortalType;
import org.bukkit.block.Block;
import org.bukkit.block.BlockState;
import org.bukkit.entity.Entity;
import org.bukkit.event.entity.EntityPortalEnterEvent;
import org.bukkit.event.entity.EntityPortalExitEvent;
import org.bukkit.event.world.PortalCreateEvent;
import org.bukkit.util.Vector;

import java.io.IOException;

import ch.njol.skript.Skript;
import ch.njol.skript.lang.util.SimpleEvent;
import ch.njol.skript.registrations.EventConverter;
import ch.njol.skript.registrations.EventValues;
import org.skriptlang.skript.addon.AddonModule;
import org.skriptlang.skript.addon.SkriptAddon;

public class PortalModule implements AddonModule {

@Override
public void load(SkriptAddon addon) {
try {
Skript.getAddonInstance().loadClasses("org.skriptlang.skript.bukkit.portal", "elements");
} catch (IOException e) {
throw new RuntimeException(e);
}

Skript.registerEvent("Portal Create", SimpleEvent.class, PortalCreateEvent.class, "portal creat(e|ion)")
.description("Called when a portal is created, either by a player or mob lighting an obsidian frame on fire, or by a nether portal creating its teleportation target in the nether/overworld.",
"In Minecraft 1.14+, you can use <a href='#ExprEntity'>the player</a> in this event.", "Please note that there may not always be a player (or other entity) in this event.")
.examples("on portal create:")
.since("1.0, 2.5.3 (event-entity support), INSERT VERSION (event-portaltype support)");
EventValues.registerEventValue(PortalCreateEvent.class, Block[].class, event -> event.getBlocks().stream()
.map(BlockState::getBlock)
.toArray(Block[]::new));
EventValues.registerEventValue(PortalCreateEvent.class, Entity.class, PortalCreateEvent::getEntity);
EventValues.registerEventValue(PortalCreateEvent.class, PortalType.class, event -> switch (event.getReason()) {
case END_PLATFORM -> PortalType.ENDER;
case FIRE, NETHER_PAIR -> PortalType.NETHER;
});

Skript.registerEvent("Portal Enter", SimpleEvent.class, EntityPortalEnterEvent.class, "portal enter[ing]", "entering [a] portal")
.description("Called when an entity enters a nether portal or an end portal. Please note that this event will be fired many times for a nether portal.")
.examples(
"on portal enter:",
"\tbroadcast \"%event-entity% is entering a %event-portaltype% at %event-location%\"")
.since("1.0, INSERT VERSION (event values)");
EventValues.registerEventValue(EntityPortalEnterEvent.class, Location.class, EntityPortalEnterEvent::getLocation);
EventValues.registerEventValue(EntityPortalEnterEvent.class, PortalType.class, EntityPortalEnterEvent::getPortalType);

Skript.registerEvent("Portal Exit", SimpleEvent.class, EntityPortalExitEvent.class, "portal exit[ing]", "exiting [a] portal")
.description("Called when an entity exits a nether portal or an end portal. Note that this event does not get called on players.")
.examples(
"on portal exit:",
"\tbroadcast \"%event-entity% is exiting a portal at %event-location%\"",
"\tadd 2 to vector y of event-vector")
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

needs explanation for what event-vector is

.since("INSERT VERSION");
EventValues.registerEventValue(EntityPortalExitEvent.class, Vector.class, EntityPortalExitEvent::getBefore, EventValues.TIME_PAST);
EventValues.registerEventValue(EntityPortalExitEvent.class, Vector.class, new EventConverter<>() {
@Override
public void set(EntityPortalExitEvent event, Vector vector) {
event.setAfter(vector);
}

@Override
public Vector convert(EntityPortalExitEvent event) {
return event.getAfter();
}
});
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
package org.skriptlang.skript.bukkit.portal.elements;

import com.destroystokyo.paper.event.entity.EntityTeleportEndGatewayEvent;
import com.destroystokyo.paper.event.player.PlayerTeleportEndGatewayEvent;
import org.bukkit.PortalType;
import org.bukkit.event.Event;
import org.bukkit.event.entity.EntityPortalEvent;
import org.bukkit.event.player.PlayerPortalEvent;
import org.jetbrains.annotations.Nullable;

import ch.njol.skript.Skript;
import ch.njol.skript.lang.Literal;
import ch.njol.skript.lang.SkriptEvent;
import ch.njol.skript.lang.SkriptParser.ParseResult;
import ch.njol.skript.registrations.EventValues;
import ch.njol.util.coll.CollectionUtils;

public class EvtPortal extends SkriptEvent {

static {
Class<? extends Event>[] events = CollectionUtils.array(
PlayerPortalEvent.class, EntityPortalEvent.class, PlayerTeleportEndGatewayEvent.class,
EntityTeleportEndGatewayEvent.class
);
Skript.registerEvent("Portal / End Gateway", EvtPortal.class, events, "[player] portal", "entity portal")
.description(
"Called when a player or an entity uses a nether portal, end portal or end gateway. Note that events with keyword 'entity' does not apply to players.",
"<a href='#EffCancelEvent'>Cancel the event</a> to prevent the entity from teleporting."
).keywords(
"player", "entity"
).examples(
"on portal:",
"\tbroadcast \"%player% has entered a %event-portaltype%!\"",
"",
"on player portal:",
"\tplayer's world is world(\"wilderness\")",
"\tset world of event-location to player's world",
"\tadd 9000 to x-pos of event-location",
"",
"on entity portal:",
"\tbroadcast \"A %type of event-entity% has entered a portal!"
).since("1.0, 2.5.3 (entities), INSERT VERSION (location changers, end gateway)");
Comment on lines +25 to +42
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Skript.registerEvent("Portal / End Gateway", EvtPortal.class, events, "[player] portal", "entity portal")
.description(
"Called when a player or an entity uses a nether portal, end portal or end gateway. Note that events with keyword 'entity' does not apply to players.",
"<a href='#EffCancelEvent'>Cancel the event</a> to prevent the entity from teleporting."
).keywords(
"player", "entity"
).examples(
"on portal:",
"\tbroadcast \"%player% has entered a %event-portaltype%!\"",
"",
"on player portal:",
"\tplayer's world is world(\"wilderness\")",
"\tset world of event-location to player's world",
"\tadd 9000 to x-pos of event-location",
"",
"on entity portal:",
"\tbroadcast \"A %type of event-entity% has entered a portal!"
).since("1.0, 2.5.3 (entities), INSERT VERSION (location changers, end gateway)");
Skript.registerEvent("Portal / End Gateway", EvtPortal.class, events, "[player] portal", "entity portal")
.description(
"Called when a player or an entity uses a nether portal, end portal or end gateway. Note that events with keyword 'entity' does not apply to players.",
"<a href='#EffCancelEvent'>Cancel the event</a> to prevent the entity from teleporting.")
.keywords("player", "entity")
.examples(
"on portal:",
"\tbroadcast \"%player% has entered a %event-portaltype%!\"",
"",
"on player portal:",
"\tplayer's world is world(\"wilderness\")",
"\tset world of event-location to player's world",
"\tadd 9000 to x-pos of event-location",
"",
"on entity portal:",
"\tbroadcast \"A %type of event-entity% has entered a portal!")
.since("1.0, 2.5.3 (entities), INSERT VERSION (location changers, end gateway)");

you should also use the """ text blocks here to clean it up.


EventValues.registerEventValue(EntityPortalEvent.class, PortalType.class, EntityPortalEvent::getPortalType);
EventValues.registerEventValue(PlayerPortalEvent.class, PortalType.class, event -> switch (event.getCause()) {
case END_GATEWAY -> PortalType.END_GATEWAY;
case END_PORTAL -> PortalType.ENDER;
case NETHER_PORTAL -> PortalType.NETHER;
default -> throw new UnsupportedOperationException();
});
EventValues.registerEventValue(EntityTeleportEndGatewayEvent.class, PortalType.class, event -> PortalType.END_GATEWAY);
EventValues.registerEventValue(PlayerTeleportEndGatewayEvent.class, PortalType.class, event -> PortalType.END_GATEWAY);
}

private boolean isPlayer;

@Override
public boolean init(Literal<?>[] args, int matchedPattern, ParseResult parseResult) {
isPlayer = matchedPattern == 0;
return true;
}

@Override
public boolean check(Event event) {
if (isPlayer)
return event instanceof PlayerPortalEvent || event instanceof PlayerTeleportEndGatewayEvent;
return event instanceof EntityPortalEvent || event instanceof EntityTeleportEndGatewayEvent;
}

@Override
public String toString(@Nullable Event event, boolean debug) {
return (isPlayer ? "player" : "entity") + " portal";
}

}
Loading
Loading