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