mirror of
https://github.com/PEXPlugins/Modifyworld.git
synced 2024-09-28 03:57:47 +02:00
Improvements
1) Refactoring 2) Fixed entity names (issue #26) 3) Customized messages on per-permission basis
This commit is contained in:
parent
7892227261
commit
46464c38d0
@ -18,7 +18,6 @@
|
|||||||
*/
|
*/
|
||||||
package ru.tehkode.modifyworld;
|
package ru.tehkode.modifyworld;
|
||||||
|
|
||||||
import org.bukkit.ChatColor;
|
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.block.Block;
|
import org.bukkit.block.Block;
|
||||||
import org.bukkit.configuration.ConfigurationSection;
|
import org.bukkit.configuration.ConfigurationSection;
|
||||||
@ -26,7 +25,8 @@ import org.bukkit.entity.*;
|
|||||||
import org.bukkit.event.Listener;
|
import org.bukkit.event.Listener;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
import org.bukkit.plugin.Plugin;
|
import org.bukkit.plugin.Plugin;
|
||||||
import ru.tehkode.permissions.PermissionManager;
|
import ru.tehkode.permissions.PermissionGroup;
|
||||||
|
import ru.tehkode.permissions.PermissionUser;
|
||||||
import ru.tehkode.permissions.bukkit.PermissionsEx;
|
import ru.tehkode.permissions.bukkit.PermissionsEx;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -35,9 +35,7 @@ import ru.tehkode.permissions.bukkit.PermissionsEx;
|
|||||||
*/
|
*/
|
||||||
public abstract class ModifyworldListener implements Listener {
|
public abstract class ModifyworldListener implements Listener {
|
||||||
|
|
||||||
public final static String PERMISSION_DENIED = "Sorry, you don't have enough permissions";
|
protected PlayerInformer informer;
|
||||||
protected String permissionDenied = PERMISSION_DENIED;
|
|
||||||
protected PermissionManager permissionsManager;
|
|
||||||
protected ConfigurationSection config;
|
protected ConfigurationSection config;
|
||||||
protected boolean informPlayers = false;
|
protected boolean informPlayers = false;
|
||||||
protected boolean useMaterialNames = true;
|
protected boolean useMaterialNames = true;
|
||||||
@ -45,31 +43,20 @@ public abstract class ModifyworldListener implements Listener {
|
|||||||
protected boolean checkItemUse = false;
|
protected boolean checkItemUse = false;
|
||||||
protected boolean enableWhitelist = false;
|
protected boolean enableWhitelist = false;
|
||||||
|
|
||||||
public ModifyworldListener(Plugin plugin, ConfigurationSection config) {
|
public ModifyworldListener(Plugin plugin, ConfigurationSection config, PlayerInformer informer) {
|
||||||
this.permissionsManager = PermissionsEx.getPermissionManager();
|
this.informer = informer;
|
||||||
this.config = config;
|
this.config = config;
|
||||||
|
|
||||||
this.registerEvents(plugin);
|
this.registerEvents(plugin);
|
||||||
|
|
||||||
this.informPlayers = config.getBoolean("informPlayers", informPlayers);
|
this.informPlayers = config.getBoolean("informPlayers", informPlayers);
|
||||||
this.permissionDenied = config.getString("messages.permissionDenied", this.permissionDenied);
|
|
||||||
this.useMaterialNames = config.getBoolean("use-material-names", useMaterialNames);
|
this.useMaterialNames = config.getBoolean("use-material-names", useMaterialNames);
|
||||||
this.checkMetadata = config.getBoolean("check-metadata", checkMetadata);
|
this.checkMetadata = config.getBoolean("check-metadata", checkMetadata);
|
||||||
this.checkItemUse = config.getBoolean("item-use-check", checkItemUse);
|
this.checkItemUse = config.getBoolean("item-use-check", checkItemUse);
|
||||||
this.enableWhitelist = config.getBoolean("whitelist", enableWhitelist);
|
this.enableWhitelist = config.getBoolean("whitelist", enableWhitelist);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void informPlayer(Player player, String message) {
|
private String getEntityName(Entity entity) {
|
||||||
if (this.informPlayers) {
|
|
||||||
player.sendMessage(ChatColor.RED + message);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
protected void informPlayerAboutDenial(Player player) {
|
|
||||||
this.informPlayer(player, this.permissionDenied);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected String getEntityName(Entity entity) {
|
|
||||||
|
|
||||||
if (entity instanceof ComplexEntityPart) {
|
if (entity instanceof ComplexEntityPart) {
|
||||||
return getEntityName(((ComplexEntityPart) entity).getParent());
|
return getEntityName(((ComplexEntityPart) entity).getParent());
|
||||||
@ -100,32 +87,84 @@ public abstract class ModifyworldListener implements Listener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Functional programming fuck yeah
|
// Functional programming fuck yeah
|
||||||
protected String getMaterialPermission(Material type) {
|
private String getMaterialPermission(Material type) {
|
||||||
return this.useMaterialNames ? type.name().toLowerCase().replace("_", "") : Integer.toString(type.getId());
|
return this.useMaterialNames ? type.name().toLowerCase().replace("_", "") : Integer.toString(type.getId());
|
||||||
}
|
}
|
||||||
|
|
||||||
protected String getMaterialPermission(Material type, byte metadata) {
|
private String getMaterialPermission(Material type, byte metadata) {
|
||||||
return this.getMaterialPermission(type) + (metadata > 0 ? ":" + metadata : "");
|
return getMaterialPermission(type) + (metadata > 0 ? ":" + metadata : "");
|
||||||
}
|
}
|
||||||
|
|
||||||
protected String getItemPermission(ItemStack item) {
|
private String getBlockPermission(Block block) {
|
||||||
return this.getMaterialPermission(item.getType(), item.getData().getData());
|
return getMaterialPermission(block.getType(), block.getData());
|
||||||
}
|
}
|
||||||
|
|
||||||
protected String getBlockPermission(Block block) {
|
public String getItemPermission(ItemStack item) {
|
||||||
return this.getMaterialPermission(block.getType(), block.getData());
|
return getMaterialPermission(item.getType(), item.getData().getData());
|
||||||
}
|
}
|
||||||
|
|
||||||
protected boolean canInteractWithMaterial(Player player, String basePermission, Material type) {
|
/*
|
||||||
return player.hasPermission(basePermission + this.getMaterialPermission(type));
|
protected boolean permissionDenied(Player player, String basePermission, Entity entity) {
|
||||||
|
if (entity instanceof Player && PermissionsEx.isAvailable()) {
|
||||||
|
PermissionUser entityUser = PermissionsEx.getUser((Player)entity);
|
||||||
|
|
||||||
|
for (PermissionGroup group : entityUser.getGroups()) {
|
||||||
|
if (permissionDenied(player, basePermission, "group", group.getName())) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected boolean canInteractWithItem(Player player, String basePermission, ItemStack item) {
|
return permissionDenied(player, basePermission, "player", entityUser.getName());
|
||||||
return player.hasPermission(basePermission + this.getMaterialPermission(item.getType(), item.getData().getData()));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected boolean canInteractWithBlock(Player player, String basePermission, Block block) {
|
return permissionDenied(player, basePermission, entity);
|
||||||
return player.hasPermission(basePermission + this.getMaterialPermission(block.getType(), block.getData()));
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
protected boolean permissionDenied(Player player, String basePermission, Object... arguments) {
|
||||||
|
String permission = assemblePermission(basePermission, arguments);
|
||||||
|
boolean isDenied = !player.hasPermission(permission);
|
||||||
|
|
||||||
|
if (isDenied) {
|
||||||
|
this.informer.informPlayer(player, permission, arguments);
|
||||||
|
}
|
||||||
|
|
||||||
|
return isDenied;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected boolean _permissionDenied(Player player, String permission, Object... arguments) {
|
||||||
|
return !player.hasPermission(assemblePermission(permission, arguments));
|
||||||
|
}
|
||||||
|
|
||||||
|
protected String assemblePermission(String permission, Object... arguments) {
|
||||||
|
StringBuilder builder = new StringBuilder(permission);
|
||||||
|
|
||||||
|
if (arguments != null) {
|
||||||
|
for (Object obj : arguments) {
|
||||||
|
if (obj == null) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
builder.append('.');
|
||||||
|
builder.append(getObjectPermission(obj));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return builder.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected String getObjectPermission(Object obj) {
|
||||||
|
if (obj instanceof Entity) {
|
||||||
|
return (getEntityName((Entity) obj));
|
||||||
|
} else if (obj instanceof ItemStack) {
|
||||||
|
return (getItemPermission((ItemStack) obj));
|
||||||
|
} else if (obj instanceof Material) {
|
||||||
|
return (getMaterialPermission((Material) obj));
|
||||||
|
} else if (obj instanceof Block) {
|
||||||
|
return (getBlockPermission((Block) obj));
|
||||||
|
}
|
||||||
|
|
||||||
|
return (obj.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
private void registerEvents(Plugin plugin) {
|
private void registerEvents(Plugin plugin) {
|
||||||
|
172
src/main/java/ru/tehkode/modifyworld/PlayerInformer.java
Normal file
172
src/main/java/ru/tehkode/modifyworld/PlayerInformer.java
Normal file
@ -0,0 +1,172 @@
|
|||||||
|
package ru.tehkode.modifyworld;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
import org.bukkit.ChatColor;
|
||||||
|
import org.bukkit.Material;
|
||||||
|
import org.bukkit.block.Block;
|
||||||
|
import org.bukkit.configuration.ConfigurationSection;
|
||||||
|
import org.bukkit.entity.ComplexEntityPart;
|
||||||
|
import org.bukkit.entity.Entity;
|
||||||
|
import org.bukkit.entity.Item;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
import ru.tehkode.permissions.PermissionUser;
|
||||||
|
import ru.tehkode.permissions.bukkit.PermissionsEx;
|
||||||
|
|
||||||
|
public class PlayerInformer {
|
||||||
|
|
||||||
|
public final static String PERMISSION_DENIED = "Sorry, you don't have enough permissions";
|
||||||
|
public final static String WHITELIST_MESSAGE = "You are not allowed to join this server. Goodbye!";
|
||||||
|
public final static String PROHIBITED_ITEM = "Prohibited item \"%s\" has been removed from your inventory.";
|
||||||
|
public final static String DEFAULT_MESSAGE_FORMAT = "&f[&2Modifyworld&f]&4 %s";
|
||||||
|
// Default message format
|
||||||
|
protected String messageFormat = DEFAULT_MESSAGE_FORMAT;
|
||||||
|
protected Map<String, String> messages = new HashMap<String, String>();
|
||||||
|
// Flags
|
||||||
|
protected boolean enabled = false;
|
||||||
|
protected boolean individualMessages = false;
|
||||||
|
protected String defaultMessage = PERMISSION_DENIED;
|
||||||
|
|
||||||
|
public PlayerInformer(ConfigurationSection config) {
|
||||||
|
this.enabled = config.getBoolean("inform-players", enabled);
|
||||||
|
|
||||||
|
this.loadConfig(config.getConfigurationSection("messages"));
|
||||||
|
}
|
||||||
|
|
||||||
|
private void loadConfig(ConfigurationSection config) {
|
||||||
|
|
||||||
|
this.defaultMessage = config.getString("default-message", this.defaultMessage);
|
||||||
|
|
||||||
|
this.messageFormat = config.getString("message-format", this.messageFormat);
|
||||||
|
|
||||||
|
this.individualMessages = config.getBoolean("individual-messages", this.individualMessages);
|
||||||
|
|
||||||
|
this.importMessages(config);
|
||||||
|
|
||||||
|
for (String permission : config.getKeys(true)) {
|
||||||
|
if (!config.isString(permission)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
setMessage(permission, config.getString(permission.replace("/", ".")));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setMessage(String permission, String message) {
|
||||||
|
messages.put(permission, message);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getMessage(String permission) {
|
||||||
|
if (messages.containsKey(permission)) {
|
||||||
|
return messages.get(permission);
|
||||||
|
}
|
||||||
|
|
||||||
|
String perm = permission;
|
||||||
|
int index;
|
||||||
|
|
||||||
|
while ((index = perm.lastIndexOf(".")) != -1) {
|
||||||
|
perm = perm.substring(0, index);
|
||||||
|
|
||||||
|
if (messages.containsKey(perm)) {
|
||||||
|
String message = messages.get(perm);
|
||||||
|
messages.put(permission, message);
|
||||||
|
return message;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return this.defaultMessage;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getMessage(Player player, String permission) {
|
||||||
|
if (PermissionsEx.isAvailable()) {
|
||||||
|
PermissionUser user = PermissionsEx.getUser(player);
|
||||||
|
|
||||||
|
String message;
|
||||||
|
String perm = permission;
|
||||||
|
int index;
|
||||||
|
|
||||||
|
while ((index = perm.lastIndexOf(".")) != -1) {
|
||||||
|
perm = perm.substring(0, index);
|
||||||
|
|
||||||
|
message = user.getOption("permission-denied-" + perm, player.getWorld().getName(), null);
|
||||||
|
if (message == null) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
return message;
|
||||||
|
}
|
||||||
|
|
||||||
|
message = user.getOption("permission-denied", player.getWorld().getName(), null);
|
||||||
|
|
||||||
|
if (message != null) {
|
||||||
|
return message;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return getMessage(permission);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void informPlayer(Player player, String permission, Object... args) {
|
||||||
|
if (!enabled) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
String message = getMessage(player, permission).replace("$permission", permission);
|
||||||
|
|
||||||
|
for (int i = 0; i < args.length; i++) {
|
||||||
|
message = message.replace("$" + (i + 1), describeObject(args[i]));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (message != null && !message.isEmpty()) {
|
||||||
|
player.sendMessage(String.format(messageFormat, message).replaceAll("&([a-z0-9])", "\u00A7$1"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected String describeObject(Object obj) {
|
||||||
|
if (obj instanceof ComplexEntityPart) { // Complex entities
|
||||||
|
return describeObject(((ComplexEntityPart) obj).getParent());
|
||||||
|
} else if (obj instanceof Item) { // Dropped items
|
||||||
|
return describeMaterial(((Item) obj).getItemStack().getType());
|
||||||
|
} else if (obj instanceof ItemStack) { // Items
|
||||||
|
return describeMaterial(((ItemStack) obj).getType());
|
||||||
|
} else if (obj instanceof Entity) { // Entities
|
||||||
|
return ((Entity) obj).getType().toString().toLowerCase().replace("_", " ");
|
||||||
|
} else if (obj instanceof Block) { // Blocks
|
||||||
|
return describeMaterial(((Block) obj).getType());
|
||||||
|
} else if (obj instanceof Material) { // Just material
|
||||||
|
return describeMaterial((Material) obj);
|
||||||
|
}
|
||||||
|
|
||||||
|
return obj.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
private String describeMaterial(Material material) {
|
||||||
|
// TODO: implement data id
|
||||||
|
|
||||||
|
if (material == Material.INK_SACK) {
|
||||||
|
return "dye";
|
||||||
|
}
|
||||||
|
|
||||||
|
return material.toString().toLowerCase().replace("_", " ");
|
||||||
|
}
|
||||||
|
|
||||||
|
// For backward compatibility
|
||||||
|
private void importMessages(ConfigurationSection config) {
|
||||||
|
// This should NOT be refactored, because it would be stupid :D
|
||||||
|
if (config.isString("whitelistMessage")) {
|
||||||
|
setMessage("modifyworld.login", config.getString("whitelistMessage"));
|
||||||
|
config.set("whitelistMessage", null);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (config.isString("prohibitedItem")) {
|
||||||
|
setMessage("modifyworld.items.have", config.getString("prohibitedItem"));
|
||||||
|
config.set("prohibitedItem", null);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (config.isString("permissionDenied")) {
|
||||||
|
setMessage("modifyworld", config.getString("permissionDenied"));
|
||||||
|
config.set("permissionDenied", null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -18,16 +18,19 @@
|
|||||||
*/
|
*/
|
||||||
package ru.tehkode.modifyworld.bukkit;
|
package ru.tehkode.modifyworld.bukkit;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileNotFoundException;
|
||||||
|
import java.io.IOException;
|
||||||
import java.lang.reflect.Constructor;
|
import java.lang.reflect.Constructor;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.logging.Logger;
|
|
||||||
import org.bukkit.configuration.Configuration;
|
|
||||||
import org.bukkit.configuration.ConfigurationSection;
|
import org.bukkit.configuration.ConfigurationSection;
|
||||||
import org.bukkit.configuration.file.FileConfiguration;
|
import org.bukkit.configuration.file.FileConfiguration;
|
||||||
|
import org.bukkit.configuration.file.YamlConfiguration;
|
||||||
import org.bukkit.plugin.Plugin;
|
import org.bukkit.plugin.Plugin;
|
||||||
import org.bukkit.plugin.java.JavaPlugin;
|
import org.bukkit.plugin.java.JavaPlugin;
|
||||||
import ru.tehkode.modifyworld.ModifyworldListener;
|
import ru.tehkode.modifyworld.ModifyworldListener;
|
||||||
|
import ru.tehkode.modifyworld.PlayerInformer;
|
||||||
import ru.tehkode.modifyworld.handlers.*;
|
import ru.tehkode.modifyworld.handlers.*;
|
||||||
import ru.tehkode.permissions.bukkit.PermissionsEx;
|
import ru.tehkode.permissions.bukkit.PermissionsEx;
|
||||||
|
|
||||||
@ -37,7 +40,6 @@ import ru.tehkode.permissions.bukkit.PermissionsEx;
|
|||||||
*/
|
*/
|
||||||
public class Modifyworld extends JavaPlugin {
|
public class Modifyworld extends JavaPlugin {
|
||||||
|
|
||||||
protected final static Logger logger = Logger.getLogger("Minecraft");
|
|
||||||
protected final static Class<? extends ModifyworldListener>[] LISTENERS = new Class[]{
|
protected final static Class<? extends ModifyworldListener>[] LISTENERS = new Class[]{
|
||||||
PlayerListener.class,
|
PlayerListener.class,
|
||||||
EntityListener.class,
|
EntityListener.class,
|
||||||
@ -45,33 +47,35 @@ public class Modifyworld extends JavaPlugin {
|
|||||||
VehicleListener.class
|
VehicleListener.class
|
||||||
};
|
};
|
||||||
protected List<ModifyworldListener> listeners = new ArrayList<ModifyworldListener>();
|
protected List<ModifyworldListener> listeners = new ArrayList<ModifyworldListener>();
|
||||||
|
protected PlayerInformer informer;
|
||||||
|
protected File configFile;
|
||||||
|
protected FileConfiguration config;
|
||||||
|
|
||||||
public Modifyworld() {
|
@Override
|
||||||
|
public void onLoad() {
|
||||||
|
configFile = new File(this.getDataFolder(), "config.yml");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onEnable() {
|
public void onEnable() {
|
||||||
// At first check PEX existance
|
// At first check PEX existance
|
||||||
if (!PermissionsEx.isAvailable()) {
|
if (!PermissionsEx.isAvailable()) {
|
||||||
logger.severe("[Modifyworld] PermissionsEx not found, disabling");
|
this.getLogger().severe("PermissionsEx not found, disabling");
|
||||||
this.getPluginLoader().disablePlugin(this);
|
this.getPluginLoader().disablePlugin(this);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
FileConfiguration config = this.getConfig();
|
this.config = this.getConfig();
|
||||||
|
|
||||||
if (!config.isBoolean("enable")) { // Migrate
|
if (!config.isConfigurationSection("messages")) {
|
||||||
|
this.getLogger().severe("Deploying default config");
|
||||||
this.initializeConfiguration(config);
|
this.initializeConfiguration(config);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this.informer = new PlayerInformer(config);
|
||||||
|
|
||||||
if (config.getBoolean("enable", false)) {
|
|
||||||
this.registerListeners();
|
this.registerListeners();
|
||||||
logger.info("[Modifyworld] Modifyworld enabled!");
|
this.getLogger().info("Modifyworld enabled!");
|
||||||
} else {
|
|
||||||
logger.info("[Modifyworld] Modifyworld disabled. Check config.yml!");
|
|
||||||
this.getPluginLoader().disablePlugin(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
this.saveConfig();
|
this.saveConfig();
|
||||||
}
|
}
|
||||||
@ -79,42 +83,73 @@ public class Modifyworld extends JavaPlugin {
|
|||||||
@Override
|
@Override
|
||||||
public void onDisable() {
|
public void onDisable() {
|
||||||
this.listeners.clear();
|
this.listeners.clear();
|
||||||
|
this.config = null;
|
||||||
|
|
||||||
logger.info("[Modifyworld] Modifyworld disabled!");
|
this.getLogger().info("Modifyworld successfully disabled!");
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void initializeConfiguration(FileConfiguration config) {
|
protected void initializeConfiguration(FileConfiguration config) {
|
||||||
// At migrate and setup defaults
|
|
||||||
PermissionsEx pex = (PermissionsEx) this.getServer().getPluginManager().getPlugin("PermissionsEx");
|
|
||||||
|
|
||||||
Configuration pexConfig = pex.getConfig();
|
|
||||||
|
|
||||||
// Flags
|
// Flags
|
||||||
config.set("enable", pexConfig.get("permissions.modifyworld.enabled", false));
|
config.set("item-restrictions", false);
|
||||||
config.set("itemRestrictions", pexConfig.getBoolean("permissions.modifyworld.itemRestrictions", false));
|
config.set("inform-players", false);
|
||||||
config.set("informPlayers", pexConfig.getBoolean("permissions.informplayers.modifyworld", false));
|
config.set("whitelist", false);
|
||||||
config.set("whitelist", pexConfig.getBoolean("permissions.modifyworld.whitelist", false));
|
config.set("use-material-names", true);
|
||||||
config.set("use-material-names", pexConfig.getBoolean("permissions.modifyworld.use-material-names", true));
|
config.set("drop-restricted-item", false);
|
||||||
config.set("drop-restricted-item", pexConfig.getBoolean("permissions.modifyworld.drop-restricted-item", false));
|
config.set("item-use-check", false);
|
||||||
config.set("item-use-check", pexConfig.getBoolean("permissions.modifyworld.item-use-check", false));
|
|
||||||
|
|
||||||
// Messages
|
// Messages
|
||||||
config.set("messages.whitelistMessage", pexConfig.getString("permissions.modifyworld.whitelistMessage", PlayerListener.WHITELIST_MESSAGE));
|
config.set("messages/message-format", PlayerInformer.DEFAULT_MESSAGE_FORMAT);
|
||||||
config.set("messages.prohibitedItem", PlayerListener.PROHIBITED_ITEM);
|
config.set("messages/default-message", PlayerInformer.PERMISSION_DENIED);
|
||||||
config.set("messages.permissionDenied", ModifyworldListener.PERMISSION_DENIED);
|
|
||||||
|
|
||||||
|
// Predefined messages
|
||||||
|
config.set("messages/modifyworld.login", PlayerInformer.WHITELIST_MESSAGE);
|
||||||
|
config.set("messages/modifyworld.items.have", PlayerInformer.PROHIBITED_ITEM);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void registerListeners() {
|
protected void registerListeners() {
|
||||||
for (Class listenerClass : LISTENERS) {
|
for (Class listenerClass : LISTENERS) {
|
||||||
try {
|
try {
|
||||||
Constructor constructor = listenerClass.getConstructor(Plugin.class, ConfigurationSection.class);
|
Constructor constructor = listenerClass.getConstructor(Plugin.class, ConfigurationSection.class, PlayerInformer.class);
|
||||||
ModifyworldListener listener = (ModifyworldListener) constructor.newInstance(this, this.getConfig());
|
ModifyworldListener listener = (ModifyworldListener) constructor.newInstance(this, this.getConfig(), this.informer);
|
||||||
this.listeners.add(listener);
|
this.listeners.add(listener);
|
||||||
} catch (Throwable e) {
|
} catch (Throwable e) {
|
||||||
logger.warning("[Modifyworld] Failed to initialize \"" + listenerClass.getName() + "\" listener");
|
this.getLogger().warning("Failed to initialize \"" + listenerClass.getName() + "\" listener");
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public FileConfiguration getConfig() {
|
||||||
|
if (this.config == null) {
|
||||||
|
this.loadConfig();
|
||||||
|
}
|
||||||
|
|
||||||
|
return this.config;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void saveConfig() {
|
||||||
|
try {
|
||||||
|
this.config.save(configFile);
|
||||||
|
} catch (IOException e) {
|
||||||
|
this.getLogger().severe("Failed to save configuration file: " + e.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void loadConfig() {
|
||||||
|
this.config = new YamlConfiguration();
|
||||||
|
config.options().pathSeparator('/');
|
||||||
|
|
||||||
|
this.getLogger().info("Loading configuration - " + this.configFile.getAbsolutePath());
|
||||||
|
|
||||||
|
try {
|
||||||
|
config.load(configFile);
|
||||||
|
} catch (FileNotFoundException e) {
|
||||||
|
this.getLogger().severe("Configuration file not found - deploying default one");
|
||||||
|
} catch (Exception e) {
|
||||||
|
this.getLogger().severe("Failed to load configuration file: " + e.getMessage());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -29,6 +29,7 @@ import org.bukkit.event.painting.PaintingBreakEvent;
|
|||||||
import org.bukkit.event.painting.PaintingPlaceEvent;
|
import org.bukkit.event.painting.PaintingPlaceEvent;
|
||||||
import org.bukkit.plugin.Plugin;
|
import org.bukkit.plugin.Plugin;
|
||||||
import ru.tehkode.modifyworld.ModifyworldListener;
|
import ru.tehkode.modifyworld.ModifyworldListener;
|
||||||
|
import ru.tehkode.modifyworld.PlayerInformer;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
@ -36,22 +37,20 @@ import ru.tehkode.modifyworld.ModifyworldListener;
|
|||||||
*/
|
*/
|
||||||
public class BlockListener extends ModifyworldListener {
|
public class BlockListener extends ModifyworldListener {
|
||||||
|
|
||||||
public BlockListener(Plugin plugin, ConfigurationSection config) {
|
public BlockListener(Plugin plugin, ConfigurationSection config, PlayerInformer informer) {
|
||||||
super(plugin, config);
|
super(plugin, config, informer);
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.LOW)
|
@EventHandler(priority = EventPriority.LOW)
|
||||||
public void onBlockBreak(BlockBreakEvent event) {
|
public void onBlockBreak(BlockBreakEvent event) {
|
||||||
if (!canInteractWithBlock(event.getPlayer(), "modifyworld.blocks.destroy.", event.getBlock())) {
|
if (permissionDenied(event.getPlayer(), "modifyworld.blocks.destroy.", event.getBlock())) {
|
||||||
informPlayerAboutDenial(event.getPlayer());
|
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.LOW)
|
@EventHandler(priority = EventPriority.LOW)
|
||||||
public void onBlockPlace(BlockPlaceEvent event) {
|
public void onBlockPlace(BlockPlaceEvent event) {
|
||||||
if (!canInteractWithBlock(event.getPlayer(), "modifyworld.blocks.place.", event.getBlock())) {
|
if (permissionDenied(event.getPlayer(), "modifyworld.blocks.place.", event.getBlock())) {
|
||||||
informPlayerAboutDenial(event.getPlayer());
|
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -64,17 +63,14 @@ public class BlockListener extends ModifyworldListener {
|
|||||||
|
|
||||||
PaintingBreakByEntityEvent pbee = (PaintingBreakByEntityEvent) event;
|
PaintingBreakByEntityEvent pbee = (PaintingBreakByEntityEvent) event;
|
||||||
if (pbee.getRemover() instanceof Player
|
if (pbee.getRemover() instanceof Player
|
||||||
&& !canInteractWithMaterial((Player) pbee.getRemover(), "modifyworld.blocks.destroy.", Material.PAINTING)) {
|
&& permissionDenied((Player) pbee.getRemover(), "modifyworld.blocks.destroy.", Material.PAINTING)) {
|
||||||
|
|
||||||
informPlayerAboutDenial((Player) pbee.getRemover());
|
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.LOW)
|
@EventHandler(priority = EventPriority.LOW)
|
||||||
public void onPaintingPlace(PaintingPlaceEvent event) {
|
public void onPaintingPlace(PaintingPlaceEvent event) {
|
||||||
if (!canInteractWithMaterial(event.getPlayer(), "modifyworld.blocks.place.", Material.PAINTING)) {
|
if (permissionDenied(event.getPlayer(), "modifyworld.blocks.place.", Material.PAINTING)) {
|
||||||
informPlayerAboutDenial(event.getPlayer());
|
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -18,7 +18,6 @@
|
|||||||
*/
|
*/
|
||||||
package ru.tehkode.modifyworld.handlers;
|
package ru.tehkode.modifyworld.handlers;
|
||||||
|
|
||||||
import org.bukkit.entity.Entity;
|
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
import org.bukkit.event.EventPriority;
|
import org.bukkit.event.EventPriority;
|
||||||
@ -26,8 +25,7 @@ import org.bukkit.event.entity.*;
|
|||||||
import org.bukkit.plugin.Plugin;
|
import org.bukkit.plugin.Plugin;
|
||||||
import org.bukkit.configuration.ConfigurationSection;
|
import org.bukkit.configuration.ConfigurationSection;
|
||||||
import ru.tehkode.modifyworld.ModifyworldListener;
|
import ru.tehkode.modifyworld.ModifyworldListener;
|
||||||
import ru.tehkode.permissions.PermissionGroup;
|
import ru.tehkode.modifyworld.PlayerInformer;
|
||||||
import ru.tehkode.permissions.PermissionUser;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
@ -35,8 +33,8 @@ import ru.tehkode.permissions.PermissionUser;
|
|||||||
*/
|
*/
|
||||||
public class EntityListener extends ModifyworldListener {
|
public class EntityListener extends ModifyworldListener {
|
||||||
|
|
||||||
public EntityListener(Plugin plugin, ConfigurationSection config) {
|
public EntityListener(Plugin plugin, ConfigurationSection config, PlayerInformer informer) {
|
||||||
super(plugin, config);
|
super(plugin, config, informer);
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.LOW)
|
@EventHandler(priority = EventPriority.LOW)
|
||||||
@ -47,8 +45,7 @@ public class EntityListener extends ModifyworldListener {
|
|||||||
Player player;
|
Player player;
|
||||||
if (edbe.getDamager() instanceof Player) { // Prevent from damaging by player
|
if (edbe.getDamager() instanceof Player) { // Prevent from damaging by player
|
||||||
player = (Player) edbe.getDamager();
|
player = (Player) edbe.getDamager();
|
||||||
if (!canMessWithEntity(player, "modifyworld.damage.deal.", event.getEntity())) {
|
if (permissionDenied(player, "modifyworld.damage.deal", event.getEntity())) {
|
||||||
informPlayerAboutDenial(player);
|
|
||||||
cancelDamageEvent(player, event);
|
cancelDamageEvent(player, event);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -57,7 +54,7 @@ public class EntityListener extends ModifyworldListener {
|
|||||||
if (edbe.getEntity() instanceof Player) {
|
if (edbe.getEntity() instanceof Player) {
|
||||||
player = (Player) edbe.getEntity();
|
player = (Player) edbe.getEntity();
|
||||||
if (edbe.getDamager() != null) { // Prevent from taking damage by entity
|
if (edbe.getDamager() != null) { // Prevent from taking damage by entity
|
||||||
if (!canMessWithEntity(player, "modifyworld.damage.take.", edbe.getDamager())) {
|
if (_permissionDenied(player, "modifyworld.damage.take", edbe.getDamager())) {
|
||||||
cancelDamageEvent(player, event);
|
cancelDamageEvent(player, event);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -67,9 +64,7 @@ public class EntityListener extends ModifyworldListener {
|
|||||||
} else if (event.getEntity() instanceof Player) { // player are been damaged by enviroment
|
} else if (event.getEntity() instanceof Player) { // player are been damaged by enviroment
|
||||||
Player player = (Player) event.getEntity();
|
Player player = (Player) event.getEntity();
|
||||||
|
|
||||||
String cause = event.getCause().name().toLowerCase().replace("_", "");
|
if (_permissionDenied(player, "modifyworld.damage.take", event.getCause().name().toLowerCase().replace("_", ""))) {
|
||||||
|
|
||||||
if (!player.hasPermission("modifyworld.damage.take." + cause)) {
|
|
||||||
cancelDamageEvent(player, event);
|
cancelDamageEvent(player, event);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -89,9 +84,8 @@ public class EntityListener extends ModifyworldListener {
|
|||||||
|
|
||||||
Player player = (Player) event.getOwner();
|
Player player = (Player) event.getOwner();
|
||||||
|
|
||||||
if (!player.hasPermission("modifyworld.tame." + getEntityName(event.getEntity()))) {
|
if (permissionDenied(player, "modifyworld.tame", event.getEntity())) {
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
informPlayerAboutDenial(player);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -99,29 +93,11 @@ public class EntityListener extends ModifyworldListener {
|
|||||||
public void onEntityTarget(EntityTargetEvent event) {
|
public void onEntityTarget(EntityTargetEvent event) {
|
||||||
if (event.getTarget() instanceof Player) {
|
if (event.getTarget() instanceof Player) {
|
||||||
Player player = (Player) event.getTarget();
|
Player player = (Player) event.getTarget();
|
||||||
if (!player.hasPermission("modifyworld.mobtarget." + getEntityName(event.getEntity()))) {
|
if (_permissionDenied(player, "modifyworld.mobtarget", event.getEntity())) {
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected boolean canMessWithEntity(Player player, String basePermission, Entity entity) {
|
|
||||||
if (entity instanceof Player) {
|
|
||||||
PermissionUser entityUser = permissionsManager.getUser(((Player) entity).getName());
|
|
||||||
|
|
||||||
if (entityUser == null) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (PermissionGroup group : entityUser.getGroups()) {
|
|
||||||
if (player.hasPermission(basePermission + "group." + group.getName())) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return player.hasPermission(basePermission + "player." + entityUser.getName());
|
|
||||||
}
|
|
||||||
|
|
||||||
return player.hasPermission(basePermission + getEntityName(entity));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -19,8 +19,6 @@
|
|||||||
package ru.tehkode.modifyworld.handlers;
|
package ru.tehkode.modifyworld.handlers;
|
||||||
|
|
||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
import org.bukkit.Bukkit;
|
|
||||||
import org.bukkit.ChatColor;
|
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.configuration.ConfigurationSection;
|
import org.bukkit.configuration.ConfigurationSection;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
@ -35,8 +33,9 @@ import org.bukkit.event.player.*;
|
|||||||
import org.bukkit.inventory.Inventory;
|
import org.bukkit.inventory.Inventory;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
import org.bukkit.plugin.Plugin;
|
import org.bukkit.plugin.Plugin;
|
||||||
|
import org.bukkit.util.Vector;
|
||||||
import ru.tehkode.modifyworld.ModifyworldListener;
|
import ru.tehkode.modifyworld.ModifyworldListener;
|
||||||
import ru.tehkode.permissions.PermissionUser;
|
import ru.tehkode.modifyworld.PlayerInformer;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
@ -44,19 +43,13 @@ import ru.tehkode.permissions.PermissionUser;
|
|||||||
*/
|
*/
|
||||||
public class PlayerListener extends ModifyworldListener {
|
public class PlayerListener extends ModifyworldListener {
|
||||||
|
|
||||||
public final static String WHITELIST_MESSAGE = "You are not allowed to join this server. Goodbye!";
|
|
||||||
public final static String PROHIBITED_ITEM = "You have prohibited item \"%s\".";
|
|
||||||
protected boolean checkInventory = false;
|
protected boolean checkInventory = false;
|
||||||
protected boolean dropRestrictedItem = false;
|
protected boolean dropRestrictedItem = false;
|
||||||
protected String whitelistKickMessage = WHITELIST_MESSAGE;
|
|
||||||
protected String prohibitedItemMessage = PROHIBITED_ITEM;
|
|
||||||
|
|
||||||
public PlayerListener(Plugin plugin, ConfigurationSection config) {
|
public PlayerListener(Plugin plugin, ConfigurationSection config, PlayerInformer informer) {
|
||||||
super(plugin, config);
|
super(plugin, config, informer);
|
||||||
|
|
||||||
this.whitelistKickMessage = config.getString("messages.whitelistMessage", this.whitelistKickMessage);
|
this.checkInventory = config.getBoolean("item-restrictions", this.checkInventory);
|
||||||
this.prohibitedItemMessage = config.getString("messages.prohibitedItem", this.prohibitedItemMessage);
|
|
||||||
this.checkInventory = config.getBoolean("itemRestrictions", this.checkInventory);
|
|
||||||
this.dropRestrictedItem = config.getBoolean("drop-restricted-item", this.dropRestrictedItem);
|
this.dropRestrictedItem = config.getBoolean("drop-restricted-item", this.dropRestrictedItem);
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -65,7 +58,7 @@ public class PlayerListener extends ModifyworldListener {
|
|||||||
public void onPlayerSneak(PlayerToggleSneakEvent event) {
|
public void onPlayerSneak(PlayerToggleSneakEvent event) {
|
||||||
Player player = event.getPlayer();
|
Player player = event.getPlayer();
|
||||||
|
|
||||||
if (event.isSneaking() && !player.hasPermission("modifyworld.sneak")) {
|
if (event.isSneaking() && _permissionDenied(player, "modifyworld.sneak")) {
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
event.getPlayer().setSneaking(false);
|
event.getPlayer().setSneaking(false);
|
||||||
}
|
}
|
||||||
@ -75,29 +68,12 @@ public class PlayerListener extends ModifyworldListener {
|
|||||||
public void onPlayerSprint(PlayerToggleSprintEvent event) {
|
public void onPlayerSprint(PlayerToggleSprintEvent event) {
|
||||||
Player player = event.getPlayer();
|
Player player = event.getPlayer();
|
||||||
|
|
||||||
if (event.isSprinting() && !player.hasPermission("modifyworld.sprint")) {
|
if (event.isSprinting() && _permissionDenied(player, "modifyworld.sprint")) {
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
event.getPlayer().setSprinting(false);
|
event.getPlayer().setSprinting(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.LOW)
|
|
||||||
public void onPlayerPreLogin(PlayerPreLoginEvent event) {
|
|
||||||
if (!enableWhitelist) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
PermissionUser user = this.permissionsManager.getUser(event.getName());
|
|
||||||
|
|
||||||
String worldName = Bukkit.getServer().getWorlds().get(0).getName();
|
|
||||||
|
|
||||||
if (user != null && !user.has("modifyworld.login", worldName)) {
|
|
||||||
String whiteListMessage = user.getOption("kick-message", worldName, this.whitelistKickMessage);
|
|
||||||
|
|
||||||
event.disallow(PlayerPreLoginEvent.Result.KICK_WHITELIST, whiteListMessage);
|
|
||||||
Logger.getLogger("Minecraft").info("Player \"" + user.getName() + "\" were kicked by Modifyworld - lack of modifyworld.login permission");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.LOW)
|
@EventHandler(priority = EventPriority.LOW)
|
||||||
public void onPlayerLogin(PlayerLoginEvent event) {
|
public void onPlayerLogin(PlayerLoginEvent event) {
|
||||||
@ -105,22 +81,18 @@ public class PlayerListener extends ModifyworldListener {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
PermissionUser user = this.permissionsManager.getUser(event.getPlayer());
|
Player player = event.getPlayer();
|
||||||
|
|
||||||
String worldName = Bukkit.getServer().getWorlds().get(0).getName();
|
if (_permissionDenied(player, "modifyworld.login")) {
|
||||||
|
// String whiteListMessage = user.getOption("kick-message", worldName, this.whitelistKickMessage);
|
||||||
if (user != null && !user.has("modifyworld.login", worldName)) {
|
event.disallow(PlayerLoginEvent.Result.KICK_WHITELIST, informer.getMessage(player, "modifyworld.login"));
|
||||||
String whiteListMessage = user.getOption("kick-message", worldName, this.whitelistKickMessage);
|
Logger.getLogger("Minecraft").info("Player \"" + player.getName() + "\" were kicked by Modifyworld - lack of 'modifyworld.login' permission");
|
||||||
|
|
||||||
event.disallow(PlayerLoginEvent.Result.KICK_WHITELIST, whiteListMessage);
|
|
||||||
Logger.getLogger("Minecraft").info("Player \"" + user.getName() + "\" were kicked by Modifyworld - lack of modifyworld.login permission");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.LOW)
|
@EventHandler(priority = EventPriority.LOW)
|
||||||
public void onPlayerBedEnter(PlayerBedEnterEvent event) {
|
public void onPlayerBedEnter(PlayerBedEnterEvent event) {
|
||||||
if (!event.getPlayer().hasPermission("modifyworld.usebeds")) {
|
if (permissionDenied(event.getPlayer(), "modifyworld.usebeds")) {
|
||||||
informPlayer(event.getPlayer(), ChatColor.RED + "Sorry, you don't have enough permissions");
|
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -128,8 +100,7 @@ public class PlayerListener extends ModifyworldListener {
|
|||||||
@EventHandler(priority = EventPriority.LOW)
|
@EventHandler(priority = EventPriority.LOW)
|
||||||
public void onPlayerBucketEmpty(PlayerBucketEmptyEvent event) {
|
public void onPlayerBucketEmpty(PlayerBucketEmptyEvent event) {
|
||||||
String bucketName = event.getBucket().toString().toLowerCase().replace("_bucket", ""); // WATER_BUCKET -> water
|
String bucketName = event.getBucket().toString().toLowerCase().replace("_bucket", ""); // WATER_BUCKET -> water
|
||||||
if (!event.getPlayer().hasPermission("modifyworld.bucket.empty." + bucketName)) {
|
if (permissionDenied(event.getPlayer(), "modifyworld.bucket.empty", bucketName)) {
|
||||||
informPlayerAboutDenial(event.getPlayer());
|
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -137,31 +108,29 @@ public class PlayerListener extends ModifyworldListener {
|
|||||||
@EventHandler(priority = EventPriority.LOW)
|
@EventHandler(priority = EventPriority.LOW)
|
||||||
public void onPlayerBucketFill(PlayerBucketFillEvent event) {
|
public void onPlayerBucketFill(PlayerBucketFillEvent event) {
|
||||||
String materialName = event.getBlockClicked().getType().toString().toLowerCase().replace("stationary_", ""); // STATIONARY_WATER -> water
|
String materialName = event.getBlockClicked().getType().toString().toLowerCase().replace("stationary_", ""); // STATIONARY_WATER -> water
|
||||||
if (!event.getPlayer().hasPermission("modifyworld.bucket.fill." + materialName)) {
|
if (permissionDenied(event.getPlayer(), "modifyworld.bucket.fill", materialName)) {
|
||||||
informPlayerAboutDenial(event.getPlayer());
|
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.LOW)
|
@EventHandler(priority = EventPriority.LOW)
|
||||||
public void onPlayerCommandPreprocess(PlayerCommandPreprocessEvent event) {
|
public void onPlayerCommandPreprocess(PlayerCommandPreprocessEvent event) {
|
||||||
if (event.getMessage().startsWith("/tell") && !event.getPlayer().hasPermission("modifyworld.chat.private")) {
|
if (event.getMessage().startsWith("/tell") && permissionDenied(event.getPlayer(), "modifyworld.chat.private")) {
|
||||||
informPlayerAboutDenial(event.getPlayer());
|
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.LOW)
|
@EventHandler(priority = EventPriority.LOW)
|
||||||
public void onPlayerChat(PlayerChatEvent event) {
|
public void onPlayerChat(PlayerChatEvent event) {
|
||||||
if (!event.getPlayer().hasPermission("modifyworld.chat")) {
|
if (permissionDenied(event.getPlayer(), "modifyworld.chat")) {
|
||||||
informPlayerAboutDenial(event.getPlayer());
|
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.LOW)
|
@EventHandler(priority = EventPriority.LOW)
|
||||||
public void onPlayerPickupItem(PlayerPickupItemEvent event) {
|
public void onPlayerPickupItem(PlayerPickupItemEvent event) {
|
||||||
if (!canInteractWithItem(event.getPlayer(), "modifyworld.items.pickup.", event.getItem().getItemStack())) {
|
// No inform to avoid spam
|
||||||
|
if (_permissionDenied(event.getPlayer(), "modifyworld.items.pickup", event.getItem().getItemStack())) {
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -170,19 +139,13 @@ public class PlayerListener extends ModifyworldListener {
|
|||||||
|
|
||||||
@EventHandler(priority = EventPriority.LOW)
|
@EventHandler(priority = EventPriority.LOW)
|
||||||
public void onPlayerDropItem(PlayerDropItemEvent event) {
|
public void onPlayerDropItem(PlayerDropItemEvent event) {
|
||||||
if (!canInteractWithItem(event.getPlayer(), "modifyworld.items.drop.", event.getItemDrop().getItemStack())) {
|
if (permissionDenied(event.getPlayer(), "modifyworld.items.drop", event.getItemDrop().getItemStack())) {
|
||||||
informPlayerAboutDenial(event.getPlayer());
|
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
this.checkPlayerInventory(event.getPlayer());
|
this.checkPlayerInventory(event.getPlayer());
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.LOW)
|
|
||||||
public void onInventoryOpen(PlayerInventoryEvent event) {
|
|
||||||
this.checkPlayerInventory(event.getPlayer());
|
|
||||||
}
|
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.LOW)
|
@EventHandler(priority = EventPriority.LOW)
|
||||||
public void onItemHeldChange(PlayerItemHeldEvent event) {
|
public void onItemHeldChange(PlayerItemHeldEvent event) {
|
||||||
this.checkPlayerInventory(event.getPlayer());
|
this.checkPlayerInventory(event.getPlayer());
|
||||||
@ -191,17 +154,15 @@ public class PlayerListener extends ModifyworldListener {
|
|||||||
@EventHandler(priority = EventPriority.LOW)
|
@EventHandler(priority = EventPriority.LOW)
|
||||||
public void onPlayerInteractEntity(PlayerInteractEntityEvent event) {
|
public void onPlayerInteractEntity(PlayerInteractEntityEvent event) {
|
||||||
if (this.checkItemUse) {
|
if (this.checkItemUse) {
|
||||||
if (!event.getPlayer().hasPermission("modifyworld.items.use." + getItemPermission(event.getPlayer().getItemInHand()) + ".on.entity." + getEntityName(event.getRightClicked()))) {
|
if (permissionDenied(event.getPlayer(), "modifyworld.items.use", event.getPlayer().getItemInHand(), "on.entity", event.getRightClicked())) {
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
informPlayerAboutDenial(event.getPlayer());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!event.isCancelled() && !event.getPlayer().hasPermission("modifyworld.interact." + getEntityName(event.getRightClicked()))) {
|
if (!event.isCancelled() && permissionDenied(event.getPlayer(), "modifyworld.interact", event.getRightClicked())) {
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
informPlayerAboutDenial(event.getPlayer());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -218,17 +179,19 @@ public class PlayerListener extends ModifyworldListener {
|
|||||||
if (action == Action.RIGHT_CLICK_AIR) { //RIGHT_CLICK_AIR is cancelled by default.
|
if (action == Action.RIGHT_CLICK_AIR) { //RIGHT_CLICK_AIR is cancelled by default.
|
||||||
switch (player.getItemInHand().getType()) {
|
switch (player.getItemInHand().getType()) {
|
||||||
case POTION: //Only check splash potions.
|
case POTION: //Only check splash potions.
|
||||||
if ((player.getItemInHand().getDurability() & 0x4000) != 0x4000) break;
|
if ((player.getItemInHand().getDurability() & 0x4000) != 0x4000) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
case EGG:
|
case EGG:
|
||||||
case SNOW_BALL:
|
case SNOW_BALL:
|
||||||
case EXP_BOTTLE:
|
case EXP_BOTTLE:
|
||||||
if (!canInteractWithItem(player, "modifyworld.items.throw.", player.getItemInHand())) {
|
if (permissionDenied(player, "modifyworld.items.throw", player.getItemInHand())) {
|
||||||
informPlayerAboutDenial(player);
|
|
||||||
event.setUseItemInHand(Result.DENY);
|
event.setUseItemInHand(Result.DENY);
|
||||||
//Denying a potion works fine, but the client needs to be updated because it already reduced the item.
|
//Denying a potion works fine, but the client needs to be updated because it already reduced the item.
|
||||||
if (player.getItemInHand().getType() == Material.POTION)
|
if (player.getItemInHand().getType() == Material.POTION) {
|
||||||
event.getPlayer().updateInventory();
|
event.getPlayer().updateInventory();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -238,25 +201,22 @@ public class PlayerListener extends ModifyworldListener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (this.checkItemUse && action != Action.PHYSICAL) {
|
if (this.checkItemUse && action != Action.PHYSICAL) {
|
||||||
if (!player.hasPermission("modifyworld.items.use." + getItemPermission(player.getItemInHand()) + ".on.block." + getBlockPermission(event.getClickedBlock()))) {
|
if (permissionDenied(event.getPlayer(), "modifyworld.items.use", player.getItemInHand(), "on.block", event.getClickedBlock())) {
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
informPlayerAboutDenial(player);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!event.isCancelled() && !canInteractWithBlock(player, "modifyworld.blocks.interact.", event.getClickedBlock())) {
|
if (!event.isCancelled() && permissionDenied(player, "modifyworld.blocks.interact", event.getClickedBlock())) {
|
||||||
informPlayerAboutDenial(player);
|
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.LOW)
|
@EventHandler(priority = EventPriority.LOW)
|
||||||
public void onItemEnchant(EnchantItemEvent event) {
|
public void onItemEnchant(EnchantItemEvent event) {
|
||||||
if (!canInteractWithItem(event.getEnchanter(), "modifyworld.items.enchant.", event.getItem())){
|
if (permissionDenied(event.getEnchanter(), "modifyworld.items.enchant", event.getItem())) {
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
informPlayerAboutDenial(event.getEnchanter());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -264,9 +224,8 @@ public class PlayerListener extends ModifyworldListener {
|
|||||||
public void onItemCraft(CraftItemEvent event) {
|
public void onItemCraft(CraftItemEvent event) {
|
||||||
Player player = (Player) event.getWhoClicked();
|
Player player = (Player) event.getWhoClicked();
|
||||||
|
|
||||||
if (!canInteractWithItem(player, "modifyworld.items.craft.", event.getRecipe().getResult())){
|
if (permissionDenied(player, "modifyworld.items.craft", event.getRecipe().getResult())) {
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
informPlayerAboutDenial(player);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -278,7 +237,7 @@ public class PlayerListener extends ModifyworldListener {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!player.hasPermission("modifyworld.digestion")) {
|
if (_permissionDenied(player, "modifyworld.digestion")) {
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -290,14 +249,12 @@ public class PlayerListener extends ModifyworldListener {
|
|||||||
|
|
||||||
Inventory inventory = player.getInventory();
|
Inventory inventory = player.getInventory();
|
||||||
for (ItemStack stack : inventory.getContents()) {
|
for (ItemStack stack : inventory.getContents()) {
|
||||||
if (stack != null && !canInteractWithItem(player, "modifyworld.items.have.", stack)) {
|
if (stack != null && permissionDenied(player, "modifyworld.items.have", stack)) {
|
||||||
inventory.remove(stack);
|
inventory.remove(stack);
|
||||||
|
|
||||||
if (this.dropRestrictedItem) {
|
if (this.dropRestrictedItem) {
|
||||||
player.getWorld().dropItemNaturally(player.getLocation(), stack);
|
player.getWorld().dropItemNaturally(player.getLocation(), stack);
|
||||||
}
|
}
|
||||||
|
|
||||||
informPlayer(player, String.format(this.prohibitedItemMessage, stack.getType().name()));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -27,6 +27,7 @@ import org.bukkit.event.vehicle.VehicleEnterEvent;
|
|||||||
import org.bukkit.event.vehicle.VehicleEntityCollisionEvent;
|
import org.bukkit.event.vehicle.VehicleEntityCollisionEvent;
|
||||||
import org.bukkit.plugin.Plugin;
|
import org.bukkit.plugin.Plugin;
|
||||||
import ru.tehkode.modifyworld.ModifyworldListener;
|
import ru.tehkode.modifyworld.ModifyworldListener;
|
||||||
|
import ru.tehkode.modifyworld.PlayerInformer;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
@ -34,8 +35,8 @@ import ru.tehkode.modifyworld.ModifyworldListener;
|
|||||||
*/
|
*/
|
||||||
public class VehicleListener extends ModifyworldListener {
|
public class VehicleListener extends ModifyworldListener {
|
||||||
|
|
||||||
public VehicleListener(Plugin plugin, ConfigurationSection config) {
|
public VehicleListener(Plugin plugin, ConfigurationSection config, PlayerInformer informer) {
|
||||||
super(plugin, config);
|
super(plugin, config, informer);
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.LOW)
|
@EventHandler(priority = EventPriority.LOW)
|
||||||
@ -45,8 +46,7 @@ public class VehicleListener extends ModifyworldListener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Player player = (Player) event.getAttacker();
|
Player player = (Player) event.getAttacker();
|
||||||
if (!player.hasPermission("modifyworld.vehicle.destroy")) {
|
if (permissionDenied(player, "modifyworld.vehicle.destroy", event.getVehicle())) {
|
||||||
informPlayerAboutDenial(player);
|
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -58,8 +58,7 @@ public class VehicleListener extends ModifyworldListener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Player player = (Player) event.getEntered();
|
Player player = (Player) event.getEntered();
|
||||||
if (!player.hasPermission("modifyworld.vehicle.enter")) {
|
if (permissionDenied(player, "modifyworld.vehicle.enter", event.getVehicle())) {
|
||||||
informPlayerAboutDenial(player);
|
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -71,7 +70,7 @@ public class VehicleListener extends ModifyworldListener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Player player = (Player) event.getEntity();
|
Player player = (Player) event.getEntity();
|
||||||
if (!player.hasPermission("modifyworld.vehicle.collide")) {
|
if (_permissionDenied(player, "modifyworld.vehicle.collide", event.getVehicle())) {
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
event.setCollisionCancelled(true);
|
event.setCollisionCancelled(true);
|
||||||
event.setPickupCancelled(true);
|
event.setPickupCancelled(true);
|
||||||
|
28
src/main/resources/config.yml
Normal file
28
src/main/resources/config.yml
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
item-restrictions: false
|
||||||
|
inform-players: false
|
||||||
|
whitelist: false
|
||||||
|
use-material-names: true
|
||||||
|
drop-restricted-item: false
|
||||||
|
item-use-check: false
|
||||||
|
messages:
|
||||||
|
message-format: '&f[&2Modifyworld&f]&4 %s'
|
||||||
|
default-message: Sorry, you don't have enough permissions - $permission
|
||||||
|
modifyworld.items.use: Stop, &a$1&4 won't fit into &a$3
|
||||||
|
modifyworld.login: You are not allowed to join this server. Goodbye!
|
||||||
|
modifyworld.blocks.interact: You are too jelly for &2$1
|
||||||
|
modifyworld.blocks.place: This is wrong place for &a$1
|
||||||
|
modifyworld.blocks.destroy: '&a$1&4 is tough for you'
|
||||||
|
modifyworld.damage.deal: Your level is too low for &5$1
|
||||||
|
modifyworld.chat: Your mouth is too dry
|
||||||
|
modifyworld.chat.private: Listener is deaf :(
|
||||||
|
modifyworld.items.have: Prohibited item &a$1&4 has been removed from your inventory.
|
||||||
|
modifyworld.items.drop: This is indecent to scatter &a$1&4 around
|
||||||
|
modifyworld.items.craft: Sorry, but &a$1&4 is too complicated
|
||||||
|
modifyworld.items.enchant: Sorry, &a$1&4 is too dangerous
|
||||||
|
modifyworld.vehicle.enter.boat: You are too heavy for this &a$1
|
||||||
|
modifyworld.vehicle.enter.minecart: Sorry, but &a$1&4 is too small
|
||||||
|
modifyworld.vehicle.destroy: This &a$1&4 is legal property of &bUnited States of America
|
||||||
|
modifyworld.tame: This &a$1&4 is too ferocious
|
||||||
|
modifyworld.bucket.fill: This bucket is holey
|
||||||
|
modifyworld.bucket.empty: You suddenly realized you still need &a$1
|
||||||
|
modifyworld.usebeds: You can't sleep yet, there are monsters nearby
|
Loading…
Reference in New Issue
Block a user