diff --git a/dependency-reduced-pom.xml b/dependency-reduced-pom.xml index 073d773..2af45cf 100644 --- a/dependency-reduced-pom.xml +++ b/dependency-reduced-pom.xml @@ -3,7 +3,7 @@ 4.0.0 com.pretzel.dev VillagerTradeLimiter - 1.6.0 + 1.6.1 src diff --git a/pom.xml b/pom.xml index 1e90936..228fbd3 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ 4.0.0 com.pretzel.dev VillagerTradeLimiter - 1.6.0 + 1.6.1 1.8 diff --git a/src/com/pretzel/dev/villagertradelimiter/listeners/VillagerListener.java b/src/com/pretzel/dev/villagertradelimiter/listeners/VillagerListener.java index b4952c3..38c4b93 100644 --- a/src/com/pretzel/dev/villagertradelimiter/listeners/VillagerListener.java +++ b/src/com/pretzel/dev/villagertradelimiter/listeners/VillagerListener.java @@ -4,15 +4,19 @@ import com.pretzel.dev.villagertradelimiter.VillagerTradeLimiter; import com.pretzel.dev.villagertradelimiter.data.Cooldown; import com.pretzel.dev.villagertradelimiter.data.PlayerData; import com.pretzel.dev.villagertradelimiter.settings.Settings; +import org.bukkit.entity.Item; import org.bukkit.entity.Villager; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; +import org.bukkit.event.entity.VillagerAcquireTradeEvent; +import org.bukkit.event.entity.VillagerCareerChangeEvent; import org.bukkit.event.entity.VillagerReplenishTradeEvent; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.MerchantRecipe; import java.time.Instant; import java.util.Date; +import java.util.List; import java.util.UUID; public class VillagerListener implements Listener { @@ -28,6 +32,41 @@ public class VillagerListener implements Listener { this.settings = settings; } + /** Handles villager promotions */ + @EventHandler + public void onVillagerPromotion(final VillagerAcquireTradeEvent event) { + //Gets the items in the trade + final MerchantRecipe recipe = event.getRecipe(); + List items = recipe.getIngredients(); + items.add(recipe.getResult()); + + //Gets the disabled item list from config + List disabledItems = instance.getCfg().getStringList("DisableItems"); + + //Checks each item if it should be removed from the trade list + for(ItemStack item : items) { + if(disabledItems.contains(item.getType().name().toLowerCase())) { + event.setCancelled(true); + return; + } + } + } + + /** Handles villager profession change **/ + @EventHandler + public void onVillagerChangeProfession(final VillagerCareerChangeEvent event) { + //Gets the new profession + final Villager.Profession profession = event.getProfession(); + + //Gets the disabled profession list from config + List disabledProfessions = instance.getCfg().getStringList("DisableProfessions"); + + //Changes the new profession to none if disabled in config + if(disabledProfessions.contains(profession.name().toLowerCase())) { + event.setProfession(Villager.Profession.NONE); + } + } + /** Handles villager restocks */ @EventHandler public void onVillagerRestock(final VillagerReplenishTradeEvent event) { diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 453eed6..043f977 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -41,6 +41,13 @@ DisableTrading: - world_nether - world_the_end +# Add profession names that you want to prevent villagers from acquiring +DisableProfessions: [] + +# Add item names that you want to prevent villagers from offering as trades. +# This is a permanent change. The items can't be re-added to the villager's trades. +DisableItems: [] + # The maximum level of the "Hero of the Village" (HotV) effect that a player can have. This limits HotV price decreases. # * Set to -1 to disable this feature and keep vanilla behavior. # * Set to a number between 0 and 5 to set the maximum HotV effect level players can have diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 1512d37..a359d69 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -1,7 +1,7 @@ name: VillagerTradeLimiter author: PretzelJohn main: com.pretzel.dev.villagertradelimiter.VillagerTradeLimiter -version: 1.6.0 +version: 1.6.1 api-version: 1.14 commands: