Additions

- Add No Build Permission
- Add &x to the regex builder
- Fix Config Grammar
- Moved Warp Message Delay into Messages.yml
This commit is contained in:
TreemanK 2023-11-16 20:40:40 +11:00
parent fd2c3d6534
commit e9abf01339
7 changed files with 51 additions and 45 deletions

View File

@ -3,28 +3,35 @@ package com.sekwah.advancedportals.bukkit;
import com.sekwah.advancedportals.bukkit.config.ConfigAccessor; import com.sekwah.advancedportals.bukkit.config.ConfigAccessor;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.checkerframework.checker.regex.qual.Regex;
public class PluginMessages { public class PluginMessages {
private static String WARP_MESSAGE; private static String WARP_MESSAGE;
private static String COOLDOWN_PROTECTION_MESSAGE; private static String COOLDOWN_PROTECTION_MESSAGE;
private static String PORTAL_COOLDOWN_MESSAGE; private static String PORTAL_COOLDOWN_MESSAGE;
private static String NO_PERMISSION_PORTAL; private static String NO_PERMISSION_PORTAL;
private static String NO_BUILD_PERMISSION;
public boolean useCustomPrefix = false; public boolean useCustomPrefix = false;
public static String customPrefix = "\u00A7a[\u00A7eAdvancedPortals\u00A7a]"; public static String customPrefix = "§a[§eAdvancedPortals§a]";
public static String customPrefixFail = "\u00A7c[\u00A77AdvancedPortals\u00A7c]"; public static String customPrefixFail = "§c[§7AdvancedPortals§c]";
// TODO: Create function for replacing all '&'
public PluginMessages (AdvancedPortalsPlugin plugin) { public PluginMessages (AdvancedPortalsPlugin plugin) {
ConfigAccessor config = new ConfigAccessor(plugin, "messages.yml"); ConfigAccessor config = new ConfigAccessor(plugin, "messages.yml");
this.useCustomPrefix = config.getConfig().getBoolean("UseCustomPrefix"); this.useCustomPrefix = config.getConfig().getBoolean("UseCustomPrefix");
String regexColorConverter = "&(?=[0-9a-fk-orx])";
if (useCustomPrefix) { if (useCustomPrefix) {
PluginMessages.customPrefix = config.getConfig().getString("CustomPrefix").replaceAll("&(?=[0-9a-fk-or])", "\u00A7"); PluginMessages.customPrefix = config.getConfig().getString("CustomPrefix", "§a[§eAdvancedPortals§a]").replaceAll(regexColorConverter, "§");
PluginMessages.customPrefixFail = config.getConfig().getString("CustomPrefixFail").replaceAll("&(?=[0-9a-fk-or])", "\u00A7"); PluginMessages.customPrefixFail = config.getConfig().getString("CustomPrefixFail", "§c[§7AdvancedPortals§c]").replaceAll(regexColorConverter, "§");
} }
WARP_MESSAGE = ChatColor.translateAlternateColorCodes('&', config.getConfig().getString("WarpMessage", "&aYou have warped to &e<warp>&a")); WARP_MESSAGE = config.getConfig().getString("WarpMessage", "§aYou have warped to §e<warp>§a").replaceAll(regexColorConverter, "§");
COOLDOWN_PROTECTION_MESSAGE = ChatColor.translateAlternateColorCodes('&', config.getConfig().getString("CooldownMessage", "&cThere is &e<time>&c join cooldown protection left.")); COOLDOWN_PROTECTION_MESSAGE = config.getConfig().getString("CooldownMessage", "§cThere is §e<time>§c join cooldown protection left.").replaceAll(regexColorConverter, "§");
NO_PERMISSION_PORTAL = ChatColor.translateAlternateColorCodes('&', config.getConfig().getString("NoPermissionPortal", "&cYou do not have permission to use this portal!")); NO_PERMISSION_PORTAL = config.getConfig().getString("NoPermissionPortal", "§cYou do not have permission to use this portal!").replaceAll(regexColorConverter, "§");
PORTAL_COOLDOWN_MESSAGE = ChatColor.translateAlternateColorCodes('&', config.getConfig().getString("PortalCooldownMessage", "&cPlease wait &e<time> &cuntil attempting to enter this portal again")); PORTAL_COOLDOWN_MESSAGE = config.getConfig().getString("PortalCooldownMessage", "§cPlease wait §e<time> §cuntil attempting to enter this portal again").replaceAll(regexColorConverter, "§");
NO_BUILD_PERMISSION = config.getConfig().getString("NoBuildPermission", "§cYou don't have permission to build here!").replaceAll(regexColorConverter, "§");
} }
// This class is so then the common messages in commands or just messages over the commands are the same and can be // This class is so then the common messages in commands or just messages over the commands are the same and can be
@ -40,18 +47,17 @@ public class PluginMessages {
return COOLDOWN_PROTECTION_MESSAGE.replace("<time>", time + secondsOrSecond); return COOLDOWN_PROTECTION_MESSAGE.replace("<time>", time + secondsOrSecond);
} }
public static String getPortalCooldownMessage(int time) {
String secondsOrSecond = (time == 1) ? " second" : " seconds";
return COOLDOWN_PROTECTION_MESSAGE.replace("<time>", time + secondsOrSecond);
}
public static String getNoPermissionPortal() { public static String getNoPermissionPortal() {
return NO_PERMISSION_PORTAL; return NO_PERMISSION_PORTAL;
} }
public static String getNoBuildPermission() {
return NO_BUILD_PERMISSION;
}
public static void UnknownCommand(CommandSender sender, String command) { public static void UnknownCommand(CommandSender sender, String command) {
sender.sendMessage(customPrefixFail + " You need to type something after /" + command + "\n"); sender.sendMessage(customPrefixFail + " You need to type something after /" + command + "\n");
sender.sendMessage("\u00A7cIf you do not know what you can put or would like some help with the commands please type \u00A7e" + '"' + "\u00A7e/" + command + " help" + '"' + "\u00A7c\n"); sender.sendMessage("§cIf you do not know what you can put or would like some help with the commands please type §e" + '"' + "§e/" + command + " help" + '"' + "§c\n");
} }
public static void NoPermission(CommandSender sender, String command) { public static void NoPermission(CommandSender sender, String command) {

View File

@ -29,8 +29,10 @@ public class Destination {
Destination.plugin = plugin; Destination.plugin = plugin;
ConfigAccessor config = new ConfigAccessor(plugin, "config.yml"); ConfigAccessor config = new ConfigAccessor(plugin, "config.yml");
ConfigAccessor messagesConfig = new ConfigAccessor(plugin, "config.yml");
TELEPORT_RIDING = config.getConfig().getBoolean("WarpRiddenEntity"); TELEPORT_RIDING = config.getConfig().getBoolean("WarpRiddenEntity");
PORTAL_MESSAGE_DISPLAY = config.getConfig().getInt("WarpMessageDisplay"); PORTAL_MESSAGE_DISPLAY = messagesConfig.getConfig().getInt("WarpMessageDisplay");
} }
// TODO add permissions for destinations. // TODO add permissions for destinations.

View File

@ -22,7 +22,6 @@ import org.bukkit.event.entity.EntityPortalEvent;
import org.bukkit.event.player.*; import org.bukkit.event.player.*;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import org.bukkit.metadata.FixedMetadataValue; import org.bukkit.metadata.FixedMetadataValue;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import java.util.UUID; import java.util.UUID;

View File

@ -20,18 +20,16 @@ public class PortalProtect implements Listener {
@SuppressWarnings("unused") @SuppressWarnings("unused")
private final AdvancedPortalsPlugin plugin; private final AdvancedPortalsPlugin plugin;
// The needed config values will be stored so they are easier to access later // The needed config values will be stored so they are easier to access later
// an example is in the interact event in this if statement if((!UseOnlyServerAxe || event.getItem().getItemMeta().getDisplayName().equals("<EFBFBD>eP... // an example is in the interact event in this if statement if((!UseOnlyServerAxe || event.getItem().getItemMeta().getDisplayName().equals("<EFBFBD>eP...
private boolean PortalProtect = true; private final boolean PortalProtect;
private final int PortalProtectionArea;
private int PortalProtectionArea = 5;
public PortalProtect(AdvancedPortalsPlugin plugin) { public PortalProtect(AdvancedPortalsPlugin plugin) {
this.plugin = plugin; this.plugin = plugin;
ConfigAccessor config = new ConfigAccessor(plugin, "config.yml"); ConfigAccessor config = new ConfigAccessor(plugin, "config.yml");
this.PortalProtect = config.getConfig().getBoolean("PortalProtection"); this.PortalProtect = config.getConfig().getBoolean("PortalProtection", true);
this.PortalProtectionArea = config.getConfig().getInt("PortalProtectionArea", 5); this.PortalProtectionArea = config.getConfig().getInt("PortalProtectionArea", 5);
@ -48,7 +46,7 @@ public class PortalProtect implements Listener {
if (!player.hasPermission("advancedportals.build") if (!player.hasPermission("advancedportals.build")
&& Portal.inPortalRegion(event.getBlock().getLocation(), PortalProtectionArea)) { && Portal.inPortalRegion(event.getBlock().getLocation(), PortalProtectionArea)) {
event.setCancelled(true); event.setCancelled(true);
player.sendMessage(PluginMessages.customPrefixFail + " You don't have permission to build here!"); player.sendMessage(String.join(" ",PluginMessages.customPrefixFail, PluginMessages.getNoBuildPermission()));
} }
} }
@ -60,7 +58,7 @@ public class PortalProtect implements Listener {
if (PortalProtect && !player.hasPermission("advancedportals.build") if (PortalProtect && !player.hasPermission("advancedportals.build")
&& Portal.inPortalRegion(event.getBlock().getLocation(), PortalProtectionArea)) { && Portal.inPortalRegion(event.getBlock().getLocation(), PortalProtectionArea)) {
event.setCancelled(true); event.setCancelled(true);
player.sendMessage(PluginMessages.customPrefixFail + " You don't have permission to build here!"); player.sendMessage(String.join(" ",PluginMessages.customPrefixFail, PluginMessages.getNoBuildPermission()));
} }
} }
@ -77,6 +75,4 @@ public class PortalProtect implements Listener {
} }
} }
} }
} }

