Skip to content
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
#> asset:artifact/1464.call_electric_catfish/give/1.trigger
#
# 神器の取得処理の呼び出し時に実行されるfunction
#
# @within tag/function asset:artifact/give

execute if data storage asset:context {id:1464} run function asset:artifact/1464.call_electric_catfish/give/2.give
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
#> asset:artifact/1464.call_electric_catfish/give/2.give
#
# 神器の作成部 ここでID等を定義する
#
# @user
# @within function asset:artifact/1464.call_electric_catfish/give/1.trigger

# 神器の説明や消費MPなどをここで設定する。
# 最後にasset:artifact/common/giveを実行することで入手可能。

# 神器のID (int) スプレッドシートの値を入れる
data modify storage asset:artifact ID set value 1464
# 神器のベースアイテム
data modify storage asset:artifact Item set value "minecraft:carrot_on_a_stick"
# 神器の名前 (TextComponentString)
data modify storage asset:artifact Name set value '{"text": "コール:デンキナマズ", "color": "yellow"}'
# 神器の説明文 (TextComponentString[])
data modify storage asset:artifact Lore set value ['{"text": "踏まれると周囲にダメージを", "extra": [{"text": "50", "color": "yellow"}, {"text": "与える、ナマズを召喚する。", "color": "white"}]}', '{"text": "「べちっ」「...」", "color": "gray"}']
# 消費アイテム ({Item: TextComponent, Count: int, Extra?: TextComponent}) (オプション)
# data modify storage asset:artifact ConsumeItem.Item set value '{"translate":"item.minecraft.stick"}'
# data modify storage asset:artifact ConsumeItem.Count set value 1
# data modify storage asset:artifact ConsumeItem.Extra set value
# 使用回数 (int) (オプション)
# data modify storage asset:artifact RemainingCount set value
# 神器を発動できるスロット (string) Wikiを参照
data modify storage asset:artifact Slot set value "mainhand"
# 神器のトリガー (string) Wikiを参照
data modify storage asset:artifact Trigger set value "onClick"
# 神器の発動条件 (TextComponentString) (オプション)
data modify storage asset:artifact Condition set value '{"text": "地面に立っているとき"}'
# 攻撃に関する情報 -Damage量 (literal[]/literal) Wikiを参照 (オプション)
data modify storage asset:artifact AttackInfo.Damage set value [100]
# 攻撃に関する情報 -攻撃タイプ (string[]) Wikiを参照 (オプション)
data modify storage asset:artifact AttackInfo.AttackType set value [Physical]
# 攻撃に関する情報 -攻撃属性 (string[]) Wikiを参照 (オプション)
data modify storage asset:artifact AttackInfo.ElementType set value [Thunder]
# 攻撃に関する情報 -防御無視 (boolean) Wikiを参照 (オプション)
# data modify storage asset:artifact AttackInfo.BypassResist set value
# 攻撃に関する情報 -範囲攻撃 (string) Wikiを参照 (オプション)
data modify storage asset:artifact AttackInfo.IsRangeAttack set value "every"
# 攻撃に関する情報 -攻撃範囲 (literal) Wikiを参照 (オプション)
# data modify storage asset:artifact AttackInfo.AttackRange set value
# MP消費量 (int)
data modify storage asset:artifact MPCost set value 80
# MP必要量 (int) (オプション)
# data modify storage asset:artifact MPRequire set value
# MP回復量 (int)
# data modify storage asset:artifact MPHealWhenHit set value
# 神器のクールダウン (int) (オプション)
# data modify storage asset:artifact LocalCooldown set value
# 種別クールダウン ({Type: string, Duration: int}) (オプション)
data modify storage asset:artifact TypeCooldown.Type set value "summon"
data modify storage asset:artifact TypeCooldown.Duration set value 600
# グローバルクールダウン (int) (オプション)
# data modify storage asset:artifact SpecialCooldown set value
# クールダウンによる使用不可のメッセージを非表示にするか否か (boolean) (オプション)
# data modify storage asset:artifact DisableCooldownMessage set value
# MP不足による使用不可のメッセージを非表示にするか否か (boolean) (オプション)
# data modify storage asset:artifact DisableMPMessage set value
# 破壊時の音を鳴らさないかどうか (boolean) (オプション)
# data modify storage asset:artifact DisableBreakSound set value
# 扱える神 (string[]) Wikiを参照
data modify storage asset:artifact CanUsedGod set value ["Flora", "Nyaptov", "Rumor"]
# カスタムNBT (NBTCompound) 追加で指定したいNBT (オプション)
# data modify storage asset:artifact CustomNBT set value {}

