Location defaults fix + Rtp now requires rtp setup info + Location implemented into rtp'ing

This commit is contained in:
SuperRonanCraft 2021-03-23 14:02:11 -04:00
parent f52adfddbf
commit 7ecf1cd1a9
7 changed files with 274 additions and 114 deletions

View File

@ -2,6 +2,7 @@ package me.SuperRonanCraft.BetterRTP.player.commands;
import me.SuperRonanCraft.BetterRTP.BetterRTP;
import me.SuperRonanCraft.BetterRTP.player.rtp.RTPCooldown;
import me.SuperRonanCraft.BetterRTP.player.rtp.RTPSetupInformation;
import me.SuperRonanCraft.BetterRTP.player.rtp.RTP_TYPE;
import me.SuperRonanCraft.BetterRTP.references.customEvents.RTP_CommandEvent;
import me.SuperRonanCraft.BetterRTP.references.file.FileBasics;
@ -148,7 +149,8 @@ public class Commands {
if (pl.getSettings().delayEnabled && delayTimer > 0) //Delay enabled?
if (!pl.getPerms().getBypassDelay(player)) //Can bypass?
delay = true;
pl.getRTP().start(player, sendi, world, biomes, delay, rtpType);
RTPSetupInformation setup_info = new RTPSetupInformation(world, sendi, player, true, biomes, delay, rtpType, null);
pl.getRTP().start(setup_info);
}
}
}

View File

