From 605ad66f2d6e17f0ed109446fa52252547af83c8 Mon Sep 17 00:00:00 2001 From: SuperRonanCraft Date: Wed, 18 Nov 2020 21:22:04 -0500 Subject: [PATCH] portals save and load + portals execute rtp --- .../addons/flashback/FlashbackDatabase.java | 21 ++++++++--- .../addons/portals/AddonPortals.java | 1 + .../addons/portals/PortalsDatabase.java | 2 + .../addons/portals/PortalsEvents.java | 37 +++++++++++++++---- .../addons/portals/PortalsMessages.java | 16 ++++++++ .../portals/{ => cmds}/PortalsCommand.java | 8 ++-- .../portals/cmds/PortalsCommand_Create.java | 7 +++- .../portals/cmds/PortalsCommand_List.java | 36 ++++++++++++++++++ .../addons/portals/region/PortalsCache.java | 9 +++-- .../portals/region/PortalsRegionInfo.java | 4 ++ .../src/main/resources/lang/en.yml | 4 ++ .../BetterRTP/player/rtp/RTPPlayer.java | 2 +- .../BetterRTP/player/rtp/RTP_TYPE.java | 3 +- 13 files changed, 127 insertions(+), 23 deletions(-) rename BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/portals/{ => cmds}/PortalsCommand.java (87%) create mode 100644 BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/portals/cmds/PortalsCommand_List.java diff --git a/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/flashback/FlashbackDatabase.java b/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/flashback/FlashbackDatabase.java index e9d6d89..4d96c01 100644 --- a/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/flashback/FlashbackDatabase.java +++ b/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/flashback/FlashbackDatabase.java @@ -73,7 +73,7 @@ public class FlashbackDatabase extends Database { conn = getSQLConnection(); ps = conn.prepareStatement("SELECT * FROM " + table + " WHERE " + Columns.UUID.name + " = ?"); UUID id = p.getUniqueId(); - ps.setString(1, id != null ? id.toString() : console_id); + ps.setString(1, id.toString()); rs = ps.executeQuery(); if (rs.next()) { Location loc = LocSerialization.getLocationFromString(rs.getString(Columns.LOCATION_OLD.name)); @@ -93,13 +93,24 @@ public class FlashbackDatabase extends Database { boolean success = true; try { conn = getSQLConnection(); - ps = conn.prepareStatement("INSERT INTO " + table + "(" + Columns.UUID.name + ", " + Columns.LOCATION_OLD.name + ") VALUES (?, ?) " - + "ON CONFLICT(" + Columns.UUID.name + ") DO UPDATE SET " + Columns.LOCATION_OLD.name + " = + ?"); + ps = conn.prepareStatement("INSERT INTO " + table + + "(" + + Columns.UUID.name + ", " + + Columns.TIME_GOAL.name + ", " + + Columns.LOCATION_OLD.name + + ") VALUES (?, ?, ?) " + + "ON CONFLICT(" + Columns.UUID.name + + ") DO UPDATE SET " + + Columns.TIME_GOAL.name + " = + ?, " + + Columns.LOCATION_OLD.name + " = + ?" + ); UUID id = p.getUniqueId(); - ps.setString(1, id != null ? id.toString() : console_id); + ps.setString(1, id.toString()); + ps.setInt(2, timeGoal.intValue()); String serialLocation = LocSerialization.getStringFromLocation(oldLocation); - ps.setString(2, serialLocation); ps.setString(3, serialLocation); + ps.setInt(4, timeGoal.intValue()); + ps.setString(5, serialLocation); ps.executeUpdate(); } catch (SQLException ex) { plugin.getLogger().log(Level.SEVERE, Errors.sqlConnectionExecute(), ex); diff --git a/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/portals/AddonPortals.java b/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/portals/AddonPortals.java index 04c5044..6ec9e65 100644 --- a/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/portals/AddonPortals.java +++ b/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/portals/AddonPortals.java @@ -2,6 +2,7 @@ package me.SuperRonanCraft.BetterRTPAddons.addons.portals; import me.SuperRonanCraft.BetterRTP.BetterRTP; import me.SuperRonanCraft.BetterRTPAddons.Addon; +import me.SuperRonanCraft.BetterRTPAddons.addons.portals.cmds.PortalsCommand; import me.SuperRonanCraft.BetterRTPAddons.util.Files; import me.SuperRonanCraft.BetterRTPAddons.addons.portals.region.PortalsCache; diff --git a/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/portals/PortalsDatabase.java b/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/portals/PortalsDatabase.java index 4c52bb3..c6f4e5a 100644 --- a/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/portals/PortalsDatabase.java +++ b/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/portals/PortalsDatabase.java @@ -74,6 +74,8 @@ public class PortalsDatabase extends Database { PortalsRegionInfo info = new PortalsRegionInfo(); info.setLoc1(LocSerialization.getLocationFromString(rs.getString(Columns.LOCATION_1.name))); info.setLoc2(LocSerialization.getLocationFromString(rs.getString(Columns.LOCATION_2.name))); + info.setName(rs.getString(Columns.NAME.name)); + list.add(info); } return list; } catch (SQLException ex) { diff --git a/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/portals/PortalsEvents.java b/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/portals/PortalsEvents.java index 53cf25e..0ba54fc 100644 --- a/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/portals/PortalsEvents.java +++ b/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/portals/PortalsEvents.java @@ -1,19 +1,25 @@ package me.SuperRonanCraft.BetterRTPAddons.addons.portals; +import me.SuperRonanCraft.BetterRTP.BetterRTP; +import me.SuperRonanCraft.BetterRTP.player.rtp.RTP_TYPE; +import me.SuperRonanCraft.BetterRTP.references.customEvents.RTP_TeleportPostEvent; import me.SuperRonanCraft.BetterRTPAddons.Main; import me.SuperRonanCraft.BetterRTPAddons.addons.portals.region.PortalsRegionInfo; import org.bukkit.Location; +import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.HandlerList; import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerMoveEvent; +import java.util.HashMap; import java.util.List; public class PortalsEvents implements Listener { AddonPortals addonPortals; + private final HashMap playerPortaling = new HashMap<>(); PortalsEvents(AddonPortals addonPortals) { this.addonPortals = addonPortals; @@ -29,15 +35,32 @@ public class PortalsEvents implements Listener { @EventHandler (priority = EventPriority.MONITOR) void move(PlayerMoveEvent e) { - if (e.getFrom() != e.getTo()) { + if (e.getFrom().getBlockX() != e.getTo().getBlockX() + || e.getFrom().getBlockY() != e.getTo().getBlockY() + || e.getFrom().getBlockZ() != e.getTo().getBlockZ()) { + if (playerPortaling.containsKey(e.getPlayer())) + return; for (PortalsRegionInfo portal : addonPortals.getPortals().getRegisteredPortals()) { - Location loc1 = portal.getLoc1(), loc2 = portal.getLoc2(); - for (int x = Math.max(loc1.getBlockX(), loc2.getBlockX()); x >= Math.min(loc1.getBlockX(), loc2.getBlockX()); x--) - for (int y = Math.max(loc1.getBlockY(), loc2.getBlockY()); y >= Math.min(loc1.getBlockY(), loc2.getBlockY()); y--) - for (int z = Math.max(loc1.getBlockZ(), loc2.getBlockZ()); z >= Math.min(loc1.getBlockZ(), loc2.getBlockZ()); z--) { - e.getPlayer().sendMessage("Inside Region!"); - } + Location loc1 = portal.getLoc1(), loc2 = portal.getLoc2(), ploc = e.getTo(); + assert ploc != null; + + if (ploc.getBlockX() <= Math.max(loc1.getBlockX(), loc2.getBlockX()) + && ploc.getBlockX() >= Math.min(loc1.getBlockX(), loc2.getBlockX())) + if (ploc.getBlockZ() <= Math.max(loc1.getBlockZ(), loc2.getBlockZ()) + && ploc.getBlockZ() >= Math.min(loc1.getBlockZ(), loc2.getBlockZ())) + if (ploc.getBlockY() <= Math.max(loc1.getBlockY(), loc2.getBlockY()) + && ploc.getBlockY() >= Math.min(loc1.getBlockY(), loc2.getBlockY())) { + playerPortaling.put(e.getPlayer(), portal); + BetterRTP.getInstance().getCmd().tp(e.getPlayer(), e.getPlayer(), + e.getPlayer().getWorld().getName(), null, RTP_TYPE.ADDON); + return; + } } } } + + @EventHandler + void teleport(RTP_TeleportPostEvent e) { + playerPortaling.remove(e.getPlayer()); + } } diff --git a/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/portals/PortalsMessages.java b/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/portals/PortalsMessages.java index 42ab220..cac7882 100644 --- a/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/portals/PortalsMessages.java +++ b/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/portals/PortalsMessages.java @@ -56,6 +56,22 @@ public class PortalsMessages implements AddonsMessages { sms(sendi, getLang().getString(preM + "Remove.None").replace("%name%", name)); } + //List + + public String getListPrefix() { + return getLang().getString(preM + "List.Prefix"); + } + + public String getListPortal() { + return getLang().getString(preM + "List.Portal"); + } + + public void getListNone(CommandSender sendi) { + sms(sendi, getLang().getString(preM + "List.None")); + } + + //Usages + public void usageRemove(CommandSender sendi, String label) { sms(sendi, getLang().getString(preM + "Usage.Remove").replace("%command%", label)); } diff --git a/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/portals/PortalsCommand.java b/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/portals/cmds/PortalsCommand.java similarity index 87% rename from BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/portals/PortalsCommand.java rename to BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/portals/cmds/PortalsCommand.java index 2ec27e5..c8915b1 100644 --- a/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/portals/PortalsCommand.java +++ b/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/portals/cmds/PortalsCommand.java @@ -1,8 +1,9 @@ -package me.SuperRonanCraft.BetterRTPAddons.addons.portals; +package me.SuperRonanCraft.BetterRTPAddons.addons.portals.cmds; import me.SuperRonanCraft.BetterRTP.BetterRTP; import me.SuperRonanCraft.BetterRTP.player.commands.RTPCommand; import me.SuperRonanCraft.BetterRTP.player.commands.RTPCommandHelpable; +import me.SuperRonanCraft.BetterRTPAddons.addons.portals.AddonPortals; import me.SuperRonanCraft.BetterRTPAddons.addons.portals.cmds.*; import org.bukkit.command.CommandSender; @@ -13,7 +14,7 @@ public class PortalsCommand implements RTPCommand, RTPCommandHelpable { AddonPortals pl; - PortalsCommand(AddonPortals pl) { + public PortalsCommand(AddonPortals pl) { this.pl = pl; } @@ -59,7 +60,8 @@ public class PortalsCommand implements RTPCommand, RTPCommandHelpable { LOC1(new PortalsCommand_Loc1()), LOC2(new PortalsCommand_Loc2()), CREATE(new PortalsCommand_Create()), - REMOVE(new PortalsCommand_Remove()); + REMOVE(new PortalsCommand_Remove()), + LIST(new PortalsCommand_List()); PortalsCommands cmd; diff --git a/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/portals/cmds/PortalsCommand_Create.java b/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/portals/cmds/PortalsCommand_Create.java index 5b20bc9..10f7807 100644 --- a/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/portals/cmds/PortalsCommand_Create.java +++ b/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/portals/cmds/PortalsCommand_Create.java @@ -16,7 +16,10 @@ public class PortalsCommand_Create implements PortalsCommands { Player p = (Player) sendi; PortalsRegionInfo portal = addonPortals.getPortals().getPortal(p); //Valid region - if (portal == null || portal.getLoc1() == null || portal.getLoc2() == null) { + if ( portal == null || + portal.getLoc1() == null || + portal.getLoc2() == null || + portal.getLoc1().getWorld() != portal.getLoc2().getWorld()) { addonPortals.msgs.getCreateInvalid(sendi); return; } @@ -33,7 +36,7 @@ public class PortalsCommand_Create implements PortalsCommands { return; } } - if (addonPortals.getPortals().setPortal(p, name)) + if (addonPortals.getPortals().addRegisteredPortal(p, name)) addonPortals.msgs.getCreateConfirm(sendi, name); else sendi.sendMessage("Something went wrong when creating a portal!"); diff --git a/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/portals/cmds/PortalsCommand_List.java b/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/portals/cmds/PortalsCommand_List.java new file mode 100644 index 0000000..6464ac1 --- /dev/null +++ b/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/portals/cmds/PortalsCommand_List.java @@ -0,0 +1,36 @@ +package me.SuperRonanCraft.BetterRTPAddons.addons.portals.cmds; + +import me.SuperRonanCraft.BetterRTPAddons.addons.portals.AddonPortals; +import me.SuperRonanCraft.BetterRTPAddons.addons.portals.region.PortalsRegionInfo; +import org.bukkit.Location; +import org.bukkit.command.CommandSender; + +import java.util.ArrayList; +import java.util.List; + +public class PortalsCommand_List implements PortalsCommands { + + @Override + public void execute(CommandSender sendi, String label, String[] args, AddonPortals addonPortals) { + List portalList = addonPortals.getPortals().getRegisteredPortals(); + if (portalList.isEmpty()) { + addonPortals.msgs.getListNone(sendi); + return; + } + String strPrefix = addonPortals.msgs.getListPrefix(); + List list = new ArrayList<>(); + list.add(strPrefix); + String strPortal = addonPortals.msgs.getListPortal(); + for (PortalsRegionInfo portal : portalList) { + String locInfo = "World: " + portal.getLoc1().getWorld().getName() + + " Loc1: " + locToString(portal.getLoc1()) + + " Loc2: " + locToString(portal.getLoc2()); + list.add(strPortal.replace("%name%", portal.getName()).replace("%location%", locInfo)); + } + addonPortals.msgs.sms(sendi, list); + } + + private String locToString(Location loc) { + return "(" + loc.getBlockX() + ", " + loc.getBlockY() + ", " + loc.getBlockZ() + ")"; + } +} diff --git a/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/portals/region/PortalsCache.java b/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/portals/region/PortalsCache.java index 73a354f..cf34cd4 100644 --- a/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/portals/region/PortalsCache.java +++ b/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/portals/region/PortalsCache.java @@ -52,11 +52,12 @@ public class PortalsCache { return addonPortals.getDatabase().removePortal(portal); } - public boolean setPortal(Player p, String name) { + public boolean addRegisteredPortal(Player p, String name) { if (!portalsBeingCreated.containsKey(p)) return false; PortalsRegionInfo portal = portalsBeingCreated.get(p); portal.name = name; + registeredPortals.add(portal); return addonPortals.getDatabase().setPortal(portal); } @@ -77,7 +78,7 @@ public class PortalsCache { if (Bukkit.getPluginManager().isPluginEnabled("ProtocolLib")) { ProtocolManager pm = ProtocolLibrary.getProtocolManager(); - if (portal.loc_1 != null && portal.loc_2 != null) { + //if (portal.loc_1 != null && portal.loc_2 != null) { //if (Math.abs(portal.loc_1.getBlockX() - portal.loc_2.getBlockX()) <= 10) //if (Math.abs(portal.loc_1.getBlockZ() - portal.loc_2.getBlockZ()) <= 10) //if (Math.abs(portal.loc_1.getBlockY() - portal.loc_2.getBlockY()) <= 10) { @@ -97,12 +98,12 @@ public class PortalsCache { } } }*/ - } else { + //} else { WrapperPlayServerBlockChange packet = new WrapperPlayServerBlockChange(pm.createPacket(PacketType.Play.Server.BLOCK_CHANGE)); packet.setBlockData(WrappedBlockData.createData(Material.GLOWSTONE)); packet.setLocation(new BlockPosition(loc.toVector())); packet.sendPacket(p); - } + //} } } diff --git a/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/portals/region/PortalsRegionInfo.java b/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/portals/region/PortalsRegionInfo.java index 73226f3..4ac9973 100644 --- a/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/portals/region/PortalsRegionInfo.java +++ b/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/portals/region/PortalsRegionInfo.java @@ -24,6 +24,10 @@ public class PortalsRegionInfo { loc_2 = loc; } + public void setName(String name) { + this.name = name; + } + public String getName() { return name; } diff --git a/BetterRTPAddons/src/main/resources/lang/en.yml b/BetterRTPAddons/src/main/resources/lang/en.yml index 88a3cc5..6f6bedd 100644 --- a/BetterRTPAddons/src/main/resources/lang/en.yml +++ b/BetterRTPAddons/src/main/resources/lang/en.yml @@ -13,6 +13,10 @@ Portals: Remove: Confirm: '&cPortal &7%name% &chas been removed!' None: '&cNo portal by the name &7%name% &cexist!' + List: + Prefix: '&e&m-----&6&l BetterRTP &7&lAddons &8| Portals List &e&m-----' + Portal: ' &7- &6%name% &8| &7%location%' + None: '&7There are no portals! &8Create one with `/rtp portals create`' Usage: Portals: diff --git a/src/main/java/me/SuperRonanCraft/BetterRTP/player/rtp/RTPPlayer.java b/src/main/java/me/SuperRonanCraft/BetterRTP/player/rtp/RTPPlayer.java index 03f3e81..39362fa 100644 --- a/src/main/java/me/SuperRonanCraft/BetterRTP/player/rtp/RTPPlayer.java +++ b/src/main/java/me/SuperRonanCraft/BetterRTP/player/rtp/RTPPlayer.java @@ -36,7 +36,7 @@ public class RTPPlayer { Location loc = pWorld.generateRandomXZ(settings.defaultWorld); //randomLoc(pWorld); CompletableFuture chunk = PaperLib.getChunkAtAsync(pWorld.getWorld(), loc.getBlockX(), loc.getBlockZ()); chunk.thenAccept(result -> { - BetterRTP.debug("Checking location for " + p.getName()); + //BetterRTP.debug("Checking location for " + p.getName()); Location tpLoc; float yaw = p.getLocation().getYaw(); float pitch = p.getLocation().getPitch(); diff --git a/src/main/java/me/SuperRonanCraft/BetterRTP/player/rtp/RTP_TYPE.java b/src/main/java/me/SuperRonanCraft/BetterRTP/player/rtp/RTP_TYPE.java index 07a543a..d67daf5 100644 --- a/src/main/java/me/SuperRonanCraft/BetterRTP/player/rtp/RTP_TYPE.java +++ b/src/main/java/me/SuperRonanCraft/BetterRTP/player/rtp/RTP_TYPE.java @@ -3,5 +3,6 @@ package me.SuperRonanCraft.BetterRTP.player.rtp; public enum RTP_TYPE { COMMAND, //Player executed command FORCED, //Player was forced to rtp (/rtp player ) - JOIN //Player joined and was rtp'd automatically + JOIN, //Player joined and was rtp'd automatically + ADDON //Player RTP'd from the external addons plugin }