Added inventory transaction logging for placing items on a campfire (#357)
This commit is contained in:
parent
5973206bb3
commit
e7a6f21d88
4 changed files with 81 additions and 1 deletions
|
|
@ -3,6 +3,8 @@ package net.coreprotect.listener;
|
||||||
import org.bukkit.plugin.PluginManager;
|
import org.bukkit.plugin.PluginManager;
|
||||||
|
|
||||||
import net.coreprotect.CoreProtect;
|
import net.coreprotect.CoreProtect;
|
||||||
|
import net.coreprotect.bukkit.BukkitAdapter;
|
||||||
|
import net.coreprotect.config.ConfigHandler;
|
||||||
import net.coreprotect.listener.block.BlockBreakListener;
|
import net.coreprotect.listener.block.BlockBreakListener;
|
||||||
import net.coreprotect.listener.block.BlockBurnListener;
|
import net.coreprotect.listener.block.BlockBurnListener;
|
||||||
import net.coreprotect.listener.block.BlockDispenseListener;
|
import net.coreprotect.listener.block.BlockDispenseListener;
|
||||||
|
|
@ -15,6 +17,7 @@ import net.coreprotect.listener.block.BlockIgniteListener;
|
||||||
import net.coreprotect.listener.block.BlockPistonListener;
|
import net.coreprotect.listener.block.BlockPistonListener;
|
||||||
import net.coreprotect.listener.block.BlockPlaceListener;
|
import net.coreprotect.listener.block.BlockPlaceListener;
|
||||||
import net.coreprotect.listener.block.BlockSpreadListener;
|
import net.coreprotect.listener.block.BlockSpreadListener;
|
||||||
|
import net.coreprotect.listener.block.CampfireStartListener;
|
||||||
import net.coreprotect.listener.channel.PluginChannelHandshakeListener;
|
import net.coreprotect.listener.channel.PluginChannelHandshakeListener;
|
||||||
import net.coreprotect.listener.channel.PluginChannelListener;
|
import net.coreprotect.listener.channel.PluginChannelListener;
|
||||||
import net.coreprotect.listener.entity.CreatureSpawnListener;
|
import net.coreprotect.listener.entity.CreatureSpawnListener;
|
||||||
|
|
@ -83,6 +86,9 @@ public final class ListenerHandler {
|
||||||
pluginManager.registerEvents(new BlockPistonListener(), plugin);
|
pluginManager.registerEvents(new BlockPistonListener(), plugin);
|
||||||
pluginManager.registerEvents(new BlockPlaceListener(), plugin);
|
pluginManager.registerEvents(new BlockPlaceListener(), plugin);
|
||||||
pluginManager.registerEvents(new BlockSpreadListener(), plugin);
|
pluginManager.registerEvents(new BlockSpreadListener(), plugin);
|
||||||
|
if (ConfigHandler.SERVER_VERSION >= BukkitAdapter.BUKKIT_V1_20) {
|
||||||
|
pluginManager.registerEvents(new CampfireStartListener(), plugin);
|
||||||
|
}
|
||||||
|
|
||||||
// Entity Listeners
|
// Entity Listeners
|
||||||
pluginManager.registerEvents(new CreatureSpawnListener(), plugin);
|
pluginManager.registerEvents(new CreatureSpawnListener(), plugin);
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,48 @@
|
||||||
|
package net.coreprotect.listener.block;
|
||||||
|
|
||||||
|
import org.bukkit.Location;
|
||||||
|
import org.bukkit.block.Block;
|
||||||
|
import org.bukkit.event.EventHandler;
|
||||||
|
import org.bukkit.event.EventPriority;
|
||||||
|
import org.bukkit.event.Listener;
|
||||||
|
import org.bukkit.event.block.CampfireStartEvent;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
|
import net.coreprotect.consumer.Queue;
|
||||||
|
import net.coreprotect.listener.player.PlayerDropItemListener;
|
||||||
|
import net.coreprotect.thread.CacheHandler;
|
||||||
|
import net.coreprotect.utility.Util;
|
||||||
|
|
||||||
|
public final class CampfireStartListener extends Queue implements Listener {
|
||||||
|
|
||||||
|
@EventHandler(priority = EventPriority.MONITOR)
|
||||||
|
protected void onCampfireStart(CampfireStartEvent event) {
|
||||||
|
Block block = event.getBlock();
|
||||||
|
Location location = block.getLocation();
|
||||||
|
int worldId = Util.getWorldId(location.getWorld().getName());
|
||||||
|
int x = location.getBlockX();
|
||||||
|
int y = location.getBlockY();
|
||||||
|
int z = location.getBlockZ();
|
||||||
|
String coordinates = x + "." + y + "." + z + "." + worldId + "." + block.getType().name();
|
||||||
|
String user = "#entity";
|
||||||
|
|
||||||
|
Object[] data = CacheHandler.interactCache.get(coordinates);
|
||||||
|
if (data != null && data[1].equals(event.getSource())) {
|
||||||
|
long newTime = System.currentTimeMillis();
|
||||||
|
long oldTime = (long) data[0];
|
||||||
|
if ((newTime - oldTime) < 20) { // 50ms = 1 tick
|
||||||
|
user = (String) data[2];
|
||||||
|
}
|
||||||
|
CacheHandler.interactCache.remove(coordinates);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (user.equals("#entity")) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
ItemStack itemStack = event.getSource().clone();
|
||||||
|
itemStack.setAmount(1);
|
||||||
|
PlayerDropItemListener.playerDropItem(event.getBlock().getLocation(), user, itemStack);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -18,7 +18,7 @@ import net.coreprotect.consumer.Queue;
|
||||||
|
|
||||||
public final class PlayerDropItemListener extends Queue implements Listener {
|
public final class PlayerDropItemListener extends Queue implements Listener {
|
||||||
|
|
||||||
protected static void playerDropItem(Location location, String user, ItemStack itemStack) {
|
public static void playerDropItem(Location location, String user, ItemStack itemStack) {
|
||||||
if (!Config.getConfig(location.getWorld()).ITEM_DROPS || itemStack == null) {
|
if (!Config.getConfig(location.getWorld()).ITEM_DROPS || itemStack == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -640,6 +640,32 @@ public final class PlayerInteractListener extends Queue implements Listener {
|
||||||
});
|
});
|
||||||
*/
|
*/
|
||||||
}
|
}
|
||||||
|
else if (type == Material.CAMPFIRE || type == Material.SOUL_CAMPFIRE) {
|
||||||
|
ItemStack handItem = null;
|
||||||
|
ItemStack mainHand = player.getInventory().getItemInMainHand();
|
||||||
|
ItemStack offHand = player.getInventory().getItemInOffHand();
|
||||||
|
|
||||||
|
if (event.getHand().equals(EquipmentSlot.HAND) && mainHand != null && mainHand.getType() != Material.BUCKET) {
|
||||||
|
handItem = mainHand;
|
||||||
|
}
|
||||||
|
else if (event.getHand().equals(EquipmentSlot.OFF_HAND) && offHand != null) {
|
||||||
|
handItem = offHand;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (player.getGameMode() != GameMode.CREATIVE) {
|
||||||
|
Location location = block.getLocation();
|
||||||
|
long time = System.currentTimeMillis();
|
||||||
|
int wid = Util.getWorldId(location.getWorld().getName());
|
||||||
|
int x = location.getBlockX();
|
||||||
|
int y = location.getBlockY();
|
||||||
|
int z = location.getBlockZ();
|
||||||
|
String coordinates = x + "." + y + "." + z + "." + wid + "." + type.name();
|
||||||
|
CacheHandler.interactCache.put(coordinates, new Object[] { time, handItem, player.getName() });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
isCake = type.name().endsWith(Material.CAKE.name());
|
isCake = type.name().endsWith(Material.CAKE.name());
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue