From 013dd879ea56ec9b5b05de889a22b66585f82d48 Mon Sep 17 00:00:00 2001 From: Martin K Date: Sat, 11 Jun 2022 00:38:59 +0300 Subject: [PATCH 1/5] Create boilerplate kill command --- pymine/logic/cmds/kill.py | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 pymine/logic/cmds/kill.py diff --git a/pymine/logic/cmds/kill.py b/pymine/logic/cmds/kill.py new file mode 100644 index 00000000..0d0febb2 --- /dev/null +++ b/pymine/logic/cmds/kill.py @@ -0,0 +1,24 @@ +# A flexible and fast Minecraft server software written completely in Python. +# Copyright (C) 2022 PyMine + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +from pymine.server import server + + +@server.api.commands.on_command(name="kill", node="minecraft.cmd.kill") +async def kill(uuid, name: str): + """Kills a player.""" + + server.console.debug(f"Kill was executed. {uuid=}, {name=}") From 7999fda5bd0e8df19504cc520802eb85c65b3605 Mon Sep 17 00:00:00 2001 From: Martin K Date: Sat, 11 Jun 2022 01:02:04 +0300 Subject: [PATCH 2/5] Kill: Get player from username --- pymine/logic/cmds/kill.py | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/pymine/logic/cmds/kill.py b/pymine/logic/cmds/kill.py index 0d0febb2..436bf328 100644 --- a/pymine/logic/cmds/kill.py +++ b/pymine/logic/cmds/kill.py @@ -21,4 +21,17 @@ async def kill(uuid, name: str): """Kills a player.""" - server.console.debug(f"Kill was executed. {uuid=}, {name=}") + server.console.info(f"Kill was executed. {uuid=}, {name=}") + server.console.info(f"{server.playerio.cache=}") + + player = None + + for i in server.playerio.cache.values(): + if i.username == name: + player = i + break + else: + server.console.error("No player with username \"" + name + "\" found.") + return + + server.console.info(player.stream) From 4811ef041ee3c2ca0c23da1da30ef0a8c4f9e54c Mon Sep 17 00:00:00 2001 From: Martin K Date: Sat, 11 Jun 2022 01:14:26 +0300 Subject: [PATCH 3/5] Kill: Send UpdateHealth packet And also change node to pymine.cmds.kill --- pymine/logic/cmds/kill.py | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/pymine/logic/cmds/kill.py b/pymine/logic/cmds/kill.py index 436bf328..bcd44f54 100644 --- a/pymine/logic/cmds/kill.py +++ b/pymine/logic/cmds/kill.py @@ -14,10 +14,11 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . +import pymine.net.packets as packets from pymine.server import server -@server.api.commands.on_command(name="kill", node="minecraft.cmd.kill") +@server.api.commands.on_command(name="kill", node="pymine.cmds.kill") async def kill(uuid, name: str): """Kills a player.""" @@ -25,13 +26,23 @@ async def kill(uuid, name: str): server.console.info(f"{server.playerio.cache=}") player = None - + for i in server.playerio.cache.values(): if i.username == name: player = i break else: - server.console.error("No player with username \"" + name + "\" found.") + server.console.error('No player with username "' + name + '" found.') return server.console.info(player.stream) + #server.console.info(player.data) + + await server.send_packet( + player.stream, + packets.play.player.PlayUpdateHealth( + 0, + 20, + 0.5 + ) + ) From 0af316b588596af8f5506f817fe4708551e2a1c7 Mon Sep 17 00:00:00 2001 From: Martin K Date: Sat, 11 Jun 2022 01:19:37 +0300 Subject: [PATCH 4/5] Kill: Clean up logging --- pymine/logic/cmds/kill.py | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/pymine/logic/cmds/kill.py b/pymine/logic/cmds/kill.py index bcd44f54..31bc9256 100644 --- a/pymine/logic/cmds/kill.py +++ b/pymine/logic/cmds/kill.py @@ -22,9 +22,6 @@ async def kill(uuid, name: str): """Kills a player.""" - server.console.info(f"Kill was executed. {uuid=}, {name=}") - server.console.info(f"{server.playerio.cache=}") - player = None for i in server.playerio.cache.values(): @@ -35,8 +32,7 @@ async def kill(uuid, name: str): server.console.error('No player with username "' + name + '" found.') return - server.console.info(player.stream) - #server.console.info(player.data) + server.console.info("Killing player " + player.username + "...") await server.send_packet( player.stream, From d71d4ead12cdadd5a0a27d21e308b8f5a993cc6d Mon Sep 17 00:00:00 2001 From: Martin K Date: Sat, 11 Jun 2022 01:36:32 +0300 Subject: [PATCH 5/5] Kill: Take hunger into consideration Take hunger into consideration, to avoid a sudden increase. --- pymine/logic/cmds/kill.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/pymine/logic/cmds/kill.py b/pymine/logic/cmds/kill.py index 31bc9256..42029942 100644 --- a/pymine/logic/cmds/kill.py +++ b/pymine/logic/cmds/kill.py @@ -37,8 +37,6 @@ async def kill(uuid, name: str): await server.send_packet( player.stream, packets.play.player.PlayUpdateHealth( - 0, - 20, - 0.5 - ) + 0, player.data["foodLevel"].data, player.data["foodSaturationLevel"].data + ), )