portals save and load + portals execute rtp

This commit is contained in:
SuperRonanCraft 2020-11-18 21:22:04 -05:00
parent 27fc53e780
commit 605ad66f2d
13 changed files with 127 additions and 23 deletions

View File

@ -73,7 +73,7 @@ public class FlashbackDatabase extends Database {
conn = getSQLConnection(); conn = getSQLConnection();
ps = conn.prepareStatement("SELECT * FROM " + table + " WHERE " + Columns.UUID.name + " = ?"); ps = conn.prepareStatement("SELECT * FROM " + table + " WHERE " + Columns.UUID.name + " = ?");
UUID id = p.getUniqueId(); UUID id = p.getUniqueId();
ps.setString(1, id != null ? id.toString() : console_id); ps.setString(1, id.toString());
rs = ps.executeQuery(); rs = ps.executeQuery();
if (rs.next()) { if (rs.next()) {
Location loc = LocSerialization.getLocationFromString(rs.getString(Columns.LOCATION_OLD.name)); Location loc = LocSerialization.getLocationFromString(rs.getString(Columns.LOCATION_OLD.name));
@ -93,13 +93,24 @@ public class FlashbackDatabase extends Database {
boolean success = true; boolean success = true;
try { try {
conn = getSQLConnection(); conn = getSQLConnection();
ps = conn.prepareStatement("INSERT INTO " + table + "(" + Columns.UUID.name + ", " + Columns.LOCATION_OLD.name + ") VALUES (?, ?) " ps = conn.prepareStatement("INSERT INTO " + table +
+ "ON CONFLICT(" + Columns.UUID.name + ") DO UPDATE SET " + Columns.LOCATION_OLD.name + " = + ?"); "(" +
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(); 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); String serialLocation = LocSerialization.getStringFromLocation(oldLocation);
ps.setString(2, serialLocation);
ps.setString(3, serialLocation); ps.setString(3, serialLocation);
ps.setInt(4, timeGoal.intValue());
ps.setString(5, serialLocation);
ps.executeUpdate(); ps.executeUpdate();
} catch (SQLException ex) { } catch (SQLException ex) {
plugin.getLogger().log(Level.SEVERE, Errors.sqlConnectionExecute(), ex); plugin.getLogger().log(Level.SEVERE, Errors.sqlConnectionExecute(), ex);

View File

@ -2,6 +2,7 @@ package me.SuperRonanCraft.BetterRTPAddons.addons.portals;
import me.SuperRonanCraft.BetterRTP.BetterRTP; import me.SuperRonanCraft.BetterRTP.BetterRTP;
import me.SuperRonanCraft.BetterRTPAddons.Addon; import me.SuperRonanCraft.BetterRTPAddons.Addon;
import me.SuperRonanCraft.BetterRTPAddons.addons.portals.cmds.PortalsCommand;
import me.SuperRonanCraft.BetterRTPAddons.util.Files; import me.SuperRonanCraft.BetterRTPAddons.util.Files;
import me.SuperRonanCraft.BetterRTPAddons.addons.portals.region.PortalsCache; import me.SuperRonanCraft.BetterRTPAddons.addons.portals.region.PortalsCache;

View File

@ -74,6 +74,8 @@ public class PortalsDatabase extends Database {
PortalsRegionInfo info = new PortalsRegionInfo(); PortalsRegionInfo info = new PortalsRegionInfo();
info.setLoc1(LocSerialization.getLocationFromString(rs.getString(Columns.LOCATION_1.name))); info.setLoc1(LocSerialization.getLocationFromString(rs.getString(Columns.LOCATION_1.name)));
info.setLoc2(LocSerialization.getLocationFromString(rs.getString(Columns.LOCATION_2.name))); info.setLoc2(LocSerialization.getLocationFromString(rs.getString(Columns.LOCATION_2.name)));
info.setName(rs.getString(Columns.NAME.name));
list.add(info);
} }
return list; return list;
} catch (SQLException ex) { } catch (SQLException ex) {

View File

@ -1,19 +1,25 @@
package me.SuperRonanCraft.BetterRTPAddons.addons.portals; 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.Main;
import me.SuperRonanCraft.BetterRTPAddons.addons.portals.region.PortalsRegionInfo; import me.SuperRonanCraft.BetterRTPAddons.addons.portals.region.PortalsRegionInfo;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority; import org.bukkit.event.EventPriority;
import org.bukkit.event.HandlerList; import org.bukkit.event.HandlerList;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerMoveEvent; import org.bukkit.event.player.PlayerMoveEvent;
import java.util.HashMap;
import java.util.List; import java.util.List;
public class PortalsEvents implements Listener { public class PortalsEvents implements Listener {
AddonPortals addonPortals; AddonPortals addonPortals;
private final HashMap<Player, PortalsRegionInfo> playerPortaling = new HashMap<>();
PortalsEvents(AddonPortals addonPortals) { PortalsEvents(AddonPortals addonPortals) {
this.addonPortals = addonPortals; this.addonPortals = addonPortals;
@ -29,15 +35,32 @@ public class PortalsEvents implements Listener {
@EventHandler (priority = EventPriority.MONITOR) @EventHandler (priority = EventPriority.MONITOR)
void move(PlayerMoveEvent e) { 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()) { for (PortalsRegionInfo portal : addonPortals.getPortals().getRegisteredPortals()) {
Location loc1 = portal.getLoc1(), loc2 = portal.getLoc2(); Location loc1 = portal.getLoc1(), loc2 = portal.getLoc2(), ploc = e.getTo();
for (int x = Math.max(loc1.getBlockX(), loc2.getBlockX()); x >= Math.min(loc1.getBlockX(), loc2.getBlockX()); x--) assert ploc != null;
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--) { if (ploc.getBlockX() <= Math.max(loc1.getBlockX(), loc2.getBlockX())
e.getPlayer().sendMessage("Inside Region!"); && 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());
}
} }

View File

@ -56,6 +56,22 @@ public class PortalsMessages implements AddonsMessages {
sms(sendi, getLang().getString(preM + "Remove.None").replace("%name%", name)); 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) { public void usageRemove(CommandSender sendi, String label) {
sms(sendi, getLang().getString(preM + "Usage.Remove").replace("%command%", label)); sms(sendi, getLang().getString(preM + "Usage.Remove").replace("%command%", label));
} }

View File

@ -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.BetterRTP;
import me.SuperRonanCraft.BetterRTP.player.commands.RTPCommand; import me.SuperRonanCraft.BetterRTP.player.commands.RTPCommand;
import me.SuperRonanCraft.BetterRTP.player.commands.RTPCommandHelpable; import me.SuperRonanCraft.BetterRTP.player.commands.RTPCommandHelpable;
import me.SuperRonanCraft.BetterRTPAddons.addons.portals.AddonPortals;
import me.SuperRonanCraft.BetterRTPAddons.addons.portals.cmds.*; import me.SuperRonanCraft.BetterRTPAddons.addons.portals.cmds.*;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
@ -13,7 +14,7 @@ public class PortalsCommand implements RTPCommand, RTPCommandHelpable {
AddonPortals pl; AddonPortals pl;
PortalsCommand(AddonPortals pl) { public PortalsCommand(AddonPortals pl) {
this.pl = pl; this.pl = pl;
} }
@ -59,7 +60,8 @@ public class PortalsCommand implements RTPCommand, RTPCommandHelpable {
LOC1(new PortalsCommand_Loc1()), LOC1(new PortalsCommand_Loc1()),
LOC2(new PortalsCommand_Loc2()), LOC2(new PortalsCommand_Loc2()),
CREATE(new PortalsCommand_Create()), CREATE(new PortalsCommand_Create()),
REMOVE(new PortalsCommand_Remove()); REMOVE(new PortalsCommand_Remove()),
LIST(new PortalsCommand_List());
PortalsCommands cmd; PortalsCommands cmd;

View File

@ -16,7 +16,10 @@ public class PortalsCommand_Create implements PortalsCommands {
Player p = (Player) sendi; Player p = (Player) sendi;
PortalsRegionInfo portal = addonPortals.getPortals().getPortal(p); PortalsRegionInfo portal = addonPortals.getPortals().getPortal(p);
//Valid region //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); addonPortals.msgs.getCreateInvalid(sendi);
return; return;
} }
@ -33,7 +36,7 @@ public class PortalsCommand_Create implements PortalsCommands {
return; return;
} }
} }
if (addonPortals.getPortals().setPortal(p, name)) if (addonPortals.getPortals().addRegisteredPortal(p, name))
addonPortals.msgs.getCreateConfirm(sendi, name); addonPortals.msgs.getCreateConfirm(sendi, name);
else else
sendi.sendMessage("Something went wrong when creating a portal!"); sendi.sendMessage("Something went wrong when creating a portal!");

View File

@ -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<PortalsRegionInfo> portalList = addonPortals.getPortals().getRegisteredPortals();
if (portalList.isEmpty()) {
addonPortals.msgs.getListNone(sendi);
return;
}
String strPrefix = addonPortals.msgs.getListPrefix();
List<String> 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() + ")";
}
}

View File

@ -52,11 +52,12 @@ public class PortalsCache {
return addonPortals.getDatabase().removePortal(portal); return addonPortals.getDatabase().removePortal(portal);
} }
public boolean setPortal(Player p, String name) { public boolean addRegisteredPortal(Player p, String name) {
if (!portalsBeingCreated.containsKey(p)) if (!portalsBeingCreated.containsKey(p))
return false; return false;
PortalsRegionInfo portal = portalsBeingCreated.get(p); PortalsRegionInfo portal = portalsBeingCreated.get(p);
portal.name = name; portal.name = name;
registeredPortals.add(portal);
return addonPortals.getDatabase().setPortal(portal); return addonPortals.getDatabase().setPortal(portal);
} }
@ -77,7 +78,7 @@ public class PortalsCache {
if (Bukkit.getPluginManager().isPluginEnabled("ProtocolLib")) { if (Bukkit.getPluginManager().isPluginEnabled("ProtocolLib")) {
ProtocolManager pm = ProtocolLibrary.getProtocolManager(); 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.getBlockX() - portal.loc_2.getBlockX()) <= 10)
//if (Math.abs(portal.loc_1.getBlockZ() - portal.loc_2.getBlockZ()) <= 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) { //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)); WrapperPlayServerBlockChange packet = new WrapperPlayServerBlockChange(pm.createPacket(PacketType.Play.Server.BLOCK_CHANGE));
packet.setBlockData(WrappedBlockData.createData(Material.GLOWSTONE)); packet.setBlockData(WrappedBlockData.createData(Material.GLOWSTONE));
packet.setLocation(new BlockPosition(loc.toVector())); packet.setLocation(new BlockPosition(loc.toVector()));
packet.sendPacket(p); packet.sendPacket(p);
} //}
} }
} }

