Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,15 @@ import com.willfp.ecopets.commands.CommandPets
import com.willfp.ecopets.libreforge.ConditionHasActivePet
import com.willfp.ecopets.libreforge.ConditionHasPet
import com.willfp.ecopets.libreforge.ConditionHasPetLevel
import com.willfp.ecopets.libreforge.EffectActivatePet
import com.willfp.ecopets.libreforge.EffectDeactivatePet
import com.willfp.ecopets.libreforge.EffectGivePetXp
import com.willfp.ecopets.libreforge.EffectPetXpMultiplier
import com.willfp.ecopets.libreforge.FilterPet
import com.willfp.ecopets.libreforge.TriggerGainPetXp
import com.willfp.ecopets.libreforge.TriggerLevelUpPet
import com.willfp.ecopets.libreforge.TriggerPetActivate
import com.willfp.ecopets.libreforge.TriggerPetDeactivate
import com.willfp.ecopets.pets.DiscoverRecipeListener
import com.willfp.ecopets.pets.PetDisplay
import com.willfp.ecopets.pets.PetLevelListener
Expand All @@ -36,11 +40,14 @@ import com.willfp.libreforge.triggers.Triggers
import org.bukkit.entity.Player
import org.bukkit.event.Listener

internal lateinit var plugin: EcoPetsPlugin
private set

