diff --git a/build.xml b/build.xml index 205c44da2..f18a9482e 100644 --- a/build.xml +++ b/build.xml @@ -21,6 +21,7 @@ + diff --git a/src/com/sk89q/worldedit/bukkit/BukkitPlayer.java b/src/com/sk89q/worldedit/bukkit/BukkitPlayer.java new file mode 100644 index 000000000..58d900039 --- /dev/null +++ b/src/com/sk89q/worldedit/bukkit/BukkitPlayer.java @@ -0,0 +1,122 @@ +// $Id$ +/* + * WorldEdit + * Copyright (C) 2010 sk89q + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . +*/ + +package com.sk89q.worldedit.bukkit; + +import org.bukkit.*; +import com.sk89q.worldedit.*; +import com.sk89q.worldedit.bags.BlockBag; + +public class BukkitPlayer extends WorldEditPlayer { + private Player player; + + public BukkitPlayer(Player player) { + this.player = player; + } + + @Override + public Vector getBlockTrace(int range) { + // TODO Auto-generated method stub + return null; + } + + @Override + public Vector getSolidBlockTrace(int range) { + // TODO Auto-generated method stub + return null; + } + + @Override + public int getItemInHand() { + ItemStack itemStack = player.getSelectedItem(); + return itemStack != null ? itemStack.getTypeID() : 0; + } + + @Override + public String getName() { + return player.getName(); + } + + @Override + public Vector getPosition() { + Location loc = player.getLocation(); + return new Vector(loc.getX(), loc.getY(), loc.getZ()); + } + + @Override + public double getPitch() { + return player.getLocation().getPitch(); + } + + @Override + public double getYaw() { + return player.getLocation().getYaw(); + } + + @Override + public void giveItem(int type, int amt) { + // TODO Auto-generated method stub + + } + + @Override + public boolean passThroughForwardWall(int range) { + // TODO Auto-generated method stub + return false; + } + + @Override + public void printRaw(String msg) { + player.sendMessage(msg); + } + + @Override + public void print(String msg) { + player.sendMessage(msg); + } + + @Override + public void printError(String msg) { + player.sendMessage(msg); + } + + @Override + public void setPosition(Vector pos, float pitch, float yaw) { + // TODO Auto-generated method stub + } + + @Override + public String[] getGroups() { + // TODO Auto-generated method stub + return null; + } + + @Override + public BlockBag getInventoryBlockBag() { + // TODO Auto-generated method stub + return null; + } + + @Override + public boolean hasPermission(String perm) { + // TODO Auto-generated method stub + return true; + } + +} diff --git a/src/com/sk89q/worldedit/bukkit/BukkitServerInterface.java b/src/com/sk89q/worldedit/bukkit/BukkitServerInterface.java new file mode 100644 index 000000000..c997c620d --- /dev/null +++ b/src/com/sk89q/worldedit/bukkit/BukkitServerInterface.java @@ -0,0 +1,147 @@ +// $Id$ +/* + * WorldEdit + * Copyright (C) 2010 sk89q + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . +*/ + +package com.sk89q.worldedit.bukkit; + +import org.bukkit.*; +import com.sk89q.worldedit.EditSession; +import com.sk89q.worldedit.ServerInterface; +import com.sk89q.worldedit.Vector; +import com.sk89q.worldedit.blocks.BaseItemStack; + +public class BukkitServerInterface extends ServerInterface { + public Server server; + + public BukkitServerInterface(Server server) { + this.server = server; + } + + @Override + public boolean setBlockType(Vector pt, int type) { + // TODO Auto-generated method stub + return false; + } + + @Override + public int getBlockType(Vector pt) { + return server.getWorlds()[0].getBlockAt(pt.getBlockX(), pt.getBlockY(), pt.getBlockZ()).getType(); + } + + @Override + public void setBlockData(Vector pt, int data) { + // TODO Auto-generated method stub + + } + + @Override + public int getBlockData(Vector pt) { + return server.getWorlds()[0].getBlockAt(pt.getBlockX(), pt.getBlockY(), pt.getBlockZ()).getData(); + } + + @Override + public void setSignText(Vector pt, String[] text) { + // TODO Auto-generated method stub + + } + + @Override + public String[] getSignText(Vector pt) { + // TODO Auto-generated method stub + return null; + } + + @Override + public BaseItemStack[] getChestContents(Vector pt) { + // TODO Auto-generated method stub + return null; + } + + @Override + public boolean setChestContents(Vector pt, BaseItemStack[] contents) { + // TODO Auto-generated method stub + return false; + } + + @Override + public boolean clearChest(Vector pt) { + // TODO Auto-generated method stub + return false; + } + + @Override + public boolean isValidMobType(String type) { + // TODO Auto-generated method stub + return false; + } + + @Override + public void setMobSpawnerType(Vector pt, String mobType) { + // TODO Auto-generated method stub + + } + + @Override + public String getMobSpawnerType(Vector pt) { + // TODO Auto-generated method stub + return null; + } + + @Override + public boolean generateTree(EditSession editSession, Vector pt) { + // TODO Auto-generated method stub + return false; + } + + @Override + public void dropItem(Vector pt, int type, int count, int times) { + // TODO Auto-generated method stub + + } + + @Override + public void dropItem(Vector pt, int type, int count) { + // TODO Auto-generated method stub + + } + + @Override + public void dropItem(Vector pt, int type) { + // TODO Auto-generated method stub + + } + + @Override + public void simulateBlockMine(Vector pt) { + // TODO Auto-generated method stub + + } + + @Override + public int resolveItem(String name) { + // TODO Auto-generated method stub + return 0; + } + + @Override + public int killMobs(Vector origin, int radius) { + // TODO Auto-generated method stub + return 0; + } + +} diff --git a/src/com/sk89q/worldedit/bukkit/WorldEditBlockListener.java b/src/com/sk89q/worldedit/bukkit/WorldEditBlockListener.java new file mode 100644 index 000000000..d77f68a5c --- /dev/null +++ b/src/com/sk89q/worldedit/bukkit/WorldEditBlockListener.java @@ -0,0 +1,67 @@ +// $Id$ +/* + * WorldEdit + * Copyright (C) 2010 sk89q + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . +*/ + +package com.sk89q.worldedit.bukkit; + +import org.bukkit.event.block.BlockListener; +import org.bukkit.event.block.BlockBrokenEvent; +import org.bukkit.event.block.BlockRightClickedEvent; +import com.sk89q.worldedit.*; + +public class WorldEditBlockListener extends BlockListener { + /** + * Plugin. + */ + private WorldEditPlugin plugin; + + /** + * Construct the object; + * + * @param plugin + */ + public WorldEditBlockListener(WorldEditPlugin plugin) { + this.plugin = plugin; + } + + /** + * Called when a block is broken (or destroyed) + * + * @param event Relevant event details + */ + public void onBlockBroken(BlockBrokenEvent event) { + Vector pos = new Vector(event.getBlock().getX(), + event.getBlock().getY(), + event.getBlock().getZ()); + WorldEditPlayer player = new BukkitPlayer(plugin.getServer().getOnlinePlayers()[0]); + plugin.controller.handleBlockLeftClick(player, pos); + } + + /** + * Called when a player right clicks a block + * + * @param event Relevant event details + */ + public void onBlockRightClicked(BlockRightClickedEvent event) { + Vector pos = new Vector(event.getBlock().getX(), + event.getBlock().getY(), + event.getBlock().getZ()); + WorldEditPlayer player = new BukkitPlayer(plugin.getServer().getOnlinePlayers()[0]); + plugin.controller.handleBlockRightClick(player, pos); + } +} diff --git a/src/com/sk89q/worldedit/bukkit/WorldEditPlayerListener.java b/src/com/sk89q/worldedit/bukkit/WorldEditPlayerListener.java new file mode 100644 index 000000000..e62c2c5b0 --- /dev/null +++ b/src/com/sk89q/worldedit/bukkit/WorldEditPlayerListener.java @@ -0,0 +1,65 @@ +// $Id$ +/* + * WorldEdit + * Copyright (C) 2010 sk89q + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . +*/ + +package com.sk89q.worldedit.bukkit; + +import org.bukkit.event.player.PlayerChatEvent; +import org.bukkit.event.player.PlayerEvent; +import org.bukkit.event.player.PlayerListener; + +import com.sk89q.worldedit.WorldEditPlayer; + +/** + * Handles all events thrown in relation to a Player + */ +public class WorldEditPlayerListener extends PlayerListener { + /** + * Plugin. + */ + private WorldEditPlugin plugin; + + /** + * Construct the object; + * + * @param plugin + */ + public WorldEditPlayerListener(WorldEditPlugin plugin) { + this.plugin = plugin; + } + + /** + * Called when a player leaves a server + * + * @param event Relevant event details + */ + public void onPlayerQuit(PlayerEvent event) { + WorldEditPlayer player = new BukkitPlayer(plugin.getServer().getOnlinePlayers()[0]); + plugin.controller.handleDisconnect(player); + } + + /** + * Called when a player attempts to use a command + * + * @param event Relevant event details + */ + public void onPlayerCommand(PlayerChatEvent event) { + WorldEditPlayer player = new BukkitPlayer(plugin.getServer().getOnlinePlayers()[0]); + plugin.controller.handleCommand(player, event.getMessage().split(" ")); + } +} diff --git a/src/com/sk89q/worldedit/bukkit/WorldEditPlugin.java b/src/com/sk89q/worldedit/bukkit/WorldEditPlugin.java new file mode 100644 index 000000000..7ea755e92 --- /dev/null +++ b/src/com/sk89q/worldedit/bukkit/WorldEditPlugin.java @@ -0,0 +1,85 @@ +// $Id$ +/* + * WorldEdit + * Copyright (C) 2010 sk89q + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . +*/ + +package com.sk89q.worldedit.bukkit; + +import java.io.File; +import java.util.HashSet; +import org.bukkit.Server; +import org.bukkit.event.Event.Priority; +import org.bukkit.event.Event; +import org.bukkit.plugin.PluginDescriptionFile; +import org.bukkit.plugin.PluginLoader; +import org.bukkit.plugin.java.JavaPlugin; +import com.sk89q.worldedit.*; + +public class WorldEditPlugin extends JavaPlugin { + public final WorldEditController controller = + new WorldEditController(); + + private final WorldEditPlayerListener playerListener = + new WorldEditPlayerListener(this); + private final WorldEditBlockListener blockListener = + new WorldEditBlockListener(this); + + public WorldEditPlugin(PluginLoader pluginLoader, Server instance, + PluginDescriptionFile desc, File plugin, ClassLoader cLoader) { + super(pluginLoader, instance, desc, plugin, cLoader); + + registerEvents(); + } + + public void onEnable() { + //loadConfiguration(); + + ServerInterface.setup(new BukkitServerInterface(getServer())); + + controller.profile = true; + controller.allowedBlocks = new HashSet(); + controller.defaultChangeLimit = -1; + controller.maxChangeLimit = -1; + controller.shellSaveType = "sh"; + controller.snapshotRepo = null; + controller.maxRadius = -1; + controller.maxSuperPickaxeSize = 5; + controller.logComands = false; + controller.registerHelp = true; + controller.wandItem = 271; + controller.superPickaxeDrop = true; + controller.superPickaxeManyDrop = true; + controller.noDoubleSlash = true; + controller.useInventory = false; + controller.useInventoryOverride = false; + } + + public void onDisable() { + controller.clearSessions(); + } + + private void registerEvents() { + getServer().getPluginManager().registerEvent(Event.Type.PLAYER_QUIT, + playerListener, Priority.Normal, this); + getServer().getPluginManager().registerEvent(Event.Type.PLAYER_COMMAND, + playerListener, Priority.Normal, this); + getServer().getPluginManager().registerEvent(Event.Type.BLOCK_DAMAGED, + blockListener, Priority.Normal, this); + getServer().getPluginManager().registerEvent(Event.Type.BLOCK_RIGHTCLICKED, + blockListener, Priority.Normal, this); + } +}