View File

@ -24,6 +24,10 @@ public class PortalsRegionInfo {
loc_2 = loc; loc_2 = loc;
} }
public void setName(String name) {
this.name = name;
}
public String getName() { public String getName() {
return name; return name;
} }

View File

@ -13,6 +13,10 @@ Portals:
Remove: Remove:
Confirm: '&cPortal &7%name% &chas been removed!' Confirm: '&cPortal &7%name% &chas been removed!'
None: '&cNo portal by the name &7%name% &cexist!' 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: Usage:
Portals: Portals:

View File

@ -36,7 +36,7 @@ public class RTPPlayer {
Location loc = pWorld.generateRandomXZ(settings.defaultWorld); //randomLoc(pWorld); Location loc = pWorld.generateRandomXZ(settings.defaultWorld); //randomLoc(pWorld);
CompletableFuture<Chunk> chunk = PaperLib.getChunkAtAsync(pWorld.getWorld(), loc.getBlockX(), loc.getBlockZ()); CompletableFuture<Chunk> chunk = PaperLib.getChunkAtAsync(pWorld.getWorld(), loc.getBlockX(), loc.getBlockZ());
chunk.thenAccept(result -> { chunk.thenAccept(result -> {
BetterRTP.debug("Checking location for " + p.getName()); //BetterRTP.debug("Checking location for " + p.getName());
Location tpLoc; Location tpLoc;
float yaw = p.getLocation().getYaw(); float yaw = p.getLocation().getYaw();
float pitch = p.getLocation().getPitch(); float pitch = p.getLocation().getPitch();

View File

@ -3,5 +3,6 @@ package me.SuperRonanCraft.BetterRTP.player.rtp;
public enum RTP_TYPE { public enum RTP_TYPE {
COMMAND, //Player executed command COMMAND, //Player executed command
FORCED, //Player was forced to rtp (/rtp player <player>) FORCED, //Player was forced to rtp (/rtp player <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
} }