fix lectern logging

This commit is contained in:
Brokkonaut
2024-09-21 07:41:32 +02:00
parent d1ecbe0efc
commit dc9774b7c6

View File

@@ -1,18 +1,24 @@
package de.diddiz.LogBlock.listeners; package de.diddiz.LogBlock.listeners;
import static de.diddiz.LogBlock.config.Config.getWorldConfig; import static de.diddiz.LogBlock.config.Config.getWorldConfig;
import static de.diddiz.LogBlock.config.Config.isLogging;
import de.diddiz.LogBlock.Actor; import de.diddiz.LogBlock.Actor;
import de.diddiz.LogBlock.LogBlock; import de.diddiz.LogBlock.LogBlock;
import de.diddiz.LogBlock.Logging; import de.diddiz.LogBlock.Logging;
import de.diddiz.LogBlock.config.WorldConfig; import de.diddiz.LogBlock.config.WorldConfig;
import org.bukkit.Bukkit;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.block.BlockState; import org.bukkit.Tag;
import org.bukkit.block.Block;
import org.bukkit.block.Lectern; import org.bukkit.block.Lectern;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority; import org.bukkit.event.EventPriority;
import org.bukkit.event.block.BlockPlaceEvent; import org.bukkit.event.block.Action;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.event.player.PlayerTakeLecternBookEvent; import org.bukkit.event.player.PlayerTakeLecternBookEvent;
import org.bukkit.inventory.EquipmentSlot;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
public class LecternLogging extends LoggingListener { public class LecternLogging extends LoggingListener {
@@ -21,25 +27,31 @@ public class LecternLogging extends LoggingListener {
} }
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
public void onBlockPlace(BlockPlaceEvent event) { public void onPlayerInteract(PlayerInteractEvent event) {
final WorldConfig wcfg = getWorldConfig(event.getPlayer().getWorld()); final Block clicked = event.getClickedBlock();
if (wcfg != null && wcfg.isLogging(Logging.LECTERNBOOKCHANGE)) { if (event.getAction() != Action.RIGHT_CLICK_BLOCK || event.getHand() != EquipmentSlot.HAND || !event.hasBlock() || clicked == null) {
final BlockState before = event.getBlockReplacedState(); return;
final BlockState after = event.getBlockPlaced().getState(); }
if (before.getType() == Material.LECTERN && after.getType() == Material.LECTERN) { final Player player = event.getPlayer();
Lectern lecternBefore = (Lectern) before.getBlock().getState(); if (!isLogging(player.getWorld(), Logging.LECTERNBOOKCHANGE)) {
ItemStack book = lecternBefore.getSnapshotInventory().getItem(0); return;
try { }
lecternBefore.getSnapshotInventory().setItem(0, null); final Material type = clicked.getType();
} catch (NullPointerException e) { if (type == Material.LECTERN) {
//ignored ItemStack mainHand = player.getInventory().getItemInMainHand();
} if (mainHand != null && mainHand.getType() != Material.AIR && Tag.ITEMS_LECTERN_BOOKS.isTagged(mainHand.getType()) && clicked.getState() instanceof Lectern lectern) {
lecternBefore.setBlockData(before.getBlockData()); ItemStack currentInLectern = lectern.getSnapshotInventory().getItem(0);
consumer.queueBlockReplace(Actor.actorFromEntity(event.getPlayer()), lecternBefore, after); if (currentInLectern == null || currentInLectern.getType() == Material.AIR) {
try { ItemStack stack = mainHand.clone();
lecternBefore.getSnapshotInventory().setItem(0, book); stack.setAmount(1);
} catch (NullPointerException e) { Lectern newLectern = (Lectern) clicked.getState();
//ignored newLectern.getSnapshotInventory().setItem(0, stack);
org.bukkit.block.data.type.Lectern blockDataOld = (org.bukkit.block.data.type.Lectern) newLectern.getBlockData();
org.bukkit.block.data.type.Lectern blockDataWithBook = (org.bukkit.block.data.type.Lectern) Bukkit.createBlockData("lectern[has_book=true]");
blockDataWithBook.setFacing(blockDataOld.getFacing());
blockDataWithBook.setPowered(blockDataOld.isPowered());
newLectern.setBlockData(blockDataWithBook);
consumer.queueBlockReplace(Actor.actorFromEntity(event.getPlayer()), lectern, newLectern);
} }
} }
} }