From cfddd054991a87ba5dd162f29099149c22951e7e Mon Sep 17 00:00:00 2001 From: Major- Date: Thu, 23 Aug 2018 18:29:36 +0100 Subject: [PATCH] Repackage api plugin --- .../apollo/game/plugin/api}/definitions.kt | 18 ++--- .../apollo/game/plugin/api}/player.kt | 0 .../game/{plugins => plugin}/api/position.kt | 2 +- .../{ => org/apollo/game/plugin/api}/util.kt | 2 +- .../{ => org/apollo/game/plugin/api}/world.kt | 37 +++++----- game/plugin/areas/src/Area.kt | 6 +- game/plugin/cmd/src/teleport-cmd.plugin.kts | 68 +++++++++---------- game/plugin/navigation/door/src/door.kt | 17 ++--- game/plugin/skills/mining/src/mining.kt | 18 ++--- .../woodcutting/src/woodcutting.plugin.kts | 9 +-- 10 files changed, 83 insertions(+), 94 deletions(-) rename game/plugin/api/src/{ => org/apollo/game/plugin/api}/definitions.kt (78%) rename game/plugin/api/src/{ => org/apollo/game/plugin/api}/player.kt (100%) rename game/plugin/api/src/org/apollo/game/{plugins => plugin}/api/position.kt (88%) rename game/plugin/api/src/{ => org/apollo/game/plugin/api}/util.kt (81%) rename game/plugin/api/src/{ => org/apollo/game/plugin/api}/world.kt (72%) diff --git a/game/plugin/api/src/definitions.kt b/game/plugin/api/src/org/apollo/game/plugin/api/definitions.kt similarity index 78% rename from game/plugin/api/src/definitions.kt rename to game/plugin/api/src/org/apollo/game/plugin/api/definitions.kt index 9e64e460..2512d72c 100644 --- a/game/plugin/api/src/definitions.kt +++ b/game/plugin/api/src/org/apollo/game/plugin/api/definitions.kt @@ -3,6 +3,7 @@ package org.apollo.game.plugin.api import org.apollo.cache.def.ItemDefinition import org.apollo.cache.def.NpcDefinition import org.apollo.cache.def.ObjectDefinition +import java.lang.IllegalArgumentException object Definitions { fun item(id: Int): ItemDefinition? { @@ -22,11 +23,7 @@ object Definitions { } fun npc(id: Int): NpcDefinition? { - try { - return NpcDefinition.lookup(id) - } catch (e: NullPointerException) { - throw RuntimeException("Failed to find npc $id: count=${NpcDefinition.count()}") - } + return NpcDefinition.lookup(id) } fun npc(name: String): NpcDefinition? { @@ -43,11 +40,16 @@ object Definitions { nameSupplier: T.() -> String, name: String ): T? { - val definitions = definitionsProvider.invoke() + val definitions = definitionsProvider() if (ID_REGEX matches name) { - val id = name.substring(name.lastIndexOf('_') + 1, name.length).toInt() - return definitions.getOrNull(id) + val id = name.substring(name.lastIndexOf('_') + 1, name.length).toIntOrNull() + + if (id == null || id >= definitions.size) { + throw IllegalArgumentException("Error while searching for definition: invalid id suffix in $name.") + } + + return definitions[id] } val normalizedName = name.replace('_', ' ') diff --git a/game/plugin/api/src/player.kt b/game/plugin/api/src/org/apollo/game/plugin/api/player.kt similarity index 100% rename from game/plugin/api/src/player.kt rename to game/plugin/api/src/org/apollo/game/plugin/api/player.kt diff --git a/game/plugin/api/src/org/apollo/game/plugins/api/position.kt b/game/plugin/api/src/org/apollo/game/plugin/api/position.kt similarity index 88% rename from game/plugin/api/src/org/apollo/game/plugins/api/position.kt rename to game/plugin/api/src/org/apollo/game/plugin/api/position.kt index 59e6d3de..35f90142 100644 --- a/game/plugin/api/src/org/apollo/game/plugins/api/position.kt +++ b/game/plugin/api/src/org/apollo/game/plugin/api/position.kt @@ -1,4 +1,4 @@ -package org.apollo.game.plugins.api +package org.apollo.game.plugin.api import org.apollo.game.model.Position diff --git a/game/plugin/api/src/util.kt b/game/plugin/api/src/org/apollo/game/plugin/api/util.kt similarity index 81% rename from game/plugin/api/src/util.kt rename to game/plugin/api/src/org/apollo/game/plugin/api/util.kt index 663aa3de..a8d53826 100644 --- a/game/plugin/api/src/util.kt +++ b/game/plugin/api/src/org/apollo/game/plugin/api/util.kt @@ -2,7 +2,7 @@ package org.apollo.game.plugin.api import java.util.* -public val RAND = Random() +val RAND = Random() fun rand(bounds: Int): Int { return RAND.nextInt(bounds) diff --git a/game/plugin/api/src/world.kt b/game/plugin/api/src/org/apollo/game/plugin/api/world.kt similarity index 72% rename from game/plugin/api/src/world.kt rename to game/plugin/api/src/org/apollo/game/plugin/api/world.kt index 6dd75879..36ab4859 100644 --- a/game/plugin/api/src/world.kt +++ b/game/plugin/api/src/org/apollo/game/plugin/api/world.kt @@ -10,23 +10,34 @@ import org.apollo.game.model.entity.EntityType.STATIC_OBJECT import org.apollo.game.model.entity.obj.DynamicGameObject import org.apollo.game.model.entity.obj.GameObject import org.apollo.game.scheduling.ScheduledTask -import java.util.Optional -import java.util.stream.Stream -fun Region.find(position: Position, predicate: (T) -> Boolean, vararg types: EntityType): Stream { - val result = getEntities(position, *types) - return result.stream().filter(predicate::invoke) +fun Region.find(position: Position, predicate: (T) -> Boolean, vararg types: EntityType): Sequence { + return getEntities(position, *types).asSequence().filter(predicate) } -fun Region.findObjects(position: Position, id: Int): Stream { +fun Region.findObjects(position: Position, id: Int): Sequence { return find(position, { it.id == id }, DYNAMIC_OBJECT, STATIC_OBJECT) } -fun Region.findObject(position: Position, id: Int): Optional { - return find(position, { it.id == id }, DYNAMIC_OBJECT, STATIC_OBJECT) - .findFirst() +fun Region.findObject(position: Position, id: Int): GameObject? { + return find(position, { it.id == id }, DYNAMIC_OBJECT, STATIC_OBJECT).firstOrNull() } +fun World.findObject(position: Position, objectId: Int): GameObject? { + return regionRepository.fromPosition(position).findObject(position, objectId) +} + +fun World.findObjects(position: Position, id: Int): Sequence { + return regionRepository.fromPosition(position).findObjects(position, id) +} + +fun World.expireObject(obj: GameObject, replacement: Int, respawnDelay: Int) { + val replacementObj = DynamicGameObject.createPublic(this, replacement, obj.position, obj.type, obj.orientation) + + schedule(ExpireObjectTask(this, obj, replacementObj, respawnDelay)) +} + + class ExpireObjectTask( private val world: World, private val existing: GameObject, @@ -49,10 +60,4 @@ class ExpireObjectTask( stop() } } -} - -fun World.expireObject(obj: GameObject, replacement: Int, respawnDelay: Int) { - val replacementObj = DynamicGameObject.createPublic(this, replacement, obj.position, obj.type, obj.orientation) - - schedule(ExpireObjectTask(this, obj, replacementObj, respawnDelay)) -} +} \ No newline at end of file diff --git a/game/plugin/areas/src/Area.kt b/game/plugin/areas/src/Area.kt index 6efdae06..376ce33a 100644 --- a/game/plugin/areas/src/Area.kt +++ b/game/plugin/areas/src/Area.kt @@ -1,9 +1,9 @@ package org.apollo.game.plugins.area import org.apollo.game.model.Position -import org.apollo.game.plugins.api.Position.component1 -import org.apollo.game.plugins.api.Position.component2 -import org.apollo.game.plugins.api.Position.component3 +import org.apollo.game.plugin.api.Position.component1 +import org.apollo.game.plugin.api.Position.component2 +import org.apollo.game.plugin.api.Position.component3 /** * An area in the game world. diff --git a/game/plugin/cmd/src/teleport-cmd.plugin.kts b/game/plugin/cmd/src/teleport-cmd.plugin.kts index 381118a4..4d1dabb7 100644 --- a/game/plugin/cmd/src/teleport-cmd.plugin.kts +++ b/game/plugin/cmd/src/teleport-cmd.plugin.kts @@ -2,9 +2,9 @@ import com.google.common.primitives.Ints import org.apollo.game.model.Position import org.apollo.game.model.entity.setting.PrivilegeLevel -import org.apollo.game.plugins.api.Position.component1 -import org.apollo.game.plugins.api.Position.component2 -import org.apollo.game.plugins.api.Position.component3 +import org.apollo.game.plugin.api.Position.component1 +import org.apollo.game.plugin.api.Position.component2 +import org.apollo.game.plugin.api.Position.component3 /** * Sends the player's position. @@ -75,35 +75,35 @@ on_command("tele", PrivilegeLevel.ADMINISTRATOR) } } -private val TELEPORT_DESTINATIONS = listOf( - "alkharid" to Position(3292, 3171, 0), - "ardougne" to Position(2662, 3304, 0), - "barrows" to Position(3565, 3314, 0), - "brimhaven" to Position(2802, 3179, 0), - "burthorpe" to Position(2898, 3545, 0), - "camelot" to Position(2757, 3478, 0), - "canifis" to Position(3493, 3489, 0), - "cw" to Position(2442, 3090, 0), - "draynor" to Position(3082, 3249, 0), - "duelarena" to Position(3370, 3267, 0), - "edgeville" to Position(3087, 3504, 0), - "entrana" to Position(2827, 3343, 0), - "falador" to Position(2965, 3379, 0), - "ge" to Position(3164, 3476, 0), - "kbd" to Position(2273, 4680, 0), - "keldagrim" to Position(2845, 10210, 0), - "kq" to Position(3507, 9494, 0), - "lumbridge" to Position(3222, 3219, 0), - "lunar" to Position(2113, 3915, 0), - "misc" to Position(2515, 3866, 0), - "neit" to Position(2332, 3804, 0), - "pc" to Position(2658, 2660, 0), - "rellekka" to Position(2660, 3657, 0), - "shilo" to Position(2852, 2955, 0), - "taverley" to Position(2895, 3443, 0), - "tutorial" to Position(3094, 3107, 0), - "tzhaar" to Position(2480, 5175, 0), - "varrock" to Position(3212, 3423, 0), - "yanille" to Position(2605, 3096, 0), - "zanaris" to Position(2452, 4473, 0) +internal val TELEPORT_DESTINATIONS = listOf( + "alkharid" to Position(3292, 3171), + "ardougne" to Position(2662, 3304), + "barrows" to Position(3565, 3314), + "brimhaven" to Position(2802, 3179), + "burthorpe" to Position(2898, 3545), + "camelot" to Position(2757, 3478), + "canifis" to Position(3493, 3489), + "cw" to Position(2442, 3090), + "draynor" to Position(3082, 3249), + "duelarena" to Position(3370, 3267), + "edgeville" to Position(3087, 3504), + "entrana" to Position(2827, 3343), + "falador" to Position(2965, 3379), + "ge" to Position(3164, 3476), + "kbd" to Position(2273, 4680), + "keldagrim" to Position(2845, 10210), + "kq" to Position(3507, 9494), + "lumbridge" to Position(3222, 3219), + "lunar" to Position(2113, 3915), + "misc" to Position(2515, 3866), + "neit" to Position(2332, 3804), + "pc" to Position(2658, 2660), + "rellekka" to Position(2660, 3657), + "shilo" to Position(2852, 2955), + "taverley" to Position(2895, 3443), + "tutorial" to Position(3094, 3107), + "tzhaar" to Position(2480, 5175), + "varrock" to Position(3212, 3423), + "yanille" to Position(2605, 3096), + "zanaris" to Position(2452, 4473) ) \ No newline at end of file diff --git a/game/plugin/navigation/door/src/door.kt b/game/plugin/navigation/door/src/door.kt index afc8f14d..d7255cb7 100644 --- a/game/plugin/navigation/door/src/door.kt +++ b/game/plugin/navigation/door/src/door.kt @@ -10,7 +10,7 @@ import org.apollo.game.model.entity.obj.GameObject import org.apollo.game.model.event.PlayerEvent import org.apollo.game.plugin.api.findObject import org.apollo.net.message.Message -import java.util.Objects +import java.util.* enum class DoorType { LEFT, RIGHT, NOT_SUPPORTED @@ -34,7 +34,7 @@ class Door(private val gameObject: GameObject) { Direction.EAST to Direction.SOUTH ) - val toggledDoors: HashMap = hashMapOf() + val toggledDoors = hashMapOf() val LEFT_HINGED = setOf(1516, 1536, 1533) @@ -47,13 +47,7 @@ class Door(private val gameObject: GameObject) { * @param objectId The [GameObject] id of the door */ fun find(world: World, position: Position, objectId: Int): Door? { - val region = world.regionRepository.fromPosition(position) - val gameObject = region.findObject(position, objectId).orElseGet(null) - return if (gameObject == null) { - null - } else { - Door(gameObject) - } + return world.findObject(position, objectId)?.let(::Door) } } @@ -88,7 +82,7 @@ class Door(private val gameObject: GameObject) { regionRepository.fromPosition(gameObject.position).removeEntity(gameObject) - val originalDoor: GameObject? = toggledDoors[gameObject] + val originalDoor = toggledDoors[gameObject] if (originalDoor == null) { val position = movePosition() @@ -98,7 +92,7 @@ class Door(private val gameObject: GameObject) { orientation) regionRepository.fromPosition(position).addEntity(toggledDoor) - toggledDoors.put(toggledDoor, gameObject) + toggledDoors[toggledDoor] = gameObject } else { toggledDoors.remove(gameObject) regionRepository.fromPosition(originalDoor.position).addEntity(originalDoor) @@ -119,6 +113,7 @@ class Door(private val gameObject: GameObject) { */ private fun translateDirection(): Direction? { val direction = Direction.WNES[gameObject.orientation] + return when (type()) { DoorType.LEFT -> LEFT_HINGE_ORIENTATION[direction] DoorType.RIGHT -> RIGHT_HINGE_ORIENTATION[direction] diff --git a/game/plugin/skills/mining/src/mining.kt b/game/plugin/skills/mining/src/mining.kt index 0dc0f778..c98dd8a8 100644 --- a/game/plugin/skills/mining/src/mining.kt +++ b/game/plugin/skills/mining/src/mining.kt @@ -4,7 +4,6 @@ import org.apollo.game.message.impl.ObjectActionMessage import org.apollo.game.model.Position import org.apollo.game.model.World import org.apollo.game.model.entity.Player -import org.apollo.game.model.entity.obj.GameObject import org.apollo.game.plugin.api.* import org.apollo.game.plugin.skills.mining.Ore import org.apollo.game.plugin.skills.mining.Pickaxe @@ -88,22 +87,14 @@ class MiningAction( data class MiningTarget(val objectId: Int, val position: Position, val ore: Ore) { - /** - * Get the [GameObject] represented by this target. - * - * @todo: api: shouldn't be as verbose - */ - private fun getObject(world: World): GameObject? { - val region = world.regionRepository.fromPosition(position) - return region.findObject(position, objectId).orElse(null) - } - /** * Deplete this mining resource from the [World], and schedule it to be respawned * in a number of ticks specified by the [Ore]. */ fun deplete(world: World) { - world.expireObject(getObject(world)!!, ore.objects[objectId]!!, ore.respawn) + val obj = world.findObject(position, objectId)!! + + world.expireObject(obj, ore.objects[objectId]!!, ore.respawn) } /** @@ -117,7 +108,7 @@ data class MiningTarget(val objectId: Int, val position: Position, val ore: Ore) /** * Check if this target is still valid in the [World] (i.e. has not been [deplete]d). */ - fun isValid(world: World) = getObject(world) != null + fun isValid(world: World) = world.findObject(position, objectId) != null /** * Get the normalized name of the [Ore] represented by this target. @@ -142,5 +133,6 @@ data class MiningTarget(val objectId: Int, val position: Position, val ore: Ore) * this [MiningTarget]. */ fun skillRequirementsMet(mob: Player) = mob.mining.current < ore.level + } diff --git a/game/plugin/skills/woodcutting/src/woodcutting.plugin.kts b/game/plugin/skills/woodcutting/src/woodcutting.plugin.kts index f14e5b73..bdb0b032 100644 --- a/game/plugin/skills/woodcutting/src/woodcutting.plugin.kts +++ b/game/plugin/skills/woodcutting/src/woodcutting.plugin.kts @@ -7,11 +7,7 @@ import org.apollo.game.model.Position import org.apollo.game.model.World import org.apollo.game.model.entity.Player import org.apollo.game.model.entity.obj.GameObject -import org.apollo.game.plugin.api.Definitions -import org.apollo.game.plugin.api.expireObject -import org.apollo.game.plugin.api.findObject -import org.apollo.game.plugin.api.rand -import org.apollo.game.plugin.api.woodcutting +import org.apollo.game.plugin.api.* import org.apollo.game.plugin.skills.woodcutting.Axe import org.apollo.game.plugin.skills.woodcutting.Tree import java.util.concurrent.TimeUnit @@ -30,8 +26,7 @@ class WoodcuttingTarget(private val objectId: Int, val position: Position, val t * Get the tree object in the world */ fun getObject(world: World): GameObject? { - val region = world.regionRepository.fromPosition(position) - return region.findObject(position, objectId).orElse(null) + return world.findObject(position, objectId) } /**