Compare commits

..

10 Commits

Author SHA1 Message Date
Auxilor
9d3efb5e83 Imports, often. Imports 2023-01-27 11:50:50 +00:00
Auxilor
8a5d1a604a Updated to 6.49.2 2023-01-27 11:46:15 +00:00
Auxilor
ef67c6d6ae Merge branch 'develop' 2023-01-27 11:45:42 +00:00
Auxilor
5b2654db15 Merge remote-tracking branch 'origin/master' 2023-01-27 11:45:18 +00:00
Will FP
eccd793317 Merge pull request #235 from Baterka/master
Fix Prices evaluation if they include player placeholders
2023-01-27 11:43:56 +00:00
Will FP
1bc44755a0 Merge pull request #234 from 0ft3n/develop
EconomyShopGUI integration fixes
2023-01-27 11:35:39 +00:00
Baterka
ec606d9ebe Fix Prices evaluation if they include player placeholders 2023-01-27 03:04:48 +01:00
_OfTeN_
c5556f15ab Attempted to fix Lands integration 2023-01-27 04:54:09 +03:00
_OfTeN_
399cce21f5 EconomyShopGUI integration fixes 2023-01-27 04:48:18 +03:00
Auxilor
b25feffdfa Codestyle 2023-01-24 13:54:59 +00:00
7 changed files with 86 additions and 22 deletions

View File

@@ -1,5 +1,7 @@
package com.willfp.eco.core.command; package com.willfp.eco.core.command;
import org.jetbrains.annotations.NotNull;
/** /**
* A notification exception is thrown when {@link org.bukkit.command.CommandSender}s don't * A notification exception is thrown when {@link org.bukkit.command.CommandSender}s don't
* specify valid arguments in commands. * specify valid arguments in commands.
@@ -18,7 +20,7 @@ public class NotificationException extends Exception {
* *
* @param key The lang key of the notification. * @param key The lang key of the notification.
*/ */
public NotificationException(String key) { public NotificationException(@NotNull final String key) {
super(key); super(key);
this.key = key; this.key = key;
} }

View File

