diff --git a/build.gradle b/build.gradle index 491e94c0..c0f34d81 100644 --- a/build.gradle +++ b/build.gradle @@ -31,8 +31,8 @@ allprojects { // NMS (for jitpack compilation) maven { url 'https://repo.codemc.org/repository/nms/' } - // bStats, mcMMO - maven { url 'https://repo.codemc.org/repository/maven-public' } + // bStats, mcMMO, BentoBox + maven { url 'https://repo.codemc.org/repository/maven-public/' } // Spigot API maven { url 'https://hub.spigotmc.org/nexus/content/repositories/snapshots/' } diff --git a/eco-core/core-plugin/build.gradle b/eco-core/core-plugin/build.gradle index 9930d3aa..7b10f3d6 100644 --- a/eco-core/core-plugin/build.gradle +++ b/eco-core/core-plugin/build.gradle @@ -38,6 +38,7 @@ dependencies { compileOnly 'net.essentialsx:EssentialsX:2.19.0' compileOnly 'com.bgsoftware:SuperiorSkyblockAPI:latest' compileOnly 'com.github.MilkBowl:VaultAPI:1.7' + compileOnly 'world.bentobox:bentobox:1.17.3-SNAPSHOT' compileOnly 'com.google.guava:guava:31.0.1-jre' // CombatLogX V10 + NewbieHelper Expansion diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/eco/spigot/EcoSpigotPlugin.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/eco/spigot/EcoSpigotPlugin.kt index 2813d792..3de33571 100644 --- a/eco-core/core-plugin/src/main/kotlin/com/willfp/eco/spigot/EcoSpigotPlugin.kt +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/eco/spigot/EcoSpigotPlugin.kt @@ -30,7 +30,12 @@ import com.willfp.eco.spigot.data.PlayerBlockListener import com.willfp.eco.spigot.data.storage.DataHandler import com.willfp.eco.spigot.data.storage.MySQLDataHandler import com.willfp.eco.spigot.data.storage.YamlDataHandler -import com.willfp.eco.spigot.display.* +import com.willfp.eco.spigot.display.PacketAutoRecipe +import com.willfp.eco.spigot.display.PacketChat +import com.willfp.eco.spigot.display.PacketOpenWindowMerchant +import com.willfp.eco.spigot.display.PacketSetCreativeSlot +import com.willfp.eco.spigot.display.PacketSetSlot +import com.willfp.eco.spigot.display.PacketWindowItems import com.willfp.eco.spigot.display.frame.clearFrames import com.willfp.eco.spigot.drops.CollatedRunnable import com.willfp.eco.spigot.eventlisteners.EntityDeathByEntityListeners @@ -41,8 +46,22 @@ import com.willfp.eco.spigot.eventlisteners.armor.ArmorListener import com.willfp.eco.spigot.gui.GUIListener import com.willfp.eco.spigot.integrations.afk.AFKIntegrationCMI import com.willfp.eco.spigot.integrations.afk.AFKIntegrationEssentials -import com.willfp.eco.spigot.integrations.anticheat.* -import com.willfp.eco.spigot.integrations.antigrief.* +import com.willfp.eco.spigot.integrations.anticheat.AnticheatAAC +import com.willfp.eco.spigot.integrations.anticheat.AnticheatAlice +import com.willfp.eco.spigot.integrations.anticheat.AnticheatMatrix +import com.willfp.eco.spigot.integrations.anticheat.AnticheatNCP +import com.willfp.eco.spigot.integrations.anticheat.AnticheatSpartan +import com.willfp.eco.spigot.integrations.anticheat.AnticheatVulcan +import com.willfp.eco.spigot.integrations.antigrief.AntigriefBentoBox +import com.willfp.eco.spigot.integrations.antigrief.AntigriefCombatLogXV10 +import com.willfp.eco.spigot.integrations.antigrief.AntigriefCombatLogXV11 +import com.willfp.eco.spigot.integrations.antigrief.AntigriefFactionsUUID +import com.willfp.eco.spigot.integrations.antigrief.AntigriefGriefPrevention +import com.willfp.eco.spigot.integrations.antigrief.AntigriefKingdoms +import com.willfp.eco.spigot.integrations.antigrief.AntigriefLands +import com.willfp.eco.spigot.integrations.antigrief.AntigriefSuperiorSkyblock2 +import com.willfp.eco.spigot.integrations.antigrief.AntigriefTowny +import com.willfp.eco.spigot.integrations.antigrief.AntigriefWorldGuard import com.willfp.eco.spigot.integrations.customitems.CustomItemsHeadDatabase import com.willfp.eco.spigot.integrations.customitems.CustomItemsItemsAdder import com.willfp.eco.spigot.integrations.customitems.CustomItemsOraxen @@ -155,6 +174,7 @@ abstract class EcoSpigotPlugin : EcoPlugin( return listOf( // AntiGrief IntegrationLoader("SuperiorSkyblock2") { AntigriefManager.register(AntigriefSuperiorSkyblock2()) }, + IntegrationLoader("BentoBox") { AntigriefManager.register(AntigriefBentoBox()) }, IntegrationLoader("WorldGuard") { AntigriefManager.register(AntigriefWorldGuard()) }, IntegrationLoader("GriefPrevention") { AntigriefManager.register(AntigriefGriefPrevention()) }, IntegrationLoader("FactionsUUID") { AntigriefManager.register(AntigriefFactionsUUID()) }, diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/eco/spigot/integrations/antigrief/AntigriefBentoBox.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/eco/spigot/integrations/antigrief/AntigriefBentoBox.kt new file mode 100644 index 00000000..3e1440ed --- /dev/null +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/eco/spigot/integrations/antigrief/AntigriefBentoBox.kt @@ -0,0 +1,72 @@ +package com.willfp.eco.spigot.integrations.antigrief + +import com.willfp.eco.core.integrations.antigrief.AntigriefWrapper +import org.bukkit.Location +import org.bukkit.World +import org.bukkit.block.Block +import org.bukkit.entity.LivingEntity +import org.bukkit.entity.Player +import world.bentobox.bentobox.BentoBox +import world.bentobox.bentobox.api.user.User +import world.bentobox.bentobox.lists.Flags + +class AntigriefBentoBox : AntigriefWrapper { + override fun canBreakBlock( + player: Player, + block: Block + ): Boolean { + val island = BentoBox.getInstance().islandsManager.getIslandAt(block.location).orElse(null) ?: return true + return island.isAllowed(User.getInstance(player), Flags.BREAK_BLOCKS) + } + + override fun canCreateExplosion( + player: Player, + location: Location + ): Boolean { + val island = BentoBox.getInstance().islandsManager.getIslandAt(location).orElse(null) ?: return true + return island.isAllowed(User.getInstance(player), Flags.TNT_DAMAGE) + } + + override fun canPlaceBlock( + player: Player, + block: Block + ): Boolean { + val island = BentoBox.getInstance().islandsManager.getIslandAt(block.location).orElse(null) ?: return true + return island.isAllowed(User.getInstance(player), Flags.PLACE_BLOCKS) + } + + override fun canInjure( + player: Player, + victim: LivingEntity + ): Boolean { + val island = BentoBox.getInstance().islandsManager.getIslandAt(victim.location).orElse(null) ?: return true + return if (victim is Player) { + island.isAllowed( + User.getInstance(player), when (victim.world.environment) { + World.Environment.NORMAL -> Flags.PVP_OVERWORLD + World.Environment.NETHER -> Flags.PVP_NETHER + World.Environment.THE_END -> Flags.PVP_END + else -> Flags.PVP_OVERWORLD + } + ) + } else { + island.isAllowed(User.getInstance(player), Flags.HURT_ANIMALS) + } + } + + override fun getPluginName(): String { + return "BentoBox" + } + + override fun equals(other: Any?): Boolean { + if (other !is AntigriefWrapper) { + return false + } + + return other.pluginName == this.pluginName + } + + override fun hashCode(): Int { + return this.pluginName.hashCode() + } +} \ No newline at end of file diff --git a/eco-core/core-plugin/src/main/resources/plugin.yml b/eco-core/core-plugin/src/main/resources/plugin.yml index 480e4452..0b530449 100644 --- a/eco-core/core-plugin/src/main/resources/plugin.yml +++ b/eco-core/core-plugin/src/main/resources/plugin.yml @@ -32,6 +32,7 @@ softdepend: - CMI - Essentials - Vault + - BentoBox libraries: - 'org.reflections:reflections:0.9.12' - 'org.apache.maven:maven-artifact:3.0.3'