mirror of
https://github.com/EngineHub/WorldGuard.git
synced 2026-11-04 09:02:07 -05:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
abbced0530 | ||
|
|
200e07023f | ||
|
|
5fdd26b53f | ||
|
|
61896ea760 | ||
|
|
b43881c299 | ||
|
|
6046f4defc | ||
|
|
69ccb9f12b | ||
|
|
430f2f57e9 | ||
|
|
c3f0bbb41c | ||
|
|
7e481e6a9a | ||
|
|
627de1aebd | ||
|
|
194108336b | ||
|
|
eade612981 | ||
|
|
733163cc4c | ||
|
|
86a917ddd1 | ||
|
|
e8503aa0b9 | ||
|
|
01bf9e8406 | ||
|
|
0bdadf63b3 | ||
|
|
5b1c35bf06 |
No files matched your search
@@ -1,3 +1,22 @@
|
||||
2.3:
|
||||
- /god now works very well.
|
||||
- Item (TNT, flint and steel, etc.) blocking should now work.
|
||||
- The TNT blocking configuration variable should now work.
|
||||
- Re-added /heal (not sure where that went), added /slay.
|
||||
- Implemented contact damage disable toggle.
|
||||
- Made all player damage disabling configuration parameters work.
|
||||
- Fixed teleport-on-suffocation setting.
|
||||
- Added /locate <name>, /locate <x> <y> <z>, and /locate that lets you
|
||||
program/change your compass bearing to point to a player's position
|
||||
(not yet live), a position, or back to spawn.
|
||||
- Fixed CSVDatabase spitting an error if the owners list was empty.
|
||||
|
||||
2.2:
|
||||
- Now supports GroupUsers.
|
||||
- Added support for blocking creeper explosions.
|
||||
- Fixed a bug where a player's groups were not being loaded correctly,
|
||||
causing the blacklist group ignore option to not work.
|
||||
|
||||
2.1.1:
|
||||
- Fixed fire spread disable preventing flint and steel too.
|
||||
- Fixed NullPointerException related to the player item event.
|
||||
|
||||
+4
-14
@@ -2,23 +2,13 @@ WorldGuard
|
||||
Copyright (c) 2010, 2011 sk89q <http://www.sk89q.com>
|
||||
Licensed under the GNU Lesser General Public License v3
|
||||
|
||||
Installation
|
||||
Introduction
|
||||
------------
|
||||
|
||||
Bukkit:
|
||||
WorldGuard protects your server!
|
||||
|
||||
** Make sure you first install the WorldEdit plugin. **
|
||||
|
||||
1. Create a "plugins" folder inside your server folder.
|
||||
|
||||
2. Copy WorldGuard.jar into "plugins".
|
||||
|
||||
3. Restart your server.
|
||||
|
||||
Default configuration files will be created in plugins/WorldGuard/
|
||||
when WorldGuard is first started. Be sure to edit them and use
|
||||
/reload WorldGuard until you are satisfied (remember to remove the
|
||||
/reload permission from everyone when you are done).
|
||||
Documentation can be found at:
|
||||
http://wiki.sk89q.com/wiki/WorldGuard
|
||||
|
||||
Thanks
|
||||
------
|
||||
|
||||
@@ -32,8 +32,9 @@
|
||||
<attribute name="WorldGuard-Version" value="${version}"/>
|
||||
<attribute name="Class-Path" value="WorldEdit.jar WorldGuard/WorldEdit.jar"/>
|
||||
</manifest>
|
||||
<replace file="${build.dir}/plugin.yml" token="WGVERSIONMACRO" value="${version}"/>
|
||||
<delete file="${build.dir}/plugin.yml"/>
|
||||
<copy tofile="${build.dir}/plugin.yml" file="plugin.yml"/>
|
||||
<replace file="${build.dir}/plugin.yml" token="WGVERSIONMACRO" value="${version}"/>
|
||||
<mkdir dir="${build.dir}/defaults"/>
|
||||
<copy tofile="${build.dir}/defaults/config.yml" file="config.yml"/>
|
||||
<copy tofile="${build.dir}/defaults/blacklist.txt" file="blacklist.txt"/>
|
||||
|
||||
+10
-17
@@ -49,6 +49,7 @@ fire:
|
||||
|
||||
mobs:
|
||||
block-creeper-explosions: off
|
||||
block-creeper-block-damage: off
|
||||
|
||||
spawn:
|
||||
login-protection: 3
|
||||
@@ -58,12 +59,13 @@ spawn:
|
||||
teleport-to-home-on-death: off
|
||||
|
||||
player-damage:
|
||||
disable-fall-damage: on
|
||||
disable-lava-damage: on
|
||||
disable-fire-damage: on
|
||||
disable-drowning-damage: on
|
||||
disable-suffocation-damage: on
|
||||
teleport-on-suffocation: on
|
||||
disable-fall-damage: off
|
||||
disable-lava-damage: off
|
||||
disable-fire-damage: off
|
||||
disable-drowning-damage: off
|
||||
disable-suffocation-damage: off
|
||||
disable-contact-damage: off
|
||||
teleport-on-suffocation: off
|
||||
|
||||
regions:
|
||||
enable: on
|
||||
@@ -84,19 +86,10 @@ blacklist:
|
||||
path: worldguard/logs/%Y-%m-%d.log
|
||||
open-files: 10
|
||||
|
||||
# Change sk89q to your name (or sk89q will be able to change regions
|
||||
# on your server!). Check the documentation to see how to configure this
|
||||
#
|
||||
# NOTE: The /reload permission is given to everyone below (only applies to
|
||||
# WorldGuard) so that you can reload WorldGuard with /reload WorldGuard
|
||||
# until your configuration work is done
|
||||
# See http://wiki.sk89q.com/wiki/WorldGuard/Permissions/Bukkit
|
||||
permissions:
|
||||
groups:
|
||||
default:
|
||||
permissions:
|
||||
- /reload
|
||||
users:
|
||||
sk89q:
|
||||
permissions:
|
||||
- /region
|
||||
- /reload
|
||||
- /reloadwg
|
||||
+31
-1
@@ -1,3 +1,33 @@
|
||||
name: WorldGuard
|
||||
main: com.sk89q.worldguard.bukkit.WorldGuardPlugin
|
||||
version: WGVERSIONMACRO
|
||||
version: WGVERSIONMACRO
|
||||
commands:
|
||||
stopfire:
|
||||
description: Halts all fire spread until it is disabled or the server is restarted
|
||||
usage: /<command>
|
||||
allowfire:
|
||||
description: Re-enables fire spread if he has been disabled with /stopfire
|
||||
usage: /<command>
|
||||
god:
|
||||
description: Toggles god mode
|
||||
usage: /<command> [other player]
|
||||
heal:
|
||||
description: Heal yourself or another
|
||||
usage: /<command> [other player]
|
||||
slay:
|
||||
description: Slay yourself or another
|
||||
usage: /<command> [other player]
|
||||
stack:
|
||||
description: Stacks items in the player's inventory
|
||||
usage: /<command>
|
||||
aliases: ;
|
||||
region:
|
||||
description: Adjust protected regions
|
||||
usage: /<command> <define|claim|flag|delete|info|addowner|removeowner|list|save|load> ...
|
||||
aliases: rg, regions
|
||||
locate:
|
||||
description: Set your compass towards a person
|
||||
usage: /<command> <target>
|
||||
reloadwg:
|
||||
description: Reload WorldGuard's configuration
|
||||
usage: /<command>
|
||||
@@ -71,7 +71,7 @@ public abstract class LocalPlayer {
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public abstract List<String> getGroups();
|
||||
public abstract String[] getGroups();
|
||||
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
|
||||
@@ -19,7 +19,6 @@
|
||||
|
||||
package com.sk89q.worldguard.bukkit;
|
||||
|
||||
import java.util.List;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.entity.Player;
|
||||
import com.sk89q.worldedit.Vector;
|
||||
@@ -61,7 +60,7 @@ public class BukkitPlayer extends LocalPlayer {
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> getGroups() {
|
||||
public String[] getGroups() {
|
||||
return plugin.getGroups(player);
|
||||
}
|
||||
|
||||
|
||||
@@ -20,11 +20,15 @@
|
||||
package com.sk89q.worldguard.bukkit;
|
||||
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.LivingEntity;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.entity.*;
|
||||
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
|
||||
import com.sk89q.worldedit.Vector;
|
||||
import com.sk89q.worldedit.blocks.BlockType;
|
||||
import static com.sk89q.worldguard.bukkit.BukkitUtil.*;
|
||||
|
||||
public class WorldGuardEntityListener extends EntityListener {
|
||||
@@ -47,40 +51,18 @@ public class WorldGuardEntityListener extends EntityListener {
|
||||
Entity defender = event.getEntity();
|
||||
DamageCause type = event.getCause();
|
||||
|
||||
if (defender instanceof Player) {
|
||||
if (defender instanceof Player) {
|
||||
Player player = (Player)defender;
|
||||
|
||||
if (plugin.invinciblePlayers.contains(player.getName())) {
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
|
||||
if (plugin.disableFallDamage && type == DamageCause.FALL) {
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
|
||||
if (plugin.disableLavaDamage && type == DamageCause.LAVA) {
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
|
||||
if (plugin.disableFireDamage && (type == DamageCause.FIRE
|
||||
|| type == DamageCause.FIRE_TICK)) {
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
|
||||
if (plugin.disableDrowningDamage && type == DamageCause.DROWNING) {
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
|
||||
if (type == DamageCause.DROWNING
|
||||
&& plugin.amphibiousPlayers.contains(player.getName())) {
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -110,4 +92,148 @@ public class WorldGuardEntityListener extends EntityListener {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void onEntityDamageByProjectile(EntityDamageByProjectileEvent event) {
|
||||
Entity defender = event.getEntity();
|
||||
|
||||
if (defender instanceof Player) {
|
||||
Player player = (Player)defender;
|
||||
|
||||
if (plugin.invinciblePlayers.contains(player.getName())) {
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public void onEntityDamage(EntityDamageEvent event) {
|
||||
Entity defender = event.getEntity();
|
||||
DamageCause type = event.getCause();
|
||||
|
||||
if (defender instanceof Player) {
|
||||
Player player = (Player)defender;
|
||||
|
||||
if (plugin.invinciblePlayers.contains(player.getName())) {
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
|
||||
if (plugin.disableFallDamage && type == DamageCause.FALL) {
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
|
||||
if (plugin.disableFireDamage && (type == DamageCause.FIRE
|
||||
|| type == DamageCause.FIRE_TICK)) {
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
|
||||
if (plugin.disableDrowningDamage && type == DamageCause.DROWNING) {
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
|
||||
if (plugin.teleportOnSuffocation && type == DamageCause.SUFFOCATION) {
|
||||
findFreePosition(player);
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
|
||||
if (plugin.disableSuffocationDamage && type == DamageCause.SUFFOCATION) {
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
|
||||
if (plugin.disableContactDamage && type == DamageCause.CONTACT) {
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
|
||||
if (type == DamageCause.DROWNING
|
||||
&& plugin.amphibiousPlayers.contains(player.getName())) {
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onEntityExplode(EntityExplodeEvent event) {
|
||||
if (event.getEntity() instanceof LivingEntity) {
|
||||
if (plugin.blockCreeperBlockDamage) {
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
|
||||
if (plugin.blockCreeperExplosions) {
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
|
||||
if (plugin.useRegions) {
|
||||
Vector pt = toVector(event.getEntity().getLocation());
|
||||
|
||||
if (!plugin.regionManager.getApplicableRegions(pt).allowsCreeperExplosions()) {
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
}
|
||||
} else { // Shall assume that this is TNT
|
||||
if (plugin.blockTNT) {
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
|
||||
if (plugin.useRegions) {
|
||||
Vector pt = toVector(event.getEntity().getLocation());
|
||||
|
||||
if (!plugin.regionManager.getApplicableRegions(pt).allowsTNT()) {
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Find a position for the player to stand that is not inside a block.
|
||||
* Blocks above the player will be iteratively tested until there is
|
||||
* a series of two free blocks. The player will be teleported to
|
||||
* that free position.
|
||||
*
|
||||
* @param player
|
||||
*/
|
||||
public void findFreePosition(Player player) {
|
||||
Location loc = player.getLocation();
|
||||
int x = loc.getBlockX();
|
||||
int y = Math.max(0, loc.getBlockY());
|
||||
int origY = y;
|
||||
int z = loc.getBlockZ();
|
||||
World world = player.getWorld();
|
||||
|
||||
byte free = 0;
|
||||
|
||||
while (y <= 129) {
|
||||
if (BlockType.canPassThrough(world.getBlockTypeIdAt(x, y, z))) {
|
||||
free++;
|
||||
} else {
|
||||
free = 0;
|
||||
}
|
||||
|
||||
if (free == 2) {
|
||||
if (y - 1 != origY) {
|
||||
loc.setX(x + 0.5);
|
||||
loc.setY(y);
|
||||
loc.setZ(z + 0.5);
|
||||
player.teleportTo(loc);
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
y++;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -19,31 +19,16 @@
|
||||
|
||||
package com.sk89q.worldguard.bukkit;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.Arrays;
|
||||
import java.util.Map;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
import org.bukkit.*;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.player.*;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
import com.sk89q.worldedit.BlockVector;
|
||||
import com.sk89q.worldedit.blocks.ItemType;
|
||||
import com.sk89q.worldedit.bukkit.WorldEditAPI;
|
||||
import com.sk89q.worldedit.bukkit.WorldEditPlugin;
|
||||
import com.sk89q.worldedit.regions.Region;
|
||||
import com.sk89q.worldedit.IncompleteRegionException;
|
||||
import com.sk89q.worldedit.LocalSession;
|
||||
import com.sk89q.worldedit.Vector;
|
||||
import com.sk89q.worldguard.*;
|
||||
import com.sk89q.worldguard.blacklist.events.ItemUseBlacklistEvent;
|
||||
import com.sk89q.worldguard.domains.*;
|
||||
import com.sk89q.worldguard.protection.*;
|
||||
import static com.sk89q.worldguard.bukkit.BukkitUtil.*;
|
||||
|
||||
/**
|
||||
@@ -54,12 +39,6 @@ public class WorldGuardPlayerListener extends PlayerListener {
|
||||
* Plugin.
|
||||
*/
|
||||
private WorldGuardPlugin plugin;
|
||||
/**
|
||||
* Group pattern used to specify groups for the region command.
|
||||
*/
|
||||
private static Pattern groupPattern = Pattern.compile("^[gG]:(.+)$");
|
||||
|
||||
private static int CMD_LIST_SIZE = 9;
|
||||
|
||||
/**
|
||||
* Construct the object;
|
||||
@@ -117,8 +96,9 @@ public class WorldGuardPlayerListener extends PlayerListener {
|
||||
public void onPlayerItem(PlayerItemEvent event) {
|
||||
Player player = event.getPlayer();
|
||||
Block block = event.getBlockClicked();
|
||||
ItemStack item = event.getItem();
|
||||
|
||||
if (plugin.useRegions && !event.isBlock() && event.getBlockClicked() != null) {
|
||||
if (plugin.useRegions && !event.isBlock() && block != null) {
|
||||
Vector pt = toVector(block.getRelative(event.getBlockFace()));
|
||||
LocalPlayer localPlayer = plugin.wrapPlayer(player);
|
||||
|
||||
@@ -131,10 +111,11 @@ public class WorldGuardPlayerListener extends PlayerListener {
|
||||
}
|
||||
}
|
||||
|
||||
if (block != null && plugin.blacklist != null) {
|
||||
if (item != null && plugin.blacklist != null && block != null) {
|
||||
if (!plugin.blacklist.check(
|
||||
new ItemUseBlacklistEvent(plugin.wrapPlayer(player), toVector(block),
|
||||
block.getTypeId()), false, false)) {
|
||||
new ItemUseBlacklistEvent(plugin.wrapPlayer(player),
|
||||
toVector(block.getRelative(event.getBlockFace())),
|
||||
item.getTypeId()), false, false)) {
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
@@ -160,665 +141,4 @@ public class WorldGuardPlayerListener extends PlayerListener {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Called when a player attempts to use a command
|
||||
*
|
||||
* @param event Relevant event details
|
||||
*/
|
||||
@Override
|
||||
public void onPlayerCommand(PlayerChatEvent event) {
|
||||
if (handleCommand(event)) {
|
||||
event.setCancelled(true);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Called when a player attempts to use a command
|
||||
*
|
||||
* @param event Relevant event details
|
||||
*/
|
||||
public boolean handleCommand(PlayerChatEvent event) {
|
||||
Player player = event.getPlayer();
|
||||
String[] split = event.getMessage().split(" ");
|
||||
|
||||
if (split[0].equalsIgnoreCase("/stopfire") &&
|
||||
plugin.hasPermission(player, "/stopfire")) {
|
||||
if (!plugin.fireSpreadDisableToggle) {
|
||||
plugin.getServer().broadcastMessage(ChatColor.YELLOW
|
||||
+ "Fire spread has been globally disabled by " + player.getName() + ".");
|
||||
} else {
|
||||
player.sendMessage(ChatColor.YELLOW + "Fire spread was already globally disabled.");
|
||||
}
|
||||
|
||||
plugin.fireSpreadDisableToggle = true;
|
||||
} else if (split[0].equalsIgnoreCase("/allowfire")
|
||||
&& plugin.hasPermission(player, "/stopfire")) {
|
||||
if (plugin.fireSpreadDisableToggle) {
|
||||
plugin.getServer().broadcastMessage(ChatColor.YELLOW
|
||||
+ "Fire spread has been globally re-enabled by " + player.getName() + ".");
|
||||
} else {
|
||||
player.sendMessage(ChatColor.YELLOW + "Fire spread was already globally enabled.");
|
||||
}
|
||||
|
||||
plugin.fireSpreadDisableToggle = false;
|
||||
} else if (split[0].equalsIgnoreCase("/god")
|
||||
&& plugin.hasPermission(player, "/god")) {
|
||||
// Allow setting other people invincible
|
||||
if (split.length > 1) {
|
||||
if (!plugin.hasPermission(player, "/godother")) {
|
||||
player.sendMessage(ChatColor.RED + "You don't have permission to make others invincible.");
|
||||
return true;
|
||||
}
|
||||
|
||||
Player other = matchSinglePlayer(plugin.getServer(), split[1]);
|
||||
if (other == null) {
|
||||
player.sendMessage(ChatColor.RED + "Player not found.");
|
||||
} else {
|
||||
if (!plugin.invinciblePlayers.contains(other.getName())) {
|
||||
plugin.invinciblePlayers.add(other.getName());
|
||||
player.sendMessage(ChatColor.YELLOW + other.getName() + " is now invincible!");
|
||||
other.sendMessage(ChatColor.YELLOW + player.getName() + " has made you invincible!");
|
||||
} else {
|
||||
plugin.invinciblePlayers.remove(other.getName());
|
||||
player.sendMessage(ChatColor.YELLOW + other.getName() + " is no longer invincible.");
|
||||
other.sendMessage(ChatColor.YELLOW + player.getName() + " has taken away your invincibility.");
|
||||
}
|
||||
}
|
||||
// Invincibility for one's self
|
||||
} else {
|
||||
if (!plugin.invinciblePlayers.contains(player.getName())) {
|
||||
plugin.invinciblePlayers.add(player.getName());
|
||||
player.sendMessage(ChatColor.YELLOW + "You are now invincible!");
|
||||
} else {
|
||||
plugin.invinciblePlayers.remove(player.getName());
|
||||
player.sendMessage(ChatColor.YELLOW + "You are no longer invincible.");
|
||||
}
|
||||
}
|
||||
} else if ((split[0].equalsIgnoreCase("/stack")
|
||||
|| split[0].equalsIgnoreCase("/;"))
|
||||
&& plugin.hasPermission(player, "/stack")) {
|
||||
ItemStack[] items = player.getInventory().getContents();
|
||||
int len = items.length;
|
||||
|
||||
int affected = 0;
|
||||
|
||||
for (int i = 0; i < len; i++) {
|
||||
ItemStack item = items[i];
|
||||
|
||||
// Avoid infinite stacks and stacks with durability
|
||||
if (item == null || item.getAmount() <= 0
|
||||
|| ItemType.shouldNotStack(item.getTypeId())) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// Ignore buckets
|
||||
if (item.getTypeId() >= 325 && item.getTypeId() <= 327) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (item.getAmount() < 64) {
|
||||
int needed = 64 - item.getAmount(); // Number of needed items until 64
|
||||
|
||||
// Find another stack of the same type
|
||||
for (int j = i + 1; j < len; j++) {
|
||||
ItemStack item2 = items[j];
|
||||
|
||||
// Avoid infinite stacks and stacks with durability
|
||||
if (item2 == null || item2.getAmount() <= 0
|
||||
|| ItemType.shouldNotStack(item.getTypeId())) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// Same type?
|
||||
// Blocks store their color in the damage value
|
||||
if (item2.getTypeId() == item.getTypeId() &&
|
||||
(!ItemType.usesDamageValue(item.getTypeId())
|
||||
|| item.getDamage() == item2.getDamage())) {
|
||||
// This stack won't fit in the parent stack
|
||||
if (item2.getAmount() > needed) {
|
||||
item.setAmount(64);
|
||||
item2.setAmount(item2.getAmount() - needed);
|
||||
break;
|
||||
// This stack will
|
||||
} else {
|
||||
items[j] = null;
|
||||
item.setAmount(item.getAmount() + item2.getAmount());
|
||||
needed = 64 - item.getAmount();
|
||||
}
|
||||
|
||||
affected++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (affected > 0) {
|
||||
player.getInventory().setContents(items);
|
||||
}
|
||||
|
||||
player.sendMessage(ChatColor.YELLOW + "Items compacted into stacks!");
|
||||
} else if (split[0].equalsIgnoreCase("/rg")
|
||||
|| split[0].equalsIgnoreCase("/region")) {
|
||||
if (split.length < 2) {
|
||||
player.sendMessage(ChatColor.RED + "/region <define|claim|flag|delete|info|add|remove|list|save|load> ...");
|
||||
return true;
|
||||
}
|
||||
|
||||
String action = split[1];
|
||||
String[] args = new String[split.length - 1];
|
||||
System.arraycopy(split, 1, args, 0, split.length - 1);
|
||||
|
||||
handleRegionCommand(player, action, args);
|
||||
} else if (split[0].equalsIgnoreCase("/reload")
|
||||
&& plugin.hasPermission(player, "/reload")
|
||||
&& split.length > 1) {
|
||||
if (split[1].equalsIgnoreCase("WorldGuard")) {
|
||||
LoggerToChatHandler handler = new LoggerToChatHandler(player);
|
||||
handler.setLevel(Level.ALL);
|
||||
Logger minecraftLogger = Logger.getLogger("Minecraft");
|
||||
minecraftLogger.addHandler(handler);
|
||||
|
||||
try {
|
||||
plugin.loadConfiguration();
|
||||
plugin.postReload();
|
||||
player.sendMessage("WorldGuard configuration reloaded.");
|
||||
} catch (Throwable t) {
|
||||
player.sendMessage("Error while reloading: "
|
||||
+ t.getMessage());
|
||||
} finally {
|
||||
minecraftLogger.removeHandler(handler);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Handles a region command.
|
||||
*
|
||||
* @param player
|
||||
* @param action
|
||||
* @param args
|
||||
*/
|
||||
private void handleRegionCommand(Player player, String action, String[] args) {
|
||||
if (!plugin.useRegions) {
|
||||
player.sendMessage(ChatColor.RED + "Regions are disabled.");
|
||||
return;
|
||||
}
|
||||
|
||||
if (action.equalsIgnoreCase("define")) {
|
||||
if (!canUseRegionCommand(player, "/regiondefine")) {
|
||||
player.sendMessage(ChatColor.RED + "You don't have the /regiondefine permission.");
|
||||
return;
|
||||
}
|
||||
|
||||
if (args.length < 2) {
|
||||
player.sendMessage(ChatColor.RED + "/region define <id> [owner1 [owner2 [owners...]]]");
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
String id = args[1].toLowerCase();
|
||||
Plugin wePlugin = plugin.getServer().getPluginManager().getPlugin("WorldEdit");
|
||||
if (plugin == null) {
|
||||
player.sendMessage(ChatColor.RED + "WorldEdit must be installed and enabled as a plugin.");
|
||||
return;
|
||||
}
|
||||
|
||||
WorldEditPlugin worldEdit = (WorldEditPlugin)wePlugin;
|
||||
WorldEditAPI api = worldEdit.getAPI();
|
||||
|
||||
LocalSession session = api.getSession(player);
|
||||
Region weRegion = session.getRegion();
|
||||
|
||||
BlockVector min = weRegion.getMinimumPoint().toBlockVector();
|
||||
BlockVector max = weRegion.getMaximumPoint().toBlockVector();
|
||||
|
||||
ProtectedRegion region = new ProtectedCuboidRegion(min, max);
|
||||
if (args.length >= 3) {
|
||||
region.setOwners(parseDomainString(args, 2));
|
||||
}
|
||||
plugin.regionManager.addRegion(id, region);
|
||||
plugin.regionLoader.save(plugin.regionManager);
|
||||
player.sendMessage(ChatColor.YELLOW + "Region saved as " + id + ".");
|
||||
} catch (IncompleteRegionException e) {
|
||||
player.sendMessage(ChatColor.RED + "You must first define an area in WorldEdit.");
|
||||
} catch (IOException e) {
|
||||
player.sendMessage(ChatColor.RED + "Region database failed to save: "
|
||||
+ e.getMessage());
|
||||
}
|
||||
} else if (action.equalsIgnoreCase("claim")) {
|
||||
if (!canUseRegionCommand(player, "/regionclaim")) {
|
||||
player.sendMessage(ChatColor.RED + "You don't have the /regionclaim permission.");
|
||||
return;
|
||||
}
|
||||
|
||||
if (args.length < 1) {
|
||||
player.sendMessage(ChatColor.RED + "/region claim <id>");
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
String id = args[1].toLowerCase();
|
||||
Plugin wePlugin = plugin.getServer().getPluginManager().getPlugin("WorldEdit");
|
||||
if (plugin == null) {
|
||||
player.sendMessage(ChatColor.RED + "WorldEdit must be installed and enabled as a plugin.");
|
||||
return;
|
||||
}
|
||||
|
||||
ProtectedRegion existing = plugin.regionManager.getRegion(id);
|
||||
|
||||
if (existing != null) {
|
||||
if (!existing.getOwners().contains(plugin.wrapPlayer(player))) {
|
||||
player.sendMessage(ChatColor.RED + "You don't own this region.");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
WorldEditPlugin worldEdit = (WorldEditPlugin)wePlugin;
|
||||
WorldEditAPI api = worldEdit.getAPI();
|
||||
|
||||
LocalSession session = api.getSession(player);
|
||||
Region weRegion = session.getRegion();
|
||||
|
||||
BlockVector min = weRegion.getMinimumPoint().toBlockVector();
|
||||
BlockVector max = weRegion.getMaximumPoint().toBlockVector();
|
||||
|
||||
ProtectedRegion region = new ProtectedCuboidRegion(min, max);
|
||||
|
||||
if (plugin.regionManager.overlapsUnownedRegion(region, plugin.wrapPlayer(player))) {
|
||||
player.sendMessage(ChatColor.RED + "This region overlaps with someone else's region.");
|
||||
return;
|
||||
}
|
||||
|
||||
region.getOwners().addPlayer(player.getName());
|
||||
|
||||
plugin.regionManager.addRegion(id, region);
|
||||
plugin.regionLoader.save(plugin.regionManager);
|
||||
player.sendMessage(ChatColor.YELLOW + "Region saved as " + id + ".");
|
||||
} catch (IncompleteRegionException e) {
|
||||
player.sendMessage(ChatColor.RED + "You must first define an area in WorldEdit.");
|
||||
} catch (IOException e) {
|
||||
player.sendMessage(ChatColor.RED + "Region database failed to save: "
|
||||
+ e.getMessage());
|
||||
}
|
||||
} else if (action.equalsIgnoreCase("flag")) {
|
||||
if (!canUseRegionCommand(player, "/regiondefine")) {
|
||||
player.sendMessage(ChatColor.RED + "You don't have the /regiondefine permission.");
|
||||
return;
|
||||
}
|
||||
|
||||
if (args.length < 4) {
|
||||
player.sendMessage(ChatColor.RED + "/region flag <id> <flag> <none|allow|deny>");
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
String id = args[1].toLowerCase();
|
||||
String flagStr = args[2];
|
||||
String stateStr = args[3];
|
||||
ProtectedRegion region = plugin.regionManager.getRegion(id);
|
||||
|
||||
if (region == null) {
|
||||
player.sendMessage(ChatColor.RED + "Could not find a region by that ID.");
|
||||
return;
|
||||
}
|
||||
|
||||
AreaFlags.State state = null;
|
||||
|
||||
if (stateStr.equalsIgnoreCase("allow")) {
|
||||
state = AreaFlags.State.ALLOW;
|
||||
} else if (stateStr.equalsIgnoreCase("deny")) {
|
||||
state = AreaFlags.State.DENY;
|
||||
} else if (stateStr.equalsIgnoreCase("none")) {
|
||||
state = AreaFlags.State.NONE;
|
||||
} else {
|
||||
player.sendMessage(ChatColor.RED + "Acceptable states: allow, deny, none");
|
||||
return;
|
||||
}
|
||||
|
||||
AreaFlags flags = region.getFlags();
|
||||
|
||||
if (flagStr.equalsIgnoreCase("build")) {
|
||||
flags.allowBuild = state;
|
||||
} else if (flagStr.equalsIgnoreCase("pvp")) {
|
||||
flags.allowPvP = state;
|
||||
} else if (flagStr.equalsIgnoreCase("tnt")) {
|
||||
flags.allowTNT = state;
|
||||
} else if (flagStr.equalsIgnoreCase("lighter")) {
|
||||
flags.allowLighter = state;
|
||||
} else {
|
||||
player.sendMessage(ChatColor.RED + "Acceptable flags: build, pvp, tnt, lighter");
|
||||
return;
|
||||
}
|
||||
|
||||
plugin.regionLoader.save(plugin.regionManager);
|
||||
player.sendMessage(ChatColor.YELLOW + "Region '" + id + "' updated.");
|
||||
} catch (IOException e) {
|
||||
player.sendMessage(ChatColor.RED + "Region database failed to save: "
|
||||
+ e.getMessage());
|
||||
}
|
||||
/*} else if (action.equalsIgnoreCase("priority")) {
|
||||
if (!canUseRegionCommand(player, "/regiondefine")) {
|
||||
player.sendMessage(ChatColor.RED + "You don't have the /regiondefine permission.");
|
||||
return;
|
||||
}
|
||||
|
||||
if (args.length < 3) {
|
||||
player.sendMessage(ChatColor.RED + "/region priority <id> <priority>");
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
String id = args[1].toLowerCase();
|
||||
int priority = 0;
|
||||
try {
|
||||
priority = Integer.parseInt(args[2]);
|
||||
} catch (NumberFormatException e) {
|
||||
player.sendMessage(ChatColor.RED + "The priority must be a number.");
|
||||
return;
|
||||
}
|
||||
|
||||
ProtectedRegion region = plugin.regionManager.getRegion(id);
|
||||
|
||||
if (region == null) {
|
||||
player.sendMessage(ChatColor.RED + "Could not find a region by that ID.");
|
||||
return;
|
||||
}
|
||||
|
||||
region.setPriority(priority);
|
||||
|
||||
plugin.regionLoader.save(plugin.regionManager);
|
||||
player.sendMessage(ChatColor.YELLOW + "Region '" + id + "' updated.");
|
||||
} catch (IOException e) {
|
||||
player.sendMessage(ChatColor.RED + "Region database failed to save: "
|
||||
+ e.getMessage());
|
||||
}*/
|
||||
} else if (action.equalsIgnoreCase("info")) {
|
||||
if (!canUseRegionCommand(player, "/regioninfo")) {
|
||||
player.sendMessage(ChatColor.RED + "You don't have the /regioninfo permission.");
|
||||
return;
|
||||
}
|
||||
|
||||
if (args.length < 2) {
|
||||
player.sendMessage(ChatColor.RED + "/region info <id>");
|
||||
return;
|
||||
}
|
||||
|
||||
String id = args[1].toLowerCase();
|
||||
if (!plugin.regionManager.hasRegion(id)) {
|
||||
player.sendMessage(ChatColor.RED + "A region with ID '"
|
||||
+ id + "' doesn't exist.");
|
||||
return;
|
||||
}
|
||||
|
||||
ProtectedRegion region = plugin.regionManager.getRegion(id);
|
||||
AreaFlags flags = region.getFlags();
|
||||
DefaultDomain domain = region.getOwners();
|
||||
|
||||
player.sendMessage(ChatColor.YELLOW + "Region ID: " + id);
|
||||
player.sendMessage(ChatColor.GRAY + "Type: " + region.getClass().getCanonicalName());
|
||||
player.sendMessage(ChatColor.GRAY + "Priority: " + region.getPriority());
|
||||
player.sendMessage(ChatColor.BLUE + "Build: " + flags.allowBuild.name());
|
||||
player.sendMessage(ChatColor.BLUE + "PvP: " + flags.allowPvP.name());
|
||||
player.sendMessage(ChatColor.BLUE + "TNT: " + flags.allowTNT.name());
|
||||
player.sendMessage(ChatColor.BLUE + "Lighter: " + flags.allowLighter.name());
|
||||
player.sendMessage(ChatColor.LIGHT_PURPLE + "Players: " + domain.toPlayersString());
|
||||
player.sendMessage(ChatColor.LIGHT_PURPLE + "Groups: " + domain.toGroupsString());
|
||||
} else if (action.equalsIgnoreCase("addowner")) {
|
||||
if (!canUseRegionCommand(player, "/regiondefine")
|
||||
&& !canUseRegionCommand(player, "/regionclaim")) {
|
||||
player.sendMessage(ChatColor.RED + "You don't have the /regiondefine permission.");
|
||||
return;
|
||||
}
|
||||
|
||||
if (args.length < 2) {
|
||||
player.sendMessage(ChatColor.RED + "/region addowner <id>");
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
String id = args[1].toLowerCase();
|
||||
if (!plugin.regionManager.hasRegion(id)) {
|
||||
player.sendMessage(ChatColor.RED + "A region with ID '"
|
||||
+ id + "' doesn't exist.");
|
||||
return;
|
||||
}
|
||||
|
||||
ProtectedRegion existing = plugin.regionManager.getRegion(id);
|
||||
|
||||
if (!canUseRegionCommand(player, "/regiondefine")
|
||||
&& !existing.getOwners().contains(plugin.wrapPlayer(player))) {
|
||||
player.sendMessage(ChatColor.RED + "You don't own this region.");
|
||||
return;
|
||||
}
|
||||
|
||||
addToDomain(existing.getOwners(), args, 2);
|
||||
|
||||
plugin.regionLoader.save(plugin.regionManager);
|
||||
player.sendMessage(ChatColor.YELLOW + "Region updated!");
|
||||
} catch (IOException e) {
|
||||
player.sendMessage(ChatColor.RED + "Region database failed to save: "
|
||||
+ e.getMessage());
|
||||
}
|
||||
} else if (action.equalsIgnoreCase("removeowner")) {
|
||||
if (!canUseRegionCommand(player, "/regiondefine")
|
||||
&& !canUseRegionCommand(player, "/regionclaim")) {
|
||||
player.sendMessage(ChatColor.RED + "You don't have the /regiondefine permission.");
|
||||
return;
|
||||
}
|
||||
|
||||
if (args.length < 2) {
|
||||
player.sendMessage(ChatColor.RED + "/region removeowner <id>");
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
String id = args[1].toLowerCase();
|
||||
if (!plugin.regionManager.hasRegion(id)) {
|
||||
player.sendMessage(ChatColor.RED + "A region with ID '"
|
||||
+ id + "' doesn't exist.");
|
||||
return;
|
||||
}
|
||||
|
||||
ProtectedRegion existing = plugin.regionManager.getRegion(id);
|
||||
|
||||
if (!canUseRegionCommand(player, "/regiondefine")
|
||||
&& !existing.getOwners().contains(plugin.wrapPlayer(player))) {
|
||||
player.sendMessage(ChatColor.RED + "You don't own this region.");
|
||||
return;
|
||||
}
|
||||
|
||||
removeFromDomain(existing.getOwners(), args, 2);
|
||||
|
||||
plugin.regionLoader.save(plugin.regionManager);
|
||||
player.sendMessage(ChatColor.YELLOW + "Region updated!");
|
||||
} catch (IOException e) {
|
||||
player.sendMessage(ChatColor.RED + "Region database failed to save: "
|
||||
+ e.getMessage());
|
||||
}
|
||||
} else if (action.equalsIgnoreCase("list")) {
|
||||
if (!canUseRegionCommand(player, "/regiondefine")) {
|
||||
player.sendMessage(ChatColor.RED + "You don't have the /regiondefine permission.");
|
||||
return;
|
||||
}
|
||||
|
||||
int page = 0;
|
||||
|
||||
if (args.length >= 2) {
|
||||
try {
|
||||
page = Math.max(0, Integer.parseInt(args[1]) - 1);
|
||||
} catch (NumberFormatException e) {
|
||||
page = 0;
|
||||
}
|
||||
}
|
||||
|
||||
Map<String,ProtectedRegion> regions = plugin.regionManager.getRegions();
|
||||
int size = regions.size();
|
||||
int pages = (int)Math.ceil(size / (float)CMD_LIST_SIZE);
|
||||
|
||||
String[] regionIDList = new String[size];
|
||||
int index = 0;
|
||||
for (String id : regions.keySet()) {
|
||||
regionIDList[index] = id;
|
||||
index++;
|
||||
}
|
||||
Arrays.sort(regionIDList);
|
||||
|
||||
|
||||
player.sendMessage(ChatColor.RED + "Regions (page "
|
||||
+ (page + 1) + " of " + pages + "):");
|
||||
|
||||
if (page < pages) {
|
||||
for (int i = page * CMD_LIST_SIZE; i < page * CMD_LIST_SIZE + CMD_LIST_SIZE; i++) {
|
||||
if (i >= size) break;
|
||||
player.sendMessage(ChatColor.YELLOW.toString() + (i + 1) + ". " + regionIDList[i]);
|
||||
}
|
||||
}
|
||||
} else if (action.equalsIgnoreCase("delete")) {
|
||||
if (!canUseRegionCommand(player, "/regiondelete")
|
||||
&& !canUseRegionCommand(player, "/regionclaim")) {
|
||||
player.sendMessage(ChatColor.RED + "You don't have the /regiondelete permission.");
|
||||
return;
|
||||
}
|
||||
|
||||
if (args.length < 2) {
|
||||
player.sendMessage(ChatColor.RED + "/region delete <id>");
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
String id = args[1].toLowerCase();
|
||||
if (!plugin.regionManager.hasRegion(id)) {
|
||||
player.sendMessage(ChatColor.RED + "A region with ID '"
|
||||
+ id + "' doesn't exist.");
|
||||
return;
|
||||
}
|
||||
|
||||
ProtectedRegion existing = plugin.regionManager.getRegion(id);
|
||||
|
||||
if (!canUseRegionCommand(player, "/regiondelete")
|
||||
&& !existing.getOwners().contains(plugin.wrapPlayer(player))) {
|
||||
player.sendMessage(ChatColor.RED + "You don't own this region.");
|
||||
return;
|
||||
}
|
||||
|
||||
plugin.regionManager.removeRegion(id);
|
||||
plugin.regionLoader.save(plugin.regionManager);
|
||||
player.sendMessage(ChatColor.YELLOW + "Region removed!");
|
||||
} catch (IOException e) {
|
||||
player.sendMessage(ChatColor.RED + "Region database failed to save: "
|
||||
+ e.getMessage());
|
||||
}
|
||||
} else if (action.equalsIgnoreCase("save")) {
|
||||
if (!canUseRegionCommand(player, "/regionsave")) {
|
||||
player.sendMessage(ChatColor.RED + "You don't have the /regionsave permission.");
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
plugin.regionLoader.save(plugin.regionManager);
|
||||
player.sendMessage(ChatColor.YELLOW + "Region database saved to file!");
|
||||
} catch (IOException e) {
|
||||
player.sendMessage(ChatColor.RED + "Region database failed to save: "
|
||||
+ e.getMessage());
|
||||
}
|
||||
} else if (action.equalsIgnoreCase("load")) {
|
||||
if (!canUseRegionCommand(player, "/regionload")) {
|
||||
player.sendMessage(ChatColor.RED + "You don't have the /regionload permission.");
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
plugin.regionLoader.load(plugin.regionManager);
|
||||
player.sendMessage(ChatColor.YELLOW + "Region database loaded from file!");
|
||||
} catch (IOException e) {
|
||||
player.sendMessage(ChatColor.RED + "Region database failed to load: "
|
||||
+ e.getMessage());
|
||||
}
|
||||
} else {
|
||||
player.sendMessage(ChatColor.RED + "/region <define|claim|flag|delete|info|addowner|removeowner|list|save|load> ...");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks for the command or /region.
|
||||
*
|
||||
* @param player
|
||||
* @param cmd
|
||||
* @return
|
||||
*/
|
||||
private boolean canUseRegionCommand(Player player, String cmd) {
|
||||
return plugin.hasPermission(player, "/region")
|
||||
|| plugin.hasPermission(player, cmd);
|
||||
}
|
||||
|
||||
/**
|
||||
* Parse a group/player DefaultDomain specification for areas.
|
||||
*
|
||||
* @param domain
|
||||
* @param split
|
||||
* @param startIndex
|
||||
*/
|
||||
private static void addToDomain(DefaultDomain domain,
|
||||
String[] split, int startIndex) {
|
||||
for (int i = startIndex; i < split.length; i++) {
|
||||
String s = split[i];
|
||||
Matcher m = groupPattern.matcher(s);
|
||||
if (m.matches()) {
|
||||
domain.addGroup(m.group(1));
|
||||
} else {
|
||||
domain.addPlayer(s);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Parse a group/player DefaultDomain specification for areas.
|
||||
*
|
||||
* @param domain
|
||||
* @param split
|
||||
* @param startIndex
|
||||
*/
|
||||
private static void removeFromDomain(DefaultDomain domain,
|
||||
String[] split, int startIndex) {
|
||||
for (int i = startIndex; i < split.length; i++) {
|
||||
String s = split[i];
|
||||
Matcher m = groupPattern.matcher(s);
|
||||
if (m.matches()) {
|
||||
domain.removeGroup(m.group(1));
|
||||
} else {
|
||||
domain.removePlayer(s);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Parse a group/player DefaultDomain specification for areas.
|
||||
*
|
||||
* @param split
|
||||
* @param startIndex
|
||||
* @return
|
||||
*/
|
||||
private static DefaultDomain parseDomainString(String[] split, int startIndex) {
|
||||
DefaultDomain domain = new DefaultDomain();
|
||||
|
||||
for (int i = startIndex; i < split.length; i++) {
|
||||
String s = split[i];
|
||||
Matcher m = groupPattern.matcher(s);
|
||||
if (m.matches()) {
|
||||
domain.addGroup(m.group(1));
|
||||
} else {
|
||||
domain.addPlayer(s);
|
||||
}
|
||||
}
|
||||
|
||||
return domain;
|
||||
}
|
||||
}
|
||||
File diff suppressed because it is too large.
Load diff
@@ -197,6 +197,10 @@ public class CSVDatabase implements ProtectionDatabase {
|
||||
String[] parts = data.split(",");
|
||||
|
||||
for (String part : parts) {
|
||||
if (part.trim().length() == 0) {
|
||||
continue;
|
||||
}
|
||||
|
||||
Matcher matcher = pattern.matcher(part);
|
||||
|
||||
if (!matcher.matches()) {
|
||||
|
||||
@@ -19,8 +19,10 @@
|
||||
|
||||
package com.sk89q.worldguard;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.HashSet;
|
||||
import com.sk89q.worldedit.Vector;
|
||||
import com.sk89q.worldguard.LocalPlayer;
|
||||
|
||||
public class TestPlayer extends LocalPlayer {
|
||||
@@ -44,4 +46,34 @@ public class TestPlayer extends LocalPlayer {
|
||||
public boolean hasGroup(String group) {
|
||||
return groups.contains(group.toLowerCase());
|
||||
}
|
||||
|
||||
@Override
|
||||
public Vector getPosition() {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void kick(String msg) {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void ban(String msg) {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void printRaw(String msg) {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> getGroups() {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user