View File

@ -493,7 +493,7 @@ public class Portal {
} }
if (diff < portalCooldown) { if (diff < portalCooldown) {
int time = (portalCooldown - diff); int time = (portalCooldown - diff);
player.sendMessage(PluginMessages.getPortalCooldownMessage(time)); player.sendMessage(PluginMessages.getCooldownProtectionMessage(time));
failSound(player, portal); failSound(player, portal);
if(doKnockback) if(doKnockback)
throwPlayerBack(player); throwPlayerBack(player);
@ -740,7 +740,7 @@ public class Portal {
} }
public static void throwPlayerBack(Player player) { public static void throwPlayerBack(Player player) {
// Not ensured to remove them out of the portal but it makes it feel nicer for // Not ensured to remove them out of the portal, but it makes it feel nicer for
// the player. // the player.
if (throwback > 0) { if (throwback > 0) {
Vector velocity = player.getLocation().getDirection(); Vector velocity = player.getLocation().getDirection();

View File

@ -5,14 +5,14 @@
# Will update whenever there is a config update from an older version so may not be the latest plugin version # Will update whenever there is a config update from an older version so may not be the latest plugin version
ConfigVersion: 0.5.13 ConfigVersion: 0.5.13
# Set to true if you want the normal axes to work normally but the ones gived with /portals selector or wand will still work though # Set to true if you want the normal axes to work normally but the ones given with /portals selector or wand will still work though
# It can be usefull if people with permission want to use an iron axe on a survival server # It can be useful if people with permission want to use an iron axe on a survival server
UseOnlyServerMadeAxe: false UseOnlyServerMadeAxe: false
# Preferably an item and not a block but it shouldnt matter # Preferably an item and not a block but it shouldn't matter
AxeItemId: IRON_AXE AxeItemId: IRON_AXE
# Will be implemented so you can give yourself the portal block and build manually with it so its easier to make portals with the portal block. # Will be implemented, so you can give yourself the portal block and build manually with it, so it's easier to make portals with the portal block.
CanBuildPortalBlock: true CanBuildPortalBlock: true
# Defines if portals protect themselves # Defines if portals protect themselves
@ -24,11 +24,11 @@ PortalProtectionArea: 5
# What the default trigger block is for portals if nothing is defined. # What the default trigger block is for portals if nothing is defined.
DefaultPortalTriggerBlock: PORTAL DefaultPortalTriggerBlock: PORTAL
# This stops all water flowing inside a portal area(can be disabled if something like world edit is handelling the water flow or you dont want it active) # This stops all water flowing inside a portal area(can be disabled if something like world edit is handling the water flow or you don't want it active)
# you want to # you want to
StopWaterFlow: true StopWaterFlow: true
# This must be a placeable block or it will not work and may even crash # This must be a placeable block, or it will not work and may even crash
ShowSelectionBlockID: RED_STAINED_GLASS ShowSelectionBlockID: RED_STAINED_GLASS
# WarpEffect # WarpEffect
@ -46,14 +46,9 @@ WarpSound: 1
# In case you want to show the bungee attempting warp message # In case you want to show the bungee attempting warp message
ShowBungeeWarpMessage: false ShowBungeeWarpMessage: false
# This changes how long the show seletion lasts in seconds # This changes how long the show selection lasts in seconds
ShowSelectionShowDuration: 10 ShowSelectionShowDuration: 10
# Where to display the message 0 = disabled(replaces PortalWarpMessages), 1 = in chat and 2 = action bar(1.8 and above only, anything lower will print the message that would
# generally on the action bar in the chat without a prefix or extra chat formatting)
WarpMessageDisplay: 2
# Use plugin name in the warp messages # Use plugin name in the warp messages
UseWarpPrefix: true UseWarpPrefix: true
@ -65,12 +60,12 @@ ThrowbackAmount: 0.7 # How fast to throw them back, 0 or lower to disable throwb
# Only disables the gateway block places with "/portal gatewayblock" for now # Only disables the gateway block places with "/portal gatewayblock" for now
# If you want to replace already made portals just use "/portal disablebeacon" and it will run through all the blocks in the area # If you want to replace already made portals just use "/portal disablebeacon" and it will run through all the blocks in the area
# Reloading the world or chunks that portals are in will also trigger the beacons to be disabled (this is for efficiency reasons) # Reloading the world or chunks that portals are in will also trigger the beacons to be disabled (this is for efficiency reasons)
# However these wont trigger in the spawn chunks as they are loaded before any pluigns are. # However these won't trigger in the spawn chunks as they are loaded before any plugins are.
DisableGatewayBeam: true DisableGatewayBeam: true
# Enable or disable special command portals # Enable or disable special command portals
# #
# n Disabled none, best just put this to really make sure the fact none are here is specified. It disables any others too # n Disabled none, the best just put this to really make sure the fact none are here is specified. It disables any others too
# o enable op command portals # o enable op command portals
# p enable permission command portals # p enable permission command portals
# c enable console command portals # c enable console command portals
@ -81,16 +76,16 @@ CommandLevels: opcb
# Should the commands being triggered log in the console? (If you have an active server it may cause a bit of spam) # Should the commands being triggered log in the console? (If you have an active server it may cause a bit of spam)
CommandLogs: true CommandLogs: true
# If you want to use bungee or velocity and it is not automatically detected (make sure you have advanced portals on the proxy, especially with velocity) # If you want to use bungee or velocity, and it is not automatically detected (make sure you have advanced portals on the proxy, especially with velocity)
ForceEnableProxySupport: false ForceEnableProxySupport: false
# How many seconds after the proxy event fires should the player be teleported (should help with on spawn plugins and such) # How many seconds after the proxy event fires should the player be teleported (should help with on spawn plugins and such)
# 0 is disabled and anything higher causes a delay. # 0 is disabled and anything higher causes a delay.
ProxyTeleportDelay: 0 ProxyTeleportDelay: 0
# Just in case you are not using the proxy and dont want the warning message # Just in case you are not using the proxy and don't want the warning message
DisableProxyWarning: false DisableProxyWarning: false
# Whether the integration with worldedit should be enabled. # Whether the integration with WorldEdit should be enabled.
# This will force AdvancedPortals to use WorldEdit selections. # This will force AdvancedPortals to use WorldEdit selections.
WorldEditIntegration: false WorldEditIntegration: false

View File

@ -11,6 +11,10 @@ CustomPrefixFail: '&c[&7AdvancedPortals&c]'
# Message sent to player in chat/action bar on warp # Message sent to player in chat/action bar on warp
WarpMessage: '&aYou have warped to &e<warp>&a.' WarpMessage: '&aYou have warped to &e<warp>&a.'
# Where to display the message 0 = disabled(replaces PortalWarpMessages), 1 = in chat and 2 = action bar(1.8 and above only, anything lower will print the message that would
# generally on the action bar in the chat without a prefix or extra chat formatting)
WarpMessageDisplay: 2
# Message sent to player that has just joined the server trying to use a portal # Message sent to player that has just joined the server trying to use a portal
CooldownProtectionMessage: '&cThere is &e<time>&c join cooldown protection left.' CooldownProtectionMessage: '&cThere is &e<time>&c join cooldown protection left.'
@ -18,4 +22,8 @@ CooldownProtectionMessage: '&cThere is &e<time>&c join cooldown protection left.
NoPermissionPortal: '&cYou do not have permission to use this portal!' NoPermissionPortal: '&cYou do not have permission to use this portal!'
# Message sent to player that has a portal cooldown # Message sent to player that has a portal cooldown
PortalCooldownMessage: '&cPlease wait &e<time> &cuntil attempting to enter this portal again!' PortalCooldownMessage: '&cPlease wait &e<time> &cuntil attempting to enter this portal again!'
# Message sent to player when they attempt to break a block close to a portal
NoBuildPermission: '&cYou don''t have permission to build here!'