@@ -71,10 +71,6 @@ public final class Prices {
ctx ctx
); );
if (function.apply(context) <= 0) {
return new PriceFree();
}
// Default to economy // Default to economy
if (priceName == null) { if (priceName == null) {
return new PriceEconomy(context, function); return new PriceEconomy(context, function);

View File

@@ -31,7 +31,7 @@ dependencies {
compileOnly('com.github.TownyAdvanced:Towny:0.97.2.6') { compileOnly('com.github.TownyAdvanced:Towny:0.97.2.6') {
exclude group: 'com.zaxxer', module: 'HikariCP' exclude group: 'com.zaxxer', module: 'HikariCP'
} }
compileOnly 'com.github.angeschossen:LandsAPI:6.26.7' compileOnly 'com.github.angeschossen:LandsAPI:6.26.18'
compileOnly 'com.github.angeschossen:PluginFrameworkAPI:1.0.0' compileOnly 'com.github.angeschossen:PluginFrameworkAPI:1.0.0'
compileOnly 'fr.neatmonster:nocheatplus:3.16.1-SNAPSHOT' compileOnly 'fr.neatmonster:nocheatplus:3.16.1-SNAPSHOT'
compileOnly 'com.github.jiangdashao:matrix-api-repo:317d4635fd' compileOnly 'com.github.jiangdashao:matrix-api-repo:317d4635fd'
@@ -48,7 +48,7 @@ dependencies {
compileOnly 'com.github.WhipDevelopment:CrashClaim:f9cd7d92eb' compileOnly 'com.github.WhipDevelopment:CrashClaim:f9cd7d92eb'
compileOnly 'com.wolfyscript.wolfyutilities:wolfyutilities:3.16.0.0' compileOnly 'com.wolfyscript.wolfyutilities:wolfyutilities:3.16.0.0'
compileOnly 'com.github.decentsoftware-eu:decentholograms:2.1.2' compileOnly 'com.github.decentsoftware-eu:decentholograms:2.1.2'
compileOnly 'com.github.Gypopo:EconomyShopGUI-API:1.1.0' compileOnly 'com.github.Gypopo:EconomyShopGUI-API:1.4.6'
compileOnly 'com.github.N0RSKA:ScytherAPI:55a' compileOnly 'com.github.N0RSKA:ScytherAPI:55a'
compileOnly 'com.ticxo.modelengine:api:R3.0.1' compileOnly 'com.ticxo.modelengine:api:R3.0.1'
compileOnly 'me.TechsCode:UltraEconomyAPI:1.0.0' compileOnly 'me.TechsCode:UltraEconomyAPI:1.0.0'

View File

@@ -316,6 +316,7 @@ abstract class EcoSpigotPlugin : EcoPlugin() {
IntegrationLoader("zShop") { ShopManager.register(ShopZShop()) }, IntegrationLoader("zShop") { ShopManager.register(ShopZShop()) },
IntegrationLoader("DeluxeSellwands") { ShopManager.register(ShopDeluxeSellwands()) }, IntegrationLoader("DeluxeSellwands") { ShopManager.register(ShopDeluxeSellwands()) },
IntegrationLoader("EconomyShopGUI") { ShopManager.register(ShopEconomyShopGUI()) }, IntegrationLoader("EconomyShopGUI") { ShopManager.register(ShopEconomyShopGUI()) },
IntegrationLoader("EconomyShopGUI-Premium") { ShopManager.register(ShopEconomyShopGUI()) },
// Hologram // Hologram
IntegrationLoader("HolographicDisplays") { HologramManager.register(HologramHolographicDisplays(this)) }, IntegrationLoader("HolographicDisplays") { HologramManager.register(HologramHolographicDisplays(this)) },

View File

@@ -3,8 +3,11 @@ package com.willfp.eco.internal.spigot.integrations.antigrief
import com.willfp.eco.core.EcoPlugin import com.willfp.eco.core.EcoPlugin
import com.willfp.eco.core.integrations.antigrief.AntigriefIntegration import com.willfp.eco.core.integrations.antigrief.AntigriefIntegration
import me.angeschossen.lands.api.LandsIntegration import me.angeschossen.lands.api.LandsIntegration
import me.angeschossen.lands.api.flags.Flags import me.angeschossen.lands.api.flags.enums.FlagTarget
import me.angeschossen.lands.api.flags.enums.RoleFlagCategory
import me.angeschossen.lands.api.flags.type.RoleFlag
import org.bukkit.Location import org.bukkit.Location
import org.bukkit.Material
import org.bukkit.block.Block import org.bukkit.block.Block
import org.bukkit.entity.Animals import org.bukkit.entity.Animals
import org.bukkit.entity.LivingEntity import org.bukkit.entity.LivingEntity
@@ -18,7 +21,10 @@ class AntigriefLands(private val plugin: EcoPlugin) : AntigriefIntegration {
block: Block block: Block
): Boolean { ): Boolean {
val area = landsIntegration.getArea(block.location) ?: return true val area = landsIntegration.getArea(block.location) ?: return true
return area.hasFlag(player, Flags.BLOCK_BREAK, false) return area.hasRoleFlag(player, RoleFlag.of(landsIntegration,
FlagTarget.PLAYER,
RoleFlagCategory.ACTION,
"BLOCK_BREAK"), block.type, false)
} }
override fun canCreateExplosion( override fun canCreateExplosion(
@@ -26,7 +32,13 @@ class AntigriefLands(private val plugin: EcoPlugin) : AntigriefIntegration {
location: Location location: Location
): Boolean { ): Boolean {
val area = landsIntegration.getArea(location) ?: return true val area = landsIntegration.getArea(location) ?: return true
return area.hasFlag(player, Flags.ATTACK_PLAYER, false) && area.hasFlag(player, Flags.ATTACK_ANIMAL, false) return area.hasRoleFlag(player, RoleFlag.of(landsIntegration,
FlagTarget.PLAYER,
RoleFlagCategory.ACTION,
"ATTACK_PLAYER"), Material.AIR, false) && area.hasRoleFlag(player, RoleFlag.of(landsIntegration,
FlagTarget.PLAYER,
RoleFlagCategory.ACTION,
"ATTACK_ANIMAL"), Material.AIR, false)
} }
override fun canPlaceBlock( override fun canPlaceBlock(
@@ -34,7 +46,10 @@ class AntigriefLands(private val plugin: EcoPlugin) : AntigriefIntegration {
block: Block block: Block
): Boolean { ): Boolean {
val area = landsIntegration.getArea(block.location) ?: return true val area = landsIntegration.getArea(block.location) ?: return true
return area.hasFlag(player, Flags.BLOCK_PLACE, false) return area.hasRoleFlag(player, RoleFlag.of(landsIntegration,
FlagTarget.PLAYER,
RoleFlagCategory.ACTION,
"BLOCK_PLACE"), Material.AIR, false)
} }
override fun canInjure( override fun canInjure(
@@ -45,16 +60,28 @@ class AntigriefLands(private val plugin: EcoPlugin) : AntigriefIntegration {
val area = landsIntegration.getArea(victim.location) ?: return true val area = landsIntegration.getArea(victim.location) ?: return true
return when(victim) { return when(victim) {
is Player -> area.hasFlag(player, Flags.ATTACK_PLAYER, false) is Player -> area.hasRoleFlag(player, RoleFlag.of(landsIntegration,
is Monster -> area.hasFlag(player, Flags.ATTACK_MONSTER, false) FlagTarget.PLAYER,
is Animals -> area.hasFlag(player, Flags.ATTACK_MONSTER, false) RoleFlagCategory.ACTION,
"ATTACK_PLAYER"), Material.AIR, false)
is Monster -> area.hasRoleFlag(player, RoleFlag.of(landsIntegration,
FlagTarget.PLAYER,
RoleFlagCategory.ACTION,
"ATTACK_MONSTER"), Material.AIR, false)
is Animals -> area.hasRoleFlag(player, RoleFlag.of(landsIntegration,
FlagTarget.PLAYER,
RoleFlagCategory.ACTION,
"ATTACK_ANIMAL"), Material.AIR, false)
else -> area.isTrusted(player.uniqueId) else -> area.isTrusted(player.uniqueId)
} }
} }
override fun canPickupItem(player: Player, location: Location): Boolean { override fun canPickupItem(player: Player, location: Location): Boolean {
val area = landsIntegration.getArea(location) ?: return true val area = landsIntegration.getArea(location) ?: return true
return area.hasFlag(player, Flags.ITEM_PICKUP, false) return area.hasRoleFlag(player, RoleFlag.of(landsIntegration,
FlagTarget.PLAYER,
RoleFlagCategory.ACTION,
"ITEM_PICKUP"), Material.AIR, false)
} }
override fun getPluginName(): String { override fun getPluginName(): String {

View File

@@ -4,8 +4,10 @@ import com.willfp.eco.core.integrations.shop.ShopIntegration
import com.willfp.eco.core.integrations.shop.ShopSellEvent import com.willfp.eco.core.integrations.shop.ShopSellEvent
import com.willfp.eco.core.price.Price import com.willfp.eco.core.price.Price
import com.willfp.eco.core.price.impl.PriceEconomy import com.willfp.eco.core.price.impl.PriceEconomy
import com.willfp.eco.core.price.impl.PriceFree
import me.gypopo.economyshopgui.api.EconomyShopGUIHook import me.gypopo.economyshopgui.api.EconomyShopGUIHook
import me.gypopo.economyshopgui.api.events.PreTransactionEvent import me.gypopo.economyshopgui.api.events.PreTransactionEvent
import me.gypopo.economyshopgui.util.Transaction
import org.bukkit.Bukkit import org.bukkit.Bukkit
import org.bukkit.entity.Player import org.bukkit.entity.Player
import org.bukkit.event.EventHandler import org.bukkit.event.EventHandler
@@ -18,27 +20,63 @@ class ShopEconomyShopGUI : ShopIntegration {
} }
override fun getUnitValue(itemStack: ItemStack, player: Player): Price { override fun getUnitValue(itemStack: ItemStack, player: Player): Price {
val shopItem = EconomyShopGUIHook.getShopItem(itemStack) ?: return PriceFree()
return PriceEconomy( return PriceEconomy(
EconomyShopGUIHook.getItemSellPrice(player, itemStack.clone().apply { EconomyShopGUIHook.getItemSellPrice(shopItem, itemStack.clone().apply {
amount = 1 amount = 1
}) }, player)
) )
} }
override fun isSellable(itemStack: ItemStack, player: Player): Boolean { override fun isSellable(itemStack: ItemStack, player: Player): Boolean {
return EconomyShopGUIHook.getItemSellPrice(player, itemStack) > 0 val shopItem = EconomyShopGUIHook.getShopItem(itemStack) ?: return false
return EconomyShopGUIHook.getItemSellPrice(shopItem, itemStack, player) > 0
} }
object EconomyShopGUISellEventListeners : Listener { object EconomyShopGUISellEventListeners : Listener {
private val sellTypes = listOf(
Transaction.Type.SELL_GUI_SCREEN,
Transaction.Type.SELL_SCREEN,
Transaction.Type.SELL_ALL_SCREEN,
Transaction.Type.SELL_ALL_COMMAND,
Transaction.Type.QUICK_SELL,
Transaction.Type.AUTO_SELL_CHEST,
)
private val sellAllTypes = listOf(
Transaction.Type.SELL_GUI_SCREEN,
Transaction.Type.SELL_ALL_COMMAND,
)
@EventHandler @EventHandler
fun shopEventToEcoEvent(event: PreTransactionEvent) { fun shopEventToEcoEvent(event: PreTransactionEvent) {
if (event.transactionType !in sellTypes) {
return
}
if (event.isCancelled) { if (event.isCancelled) {
return return
} }
val ecoEvent = ShopSellEvent(event.player, PriceEconomy(event.price), event.itemStack) val prices = if (event.transactionType in sellAllTypes) {
Bukkit.getPluginManager().callEvent(ecoEvent) event.items!!
event.price = ecoEvent.value.getValue(event.player) * ecoEvent.multiplier } else {
mapOf(event.shopItem to event.amount)
}
var total = 0.0
for ((shopItem, amount) in prices) {
val price = EconomyShopGUIHook.getItemSellPrice(shopItem, shopItem.itemToGive
.apply { this.amount = amount }, event.player)
val ecoEvent = ShopSellEvent(event.player, PriceEconomy(price), shopItem.itemToGive
.apply { this.amount = amount })
Bukkit.getPluginManager().callEvent(ecoEvent)
total += ecoEvent.value.getValue(event.player) * ecoEvent.multiplier
}
event.price = total
} }
} }

View File

@@ -1,3 +1,3 @@
version = 6.49.1 version = 6.49.2
plugin-name = eco plugin-name = eco
kotlin.code.style = official kotlin.code.style = official