firework_arrow:
type: item
debug: false
material: arrow
display name: Firework Arrow
lore:
- <&a>Fire this arrow
- <&b>for magic funtime
- <&d>surprise!
- <&c>(Requires BPG Launcher)
recipe:
- i@arrow|i@tnt|i@tnt
- i@firework|i@air|i@air
- i@air|i@air|i@air
sharp_arrow:
type: item
debug: false
material: arrow
display name: Sharpened Arrow
lore:
- <&c>This arrow is
- <&c>extra sharp!
recipe:
- i@arrow|i@arrow|i@arrow
- i@air|i@air|i@air
- i@air|i@air|i@air
shotblast_arrow:
type: item
debug: false
material: arrow
display name: Bundle Of Arrow
lore:
- <&c>Launches 3 arrows
- <&c>all at once!
recipe:
- i@arrow|i@arrow|i@arrow
- i@string|i@string|i@string
- i@air|i@air|i@air
fast_arrow:
type: item
debug: false
material: arrow
display name: Faster Arrow
lore:
- <&c>This arrow moves
- <&c>extra fast!
recipe:
- i@arrow|i@arrow|i@redstone
- i@air|i@air|i@air
- i@air|i@air|i@air
weak_arrow:
type: item
debug: false
material: arrow
display name: Weakened Arrow
lore:
- <&c>This arrow is
- <&c>damaged.
bpg_bow:
type: item
debug: false
material: bow
display name: BPG Launcher
lore:
- <&c>Bow Propelled Grenade
- <&c>Launcher.
- <&c>(Requires BPG Arrows)
recipe:
- i@bow|i@tnt|i@tnt
- i@diamond_block|i@tnt|i@tnt
- i@iron_block|i@iron_block|i@iron_block
weak_bpg_arrow:
type: item
debug: false
material: arrow
display name: Weak BPG Arrow
lore:
- <&c>This arrow explodes
- <&c>weakly on impact.
- <&c>(Requires BPG Launcher)
recipe:
- i@arrow|i@tnt|i@air
- i@air|i@air|i@air
- i@air|i@air|i@air
strong_bpg_arrow:
type: item
debug: false
material: arrow
display name: Strong BPG Arrow
lore:
- <&c>This arrow explodes
- <&c>strongly on impact.
- <&c>(Requires BPG Launcher)
recipe:
- i@arrow|i@tnt|i@tnt
- i@air|i@air|i@air
- i@air|i@air|i@air
superior_bpg_arrow:
type: item
debug: false
material: arrow
display name: Superior BPG Arrow
lore:
- <&c>This arrow explodes for
- <&c>massive damage on impact.
- <&c>(Requires BPG Launcher)
mininuke_bpg_arrow:
type: item
debug: false
material: arrow
display name: Mininuke BPG Arrow
lore:
- <&c>This arrow explodes
- <&c>with nuclear force on impact.
- <&c>(Requires BPG Launcher)
recipe:
- i@tnt|i@arrow|i@tnt
- i@tnt|i@tnt|i@tnt
- i@air|i@air|i@air
firework_arrow_determine_type:
type: task
debug: false
script:
- if <entry[myitem].result> == i@firework_arrow {
- flag player arrowtype:firework
}
else if <entry[myitem].result> == i@weak_bpg_arrow {
- flag player arrowtype:weak_bpg
}
else if <entry[myitem].result> == i@strong_bpg_arrow {
- flag player arrowtype:strong_bpg
}
else if <entry[myitem].result> == i@superior_bpg_arrow {
- flag player arrowtype:superior_bpg
}
else if <entry[myitem].result> == i@mininuke_bpg_arrow {
- flag player arrowtype:mininuke_bpg
}
else {
- narrate "<&c>You've loaded the wrong arrow type. Must load an explosive round!"
- determine cancelled
}
- flag player arrows:|:<context.projectile.eid> duration:10s
- flag player arrows:|:<context.projectile.eid> duration:10s
firework_arrow_world:
type: world
debug: false
events:
on player shoots bow:
- flag player arrowtype:!
- define item <player.inventory.slot[<player.inventory.find.material[arrow]>]>
- adjust %item% quantity:1 save:myitem
- if <context.bow> == i@bpg_bow {
- inject firework_arrow_determine_type
}
- if <entry[myitem].result> == i@sharp_arrow {
- flag player arrowtype:sharp
- flag player arrows:|:<context.projectile.eid> duration:10s
}
else if <entry[myitem].result> == i@weak_arrow {
- flag player arrowtype:damaged
- flag player arrows:|:<context.projectile.eid> duration:10s
}
else if <entry[myitem].result> == i@fast_arrow {
- shoot arrow[critical=true] o:<player> speed:<context.force.mul[1.5]>
- take <entry[myitem].result> qty:1
- playsound sound:shoot_arrow <player.location>
- determine cancelled
}
else if <entry[myitem].result> == i@shotblast_arrow {
- shoot arrow|arrow|arrow o:<player> speed:<context.force> spread:20
- take <entry[myitem].result> qty:1
- playsound sound:shoot_arrow <player.location>
- determine cancelled
}
on projectile hits block:
- if <context.shooter||null> == null queue clear
- if <context.shooter> matches player {
- if !<context.shooter.as_player.flag[arrows].contains[<context.projectile.eid>]> queue clear
- run firework_arrow_handler_internal def:<context.projectile.location>|<context.projectile> as:<context.shooter>
}
on arrow damages entity:
- if <context.damager> matches player {
- if !<context.damager.as_player.flag[arrows].contains[<context.projectile.eid>]> queue clear
- if <context.damager.as_player.flag[arrowtype]> == sharp determine <context.damage.mul[2]>
- if <context.damager.as_player.flag[arrowtype]> == damaged determine <context.damage.div[1.5]>
- run firework_arrow_handler_internal def:<context.entity.location>|null as:<context.damager>
}
firework_arrow_handler_internal:
type: task
debug: false
speed: 2t
script:
- ^if <player.flag[arrowtype]> == firework {
- define t1 <li@ball|creeper.random>,<util.random.int[1].to[255]>,<util.random.int[1].to[255]>,<util.random.int[1].to[255]>
- explode %1% power:2
- spawn %1% firework[firework_item=i@firework[firework=true,false,%t1%,<util.random.int[1].to[255]>,<util.random.int[1].to[255]>,<util.random.int[1].to[255]>|0];velocity=0,0,0,<def[1].world.name>]
- spawn %1% firework[firework_item=i@firework[firework=true,false,%t1%,<util.random.int[1].to[255]>,<util.random.int[1].to[255]>,<util.random.int[1].to[255]>|0];velocity=0,0,0,<def[1].world.name>] save:myfirework
- if %2% != null remove %2%
- wait 5t
- adjust <entry[myfirework].spawned_entities> detonate
}
else if <player.flag[arrowtype]> == weak_bpg {
- explode %1% power:1
- if %2% != null remove %2%
}
else if <player.flag[arrowtype]> == strong_bpg {
- if <def[1].world.name.ends_with[nether]> explode %1% power:1 fire breakblocks
- explode %1% power:2
- if %2% != null remove %2%
}
else if <player.flag[arrowtype]> == superior_bpg {
- define t1 <li@ball|creeper.random>,<util.random.int[1].to[255]>,<util.random.int[1].to[255]>,<util.random.int[1].to[255]>
- explode %1% power:2 fire breakblocks
- spawn %1% firework[firework_item=i@firework[firework=true,false,%t1%,<util.random.int[1].to[255]>,<util.random.int[1].to[255]>,<util.random.int[1].to[255]>|0];velocity=0,0,0,<def[1].world.name>]
- spawn %1% firework[firework_item=i@firework[firework=true,false,%t1%,<util.random.int[1].to[255]>,<util.random.int[1].to[255]>,<util.random.int[1].to[255]>|0];velocity=0,0,0,<def[1].world.name>] save:myfirework
- if %2% != null remove %2%
- wait 5t
- adjust <entry[myfirework].spawned_entities> detonate
}
else if <player.flag[arrowtype]> == mininuke_bpg {
- if <def[1].world.name.ends_with[nether]> explode %1% power:3 fire breakblocks
- explode %1% power:5
- run mininuke_bpg_shroomcloud def:%1%
- if %2% != null remove %2%
}
mininuke_bpg_shroomcloud:
type: task
speed: 1t
definitions: center
script:
- ^playeffect %center% effect:huge_explosion visibility:100
# draw the tall cloud
- ^repeat 6 {
- define center <def[center].add[0,2,0]>
- ^playeffect effect:flame %center% offset:1 qty:50 visibility:100
- ^playeffect effect:explode %center% offset:1 qty:15 visibility:100
- ^playeffect effect:large_explode %center% visibility:100
- playsound %center% enderdragon_growl pitch:0
- wait 1t
}
# straight lines x+ z+ y+ x- y- z-
- ^define vecs li@1,0,0|0,0,1|0,1,0|-1,0,0|0,0,-1|0,-1,0
# Angles y=0 x- z- x+ z+ x+ z- x- z+
- ^define vecs %vecs%|-0.7,0,-0.7|0.7,0,0.7|0.7,0,-0.7|-0.7,0,0.7
# Raised lines: y+ x+ z+ x- z-
- ^define vecs %vecs%|0.7,0.7,0|0,0.7,0.7|-0.7,0.7,0|0,0.7,-0.7
# draw the top shroom
- ^repeat 8 {
- ^define offset %value%
- ^foreach %vecs% {
- ^playeffect effect:explode <def[center].add[%value%].add[<util.random.int[-%offset%].to[%offset%]>,0,<util.random.int[-%offset%].to[%offset%]>]> offset:<def[offset].div[5]> qty:<def[offset].mul[10].as_int> visibility:100
- ^playeffect effect:large_explode <def[center].add[%value%].add[<util.random.int[-%offset%].to[%offset%]>,0,<util.random.int[-%offset%].to[%offset%]>]> offset:<def[offset].div[5]> qty:%offset% visibility:100
}
- ^wait 3t
}