Skip to content

Commit f086a27

Browse files
authored
Merge pull request #286 from Multiverse/fix/entity-portal-ready
Use EntityPortalReadyEvent to support handling portals on servers with disabled nether/end
2 parents cb346c3 + 19a4a3a commit f086a27

File tree

6 files changed

+87
-5
lines changed

6 files changed

+87
-5
lines changed

build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ repositories {
1414
}
1515

1616
configure(apiDependencies) {
17-
serverApiVersion = '1.18.2-R0.1-SNAPSHOT'
17+
serverApiVersion = '1.19.4-R0.1-SNAPSHOT'
1818
mockBukkitServerApiVersion = '1.21'
1919
mockBukkitVersion = '4.31.1'
2020
}

src/main/java/org/mvplugins/multiverse/netherportals/listeners/MVNPCoreListener.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
import java.io.File;
1313

1414
@Service
15-
public class MVNPCoreListener implements MVNPListener {
15+
final class MVNPCoreListener implements MVNPListener {
1616

1717
private final MultiverseNetherPortals plugin;
1818

src/main/java/org/mvplugins/multiverse/netherportals/listeners/MVNPEntityListener.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@
3535
import java.util.Map;
3636

3737
@Service
38-
public class MVNPEntityListener implements MVNPListener {
38+
final class MVNPEntityListener implements MVNPListener {
3939

4040
private static final int COOLDOWN = 250;
4141

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
package org.mvplugins.multiverse.netherportals.listeners;
2+
3+
import com.dumptruckman.minecraft.util.Logging;
4+
import io.papermc.paper.event.entity.EntityPortalReadyEvent;
5+
import org.bukkit.Bukkit;
6+
import org.bukkit.PortalType;
7+
import org.bukkit.World;
8+
import org.bukkit.event.EventHandler;
9+
import org.bukkit.event.Listener;
10+
import org.jvnet.hk2.annotations.Service;
11+
import org.mvplugins.multiverse.core.utils.ReflectHelper;
12+
import org.mvplugins.multiverse.external.jakarta.inject.Inject;
13+
import org.mvplugins.multiverse.external.jetbrains.annotations.NotNull;
14+
import org.mvplugins.multiverse.netherportals.MultiverseNetherPortals;
15+
import org.mvplugins.multiverse.netherportals.utils.MVNameChecker;
16+
17+
@Service
18+
final class MVNPEntityPortalReadyListener implements MVNPListener {
19+
20+
private final MultiverseNetherPortals plugin;
21+
private final MVNameChecker nameChecker;
22+
23+
@Inject
24+
MVNPEntityPortalReadyListener(@NotNull MultiverseNetherPortals plugin, @NotNull MVNameChecker nameChecker) {
25+
this.plugin = plugin;
26+
this.nameChecker = nameChecker;
27+
28+
if (ReflectHelper.hasClass("io.papermc.paper.event.entity.EntityPortalReadyEvent")) {
29+
Bukkit.getPluginManager().registerEvents(entityPortalReadyEvent(), plugin);
30+
Logging.finer("Registered EntityPortalReadyEvent listener.");
31+
}
32+
}
33+
34+
private Listener entityPortalReadyEvent() {
35+
return new Listener() {
36+
@EventHandler
37+
public void onEntityPortalReady(EntityPortalReadyEvent event) {
38+
String fromWorld = event.getEntity().getWorld().getName();
39+
String linkedWorld = getLinkedWorld(fromWorld, event.getPortalType());
40+
if (linkedWorld == null) {
41+
Logging.fine("No linked world found for world '%s'", fromWorld);
42+
return;
43+
}
44+
World bukkitLinkedWorld = Bukkit.getWorld(linkedWorld);
45+
if (bukkitLinkedWorld == null) {
46+
Logging.fine("Target linked world '%s' not a loaded bukkit world.", linkedWorld);
47+
return;
48+
}
49+
Logging.fine("Found linked world '%s' for world '%s'", linkedWorld, fromWorld);
50+
event.setTargetWorld(bukkitLinkedWorld);
51+
}
52+
};
53+
}
54+
55+
private String getLinkedWorld(String currentWorld, PortalType type) {
56+
String linkedWorld = plugin.getWorldLink(currentWorld, type);
57+
if (linkedWorld != null) {
58+
Logging.finer("Got manually linked world '%s' for world '%s'", linkedWorld, currentWorld);
59+
return linkedWorld;
60+
}
61+
if (nameChecker.isValidEndName(currentWorld)) {
62+
if (type == PortalType.ENDER) {
63+
return nameChecker.getNormalName(currentWorld, type);
64+
} else if (type == PortalType.NETHER) {
65+
return nameChecker.getNetherName(this.nameChecker.getNormalName(currentWorld, type));
66+
}
67+
} else if (this.nameChecker.isValidNetherName(currentWorld)) {
68+
if (type == PortalType.ENDER) {
69+
return nameChecker.getEndName(this.nameChecker.getNormalName(currentWorld, type));
70+
} else if (type == PortalType.NETHER) {
71+
return nameChecker.getNormalName(currentWorld, type);
72+
}
73+
} else {
74+
if (type == PortalType.ENDER) {
75+
return nameChecker.getEndName(currentWorld);
76+
} else if (type == PortalType.NETHER) {
77+
return nameChecker.getNetherName(currentWorld);
78+
}
79+
}
80+
return null;
81+
}
82+
}

src/main/java/org/mvplugins/multiverse/netherportals/listeners/MVNPPlayerListener.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
import org.jvnet.hk2.annotations.Service;
2424

2525
@Service
26-
public class MVNPPlayerListener implements MVNPListener {
26+
final class MVNPPlayerListener implements MVNPListener {
2727

2828
private final MultiverseNetherPortals plugin;
2929
private final MVNameChecker nameChecker;

src/main/java/org/mvplugins/multiverse/netherportals/listeners/MVNPPluginListener.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
import org.jvnet.hk2.annotations.Service;
1010

1111
@Service
12-
public class MVNPPluginListener implements MVNPListener {
12+
final class MVNPPluginListener implements MVNPListener {
1313

1414
private final MultiverseNetherPortals plugin;
1515

0 commit comments

Comments
 (0)