mirror of
https://github.com/PEXPlugins/Modifyworld.git
synced 2024-09-28 03:57:47 +02:00
Added "item.use" mode. If this mode enabled "modifyworld.item.use.<item>.on.<target>" checked instead of "modifyworld.interact". Both for blocks and entities.
This commit is contained in:
parent
5402180be4
commit
7bbf9bb010
@ -40,140 +40,139 @@ import ru.tehkode.permissions.bukkit.PermissionsEx;
|
||||
*/
|
||||
public abstract class ModifyworldListener implements Listener {
|
||||
|
||||
public final static String PERMISSION_DENIED = "Sorry, you don't have enough permissions";
|
||||
protected String permissionDenied = PERMISSION_DENIED;
|
||||
protected PermissionManager permissionsManager;
|
||||
protected ConfigurationNode config;
|
||||
protected boolean informPlayers = false;
|
||||
protected boolean useMaterialNames = true;
|
||||
protected boolean checkMetadata = false;
|
||||
public final static String PERMISSION_DENIED = "Sorry, you don't have enough permissions";
|
||||
protected String permissionDenied = PERMISSION_DENIED;
|
||||
protected PermissionManager permissionsManager;
|
||||
protected ConfigurationNode config;
|
||||
protected boolean informPlayers = false;
|
||||
protected boolean useMaterialNames = true;
|
||||
protected boolean checkMetadata = false;
|
||||
protected boolean checkItemUse = false;
|
||||
|
||||
public ModifyworldListener(Plugin plugin, ConfigurationNode config) {
|
||||
this.permissionsManager = PermissionsEx.getPermissionManager();
|
||||
this.config = config;
|
||||
public ModifyworldListener(Plugin plugin, ConfigurationNode config) {
|
||||
this.permissionsManager = PermissionsEx.getPermissionManager();
|
||||
this.config = config;
|
||||
|
||||
this.registerEvents(plugin);
|
||||
this.registerEvents(plugin);
|
||||
|
||||
this.informPlayers = config.getBoolean("informPlayers", informPlayers);
|
||||
this.permissionDenied = config.getString("messages.permissionDenied", this.permissionDenied);
|
||||
this.useMaterialNames = config.getBoolean("use-material-names", useMaterialNames);
|
||||
this.checkMetadata = config.getBoolean("check-metadata", checkMetadata);
|
||||
}
|
||||
this.informPlayers = config.getBoolean("informPlayers", informPlayers);
|
||||
this.permissionDenied = config.getString("messages.permissionDenied", this.permissionDenied);
|
||||
this.useMaterialNames = config.getBoolean("use-material-names", useMaterialNames);
|
||||
this.checkMetadata = config.getBoolean("check-metadata", checkMetadata);
|
||||
this.checkItemUse = config.getBoolean("item-use-check", checkItemUse);
|
||||
}
|
||||
|
||||
protected void informPlayer(Player player, String message) {
|
||||
if (this.informPlayers) {
|
||||
player.sendMessage(ChatColor.RED + message);
|
||||
}
|
||||
}
|
||||
protected void informPlayer(Player player, String message) {
|
||||
if (this.informPlayers) {
|
||||
player.sendMessage(ChatColor.RED + message);
|
||||
}
|
||||
}
|
||||
|
||||
protected void informPlayerAboutDenial(Player player) {
|
||||
this.informPlayer(player, this.permissionDenied);
|
||||
}
|
||||
protected void informPlayerAboutDenial(Player player) {
|
||||
this.informPlayer(player, this.permissionDenied);
|
||||
}
|
||||
|
||||
protected String getEntityName(Entity entity) {
|
||||
if (entity instanceof Player) {
|
||||
return "player." + ((Player) entity).getName();
|
||||
} else if (entity instanceof Wolf) {
|
||||
Wolf wolf = (Wolf) entity;
|
||||
protected String getEntityName(Entity entity) {
|
||||
if (entity instanceof Player) {
|
||||
return "player." + ((Player) entity).getName();
|
||||
} else if (entity instanceof Wolf) {
|
||||
Wolf wolf = (Wolf) entity;
|
||||
|
||||
if (wolf.isTamed() && wolf.getOwner() instanceof Player) {
|
||||
return "animal.wolf." + ((Player) wolf.getOwner()).getName();
|
||||
} else {
|
||||
return "animal.wolf";
|
||||
}
|
||||
}
|
||||
|
||||
// Fixtures for Bukkit dev lazyness
|
||||
if (entity instanceof Ghast){
|
||||
return "monster.ghast";
|
||||
}
|
||||
|
||||
if (entity instanceof Squid){
|
||||
return "animal.squid";
|
||||
}
|
||||
|
||||
if (entity instanceof Slime){
|
||||
return "monster.slime";
|
||||
}
|
||||
|
||||
|
||||
String entityName = entity.getClass().getSimpleName();
|
||||
if (wolf.isTamed() && wolf.getOwner() instanceof Player) {
|
||||
return "animal.wolf." + ((Player) wolf.getOwner()).getName();
|
||||
} else {
|
||||
return "animal.wolf";
|
||||
}
|
||||
}
|
||||
|
||||
if (entityName.startsWith("Craft")) {
|
||||
entityName = entityName.substring(5).toLowerCase();
|
||||
}
|
||||
// Fixtures for Bukkit dev lazyness
|
||||
if (entity instanceof Ghast) {
|
||||
return "monster.ghast";
|
||||
}
|
||||
|
||||
if (Monster.class.isAssignableFrom(entity.getClass())) {
|
||||
entityName = "monster." + entityName;
|
||||
} else if (Animals.class.isAssignableFrom(entity.getClass())) {
|
||||
entityName = "animal." + entityName;
|
||||
} else if (Projectile.class.isAssignableFrom(entity.getClass())) {
|
||||
entityName = "projectile." + entityName;
|
||||
}
|
||||
|
||||
return entityName;
|
||||
}
|
||||
if (entity instanceof Squid) {
|
||||
return "animal.squid";
|
||||
}
|
||||
|
||||
if (entity instanceof Slime) {
|
||||
return "monster.slime";
|
||||
}
|
||||
|
||||
|
||||
String entityName = entity.getClass().getSimpleName();
|
||||
|
||||
if (entityName.startsWith("Craft")) {
|
||||
entityName = entityName.substring(5).toLowerCase();
|
||||
}
|
||||
|
||||
if (Monster.class.isAssignableFrom(entity.getClass())) {
|
||||
entityName = "monster." + entityName;
|
||||
} else if (Animals.class.isAssignableFrom(entity.getClass())) {
|
||||
entityName = "animal." + entityName;
|
||||
} else if (Projectile.class.isAssignableFrom(entity.getClass())) {
|
||||
entityName = "projectile." + entityName;
|
||||
}
|
||||
|
||||
return entityName;
|
||||
}
|
||||
|
||||
// Functional programming fuck yeah
|
||||
protected String getMaterialPermission(Material type) {
|
||||
return this.useMaterialNames ? type.name().toLowerCase().replace("_", "") : Integer.toString(type.getId());
|
||||
}
|
||||
|
||||
protected String getItemPermission(ItemStack item) {
|
||||
return this.getMaterialPermission(item.getType()) + (this.checkMetadata ? "." + item.getData().getData() : "");
|
||||
}
|
||||
|
||||
protected String getBlockPermission(Block block) {
|
||||
return this.getMaterialPermission(block.getType()) + (this.checkMetadata ? "." + block.getData() : "");
|
||||
}
|
||||
|
||||
protected boolean canInteractWithMaterial(Player player, String basePermission, Material type) {
|
||||
return permissionsManager.has(player, basePermission + this.getMaterialPermission(type));
|
||||
}
|
||||
|
||||
protected String getMaterialPermission(String basePermission, Material type){
|
||||
return basePermission + (this.useMaterialNames ? type.name().toLowerCase().replace("_", "") : type.getId() );
|
||||
}
|
||||
|
||||
protected boolean canInteractWithMaterial(Player player, String basePermission, Material type) {
|
||||
return permissionsManager.has(player, this.getMaterialPermission(basePermission, type));
|
||||
}
|
||||
|
||||
protected boolean canInteractWithItem(Player player, String basePermission, ItemStack item) {
|
||||
String permission = this.getMaterialPermission(basePermission, item.getType());
|
||||
|
||||
if (this.checkMetadata) {
|
||||
permission += "." + item.getData().getData();
|
||||
}
|
||||
|
||||
return permissionsManager.has(player, permission);
|
||||
}
|
||||
|
||||
protected boolean canInteractWithBlock(Player player, String basePermission, Block block) {
|
||||
String permission = this.getMaterialPermission(basePermission, block.getType());
|
||||
|
||||
if (this.checkMetadata) {
|
||||
permission += "." + block.getData();
|
||||
}
|
||||
|
||||
return permissionsManager.has(player, permission);
|
||||
}
|
||||
return permissionsManager.has(player, basePermission + this.getItemPermission(item));
|
||||
}
|
||||
|
||||
private void registerEvents(Plugin plugin) {
|
||||
PluginManager pluginManager = plugin.getServer().getPluginManager();
|
||||
for (Method method : this.getClass().getMethods()) {
|
||||
if (!method.isAnnotationPresent(EventHandler.class)) {
|
||||
continue;
|
||||
}
|
||||
protected boolean canInteractWithBlock(Player player, String basePermission, Block block) {
|
||||
return permissionsManager.has(player, basePermission + this.getBlockPermission(block));
|
||||
}
|
||||
|
||||
EventHandler handler = method.getAnnotation(EventHandler.class);
|
||||
private void registerEvents(Plugin plugin) {
|
||||
PluginManager pluginManager = plugin.getServer().getPluginManager();
|
||||
for (Method method : this.getClass().getMethods()) {
|
||||
if (!method.isAnnotationPresent(EventHandler.class)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (method.isAnnotationPresent(Toggleable.class)) {
|
||||
Toggleable toggle = method.getAnnotation(Toggleable.class);
|
||||
if (!config.getBoolean(toggle.value(), toggle.byDefault())) {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
EventHandler handler = method.getAnnotation(EventHandler.class);
|
||||
|
||||
pluginManager.registerEvent(handler.value(), this, this.getEventExecutor(method), Event.Priority.Normal, plugin);
|
||||
}
|
||||
}
|
||||
if (method.isAnnotationPresent(Toggleable.class)) {
|
||||
Toggleable toggle = method.getAnnotation(Toggleable.class);
|
||||
if (!config.getBoolean(toggle.value(), toggle.byDefault())) {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
private EventExecutor getEventExecutor(final Method eventHandlerMethod) {
|
||||
return new EventExecutor() {
|
||||
pluginManager.registerEvent(handler.value(), this, this.getEventExecutor(method), Event.Priority.Normal, plugin);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void execute(Listener listener, Event event) {
|
||||
try {
|
||||
eventHandlerMethod.invoke(listener, event);
|
||||
} catch (Exception e) {
|
||||
Logger.getLogger("Minecraft").warning("[Modifyworld] Failed to execute Modifyworld event handler for Event." + event.getEventName());
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
private EventExecutor getEventExecutor(final Method eventHandlerMethod) {
|
||||
return new EventExecutor() {
|
||||
|
||||
@Override
|
||||
public void execute(Listener listener, Event event) {
|
||||
try {
|
||||
eventHandlerMethod.invoke(listener, event);
|
||||
} catch (Exception e) {
|
||||
Logger.getLogger("Minecraft").warning("[Modifyworld] Failed to execute Modifyworld event handler for Event." + event.getEventName());
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
|
@ -40,187 +40,207 @@ import ru.tehkode.permissions.PermissionUser;
|
||||
* @author t3hk0d3
|
||||
*/
|
||||
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 dropRestrictedItem = false;
|
||||
protected String whitelistKickMessage = WHITELIST_MESSAGE;
|
||||
protected String prohibitedItemMessage = PROHIBITED_ITEM;
|
||||
|
||||
public PlayerListener(Plugin plugin, ConfigurationNode config) {
|
||||
super(plugin, config);
|
||||
|
||||
this.whitelistKickMessage = config.getString("messages.whitelist", this.whitelistKickMessage);
|
||||
this.prohibitedItemMessage = config.getString("messages.prohibitedItem", this.prohibitedItemMessage);
|
||||
this.checkInventory = config.getBoolean("itemRestrictions", this.checkInventory);
|
||||
this.dropRestrictedItem = config.getBoolean("drop-restricted-item", this.dropRestrictedItem);
|
||||
|
||||
}
|
||||
|
||||
@EventHandler(Type.PLAYER_TOGGLE_SNEAK)
|
||||
public void onPlayerSneak(PlayerToggleSneakEvent event) {
|
||||
if (event.isSneaking() && !permissionsManager.has(event.getPlayer(), "modifyworld.sneak")) {
|
||||
event.setCancelled(true);
|
||||
event.getPlayer().setSneaking(false);
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(Type.PLAYER_TOGGLE_SPRINT)
|
||||
public void onPlayerSprint(PlayerToggleSprintEvent event) {
|
||||
if (event.isSprinting() && !permissionsManager.has(event.getPlayer(), "modifyworld.sprint")) {
|
||||
event.setCancelled(true);
|
||||
event.getPlayer().setSprinting(false);
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(Type.PLAYER_PRELOGIN)
|
||||
@Toggleable("whitelist")
|
||||
public void onPlayerPreLogin(PlayerPreLoginEvent event) {
|
||||
PermissionUser user = this.permissionsManager.getUser(event.getName());
|
||||
|
||||
if (user != null && !user.has("modifyworld.login", Bukkit.getServer().getWorlds().get(0).getName())) {
|
||||
event.disallow(PlayerPreLoginEvent.Result.KICK_WHITELIST, whitelistKickMessage);
|
||||
Logger.getLogger("Minecraft").info("Player \"" + user.getName() + "\" were kicked by Modifyworld - lack of modifyworld.login permission");
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(Type.PLAYER_LOGIN)
|
||||
@Toggleable("whitelist")
|
||||
public void onPlayerLogin(PlayerLoginEvent event) {
|
||||
PermissionUser user = this.permissionsManager.getUser(event.getPlayer());
|
||||
|
||||
if (user != null && !user.has("modifyworld.login", Bukkit.getServer().getWorlds().get(0).getName())) {
|
||||
event.disallow(PlayerLoginEvent.Result.KICK_WHITELIST, whitelistKickMessage);
|
||||
//event.getPlayer().kickPlayer(whitelistKickMessage);
|
||||
Logger.getLogger("Minecraft").info("Player \"" + user.getName() + "\" were kicked by Modifyworld - lack of modifyworld.login permission");
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(Type.PLAYER_BED_ENTER)
|
||||
public void onPlayerBedEnter(PlayerBedEnterEvent event) {
|
||||
if (!permissionsManager.has(event.getPlayer(), "modifyworld.usebeds")) {
|
||||
informPlayer(event.getPlayer(), ChatColor.RED + "Sorry, you don't have enough permissions");
|
||||
event.setCancelled(true);
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(Type.PLAYER_BUCKET_EMPTY)
|
||||
public void onPlayerBucketEmpty(PlayerBucketEmptyEvent event) {
|
||||
String bucketName = event.getBucket().toString().toLowerCase().replace("_bucket", ""); // WATER_BUCKET -> water
|
||||
if (!permissionsManager.has(event.getPlayer(), "modifyworld.bucket.empty." + bucketName)) {
|
||||
informPlayerAboutDenial(event.getPlayer());
|
||||
event.setCancelled(true);
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(Type.PLAYER_BUCKET_FILL)
|
||||
public void onPlayerBucketFill(PlayerBucketFillEvent event) {
|
||||
String materialName = event.getBlockClicked().getType().toString().toLowerCase().replace("stationary_", ""); // STATIONARY_WATER -> water
|
||||
if (!permissionsManager.has(event.getPlayer(), "modifyworld.bucket.fill." + materialName)) {
|
||||
informPlayerAboutDenial(event.getPlayer());
|
||||
event.setCancelled(true);
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(Type.PLAYER_COMMAND_PREPROCESS)
|
||||
public void onPlayerCommandPreprocess(PlayerCommandPreprocessEvent event) {
|
||||
if (event.getMessage().startsWith("/tell") && !permissionsManager.has(event.getPlayer(), "modifyworld.chat.private")) {
|
||||
informPlayerAboutDenial(event.getPlayer());
|
||||
event.setCancelled(true);
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(Type.PLAYER_CHAT)
|
||||
public void onPlayerChat(PlayerChatEvent event) {
|
||||
if (!permissionsManager.has(event.getPlayer(), "modifyworld.chat")) {
|
||||
informPlayerAboutDenial(event.getPlayer());
|
||||
event.setCancelled(true);
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(Type.PLAYER_PICKUP_ITEM)
|
||||
public void onPlayerPickupItem(PlayerPickupItemEvent event) {
|
||||
if (!canInteractWithItem(event.getPlayer(), "modifyworld.items.pickup.", event.getItem().getItemStack())) {
|
||||
event.setCancelled(true);
|
||||
}
|
||||
|
||||
this.checkPlayerInventory(event.getPlayer());
|
||||
}
|
||||
|
||||
@EventHandler(Type.PLAYER_DROP_ITEM)
|
||||
public void onPlayerDropItem(PlayerDropItemEvent event) {
|
||||
if (!canInteractWithItem(event.getPlayer(), "modifyworld.items.drop.", event.getItemDrop().getItemStack())) {
|
||||
informPlayerAboutDenial(event.getPlayer());
|
||||
event.setCancelled(true);
|
||||
}
|
||||
|
||||
this.checkPlayerInventory(event.getPlayer());
|
||||
}
|
||||
|
||||
@EventHandler(Type.PLAYER_INVENTORY)
|
||||
public void onInventoryOpen(PlayerInventoryEvent event) {
|
||||
this.checkPlayerInventory(event.getPlayer());
|
||||
}
|
||||
|
||||
@EventHandler(Type.PLAYER_ITEM_HELD)
|
||||
public void onItemHeldChange(PlayerItemHeldEvent event) {
|
||||
this.checkPlayerInventory(event.getPlayer());
|
||||
}
|
||||
|
||||
@EventHandler(Type.PLAYER_INTERACT_ENTITY)
|
||||
public void onPlayerInteractEntity(PlayerInteractEntityEvent event) {
|
||||
if (!permissionsManager.has(event.getPlayer(), "modifyworld.interact." + getEntityName(event.getRightClicked()))) {
|
||||
event.setCancelled(true);
|
||||
informPlayerAboutDenial(event.getPlayer());
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(Type.PLAYER_INTERACT)
|
||||
public void onPlayerInteract(PlayerInteractEvent event) {
|
||||
Action action = event.getAction();
|
||||
|
||||
if(action == Action.RIGHT_CLICK_AIR || action == Action.RIGHT_CLICK_BLOCK){ // item restriction check
|
||||
this.checkPlayerInventory(event.getPlayer());
|
||||
}
|
||||
|
||||
if (action != Action.LEFT_CLICK_BLOCK && action != Action.RIGHT_CLICK_BLOCK && action != Action.PHYSICAL) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!canInteractWithBlock(event.getPlayer(), "modifyworld.blocks.interact.", event.getClickedBlock())) {
|
||||
informPlayerAboutDenial(event.getPlayer());
|
||||
event.setCancelled(true);
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(Type.FOOD_LEVEL_CHANGE)
|
||||
public void onFoodLevelChange(FoodLevelChangeEvent event){
|
||||
Player player = event.getEntity() instanceof Player ? (Player)event.getEntity() : null;
|
||||
|
||||
if(player == null) return;
|
||||
|
||||
if (!permissionsManager.has(player, "modifyworld.digestion")){
|
||||
event.setCancelled(true);
|
||||
}
|
||||
}
|
||||
|
||||
protected void checkPlayerInventory(Player player) {
|
||||
if (!checkInventory) {
|
||||
return;
|
||||
}
|
||||
|
||||
Inventory inventory = player.getInventory();
|
||||
for (ItemStack stack : inventory.getContents()) {
|
||||
if (stack != null && !canInteractWithItem(player, "modifyworld.items.have.", stack)) {
|
||||
inventory.remove(stack);
|
||||
|
||||
if (this.dropRestrictedItem) {
|
||||
player.getWorld().dropItemNaturally(player.getLocation(), stack);
|
||||
}
|
||||
|
||||
informPlayer(player, String.format(this.prohibitedItemMessage, stack.getType().name()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
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 dropRestrictedItem = false;
|
||||
protected String whitelistKickMessage = WHITELIST_MESSAGE;
|
||||
protected String prohibitedItemMessage = PROHIBITED_ITEM;
|
||||
|
||||
public PlayerListener(Plugin plugin, ConfigurationNode config) {
|
||||
super(plugin, config);
|
||||
|
||||
this.whitelistKickMessage = config.getString("messages.whitelist", this.whitelistKickMessage);
|
||||
this.prohibitedItemMessage = config.getString("messages.prohibitedItem", this.prohibitedItemMessage);
|
||||
this.checkInventory = config.getBoolean("itemRestrictions", this.checkInventory);
|
||||
this.dropRestrictedItem = config.getBoolean("drop-restricted-item", this.dropRestrictedItem);
|
||||
|
||||
}
|
||||
|
||||
@EventHandler(Type.PLAYER_TOGGLE_SNEAK)
|
||||
public void onPlayerSneak(PlayerToggleSneakEvent event) {
|
||||
if (event.isSneaking() && !permissionsManager.has(event.getPlayer(), "modifyworld.sneak")) {
|
||||
event.setCancelled(true);
|
||||
event.getPlayer().setSneaking(false);
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(Type.PLAYER_TOGGLE_SPRINT)
|
||||
public void onPlayerSprint(PlayerToggleSprintEvent event) {
|
||||
if (event.isSprinting() && !permissionsManager.has(event.getPlayer(), "modifyworld.sprint")) {
|
||||
event.setCancelled(true);
|
||||
event.getPlayer().setSprinting(false);
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(Type.PLAYER_PRELOGIN)
|
||||
@Toggleable("whitelist")
|
||||
public void onPlayerPreLogin(PlayerPreLoginEvent event) {
|
||||
PermissionUser user = this.permissionsManager.getUser(event.getName());
|
||||
|
||||
if (user != null && !user.has("modifyworld.login", Bukkit.getServer().getWorlds().get(0).getName())) {
|
||||
event.disallow(PlayerPreLoginEvent.Result.KICK_WHITELIST, whitelistKickMessage);
|
||||
Logger.getLogger("Minecraft").info("Player \"" + user.getName() + "\" were kicked by Modifyworld - lack of modifyworld.login permission");
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(Type.PLAYER_LOGIN)
|
||||
@Toggleable("whitelist")
|
||||
public void onPlayerLogin(PlayerLoginEvent event) {
|
||||
PermissionUser user = this.permissionsManager.getUser(event.getPlayer());
|
||||
|
||||
if (user != null && !user.has("modifyworld.login", Bukkit.getServer().getWorlds().get(0).getName())) {
|
||||
event.disallow(PlayerLoginEvent.Result.KICK_WHITELIST, whitelistKickMessage);
|
||||
//event.getPlayer().kickPlayer(whitelistKickMessage);
|
||||
Logger.getLogger("Minecraft").info("Player \"" + user.getName() + "\" were kicked by Modifyworld - lack of modifyworld.login permission");
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(Type.PLAYER_BED_ENTER)
|
||||
public void onPlayerBedEnter(PlayerBedEnterEvent event) {
|
||||
if (!permissionsManager.has(event.getPlayer(), "modifyworld.usebeds")) {
|
||||
informPlayer(event.getPlayer(), ChatColor.RED + "Sorry, you don't have enough permissions");
|
||||
event.setCancelled(true);
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(Type.PLAYER_BUCKET_EMPTY)
|
||||
public void onPlayerBucketEmpty(PlayerBucketEmptyEvent event) {
|
||||
String bucketName = event.getBucket().toString().toLowerCase().replace("_bucket", ""); // WATER_BUCKET -> water
|
||||
if (!permissionsManager.has(event.getPlayer(), "modifyworld.bucket.empty." + bucketName)) {
|
||||
informPlayerAboutDenial(event.getPlayer());
|
||||
event.setCancelled(true);
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(Type.PLAYER_BUCKET_FILL)
|
||||
public void onPlayerBucketFill(PlayerBucketFillEvent event) {
|
||||
String materialName = event.getBlockClicked().getType().toString().toLowerCase().replace("stationary_", ""); // STATIONARY_WATER -> water
|
||||
if (!permissionsManager.has(event.getPlayer(), "modifyworld.bucket.fill." + materialName)) {
|
||||
informPlayerAboutDenial(event.getPlayer());
|
||||
event.setCancelled(true);
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(Type.PLAYER_COMMAND_PREPROCESS)
|
||||
public void onPlayerCommandPreprocess(PlayerCommandPreprocessEvent event) {
|
||||
if (event.getMessage().startsWith("/tell") && !permissionsManager.has(event.getPlayer(), "modifyworld.chat.private")) {
|
||||
informPlayerAboutDenial(event.getPlayer());
|
||||
event.setCancelled(true);
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(Type.PLAYER_CHAT)
|
||||
public void onPlayerChat(PlayerChatEvent event) {
|
||||
if (!permissionsManager.has(event.getPlayer(), "modifyworld.chat")) {
|
||||
informPlayerAboutDenial(event.getPlayer());
|
||||
event.setCancelled(true);
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(Type.PLAYER_PICKUP_ITEM)
|
||||
public void onPlayerPickupItem(PlayerPickupItemEvent event) {
|
||||
if (!canInteractWithItem(event.getPlayer(), "modifyworld.items.pickup.", event.getItem().getItemStack())) {
|
||||
event.setCancelled(true);
|
||||
}
|
||||
|
||||
this.checkPlayerInventory(event.getPlayer());
|
||||
}
|
||||
|
||||
@EventHandler(Type.PLAYER_DROP_ITEM)
|
||||
public void onPlayerDropItem(PlayerDropItemEvent event) {
|
||||
if (!canInteractWithItem(event.getPlayer(), "modifyworld.items.drop.", event.getItemDrop().getItemStack())) {
|
||||
informPlayerAboutDenial(event.getPlayer());
|
||||
event.setCancelled(true);
|
||||
}
|
||||
|
||||
this.checkPlayerInventory(event.getPlayer());
|
||||
}
|
||||
|
||||
@EventHandler(Type.PLAYER_INVENTORY)
|
||||
public void onInventoryOpen(PlayerInventoryEvent event) {
|
||||
this.checkPlayerInventory(event.getPlayer());
|
||||
}
|
||||
|
||||
@EventHandler(Type.PLAYER_ITEM_HELD)
|
||||
public void onItemHeldChange(PlayerItemHeldEvent event) {
|
||||
this.checkPlayerInventory(event.getPlayer());
|
||||
}
|
||||
|
||||
@EventHandler(Type.PLAYER_INTERACT_ENTITY)
|
||||
public void onPlayerInteractEntity(PlayerInteractEntityEvent event) {
|
||||
if (this.checkItemUse) {
|
||||
if (!permissionsManager.has(event.getPlayer(), "modifyworld.item.use." + getItemPermission(event.getPlayer().getItemInHand()) + ".on.entity." + getEntityName(event.getRightClicked()))) {
|
||||
event.setCancelled(true);
|
||||
informPlayerAboutDenial(event.getPlayer());
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
if (!event.isCancelled() && !permissionsManager.has(event.getPlayer(), "modifyworld.interact." + getEntityName(event.getRightClicked()))) {
|
||||
event.setCancelled(true);
|
||||
informPlayerAboutDenial(event.getPlayer());
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(Type.PLAYER_INTERACT)
|
||||
public void onPlayerInteract(PlayerInteractEvent event) {
|
||||
Action action = event.getAction();
|
||||
|
||||
if (action == Action.RIGHT_CLICK_AIR || action == Action.RIGHT_CLICK_BLOCK) { // item restriction check
|
||||
this.checkPlayerInventory(event.getPlayer());
|
||||
}
|
||||
|
||||
if (action != Action.LEFT_CLICK_BLOCK && action != Action.RIGHT_CLICK_BLOCK && action != Action.PHYSICAL) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (this.checkItemUse && action != Action.PHYSICAL) {
|
||||
if (!permissionsManager.has(event.getPlayer(), "modifyworld.item.use." + getItemPermission(event.getPlayer().getItemInHand()) + ".on.block." + getBlockPermission(event.getClickedBlock()))) {
|
||||
event.setCancelled(true);
|
||||
informPlayerAboutDenial(event.getPlayer());
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
if (!event.isCancelled() && !canInteractWithBlock(event.getPlayer(), "modifyworld.blocks.interact.", event.getClickedBlock())) {
|
||||
informPlayerAboutDenial(event.getPlayer());
|
||||
event.setCancelled(true);
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(Type.FOOD_LEVEL_CHANGE)
|
||||
public void onFoodLevelChange(FoodLevelChangeEvent event) {
|
||||
Player player = event.getEntity() instanceof Player ? (Player) event.getEntity() : null;
|
||||
|
||||
if (player == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!permissionsManager.has(player, "modifyworld.digestion")) {
|
||||
event.setCancelled(true);
|
||||
}
|
||||
}
|
||||
|
||||
protected void checkPlayerInventory(Player player) {
|
||||
if (!checkInventory) {
|
||||
return;
|
||||
}
|
||||
|
||||
Inventory inventory = player.getInventory();
|
||||
for (ItemStack stack : inventory.getContents()) {
|
||||
if (stack != null && !canInteractWithItem(player, "modifyworld.items.have.", stack)) {
|
||||
inventory.remove(stack);
|
||||
|
||||
if (this.dropRestrictedItem) {
|
||||
player.getWorld().dropItemNaturally(player.getLocation(), stack);
|
||||
}
|
||||
|
||||
informPlayer(player, String.format(this.prohibitedItemMessage, stack.getType().name()));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user