diff --git a/pom.xml b/pom.xml index d6893c3..5558897 100644 --- a/pom.xml +++ b/pom.xml @@ -23,7 +23,7 @@ lol.hyper toolstats - 1.2.2 + 1.2.3 jar ToolStats diff --git a/src/main/java/lol/hyper/toolstats/ToolStats.java b/src/main/java/lol/hyper/toolstats/ToolStats.java index a898174..64ee903 100644 --- a/src/main/java/lol/hyper/toolstats/ToolStats.java +++ b/src/main/java/lol/hyper/toolstats/ToolStats.java @@ -74,7 +74,7 @@ public final class ToolStats extends JavaPlugin { public final Logger logger = this.getLogger(); public final File configFile = new File(this.getDataFolder(), "config.yml"); public FileConfiguration config; - public final int CONFIG_VERSION = 2; + public final int CONFIG_VERSION = 3; @Override public void onEnable() { diff --git a/src/main/java/lol/hyper/toolstats/events/BlocksMined.java b/src/main/java/lol/hyper/toolstats/events/BlocksMined.java index b3f636d..1864fe8 100644 --- a/src/main/java/lol/hyper/toolstats/events/BlocksMined.java +++ b/src/main/java/lol/hyper/toolstats/events/BlocksMined.java @@ -44,6 +44,9 @@ public class BlocksMined implements Listener { @EventHandler public void onBreak(BlockBreakEvent event) { + if (event.isCancelled()) { + return; + } Player player = event.getPlayer(); if (player.getGameMode() != GameMode.SURVIVAL) { return; diff --git a/src/main/java/lol/hyper/toolstats/events/CraftItem.java b/src/main/java/lol/hyper/toolstats/events/CraftItem.java index 833041b..7e6cc74 100644 --- a/src/main/java/lol/hyper/toolstats/events/CraftItem.java +++ b/src/main/java/lol/hyper/toolstats/events/CraftItem.java @@ -19,6 +19,7 @@ package lol.hyper.toolstats.events; import lol.hyper.toolstats.ToolStats; import lol.hyper.toolstats.UUIDDataType; +import org.bukkit.ChatColor; import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; @@ -46,6 +47,9 @@ public class CraftItem implements Listener { @EventHandler public void onCraft(CraftItemEvent event) { + if (event.isCancelled()) { + return; + } Player player = (Player) event.getWhoClicked(); ItemStack itemStack = event.getCurrentItem(); if (itemStack == null || itemStack.getType() == Material.AIR) { @@ -54,6 +58,12 @@ public class CraftItem implements Listener { String name = itemStack.getType().toString().toLowerCase(Locale.ROOT); for (String x : validItems) { if (name.contains(x)) { + if (event.isShiftClick()) { + String configMessage = toolStats.config.getString("messages.shift-click-warning.crafting"); + if (configMessage != null) { + event.getWhoClicked().sendMessage(ChatColor.translateAlternateColorCodes('&', configMessage)); + } + } if (addLore(itemStack, player) == null) { return; } @@ -71,6 +81,11 @@ public class CraftItem implements Listener { long timeCreated = System.currentTimeMillis(); Date finalDate = new Date(timeCreated); PersistentDataContainer container = meta.getPersistentDataContainer(); + + if (container.has(toolStats.timeCreated, PersistentDataType.LONG) || container.has(toolStats.genericOwner, PersistentDataType.LONG)) { + return null; + } + container.set(toolStats.timeCreated, PersistentDataType.LONG, timeCreated); container.set(toolStats.genericOwner, new UUIDDataType(), owner.getUniqueId()); diff --git a/src/main/java/lol/hyper/toolstats/events/EntityDamage.java b/src/main/java/lol/hyper/toolstats/events/EntityDamage.java index e256bbf..203ab94 100644 --- a/src/main/java/lol/hyper/toolstats/events/EntityDamage.java +++ b/src/main/java/lol/hyper/toolstats/events/EntityDamage.java @@ -49,6 +49,9 @@ public class EntityDamage implements Listener { @EventHandler public void onDamage(EntityDamageByEntityEvent event) { + if (event.isCancelled()) { + return; + } if (!(event.getEntity() instanceof LivingEntity)) { return; } diff --git a/src/main/java/lol/hyper/toolstats/events/GenerateLoot.java b/src/main/java/lol/hyper/toolstats/events/GenerateLoot.java index 43fe112..a74598d 100644 --- a/src/main/java/lol/hyper/toolstats/events/GenerateLoot.java +++ b/src/main/java/lol/hyper/toolstats/events/GenerateLoot.java @@ -84,6 +84,11 @@ public class GenerateLoot implements Listener { long timeCreated = System.currentTimeMillis(); Date finalDate = new Date(timeCreated); PersistentDataContainer container = meta.getPersistentDataContainer(); + + if (container.has(toolStats.timeCreated, PersistentDataType.LONG) || container.has(toolStats.genericOwner, PersistentDataType.LONG)) { + return null; + } + container.set(toolStats.timeCreated, PersistentDataType.LONG, timeCreated); container.set(toolStats.genericOwner, new UUIDDataType(), owner.getUniqueId()); diff --git a/src/main/java/lol/hyper/toolstats/events/PickupItem.java b/src/main/java/lol/hyper/toolstats/events/PickupItem.java index 5ddc628..d6234dc 100644 --- a/src/main/java/lol/hyper/toolstats/events/PickupItem.java +++ b/src/main/java/lol/hyper/toolstats/events/PickupItem.java @@ -47,6 +47,9 @@ public class PickupItem implements Listener { @EventHandler public void onPickup(EntityPickupItemEvent event) { + if (event.isCancelled()) { + return; + } Entity entity = event.getEntity(); if (entity instanceof Player) { ItemStack itemStack = event.getItem().getItemStack(); diff --git a/src/main/java/lol/hyper/toolstats/events/PlayerFish.java b/src/main/java/lol/hyper/toolstats/events/PlayerFish.java index ef622f1..20787ad 100644 --- a/src/main/java/lol/hyper/toolstats/events/PlayerFish.java +++ b/src/main/java/lol/hyper/toolstats/events/PlayerFish.java @@ -50,6 +50,9 @@ public class PlayerFish implements Listener { @EventHandler public void onFish(PlayerFishEvent event) { + if (event.isCancelled()) { + return; + } // only listen to when a player catches a fish if (event.getState() != PlayerFishEvent.State.CAUGHT_FISH) { return; @@ -134,6 +137,11 @@ public class PlayerFish implements Listener { long timeCreated = System.currentTimeMillis(); Date finalDate = new Date(timeCreated); PersistentDataContainer container = meta.getPersistentDataContainer(); + + if (container.has(toolStats.timeCreated, PersistentDataType.LONG) || container.has(toolStats.genericOwner, PersistentDataType.LONG)) { + return; + } + container.set(toolStats.timeCreated, PersistentDataType.LONG, timeCreated); container.set(toolStats.genericOwner, new UUIDDataType(), owner.getUniqueId()); diff --git a/src/main/java/lol/hyper/toolstats/events/SheepShear.java b/src/main/java/lol/hyper/toolstats/events/SheepShear.java index 31d956a..3bd0c71 100644 --- a/src/main/java/lol/hyper/toolstats/events/SheepShear.java +++ b/src/main/java/lol/hyper/toolstats/events/SheepShear.java @@ -43,6 +43,9 @@ public class SheepShear implements Listener { @EventHandler public void onShear(PlayerInteractEntityEvent event) { + if (event.isCancelled()) { + return; + } Player player = event.getPlayer(); Entity entity = event.getRightClicked(); if (!(entity instanceof Sheep)) { diff --git a/src/main/java/lol/hyper/toolstats/events/VillagerTrade.java b/src/main/java/lol/hyper/toolstats/events/VillagerTrade.java index c43255b..6eec1b2 100644 --- a/src/main/java/lol/hyper/toolstats/events/VillagerTrade.java +++ b/src/main/java/lol/hyper/toolstats/events/VillagerTrade.java @@ -20,6 +20,7 @@ package lol.hyper.toolstats.events; import lol.hyper.toolstats.ToolStats; import lol.hyper.toolstats.UUIDDataType; import org.bukkit.Bukkit; +import org.bukkit.ChatColor; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; @@ -61,6 +62,12 @@ public class VillagerTrade implements Listener { ItemStack item = event.getCurrentItem(); for (String x : validItems) { if (item.getType().toString().toLowerCase(Locale.ROOT).contains(x)) { + if (event.isShiftClick()) { + String configMessage = toolStats.config.getString("messages.shift-click-warning.trading"); + if (configMessage != null) { + event.getWhoClicked().sendMessage(ChatColor.translateAlternateColorCodes('&', configMessage)); + } + } ItemStack newItem = addLore(item, (Player) event.getWhoClicked()); if (newItem == null) { return; @@ -80,6 +87,11 @@ public class VillagerTrade implements Listener { long timeCreated = System.currentTimeMillis(); Date finalDate = new Date(timeCreated); PersistentDataContainer container = meta.getPersistentDataContainer(); + + if (container.has(toolStats.timeCreated, PersistentDataType.LONG) || container.has(toolStats.genericOwner, PersistentDataType.LONG)) { + return null; + } + container.set(toolStats.timeCreated, PersistentDataType.LONG, timeCreated); container.set(toolStats.genericOwner, new UUIDDataType(), owner.getUniqueId()); diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 6827bf5..599fc9b 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -92,5 +92,10 @@ messages: sheep-sheared: "&7Sheep sheared: &8{sheep}" dropped-by: "&7Dropped by: &8{name}" # name will be player/mob name damage-taken: "&7Damage taken: &8{damage}" + # Display this message if the player shift click trades/crafts items. It's not really easy to get every single item + # that is crafted. The tag will only be added to the first item. If you don't want this message, simply replace them both with "" + shift-click-warning: + crafting: "&cCrafting items via shift clicking does not fully apply tags to each item. This is a limitation with the Bukkit API." + trading: "&cTrading items via shift clicking does not fully apply tags to each item. This is a limitation with the Bukkit API." -config-version: 2 \ No newline at end of file +config-version: 3 \ No newline at end of file