# 神器の入手用function
function asset:artifact/common/give
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
#> asset:artifact/1464.call_electric_catfish/register
#
# 神器プールへの登録処理
#
# @within tag/function asset:artifact/register

data modify storage asset:artifact RarityRegistry[3] append value [1464]
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
#> asset:artifact/1464.call_electric_catfish/trigger/1.trigger
#
# 指定したイベントタイミングで実行されるfunction
#
# @within tag/function asset:artifact/**

# storage asset:idのmainhandに装備している神器のIDが入っているので比較し、~/2.check_condition.mcfunctionを実行する
execute if data storage asset:context id{mainhand:1464} run function asset:artifact/1464.call_electric_catfish/trigger/2.check_condition
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
#> asset:artifact/1464.call_electric_catfish/trigger/2.check_condition
#
# 神器の発動条件をチェックします
#
# @within function asset:artifact/1464.call_electric_catfish/trigger/1.trigger

# 神器の基本的な条件の確認を行うfunction、成功している場合CanUsedタグが付く
function asset:artifact/common/check_condition/mainhand

# 追加チェック:地面に立っていないならCanUsed剝奪
function api:data_get/on_ground
execute unless data storage api: {OnGround:1b} run tag @s remove CanUsed

# CanUsedタグをチェックして3.main.mcfunctionを実行する
execute if entity @s[tag=CanUsed] run function asset:artifact/1464.call_electric_catfish/trigger/3.main
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
#> asset:artifact/1464.call_electric_catfish/trigger/3.main
#
# 神器のメイン処理部
#
# @within function asset:artifact/1464.call_electric_catfish/trigger/2.check_condition

# 基本的な使用時の処理(MP消費や使用回数の処理など)を行う
function asset:artifact/common/use/mainhand

# ダメージ設定
data modify storage api: Argument.FieldOverride.Damage set value 100.0f
data modify storage api: Argument.FieldOverride.AttackType set value "Physical"
data modify storage api: Argument.FieldOverride.ElementType set value "Thunder"

# 本体召喚
data modify storage api: Argument.ID set value 1160
execute store result storage api: Argument.FieldOverride.UserID int 1 run scoreboard players get @s UserID
function api:object/summon
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
#> asset:object/1160.electric_catfish/_index.d
# @private

#> tag
# @within function asset:object/1160.electric_catfish/**
#declare tag 1160.Inactive
#declare tag 1160.SteppedOn
#declare objective 1160.Cooldown
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
#> asset:object/1160.electric_catfish/init/
#
# Objectのinit時の処理
#
# @within asset:object/alias/1160/init

# ブロックの中心にtp(召喚時にtpするとinitされない)
execute align xz run tp @s ~0.5 ~ ~0.5

# 演出
execute align xz run particle poof ~0.5 ~0.5 ~0.5 0.1 0.1 0.1 0.05 5

playsound entity.player.hurt neutral @a ~ ~ ~ 1 0.5
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
#> asset:object/1160.electric_catfish/load
#
# Objectに利用するスコアボード等の初期化処理
#
# @within tag/function asset:object/load

#> 定義類はここに
# @within function asset:object/1160.electric_catfish/**
scoreboard objectives add 1160.Cooldown dummy
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
#> asset:object/1160.electric_catfish/register
#
# Objectのデータを指定
#
# @within function asset:object/alias/1160/register

# 継承(オプション)
# data modify storage asset:object Extends append value
# function asset:object/extends
# 他のObjectに継承されることを許可するか (boolean) (オプション)
# data modify storage asset:object ExtendsSafe set value
# 継承されることを前提とした、抽象的なObjectであるかどうか(boolean)
data modify storage asset:object IsAbstract set value false
# Tickするかどうか(boolean) (オプション)
# data modify storage asset:object IsTicking set value