class EcoPetsPlugin : LibreforgePlugin() {
private val petDisplay = PetDisplay(this)

init {
instance = this
plugin = this
}

override fun loadConfigCategories(): List<ConfigCategory> {
Expand All @@ -55,8 +62,12 @@ class EcoPetsPlugin : LibreforgePlugin() {
Conditions.register(ConditionHasPet)
Effects.register(EffectPetXpMultiplier)
Effects.register(EffectGivePetXp)
Effects.register(EffectActivatePet)
Effects.register(EffectDeactivatePet)
Triggers.register(TriggerGainPetXp)
Triggers.register(TriggerLevelUpPet)
Triggers.register(TriggerPetActivate)
Triggers.register(TriggerPetDeactivate)
Filters.register(FilterPet)

registerSpecificHolderProvider<Player> {
Expand Down Expand Up @@ -129,9 +140,4 @@ class EcoPetsPlugin : LibreforgePlugin() {
DiscoverRecipeListener(this)
)
}

companion object {
@JvmStatic
lateinit var instance: EcoPetsPlugin
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package com.willfp.ecopets.api.event

import com.willfp.ecopets.pets.Pet
import org.bukkit.OfflinePlayer
import org.bukkit.event.Cancellable
import org.bukkit.event.Event
import org.bukkit.event.HandlerList

class PlayerPetActivateEvent(
val who: OfflinePlayer,
override val pet: Pet
) : Event(), Cancellable, PetEvent {
private var cancelled = false

override fun setCancelled(cancel: Boolean) {
cancelled = cancel
}

override fun isCancelled(): Boolean {
return cancelled
}

override fun getHandlers(): HandlerList {
return handlerList
}

companion object {
@JvmStatic
val handlerList = HandlerList()
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package com.willfp.ecopets.api.event

import org.bukkit.OfflinePlayer
import org.bukkit.event.Cancellable
import org.bukkit.event.Event
import org.bukkit.event.HandlerList

class PlayerPetDeactivateEvent(
val who: OfflinePlayer
) : Event(), Cancellable {
private var cancelled = false

override fun setCancelled(cancel: Boolean) {
cancelled = cancel
}

override fun isCancelled(): Boolean {
return cancelled
}

override fun getHandlers(): HandlerList {
return handlerList
}

companion object {
@JvmStatic
val handlerList = HandlerList()
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
package com.willfp.ecopets.commands

import com.willfp.eco.core.EcoPlugin
import com.willfp.eco.core.command.impl.Subcommand
import com.willfp.eco.util.StringUtils
import com.willfp.ecopets.pets.Pets
import com.willfp.ecopets.pets.activePet
import com.willfp.ecopets.pets.hasPet
import org.bukkit.Bukkit
import org.bukkit.command.CommandSender
import org.bukkit.entity.Player

class CommandActivateOther(plugin: EcoPlugin) :
Subcommand(plugin, "activateother", "ecopets.command.activateother", false) {
override fun onExecute(sender: CommandSender, args: List<String>) {
if (args.isEmpty()) {
sender.sendMessage(plugin.langYml.getMessage("needs-player"))
return
}

if (args.size == 1) {
sender.sendMessage(plugin.langYml.getMessage("needs-pet"))
return
}

val playerName = args[0]

@Suppress("DEPRECATION")
val player = Bukkit.getOfflinePlayer(playerName)

if (!player.hasPlayedBefore() && player !is Player) {
sender.sendMessage(
plugin.langYml.getMessage("invalid-player")
.replace("%player%", playerName)
)
return
}

val pet = Pets.getByID(args[1])

if (pet == null) {
sender.sendMessage(
plugin.langYml.getMessage("invalid-pet")
.replace("%player%", playerName)
)
return
}

if (!player.hasPet(pet)) {
sender.sendMessage(
plugin.langYml.getMessage("doesnt-have-pet")
.replace("%player%", playerName)
)
return
}

if (player.activePet == pet) {
sender.sendMessage(
plugin.langYml.getMessage("pet-already-active")
.replace("%player%", playerName)
)
return
}

sender.sendMessage(
plugin.langYml.getMessage("activated-pet", StringUtils.FormatOption.WITHOUT_PLACEHOLDERS)
.replace("%pet%", pet.name)
.replace("%player%", playerName)
)
player.activePet = pet
}

override fun tabComplete(sender: CommandSender, args: List<String>): List<String> {
if (args.size == 1) {
return Bukkit.getOnlinePlayers().map { it.name }
}

if (args.size == 2) {
return Pets.values().map { it.id }
}

return emptyList()
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
package com.willfp.ecopets.commands

import com.willfp.eco.core.EcoPlugin
import com.willfp.eco.core.command.impl.Subcommand
import com.willfp.eco.util.StringUtils
import com.willfp.ecopets.pets.Pets
import com.willfp.ecopets.pets.activePet
import org.bukkit.Bukkit
import org.bukkit.command.CommandSender
import org.bukkit.entity.Player

class CommandDeactivateOther(plugin: EcoPlugin) :
Subcommand(plugin, "deactivateother", "ecopets.command.deactivateother", false) {
override fun onExecute(sender: CommandSender, args: List<String>) {
if (args.isEmpty()) {
sender.sendMessage(plugin.langYml.getMessage("needs-player"))
return
}

val playerName = args[0]

@Suppress("DEPRECATION")
val player = Bukkit.getOfflinePlayer(playerName)

if (!player.hasPlayedBefore() && player !is Player) {
sender.sendMessage(
plugin.langYml.getMessage("invalid-player")
.replace("%player%", playerName)
)
return
}

if (player.activePet == null) {
sender.sendMessage(
plugin.langYml.getMessage("no-pet-active")
.replace("%player%", playerName)
)
return
}

sender.sendMessage(
plugin.langYml.getMessage("deactivated-pet", StringUtils.FormatOption.WITHOUT_PLACEHOLDERS)
.replace("%pet%", player.activePet?.name ?: "")
.replace("%player%", playerName)
)

player.activePet = null
}

override fun tabComplete(sender: CommandSender, args: List<String>): List<String> {
if (args.size == 1) {
return Bukkit.getOnlinePlayers().map { it.name }
}

return emptyList()
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@ class CommandEcoPets(plugin: EcoPlugin) : PluginCommand(plugin, "ecopets", "ecop
.addSubcommand(CommandGiveXP(plugin))
.addSubcommand(CommandReset(plugin))
.addSubcommand(CommandGiveCurrentXP(plugin))
.addSubcommand(CommandActivateOther(plugin))
.addSubcommand(CommandDeactivateOther(plugin))
}

override fun onExecute(sender: CommandSender, args: List<String>) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package com.willfp.ecopets.libreforge
import com.willfp.eco.core.config.interfaces.Config
import com.willfp.ecopets.api.EcoPetsAPI
import com.willfp.ecopets.pets.Pets
import com.willfp.ecopets.pets.activePet
import com.willfp.libreforge.Dispatcher
import com.willfp.libreforge.NoCompileData
import com.willfp.libreforge.ProvidedHolder
Expand All @@ -24,6 +25,6 @@ object ConditionHasActivePet : Condition<NoCompileData>("has_active_pet") {
): Boolean {
val player = dispatcher.get<Player>() ?: return false

return EcoPetsAPI.instance.getActivePet(player) == Pets.getByID(config.getString("pet").lowercase())
return player.activePet == Pets.getByID(config.getString("pet").lowercase())
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package com.willfp.ecopets.libreforge
import com.willfp.eco.core.config.interfaces.Config
import com.willfp.ecopets.api.EcoPetsAPI
import com.willfp.ecopets.pets.Pets
import com.willfp.ecopets.pets.hasPet
import com.willfp.libreforge.Dispatcher
import com.willfp.libreforge.NoCompileData
import com.willfp.libreforge.ProvidedHolder
Expand All @@ -19,8 +20,7 @@ object ConditionHasPet : Condition<NoCompileData>("has_pet") {
): Boolean {
val player = dispatcher.get<Player>() ?: return false

return EcoPetsAPI.instance.hasPet(
player,
return player.hasPet(
Pets.getByID(config.getString("pet").lowercase()) ?: return false
)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import com.willfp.eco.core.config.interfaces.Config
import com.willfp.ecopets.api.EcoPetsAPI
import com.willfp.ecopets.api.event.PlayerPetLevelUpEvent
import com.willfp.ecopets.pets.Pets
import com.willfp.ecopets.pets.getPetLevel
import com.willfp.libreforge.Dispatcher
import com.willfp.libreforge.NoCompileData
import com.willfp.libreforge.ProvidedHolder
Expand Down Expand Up @@ -35,8 +36,8 @@ object ConditionHasPetLevel : Condition<NoCompileData>("has_pet_level") {
): Boolean {
val player = dispatcher.get<Player>() ?: return false

return EcoPetsAPI.instance.getPetLevel(
player,

return player.getPetLevel(
Pets.getByID(config.getString("pet").lowercase()) ?: return false
) >= config.getIntFromExpression("level", player)
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package com.willfp.ecopets.libreforge

import com.willfp.eco.core.config.interfaces.Config
import com.willfp.ecopets.api.EcoPetsAPI
import com.willfp.ecopets.pets.Pets
import com.willfp.ecopets.pets.activePet
import com.willfp.ecopets.pets.hasPet
import com.willfp.libreforge.NoCompileData
import com.willfp.libreforge.arguments
import com.willfp.libreforge.effects.Effect
import com.willfp.libreforge.getFormattedString
import com.willfp.libreforge.getFormattedStrings
import com.willfp.libreforge.triggers.TriggerData
import com.willfp.libreforge.triggers.TriggerParameter

object EffectActivatePet : Effect<NoCompileData>("activate_pet") {
override val parameters = setOf(
TriggerParameter.PLAYER
)

override val arguments = arguments {
require("pet", "You must specify the pet to activate!")
}

override fun onTrigger(config: Config, data: TriggerData, compileData: NoCompileData): Boolean {
val player = data.player ?: return false
val pet = Pets.getByID(config.getFormattedString("pet", data)) ?: return false

if (!player.hasPet(pet) || player.activePet == pet) return false

player.activePet = pet

return true
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package com.willfp.ecopets.libreforge

import com.willfp.eco.core.config.interfaces.Config
import com.willfp.ecopets.api.EcoPetsAPI
import com.willfp.ecopets.pets.Pets
import com.willfp.ecopets.pets.activePet
import com.willfp.ecopets.pets.hasPet
import com.willfp.libreforge.NoCompileData
import com.willfp.libreforge.arguments
import com.willfp.libreforge.effects.Effect
import com.willfp.libreforge.getFormattedString
import com.willfp.libreforge.getFormattedStrings
import com.willfp.libreforge.triggers.TriggerData
import com.willfp.libreforge.triggers.TriggerParameter

object EffectDeactivatePet : Effect<NoCompileData>("deactivate_pet") {
override val parameters = setOf(
TriggerParameter.PLAYER
)

override fun onTrigger(config: Config, data: TriggerData, compileData: NoCompileData): Boolean {
val player = data.player ?: return false

if (player.activePet == null) return false

player.activePet = null

return true
}
}
Loading