Log lectern book change

This commit is contained in:
Brokkonaut
2019-05-28 05:25:25 +02:00
parent 424ef3b02b
commit da692ed01a
7 changed files with 92 additions and 2 deletions

View File

@ -13,6 +13,7 @@ import org.bukkit.block.data.Openable;
import org.bukkit.block.data.Powerable;
import org.bukkit.block.data.type.Comparator;
import org.bukkit.block.data.type.DaylightDetector;
import org.bukkit.block.data.type.Lectern;
import org.bukkit.block.data.type.NoteBlock;
import org.bukkit.block.data.type.Repeater;
import org.bukkit.block.data.type.Sign;
@ -141,6 +142,8 @@ public class BlockChange implements LookupCacheElement {
msg.append("set ").append(type.getMaterial().name()).append(" to ").append(((Comparator) type).getMode());
} else if (type.getMaterial() == Material.DAYLIGHT_DETECTOR) {
msg.append("set ").append(type.getMaterial().name()).append(" to ").append(((DaylightDetector) type).isInverted() ? "inverted" : "normal");
} else if (type instanceof Lectern) {
msg.append("changed the book on a ").append(type.getMaterial().name()).append(" to").append(replacedDetails.length() == 0 ? "empty" : replacedDetails);
} else if (type instanceof Powerable) {
msg.append("stepped on ").append(type.getMaterial().name());
} else if (type.getMaterial() == Material.TRIPWIRE) {

View File

@ -189,6 +189,9 @@ public class LogBlock extends JavaPlugin {
if (isLogging(Logging.DRAGONEGGTELEPORT)) {
pm.registerEvents(new DragonEggLogging(this), this);
}
if (isLogging(Logging.LECTERNBOOKCHANGE)) {
pm.registerEvents(new LecternLogging(this), this);
}
if (Config.isLoggingAnyEntities()) {
if (!WorldEditHelper.hasFullWorldEdit()) {
getLogger().severe("No compatible WorldEdit found, entity logging will not work!");

View File

@ -8,7 +8,8 @@ public enum Logging {
PRESUREPLATEINTERACT, TRIPWIREINTERACT, CREATURECROPTRAMPLE, CROPTRAMPLE,
NATURALSTRUCTUREGROW, GRASSGROWTH, MYCELIUMSPREAD, VINEGROWTH, MUSHROOMSPREAD,
WITHER(true), WITHER_SKULL(true), BONEMEALSTRUCTUREGROW, WORLDEDIT, TNTMINECARTEXPLOSION(true),
ENDERCRYSTALEXPLOSION(true), BEDEXPLOSION(true), DRAGONEGGTELEPORT(true), DAYLIGHTDETECTORINTERACT;
ENDERCRYSTALEXPLOSION(true), BEDEXPLOSION(true), DRAGONEGGTELEPORT(true), DAYLIGHTDETECTORINTERACT,
LECTERNBOOKCHANGE(true);
public static final int length = Logging.values().length;
private final boolean defaultEnabled;

View File

@ -0,0 +1,50 @@
package de.diddiz.LogBlock.blockstate;
import org.bukkit.Material;
import org.bukkit.block.BlockState;
import org.bukkit.block.Lectern;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.inventory.ItemStack;
public class BlockStateCodecLectern implements BlockStateCodec {
@Override
public Material[] getApplicableMaterials() {
return new Material[] { Material.LECTERN };
}
@Override
public YamlConfiguration serialize(BlockState state) {
if (state instanceof Lectern) {
Lectern lectern = (Lectern) state;
ItemStack book = lectern.getSnapshotInventory().getItem(0);
if (book != null && book.getType() != Material.AIR) {
YamlConfiguration conf = new YamlConfiguration();
conf.set("book", book);
return conf;
}
}
return null;
}
@Override
public void deserialize(BlockState state, YamlConfiguration conf) {
if (state instanceof Lectern) {
Lectern lectern = (Lectern) state;
ItemStack book = null;
if (conf != null) {
book = conf.getItemStack("book");
}
lectern.getSnapshotInventory().setItem(0, book);
}
}
@Override
public String toString(YamlConfiguration conf) {
if (conf != null) {
StringBuilder sb = new StringBuilder();
sb.append("[").append("book").append("]");
return sb.toString();
}
return null;
}
}

View File

@ -25,6 +25,7 @@ public class BlockStateCodecs {
registerCodec(new BlockStateCodecSkull());
registerCodec(new BlockStateCodecBanner());
registerCodec(new BlockStateCodecSpawner());
registerCodec(new BlockStateCodecLectern());
}
public static boolean hasCodec(Material material) {

View File

@ -29,7 +29,9 @@ public class BlockPlaceLogging extends LoggingListener {
final BlockState before = event.getBlockReplacedState();
final BlockState after = event.getBlockPlaced().getState();
final Actor actor = Actor.actorFromEntity(event.getPlayer());
if (before.getType() == Material.LECTERN && after.getType() == Material.LECTERN && !Config.isLogging(event.getBlock().getWorld(), Logging.LECTERNBOOKCHANGE)) {
return;
}
LoggingUtil.smartLogBlockPlace(consumer, actor, before, after);
}
}

View File

@ -0,0 +1,30 @@
package de.diddiz.LogBlock.listeners;
import static de.diddiz.LogBlock.config.Config.getWorldConfig;
import de.diddiz.LogBlock.Actor;
import de.diddiz.LogBlock.LogBlock;
import de.diddiz.LogBlock.Logging;
import de.diddiz.LogBlock.config.WorldConfig;
import org.bukkit.block.Lectern;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.player.PlayerTakeLecternBookEvent;
public class LecternLogging extends LoggingListener {
public LecternLogging(LogBlock lb) {
super(lb);
}
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
public void onPlayerTakeLecternBook(PlayerTakeLecternBookEvent event) {
final WorldConfig wcfg = getWorldConfig(event.getPlayer().getWorld());
if (wcfg != null && wcfg.isLogging(Logging.LECTERNBOOKCHANGE)) {
Lectern oldState = event.getLectern();
Lectern newState = (Lectern) oldState.getBlock().getState();
newState.getSnapshotInventory().setItem(0, null);
consumer.queueBlockReplace(Actor.actorFromEntity(event.getPlayer()), oldState, newState);
}
}
}