Added logging and inventory rollback support for players breaking items

This commit is contained in:
Intelli 2022-02-24 20:03:28 -07:00
parent 5494bce0fc
commit 45f9f4316e
2 changed files with 46 additions and 2 deletions

View File

@ -39,6 +39,7 @@ import net.coreprotect.listener.player.PlayerDeathListener;
import net.coreprotect.listener.player.PlayerDropItemListener;
import net.coreprotect.listener.player.PlayerInteractEntityListener;
import net.coreprotect.listener.player.PlayerInteractListener;
import net.coreprotect.listener.player.PlayerItemBreakListener;
import net.coreprotect.listener.player.PlayerJoinListener;
import net.coreprotect.listener.player.PlayerQuitListener;
import net.coreprotect.listener.player.PlayerTakeLecternBookListener;
@ -86,6 +87,7 @@ public final class ListenerHandler {
// Player Listeners
pluginManager.registerEvents(new ArmorStandManipulateListener(), plugin);
pluginManager.registerEvents(new CraftItemListener(), plugin);
pluginManager.registerEvents(new FoodLevelChangeListener(), plugin);
pluginManager.registerEvents(new InventoryChangeListener(), plugin);
pluginManager.registerEvents(new PlayerBucketEmptyListener(), plugin);
pluginManager.registerEvents(new PlayerBucketFillListener(), plugin);
@ -93,12 +95,12 @@ public final class ListenerHandler {
pluginManager.registerEvents(new PlayerDeathListener(), plugin);
pluginManager.registerEvents(new PlayerDropItemListener(), plugin);
pluginManager.registerEvents(new PlayerPickupArrowListener(), plugin);
pluginManager.registerEvents(new FoodLevelChangeListener(), plugin);
pluginManager.registerEvents(new PlayerInteractEntityListener(), plugin);
pluginManager.registerEvents(new PlayerInteractListener(), plugin);
pluginManager.registerEvents(new PlayerItemBreakListener(), plugin);
pluginManager.registerEvents(new PlayerJoinListener(), plugin);
pluginManager.registerEvents(new PlayerQuitListener(), plugin);
pluginManager.registerEvents(new SignChangeListener(), plugin);
pluginManager.registerEvents(new PlayerInteractListener(), plugin);
pluginManager.registerEvents(new PlayerTakeLecternBookListener(), plugin);
pluginManager.registerEvents(new ProjectileLaunchListener(), plugin);

View File

@ -0,0 +1,42 @@
package net.coreprotect.listener.player;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
import org.bukkit.Location;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerItemBreakEvent;
import org.bukkit.inventory.ItemStack;
import net.coreprotect.config.Config;
import net.coreprotect.config.ConfigHandler;
import net.coreprotect.consumer.Queue;
public final class PlayerItemBreakListener extends Queue implements Listener {
protected static void playerBreakItem(Location location, String user, ItemStack itemStack) {
if (!Config.getConfig(location.getWorld()).ITEM_TRANSACTIONS || itemStack == null) {
return;
}
String loggingItemId = user.toLowerCase(Locale.ROOT) + "." + location.getBlockX() + "." + location.getBlockY() + "." + location.getBlockZ();
int itemId = getItemId(loggingItemId);
List<ItemStack> list = ConfigHandler.itemsBreak.getOrDefault(loggingItemId, new ArrayList<>());
list.add(itemStack.clone());
ConfigHandler.itemsBreak.put(loggingItemId, list);
int time = (int) (System.currentTimeMillis() / 1000L) + 1;
Queue.queueItemTransaction(user, location.clone(), time, 0, itemId);
}
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
protected void onPlayerItemBreak(PlayerItemBreakEvent event) {
ItemStack itemStack = event.getBrokenItem();
playerBreakItem(event.getPlayer().getLocation(), event.getPlayer().getName(), itemStack);
}
}