Adds an option for setting the exit velocity of a teleporting player
Some checks failed
EpicKnarvik97/Stargate/pipeline/head There was a failure building this commit
Some checks failed
EpicKnarvik97/Stargate/pipeline/head There was a failure building this commit
This commit is contained in:
parent
05a5fb2160
commit
bddf8c55d5
@ -90,6 +90,15 @@ public class CommandConfig implements CommandExecutor {
|
|||||||
configuration.set(selectedOption.getConfigNode(), intValue);
|
configuration.set(selectedOption.getConfigNode(), intValue);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
case DOUBLE -> {
|
||||||
|
Double doubleValue = getDouble(commandSender, selectedOption, value);
|
||||||
|
if (doubleValue == null) {
|
||||||
|
return;
|
||||||
|
} else {
|
||||||
|
Stargate.getStargateConfig().getConfigOptionsReference().put(selectedOption, doubleValue);
|
||||||
|
configuration.set(selectedOption.getConfigNode(), doubleValue);
|
||||||
|
}
|
||||||
|
}
|
||||||
case STRING -> {
|
case STRING -> {
|
||||||
updateStringConfigValue(selectedOption, commandSender, value);
|
updateStringConfigValue(selectedOption, commandSender, value);
|
||||||
configuration.set(selectedOption.getConfigNode(), value);
|
configuration.set(selectedOption.getConfigNode(), value);
|
||||||
@ -314,6 +323,30 @@ public class CommandConfig implements CommandExecutor {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets a double from a string
|
||||||
|
*
|
||||||
|
* @param commandSender <p>The command sender that sent the config command</p>
|
||||||
|
* @param selectedOption <p>The option the command sender is trying to change</p>
|
||||||
|
* @param value <p>The value given</p>
|
||||||
|
* @return <p>A double, or null if it was invalid</p>
|
||||||
|
*/
|
||||||
|
private Double getDouble(CommandSender commandSender, ConfigOption selectedOption, String value) {
|
||||||
|
try {
|
||||||
|
double doubleValue = Double.parseDouble(value);
|
||||||
|
|
||||||
|
if (selectedOption == ConfigOption.EXIT_VELOCITY && doubleValue < 0) {
|
||||||
|
commandSender.sendMessage(ChatColor.RED + "This config option cannot be negative.");
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
return doubleValue;
|
||||||
|
} catch (NumberFormatException exception) {
|
||||||
|
commandSender.sendMessage(ChatColor.RED + "Invalid number given");
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Reloads the config if necessary
|
* Reloads the config if necessary
|
||||||
*
|
*
|
||||||
|
@ -21,16 +21,17 @@ public class ConfigTabCompleter implements TabCompleter {
|
|||||||
|
|
||||||
private List<String> signTypes;
|
private List<String> signTypes;
|
||||||
private List<String> booleans;
|
private List<String> booleans;
|
||||||
private List<String> numbers;
|
private List<String> integers;
|
||||||
private List<String> chatColors;
|
private List<String> chatColors;
|
||||||
private List<String> languages;
|
private List<String> languages;
|
||||||
private List<String> extendedColors;
|
private List<String> extendedColors;
|
||||||
|
private List<String> doubles;
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
@Override
|
@Override
|
||||||
public List<String> onTabComplete(@NotNull CommandSender commandSender, @NotNull Command command, @NotNull String s,
|
public List<String> onTabComplete(@NotNull CommandSender commandSender, @NotNull Command command, @NotNull String s,
|
||||||
@NotNull String[] args) {
|
@NotNull String[] args) {
|
||||||
if (signTypes == null || booleans == null || numbers == null || chatColors == null || languages == null) {
|
if (signTypes == null || booleans == null || integers == null || chatColors == null || languages == null) {
|
||||||
initializeAutoCompleteLists();
|
initializeAutoCompleteLists();
|
||||||
}
|
}
|
||||||
if (args.length > 1) {
|
if (args.length > 1) {
|
||||||
@ -104,7 +105,16 @@ public class ConfigTabCompleter implements TabCompleter {
|
|||||||
//If the config value is an integer, display some valid numbers
|
//If the config value is an integer, display some valid numbers
|
||||||
if (selectedOption.getDataType() == OptionDataType.INTEGER) {
|
if (selectedOption.getDataType() == OptionDataType.INTEGER) {
|
||||||
if (typedText.trim().isEmpty()) {
|
if (typedText.trim().isEmpty()) {
|
||||||
return numbers;
|
return integers;
|
||||||
|
} else {
|
||||||
|
return new ArrayList<>();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//If the config value is a double, display some valid numbers
|
||||||
|
if (selectedOption.getDataType() == OptionDataType.DOUBLE) {
|
||||||
|
if (typedText.trim().isEmpty()) {
|
||||||
|
return doubles;
|
||||||
} else {
|
} else {
|
||||||
return new ArrayList<>();
|
return new ArrayList<>();
|
||||||
}
|
}
|
||||||
@ -164,9 +174,9 @@ public class ConfigTabCompleter implements TabCompleter {
|
|||||||
booleans.add("true");
|
booleans.add("true");
|
||||||
booleans.add("false");
|
booleans.add("false");
|
||||||
|
|
||||||
numbers = new ArrayList<>();
|
integers = new ArrayList<>();
|
||||||
numbers.add("0");
|
integers.add("0");
|
||||||
numbers.add("5");
|
integers.add("5");
|
||||||
|
|
||||||
signTypes = new ArrayList<>();
|
signTypes = new ArrayList<>();
|
||||||
for (Material material : Material.values()) {
|
for (Material material : Material.values()) {
|
||||||
@ -181,6 +191,12 @@ public class ConfigTabCompleter implements TabCompleter {
|
|||||||
extendedColors = new ArrayList<>(chatColors);
|
extendedColors = new ArrayList<>(chatColors);
|
||||||
extendedColors.add("default");
|
extendedColors.add("default");
|
||||||
extendedColors.add("inverted");
|
extendedColors.add("inverted");
|
||||||
|
|
||||||
|
doubles = new ArrayList<>();
|
||||||
|
doubles.add("5");
|
||||||
|
doubles.add("1");
|
||||||
|
doubles.add("0.5");
|
||||||
|
doubles.add("0.1");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -156,8 +156,12 @@ public enum ConfigOption {
|
|||||||
/**
|
/**
|
||||||
* Whether to alert admins about new updates
|
* Whether to alert admins about new updates
|
||||||
*/
|
*/
|
||||||
ADMIN_UPDATE_ALERT("adminUpdateAlert", "Whether to alert admins about new plugin updates", true);
|
ADMIN_UPDATE_ALERT("adminUpdateAlert", "Whether to alert admins about new plugin updates", true),
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The velocity of players exiting a stargate, relative to the entry velocity
|
||||||
|
*/
|
||||||
|
EXIT_VELOCITY("gates.exitVelocity", "The velocity of players exiting stargates, relative to the entry velocity", 0.1D);
|
||||||
|
|
||||||
private final String configNode;
|
private final String configNode;
|
||||||
private final String description;
|
private final String description;
|
||||||
@ -184,6 +188,8 @@ public enum ConfigOption {
|
|||||||
this.dataType = OptionDataType.BOOLEAN;
|
this.dataType = OptionDataType.BOOLEAN;
|
||||||
} else if (defaultValue instanceof Integer) {
|
} else if (defaultValue instanceof Integer) {
|
||||||
this.dataType = OptionDataType.INTEGER;
|
this.dataType = OptionDataType.INTEGER;
|
||||||
|
} else if (defaultValue instanceof Double) {
|
||||||
|
this.dataType = OptionDataType.DOUBLE;
|
||||||
} else {
|
} else {
|
||||||
throw new IllegalArgumentException("Unknown config data type encountered: " + defaultValue);
|
throw new IllegalArgumentException("Unknown config data type encountered: " + defaultValue);
|
||||||
}
|
}
|
||||||
|
@ -6,17 +6,28 @@ package net.knarcraft.stargate.config;
|
|||||||
public enum OptionDataType {
|
public enum OptionDataType {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The data type for the option is a String
|
* The data type if the option is a String
|
||||||
*/
|
*/
|
||||||
STRING,
|
STRING,
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The data type for the option is a Boolean
|
* The data type if the option is a Boolean
|
||||||
*/
|
*/
|
||||||
BOOLEAN,
|
BOOLEAN,
|
||||||
STRING_LIST,
|
|
||||||
/**
|
/**
|
||||||
* The data type for the option is an Integer
|
* The data type if the option is a string list
|
||||||
*/
|
*/
|
||||||
INTEGER
|
STRING_LIST,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The data type if the option is an Integer
|
||||||
|
*/
|
||||||
|
INTEGER,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The data type if the option is a double
|
||||||
|
*/
|
||||||
|
DOUBLE
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -358,6 +358,7 @@ public final class StargateConfig {
|
|||||||
}
|
}
|
||||||
case BOOLEAN -> optionValue = newConfig.getBoolean(configNode);
|
case BOOLEAN -> optionValue = newConfig.getBoolean(configNode);
|
||||||
case INTEGER -> optionValue = newConfig.getInt(configNode);
|
case INTEGER -> optionValue = newConfig.getInt(configNode);
|
||||||
|
case DOUBLE -> optionValue = newConfig.getDouble(configNode);
|
||||||
default -> throw new IllegalArgumentException("Invalid config data type encountered");
|
default -> throw new IllegalArgumentException("Invalid config data type encountered");
|
||||||
}
|
}
|
||||||
configOptions.put(option, optionValue);
|
configOptions.put(option, optionValue);
|
||||||
|
@ -179,6 +179,15 @@ public final class StargateGateConfig {
|
|||||||
return (String) configOptions.get(ConfigOption.DEFAULT_GATE_NETWORK);
|
return (String) configOptions.get(ConfigOption.DEFAULT_GATE_NETWORK);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the exit velocity of players using stargates, relative to the entry velocity
|
||||||
|
*
|
||||||
|
* @return <p>The relative exit velocity</p>
|
||||||
|
*/
|
||||||
|
public double getExitVelocity() {
|
||||||
|
return (double) configOptions.get(ConfigOption.EXIT_VELOCITY);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Loads all config values related to gates
|
* Loads all config values related to gates
|
||||||
*/
|
*/
|
||||||
|
@ -3,9 +3,12 @@ package net.knarcraft.stargate.portal.teleporter;
|
|||||||
import net.knarcraft.stargate.Stargate;
|
import net.knarcraft.stargate.Stargate;
|
||||||
import net.knarcraft.stargate.event.StargatePlayerPortalEvent;
|
import net.knarcraft.stargate.event.StargatePlayerPortalEvent;
|
||||||
import net.knarcraft.stargate.portal.Portal;
|
import net.knarcraft.stargate.portal.Portal;
|
||||||
|
import net.knarcraft.stargate.utility.DirectionHelper;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.event.player.PlayerMoveEvent;
|
import org.bukkit.event.player.PlayerMoveEvent;
|
||||||
|
import org.bukkit.util.Vector;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The portal teleporter takes care of the actual portal teleportation for any players
|
* The portal teleporter takes care of the actual portal teleportation for any players
|
||||||
@ -32,6 +35,7 @@ public class PlayerTeleporter extends Teleporter {
|
|||||||
* @param event <p>The player move event triggering the event</p>
|
* @param event <p>The player move event triggering the event</p>
|
||||||
*/
|
*/
|
||||||
public void teleport(Portal origin, PlayerMoveEvent event) {
|
public void teleport(Portal origin, PlayerMoveEvent event) {
|
||||||
|
double velocity = player.getVelocity().length();
|
||||||
Location traveller = player.getLocation();
|
Location traveller = player.getLocation();
|
||||||
Location exit = getExit(player, traveller);
|
Location exit = getExit(player, traveller);
|
||||||
|
|
||||||
@ -56,9 +60,16 @@ public class PlayerTeleporter extends Teleporter {
|
|||||||
if (event == null) {
|
if (event == null) {
|
||||||
player.teleport(exit);
|
player.teleport(exit);
|
||||||
} else {
|
} else {
|
||||||
//The new method to teleport in a move event is set the "to" field.
|
//Set the exit location of the event
|
||||||
event.setTo(exit);
|
event.setTo(exit);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Set the velocity of the teleported player after the teleportation is finished
|
||||||
|
Bukkit.getScheduler().scheduleSyncDelayedTask(Stargate.getInstance(), () -> {
|
||||||
|
Vector newVelocityDirection = DirectionHelper.getDirectionVectorFromYaw(portal.getYaw());
|
||||||
|
Vector newVelocity = newVelocityDirection.multiply(velocity * Stargate.getGateConfig().getExitVelocity());
|
||||||
|
player.setVelocity(newVelocity);
|
||||||
|
}, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -15,6 +15,8 @@ gates:
|
|||||||
maxGatesEachNetwork: 0
|
maxGatesEachNetwork: 0
|
||||||
# defaultGateNetwork - The default gate network
|
# defaultGateNetwork - The default gate network
|
||||||
defaultGateNetwork: central
|
defaultGateNetwork: central
|
||||||
|
# exitVelocity - The velocity of players exiting stargates, relative to the entry velocity
|
||||||
|
exitVelocity: 0.1
|
||||||
cosmetic:
|
cosmetic:
|
||||||
# rememberDestination - Whether to remember the cursor location between uses
|
# rememberDestination - Whether to remember the cursor location between uses
|
||||||
rememberDestination: false
|
rememberDestination: false
|
||||||
|
Loading…
x
Reference in New Issue
Block a user