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.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;
}
}

View File

@ -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<Player, PortalsCreation> 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);
}
}

View File

@ -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) {
if (args.length > 1)
for (subCmd subCmd : subCmd.values()) {
if (args[1].equalsIgnoreCase(subCmd.name())) {
subCmd.cmd.execute(sendi, label, args);
subCmd.cmd.execute(sendi, label, args, pl);
return;
}
}
sendi.sendMessage("Invalid command!");
sendi.sendMessage("Invalid argument!");
}
@Override
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

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;
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!");
}
}

View File

@ -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);
}
}

View File

@ -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());
}
}

View File

@ -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);
}