portal location/region creation

This commit is contained in:
SuperRonanCraft 2020-11-16 22:55:13 -05:00
parent 60607b11b3
commit 37c411b2b0
9 changed files with 128 additions and 31 deletions

View File

@ -3,13 +3,20 @@ 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.Files; import me.SuperRonanCraft.BetterRTPAddons.Files;
import org.bukkit.Location;
import org.bukkit.entity.Player;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
//Create portals for rtp'ing //Create portals for rtp'ing
public class AddonPortals implements Addon { public class AddonPortals implements Addon {
public PortalsMessages msgs = new PortalsMessages(); public PortalsMessages msgs = new PortalsMessages();
private final PortalsCommand cmd = new PortalsCommand(this); private final PortalsCommand cmd = new PortalsCommand(this);
private final PortalsDatabase database = new PortalsDatabase();; private final PortalsDatabase database = new PortalsDatabase();
private final PortalsCache portalsCache = new PortalsCache();
public boolean isEnabled() { public boolean isEnabled() {
return getFile(Files.FILETYPE.PORTALS).getBoolean("Enabled"); return getFile(Files.FILETYPE.PORTALS).getBoolean("Enabled");
@ -23,7 +30,10 @@ public class AddonPortals implements Addon {
@Override @Override
public void unload() { public void unload() {
this.portalsCache.unload();
} }
public PortalsCache getPortals() {
return portalsCache;
}
} }

View File

@ -3,28 +3,31 @@ package me.SuperRonanCraft.BetterRTPAddons.addons.portals;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import java.util.HashMap;
public class PortalsCache { public class PortalsCache {
Player p; private final HashMap<Player, PortalsCreation> portalsBeingCreated = new HashMap<>();
Location loc_1, loc_2;
public PortalsCache(Player p) { void unload() {
this.p = p; portalsBeingCreated.clear();
} }
void setLoc_1(Location loc) { void uncache(Player p) {
this.loc_1 = loc; portalsBeingCreated.remove(p);
} }
void setLoc_2(Location loc) { public void setPortal(Player p, Location loc, boolean loc2) {
this.loc_2 = loc; PortalsCreation portal;
if (portalsBeingCreated.containsKey(p)) {
portal = portalsBeingCreated.get(p);
} else
portal = new PortalsCreation(p);
if (loc2) portal.loc_2 = loc;
else portal.loc_1 = loc;
} }
Location getLoc_1() { public PortalsCreation getPortal(Player p) {
return this.loc_1; return portalsBeingCreated.getOrDefault(p, null);
}
Location getLoc_2() {
return this.loc_2;
} }
} }

View File

@ -6,9 +6,11 @@ import me.SuperRonanCraft.BetterRTP.player.commands.RTPCommandHelpable;
import me.SuperRonanCraft.BetterRTPAddons.addons.portals.cmds.*; import me.SuperRonanCraft.BetterRTPAddons.addons.portals.cmds.*;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import java.util.ArrayList;
import java.util.List; import java.util.List;
public class PortalsCommand implements RTPCommand, RTPCommandHelpable { public class PortalsCommand implements RTPCommand, RTPCommandHelpable {
AddonPortals pl; AddonPortals pl;
PortalsCommand(AddonPortals pl) { PortalsCommand(AddonPortals pl) {
@ -21,18 +23,26 @@ public class PortalsCommand implements RTPCommand, RTPCommandHelpable {
@Override @Override
public void execute(CommandSender sendi, String label, String[] args) { public void execute(CommandSender sendi, String label, String[] args) {
for (subCmd subCmd : subCmd.values()) { if (args.length > 1)
if (args[1].equalsIgnoreCase(subCmd.name())) { for (subCmd subCmd : subCmd.values()) {
subCmd.cmd.execute(sendi, label, args); if (args[1].equalsIgnoreCase(subCmd.name())) {
return; subCmd.cmd.execute(sendi, label, args, pl);
return;
}
} }
} sendi.sendMessage("Invalid argument!");
sendi.sendMessage("Invalid command!");
} }
@Override @Override
public List<String> tabComplete(CommandSender sendi, String[] args) { public List<String> tabComplete(CommandSender sendi, String[] args) {
return null; List<String> list = new ArrayList<>();
if (args.length == 2)
for (subCmd subCmd : subCmd.values()) {
if (subCmd.name().toLowerCase().startsWith(args[1].toLowerCase())) {
list.add(subCmd.name().toLowerCase());
}
}
return list;
} }
@Override @Override

View File

@ -0,0 +1,22 @@
package me.SuperRonanCraft.BetterRTPAddons.addons.portals;
import org.bukkit.Location;
import org.bukkit.entity.Player;
public class PortalsCreation {
public Player p;
protected Location loc_1, loc_2;
PortalsCreation(Player p) {
this.p = p;
}
public Location getLoc1() {
return loc_1;
}
public Location getLoc2() {
return loc_2;
}
}

View File

@ -0,0 +1,25 @@
package me.SuperRonanCraft.BetterRTPAddons.addons.portals.cmds;
import me.SuperRonanCraft.BetterRTPAddons.addons.portals.AddonPortals;
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.util.BlockIterator;
public interface LocationFinder {
default Block getTargetBlock(Player player, int range) {
BlockIterator iter = new BlockIterator(player, range);
Block lastBlock = null;
while (iter.hasNext()) {
lastBlock = iter.next();
if (lastBlock.getType() == Material.AIR) {
continue;
}
break;
}
return lastBlock;
}
}

View File

@ -1,11 +1,20 @@
package me.SuperRonanCraft.BetterRTPAddons.addons.portals.cmds; package me.SuperRonanCraft.BetterRTPAddons.addons.portals.cmds;
import me.SuperRonanCraft.BetterRTPAddons.addons.portals.AddonPortals;
import me.SuperRonanCraft.BetterRTPAddons.addons.portals.PortalsCreation;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
public class PortalsCommand_Create implements PortalsCommands { public class PortalsCommand_Create implements PortalsCommands {
@Override @Override
public void execute(CommandSender sendi, String label, String[] args) { public void execute(CommandSender sendi, String label, String[] args, AddonPortals addonPortals) {
sendi.sendMessage("Portals Create command!"); sendi.sendMessage("Portals Create command!");
PortalsCreation portal = addonPortals.getPortals().getPortal((Player) sendi);
if (portal == null || portal.getLoc1() == null || portal.getLoc2() == null) {
sendi.sendMessage("Invalid portal!");
return;
}
sendi.sendMessage("Valid portal!");
} }
} }

View File

@ -1,11 +1,19 @@
package me.SuperRonanCraft.BetterRTPAddons.addons.portals.cmds; package me.SuperRonanCraft.BetterRTPAddons.addons.portals.cmds;
import me.SuperRonanCraft.BetterRTPAddons.addons.portals.AddonPortals;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
public class PortalsCommand_Loc1 implements PortalsCommands { public class PortalsCommand_Loc1 implements PortalsCommands, LocationFinder {
@Override @Override
public void execute(CommandSender sendi, String label, String[] args) { public void execute(CommandSender sendi, String label, String[] args, AddonPortals addonPortals) {
sendi.sendMessage("Portals Loc1 command!"); Player p = (Player) sendi;
Location loc = getTargetBlock(p, 10).getLocation();
addonPortals.getPortals().setPortal(p, loc, false);
sendi.sendMessage("Location 1 set to this location " + loc.toString());
p.sendBlockChange(loc, Material.GLOWSTONE, (byte) 0);
} }
} }

View File

@ -1,11 +1,20 @@
package me.SuperRonanCraft.BetterRTPAddons.addons.portals.cmds; package me.SuperRonanCraft.BetterRTPAddons.addons.portals.cmds;
import me.SuperRonanCraft.BetterRTPAddons.addons.portals.AddonPortals;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.util.BlockIterator;
public class PortalsCommand_Loc2 implements PortalsCommands { public class PortalsCommand_Loc2 implements PortalsCommands, LocationFinder {
@Override @Override
public void execute(CommandSender sendi, String label, String[] args) { public void execute(CommandSender sendi, String label, String[] args, AddonPortals addonPortals) {
sendi.sendMessage("Portals Loc2 command!"); Player p = (Player) sendi;
Location loc = getTargetBlock(p, 10).getLocation();
addonPortals.getPortals().setPortal(p, loc, true);
sendi.sendMessage("Location 2 set to this location " + loc.toString());
} }
} }

View File

@ -1,9 +1,10 @@
package me.SuperRonanCraft.BetterRTPAddons.addons.portals.cmds; package me.SuperRonanCraft.BetterRTPAddons.addons.portals.cmds;
import me.SuperRonanCraft.BetterRTPAddons.addons.portals.AddonPortals;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
public interface PortalsCommands { public interface PortalsCommands {
void execute(CommandSender sendi, String label, String[] args); void execute(CommandSender sendi, String label, String[] args, AddonPortals addonPortals);
} }