@ -4,6 +4,7 @@ import me.SuperRonanCraft.BetterRTP.BetterRTP;
import me.SuperRonanCraft.BetterRTP.player.commands.RTPCommandHelpable;
import me.SuperRonanCraft.BetterRTP.player.commands.RTP_SETUP_TYPE;
import me.SuperRonanCraft.BetterRTP.player.rtp.RTPParticles;
import me.SuperRonanCraft.BetterRTP.player.rtp.RTPSetupInformation;
import me.SuperRonanCraft.BetterRTP.references.worlds.WorldDefault;
import me.SuperRonanCraft.BetterRTP.references.worlds.WorldLocations;
import me.SuperRonanCraft.BetterRTP.references.worlds.WorldPlayer;
@ -117,30 +118,30 @@ public class CmdInfo implements RTPCommand, RTPCommandHelpable {
List<String> info = new ArrayList<>();
BetterRTP pl = BetterRTP.getInstance();
String _true = "&aTrue", _false = "&bFalse";
info.add("&eWorld: &7" + w.getName() + (personal ? " &7(personalized)" : ""));
info.add("&eWorld Name: &7" + w.getName() + (personal ? " &7(personalized)" : ""));
if (personal)
info.add("&7- &6Allowed: " + (pl.getPerms().getAWorld(sendi, w.getName()) ? _true : _false));
if (pl.getRTP().getDisabledWorlds().contains(w.getName())) //DISABLED
if (pl.getRTP().getDisabledWorlds().contains(w.getName())) //World disabled
info.add("&7- &6Disabled: " + _true);
else {
info.add("&7- &6Disabled: " + _false);
if (pl.getRTP().overriden.containsKey(w.getName()))
info.add("&7- &6Overriden: " + _true + " &7 target world `" + pl.getRTP().overriden.get(w.getName()) + "`");
if (pl.getRTP().overriden.containsKey(w.getName())) //World Overriden
info.add("&7- &6Overriden: " + _true + " &7- target `" + pl.getRTP().overriden.get(w.getName()) + "`");
else {
info.add("&7- &6Overriden&7: " + _false);
WorldPlayer _rtpworld = BetterRTP.getInstance().getRTP().getPlayerWorld(sendi, w.getName(), null, personal);
WorldPlayer _rtpworld = BetterRTP.getInstance().getRTP().getPlayerWorld(new RTPSetupInformation(w.getName(), sendi, null, personal));
WorldDefault worldDefault = BetterRTP.getInstance().getRTP().defaultWorld;
info.add("&7- &6Setup Type&7: " + _rtpworld.setup_type.name() + (_rtpworld.setup_type == RTP_SETUP_TYPE.LOCATION ? "&7(" + _rtpworld.setup_name + ")" : ""));
info.add("&7- &6Setup Type&7: " + _rtpworld.setup_type.name() + getInfo(_rtpworld, worldDefault, "setup"));
info.add("&7- &6Use World Border&7: " + (_rtpworld.getUseWorldborder() ? _true : _false));
info.add("&7- &6Permission Group&7: " + (_rtpworld.getConfig() != null ? "&e" + _rtpworld.getConfig().name : "&cN/A"));
info.add("&7- &6World Type&7: &f" + _rtpworld.getWorldtype().name());
info.add("&7- &6Center X&7: &f" + _rtpworld.getCenterX() + getInfo(_rtpworld, worldDefault, "centerx"));
info.add("&7- &6Center Z&7: &f" + _rtpworld.getCenterZ() + getInfo(_rtpworld, worldDefault, "centerz"));
info.add("&7- &6Maximum Radius&7: &f" + _rtpworld.getMaxRad() + getInfo(_rtpworld, worldDefault, "max"));
info.add("&7- &6Minimum Radius&7: &f" + _rtpworld.getMinRad() + getInfo(_rtpworld, worldDefault, "min"));
info.add("&7- &6Max Radius&7: &f" + _rtpworld.getMaxRad() + getInfo(_rtpworld, worldDefault, "max"));
info.add("&7- &6Min Radius&7: &f" + _rtpworld.getMinRad() + getInfo(_rtpworld, worldDefault, "min"));
info.add("&7- &6Price&7: &f" + _rtpworld.getPrice() + getInfo(_rtpworld, worldDefault, "price"));
info.add("&7- &6World Type&7: &f" + _rtpworld.getWorldtype().name());
info.add("&7- &6Biomes&7: &f" + _rtpworld.getBiomes().toString());
info.add("&7- &6Shape&7: &f" + _rtpworld.getShape().toString());
info.add("&7- &6Shape&7: &f" + _rtpworld.getShape().toString() + getInfo(_rtpworld, worldDefault, "shape"));
info.add("&7- &6Permission Group&7: " + (_rtpworld.getConfig() != null ? "&e" + _rtpworld.getConfig().name : "&cN/A"));
}
}
return info;
@ -150,15 +151,19 @@ public class CmdInfo implements RTPCommand, RTPCommandHelpable {
private String getInfo(WorldPlayer worldPlayer, WorldDefault worldDefault, String type) {
switch (type) {
case "centerx":
return worldPlayer.getUseWorldborder() || worldPlayer.getCenterX() != worldDefault.getCenterX() ? worldPlayer.getUseWorldborder() ? " &8(worldborder)" : "&a*" : "";
return worldPlayer.getUseWorldborder() || worldPlayer.getCenterX() == worldDefault.getCenterX() ? worldPlayer.getUseWorldborder() ? " &8(worldborder)" : " &8(default)" : "";
case "centerz":
return worldPlayer.getUseWorldborder() || worldPlayer.getCenterX() != worldDefault.getCenterZ() ? worldPlayer.getUseWorldborder() ? " &8(worldborder)" : "&a*" : "";
return worldPlayer.getUseWorldborder() || worldPlayer.getCenterZ() == worldDefault.getCenterZ() ? worldPlayer.getUseWorldborder() ? " &8(worldborder)" : " &8(default)" : "";
case "max":
return worldPlayer.getUseWorldborder() || worldPlayer.getMaxRad() != worldDefault.getMaxRad() ? worldPlayer.getUseWorldborder() ? " &8(worldborder)" : "&a*" : "";
return worldPlayer.getUseWorldborder() || worldPlayer.getMaxRad() == worldDefault.getMaxRad() ? worldPlayer.getUseWorldborder() ? " &8(worldborder)" : " &8(default)" : "";
case "min":
return worldPlayer.getMinRad() != worldDefault.getMinRad() ? "&a*" : "";
return worldPlayer.getMinRad() == worldDefault.getMinRad() ? " &8(default)" : "";
case "price":
return worldPlayer.getPrice() != worldDefault.getPrice() ? "&a*" : "";
return worldPlayer.getPrice() == worldDefault.getPrice() ? " &8(default)" : "";
case "shape":
return worldPlayer.getShape() == worldDefault.getShape() ? " &8(default)" : "";
case "setup":
return worldPlayer.setup_type == RTP_SETUP_TYPE.LOCATION ? " &7(" + worldPlayer.setup_name + ")" : "";
}
return "";
}

View File

@ -9,10 +9,7 @@ import org.bukkit.World;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.*;
public class RTP {
@ -149,35 +146,55 @@ public class RTP {
return disabledWorlds;
}
public WorldPlayer getPlayerWorld(CommandSender sendi, String world_name, List<String> biomes, boolean personal) {
WorldPlayer pWorld = new WorldPlayer(sendi, Bukkit.getWorld(world_name));
public WorldPlayer getPlayerWorld(RTPSetupInformation setup_info) {
WorldPlayer pWorld = new WorldPlayer(setup_info.sender, Bukkit.getWorld(setup_info.world));
//Locations
for (Map.Entry<String, RTPWorld> location_set : worldLocations.entrySet()) {
RTPWorld location = location_set.getValue();
if (location.getWorld().getName().equals(world_name)) {
pWorld.setup(location_set.getKey(), location, location.getBiomes(), personal);
if (setup_info.location == null) {
List<RTPWorld> locationsList = new ArrayList<>();
for (Map.Entry<String, RTPWorld> location_set : worldLocations.entrySet()) {
RTPWorld location = location_set.getValue();
if (location.getWorld().getName().equals(setup_info.world))
locationsList.add(location_set.getValue());
}
if (!locationsList.isEmpty()) {
RTPWorld location = locationsList.size() > 1 ? locationsList.get((new Random()).nextInt(locationsList.size() - 1)) : locationsList.get(0);
setup_info.location = (WorldLocations) location;
}
}
if (setup_info.location != null) {
String setup_name = null;
for (Map.Entry<String, RTPWorld> location_set : worldLocations.entrySet()) {
RTPWorld location = location_set.getValue();
if (location == setup_info.location) {
setup_name = location_set.getKey();
break;
}
}
pWorld.setup(setup_name, setup_info.location, setup_info.location.getBiomes(), setup_info.personalized);
}
if (!pWorld.isSetup()) {
//Custom World
if (customWorlds.containsKey(world_name)) {
if (customWorlds.containsKey(setup_info.world)) {
RTPWorld cWorld = customWorlds.get(pWorld.getWorld().getName());
pWorld.setup(null, cWorld, biomes, personal);
pWorld.setup(null, cWorld, setup_info.biomes, setup_info.personalized);
}
//Default World
else
pWorld.setup(null, defaultWorld, biomes, personal);
pWorld.setup(null, defaultWorld, setup_info.biomes, setup_info.personalized);
}
//World type
WORLD_TYPE world_type; //World rtp type
if (this.world_type.containsKey(world_name))
world_type = this.world_type.get(world_name);
if (this.world_type.containsKey(setup_info.world))
world_type = this.world_type.get(setup_info.world);
else {
world_type = WORLD_TYPE.NORMAL;
this.world_type.put(world_name, world_type); //Defaults this so the error message isn't spammed
getPl().getLogger().warning("Seems like the world `" + world_name + "` does not have a `WorldType` declared. " +
this.world_type.put(setup_info.world, world_type); //Defaults this so the error message isn't spammed
getPl().getLogger().warning("Seems like the world `" + setup_info.world + "` does not have a `WorldType` declared. " +
"Please add/fix this in the config.yml file! " +
"This world will be treated as an overworld!");
}
@ -189,42 +206,11 @@ public class RTP {
return BetterRTP.getInstance();
}
public void start(Player p, CommandSender sendi, String world_name, List<String> biomes, boolean delay, RTP_TYPE rtpType) {
// Check overrides
if (world_name == null) {
world_name = p.getWorld().getName();
} else { // Check if nulled or world doesnt exist
World _world = Bukkit.getWorld(world_name);
if (_world == null) { //Check if world has spaces instead of underscores
_world = Bukkit.getWorld(world_name.replace("_", " "));
world_name = world_name.replace("_", "");
}
if (_world == null) {
getPl().getText().getNotExist(sendi, world_name);
return;
}
}
if (overriden.containsKey(world_name))
world_name = overriden.get(world_name);
// Not forced and has 'betterrtp.world.<world>'
if (sendi == p && !getPl().getPerms().getAWorld(sendi, world_name)) {
getPl().getText().getNoPermissionWorld(p, world_name);
return;
}
// Check disabled worlds
if (disabledWorlds.contains(world_name)) {
getPl().getText().getDisabledWorld(sendi, world_name);
return;
}
WorldPlayer pWorld = getPlayerWorld(p, world_name, biomes, true);
// Economy
if (!getPl().getEco().hasBalance(sendi, pWorld))
return;
//BetterRTP.getInstance().getpInfo().setRTPType(p, rtpType);
rtp(sendi, pWorld, delay, rtpType);
}
public void start(RTPSetupInformation setup_info) {
String world_name = setup_info.world;
Player p = setup_info.player;
CommandSender sendi = setup_info.sender;
public void start(Player p, CommandSender sendi, String world_name, List<String> biomes, boolean delay, RTP_TYPE rtpType, String location_name) {
// Check overrides
if (world_name == null) {
world_name = p.getWorld().getName();
@ -251,12 +237,12 @@ public class RTP {
getPl().getText().getDisabledWorld(sendi, world_name);
return;
}
WorldPlayer pWorld = getPlayerWorld(p, world_name, biomes, true);
WorldPlayer pWorld = getPlayerWorld(setup_info);
// Economy
if (!getPl().getEco().hasBalance(sendi, pWorld))
return;
//BetterRTP.getInstance().getpInfo().setRTPType(p, rtpType);
rtp(sendi, pWorld, delay, rtpType);
rtp(sendi, pWorld, setup_info.delay, setup_info.rtp_type);
}
private void rtp(CommandSender sendi, WorldPlayer pWorld, boolean delay, RTP_TYPE type) {

View File

@ -0,0 +1,46 @@
package me.SuperRonanCraft.BetterRTP.player.rtp;
import me.SuperRonanCraft.BetterRTP.references.worlds.WorldLocations;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import java.util.List;
public class RTPSetupInformation {
//Will provide information to setup an RTP attempt
public String world;
public CommandSender sender;
public Player player;
public boolean personalized;
public List<String> biomes;
public WorldLocations location;
public boolean delay;
public RTP_TYPE rtp_type;
public RTPSetupInformation(String world, CommandSender sender, Player player, boolean personalized) {
this.world = world;
this.sender = sender;
this.player = player;
this.personalized = personalized;
}
public RTPSetupInformation(String world, CommandSender sender, Player player, boolean personalized, List<String> biomes) {
this.world = world;
this.sender = sender;
this.player = player;
this.personalized = personalized;
this.biomes = biomes;
}
public RTPSetupInformation(String world, CommandSender sender, Player player, boolean personalized, List<String> biomes,
boolean delay, RTP_TYPE rtp_type, WorldLocations location) {
this.world = world;
this.sender = sender;
this.player = player;
this.personalized = personalized;
this.biomes = biomes;
this.delay = delay;
this.rtp_type = rtp_type;
this.location = location;
}
}

View File

@ -0,0 +1,40 @@
package me.SuperRonanCraft.BetterRTP.references.worlds;
import me.SuperRonanCraft.BetterRTP.BetterRTP;
import me.SuperRonanCraft.BetterRTP.player.rtp.RTP_SHAPE;
import org.bukkit.World;
import java.util.List;
public interface RTPWorld_Defaulted {
void setUseWorldBorder(boolean value);
void setCenterX(int value);
void setCenterZ(int value);
void setMaxRad(int value);
void setMinRad(int value);
void setPrice(int value);
void setBiomes(List<String> value);
void setWorld(String value);
void setShape(RTP_SHAPE value);
default void setupDefaults() {
WorldDefault worldDefault = BetterRTP.getInstance().getRTP().defaultWorld;
setMaxRad(worldDefault.getMaxRad());
setMinRad(worldDefault.getMinRad());
setUseWorldBorder(worldDefault.getUseWorldborder());
setCenterX(worldDefault.getCenterX());
setCenterZ(worldDefault.getCenterZ());
setPrice(worldDefault.getPrice());
setBiomes(worldDefault.getBiomes());
setShape(worldDefault.getShape());
}
}

View File

@ -10,11 +10,11 @@ import java.util.ArrayList;
import java.util.List;
import java.util.Map;
public class WorldCustom implements RTPWorld {
public class WorldCustom implements RTPWorld, RTPWorld_Defaulted {
public String world;
private boolean useWorldborder;
private int CenterX, CenterZ, maxBorderRad, minBorderRad, price;
private List<String> Biomes;
private int centerX, centerZ, maxBorderRad, minBorderRad, price;
private List<String> biomes;
private RTP_SHAPE shape;
public WorldCustom(String world) {
@ -24,15 +24,7 @@ public class WorldCustom implements RTPWorld {
this.world = world;
//Set Defaults
WorldDefault worldDefault = BetterRTP.getInstance().getRTP().defaultWorld;
maxBorderRad = worldDefault.getMaxRad();
minBorderRad = worldDefault.getMinRad();
useWorldborder = worldDefault.getUseWorldborder();
CenterX = worldDefault.getCenterX();
CenterZ = worldDefault.getCenterZ();
price = worldDefault.getPrice();
Biomes = worldDefault.getBiomes();
shape = worldDefault.getShape();
setupDefaults();
//Find Custom World and cache values
for (Map<?, ?> m : map) {
@ -49,11 +41,11 @@ public class WorldCustom implements RTPWorld {
}
if (test.get("CenterX") != null) {
if (test.get("CenterX").getClass() == Integer.class)
CenterX = Integer.parseInt((test.get("CenterX")).toString());
centerX = Integer.parseInt((test.get("CenterX")).toString());
}
if (test.get("CenterZ") != null) {
if (test.get("CenterZ").getClass() == Integer.class) {
CenterZ = Integer.parseInt((test.get("CenterZ")).toString());
centerZ = Integer.parseInt((test.get("CenterZ")).toString());
}
}
if (test.get("MaxRadius") != null) {
@ -78,16 +70,16 @@ public class WorldCustom implements RTPWorld {
}
if (test.get("Biomes") != null) {
if (test.get("Biomes").getClass() == ArrayList.class)
this.Biomes = new ArrayList<String>((ArrayList) test.get("Biomes"));
this.biomes = new ArrayList<String>((ArrayList) test.get("Biomes"));
}
if (BetterRTP.getInstance().getFiles().getType(FileBasics.FILETYPE.ECO).getBoolean("Economy.Enabled"))
if (test.get("Price") != null) {
if (test.get("Price").getClass() == Integer.class)
this.price = Integer.parseInt(test.get("Price").toString());
else
price = worldDefault.getPrice(world);
} else
price = worldDefault.getPrice(world);
//else
//price = worldDefault.getPrice(world);
} //else
//price = worldDefault.getPrice(world);
if (test.get("Shape") != null) {
if (test.get("Shape").getClass() == String.class) {
try {
@ -141,12 +133,12 @@ public class WorldCustom implements RTPWorld {
@Override
public int getCenterX() {
return CenterX;
return centerX;
}
@Override
public int getCenterZ() {
return CenterZ;
return centerZ;
}
@Override
@ -166,7 +158,7 @@ public class WorldCustom implements RTPWorld {
@Override
public List<String> getBiomes() {
return Biomes;
return biomes;
}
@Override
@ -178,4 +170,50 @@ public class WorldCustom implements RTPWorld {
public RTP_SHAPE getShape() {
return shape;
}
//Setters
@Override
public void setUseWorldBorder(boolean value) {
this.useWorldborder = value;
}
@Override
public void setCenterX(int value) {
this.centerX = value;
}
@Override
public void setCenterZ(int value) {
this.centerZ = value;
}
@Override
public void setMaxRad(int value) {
this.maxBorderRad = value;
}
@Override
public void setMinRad(int value) {
this.minBorderRad = value;
}
@Override
public void setPrice(int value) {
this.price = value;
}
@Override
public void setBiomes(List<String> value) {
this.biomes = value;
}
@Override
public void setWorld(String value) {
this.world = value;
}
@Override
public void setShape(RTP_SHAPE value) {
this.shape = value;
}
}

View File

@ -1,32 +1,28 @@
package me.SuperRonanCraft.BetterRTP.references.worlds;
import me.SuperRonanCraft.BetterRTP.BetterRTP;
import me.SuperRonanCraft.BetterRTP.player.rtp.RTPPermissionGroup;
import me.SuperRonanCraft.BetterRTP.player.rtp.RTP_SHAPE;
import me.SuperRonanCraft.BetterRTP.references.file.FileBasics;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.World;
import org.bukkit.WorldBorder;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Random;
public class WorldLocations implements RTPWorld {
public class WorldLocations implements RTPWorld, RTPWorld_Defaulted {
private boolean useWorldborder;
private int CenterX, CenterZ, maxBorderRad, minBorderRad, price;
private List<String> Biomes;
private int centerX, centerZ, maxBorderRad, minBorderRad, price;
private List<String> biomes;
private String world;
private RTP_SHAPE shape;
public WorldLocations(String location_name) {
FileBasics.FILETYPE config = BetterRTP.getInstance().getFiles().getType(FileBasics.FILETYPE.LOCATIONS);
List<Map<?, ?>> map = config.getMapList("Locations");
WorldDefault worldDefault = BetterRTP.getInstance().getRTP().defaultWorld;
//WorldDefault worldDefault = BetterRTP.getInstance().getRTP().defaultWorld;
setupDefaults();
//Find Location and cache its values
for (Map<?, ?> m : map) {
@ -50,11 +46,11 @@ public class WorldLocations implements RTPWorld {
}
if (test.get("CenterX") != null) {
if (test.get("CenterX").getClass() == Integer.class)
CenterX = Integer.parseInt((test.get("CenterX")).toString());
centerX = Integer.parseInt((test.get("CenterX")).toString());
}
if (test.get("CenterZ") != null) {
if (test.get("CenterZ").getClass() == Integer.class) {
CenterZ = Integer.parseInt((test.get("CenterZ")).toString());
centerZ = Integer.parseInt((test.get("CenterZ")).toString());
}
}
if (test.get("MaxRadius") != null) {
@ -79,16 +75,16 @@ public class WorldLocations implements RTPWorld {
}
if (test.get("Biomes") != null) {
if (test.get("Biomes").getClass() == ArrayList.class)
this.Biomes = new ArrayList<String>((ArrayList) test.get("Biomes"));
this.biomes = new ArrayList<String>((ArrayList) test.get("Biomes"));
}
if (BetterRTP.getInstance().getFiles().getType(FileBasics.FILETYPE.ECO).getBoolean("Economy.Enabled"))
if (test.get("Price") != null) {
if (test.get("Price").getClass() == Integer.class)
this.price = Integer.parseInt(test.get("Price").toString());
else
price = worldDefault.getPrice(world);
} else
price = worldDefault.getPrice(world);
//else
// price = worldDefault.getPrice(world);
} //else
//price = worldDefault.getPrice(world);
if (test.get("Shape") != null) {
if (test.get("Shape").getClass() == String.class) {
try {
@ -113,17 +109,17 @@ public class WorldLocations implements RTPWorld {
@Override
public boolean getUseWorldborder() {
return useWorldborder;
return false;//useWorldborder;
}
@Override
public int getCenterX() {
return CenterX;
return centerX;
}
@Override
public int getCenterZ() {
return CenterZ;
return centerZ;
}
@Override
@ -143,11 +139,58 @@ public class WorldLocations implements RTPWorld {
@Override
public List<String> getBiomes() {
return Biomes;
return biomes;
}
@Override
public RTP_SHAPE getShape() {
return shape;
}
//Setters
@Override
public void setUseWorldBorder(boolean value) {
this.useWorldborder = value;
}
@Override
public void setCenterX(int value) {
this.centerX = value;
}
@Override
public void setCenterZ(int value) {
this.centerZ = value;
}
@Override
public void setMaxRad(int value) {
this.maxBorderRad = value;
}
@Override
public void setMinRad(int value) {
this.minBorderRad = value;
}
@Override
public void setPrice(int value) {
this.price = value;
}
@Override
public void setBiomes(List<String> value) {
this.biomes = value;
}
@Override
public void setWorld(String value) {
this.world = value;
}
@Override
public void setShape(RTP_SHAPE value) {
this.shape = value;
}
}