Skip to content

Commit

Permalink
Add subscribers
Browse files Browse the repository at this point in the history
  • Loading branch information
Fingercomp committed Dec 4, 2016
1 parent 7e2fb1e commit 3efdc42
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 5 deletions.
2 changes: 2 additions & 0 deletions src/events.lua
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@ events.GameStart = EventEngine:event("gamestart")
events.RecvMsg = EventEngine:event("recvmsg")
events.Quit = EventEngine:event("quit")
events.Teleport = EventEngine:event("teleport")
events.SetChest = EventEngine:event("setchest")
events.UnsetChest = EventEngine:event("unsetchest")

EventEngine:stdEvent("modem_message", events.RecvMsg)

Expand Down
34 changes: 29 additions & 5 deletions src/game/world.lua
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,13 @@
local com = require("component")
local module = require("ut-serv.module")

local db = module.load("db")
local events = module.load("events")

local debug = com.debug

local EventEngine = events.engine

local chest = config.get("world", {}, true).get("chest", {}, true)
local coin = config.get("world", {}, true).get("item", {}, true)

Expand Down Expand Up @@ -53,8 +56,29 @@ local function setChest(world, x, y, z)
return success, reason
end

return {
setChest = setChest,
setBlock = setBlock,
getBlockData = getBlockData
}
EventEngine:subscribe("setchest", events.priority.high, function(handler, evt)
local prevBlock = getBlockData(debug.getWorld(), evt.x, evt.y, evt.z)
local result = setChest(debug.getWorld(), evt.x, evt.y, evt.z)
if not result then
evt:cancel()
end
table.insert(db.blocks, {x = evt.x, y = evt.y, z = evt.z, data = prevBlock,
time = evt.time})
end)

EventEngine:subscribe("unsetchest", events.priority.high, function(handler, evt)
local block = {}
for _, b in pairs(db.blocks) do
if b.x == evt.x and b.y == evt.y and b.z == evt.z then
block = b
end
end
if not block then
evt:cancel()
end
local result = setBlock(evt.x, evt.y, evt.z, block.data.id, block.data.meta,
block.data.nbt)
if not result then
evt:cancel()
end
end)

0 comments on commit 3efdc42

Please sign in to comment.