summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorsnowleo <schneeleo@gmail.com>2012-07-29 12:33:35 +0200
committersnowleo <schneeleo@gmail.com>2012-07-29 12:33:35 +0200
commite6bda76b129fb3e38735fa253f00ddb8f975d752 (patch)
treedae2216ff35a1e158406d0eaa28bce9f652c5ccd
parent8c4eb152a3a1596610a50fb5645a5f747bab2c70 (diff)
downloadEssentials-e6bda76b129fb3e38735fa253f00ddb8f975d752.tar
Essentials-e6bda76b129fb3e38735fa253f00ddb8f975d752.tar.gz
Essentials-e6bda76b129fb3e38735fa253f00ddb8f975d752.tar.lz
Essentials-e6bda76b129fb3e38735fa253f00ddb8f975d752.tar.xz
Essentials-e6bda76b129fb3e38735fa253f00ddb8f975d752.zip
Events WIP
-rw-r--r--Essentials/src/net/ess3/api/ondemand/OnDemand.java22
-rw-r--r--Essentials/src/net/ess3/api/ondemand/UserOnDemand.java29
-rw-r--r--Essentials/src/net/ess3/api/server/Block.java24
-rw-r--r--Essentials/src/net/ess3/api/server/ItemStack.java8
-rw-r--r--Essentials/src/net/ess3/api/server/Material.java2
-rw-r--r--Essentials/src/net/ess3/api/server/Player.java2
-rw-r--r--Essentials/src/net/ess3/api/server/Plugin.java2
-rw-r--r--Essentials/src/net/ess3/api/server/Server.java2
-rw-r--r--Essentials/src/net/ess3/api/server/events/EventFactory.java7
-rw-r--r--Essentials/src/net/ess3/api/server/events/EventListener.java21
-rw-r--r--Essentials/src/net/ess3/api/server/events/EventPriority.java12
-rw-r--r--Essentials/src/net/ess3/api/server/events/EventType.java7
-rw-r--r--Essentials/src/net/ess3/bukkit/BukkitBlockFactory.java13
-rw-r--r--Essentials/src/net/ess3/bukkit/BukkitItemStack.java12
-rw-r--r--Essentials/src/net/ess3/bukkit/BukkitMaterial.java86
-rw-r--r--Essentials/src/net/ess3/bukkit/BukkitPlayer.java14
-rw-r--r--Essentials/src/net/ess3/bukkit/BukkitPlugin.java43
-rw-r--r--Essentials/src/net/ess3/bukkit/BukkitServer.java10
-rw-r--r--Essentials/src/net/ess3/bukkit/BukkitWorld.java7
-rw-r--r--Essentials/src/net/ess3/bukkit/EssentialsPlugin.java4
-rw-r--r--Essentials/src/net/ess3/bukkit/events/BaseEventExecutor.java21
-rw-r--r--Essentials/src/net/ess3/bukkit/events/BukkitEventFactory.java25
-rw-r--r--Essentials/src/net/ess3/bukkit/events/BukkitListener.java70
-rw-r--r--Essentials/src/net/ess3/bukkit/events/PlaceBlockExecutor.java31
-rw-r--r--Essentials/src/net/ess3/listener/EssentialsBlockListener.java39
-rw-r--r--Essentials/src/net/ess3/user/User.java2
26 files changed, 466 insertions, 49 deletions
diff --git a/Essentials/src/net/ess3/api/ondemand/OnDemand.java b/Essentials/src/net/ess3/api/ondemand/OnDemand.java
new file mode 100644
index 000000000..a2ec8e246
--- /dev/null
+++ b/Essentials/src/net/ess3/api/ondemand/OnDemand.java
@@ -0,0 +1,22 @@
+package net.ess3.api.ondemand;
+
+import java.lang.ref.WeakReference;
+
+
+public abstract class OnDemand<T>
+{
+ protected WeakReference<T> reference = null;
+
+ public final T get()
+ {
+ T obj = reference == null ? null : reference.get();
+ if (obj == null)
+ {
+ obj = getNew();
+ reference = new WeakReference<T>(obj);
+ }
+ return obj;
+ }
+
+ protected abstract T getNew();
+}
diff --git a/Essentials/src/net/ess3/api/ondemand/UserOnDemand.java b/Essentials/src/net/ess3/api/ondemand/UserOnDemand.java
new file mode 100644
index 000000000..b4805fb9d
--- /dev/null
+++ b/Essentials/src/net/ess3/api/ondemand/UserOnDemand.java
@@ -0,0 +1,29 @@
+package net.ess3.api.ondemand;
+
+import net.ess3.api.IUser;
+import net.ess3.api.server.Player;
+import net.ess3.api.server.Server;
+
+
+public class UserOnDemand extends OnDemand<IUser>
+{
+ private final String name;
+ private final Server server;
+
+ public UserOnDemand(String name, Server server)
+ {
+ this.name = name;
+ this.server = server;
+ }
+
+ @Override
+ protected IUser getNew()
+ {
+ Player player = server.getPlayer(name);
+ if (player == null)
+ {
+ return null;
+ }
+ return player.getUser();
+ }
+}
diff --git a/Essentials/src/net/ess3/api/server/Block.java b/Essentials/src/net/ess3/api/server/Block.java
new file mode 100644
index 000000000..52bc440f9
--- /dev/null
+++ b/Essentials/src/net/ess3/api/server/Block.java
@@ -0,0 +1,24 @@
+package net.ess3.api.server;
+
+import lombok.Delegate;
+
+public class Block {
+
+ public Block(ItemStack stack, Location location)
+ {
+ this.stack = stack;
+ this.location = location;
+ }
+
+
+ @Delegate
+ private final ItemStack stack;
+ @Delegate
+ private final Location location;
+
+ public ItemStack convertToItem()
+ {
+ final ItemStack is = ItemStack.create(this.getType(), 1, this.getDurability());
+ return this.getType().convertToItem(is);
+ }
+}
diff --git a/Essentials/src/net/ess3/api/server/ItemStack.java b/Essentials/src/net/ess3/api/server/ItemStack.java
index d8315974c..b383f4fd7 100644
--- a/Essentials/src/net/ess3/api/server/ItemStack.java
+++ b/Essentials/src/net/ess3/api/server/ItemStack.java
@@ -26,12 +26,18 @@ public abstract class ItemStack implements Cloneable
}
public abstract Material getType();
+
+ public abstract void setType(Material mat);
+
+ public abstract void setType(int id);
public abstract int getAmount();
public abstract void setAmount(int value);
- public abstract short getDurability();
+ public abstract short getDurability();
+
+ public abstract void setDurability(short value);
public abstract int getMaxStackSize();
diff --git a/Essentials/src/net/ess3/api/server/Material.java b/Essentials/src/net/ess3/api/server/Material.java
index bfda30775..5c41f8302 100644
--- a/Essentials/src/net/ess3/api/server/Material.java
+++ b/Essentials/src/net/ess3/api/server/Material.java
@@ -34,4 +34,6 @@ public abstract class Material {
public abstract int getMaxDurability();
protected abstract Material matchMaterial(String string);
+
+ public abstract ItemStack convertToItem(ItemStack is);
}
diff --git a/Essentials/src/net/ess3/api/server/Player.java b/Essentials/src/net/ess3/api/server/Player.java
index 152c3f0c8..d8928c4d1 100644
--- a/Essentials/src/net/ess3/api/server/Player.java
+++ b/Essentials/src/net/ess3/api/server/Player.java
@@ -58,4 +58,6 @@ public interface Player extends CommandSender
void setCompassTarget(Location loc);
void damage(int value);
+
+ boolean isInSurvivalMode();
}
diff --git a/Essentials/src/net/ess3/api/server/Plugin.java b/Essentials/src/net/ess3/api/server/Plugin.java
index 6b2019d2e..f0d10740c 100644
--- a/Essentials/src/net/ess3/api/server/Plugin.java
+++ b/Essentials/src/net/ess3/api/server/Plugin.java
@@ -34,4 +34,6 @@ public interface Plugin
void callSuicideEvent(Player player);
Logger getLogger();
+
+ Server getServer();
}
diff --git a/Essentials/src/net/ess3/api/server/Server.java b/Essentials/src/net/ess3/api/server/Server.java
index a0110eb6b..5a2f14431 100644
--- a/Essentials/src/net/ess3/api/server/Server.java
+++ b/Essentials/src/net/ess3/api/server/Server.java
@@ -25,4 +25,6 @@ public interface Server
String getVersion();
public void unbanIP(String string);
+
+ public Player getPlayer(String name);
}
diff --git a/Essentials/src/net/ess3/api/server/events/EventFactory.java b/Essentials/src/net/ess3/api/server/events/EventFactory.java
new file mode 100644
index 000000000..fdaf8199f
--- /dev/null
+++ b/Essentials/src/net/ess3/api/server/events/EventFactory.java
@@ -0,0 +1,7 @@
+package net.ess3.api.server.events;
+
+
+public interface EventFactory
+{
+ public void register(EventListener listener, EventType type, EventPriority priority, boolean ignoreCancelled);
+}
diff --git a/Essentials/src/net/ess3/api/server/events/EventListener.java b/Essentials/src/net/ess3/api/server/events/EventListener.java
new file mode 100644
index 000000000..975a10357
--- /dev/null
+++ b/Essentials/src/net/ess3/api/server/events/EventListener.java
@@ -0,0 +1,21 @@
+package net.ess3.api.server.events;
+
+import net.ess3.api.IUser;
+import net.ess3.api.ondemand.OnDemand;
+import net.ess3.api.server.Block;
+
+
+public abstract class EventListener
+{
+ private static EventFactory eventFactory;
+
+ public final void register(EventType type, EventPriority priority, boolean ignoreCancelled)
+ {
+ eventFactory.register(this, type, priority, ignoreCancelled);
+ }
+
+ public boolean onBlockPlace(Block block, OnDemand<IUser> user)
+ {
+ return true;
+ }
+}
diff --git a/Essentials/src/net/ess3/api/server/events/EventPriority.java b/Essentials/src/net/ess3/api/server/events/EventPriority.java
new file mode 100644
index 000000000..76c4d891b
--- /dev/null
+++ b/Essentials/src/net/ess3/api/server/events/EventPriority.java
@@ -0,0 +1,12 @@
+package net.ess3.api.server.events;
+
+
+public enum EventPriority
+{
+ LOWEST,
+ LOW,
+ NORMAL,
+ HIGH,
+ HIGHEST,
+ MONITOR
+}
diff --git a/Essentials/src/net/ess3/api/server/events/EventType.java b/Essentials/src/net/ess3/api/server/events/EventType.java
new file mode 100644
index 000000000..694ad04ee
--- /dev/null
+++ b/Essentials/src/net/ess3/api/server/events/EventType.java
@@ -0,0 +1,7 @@
+package net.ess3.api.server.events;
+
+
+public enum EventType
+{
+ PLACE_BLOCK
+}
diff --git a/Essentials/src/net/ess3/bukkit/BukkitBlockFactory.java b/Essentials/src/net/ess3/bukkit/BukkitBlockFactory.java
new file mode 100644
index 000000000..e39e0c9a2
--- /dev/null
+++ b/Essentials/src/net/ess3/bukkit/BukkitBlockFactory.java
@@ -0,0 +1,13 @@
+package net.ess3.bukkit;
+
+import net.ess3.api.server.Block;
+import net.ess3.api.server.ItemStack;
+import net.ess3.api.server.Location;
+
+public class BukkitBlockFactory {
+
+ public static Block convert(org.bukkit.block.Block block) {
+ Location loc = Location.create(block.getWorld().getName(), block.getX(), block.getY(), block.getZ());
+ return new Block(ItemStack.create(block.getTypeId(), 1, block.getData()), loc);
+ }
+}
diff --git a/Essentials/src/net/ess3/bukkit/BukkitItemStack.java b/Essentials/src/net/ess3/bukkit/BukkitItemStack.java
index 819cc734b..2cec7023c 100644
--- a/Essentials/src/net/ess3/bukkit/BukkitItemStack.java
+++ b/Essentials/src/net/ess3/bukkit/BukkitItemStack.java
@@ -53,6 +53,18 @@ public class BukkitItemStack extends net.ess3.api.server.ItemStack
{
return Material.get(itemStack.getTypeId());
}
+
+ @Override
+ public void setType(Material type)
+ {
+ itemStack.setTypeId(type.getId());
+ }
+
+ @Override
+ public void setType(int id)
+ {
+ itemStack.setTypeId(id);
+ }
@Override
public boolean isAir()
diff --git a/Essentials/src/net/ess3/bukkit/BukkitMaterial.java b/Essentials/src/net/ess3/bukkit/BukkitMaterial.java
index b01d68754..ee0391eaa 100644
--- a/Essentials/src/net/ess3/bukkit/BukkitMaterial.java
+++ b/Essentials/src/net/ess3/bukkit/BukkitMaterial.java
@@ -1,8 +1,9 @@
package net.ess3.bukkit;
-import net.ess3.api.server.Material;
import java.util.EnumMap;
import lombok.Delegate;
+import net.ess3.api.server.ItemStack;
+import net.ess3.api.server.Material;
public class BukkitMaterial extends Material
@@ -16,6 +17,7 @@ public class BukkitMaterial extends Material
materials.put(material, new BukkitMaterial(material));
}
}
+
private interface Excludes {
short getMaxDurability();
}
@@ -59,4 +61,86 @@ public class BukkitMaterial extends Material
{
return (short)this.material.getMaxDurability();
}
+
+ @Override
+ public ItemStack convertToItem(ItemStack is)
+ {
+ switch (org.bukkit.Material.getMaterial(is.getType().getId()))
+ {
+ case WOODEN_DOOR:
+ is.setType(org.bukkit.Material.WOOD_DOOR.getId());
+ is.setDurability((short)0);
+ break;
+ case IRON_DOOR_BLOCK:
+ is.setType(org.bukkit.Material.IRON_DOOR.getId());
+ is.setDurability((short)0);
+ break;
+ case SIGN_POST:
+ case WALL_SIGN:
+ is.setType(org.bukkit.Material.SIGN.getId());
+ is.setDurability((short)0);
+ break;
+ case CROPS:
+ is.setType(org.bukkit.Material.SEEDS.getId());
+ is.setDurability((short)0);
+ break;
+ case CAKE_BLOCK:
+ is.setType(org.bukkit.Material.CAKE.getId());
+ is.setDurability((short)0);
+ break;
+ case BED_BLOCK:
+ is.setType(org.bukkit.Material.BED.getId());
+ is.setDurability((short)0);
+ break;
+ case REDSTONE_WIRE:
+ is.setType(org.bukkit.Material.REDSTONE.getId());
+ is.setDurability((short)0);
+ break;
+ case REDSTONE_TORCH_OFF:
+ case REDSTONE_TORCH_ON:
+ is.setType(org.bukkit.Material.REDSTONE_TORCH_ON.getId());
+ is.setDurability((short)0);
+ break;
+ case DIODE_BLOCK_OFF:
+ case DIODE_BLOCK_ON:
+ is.setType(org.bukkit.Material.DIODE.getId());
+ is.setDurability((short)0);
+ break;
+ case DOUBLE_STEP:
+ is.setType(org.bukkit.Material.STEP.getId());
+ break;
+ case TORCH:
+ case RAILS:
+ case LADDER:
+ case WOOD_STAIRS:
+ case COBBLESTONE_STAIRS:
+ case LEVER:
+ case STONE_BUTTON:
+ case FURNACE:
+ case DISPENSER:
+ case PUMPKIN:
+ case JACK_O_LANTERN:
+ case WOOD_PLATE:
+ case STONE_PLATE:
+ case PISTON_STICKY_BASE:
+ case PISTON_BASE:
+ case IRON_FENCE:
+ case THIN_GLASS:
+ case TRAP_DOOR:
+ case FENCE:
+ case FENCE_GATE:
+ case NETHER_FENCE:
+ is.setDurability((short)0);
+ break;
+ case FIRE:
+ return null;
+ case PUMPKIN_STEM:
+ is.setType(org.bukkit.Material.PUMPKIN_SEEDS.getId());
+ break;
+ case MELON_STEM:
+ is.setType(org.bukkit.Material.MELON_SEEDS.getId());
+ break;
+ }
+ return is;
+ }
}
diff --git a/Essentials/src/net/ess3/bukkit/BukkitPlayer.java b/Essentials/src/net/ess3/bukkit/BukkitPlayer.java
index f5ac075df..7b357e278 100644
--- a/Essentials/src/net/ess3/bukkit/BukkitPlayer.java
+++ b/Essentials/src/net/ess3/bukkit/BukkitPlayer.java
@@ -7,8 +7,8 @@ import net.ess3.api.server.IInventory;
import net.ess3.api.server.Location;
import net.ess3.api.server.Player;
import net.ess3.api.server.World;
+import org.bukkit.GameMode;
import org.bukkit.OfflinePlayer;
-import org.bukkit.entity.LivingEntity;
public class BukkitPlayer extends BukkitCommandSender implements Player
@@ -33,7 +33,7 @@ public class BukkitPlayer extends BukkitCommandSender implements Player
}
@Delegate(types =
{
- org.bukkit.entity.Player.class, LivingEntity.class
+ org.bukkit.entity.Player.class, org.bukkit.entity.LivingEntity.class
}, excludes =
{
OfflinePlayer.class, org.bukkit.command.CommandSender.class, Excludes.class
@@ -50,6 +50,7 @@ public class BukkitPlayer extends BukkitCommandSender implements Player
@Getter
private transient OfflinePlayer safePlayer;
private final transient BukkitServer server;
+ private transient IUser user = null;
public BukkitPlayer(final OfflinePlayer player, final BukkitServer server)
{
@@ -85,7 +86,7 @@ public class BukkitPlayer extends BukkitCommandSender implements Player
@Override
public IUser getUser()
{
- throw new UnsupportedOperationException("Not supported yet.");
+ return user;
}
@Override
@@ -202,4 +203,11 @@ public class BukkitPlayer extends BukkitCommandSender implements Player
{
onlinePlayer.setCompassTarget(((BukkitLocation)loc).getBukkitLocation());
}
+
+
+ @Override
+ public boolean isInSurvivalMode()
+ {
+ return onlinePlayer.getGameMode() == GameMode.SURVIVAL;
+ }
}
diff --git a/Essentials/src/net/ess3/bukkit/BukkitPlugin.java b/Essentials/src/net/ess3/bukkit/BukkitPlugin.java
index 8e600b936..0d60bee19 100644
--- a/Essentials/src/net/ess3/bukkit/BukkitPlugin.java
+++ b/Essentials/src/net/ess3/bukkit/BukkitPlugin.java
@@ -5,6 +5,8 @@ import net.ess3.api.server.Plugin;
import net.ess3.api.server.Location;
import java.io.File;
import lombok.Delegate;
+import lombok.Getter;
+import net.ess3.api.server.Server;
import org.bukkit.event.entity.EntityDamageEvent;
import org.bukkit.event.player.PlayerRespawnEvent;
import org.bukkit.plugin.java.JavaPluginLoader;
@@ -12,66 +14,73 @@ import org.bukkit.plugin.java.JavaPluginLoader;
public class BukkitPlugin implements Plugin
{
- @Delegate
- private final org.bukkit.plugin.Plugin plugin;
+ private interface Excludes {
+ public org.bukkit.Server getServer();
+ }
+ @Delegate(excludes={Excludes.class})
+ @Getter
+ private final org.bukkit.plugin.Plugin bukkitPlugin;
+ @Getter
+ private final Server server;
- public BukkitPlugin(final org.bukkit.plugin.Plugin plugin)
+ public BukkitPlugin(final org.bukkit.plugin.Plugin plugin, final Server server)
{
- this.plugin = plugin;
+ this.bukkitPlugin = plugin;
+ this.server = server;
}
@Override
public int scheduleAsyncDelayedTask(final Runnable run)
{
- return plugin.getServer().getScheduler().scheduleAsyncDelayedTask(plugin, run);
+ return bukkitPlugin.getServer().getScheduler().scheduleAsyncDelayedTask(bukkitPlugin, run);
}
@Override
public int scheduleSyncDelayedTask(final Runnable run)
{
- return plugin.getServer().getScheduler().scheduleSyncDelayedTask(plugin, run);
+ return bukkitPlugin.getServer().getScheduler().scheduleSyncDelayedTask(bukkitPlugin, run);
}
@Override
public int scheduleSyncDelayedTask(final Runnable run, final long delay)
{
- return plugin.getServer().getScheduler().scheduleSyncDelayedTask(plugin, run, delay);
+ return bukkitPlugin.getServer().getScheduler().scheduleSyncDelayedTask(bukkitPlugin, run, delay);
}
@Override
public int scheduleSyncRepeatingTask(final Runnable run, final long delay, final long period)
{
- return plugin.getServer().getScheduler().scheduleSyncRepeatingTask(plugin, run, delay, period);
+ return bukkitPlugin.getServer().getScheduler().scheduleSyncRepeatingTask(bukkitPlugin, run, delay, period);
}
@Override
public int scheduleAsyncRepeatingTask(final Runnable run, final long delay, final long period)
{
- return plugin.getServer().getScheduler().scheduleAsyncRepeatingTask(plugin, run, delay, period);
+ return bukkitPlugin.getServer().getScheduler().scheduleAsyncRepeatingTask(bukkitPlugin, run, delay, period);
}
@Override
public File getRootFolder()
{
- return plugin.getDataFolder().getParentFile().getParentFile();
+ return bukkitPlugin.getDataFolder().getParentFile().getParentFile();
}
@Override
public void cancelTask(final int taskId)
{
- plugin.getServer().getScheduler().cancelTask(taskId);
+ bukkitPlugin.getServer().getScheduler().cancelTask(taskId);
}
@Override
public String getVersion()
{
- return plugin.getDescription().getVersion();
+ return bukkitPlugin.getDescription().getVersion();
}
@Override
public Class getClassByName(final String name)
{
- final JavaPluginLoader jpl = (JavaPluginLoader)plugin.getPluginLoader();
+ final JavaPluginLoader jpl = (JavaPluginLoader)bukkitPlugin.getPluginLoader();
return jpl.getClassByName(name);
}
@@ -79,7 +88,7 @@ public class BukkitPlugin implements Plugin
public Location callRespawnEvent(Player player, Location loc, boolean bedSpawn)
{
final PlayerRespawnEvent pre = new PlayerRespawnEvent(((BukkitPlayer)player).getOnlinePlayer(), ((BukkitLocation)loc).getBukkitLocation() , bedSpawn);
- getServer().getPluginManager().callEvent(pre);
+ getBukkitServer().getPluginManager().callEvent(pre);
return new BukkitLocation(pre.getRespawnLocation());
}
@@ -87,7 +96,11 @@ public class BukkitPlugin implements Plugin
public void callSuicideEvent(Player player)
{
EntityDamageEvent ede = new EntityDamageEvent(((BukkitPlayer)player).getOnlinePlayer(), EntityDamageEvent.DamageCause.SUICIDE, 1000);
- getServer().getPluginManager().callEvent(ede);
+ getBukkitServer().getPluginManager().callEvent(ede);
}
+ public org.bukkit.Server getBukkitServer()
+ {
+ return bukkitPlugin.getServer();
+ }
}
diff --git a/Essentials/src/net/ess3/bukkit/BukkitServer.java b/Essentials/src/net/ess3/bukkit/BukkitServer.java
index 65add8be0..d0f548f09 100644
--- a/Essentials/src/net/ess3/bukkit/BukkitServer.java
+++ b/Essentials/src/net/ess3/bukkit/BukkitServer.java
@@ -30,6 +30,8 @@ public class BukkitServer implements Server, Listener
org.bukkit.entity.Player[] getOnlinePlayers();
BukkitCommandSender getConsoleSender();
+
+ org.bukkit.entity.Player getPlayer(String name);
}
@Delegate(excludes = Excludes.class)
private final org.bukkit.Server server;
@@ -81,6 +83,7 @@ public class BukkitServer implements Server, Listener
{
final HashMap<String, Player> oplayersMap = new HashMap<String, Player>(onlinePlayersMap);
BukkitPlayer p = new BukkitPlayer(event.getPlayer(), this);
+
oplayersMap.put(event.getPlayer().getName(), p);
onlinePlayersMap = Collections.unmodifiableMap(oplayersMap);
onlinePlayers = Collections.unmodifiableCollection(oplayersMap.values());
@@ -121,6 +124,11 @@ public class BukkitServer implements Server, Listener
}
public Player getPlayer(final org.bukkit.entity.Player player) {
- return onlinePlayersMap.get(player);
+ return onlinePlayersMap.get(player.getName());
+ }
+
+ @Override
+ public Player getPlayer(final String playerName) {
+ return onlinePlayersMap.get(playerName);
}
}
diff --git a/Essentials/src/net/ess3/bukkit/BukkitWorld.java b/Essentials/src/net/ess3/bukkit/BukkitWorld.java
index 1215dd433..894a40f85 100644
--- a/Essentials/src/net/ess3/bukkit/BukkitWorld.java
+++ b/Essentials/src/net/ess3/bukkit/BukkitWorld.java
@@ -1,11 +1,10 @@
package net.ess3.bukkit;
-import java.util.List;
-import net.ess3.api.server.World;
-import net.ess3.api.server.ItemStack;
-import net.ess3.api.server.Location;
import lombok.Delegate;
import lombok.Getter;
+import net.ess3.api.server.ItemStack;
+import net.ess3.api.server.Location;
+import net.ess3.api.server.World;
import org.bukkit.TreeType;
public class BukkitWorld implements World {
diff --git a/Essentials/src/net/ess3/bukkit/EssentialsPlugin.java b/Essentials/src/net/ess3/bukkit/EssentialsPlugin.java
index e4aba2ecf..b198fef87 100644
--- a/Essentials/src/net/ess3/bukkit/EssentialsPlugin.java
+++ b/Essentials/src/net/ess3/bukkit/EssentialsPlugin.java
@@ -1,9 +1,9 @@
package net.ess3.bukkit;
+import java.util.logging.Level;
import net.ess3.Essentials;
import static net.ess3.I18n._;
import net.ess3.api.server.*;
-import java.util.logging.Level;
import org.bukkit.command.Command;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
@@ -33,7 +33,7 @@ public class EssentialsPlugin extends JavaPlugin
BukkitServer server = new BukkitServer(getServer());
final PluginManager pm = this.getServer().getPluginManager();
pm.registerEvents(server, this);
- ess = new Essentials(server, getLogger(), new BukkitPlugin(this));
+ ess = new Essentials(server, getLogger(), new BukkitPlugin(this, server));
if (VersionCheck.checkVersion(this))
{
try
diff --git a/Essentials/src/net/ess3/bukkit/events/BaseEventExecutor.java b/Essentials/src/net/ess3/bukkit/events/BaseEventExecutor.java
new file mode 100644
index 000000000..16397d373
--- /dev/null
+++ b/Essentials/src/net/ess3/bukkit/events/BaseEventExecutor.java
@@ -0,0 +1,21 @@
+package net.ess3.bukkit.events;
+
+import net.ess3.api.server.events.EventListener;
+import org.bukkit.event.Event;
+import org.bukkit.event.EventException;
+import org.bukkit.event.Listener;
+import org.bukkit.plugin.EventExecutor;
+
+
+public abstract class BaseEventExecutor implements EventExecutor
+{
+ protected final EventListener listener;
+
+ public BaseEventExecutor(final EventListener listener)
+ {
+ this.listener = listener;
+ }
+
+ @Override
+ public abstract void execute(Listener ll, Event event) throws EventException;
+}
diff --git a/Essentials/src/net/ess3/bukkit/events/BukkitEventFactory.java b/Essentials/src/net/ess3/bukkit/events/BukkitEventFactory.java
new file mode 100644
index 000000000..cc36c272d
--- /dev/null
+++ b/Essentials/src/net/ess3/bukkit/events/BukkitEventFactory.java
@@ -0,0 +1,25 @@
+package net.ess3.bukkit.events;
+
+import net.ess3.api.server.Plugin;
+import net.ess3.api.server.events.EventFactory;
+import net.ess3.api.server.events.EventListener;
+import net.ess3.api.server.events.EventPriority;
+import net.ess3.api.server.events.EventType;
+
+
+public class BukkitEventFactory implements EventFactory
+{
+ private Plugin plugin;
+
+ public BukkitEventFactory(Plugin plugin)
+ {
+ this.plugin = plugin;
+ }
+
+ @Override
+ public void register(EventListener listener, EventType type, EventPriority priority, boolean ignoreCancelled)
+ {
+ BukkitListener bukkitListener = new BukkitListener(plugin);
+ bukkitListener.register(listener, type, priority, ignoreCancelled);
+ }
+}
diff --git a/Essentials/src/net/ess3/bukkit/events/BukkitListener.java b/Essentials/src/net/ess3/bukkit/events/BukkitListener.java
new file mode 100644
index 000000000..2bce6e31c
--- /dev/null
+++ b/Essentials/src/net/ess3/bukkit/events/BukkitListener.java
@@ -0,0 +1,70 @@
+package net.ess3.bukkit.events;
+
+import net.ess3.api.server.Plugin;
+import net.ess3.api.server.events.EventListener;
+import net.ess3.api.server.events.EventPriority;
+import net.ess3.api.server.events.EventType;
+import net.ess3.bukkit.BukkitPlugin;
+import org.bukkit.event.Event;
+import org.bukkit.event.Listener;
+import org.bukkit.event.block.BlockPlaceEvent;
+import org.bukkit.plugin.EventExecutor;
+
+
+public class BukkitListener implements Listener
+{
+ private Plugin plugin;
+
+ public BukkitListener(final Plugin plugin)
+ {
+ this.plugin = plugin;
+ }
+
+ public void register(EventListener listener, EventType type, EventPriority priority, boolean ignoreCancelled)
+ {
+ Class<? extends Event> event = getEventClass(type);
+ org.bukkit.event.EventPriority bukkitPriority = getEventPriority(priority);
+ EventExecutor executor = getEventExecutor(type, listener);
+ ((BukkitPlugin)plugin).getBukkitServer().getPluginManager().registerEvent(event, this, bukkitPriority, executor, ((BukkitPlugin)plugin).getBukkitPlugin(), ignoreCancelled);
+ }
+
+ private static Class<? extends Event> getEventClass(final EventType type)
+ {
+ switch (type)
+ {
+ case PLACE_BLOCK:
+ return BlockPlaceEvent.class;
+ }
+ throw new RuntimeException("Missing Event Class");
+ }
+
+ private static org.bukkit.event.EventPriority getEventPriority(final EventPriority priority)
+ {
+ switch (priority)
+ {
+ case LOWEST:
+ return org.bukkit.event.EventPriority.LOWEST;
+ case LOW:
+ return org.bukkit.event.EventPriority.LOW;
+ case NORMAL:
+ return org.bukkit.event.EventPriority.NORMAL;
+ case HIGH:
+ return org.bukkit.event.EventPriority.HIGH;
+ case HIGHEST:
+ return org.bukkit.event.EventPriority.HIGHEST;
+ case MONITOR:
+ return org.bukkit.event.EventPriority.MONITOR;
+ }
+ throw new RuntimeException("Missing Event Priority");
+ }
+
+ private EventExecutor getEventExecutor(final EventType type, final EventListener listener)
+ {
+ switch (type)
+ {
+ case PLACE_BLOCK:
+ return new PlaceBlockExecutor(listener, plugin.getServer());
+ }
+ throw new RuntimeException("Missing Event Executor");
+ }
+}
diff --git a/Essentials/src/net/ess3/bukkit/events/PlaceBlockExecutor.java b/Essentials/src/net/ess3/bukkit/events/PlaceBlockExecutor.java
new file mode 100644
index 000000000..14713afa0
--- /dev/null
+++ b/Essentials/src/net/ess3/bukkit/events/PlaceBlockExecutor.java
@@ -0,0 +1,31 @@
+package net.ess3.bukkit.events;
+
+import net.ess3.api.ondemand.UserOnDemand;
+import net.ess3.api.server.Block;
+import net.ess3.api.server.Server;
+import net.ess3.api.server.events.EventListener;
+import net.ess3.bukkit.BukkitBlockFactory;
+import org.bukkit.event.Event;
+import org.bukkit.event.EventException;
+import org.bukkit.event.Listener;
+import org.bukkit.event.block.BlockPlaceEvent;
+
+
+public class PlaceBlockExecutor extends BaseEventExecutor
+{
+ private final Server server;
+ public PlaceBlockExecutor(EventListener listener, Server server)
+ {
+ super(listener);
+ this.server = server;
+ }
+
+ @Override
+ public void execute(Listener ll, Event event) throws EventException
+ {
+ org.bukkit.block.Block bukkitBlock = ((BlockPlaceEvent)event).getBlockPlaced();
+ Block block = BukkitBlockFactory.convert(bukkitBlock);
+ String playername = ((BlockPlaceEvent)event).getPlayer().getName();
+ listener.onBlockPlace(block, new UserOnDemand(playername, server));
+ }
+}
diff --git a/Essentials/src/net/ess3/listener/EssentialsBlockListener.java b/Essentials/src/net/ess3/listener/EssentialsBlockListener.java
index a843202c0..9d69aff04 100644
--- a/Essentials/src/net/ess3/listener/EssentialsBlockListener.java
+++ b/Essentials/src/net/ess3/listener/EssentialsBlockListener.java
@@ -2,16 +2,15 @@ package net.ess3.listener;
import net.ess3.api.IEssentials;
import net.ess3.api.IUser;
-import net.ess3.utils.Util;
-import org.bukkit.GameMode;
-import org.bukkit.event.EventHandler;
-import org.bukkit.event.EventPriority;
-import org.bukkit.event.Listener;
-import org.bukkit.event.block.BlockPlaceEvent;
-import org.bukkit.inventory.ItemStack;
+import net.ess3.api.ondemand.OnDemand;
+import net.ess3.api.server.Block;
+import net.ess3.api.server.ItemStack;
+import net.ess3.api.server.events.EventListener;
+import net.ess3.api.server.events.EventPriority;
+import net.ess3.api.server.events.EventType;
-public class EssentialsBlockListener implements Listener
+public class EssentialsBlockListener extends EventListener
{
private final transient IEssentials ess;
@@ -19,21 +18,20 @@ public class EssentialsBlockListener implements Listener
{
super();
this.ess = ess;
+ register(EventType.PLACE_BLOCK, EventPriority.LOW, true);
}
- @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true)
- public void onBlockPlace(final BlockPlaceEvent event)
+ @Override
+ public boolean onBlockPlace(final Block placedBlock, final OnDemand<IUser> user)
{
- // Do not rely on getItemInHand();
- // http://leaky.bukkit.org/issues/663
- final ItemStack itemstack = Util.convertBlockToItem(event.getBlockPlaced());
- if (itemstack == null)
+ final ItemStack itemstack = placedBlock.convertToItem();
+ if (placedBlock == null)
{
- return;
+ return true;
}
- final IUser user = ess.getUserMap().getUser(event.getPlayer());
- final boolean unlimitedForUser = user.getData().hasUnlimited(itemstack.getType());
- if (unlimitedForUser && user.getGameMode() == GameMode.SURVIVAL)
+
+ final boolean unlimitedForUser = user.get().getData().hasUnlimited(itemstack.getType());
+ if (unlimitedForUser && user.get().isInSurvivalMode())
{
ess.getPlugin().scheduleSyncDelayedTask(
new Runnable()
@@ -41,10 +39,11 @@ public class EssentialsBlockListener implements Listener
@Override
public void run()
{
- user.getInventory().addItem(itemstack);
- user.updateInventory();
+ user.get().getInventory().addItem(itemstack);
+ user.get().updateInventory();
}
});
}
+ return true;
}
}
diff --git a/Essentials/src/net/ess3/user/User.java b/Essentials/src/net/ess3/user/User.java
index 47224adfc..b959e36bc 100644
--- a/Essentials/src/net/ess3/user/User.java
+++ b/Essentials/src/net/ess3/user/User.java
@@ -750,6 +750,4 @@ public class User extends UserBase implements IUser
final boolean set = !vanished;
this.setVanished(set);
}
-
-
}