diff --git a/src/main/java/world/bentobox/skygrid/Settings.java b/src/main/java/world/bentobox/skygrid/Settings.java index f010115..0649be2 100644 --- a/src/main/java/world/bentobox/skygrid/Settings.java +++ b/src/main/java/world/bentobox/skygrid/Settings.java @@ -111,9 +111,6 @@ public class Settings implements WorldSettings { @ConfigEntry(path = "world.end.blocks") private Map endBlocks = new EnumMap<>(Material.class); - @ConfigComment("This option indicates if obsidian platform in the end should be generated") - @ConfigComment("when player enters the end world.") - @ConfigEntry(path = "world.end.create-obsidian-platform", since = "1.16") private boolean makeEndPortals = true; /* SkyGrid */ diff --git a/src/main/java/world/bentobox/skygrid/SkyGrid.java b/src/main/java/world/bentobox/skygrid/SkyGrid.java index 44a2af6..e15d5dc 100644 --- a/src/main/java/world/bentobox/skygrid/SkyGrid.java +++ b/src/main/java/world/bentobox/skygrid/SkyGrid.java @@ -16,6 +16,7 @@ import world.bentobox.skygrid.generators.SkyGridBiomeProvider; import world.bentobox.skygrid.generators.SkyGridGen; import world.bentobox.skygrid.generators.WorldStyles; +import world.bentobox.skygrid.listeners.EndPortalListener; /** * Main SkyGrid class - provides skygrid @@ -65,6 +66,8 @@ private void loadSettings() { public void onEnable() { // Set default protection flags for world to allow everything Flags.values().stream().filter(f -> f.getType().equals(Type.PROTECTION)).forEach(f -> f.setDefaultSetting(getOverWorld(), true)); + // Listen for end portals + this.registerListener(new EndPortalListener(this)); } @Override diff --git a/src/main/java/world/bentobox/skygrid/generators/SkyGridPop.java b/src/main/java/world/bentobox/skygrid/generators/SkyGridPop.java index 182abe7..6a26083 100644 --- a/src/main/java/world/bentobox/skygrid/generators/SkyGridPop.java +++ b/src/main/java/world/bentobox/skygrid/generators/SkyGridPop.java @@ -1,12 +1,12 @@ package world.bentobox.skygrid.generators; -import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; import java.util.NavigableMap; import java.util.Random; import java.util.TreeMap; import java.util.UUID; +import java.util.concurrent.ConcurrentHashMap; import org.bukkit.Bukkit; import org.bukkit.Location; @@ -40,7 +40,7 @@ public class SkyGridPop extends BlockPopulator { private int worldTotal; private int netherTotal; private int endTotal; - private Map rand = new HashMap<>(); + private Map rand = new ConcurrentHashMap<>(); private Random random = new Random(); private static final Material[] SAPLING_TYPE = { diff --git a/src/main/java/world/bentobox/skygrid/listeners/EndPortalListener.java b/src/main/java/world/bentobox/skygrid/listeners/EndPortalListener.java new file mode 100644 index 0000000..2aab035 --- /dev/null +++ b/src/main/java/world/bentobox/skygrid/listeners/EndPortalListener.java @@ -0,0 +1,38 @@ +package world.bentobox.skygrid.listeners; + +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerPortalEvent; +import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; + +import world.bentobox.bentobox.util.teleport.SafeSpotTeleport; +import world.bentobox.skygrid.SkyGrid; + +/** + * Listens to player's teleporting to the End and puts an obsidian platform under them. + */ +public class EndPortalListener implements Listener { + private SkyGrid addon; + + public EndPortalListener(SkyGrid addon) { + super(); + this.addon = addon; + } + + @EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true) + public void onPlayerTeleport(PlayerPortalEvent e) { + if (addon.getEndWorld() == null || + e.getCause() != TeleportCause.END_PORTAL || !addon.inWorld(e.getFrom())) { + return; + } + Location to = e.getPlayer().getLocation().toVector().toLocation(addon.getEndWorld()); + to.setY(addon.getSettings().getIslandHeight()); + Bukkit.getScheduler().runTask(addon.getPlugin(), () -> + new SafeSpotTeleport.Builder(addon.getPlugin()).portal().entity(e.getPlayer()).location(to).build()); + e.setCancelled(true); + + } +}