effect_execution.clj

Branches > main > 950225b > files / src / net / bowmap / stormbow / effect_execution.clj

(ns net.bowmap.stormbow.effect-execution
  (:require
   [clojure.core.async :refer [put!]]
   [net.bowmap.protocol.packet :as pk]
   [net.bowmap.protocol.packet.clientbound :as clientbound]
   [net.bowmap.server.player :as player]
   [net.bowmap.server.server :as server]
   [net.bowmap.stormbow.effect :as effect]
   [net.bowmap.transport.connection :as connection]))

(defmulti execute-effect!
  (fn [{:keys! [::effect/id]}]
    id))

(defmethod execute-effect! ::effect/send-chat-message [{::player/keys! [uuid] :keys! [message]}]
  (let [{::connection/keys! [connection]} (@server/players uuid)
        {::connection/keys! [clientbound-packets]} connection]
    (put! clientbound-packets {::pk/id ::clientbound/system-chat-message
                               :message message})))

(defn execute-effects! [effects]
  (run! execute-effect! effects))