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 776e809..8de7552 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 @@ -3,13 +3,20 @@ package me.SuperRonanCraft.BetterRTPAddons.addons.portals; import me.SuperRonanCraft.BetterRTP.BetterRTP; import me.SuperRonanCraft.BetterRTPAddons.Addon; 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 public class AddonPortals implements Addon { public PortalsMessages msgs = new PortalsMessages(); 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() { return getFile(Files.FILETYPE.PORTALS).getBoolean("Enabled"); @@ -23,7 +30,10 @@ public class AddonPortals implements Addon { @Override public void unload() { - + this.portalsCache.unload(); } + public PortalsCache getPortals() { + return portalsCache; + } } diff --git a/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/portals/PortalsCache.java b/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/portals/PortalsCache.java index 7e9828c..8ec4ad8 100644 --- a/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/portals/PortalsCache.java +++ b/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/portals/PortalsCache.java @@ -3,28 +3,31 @@ package me.SuperRonanCraft.BetterRTPAddons.addons.portals; import org.bukkit.Location; import org.bukkit.entity.Player; +import java.util.HashMap; + public class PortalsCache { - Player p; - Location loc_1, loc_2; + private final HashMap portalsBeingCreated = new HashMap<>(); - public PortalsCache(Player p) { - this.p = p; + void unload() { + portalsBeingCreated.clear(); } - void setLoc_1(Location loc) { - this.loc_1 = loc; + void uncache(Player p) { + portalsBeingCreated.remove(p); } - void setLoc_2(Location loc) { - this.loc_2 = loc; + public void setPortal(Player p, Location loc, boolean loc2) { + 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() { - return this.loc_1; - } - - Location getLoc_2() { - return this.loc_2; + public PortalsCreation getPortal(Player p) { + return portalsBeingCreated.getOrDefault(p, null); } } diff --git a/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/portals/PortalsCommand.java b/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/portals/PortalsCommand.java index dee250f..2f60734 100644 --- a/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/portals/PortalsCommand.java +++ b/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/portals/PortalsCommand.java @@ -6,9 +6,11 @@ import me.SuperRonanCraft.BetterRTP.player.commands.RTPCommandHelpable; import me.SuperRonanCraft.BetterRTPAddons.addons.portals.cmds.*; import org.bukkit.command.CommandSender; +import java.util.ArrayList; import java.util.List; public class PortalsCommand implements RTPCommand, RTPCommandHelpable { + AddonPortals pl; PortalsCommand(AddonPortals pl) { @@ -21,18 +23,26 @@ public class PortalsCommand implements RTPCommand, RTPCommandHelpable { @Override public void execute(CommandSender sendi, String label, String[] args) { - for (subCmd subCmd : subCmd.values()) { - if (args[1].equalsIgnoreCase(subCmd.name())) { - subCmd.cmd.execute(sendi, label, args); - return; + if (args.length > 1) + for (subCmd subCmd : subCmd.values()) { + if (args[1].equalsIgnoreCase(subCmd.name())) { + subCmd.cmd.execute(sendi, label, args, pl); + return; + } } - } - sendi.sendMessage("Invalid command!"); + sendi.sendMessage("Invalid argument!"); } @Override public List tabComplete(CommandSender sendi, String[] args) { - return null; + List 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 diff --git a/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/portals/PortalsCreation.java b/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/portals/PortalsCreation.java new file mode 100644 index 0000000..20deaf8 --- /dev/null +++ b/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/portals/PortalsCreation.java @@ -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; + } +} diff --git a/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/portals/cmds/LocationFinder.java b/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/portals/cmds/LocationFinder.java new file mode 100644 index 0000000..3274406 --- /dev/null +++ b/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/portals/cmds/LocationFinder.java @@ -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; + } + +} 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 0151f71..af0f351 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 @@ -1,11 +1,20 @@ 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.entity.Player; public class PortalsCommand_Create implements PortalsCommands { @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!"); + 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!"); } } diff --git a/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/portals/cmds/PortalsCommand_Loc1.java b/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/portals/cmds/PortalsCommand_Loc1.java index 07b2c93..c681b93 100644 --- a/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/portals/cmds/PortalsCommand_Loc1.java +++ b/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/portals/cmds/PortalsCommand_Loc1.java @@ -1,11 +1,19 @@ 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.entity.Player; -public class PortalsCommand_Loc1 implements PortalsCommands { +public class PortalsCommand_Loc1 implements PortalsCommands, LocationFinder { @Override - public void execute(CommandSender sendi, String label, String[] args) { - sendi.sendMessage("Portals Loc1 command!"); + public void execute(CommandSender sendi, String label, String[] args, AddonPortals addonPortals) { + 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); } } diff --git a/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/portals/cmds/PortalsCommand_Loc2.java b/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/portals/cmds/PortalsCommand_Loc2.java index c5c5439..96b33a4 100644 --- a/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/portals/cmds/PortalsCommand_Loc2.java +++ b/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/portals/cmds/PortalsCommand_Loc2.java @@ -1,11 +1,20 @@ 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.entity.Player; +import org.bukkit.util.BlockIterator; -public class PortalsCommand_Loc2 implements PortalsCommands { +public class PortalsCommand_Loc2 implements PortalsCommands, LocationFinder { @Override - public void execute(CommandSender sendi, String label, String[] args) { - sendi.sendMessage("Portals Loc2 command!"); + public void execute(CommandSender sendi, String label, String[] args, AddonPortals addonPortals) { + 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()); } } diff --git a/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/portals/cmds/PortalsCommands.java b/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/portals/cmds/PortalsCommands.java index 9e20950..659b2da 100644 --- a/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/portals/cmds/PortalsCommands.java +++ b/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/portals/cmds/PortalsCommands.java @@ -1,9 +1,10 @@ package me.SuperRonanCraft.BetterRTPAddons.addons.portals.cmds; +import me.SuperRonanCraft.BetterRTPAddons.addons.portals.AddonPortals; import org.bukkit.command.CommandSender; public interface PortalsCommands { - void execute(CommandSender sendi, String label, String[] args); + void execute(CommandSender sendi, String label, String[] args, AddonPortals addonPortals); }