Skip to content

Instantly share code, notes, and snippets.

@blackwolf12333
Created June 15, 2014 15:21
Show Gist options
  • Save blackwolf12333/8242b25193251595187d to your computer and use it in GitHub Desktop.
Save blackwolf12333/8242b25193251595187d to your computer and use it in GitHub Desktop.
package tk.blackwolf12333.grieflog.utils.logging.worldedit;
import com.sk89q.worldedit.EditSession;
import com.sk89q.worldedit.Vector;
import com.sk89q.worldedit.WorldEdit;
import com.sk89q.worldedit.blocks.BaseBlock;
import com.sk89q.worldedit.entity.Player;
import com.sk89q.worldedit.event.extent.EditSessionEvent;
import com.sk89q.worldedit.extension.platform.Actor;
import com.sk89q.worldedit.extent.AbstractDelegateExtent;
import com.sk89q.worldedit.extent.Extent;
import com.sk89q.worldedit.util.eventbus.Subscribe;
import com.sk89q.worldedit.WorldEditException;
import tk.blackwolf12333.grieflog.GriefLog;
import tk.blackwolf12333.grieflog.data.block.BlockWorldEditChangeData;
import tk.blackwolf12333.grieflog.utils.logging.GriefLogger;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.block.BlockState;
import org.bukkit.block.Sign;
import java.util.UUID;
public class WorldEditLoggingHook {
GriefLog plugin;
public WorldEditLoggingHook(GriefLog plugin) {
this.plugin = plugin;
}
public void hook() {
WorldEdit.getInstance().getEventBus().register(new Object() {
@Subscribe
public void wrapForLogging(final EditSessionEvent event) {
GriefLog.debug("EditSessionEvent happening...");
final Actor actor = event.getActor();
if (actor == null || !(actor instanceof Player)) return;
String worldName = event.getWorld().getName();
final org.bukkit.World bukkitWorld = Bukkit.getWorld(worldName);
if (bukkitWorld == null) {
return;
}
UUID playerUUID = Bukkit.getPlayer(actor.getName()).getUniqueId();
event.setExtent(new LoggingExtent(event.getExtent(), event, worldName, actor.getName(), playerUUID));
}
});
}
private class LoggingExtent extends AbstractDelegateExtent {
String changedFromType;
byte changedFromData;
String world;
String playerName;
UUID playerUUID;
EditSessionEvent event;
public LoggingExtent(Extent extent, EditSessionEvent event, String world, String player, UUID playerUUID) {
super(extent);
this.event = event;
this.world = world;
this.playerName = player;
this.playerUUID = playerUUID;
}
@Override
public final boolean setBlock(Vector pt, BaseBlock b) throws WorldEditException {
Location location = new Location(Bukkit.getWorld(world), pt.getBlockX(), pt.getBlockY(), pt.getBlockZ());
Block block = location.getBlock();
if (event.getStage() == EditSession.Stage.BEFORE_CHANGE) {
changedFromType = block.getType().toString();
changedFromData = block.getData();
String changedTo = Material.getMaterial(b.getType()).toString();
byte changedToData = (byte)b.getData();
BlockWorldEditChangeData data = new BlockWorldEditChangeData(block, playerName, playerUUID, changedFromType, changedFromData, changedTo, changedToData);
new GriefLogger(data);
} /*else if(event.getStage() == EditSession.Stage.AFTER_CHANGE) {
String changedTo = block.getType().toString();
byte changedToData = block.getData();
BlockWorldEditChangeData data = new BlockWorldEditChangeData(block, playerName, playerUUID, changedFromType, changedFromData, changedTo, changedToData);
}*/
return super.setBlock(pt, b);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment