Skip to content

Commit

Permalink
add toggleable multiplayer mode for events (see #1)
Browse files Browse the repository at this point in the history
  • Loading branch information
amg-12 committed Nov 26, 2023
1 parent 892b775 commit 10b8603
Show file tree
Hide file tree
Showing 4 changed files with 46 additions and 14 deletions.
2 changes: 1 addition & 1 deletion add-on/BP/manifest.json
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
"version": [
0,
0,
3
4
]
},
"modules": [
Expand Down
38 changes: 30 additions & 8 deletions add-on/BP/scripts/main.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,25 +2,46 @@ import { system, world } from "@minecraft/server"

const overworld = world.getDimension("overworld")

let multiplayer = true

function sendEvent(player, message) {
if (multiplayer) {
player.teleport(player.location)
} else {
player.runCommand("w @s " + message)
}
}

world.afterEvents.entityHurt.subscribe(data => {
let name = data.damageSource.damagingEntity.nameTag
let player = data.damageSource.damagingEntity
switch (data.damageSource.cause) {
case "projectile":
data.hurtEntity.addTag("shot_by_" + name)
data.hurtEntity.runCommand("w " + name + " shot")
data.hurtEntity.addTag("shot_by_" + player.name)
sendEvent(player, "shot")
break
case "entityAttack":
data.hurtEntity.addTag("hit_by_" + name)
data.hurtEntity.runCommand("w " + name + " hit")
data.hurtEntity.addTag("hit_by_" + player.name)
sendEvent(player, "hit")
break
default: break
}
})

// use of tags here is a hack
// would be better to parse target selector to EntityQueryOptions
system.afterEvents.scriptEventReceive.subscribe(data => {
switch (data.id) {
case "tcz:multiplayer":
switch (data.message) {
case "true":
multiplayer = true
break
case "false":
multiplayer = false
break
default:
overworld.runCommand("say multiplayer: " + multiplayer)
break
}
break
case "tcz:rename":
let args = data.message.split("|")
let selector = "@" + args[0]
Expand All @@ -33,6 +54,7 @@ system.afterEvents.scriptEventReceive.subscribe(data => {
})
data.sourceEntity.runCommand("tag " + selector + " remove " + tag)
break
default: break
default:
overworld.runCommand("w " + data.sourceEntity.name + " no scriptevent named " + data.id)
}
})
2 changes: 1 addition & 1 deletion pxt.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "The Code Zone",
"version": "0.0.3",
"version": "0.0.4",
"description": "Developed by Amitai",
"license": "MIT",
"dependencies": {
Expand Down
18 changes: 14 additions & 4 deletions pxt/modded.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,15 +8,25 @@ enum Damage {
//% weight=66 color=#333333 icon="\uf0d0"
namespace modded {

//% block="on $target $damage"
//% group=Wand
export function subscribe(multi: boolean, message: string, func: () => void) {
if (multi) {
player.onTeleported(func)
} else {
player.onTellCommand(message, func)
}
}

//% block="on $target $damage, multiplayer %multi=toggleOnOff"
//% group=Wand weight=80
//% draggableParameters
export function onDamage(damage: Damage, handler: (target: TargetSelector) => void) {
//% multi.defl=true
export function onDamage(damage: Damage, multi: boolean, handler: (target: TargetSelector) => void) {
player.execute("scriptevent tcz:multiplayer " + multi)
let dmg = damage ? "hit" : "shot"
let tag = dmg + "_by_" + player.name()
let tar = mobs.target(ALL_ENTITIES)
tar.addRule("tag", tag)
player.onTellCommand(dmg, function () {
subscribe(multi, dmg, function () {
handler(tar)
player.execute("tag @e remove " + tag)
})
Expand Down

0 comments on commit 10b8603

Please sign in to comment.