# ID (int)
data modify storage asset:object ID set value 1160
# フィールド(オプション)
data modify storage asset:object Field.Damage set value 0
data modify storage asset:object Field.AttackType set value ""
data modify storage asset:object Field.ElementType set value ""
data modify storage asset:object Field.Motion set value []
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
#> asset:object/1160.electric_catfish/summon/
#
# Object召喚処理の呼び出し時に実行されるfunction
#
# @within asset:object/alias/1160/summon

# 元となるEntityを召喚する
summon item_display ~ ~ ~ {Tags:["ObjectInit", "Friend"], item:{id:"minecraft:stick", Count:1b, tag:{CustomModelData:20628}}}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
#> asset:object/1160.electric_catfish/summon/debug
#
# 動作チェック用の召喚処理 使い終わったら消してもいいかも
#
# @user
# @private

# 召喚
data modify storage api: Argument.ID set value 1160
function api:object/summon
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
#> asset:object/1160.electric_catfish/tick/
#
# Objectのtick時の処理
#
# @within asset:object/alias/1160/tick

# Tick加算
scoreboard players add @s General.Object.Tick 1

# クールダウン
execute if score @s 1160.Cooldown matches 1.. run scoreboard players remove @s 1160.Cooldown 1
execute if score @s 1160.Cooldown matches 0 run tag @s remove 1160.Inactive

