forked from Upstream/VillagerTradeLimiter
Version 1.5.1:
* Add toggleable Shopkeepers support * Made Citizens support toggleable To-do: * Add enchantments, data, etc. to ingredients and result * Add config editor GUI in-game
This commit is contained in:
parent
5cc49188a7
commit
afacf4adc8
@ -51,6 +51,14 @@
|
|||||||
<td><code>database.useSSL:</code></td>
|
<td><code>database.useSSL:</code></td>
|
||||||
<td>If your MySQL database can use SSL connections, set this to <code>true</code>!</td>
|
<td>If your MySQL database can use SSL connections, set this to <code>true</code>!</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><code>IgnoreCitizens:</code></td>
|
||||||
|
<td>Whether to ignore Citizens NPCs from the Citizens plugin. If set to true, Citizens NPCs won't be affected by this plugin.</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><code>IgnoreShopkeepers:</code></td>
|
||||||
|
<td>Whether to ignore Shopkeepers NPCs from the Shopkeepers plugin. If set to true, Shopkeepers NPCs won't be affected by this plugin.</td>
|
||||||
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td><code>DisableTrading:</code></td>
|
<td><code>DisableTrading:</code></td>
|
||||||
<td>Whether to disable all villager trading for all worlds, some worlds, or no worlds.<br/><strong>Options:</strong>
|
<td>Whether to disable all villager trading for all worlds, some worlds, or no worlds.<br/><strong>Options:</strong>
|
||||||
|
2
pom.xml
2
pom.xml
@ -3,7 +3,7 @@
|
|||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<groupId>com.pretzel.dev</groupId>
|
<groupId>com.pretzel.dev</groupId>
|
||||||
<artifactId>VillagerTradeLimiter</artifactId>
|
<artifactId>VillagerTradeLimiter</artifactId>
|
||||||
<version>1.5.0</version>
|
<version>1.5.1</version>
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
<java.version>1.8</java.version>
|
<java.version>1.8</java.version>
|
||||||
|
@ -8,8 +8,8 @@ import java.io.FileWriter;
|
|||||||
import java.io.Reader;
|
import java.io.Reader;
|
||||||
|
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.entity.Entity;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.entity.Villager;
|
|
||||||
|
|
||||||
import net.md_5.bungee.api.ChatColor;
|
import net.md_5.bungee.api.ChatColor;
|
||||||
|
|
||||||
@ -66,21 +66,21 @@ public class Util {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Checks whether a player is a Citizens NPC or not
|
* Checks whether an entity is a Citizens NPC or not
|
||||||
* @param player The player to check
|
* @param entity The entity to check
|
||||||
* @return True if the player is an NPC, false otherwise
|
* @return True if the entity is an NPC, false otherwise
|
||||||
*/
|
*/
|
||||||
public static boolean isNPC(Player player) {
|
public static boolean isNPC(Entity entity) {
|
||||||
return player.hasMetadata("NPC");
|
return entity.hasMetadata("NPC");
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns whether a villager is a Citizens NPC or not
|
* Returns whether an entity is a shopkeeper NPC or not
|
||||||
* @param villager The villager to check
|
* @param entity The villager to check
|
||||||
* @return True if the villager is an NPC, false otherwise
|
* @return True if the villager is a shopkeeper, false otherwise
|
||||||
*/
|
*/
|
||||||
public static boolean isNPC(Villager villager) {
|
public static boolean isShopkeeper(Entity entity) {
|
||||||
return villager.hasMetadata("NPC");
|
return entity.hasMetadata("shopkeeper");
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -3,7 +3,6 @@ package com.pretzel.dev.villagertradelimiter.listeners;
|
|||||||
import com.pretzel.dev.villagertradelimiter.VillagerTradeLimiter;
|
import com.pretzel.dev.villagertradelimiter.VillagerTradeLimiter;
|
||||||
import com.pretzel.dev.villagertradelimiter.data.Cooldown;
|
import com.pretzel.dev.villagertradelimiter.data.Cooldown;
|
||||||
import com.pretzel.dev.villagertradelimiter.data.PlayerData;
|
import com.pretzel.dev.villagertradelimiter.data.PlayerData;
|
||||||
import com.pretzel.dev.villagertradelimiter.lib.Util;
|
|
||||||
import com.pretzel.dev.villagertradelimiter.settings.Settings;
|
import com.pretzel.dev.villagertradelimiter.settings.Settings;
|
||||||
import com.pretzel.dev.villagertradelimiter.wrappers.VillagerWrapper;
|
import com.pretzel.dev.villagertradelimiter.wrappers.VillagerWrapper;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
@ -44,7 +43,7 @@ public class InventoryListener implements Listener {
|
|||||||
if(!(event.getInventory().getHolder() instanceof Villager)) return;
|
if(!(event.getInventory().getHolder() instanceof Villager)) return;
|
||||||
if(!(event.getPlayer() instanceof Player)) return;
|
if(!(event.getPlayer() instanceof Player)) return;
|
||||||
final Player player = (Player)event.getPlayer();
|
final Player player = (Player)event.getPlayer();
|
||||||
if(Util.isNPC(player)) return;
|
if(settings.shouldSkipNPC(player) || settings.shouldSkipNPC((Villager)event.getInventory().getHolder())) return; //Skips NPCs
|
||||||
|
|
||||||
//Reset the villager's NBT data when a player is finished trading
|
//Reset the villager's NBT data when a player is finished trading
|
||||||
final PlayerData playerData = instance.getPlayerData().get(player.getUniqueId());
|
final PlayerData playerData = instance.getPlayerData().get(player.getUniqueId());
|
||||||
@ -64,7 +63,7 @@ public class InventoryListener implements Listener {
|
|||||||
if(!(event.getWhoClicked() instanceof Player)) return;
|
if(!(event.getWhoClicked() instanceof Player)) return;
|
||||||
if(event.getRawSlot() != 2) return;
|
if(event.getRawSlot() != 2) return;
|
||||||
final Player player = (Player)event.getWhoClicked();
|
final Player player = (Player)event.getWhoClicked();
|
||||||
if(Util.isNPC(player)) return;
|
if(settings.shouldSkipNPC(player) || settings.shouldSkipNPC((Villager)event.getInventory().getHolder())) return; //Skips NPCs
|
||||||
|
|
||||||
//Get the items involved in the trade
|
//Get the items involved in the trade
|
||||||
final ItemStack result = event.getCurrentItem();
|
final ItemStack result = event.getCurrentItem();
|
||||||
|
@ -3,7 +3,6 @@ package com.pretzel.dev.villagertradelimiter.listeners;
|
|||||||
import com.pretzel.dev.villagertradelimiter.VillagerTradeLimiter;
|
import com.pretzel.dev.villagertradelimiter.VillagerTradeLimiter;
|
||||||
import com.pretzel.dev.villagertradelimiter.data.Cooldown;
|
import com.pretzel.dev.villagertradelimiter.data.Cooldown;
|
||||||
import com.pretzel.dev.villagertradelimiter.data.PlayerData;
|
import com.pretzel.dev.villagertradelimiter.data.PlayerData;
|
||||||
import com.pretzel.dev.villagertradelimiter.lib.Util;
|
|
||||||
import com.pretzel.dev.villagertradelimiter.settings.Settings;
|
import com.pretzel.dev.villagertradelimiter.settings.Settings;
|
||||||
import com.pretzel.dev.villagertradelimiter.wrappers.*;
|
import com.pretzel.dev.villagertradelimiter.wrappers.*;
|
||||||
import org.bukkit.OfflinePlayer;
|
import org.bukkit.OfflinePlayer;
|
||||||
@ -37,8 +36,9 @@ public class PlayerListener implements Listener {
|
|||||||
@EventHandler
|
@EventHandler
|
||||||
public void onPlayerBeginTrading(final PlayerInteractEntityEvent event) {
|
public void onPlayerBeginTrading(final PlayerInteractEntityEvent event) {
|
||||||
if(!(event.getRightClicked() instanceof Villager)) return;
|
if(!(event.getRightClicked() instanceof Villager)) return;
|
||||||
|
final Player player = event.getPlayer();
|
||||||
final Villager villager = (Villager)event.getRightClicked();
|
final Villager villager = (Villager)event.getRightClicked();
|
||||||
if(Util.isNPC(villager)) return; //Skips NPCs
|
if(settings.shouldSkipNPC(event.getPlayer()) || settings.shouldSkipNPC(villager)) return; //Skips NPCs
|
||||||
if(villager.getProfession() == Villager.Profession.NONE || villager.getProfession() == Villager.Profession.NITWIT) return; //Skips non-trading villagers
|
if(villager.getProfession() == Villager.Profession.NONE || villager.getProfession() == Villager.Profession.NITWIT) return; //Skips non-trading villagers
|
||||||
if(villager.getRecipeCount() == 0) return; //Skips non-trading villagers
|
if(villager.getRecipeCount() == 0) return; //Skips non-trading villagers
|
||||||
|
|
||||||
@ -63,13 +63,13 @@ public class PlayerListener implements Listener {
|
|||||||
|
|
||||||
//Cancel the original event, and open the adjusted trade view
|
//Cancel the original event, and open the adjusted trade view
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
final Player player = event.getPlayer();
|
|
||||||
if(!instance.getPlayerData().containsKey(player.getUniqueId())) {
|
if(!instance.getPlayerData().containsKey(player.getUniqueId())) {
|
||||||
instance.getPlayerData().put(player.getUniqueId(), new PlayerData());
|
instance.getPlayerData().put(player.getUniqueId(), new PlayerData());
|
||||||
}
|
}
|
||||||
if(!instance.getPlayerData().containsKey(villager.getUniqueId())) {
|
if(!instance.getPlayerData().containsKey(villager.getUniqueId())) {
|
||||||
instance.getPlayerData().put(villager.getUniqueId(), new PlayerData());
|
instance.getPlayerData().put(villager.getUniqueId(), new PlayerData());
|
||||||
}
|
}
|
||||||
|
|
||||||
this.see(villager, player, player);
|
this.see(villager, player, player);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -83,7 +83,8 @@ public class PlayerListener implements Listener {
|
|||||||
//Wraps the villager and player into wrapper classes
|
//Wraps the villager and player into wrapper classes
|
||||||
final VillagerWrapper villagerWrapper = new VillagerWrapper(villager);
|
final VillagerWrapper villagerWrapper = new VillagerWrapper(villager);
|
||||||
final PlayerWrapper otherWrapper = new PlayerWrapper(other);
|
final PlayerWrapper otherWrapper = new PlayerWrapper(other);
|
||||||
if(Util.isNPC(villager) || Util.isNPC(player) || otherWrapper.isNPC()) return; //Skips NPCs
|
final Player otherPlayer = otherWrapper.getPlayer();
|
||||||
|
if(settings.shouldSkipNPC(player) || settings.shouldSkipNPC(villager) || otherPlayer == null || settings.shouldSkipNPC(otherPlayer)) return; //Skips NPCs
|
||||||
|
|
||||||
final PlayerData playerData = instance.getPlayerData().get(other.getUniqueId());
|
final PlayerData playerData = instance.getPlayerData().get(other.getUniqueId());
|
||||||
if(playerData != null) playerData.setTradingVillager(villagerWrapper);
|
if(playerData != null) playerData.setTradingVillager(villagerWrapper);
|
||||||
|
@ -3,7 +3,6 @@ package com.pretzel.dev.villagertradelimiter.listeners;
|
|||||||
import com.pretzel.dev.villagertradelimiter.VillagerTradeLimiter;
|
import com.pretzel.dev.villagertradelimiter.VillagerTradeLimiter;
|
||||||
import com.pretzel.dev.villagertradelimiter.data.Cooldown;
|
import com.pretzel.dev.villagertradelimiter.data.Cooldown;
|
||||||
import com.pretzel.dev.villagertradelimiter.data.PlayerData;
|
import com.pretzel.dev.villagertradelimiter.data.PlayerData;
|
||||||
import com.pretzel.dev.villagertradelimiter.lib.Util;
|
|
||||||
import com.pretzel.dev.villagertradelimiter.settings.Settings;
|
import com.pretzel.dev.villagertradelimiter.settings.Settings;
|
||||||
import org.bukkit.entity.Villager;
|
import org.bukkit.entity.Villager;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
@ -33,7 +32,8 @@ public class VillagerListener implements Listener {
|
|||||||
@EventHandler
|
@EventHandler
|
||||||
public void onVillagerRestock(final VillagerReplenishTradeEvent event) {
|
public void onVillagerRestock(final VillagerReplenishTradeEvent event) {
|
||||||
if(!(event.getEntity() instanceof Villager)) return;
|
if(!(event.getEntity() instanceof Villager)) return;
|
||||||
if(Util.isNPC((Villager) event.getEntity())) return;
|
final Villager villager = (Villager)event.getEntity();
|
||||||
|
if(settings.shouldSkipNPC(villager)) return; //Skips NPCs
|
||||||
|
|
||||||
//Get the items involved in the restock
|
//Get the items involved in the restock
|
||||||
final MerchantRecipe recipe = event.getRecipe();
|
final MerchantRecipe recipe = event.getRecipe();
|
||||||
@ -43,7 +43,7 @@ public class VillagerListener implements Listener {
|
|||||||
final String type = settings.getType(result, ingredient1, ingredient2);
|
final String type = settings.getType(result, ingredient1, ingredient2);
|
||||||
|
|
||||||
//Get the villager's data container
|
//Get the villager's data container
|
||||||
final UUID uuid = event.getEntity().getUniqueId();
|
final UUID uuid = villager.getUniqueId();
|
||||||
final PlayerData villagerData = instance.getPlayerData().get(uuid);
|
final PlayerData villagerData = instance.getPlayerData().get(uuid);
|
||||||
if(villagerData == null) return;
|
if(villagerData == null) return;
|
||||||
|
|
||||||
|
@ -8,6 +8,7 @@ import org.bukkit.NamespacedKey;
|
|||||||
import org.bukkit.configuration.ConfigurationSection;
|
import org.bukkit.configuration.ConfigurationSection;
|
||||||
import org.bukkit.enchantments.Enchantment;
|
import org.bukkit.enchantments.Enchantment;
|
||||||
import org.bukkit.enchantments.EnchantmentWrapper;
|
import org.bukkit.enchantments.EnchantmentWrapper;
|
||||||
|
import org.bukkit.entity.Entity;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
import org.bukkit.inventory.meta.EnchantmentStorageMeta;
|
import org.bukkit.inventory.meta.EnchantmentStorageMeta;
|
||||||
|
|
||||||
@ -17,6 +18,16 @@ public class Settings {
|
|||||||
/** @param instance The instance of VillagerTradeLimiter.java */
|
/** @param instance The instance of VillagerTradeLimiter.java */
|
||||||
public Settings(final VillagerTradeLimiter instance) { this.instance = instance; }
|
public Settings(final VillagerTradeLimiter instance) { this.instance = instance; }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param entity The entity to check the NPC status of
|
||||||
|
* @return True if the entity is an NPC and config is set to ignore NPCs
|
||||||
|
*/
|
||||||
|
public boolean shouldSkipNPC(final Entity entity) {
|
||||||
|
if(entity == null) return true;
|
||||||
|
if(instance.getCfg().getBoolean("IgnoreCitizens", true) && Util.isNPC(entity)) return true;
|
||||||
|
return instance.getCfg().getBoolean("IgnoreShopkeepers", true) && Util.isShopkeeper(entity);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param recipe The wrapped recipe to fetch any overrides for
|
* @param recipe The wrapped recipe to fetch any overrides for
|
||||||
* @param key The key where the fetched value is stored in config.yml (e.g, DisableTrading)
|
* @param key The key where the fetched value is stored in config.yml (e.g, DisableTrading)
|
||||||
|
@ -12,9 +12,6 @@ public class PlayerWrapper {
|
|||||||
/** @param player The offline player that this wrapper wraps */
|
/** @param player The offline player that this wrapper wraps */
|
||||||
public PlayerWrapper(final OfflinePlayer player) { this.player = player; }
|
public PlayerWrapper(final OfflinePlayer player) { this.player = player; }
|
||||||
|
|
||||||
/** @return Whether this player is an NPC or not */
|
|
||||||
public boolean isNPC() { return (player.isOnline() && Util.isNPC((Player)player)); }
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param isOld Whether the server is older than 1.16 or not. Minecraft changed how UUID's are represented in 1.16
|
* @param isOld Whether the server is older than 1.16 or not. Minecraft changed how UUID's are represented in 1.16
|
||||||
* @return A string representation of the player's UUID, for use when matching the player's UUID to a gossip's target UUID
|
* @return A string representation of the player's UUID, for use when matching the player's UUID to a gossip's target UUID
|
||||||
|
@ -19,6 +19,10 @@ database:
|
|||||||
encoding: utf8
|
encoding: utf8
|
||||||
useSSL: false
|
useSSL: false
|
||||||
|
|
||||||
|
# Ignore Citizens NPCs, and/or Shopkeepers NPCs if true
|
||||||
|
IgnoreCitizens: true
|
||||||
|
IgnoreShopkeepers: true
|
||||||
|
|
||||||
# Add world names for worlds that you want to completely disable ALL villager trading. Set to [] to disable this feature.
|
# Add world names for worlds that you want to completely disable ALL villager trading. Set to [] to disable this feature.
|
||||||
DisableTrading:
|
DisableTrading:
|
||||||
- world_nether
|
- world_nether
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
name: VillagerTradeLimiter
|
name: VillagerTradeLimiter
|
||||||
author: PretzelJohn
|
author: PretzelJohn
|
||||||
main: com.pretzel.dev.villagertradelimiter.VillagerTradeLimiter
|
main: com.pretzel.dev.villagertradelimiter.VillagerTradeLimiter
|
||||||
version: 1.5.0
|
version: 1.5.1
|
||||||
api-version: 1.14
|
api-version: 1.14
|
||||||
|
|
||||||
commands:
|
commands:
|
||||||
|
Loading…
Reference in New Issue
Block a user