Skip to content

Commit c18b051

Browse files
authored
Merge pull request #85 from BentoBoxWorld/84_End/_End_Portal_Players_not_spawning_in_right
Teleport users to End better #84
2 parents c3356ba + 6729ab8 commit c18b051

File tree

4 files changed

+43
-5
lines changed

4 files changed

+43
-5
lines changed

src/main/java/world/bentobox/skygrid/Settings.java

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -111,9 +111,6 @@ public class Settings implements WorldSettings {
111111
@ConfigEntry(path = "world.end.blocks")
112112
private Map<Material, Integer> endBlocks = new EnumMap<>(Material.class);
113113

114-
@ConfigComment("This option indicates if obsidian platform in the end should be generated")
115-
@ConfigComment("when player enters the end world.")
116-
@ConfigEntry(path = "world.end.create-obsidian-platform", since = "1.16")
117114
private boolean makeEndPortals = true;
118115

119116
/* SkyGrid */

src/main/java/world/bentobox/skygrid/SkyGrid.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
import world.bentobox.skygrid.generators.SkyGridBiomeProvider;
1717
import world.bentobox.skygrid.generators.SkyGridGen;
1818
import world.bentobox.skygrid.generators.WorldStyles;
19+
import world.bentobox.skygrid.listeners.EndPortalListener;
1920

2021
/**
2122
* Main SkyGrid class - provides skygrid
@@ -65,6 +66,8 @@ private void loadSettings() {
6566
public void onEnable() {
6667
// Set default protection flags for world to allow everything
6768
Flags.values().stream().filter(f -> f.getType().equals(Type.PROTECTION)).forEach(f -> f.setDefaultSetting(getOverWorld(), true));
69+
// Listen for end portals
70+
this.registerListener(new EndPortalListener(this));
6871
}
6972

7073
@Override

src/main/java/world/bentobox/skygrid/generators/SkyGridPop.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
package world.bentobox.skygrid.generators;
22

3-
import java.util.HashMap;
43
import java.util.Map;
54
import java.util.Map.Entry;
65
import java.util.NavigableMap;
76
import java.util.Random;
87
import java.util.TreeMap;
98
import java.util.UUID;
9+
import java.util.concurrent.ConcurrentHashMap;
1010

1111
import org.bukkit.Bukkit;
1212
import org.bukkit.Location;
@@ -40,7 +40,7 @@ public class SkyGridPop extends BlockPopulator {
4040
private int worldTotal;
4141
private int netherTotal;
4242
private int endTotal;
43-
private Map<UUID, Random> rand = new HashMap<>();
43+
private Map<UUID, Random> rand = new ConcurrentHashMap<>();
4444
private Random random = new Random();
4545

4646
private static final Material[] SAPLING_TYPE = {
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package world.bentobox.skygrid.listeners;
2+
3+
import org.bukkit.Bukkit;
4+
import org.bukkit.Location;
5+
import org.bukkit.event.EventHandler;
6+
import org.bukkit.event.EventPriority;
7+
import org.bukkit.event.Listener;
8+
import org.bukkit.event.player.PlayerPortalEvent;
9+
import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause;
10+
11+
import world.bentobox.bentobox.util.teleport.SafeSpotTeleport;
12+
import world.bentobox.skygrid.SkyGrid;
13+
14+
/**
15+
* Listens to player's teleporting to the End and puts an obsidian platform under them.
16+
*/
17+
public class EndPortalListener implements Listener {
18+
private SkyGrid addon;
19+
20+
public EndPortalListener(SkyGrid addon) {
21+
super();
22+
this.addon = addon;
23+
}
24+
25+
@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
26+
public void onPlayerTeleport(PlayerPortalEvent e) {
27+
if (addon.getEndWorld() == null ||
28+
e.getCause() != TeleportCause.END_PORTAL || !addon.inWorld(e.getFrom())) {
29+
return;
30+
}
31+
Location to = e.getPlayer().getLocation().toVector().toLocation(addon.getEndWorld());
32+
to.setY(addon.getSettings().getIslandHeight());
33+
Bukkit.getScheduler().runTask(addon.getPlugin(), () ->
34+
new SafeSpotTeleport.Builder(addon.getPlugin()).portal().entity(e.getPlayer()).location(to).build());
35+
e.setCancelled(true);
36+
37+
}
38+
}

0 commit comments

Comments
 (0)