# 踏まれたどうかをチェック
execute unless entity @s[tag=1160.Inactive] positioned ~-0.5 ~ ~-0.5 as @e[type=#lib:living_without_player,dx=0,sort=nearest,limit=1] positioned ~ ~-0.8 ~ if entity @s[dx=0] run function asset:object/1160.electric_catfish/tick/check
execute positioned ~-0.5 ~ ~-0.5 if entity @e[type=#lib:living_without_player,tag=1160.SteppedOn,dx=0] at @s run function asset:object/1160.electric_catfish/tick/attack

# 足元にブロックがないなら消す
execute if block ~ ~-0.1 ~ #lib:no_collision/ run scoreboard players set @s General.Object.Tick 1200

# 消滅処理
execute if score @s General.Object.Tick matches 1200.. run function asset:object/1160.electric_catfish/tick/kill
Comment on lines +7 to +22

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

1160.Cooldownをフィールドを使った実装にするとobjectivesの追加無しで実装できそう
めんどいと思うのでやらなくてもいい

Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
#> asset:object/1160.electric_catfish/tick/attack
#
# Objectのtick時の処理
#
# @within asset:object/1160.electric_catfish/tick/**

# ダメージ設定
data modify storage api: Argument.Damage set from storage asset:context this.Damage
data modify storage api: Argument.AttackType set from storage asset:context this.AttackType
data modify storage api: Argument.ElementType set from storage asset:context this.ElementType

# SteppedOnタグがついたEntityが対象
execute as @e[tag=1160.SteppedOn,distance=..2,limit=1] run function api:damage/
Comment thread
firgde marked this conversation as resolved.

# 周囲のMobにもダメージ
execute store result storage api: Argument.Damage float 0.5 run data get storage asset:context this.Damage
execute positioned ~-3.5 ~ ~-3.5 as @e[type=#lib:living_without_player,tag=!1160.SteppedOn,dx=7,dz=7] positioned ~ ~-0.2 ~ if entity @s[dx=7,dz=7] run function api:damage/
Comment thread
firgde marked this conversation as resolved.

# リセット
function api:damage/reset
execute positioned ~-0.5 ~ ~-0.5 run tag @e[type=#lib:living_without_player,tag=1160.SteppedOn,dx=0,limit=1] remove 1160.SteppedOn

# 0.5秒のクールダウン
scoreboard players set @s 1160.Cooldown 10
tag @s add 1160.Inactive

# 演出
particle dust 1 1 0 2 ~ ~ ~ 1.5 0.1 1.5 0 100

playsound entity.player.hurt neutral @a ~ ~ ~ 2 0.5
playsound entity.allay.hurt neutral @a ~ ~ ~ 2 2.0
playsound enchant.thorns.hit neutral @a ~ ~ ~ 2 1.0
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
#> asset:object/1160.electric_catfish/tick/check
#
#
#
# @within asset:object/1160.electric_catfish/tick/**

#> private
# @private
#declare score_holder $MotionX
#declare score_holder $MotionZ

# thisにMotion保存
data modify storage asset:context this.Motion set from entity @s Motion

# 動いているなら踏んだ判定
execute store result score $MotionX Temporary run data get storage asset:context this.Motion[0] 100
execute store result score $MotionZ Temporary run data get storage asset:context this.Motion[2] 100

execute if score $MotionX Temporary matches ..-1 store result score $MotionX Temporary run data get storage asset:context this.Motion[0] -100
execute if score $MotionZ Temporary matches ..-1 store result score $MotionZ Temporary run data get storage asset:context this.Motion[2] -100

scoreboard players operation $MotionX Temporary += $MotionZ Temporary

execute if score $MotionX Temporary matches 1.. run tag @s add 1160.SteppedOn

# リセット
data remove storage asset:context this.Motion
scoreboard players reset $MotionX
scoreboard players reset $MotionZ
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
#> asset:object/1160.electric_catfish/tick/kill
#
# Object削除の処理
#
# @within function asset:object/1160.electric_catfish/tick/

# 演出
particle poof ~ ~0.5 ~ 0.1 0.1 0.1 0.05 5

# 消す
kill @s
8 changes: 8 additions & 0 deletions Asset/data/asset/functions/object/alias/1160/init.mcfunction
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
#> asset:object/alias/1160/init
#
# Init処理のエイリアス
#
# @within asset_manager:object/init/init.m

# 元のInit処理を呼び出す
function asset:object/1160.electric_catfish/init/
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
#> asset:object/alias/1160/register
#
# Objectのデータ指定処理のエイリアス
#
# @within asset_manager:object/summon/register.m

# 元の登録処理を呼び出す
function asset:object/1160.electric_catfish/register
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
#> asset:object/alias/1160/summon
#
# Object召喚処理のエイリアス
#
# @within asset_manager:object/summon/summon.m

# 元の召喚処理を呼び出す
function asset:object/1160.electric_catfish/summon/
8 changes: 8 additions & 0 deletions Asset/data/asset/functions/object/alias/1160/tick.mcfunction
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
#> asset:object/alias/1160/tick
#
# Tick時処理のエイリアス
#
# @within asset_manager:object/tick/tick.m

# 元のTick処理を呼び出す
function asset:object/1160.electric_catfish/tick/
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
{
"values": [
"asset:artifact/1464.call_electric_catfish/trigger/1.trigger",
"asset:artifact/1306.will_o_wisp/trigger/1.trigger",
"asset:artifact/1144.cradle_of_azure_moon/trigger/1.trigger",
"asset:artifact/0005.musket_matchlock/trigger/1.trigger",
Expand Down Expand Up @@ -176,4 +177,4 @@
"asset:artifact/2001.staff_of_the_willless/trigger/1.trigger",
"asset:artifact/0019.scripture/trigger/1.trigger"
]
}
}
3 changes: 2 additions & 1 deletion Asset/data/asset/tags/functions/artifact/give.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
{
"values": [
"asset:artifact/1464.call_electric_catfish/give/1.trigger",
"asset:artifact/1252.fox_candle/give/1.trigger",
"asset:artifact/1343.coffee_milk_pack/give/1.trigger",
"asset:artifact/1342.fruit_milk_pack/give/1.trigger",
Expand Down Expand Up @@ -530,4 +531,4 @@
"asset:artifact/0735.collision_plate/give/1.trigger",
"asset:artifact/0745.blade_of_whirlwind/give/1.trigger"
]
}
}
3 changes: 2 additions & 1 deletion Asset/data/asset/tags/functions/artifact/register.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
{
"values": [
"asset:artifact/1464.call_electric_catfish/register",
"asset:artifact/1252.fox_candle/register",
"asset:artifact/1343.coffee_milk_pack/register",
"asset:artifact/1342.fruit_milk_pack/register",
Expand Down Expand Up @@ -308,4 +309,4 @@
"asset:artifact/1027.fire_of_rebirth/register",
"asset:artifact/1111.rod_o_redeem/register"
]
}
}
1 change: 1 addition & 0 deletions Asset/data/asset/tags/functions/object/load.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
{
"values": [
"asset:object/1160.electric_catfish/load",
"asset:object/1061.azure_jelly/load",
"asset:object/2251.wall_laser_clock/load",
"asset:object/2212.eclael_upper_shot/load",
Expand Down
Loading