improve nametag logic
This commit is contained in:
parent
d6044564b1
commit
38639979d6
@ -21,10 +21,10 @@ import org.bukkit.event.HandlerList;
|
|||||||
import org.bukkit.event.Listener;
|
import org.bukkit.event.Listener;
|
||||||
import org.bukkit.event.player.PlayerInteractEntityEvent;
|
import org.bukkit.event.player.PlayerInteractEntityEvent;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
import org.bukkit.inventory.meta.ItemMeta;
|
||||||
|
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Optional;
|
|
||||||
|
|
||||||
public class OptimizeByNametag implements VillagerOptimizerModule, Listener {
|
public class OptimizeByNametag implements VillagerOptimizerModule, Listener {
|
||||||
|
|
||||||
@ -74,11 +74,13 @@ public class OptimizeByNametag implements VillagerOptimizerModule, Listener {
|
|||||||
Player player = event.getPlayer();
|
Player player = event.getPlayer();
|
||||||
if (!player.hasPermission(Permissions.Optimize.NAMETAG.get())) return;
|
if (!player.hasPermission(Permissions.Optimize.NAMETAG.get())) return;
|
||||||
|
|
||||||
this.getNameTag(
|
ItemStack usedItem = player.getInventory().getItem(event.getHand());
|
||||||
player.getInventory().getItemInMainHand(),
|
if (!usedItem.getType().equals(Material.NAME_TAG)) return;
|
||||||
player.getInventory().getItemInOffHand()
|
ItemMeta meta = usedItem.getItemMeta();
|
||||||
).ifPresent(nametagItem -> {
|
if (!meta.hasDisplayName()) return;
|
||||||
Component newVillagerName = nametagItem.getItemMeta().displayName();
|
|
||||||
|
// Get component name first, so we can manually name the villager when canceling the event to avoid item consumption.
|
||||||
|
Component newVillagerName = meta.displayName();
|
||||||
assert newVillagerName != null; // Legitimate since we checked for hasDisplayName()
|
assert newVillagerName != null; // Legitimate since we checked for hasDisplayName()
|
||||||
Villager villager = (Villager) event.getRightClicked();
|
Villager villager = (Villager) event.getRightClicked();
|
||||||
|
|
||||||
@ -87,10 +89,10 @@ public class OptimizeByNametag implements VillagerOptimizerModule, Listener {
|
|||||||
villager.customName(newVillagerName);
|
villager.customName(newVillagerName);
|
||||||
}
|
}
|
||||||
|
|
||||||
final String nameTag = PlainTextComponentSerializer.plainText().serialize(newVillagerName);
|
final String name = PlainTextComponentSerializer.plainText().serialize(newVillagerName);
|
||||||
WrappedVillager wVillager = villagerCache.getOrAdd(villager);
|
WrappedVillager wVillager = villagerCache.getOrAdd(villager);
|
||||||
|
|
||||||
if (nametags.contains(nameTag.toLowerCase())) {
|
if (nametags.contains(name.toLowerCase())) {
|
||||||
if (wVillager.canOptimize(cooldown) || player.hasPermission(Permissions.Bypass.NAMETAG_COOLDOWN.get())) {
|
if (wVillager.canOptimize(cooldown) || player.hasPermission(Permissions.Bypass.NAMETAG_COOLDOWN.get())) {
|
||||||
wVillager.setOptimization(OptimizationType.NAMETAG);
|
wVillager.setOptimization(OptimizationType.NAMETAG);
|
||||||
wVillager.saveOptimizeTime();
|
wVillager.saveOptimizeTime();
|
||||||
@ -98,7 +100,7 @@ public class OptimizeByNametag implements VillagerOptimizerModule, Listener {
|
|||||||
if (shouldNotifyPlayer)
|
if (shouldNotifyPlayer)
|
||||||
VillagerOptimizer.getLang(player.locale()).nametag_optimize_success.forEach(player::sendMessage);
|
VillagerOptimizer.getLang(player.locale()).nametag_optimize_success.forEach(player::sendMessage);
|
||||||
if (shouldLog)
|
if (shouldLog)
|
||||||
VillagerOptimizer.getLog().info(player.getName() + " optimized a villager using nametag: '" + nameTag + "'");
|
VillagerOptimizer.getLog().info(player.getName() + " optimized a villager using nametag: '" + name + "'");
|
||||||
} else {
|
} else {
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
villager.shakeHead();
|
villager.shakeHead();
|
||||||
@ -114,17 +116,8 @@ public class OptimizeByNametag implements VillagerOptimizerModule, Listener {
|
|||||||
if (shouldNotifyPlayer)
|
if (shouldNotifyPlayer)
|
||||||
VillagerOptimizer.getLang(player.locale()).nametag_unoptimize_success.forEach(player::sendMessage);
|
VillagerOptimizer.getLang(player.locale()).nametag_unoptimize_success.forEach(player::sendMessage);
|
||||||
if (shouldLog)
|
if (shouldLog)
|
||||||
VillagerOptimizer.getLog().info(event.getPlayer().getName() + " disabled optimizations for a villager using nametag: '" + nameTag + "'");
|
VillagerOptimizer.getLog().info(event.getPlayer().getName() + " disabled optimizations for a villager using nametag: '" + name + "'");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
private Optional<ItemStack> getNameTag(ItemStack mainHand, ItemStack offHand) {
|
|
||||||
if (mainHand.getType().equals(Material.NAME_TAG) && mainHand.getItemMeta().hasDisplayName())
|
|
||||||
return Optional.of(mainHand);
|
|
||||||
if (offHand.getType().equals(Material.NAME_TAG) && offHand.getItemMeta().hasDisplayName())
|
|
||||||
return Optional.of(offHand);
|
|
||||||
return Optional.empty();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
x
Reference in New Issue
Block a user