Created
June 15, 2014 15:21
-
-
Save blackwolf12333/8242b25193251595187d to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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