diff --git a/.idea/.gitignore b/.idea/.gitignore
new file mode 100644
index 0000000..359bb53
--- /dev/null
+++ b/.idea/.gitignore
@@ -0,0 +1,3 @@
+# 默认忽略的文件
+/shelf/
+/workspace.xml
diff --git a/.idea/.name b/.idea/.name
new file mode 100644
index 0000000..8f906a9
--- /dev/null
+++ b/.idea/.name
@@ -0,0 +1 @@
+幸存者军火库
\ No newline at end of file
diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml
new file mode 100644
index 0000000..f1afc85
--- /dev/null
+++ b/.idea/inspectionProfiles/Project_Default.xml
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/inspectionProfiles/profiles_settings.xml b/.idea/inspectionProfiles/profiles_settings.xml
new file mode 100644
index 0000000..105ce2d
--- /dev/null
+++ b/.idea/inspectionProfiles/profiles_settings.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
new file mode 100644
index 0000000..7ba73c2
--- /dev/null
+++ b/.idea/misc.xml
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
new file mode 100644
index 0000000..f6bff08
--- /dev/null
+++ b/.idea/modules.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000..94a25f7
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/幸存者军火库.iml b/.idea/幸存者军火库.iml
new file mode 100644
index 0000000..728ddb5
--- /dev/null
+++ b/.idea/幸存者军火库.iml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/_sa_food_models/01_罐头食品/canned_beans.json b/_sa_food_models/01_罐头食品/canned_beans.json
new file mode 100644
index 0000000..184f19f
--- /dev/null
+++ b/_sa_food_models/01_罐头食品/canned_beans.json
@@ -0,0 +1,135 @@
+{
+ "format_version": "1.21.11",
+ "credit": "Made with Blockbench",
+ "texture_size": [32, 32],
+ "textures": {
+ "1": "sa_combat:item/canned_foods/canned_beans"
+ },
+ "elements": [
+ {
+ "from": [7, 11.91342, 6.3806],
+ "to": [9, 11.91342, 8.3806],
+ "rotation": {"angle": -22.5, "axis": "x", "origin": [8, 10, 11]},
+ "faces": {
+ "north": {"uv": [1, 0, 0, 0], "rotation": 180, "texture": "#1"},
+ "east": {"uv": [0, 0, 0, 1], "rotation": 90, "texture": "#1"},
+ "south": {"uv": [1, 0, 0, 0], "texture": "#1"},
+ "west": {"uv": [0, 0, 0, 1], "rotation": 270, "texture": "#1"},
+ "up": {"uv": [3, 9, 4, 10], "texture": "#1"},
+ "down": {"uv": [9, 2, 10, 3], "rotation": 180, "texture": "#1"}
+ }
+ },
+ {
+ "from": [5, 10, 5],
+ "to": [11, 10, 11],
+ "rotation": {"angle": 0, "axis": "x", "origin": [8, 10, 11]},
+ "faces": {
+ "north": {"uv": [0, 3, 0, 0], "rotation": 180, "texture": "#1"},
+ "east": {"uv": [0, 0, 0, 3], "rotation": 90, "texture": "#1"},
+ "south": {"uv": [0, 0, 0, 3], "texture": "#1"},
+ "west": {"uv": [0, 0, 0, 3], "rotation": 270, "texture": "#1"},
+ "up": {"uv": [9, 3, 6, 0], "texture": "#1"},
+ "down": {"uv": [6, 0, 9, 3], "rotation": 180, "texture": "#1"}
+ }
+ },
+ {
+ "from": [5, 0, 5],
+ "to": [11, 9, 11],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 5.5, 9]},
+ "faces": {
+ "north": {"uv": [0, 0, 3, 4.5], "texture": "#1"},
+ "east": {"uv": [3, 0, 6, 4.5], "texture": "#1"},
+ "south": {"uv": [0, 4.5, 3, 9], "texture": "#1"},
+ "west": {"uv": [3, 4.5, 6, 9], "texture": "#1"},
+ "up": {"uv": [3, 12, 0, 9], "texture": "#1"},
+ "down": {"uv": [6, 0, 9, 3], "texture": "#1"}
+ }
+ },
+ {
+ "from": [5, 9, 5],
+ "to": [11, 10, 11],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 13.5, 9]},
+ "faces": {
+ "north": {"uv": [9, 0, 12, 0.5], "texture": "#1"},
+ "east": {"uv": [9, 0.5, 12, 1], "texture": "#1"},
+ "south": {"uv": [9, 1, 12, 1.5], "texture": "#1"},
+ "west": {"uv": [9, 1.5, 12, 2], "texture": "#1"},
+ "up": {"uv": [9, 6, 6, 3], "texture": "#1"},
+ "down": {"uv": [9, 6, 6, 9], "texture": "#1"}
+ }
+ },
+ {
+ "name": "cube inverted",
+ "from": [11, 10, 11],
+ "to": [5, 9, 5],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 13.5, 9]},
+ "faces": {
+ "north": {"uv": [9, 1.5, 12, 1], "texture": "#1"},
+ "east": {"uv": [9, 2, 12, 1.5], "texture": "#1"},
+ "south": {"uv": [9, 0.5, 12, 0], "texture": "#1"},
+ "west": {"uv": [9, 1, 12, 0.5], "texture": "#1"},
+ "up": {"uv": [9, 9, 6, 6], "texture": "#1"},
+ "down": {"uv": [9, 6, 6, 3], "texture": "#1"}
+ }
+ }
+ ],
+ "gui_light": "front",
+ "display": {
+ "thirdperson_righthand": {
+ "rotation": [0, 90, 0],
+ "translation": [-1.25, 2.25, 2.25],
+ "scale": [0.55, 0.55, 0.55]
+ },
+ "thirdperson_lefthand": {
+ "rotation": [0, 90, 0],
+ "translation": [-1.25, 2.25, 2.25],
+ "scale": [0.55, 0.55, 0.55]
+ },
+ "firstperson_righthand": {
+ "rotation": [-155.67, 87.24, 146.71],
+ "translation": [-0.75, 4.75, 2.25],
+ "scale": [0.44883, 0.44883, 0.44883]
+ },
+ "firstperson_lefthand": {
+ "rotation": [-155.67, 87.24, 146.71],
+ "translation": [-0.75, 4.75, 2.25],
+ "scale": [0.44883, 0.44883, 0.44883]
+ },
+ "ground": {
+ "translation": [0, 2.5, 0],
+ "scale": [0.5, 0.5, 0.5]
+ },
+ "gui": {
+ "rotation": [-171.31, 28.48, -168.29],
+ "translation": [0.5, 3.25, 0],
+ "scale": [1.07695, 1.07695, 1.07695]
+ },
+ "head": {
+ "rotation": [0, -180, 0],
+ "translation": [0, 13, 0.25]
+ },
+ "fixed": {
+ "translation": [0, 4.75, 0]
+ },
+ "on_shelf": {
+ "rotation": [0, -180, 0]
+ }
+ },
+ "groups": [
+ {
+ "name": "group",
+ "origin": [8, 9, 6],
+ "scope": 0,
+ "color": 0,
+ "children": [0, 1]
+ },
+ 2,
+ {
+ "name": "group",
+ "origin": [7, 12.5, 9],
+ "scope": 0,
+ "color": 0,
+ "children": [3, 4]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/_sa_food_models/01_罐头食品/canned_beans_open.json b/_sa_food_models/01_罐头食品/canned_beans_open.json
new file mode 100644
index 0000000..240ff22
--- /dev/null
+++ b/_sa_food_models/01_罐头食品/canned_beans_open.json
@@ -0,0 +1,136 @@
+{
+ "format_version": "1.21.11",
+ "credit": "Made with Blockbench",
+ "texture_size": [32, 32],
+ "textures": {
+ "1": "sa_combat:item/canned_foods/canned_beans",
+ "particle": "sa_combat:item/canned_foods/canned_beans_p"
+ },
+ "elements": [
+ {
+ "from": [7, 8.08658, 13.6194],
+ "to": [9, 8.08658, 15.6194],
+ "rotation": {"angle": 22.5, "axis": "x", "origin": [8, 10, 11]},
+ "faces": {
+ "north": {"uv": [1, 0, 0, 0], "rotation": 180, "texture": "#1"},
+ "east": {"uv": [0, 0, 0, 1], "rotation": 270, "texture": "#1"},
+ "south": {"uv": [1, 0, 0, 0], "texture": "#1"},
+ "west": {"uv": [0, 0, 0, 1], "rotation": 90, "texture": "#1"},
+ "up": {"uv": [9, 2, 10, 3], "rotation": 180, "texture": "#1"},
+ "down": {"uv": [3, 9, 4, 10], "texture": "#1"}
+ }
+ },
+ {
+ "from": [5, 10, 11],
+ "to": [11, 10, 17],
+ "rotation": {"angle": 45, "axis": "x", "origin": [8, 10, 11]},
+ "faces": {
+ "north": {"uv": [0, 0, 0, 3], "rotation": 180, "texture": "#1"},
+ "east": {"uv": [0, 0, 0, 3], "rotation": 270, "texture": "#1"},
+ "south": {"uv": [0, 3, 0, 0], "texture": "#1"},
+ "west": {"uv": [0, 0, 0, 3], "rotation": 90, "texture": "#1"},
+ "up": {"uv": [6, 0, 9, 3], "rotation": 180, "texture": "#1"},
+ "down": {"uv": [9, 3, 6, 0], "texture": "#1"}
+ }
+ },
+ {
+ "from": [5, 0, 5],
+ "to": [11, 9, 11],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 5.5, 9]},
+ "faces": {
+ "north": {"uv": [0, 0, 3, 4.5], "texture": "#1"},
+ "east": {"uv": [3, 0, 6, 4.5], "texture": "#1"},
+ "south": {"uv": [0, 4.5, 3, 9], "texture": "#1"},
+ "west": {"uv": [3, 4.5, 6, 9], "texture": "#1"},
+ "up": {"uv": [3, 12, 0, 9], "texture": "#1"},
+ "down": {"uv": [6, 0, 9, 3], "texture": "#1"}
+ }
+ },
+ {
+ "from": [5, 9, 5],
+ "to": [11, 10, 11],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 13.5, 9]},
+ "faces": {
+ "north": {"uv": [9, 0, 12, 0.5], "texture": "#1"},
+ "east": {"uv": [9, 0.5, 12, 1], "texture": "#1"},
+ "south": {"uv": [9, 1, 12, 1.5], "texture": "#1"},
+ "west": {"uv": [9, 1.5, 12, 2], "texture": "#1"},
+ "up": {"uv": [9, 6, 6, 3], "texture": "#1"},
+ "down": {"uv": [9, 6, 6, 9], "texture": "#1"}
+ }
+ },
+ {
+ "name": "cube inverted",
+ "from": [11, 10, 11],
+ "to": [5, 9, 5],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 13.5, 9]},
+ "faces": {
+ "north": {"uv": [9, 1.5, 12, 1], "texture": "#1"},
+ "east": {"uv": [9, 2, 12, 1.5], "texture": "#1"},
+ "south": {"uv": [9, 0.5, 12, 0], "texture": "#1"},
+ "west": {"uv": [9, 1, 12, 0.5], "texture": "#1"},
+ "up": {"uv": [9, 9, 6, 6], "texture": "#1"},
+ "down": {"uv": [9, 6, 6, 3], "texture": "#1"}
+ }
+ }
+ ],
+ "gui_light": "front",
+ "display": {
+ "thirdperson_righthand": {
+ "rotation": [0, 90, 0],
+ "translation": [-1.25, 2.25, 2.25],
+ "scale": [0.55, 0.55, 0.55]
+ },
+ "thirdperson_lefthand": {
+ "rotation": [0, 90, 0],
+ "translation": [-1.25, 2.25, 2.25],
+ "scale": [0.55, 0.55, 0.55]
+ },
+ "firstperson_righthand": {
+ "rotation": [-155.67, 87.24, 146.71],
+ "translation": [-0.75, 4.75, 2.25],
+ "scale": [0.44883, 0.44883, 0.44883]
+ },
+ "firstperson_lefthand": {
+ "rotation": [-155.67, 87.24, 146.71],
+ "translation": [-0.75, 4.75, 2.25],
+ "scale": [0.44883, 0.44883, 0.44883]
+ },
+ "ground": {
+ "translation": [0, 2.5, 0],
+ "scale": [0.5, 0.5, 0.5]
+ },
+ "gui": {
+ "rotation": [-171.31, 28.48, -168.29],
+ "translation": [0.5, 3.25, 0],
+ "scale": [1.07695, 1.07695, 1.07695]
+ },
+ "head": {
+ "rotation": [0, -180, 0],
+ "translation": [0, 13, 0.25]
+ },
+ "fixed": {
+ "translation": [0, 4.75, 0]
+ },
+ "on_shelf": {
+ "rotation": [0, -180, 0]
+ }
+ },
+ "groups": [
+ {
+ "name": "group",
+ "origin": [8, 9, 6],
+ "scope": 0,
+ "color": 0,
+ "children": [0, 1]
+ },
+ 2,
+ {
+ "name": "group",
+ "origin": [7, 12.5, 9],
+ "scope": 0,
+ "color": 0,
+ "children": [3, 4]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/_sa_food_models/01_罐头食品/canned_carrots.json b/_sa_food_models/01_罐头食品/canned_carrots.json
new file mode 100644
index 0000000..3e4571d
--- /dev/null
+++ b/_sa_food_models/01_罐头食品/canned_carrots.json
@@ -0,0 +1,135 @@
+{
+ "format_version": "1.21.11",
+ "credit": "Made with Blockbench",
+ "texture_size": [32, 32],
+ "textures": {
+ "1": "sa_combat:item/canned_foods/canned_carrots"
+ },
+ "elements": [
+ {
+ "from": [7, 11.91342, 6.3806],
+ "to": [9, 11.91342, 8.3806],
+ "rotation": {"angle": -22.5, "axis": "x", "origin": [8, 10, 11]},
+ "faces": {
+ "north": {"uv": [1, 0, 0, 0], "rotation": 180, "texture": "#1"},
+ "east": {"uv": [0, 0, 0, 1], "rotation": 90, "texture": "#1"},
+ "south": {"uv": [1, 0, 0, 0], "texture": "#1"},
+ "west": {"uv": [0, 0, 0, 1], "rotation": 270, "texture": "#1"},
+ "up": {"uv": [3, 9, 4, 10], "texture": "#1"},
+ "down": {"uv": [9, 2, 10, 3], "rotation": 180, "texture": "#1"}
+ }
+ },
+ {
+ "from": [5, 10, 5],
+ "to": [11, 10, 11],
+ "rotation": {"angle": 0, "axis": "x", "origin": [8, 10, 11]},
+ "faces": {
+ "north": {"uv": [0, 3, 0, 0], "rotation": 180, "texture": "#1"},
+ "east": {"uv": [0, 0, 0, 3], "rotation": 90, "texture": "#1"},
+ "south": {"uv": [0, 0, 0, 3], "texture": "#1"},
+ "west": {"uv": [0, 0, 0, 3], "rotation": 270, "texture": "#1"},
+ "up": {"uv": [9, 3, 6, 0], "texture": "#1"},
+ "down": {"uv": [6, 0, 9, 3], "rotation": 180, "texture": "#1"}
+ }
+ },
+ {
+ "from": [5, 0, 5],
+ "to": [11, 9, 11],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 5.5, 9]},
+ "faces": {
+ "north": {"uv": [0, 0, 3, 4.5], "texture": "#1"},
+ "east": {"uv": [3, 0, 6, 4.5], "texture": "#1"},
+ "south": {"uv": [0, 4.5, 3, 9], "texture": "#1"},
+ "west": {"uv": [3, 4.5, 6, 9], "texture": "#1"},
+ "up": {"uv": [3, 12, 0, 9], "texture": "#1"},
+ "down": {"uv": [6, 0, 9, 3], "texture": "#1"}
+ }
+ },
+ {
+ "from": [5, 9, 5],
+ "to": [11, 10, 11],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 13.5, 9]},
+ "faces": {
+ "north": {"uv": [9, 0, 12, 0.5], "texture": "#1"},
+ "east": {"uv": [9, 0.5, 12, 1], "texture": "#1"},
+ "south": {"uv": [9, 1, 12, 1.5], "texture": "#1"},
+ "west": {"uv": [9, 1.5, 12, 2], "texture": "#1"},
+ "up": {"uv": [9, 6, 6, 3], "texture": "#1"},
+ "down": {"uv": [9, 6, 6, 9], "texture": "#1"}
+ }
+ },
+ {
+ "name": "cube inverted",
+ "from": [11, 10, 11],
+ "to": [5, 9, 5],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 13.5, 9]},
+ "faces": {
+ "north": {"uv": [9, 1.5, 12, 1], "texture": "#1"},
+ "east": {"uv": [9, 2, 12, 1.5], "texture": "#1"},
+ "south": {"uv": [9, 0.5, 12, 0], "texture": "#1"},
+ "west": {"uv": [9, 1, 12, 0.5], "texture": "#1"},
+ "up": {"uv": [9, 9, 6, 6], "texture": "#1"},
+ "down": {"uv": [9, 6, 6, 3], "texture": "#1"}
+ }
+ }
+ ],
+ "gui_light": "front",
+ "display": {
+ "thirdperson_righthand": {
+ "rotation": [0, 90, 0],
+ "translation": [-1.25, 2.25, 2.25],
+ "scale": [0.55, 0.55, 0.55]
+ },
+ "thirdperson_lefthand": {
+ "rotation": [0, 90, 0],
+ "translation": [-1.25, 2.25, 2.25],
+ "scale": [0.55, 0.55, 0.55]
+ },
+ "firstperson_righthand": {
+ "rotation": [-155.67, 87.24, 146.71],
+ "translation": [-0.75, 4.75, 2.25],
+ "scale": [0.44883, 0.44883, 0.44883]
+ },
+ "firstperson_lefthand": {
+ "rotation": [-155.67, 87.24, 146.71],
+ "translation": [-0.75, 4.75, 2.25],
+ "scale": [0.44883, 0.44883, 0.44883]
+ },
+ "ground": {
+ "translation": [0, 2.5, 0],
+ "scale": [0.5, 0.5, 0.5]
+ },
+ "gui": {
+ "rotation": [-171.31, 28.48, -168.29],
+ "translation": [0.5, 3.25, 0],
+ "scale": [1.07695, 1.07695, 1.07695]
+ },
+ "head": {
+ "rotation": [0, -180, 0],
+ "translation": [0, 13, 0.25]
+ },
+ "fixed": {
+ "translation": [0, 4.75, 0]
+ },
+ "on_shelf": {
+ "rotation": [0, -180, 0]
+ }
+ },
+ "groups": [
+ {
+ "name": "group",
+ "origin": [8, 9, 6],
+ "scope": 0,
+ "color": 0,
+ "children": [0, 1]
+ },
+ 2,
+ {
+ "name": "group",
+ "origin": [7, 12.5, 9],
+ "scope": 0,
+ "color": 0,
+ "children": [3, 4]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/_sa_food_models/01_罐头食品/canned_carrots_open.json b/_sa_food_models/01_罐头食品/canned_carrots_open.json
new file mode 100644
index 0000000..555d36a
--- /dev/null
+++ b/_sa_food_models/01_罐头食品/canned_carrots_open.json
@@ -0,0 +1,136 @@
+{
+ "format_version": "1.21.11",
+ "credit": "Made with Blockbench",
+ "texture_size": [32, 32],
+ "textures": {
+ "1": "sa_combat:item/canned_foods/canned_carrots",
+ "particle": "sa_combat:item/canned_foods/canned_carrots_p"
+ },
+ "elements": [
+ {
+ "from": [7, 8.08658, 13.6194],
+ "to": [9, 8.08658, 15.6194],
+ "rotation": {"angle": 22.5, "axis": "x", "origin": [8, 10, 11]},
+ "faces": {
+ "north": {"uv": [1, 0, 0, 0], "rotation": 180, "texture": "#1"},
+ "east": {"uv": [0, 0, 0, 1], "rotation": 270, "texture": "#1"},
+ "south": {"uv": [1, 0, 0, 0], "texture": "#1"},
+ "west": {"uv": [0, 0, 0, 1], "rotation": 90, "texture": "#1"},
+ "up": {"uv": [9, 2, 10, 3], "rotation": 180, "texture": "#1"},
+ "down": {"uv": [3, 9, 4, 10], "texture": "#1"}
+ }
+ },
+ {
+ "from": [5, 10, 11],
+ "to": [11, 10, 17],
+ "rotation": {"angle": 45, "axis": "x", "origin": [8, 10, 11]},
+ "faces": {
+ "north": {"uv": [0, 0, 0, 3], "rotation": 180, "texture": "#1"},
+ "east": {"uv": [0, 0, 0, 3], "rotation": 270, "texture": "#1"},
+ "south": {"uv": [0, 3, 0, 0], "texture": "#1"},
+ "west": {"uv": [0, 0, 0, 3], "rotation": 90, "texture": "#1"},
+ "up": {"uv": [6, 0, 9, 3], "rotation": 180, "texture": "#1"},
+ "down": {"uv": [9, 3, 6, 0], "texture": "#1"}
+ }
+ },
+ {
+ "from": [5, 0, 5],
+ "to": [11, 9, 11],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 5.5, 9]},
+ "faces": {
+ "north": {"uv": [0, 0, 3, 4.5], "texture": "#1"},
+ "east": {"uv": [3, 0, 6, 4.5], "texture": "#1"},
+ "south": {"uv": [0, 4.5, 3, 9], "texture": "#1"},
+ "west": {"uv": [3, 4.5, 6, 9], "texture": "#1"},
+ "up": {"uv": [3, 12, 0, 9], "texture": "#1"},
+ "down": {"uv": [6, 0, 9, 3], "texture": "#1"}
+ }
+ },
+ {
+ "from": [5, 9, 5],
+ "to": [11, 10, 11],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 13.5, 9]},
+ "faces": {
+ "north": {"uv": [9, 0, 12, 0.5], "texture": "#1"},
+ "east": {"uv": [9, 0.5, 12, 1], "texture": "#1"},
+ "south": {"uv": [9, 1, 12, 1.5], "texture": "#1"},
+ "west": {"uv": [9, 1.5, 12, 2], "texture": "#1"},
+ "up": {"uv": [9, 6, 6, 3], "texture": "#1"},
+ "down": {"uv": [9, 6, 6, 9], "texture": "#1"}
+ }
+ },
+ {
+ "name": "cube inverted",
+ "from": [11, 10, 11],
+ "to": [5, 9, 5],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 13.5, 9]},
+ "faces": {
+ "north": {"uv": [9, 1.5, 12, 1], "texture": "#1"},
+ "east": {"uv": [9, 2, 12, 1.5], "texture": "#1"},
+ "south": {"uv": [9, 0.5, 12, 0], "texture": "#1"},
+ "west": {"uv": [9, 1, 12, 0.5], "texture": "#1"},
+ "up": {"uv": [9, 9, 6, 6], "texture": "#1"},
+ "down": {"uv": [9, 6, 6, 3], "texture": "#1"}
+ }
+ }
+ ],
+ "gui_light": "front",
+ "display": {
+ "thirdperson_righthand": {
+ "rotation": [0, 90, 0],
+ "translation": [-1.25, 2.25, 2.25],
+ "scale": [0.55, 0.55, 0.55]
+ },
+ "thirdperson_lefthand": {
+ "rotation": [0, 90, 0],
+ "translation": [-1.25, 2.25, 2.25],
+ "scale": [0.55, 0.55, 0.55]
+ },
+ "firstperson_righthand": {
+ "rotation": [-155.67, 87.24, 146.71],
+ "translation": [-0.75, 4.75, 2.25],
+ "scale": [0.44883, 0.44883, 0.44883]
+ },
+ "firstperson_lefthand": {
+ "rotation": [-155.67, 87.24, 146.71],
+ "translation": [-0.75, 4.75, 2.25],
+ "scale": [0.44883, 0.44883, 0.44883]
+ },
+ "ground": {
+ "translation": [0, 2.5, 0],
+ "scale": [0.5, 0.5, 0.5]
+ },
+ "gui": {
+ "rotation": [-171.31, 28.48, -168.29],
+ "translation": [0.5, 3.25, 0],
+ "scale": [1.07695, 1.07695, 1.07695]
+ },
+ "head": {
+ "rotation": [0, -180, 0],
+ "translation": [0, 13, 0.25]
+ },
+ "fixed": {
+ "translation": [0, 4.75, 0]
+ },
+ "on_shelf": {
+ "rotation": [0, -180, 0]
+ }
+ },
+ "groups": [
+ {
+ "name": "group",
+ "origin": [8, 9, 6],
+ "scope": 0,
+ "color": 0,
+ "children": [0, 1]
+ },
+ 2,
+ {
+ "name": "group",
+ "origin": [7, 12.5, 9],
+ "scope": 0,
+ "color": 0,
+ "children": [3, 4]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/_sa_food_models/01_罐头食品/canned_chilli.json b/_sa_food_models/01_罐头食品/canned_chilli.json
new file mode 100644
index 0000000..65b0c9f
--- /dev/null
+++ b/_sa_food_models/01_罐头食品/canned_chilli.json
@@ -0,0 +1,135 @@
+{
+ "format_version": "1.21.11",
+ "credit": "Made with Blockbench",
+ "texture_size": [32, 32],
+ "textures": {
+ "1": "sa_combat:item/canned_foods/canned_chilli"
+ },
+ "elements": [
+ {
+ "from": [7, 11.91342, 6.3806],
+ "to": [9, 11.91342, 8.3806],
+ "rotation": {"angle": -22.5, "axis": "x", "origin": [8, 10, 11]},
+ "faces": {
+ "north": {"uv": [1, 0, 0, 0], "rotation": 180, "texture": "#1"},
+ "east": {"uv": [0, 0, 0, 1], "rotation": 90, "texture": "#1"},
+ "south": {"uv": [1, 0, 0, 0], "texture": "#1"},
+ "west": {"uv": [0, 0, 0, 1], "rotation": 270, "texture": "#1"},
+ "up": {"uv": [3, 9, 4, 10], "texture": "#1"},
+ "down": {"uv": [9, 2, 10, 3], "rotation": 180, "texture": "#1"}
+ }
+ },
+ {
+ "from": [5, 10, 5],
+ "to": [11, 10, 11],
+ "rotation": {"angle": 0, "axis": "x", "origin": [8, 10, 11]},
+ "faces": {
+ "north": {"uv": [0, 3, 0, 0], "rotation": 180, "texture": "#1"},
+ "east": {"uv": [0, 0, 0, 3], "rotation": 90, "texture": "#1"},
+ "south": {"uv": [0, 0, 0, 3], "texture": "#1"},
+ "west": {"uv": [0, 0, 0, 3], "rotation": 270, "texture": "#1"},
+ "up": {"uv": [9, 3, 6, 0], "texture": "#1"},
+ "down": {"uv": [6, 0, 9, 3], "rotation": 180, "texture": "#1"}
+ }
+ },
+ {
+ "from": [5, 0, 5],
+ "to": [11, 9, 11],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 5.5, 9]},
+ "faces": {
+ "north": {"uv": [0, 0, 3, 4.5], "texture": "#1"},
+ "east": {"uv": [3, 0, 6, 4.5], "texture": "#1"},
+ "south": {"uv": [0, 4.5, 3, 9], "texture": "#1"},
+ "west": {"uv": [3, 4.5, 6, 9], "texture": "#1"},
+ "up": {"uv": [3, 12, 0, 9], "texture": "#1"},
+ "down": {"uv": [6, 0, 9, 3], "texture": "#1"}
+ }
+ },
+ {
+ "from": [5, 9, 5],
+ "to": [11, 10, 11],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 13.5, 9]},
+ "faces": {
+ "north": {"uv": [9, 0, 12, 0.5], "texture": "#1"},
+ "east": {"uv": [9, 0.5, 12, 1], "texture": "#1"},
+ "south": {"uv": [9, 1, 12, 1.5], "texture": "#1"},
+ "west": {"uv": [9, 1.5, 12, 2], "texture": "#1"},
+ "up": {"uv": [9, 6, 6, 3], "texture": "#1"},
+ "down": {"uv": [9, 6, 6, 9], "texture": "#1"}
+ }
+ },
+ {
+ "name": "cube inverted",
+ "from": [11, 10, 11],
+ "to": [5, 9, 5],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 13.5, 9]},
+ "faces": {
+ "north": {"uv": [9, 1.5, 12, 1], "texture": "#1"},
+ "east": {"uv": [9, 2, 12, 1.5], "texture": "#1"},
+ "south": {"uv": [9, 0.5, 12, 0], "texture": "#1"},
+ "west": {"uv": [9, 1, 12, 0.5], "texture": "#1"},
+ "up": {"uv": [9, 9, 6, 6], "texture": "#1"},
+ "down": {"uv": [9, 6, 6, 3], "texture": "#1"}
+ }
+ }
+ ],
+ "gui_light": "front",
+ "display": {
+ "thirdperson_righthand": {
+ "rotation": [0, 90, 0],
+ "translation": [-1.25, 2.25, 2.25],
+ "scale": [0.55, 0.55, 0.55]
+ },
+ "thirdperson_lefthand": {
+ "rotation": [0, 90, 0],
+ "translation": [-1.25, 2.25, 2.25],
+ "scale": [0.55, 0.55, 0.55]
+ },
+ "firstperson_righthand": {
+ "rotation": [-155.67, 87.24, 146.71],
+ "translation": [-0.75, 4.75, 2.25],
+ "scale": [0.44883, 0.44883, 0.44883]
+ },
+ "firstperson_lefthand": {
+ "rotation": [-155.67, 87.24, 146.71],
+ "translation": [-0.75, 4.75, 2.25],
+ "scale": [0.44883, 0.44883, 0.44883]
+ },
+ "ground": {
+ "translation": [0, 2.5, 0],
+ "scale": [0.5, 0.5, 0.5]
+ },
+ "gui": {
+ "rotation": [-171.31, 28.48, -168.29],
+ "translation": [0.5, 3.25, 0],
+ "scale": [1.07695, 1.07695, 1.07695]
+ },
+ "head": {
+ "rotation": [0, -180, 0],
+ "translation": [0, 13, 0.25]
+ },
+ "fixed": {
+ "translation": [0, 4.75, 0]
+ },
+ "on_shelf": {
+ "rotation": [0, -180, 0]
+ }
+ },
+ "groups": [
+ {
+ "name": "group",
+ "origin": [8, 9, 6],
+ "scope": 0,
+ "color": 0,
+ "children": [0, 1]
+ },
+ 2,
+ {
+ "name": "group",
+ "origin": [7, 12.5, 9],
+ "scope": 0,
+ "color": 0,
+ "children": [3, 4]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/_sa_food_models/01_罐头食品/canned_chilli_open.json b/_sa_food_models/01_罐头食品/canned_chilli_open.json
new file mode 100644
index 0000000..3ad84de
--- /dev/null
+++ b/_sa_food_models/01_罐头食品/canned_chilli_open.json
@@ -0,0 +1,136 @@
+{
+ "format_version": "1.21.11",
+ "credit": "Made with Blockbench",
+ "texture_size": [32, 32],
+ "textures": {
+ "1": "sa_combat:item/canned_foods/canned_chilli",
+ "particle": "sa_combat:item/canned_foods/canned_chilli_p"
+ },
+ "elements": [
+ {
+ "from": [7, 8.08658, 13.6194],
+ "to": [9, 8.08658, 15.6194],
+ "rotation": {"angle": 22.5, "axis": "x", "origin": [8, 10, 11]},
+ "faces": {
+ "north": {"uv": [1, 0, 0, 0], "rotation": 180, "texture": "#1"},
+ "east": {"uv": [0, 0, 0, 1], "rotation": 270, "texture": "#1"},
+ "south": {"uv": [1, 0, 0, 0], "texture": "#1"},
+ "west": {"uv": [0, 0, 0, 1], "rotation": 90, "texture": "#1"},
+ "up": {"uv": [9, 2, 10, 3], "rotation": 180, "texture": "#1"},
+ "down": {"uv": [3, 9, 4, 10], "texture": "#1"}
+ }
+ },
+ {
+ "from": [5, 10, 11],
+ "to": [11, 10, 17],
+ "rotation": {"angle": 45, "axis": "x", "origin": [8, 10, 11]},
+ "faces": {
+ "north": {"uv": [0, 0, 0, 3], "rotation": 180, "texture": "#1"},
+ "east": {"uv": [0, 0, 0, 3], "rotation": 270, "texture": "#1"},
+ "south": {"uv": [0, 3, 0, 0], "texture": "#1"},
+ "west": {"uv": [0, 0, 0, 3], "rotation": 90, "texture": "#1"},
+ "up": {"uv": [6, 0, 9, 3], "rotation": 180, "texture": "#1"},
+ "down": {"uv": [9, 3, 6, 0], "texture": "#1"}
+ }
+ },
+ {
+ "from": [5, 0, 5],
+ "to": [11, 9, 11],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 5.5, 9]},
+ "faces": {
+ "north": {"uv": [0, 0, 3, 4.5], "texture": "#1"},
+ "east": {"uv": [3, 0, 6, 4.5], "texture": "#1"},
+ "south": {"uv": [0, 4.5, 3, 9], "texture": "#1"},
+ "west": {"uv": [3, 4.5, 6, 9], "texture": "#1"},
+ "up": {"uv": [3, 12, 0, 9], "texture": "#1"},
+ "down": {"uv": [6, 0, 9, 3], "texture": "#1"}
+ }
+ },
+ {
+ "from": [5, 9, 5],
+ "to": [11, 10, 11],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 13.5, 9]},
+ "faces": {
+ "north": {"uv": [9, 0, 12, 0.5], "texture": "#1"},
+ "east": {"uv": [9, 0.5, 12, 1], "texture": "#1"},
+ "south": {"uv": [9, 1, 12, 1.5], "texture": "#1"},
+ "west": {"uv": [9, 1.5, 12, 2], "texture": "#1"},
+ "up": {"uv": [9, 6, 6, 3], "texture": "#1"},
+ "down": {"uv": [9, 6, 6, 9], "texture": "#1"}
+ }
+ },
+ {
+ "name": "cube inverted",
+ "from": [11, 10, 11],
+ "to": [5, 9, 5],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 13.5, 9]},
+ "faces": {
+ "north": {"uv": [9, 1.5, 12, 1], "texture": "#1"},
+ "east": {"uv": [9, 2, 12, 1.5], "texture": "#1"},
+ "south": {"uv": [9, 0.5, 12, 0], "texture": "#1"},
+ "west": {"uv": [9, 1, 12, 0.5], "texture": "#1"},
+ "up": {"uv": [9, 9, 6, 6], "texture": "#1"},
+ "down": {"uv": [9, 6, 6, 3], "texture": "#1"}
+ }
+ }
+ ],
+ "gui_light": "front",
+ "display": {
+ "thirdperson_righthand": {
+ "rotation": [0, 90, 0],
+ "translation": [-1.25, 2.25, 2.25],
+ "scale": [0.55, 0.55, 0.55]
+ },
+ "thirdperson_lefthand": {
+ "rotation": [0, 90, 0],
+ "translation": [-1.25, 2.25, 2.25],
+ "scale": [0.55, 0.55, 0.55]
+ },
+ "firstperson_righthand": {
+ "rotation": [-155.67, 87.24, 146.71],
+ "translation": [-0.75, 4.75, 2.25],
+ "scale": [0.44883, 0.44883, 0.44883]
+ },
+ "firstperson_lefthand": {
+ "rotation": [-155.67, 87.24, 146.71],
+ "translation": [-0.75, 4.75, 2.25],
+ "scale": [0.44883, 0.44883, 0.44883]
+ },
+ "ground": {
+ "translation": [0, 2.5, 0],
+ "scale": [0.5, 0.5, 0.5]
+ },
+ "gui": {
+ "rotation": [-171.31, 28.48, -168.29],
+ "translation": [0.5, 3.25, 0],
+ "scale": [1.07695, 1.07695, 1.07695]
+ },
+ "head": {
+ "rotation": [0, -180, 0],
+ "translation": [0, 13, 0.25]
+ },
+ "fixed": {
+ "translation": [0, 4.75, 0]
+ },
+ "on_shelf": {
+ "rotation": [0, -180, 0]
+ }
+ },
+ "groups": [
+ {
+ "name": "group",
+ "origin": [8, 9, 6],
+ "scope": 0,
+ "color": 0,
+ "children": [0, 1]
+ },
+ 2,
+ {
+ "name": "group",
+ "origin": [7, 12.5, 9],
+ "scope": 0,
+ "color": 0,
+ "children": [3, 4]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/_sa_food_models/01_罐头食品/canned_corn.json b/_sa_food_models/01_罐头食品/canned_corn.json
new file mode 100644
index 0000000..1e50456
--- /dev/null
+++ b/_sa_food_models/01_罐头食品/canned_corn.json
@@ -0,0 +1,135 @@
+{
+ "format_version": "1.21.11",
+ "credit": "Made with Blockbench",
+ "texture_size": [32, 32],
+ "textures": {
+ "1": "sa_combat:item/canned_foods/canned_corn"
+ },
+ "elements": [
+ {
+ "from": [7, 11.91342, 6.3806],
+ "to": [9, 11.91342, 8.3806],
+ "rotation": {"angle": -22.5, "axis": "x", "origin": [8, 10, 11]},
+ "faces": {
+ "north": {"uv": [1, 0, 0, 0], "rotation": 180, "texture": "#1"},
+ "east": {"uv": [0, 0, 0, 1], "rotation": 90, "texture": "#1"},
+ "south": {"uv": [1, 0, 0, 0], "texture": "#1"},
+ "west": {"uv": [0, 0, 0, 1], "rotation": 270, "texture": "#1"},
+ "up": {"uv": [3, 9, 4, 10], "texture": "#1"},
+ "down": {"uv": [9, 2, 10, 3], "rotation": 180, "texture": "#1"}
+ }
+ },
+ {
+ "from": [5, 10, 5],
+ "to": [11, 10, 11],
+ "rotation": {"angle": 0, "axis": "x", "origin": [8, 10, 11]},
+ "faces": {
+ "north": {"uv": [0, 3, 0, 0], "rotation": 180, "texture": "#1"},
+ "east": {"uv": [0, 0, 0, 3], "rotation": 90, "texture": "#1"},
+ "south": {"uv": [0, 0, 0, 3], "texture": "#1"},
+ "west": {"uv": [0, 0, 0, 3], "rotation": 270, "texture": "#1"},
+ "up": {"uv": [9, 3, 6, 0], "texture": "#1"},
+ "down": {"uv": [6, 0, 9, 3], "rotation": 180, "texture": "#1"}
+ }
+ },
+ {
+ "from": [5, 0, 5],
+ "to": [11, 9, 11],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 5.5, 9]},
+ "faces": {
+ "north": {"uv": [0, 0, 3, 4.5], "texture": "#1"},
+ "east": {"uv": [3, 0, 6, 4.5], "texture": "#1"},
+ "south": {"uv": [0, 4.5, 3, 9], "texture": "#1"},
+ "west": {"uv": [3, 4.5, 6, 9], "texture": "#1"},
+ "up": {"uv": [3, 12, 0, 9], "texture": "#1"},
+ "down": {"uv": [6, 0, 9, 3], "texture": "#1"}
+ }
+ },
+ {
+ "from": [5, 9, 5],
+ "to": [11, 10, 11],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 13.5, 9]},
+ "faces": {
+ "north": {"uv": [9, 0, 12, 0.5], "texture": "#1"},
+ "east": {"uv": [9, 0.5, 12, 1], "texture": "#1"},
+ "south": {"uv": [9, 1, 12, 1.5], "texture": "#1"},
+ "west": {"uv": [9, 1.5, 12, 2], "texture": "#1"},
+ "up": {"uv": [9, 6, 6, 3], "texture": "#1"},
+ "down": {"uv": [9, 6, 6, 9], "texture": "#1"}
+ }
+ },
+ {
+ "name": "cube inverted",
+ "from": [11, 10, 11],
+ "to": [5, 9, 5],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 13.5, 9]},
+ "faces": {
+ "north": {"uv": [9, 1.5, 12, 1], "texture": "#1"},
+ "east": {"uv": [9, 2, 12, 1.5], "texture": "#1"},
+ "south": {"uv": [9, 0.5, 12, 0], "texture": "#1"},
+ "west": {"uv": [9, 1, 12, 0.5], "texture": "#1"},
+ "up": {"uv": [9, 9, 6, 6], "texture": "#1"},
+ "down": {"uv": [9, 6, 6, 3], "texture": "#1"}
+ }
+ }
+ ],
+ "gui_light": "front",
+ "display": {
+ "thirdperson_righthand": {
+ "rotation": [0, 90, 0],
+ "translation": [-1.25, 2.25, 2.25],
+ "scale": [0.55, 0.55, 0.55]
+ },
+ "thirdperson_lefthand": {
+ "rotation": [0, 90, 0],
+ "translation": [-1.25, 2.25, 2.25],
+ "scale": [0.55, 0.55, 0.55]
+ },
+ "firstperson_righthand": {
+ "rotation": [-155.67, 87.24, 146.71],
+ "translation": [-0.75, 4.75, 2.25],
+ "scale": [0.44883, 0.44883, 0.44883]
+ },
+ "firstperson_lefthand": {
+ "rotation": [-155.67, 87.24, 146.71],
+ "translation": [-0.75, 4.75, 2.25],
+ "scale": [0.44883, 0.44883, 0.44883]
+ },
+ "ground": {
+ "translation": [0, 2.5, 0],
+ "scale": [0.5, 0.5, 0.5]
+ },
+ "gui": {
+ "rotation": [-171.31, 28.48, -168.29],
+ "translation": [0.5, 3.25, 0],
+ "scale": [1.07695, 1.07695, 1.07695]
+ },
+ "head": {
+ "rotation": [0, -180, 0],
+ "translation": [0, 13, 0.25]
+ },
+ "fixed": {
+ "translation": [0, 4.75, 0]
+ },
+ "on_shelf": {
+ "rotation": [0, -180, 0]
+ }
+ },
+ "groups": [
+ {
+ "name": "group",
+ "origin": [8, 9, 6],
+ "scope": 0,
+ "color": 0,
+ "children": [0, 1]
+ },
+ 2,
+ {
+ "name": "group",
+ "origin": [7, 12.5, 9],
+ "scope": 0,
+ "color": 0,
+ "children": [3, 4]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/_sa_food_models/01_罐头食品/canned_corn_open.json b/_sa_food_models/01_罐头食品/canned_corn_open.json
new file mode 100644
index 0000000..4dfd256
--- /dev/null
+++ b/_sa_food_models/01_罐头食品/canned_corn_open.json
@@ -0,0 +1,136 @@
+{
+ "format_version": "1.21.11",
+ "credit": "Made with Blockbench",
+ "texture_size": [32, 32],
+ "textures": {
+ "1": "sa_combat:item/canned_foods/canned_corn",
+ "particle": "sa_combat:item/canned_foods/canned_corn_p"
+ },
+ "elements": [
+ {
+ "from": [7, 8.08658, 13.6194],
+ "to": [9, 8.08658, 15.6194],
+ "rotation": {"angle": 22.5, "axis": "x", "origin": [8, 10, 11]},
+ "faces": {
+ "north": {"uv": [1, 0, 0, 0], "rotation": 180, "texture": "#1"},
+ "east": {"uv": [0, 0, 0, 1], "rotation": 270, "texture": "#1"},
+ "south": {"uv": [1, 0, 0, 0], "texture": "#1"},
+ "west": {"uv": [0, 0, 0, 1], "rotation": 90, "texture": "#1"},
+ "up": {"uv": [9, 2, 10, 3], "rotation": 180, "texture": "#1"},
+ "down": {"uv": [3, 9, 4, 10], "texture": "#1"}
+ }
+ },
+ {
+ "from": [5, 10, 11],
+ "to": [11, 10, 17],
+ "rotation": {"angle": 45, "axis": "x", "origin": [8, 10, 11]},
+ "faces": {
+ "north": {"uv": [0, 0, 0, 3], "rotation": 180, "texture": "#1"},
+ "east": {"uv": [0, 0, 0, 3], "rotation": 270, "texture": "#1"},
+ "south": {"uv": [0, 3, 0, 0], "texture": "#1"},
+ "west": {"uv": [0, 0, 0, 3], "rotation": 90, "texture": "#1"},
+ "up": {"uv": [6, 0, 9, 3], "rotation": 180, "texture": "#1"},
+ "down": {"uv": [9, 3, 6, 0], "texture": "#1"}
+ }
+ },
+ {
+ "from": [5, 0, 5],
+ "to": [11, 9, 11],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 5.5, 9]},
+ "faces": {
+ "north": {"uv": [0, 0, 3, 4.5], "texture": "#1"},
+ "east": {"uv": [3, 0, 6, 4.5], "texture": "#1"},
+ "south": {"uv": [0, 4.5, 3, 9], "texture": "#1"},
+ "west": {"uv": [3, 4.5, 6, 9], "texture": "#1"},
+ "up": {"uv": [3, 12, 0, 9], "texture": "#1"},
+ "down": {"uv": [6, 0, 9, 3], "texture": "#1"}
+ }
+ },
+ {
+ "from": [5, 9, 5],
+ "to": [11, 10, 11],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 13.5, 9]},
+ "faces": {
+ "north": {"uv": [9, 0, 12, 0.5], "texture": "#1"},
+ "east": {"uv": [9, 0.5, 12, 1], "texture": "#1"},
+ "south": {"uv": [9, 1, 12, 1.5], "texture": "#1"},
+ "west": {"uv": [9, 1.5, 12, 2], "texture": "#1"},
+ "up": {"uv": [9, 6, 6, 3], "texture": "#1"},
+ "down": {"uv": [9, 6, 6, 9], "texture": "#1"}
+ }
+ },
+ {
+ "name": "cube inverted",
+ "from": [11, 10, 11],
+ "to": [5, 9, 5],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 13.5, 9]},
+ "faces": {
+ "north": {"uv": [9, 1.5, 12, 1], "texture": "#1"},
+ "east": {"uv": [9, 2, 12, 1.5], "texture": "#1"},
+ "south": {"uv": [9, 0.5, 12, 0], "texture": "#1"},
+ "west": {"uv": [9, 1, 12, 0.5], "texture": "#1"},
+ "up": {"uv": [9, 9, 6, 6], "texture": "#1"},
+ "down": {"uv": [9, 6, 6, 3], "texture": "#1"}
+ }
+ }
+ ],
+ "gui_light": "front",
+ "display": {
+ "thirdperson_righthand": {
+ "rotation": [0, 90, 0],
+ "translation": [-1.25, 2.25, 2.25],
+ "scale": [0.55, 0.55, 0.55]
+ },
+ "thirdperson_lefthand": {
+ "rotation": [0, 90, 0],
+ "translation": [-1.25, 2.25, 2.25],
+ "scale": [0.55, 0.55, 0.55]
+ },
+ "firstperson_righthand": {
+ "rotation": [-155.67, 87.24, 146.71],
+ "translation": [-0.75, 4.75, 2.25],
+ "scale": [0.44883, 0.44883, 0.44883]
+ },
+ "firstperson_lefthand": {
+ "rotation": [-155.67, 87.24, 146.71],
+ "translation": [-0.75, 4.75, 2.25],
+ "scale": [0.44883, 0.44883, 0.44883]
+ },
+ "ground": {
+ "translation": [0, 2.5, 0],
+ "scale": [0.5, 0.5, 0.5]
+ },
+ "gui": {
+ "rotation": [-171.31, 28.48, -168.29],
+ "translation": [0.5, 3.25, 0],
+ "scale": [1.07695, 1.07695, 1.07695]
+ },
+ "head": {
+ "rotation": [0, -180, 0],
+ "translation": [0, 13, 0.25]
+ },
+ "fixed": {
+ "translation": [0, 4.75, 0]
+ },
+ "on_shelf": {
+ "rotation": [0, -180, 0]
+ }
+ },
+ "groups": [
+ {
+ "name": "group",
+ "origin": [8, 9, 6],
+ "scope": 0,
+ "color": 0,
+ "children": [0, 1]
+ },
+ 2,
+ {
+ "name": "group",
+ "origin": [7, 12.5, 9],
+ "scope": 0,
+ "color": 0,
+ "children": [3, 4]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/_sa_food_models/01_罐头食品/canned_corned_beef.json b/_sa_food_models/01_罐头食品/canned_corned_beef.json
new file mode 100644
index 0000000..6e58d0f
--- /dev/null
+++ b/_sa_food_models/01_罐头食品/canned_corned_beef.json
@@ -0,0 +1,136 @@
+{
+ "format_version": "1.21.11",
+ "credit": "Made with Blockbench",
+ "texture_size": [32, 32],
+ "textures": {
+ "2": "sa_combat:item/canned_foods/canned_corned_beef",
+ "particle": "sa_combat:item/canned_foods/canned_corned_beef"
+ },
+ "elements": [
+ {
+ "from": [9.31492, 13.44415, 7],
+ "to": [11.31492, 13.44415, 9],
+ "rotation": {"angle": -22.5, "axis": "z", "origin": [3, 10, 8]},
+ "faces": {
+ "north": {"uv": [0, 0, 1, 0], "texture": "#2"},
+ "east": {"uv": [0, 0, 1, 0], "texture": "#2"},
+ "south": {"uv": [0, 0, 1, 0], "texture": "#2"},
+ "west": {"uv": [1, 0, 0, 0], "texture": "#2"},
+ "up": {"uv": [11, 3, 10, 2], "rotation": 90, "texture": "#2"},
+ "down": {"uv": [11, 3, 10, 4], "rotation": 270, "texture": "#2"}
+ }
+ },
+ {
+ "from": [3, 10, 5],
+ "to": [13, 10, 11],
+ "rotation": {"angle": 0, "axis": "x", "origin": [3, 10, 8]},
+ "faces": {
+ "north": {"uv": [0, 0, 5, 0], "texture": "#2"},
+ "east": {"uv": [0, 0, 5, 0], "texture": "#2"},
+ "south": {"uv": [0, 0, 5, 0], "texture": "#2"},
+ "west": {"uv": [0, 0, 5, 0], "texture": "#2"},
+ "up": {"uv": [10, 3, 5, 0], "texture": "#2"},
+ "down": {"uv": [10, 0, 5, 3], "texture": "#2"}
+ }
+ },
+ {
+ "from": [3, 0, 5],
+ "to": [13, 9, 11],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 5.5, 9]},
+ "faces": {
+ "north": {"uv": [0, 0, 5, 4.5], "texture": "#2"},
+ "east": {"uv": [5, 9, 8, 13.5], "texture": "#2"},
+ "south": {"uv": [0, 4.5, 5, 9], "texture": "#2"},
+ "west": {"uv": [8, 9, 5, 13.5], "texture": "#2"},
+ "up": {"uv": [5, 12, 0, 9], "texture": "#2"},
+ "down": {"uv": [10, 0, 5, 3], "texture": "#2"}
+ }
+ },
+ {
+ "from": [3, 9, 5],
+ "to": [13, 10, 11],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 13.5, 9]},
+ "faces": {
+ "north": {"uv": [10, 0, 15, 0.5], "texture": "#2"},
+ "east": {"uv": [10, 1, 13, 1.5], "texture": "#2"},
+ "south": {"uv": [10, 0.5, 15, 1], "texture": "#2"},
+ "west": {"uv": [10, 1.5, 13, 2], "texture": "#2"},
+ "up": {"uv": [10, 6, 5, 3], "texture": "#2"},
+ "down": {"uv": [10, 6, 5, 9], "texture": "#2"}
+ }
+ },
+ {
+ "name": "cube inverted",
+ "from": [13, 10, 11],
+ "to": [3, 9, 5],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 13.5, 9]},
+ "faces": {
+ "north": {"uv": [10, 1, 15, 0.5], "texture": "#2"},
+ "east": {"uv": [10, 2, 13, 1.5], "texture": "#2"},
+ "south": {"uv": [10, 0.5, 15, 0], "texture": "#2"},
+ "west": {"uv": [10, 1.5, 13, 1], "texture": "#2"},
+ "up": {"uv": [5, 6, 10, 9], "texture": "#2"},
+ "down": {"uv": [5, 6, 10, 3], "texture": "#2"}
+ }
+ }
+ ],
+ "gui_light": "front",
+ "display": {
+ "thirdperson_righthand": {
+ "rotation": [0, 90, 0],
+ "translation": [-1.25, 2.25, 2.25],
+ "scale": [0.55, 0.55, 0.55]
+ },
+ "thirdperson_lefthand": {
+ "rotation": [0, 90, 0],
+ "translation": [-1.25, 2.25, 2.25],
+ "scale": [0.55, 0.55, 0.55]
+ },
+ "firstperson_righthand": {
+ "rotation": [-155.67, 87.24, 146.71],
+ "translation": [-0.75, 4, 2.25],
+ "scale": [0.44883, 0.44883, 0.44883]
+ },
+ "firstperson_lefthand": {
+ "rotation": [-155.67, 87.24, 146.71],
+ "translation": [-0.75, 4, 2.25],
+ "scale": [0.44883, 0.44883, 0.44883]
+ },
+ "ground": {
+ "translation": [0, 2.5, 0],
+ "scale": [0.5, 0.5, 0.5]
+ },
+ "gui": {
+ "rotation": [-171.31, 28.48, -168.29],
+ "translation": [0.5, 3.25, 0],
+ "scale": [1.07695, 1.07695, 1.07695]
+ },
+ "head": {
+ "rotation": [0, -180, 0],
+ "translation": [0, 13, 0.25]
+ },
+ "fixed": {
+ "translation": [0, 4.75, 0]
+ },
+ "on_shelf": {
+ "rotation": [0, -180, 0]
+ }
+ },
+ "groups": [
+ {
+ "name": "group",
+ "origin": [8, 9, 6],
+ "scope": 0,
+ "color": 0,
+ "children": [0, 1]
+ },
+ 2,
+ {
+ "name": "group",
+ "origin": [7, 12.5, 9],
+ "scope": 0,
+ "color": 0,
+ "children": [3, 4]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/_sa_food_models/01_罐头食品/canned_corned_beef_open.json b/_sa_food_models/01_罐头食品/canned_corned_beef_open.json
new file mode 100644
index 0000000..0485ebc
--- /dev/null
+++ b/_sa_food_models/01_罐头食品/canned_corned_beef_open.json
@@ -0,0 +1,136 @@
+{
+ "format_version": "1.21.11",
+ "credit": "Made with Blockbench",
+ "texture_size": [32, 32],
+ "textures": {
+ "2": "sa_combat:item/canned_foods/canned_corned_beef",
+ "particle": "sa_combat:item/canned_foods/canned_corned_beef_p"
+ },
+ "elements": [
+ {
+ "from": [6.44415, 1.68508, 7],
+ "to": [6.44415, 3.68508, 9],
+ "rotation": {"angle": -45, "axis": "z", "origin": [3, 10, 8]},
+ "faces": {
+ "north": {"uv": [0, 0, 1, 0], "rotation": 270, "texture": "#2"},
+ "east": {"uv": [11, 3, 10, 2], "rotation": 180, "texture": "#2"},
+ "south": {"uv": [0, 0, 1, 0], "rotation": 90, "texture": "#2"},
+ "west": {"uv": [11, 3, 10, 4], "texture": "#2"},
+ "up": {"uv": [1, 0, 0, 0], "rotation": 90, "texture": "#2"},
+ "down": {"uv": [0, 0, 1, 0], "rotation": 90, "texture": "#2"}
+ }
+ },
+ {
+ "from": [3, 0, 5],
+ "to": [3, 10, 11],
+ "rotation": {"angle": -22.5, "axis": "z", "origin": [3, 10, 8]},
+ "faces": {
+ "north": {"uv": [0, 0, 5, 0], "rotation": 270, "texture": "#2"},
+ "east": {"uv": [10, 3, 5, 0], "rotation": 90, "texture": "#2"},
+ "south": {"uv": [0, 0, 5, 0], "rotation": 90, "texture": "#2"},
+ "west": {"uv": [10, 0, 5, 3], "rotation": 90, "texture": "#2"},
+ "up": {"uv": [0, 0, 5, 0], "rotation": 90, "texture": "#2"},
+ "down": {"uv": [0, 0, 5, 0], "rotation": 90, "texture": "#2"}
+ }
+ },
+ {
+ "from": [3, 0, 5],
+ "to": [13, 9, 11],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 5.5, 9]},
+ "faces": {
+ "north": {"uv": [0, 0, 5, 4.5], "texture": "#2"},
+ "east": {"uv": [5, 9, 8, 13.5], "texture": "#2"},
+ "south": {"uv": [0, 4.5, 5, 9], "texture": "#2"},
+ "west": {"uv": [8, 9, 5, 13.5], "texture": "#2"},
+ "up": {"uv": [5, 12, 0, 9], "texture": "#2"},
+ "down": {"uv": [10, 0, 5, 3], "texture": "#2"}
+ }
+ },
+ {
+ "from": [3, 9, 5],
+ "to": [13, 10, 11],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 13.5, 9]},
+ "faces": {
+ "north": {"uv": [10, 0, 15, 0.5], "texture": "#2"},
+ "east": {"uv": [10, 1, 13, 1.5], "texture": "#2"},
+ "south": {"uv": [10, 0.5, 15, 1], "texture": "#2"},
+ "west": {"uv": [10, 1.5, 13, 2], "texture": "#2"},
+ "up": {"uv": [10, 6, 5, 3], "texture": "#2"},
+ "down": {"uv": [10, 6, 5, 9], "texture": "#2"}
+ }
+ },
+ {
+ "name": "cube inverted",
+ "from": [13, 10, 11],
+ "to": [3, 9, 5],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 13.5, 9]},
+ "faces": {
+ "north": {"uv": [10, 1, 15, 0.5], "texture": "#2"},
+ "east": {"uv": [10, 2, 13, 1.5], "texture": "#2"},
+ "south": {"uv": [10, 0.5, 15, 0], "texture": "#2"},
+ "west": {"uv": [10, 1.5, 13, 1], "texture": "#2"},
+ "up": {"uv": [5, 6, 10, 9], "texture": "#2"},
+ "down": {"uv": [5, 6, 10, 3], "texture": "#2"}
+ }
+ }
+ ],
+ "gui_light": "front",
+ "display": {
+ "thirdperson_righthand": {
+ "rotation": [0, 90, 0],
+ "translation": [-1.25, 2.25, 2.25],
+ "scale": [0.55, 0.55, 0.55]
+ },
+ "thirdperson_lefthand": {
+ "rotation": [0, 90, 0],
+ "translation": [-1.25, 2.25, 2.25],
+ "scale": [0.55, 0.55, 0.55]
+ },
+ "firstperson_righthand": {
+ "rotation": [-155.67, 87.24, 146.71],
+ "translation": [-0.75, 4, 2.25],
+ "scale": [0.44883, 0.44883, 0.44883]
+ },
+ "firstperson_lefthand": {
+ "rotation": [-155.67, 87.24, 146.71],
+ "translation": [-0.75, 4, 2.25],
+ "scale": [0.44883, 0.44883, 0.44883]
+ },
+ "ground": {
+ "translation": [0, 2.5, 0],
+ "scale": [0.5, 0.5, 0.5]
+ },
+ "gui": {
+ "rotation": [-171.31, 28.48, -168.29],
+ "translation": [0.5, 3.25, 0],
+ "scale": [1.07695, 1.07695, 1.07695]
+ },
+ "head": {
+ "rotation": [0, -180, 0],
+ "translation": [0, 13, 0.25]
+ },
+ "fixed": {
+ "translation": [0, 4.75, 0]
+ },
+ "on_shelf": {
+ "rotation": [0, -180, 0]
+ }
+ },
+ "groups": [
+ {
+ "name": "group",
+ "origin": [8, 9, 6],
+ "scope": 0,
+ "color": 0,
+ "children": [0, 1]
+ },
+ 2,
+ {
+ "name": "group",
+ "origin": [7, 12.5, 9],
+ "scope": 0,
+ "color": 0,
+ "children": [3, 4]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/_sa_food_models/01_罐头食品/canned_dog_food.json b/_sa_food_models/01_罐头食品/canned_dog_food.json
new file mode 100644
index 0000000..4855a4d
--- /dev/null
+++ b/_sa_food_models/01_罐头食品/canned_dog_food.json
@@ -0,0 +1,135 @@
+{
+ "format_version": "1.21.11",
+ "credit": "Made with Blockbench",
+ "texture_size": [32, 32],
+ "textures": {
+ "1": "sa_combat:item/canned_foods/canned_dog_food"
+ },
+ "elements": [
+ {
+ "from": [7, 11.91342, 6.3806],
+ "to": [9, 11.91342, 8.3806],
+ "rotation": {"angle": -22.5, "axis": "x", "origin": [8, 10, 11]},
+ "faces": {
+ "north": {"uv": [1, 0, 0, 0], "rotation": 180, "texture": "#1"},
+ "east": {"uv": [0, 0, 0, 1], "rotation": 90, "texture": "#1"},
+ "south": {"uv": [1, 0, 0, 0], "texture": "#1"},
+ "west": {"uv": [0, 0, 0, 1], "rotation": 270, "texture": "#1"},
+ "up": {"uv": [3, 9, 4, 10], "texture": "#1"},
+ "down": {"uv": [9, 2, 10, 3], "rotation": 180, "texture": "#1"}
+ }
+ },
+ {
+ "from": [5, 10, 5],
+ "to": [11, 10, 11],
+ "rotation": {"angle": 0, "axis": "x", "origin": [8, 10, 11]},
+ "faces": {
+ "north": {"uv": [0, 3, 0, 0], "rotation": 180, "texture": "#1"},
+ "east": {"uv": [0, 0, 0, 3], "rotation": 90, "texture": "#1"},
+ "south": {"uv": [0, 0, 0, 3], "texture": "#1"},
+ "west": {"uv": [0, 0, 0, 3], "rotation": 270, "texture": "#1"},
+ "up": {"uv": [9, 3, 6, 0], "texture": "#1"},
+ "down": {"uv": [6, 0, 9, 3], "rotation": 180, "texture": "#1"}
+ }
+ },
+ {
+ "from": [5, 0, 5],
+ "to": [11, 9, 11],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 5.5, 9]},
+ "faces": {
+ "north": {"uv": [0, 0, 3, 4.5], "texture": "#1"},
+ "east": {"uv": [3, 0, 6, 4.5], "texture": "#1"},
+ "south": {"uv": [0, 4.5, 3, 9], "texture": "#1"},
+ "west": {"uv": [3, 4.5, 6, 9], "texture": "#1"},
+ "up": {"uv": [3, 12, 0, 9], "texture": "#1"},
+ "down": {"uv": [6, 0, 9, 3], "texture": "#1"}
+ }
+ },
+ {
+ "from": [5, 9, 5],
+ "to": [11, 10, 11],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 13.5, 9]},
+ "faces": {
+ "north": {"uv": [9, 0, 12, 0.5], "texture": "#1"},
+ "east": {"uv": [9, 0.5, 12, 1], "texture": "#1"},
+ "south": {"uv": [9, 1, 12, 1.5], "texture": "#1"},
+ "west": {"uv": [9, 1.5, 12, 2], "texture": "#1"},
+ "up": {"uv": [9, 6, 6, 3], "texture": "#1"},
+ "down": {"uv": [9, 6, 6, 9], "texture": "#1"}
+ }
+ },
+ {
+ "name": "cube inverted",
+ "from": [11, 10, 11],
+ "to": [5, 9, 5],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 13.5, 9]},
+ "faces": {
+ "north": {"uv": [9, 1.5, 12, 1], "texture": "#1"},
+ "east": {"uv": [9, 2, 12, 1.5], "texture": "#1"},
+ "south": {"uv": [9, 0.5, 12, 0], "texture": "#1"},
+ "west": {"uv": [9, 1, 12, 0.5], "texture": "#1"},
+ "up": {"uv": [9, 9, 6, 6], "texture": "#1"},
+ "down": {"uv": [9, 6, 6, 3], "texture": "#1"}
+ }
+ }
+ ],
+ "gui_light": "front",
+ "display": {
+ "thirdperson_righthand": {
+ "rotation": [0, 90, 0],
+ "translation": [-1.25, 2.25, 2.25],
+ "scale": [0.55, 0.55, 0.55]
+ },
+ "thirdperson_lefthand": {
+ "rotation": [0, 90, 0],
+ "translation": [-1.25, 2.25, 2.25],
+ "scale": [0.55, 0.55, 0.55]
+ },
+ "firstperson_righthand": {
+ "rotation": [-155.67, 87.24, 146.71],
+ "translation": [-0.75, 4.75, 2.25],
+ "scale": [0.44883, 0.44883, 0.44883]
+ },
+ "firstperson_lefthand": {
+ "rotation": [-155.67, 87.24, 146.71],
+ "translation": [-0.75, 4.75, 2.25],
+ "scale": [0.44883, 0.44883, 0.44883]
+ },
+ "ground": {
+ "translation": [0, 2.5, 0],
+ "scale": [0.5, 0.5, 0.5]
+ },
+ "gui": {
+ "rotation": [-171.31, 28.48, -168.29],
+ "translation": [0.5, 3.25, 0],
+ "scale": [1.07695, 1.07695, 1.07695]
+ },
+ "head": {
+ "rotation": [0, -180, 0],
+ "translation": [0, 13, 0.25]
+ },
+ "fixed": {
+ "translation": [0, 4.75, 0]
+ },
+ "on_shelf": {
+ "rotation": [0, -180, 0]
+ }
+ },
+ "groups": [
+ {
+ "name": "group",
+ "origin": [8, 9, 6],
+ "scope": 0,
+ "color": 0,
+ "children": [0, 1]
+ },
+ 2,
+ {
+ "name": "group",
+ "origin": [7, 12.5, 9],
+ "scope": 0,
+ "color": 0,
+ "children": [3, 4]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/_sa_food_models/01_罐头食品/canned_dog_food_open.json b/_sa_food_models/01_罐头食品/canned_dog_food_open.json
new file mode 100644
index 0000000..bed94e1
--- /dev/null
+++ b/_sa_food_models/01_罐头食品/canned_dog_food_open.json
@@ -0,0 +1,136 @@
+{
+ "format_version": "1.21.11",
+ "credit": "Made with Blockbench",
+ "texture_size": [32, 32],
+ "textures": {
+ "1": "sa_combat:item/canned_foods/canned_dog_food",
+ "particle": "sa_combat:item/canned_foods/canned_chilli_p"
+ },
+ "elements": [
+ {
+ "from": [7, 8.08658, 13.6194],
+ "to": [9, 8.08658, 15.6194],
+ "rotation": {"angle": 22.5, "axis": "x", "origin": [8, 10, 11]},
+ "faces": {
+ "north": {"uv": [1, 0, 0, 0], "rotation": 180, "texture": "#1"},
+ "east": {"uv": [0, 0, 0, 1], "rotation": 270, "texture": "#1"},
+ "south": {"uv": [1, 0, 0, 0], "texture": "#1"},
+ "west": {"uv": [0, 0, 0, 1], "rotation": 90, "texture": "#1"},
+ "up": {"uv": [9, 2, 10, 3], "rotation": 180, "texture": "#1"},
+ "down": {"uv": [3, 9, 4, 10], "texture": "#1"}
+ }
+ },
+ {
+ "from": [5, 10, 11],
+ "to": [11, 10, 17],
+ "rotation": {"angle": 45, "axis": "x", "origin": [8, 10, 11]},
+ "faces": {
+ "north": {"uv": [0, 0, 0, 3], "rotation": 180, "texture": "#1"},
+ "east": {"uv": [0, 0, 0, 3], "rotation": 270, "texture": "#1"},
+ "south": {"uv": [0, 3, 0, 0], "texture": "#1"},
+ "west": {"uv": [0, 0, 0, 3], "rotation": 90, "texture": "#1"},
+ "up": {"uv": [6, 0, 9, 3], "rotation": 180, "texture": "#1"},
+ "down": {"uv": [9, 3, 6, 0], "texture": "#1"}
+ }
+ },
+ {
+ "from": [5, 0, 5],
+ "to": [11, 9, 11],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 5.5, 9]},
+ "faces": {
+ "north": {"uv": [0, 0, 3, 4.5], "texture": "#1"},
+ "east": {"uv": [3, 0, 6, 4.5], "texture": "#1"},
+ "south": {"uv": [0, 4.5, 3, 9], "texture": "#1"},
+ "west": {"uv": [6, 0, 3, 4.5], "texture": "#1"},
+ "up": {"uv": [3, 12, 0, 9], "texture": "#1"},
+ "down": {"uv": [6, 0, 9, 3], "texture": "#1"}
+ }
+ },
+ {
+ "from": [5, 9, 5],
+ "to": [11, 10, 11],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 13.5, 9]},
+ "faces": {
+ "north": {"uv": [9, 0, 12, 0.5], "texture": "#1"},
+ "east": {"uv": [9, 0.5, 12, 1], "texture": "#1"},
+ "south": {"uv": [9, 1, 12, 1.5], "texture": "#1"},
+ "west": {"uv": [9, 1.5, 12, 2], "texture": "#1"},
+ "up": {"uv": [9, 6, 6, 3], "texture": "#1"},
+ "down": {"uv": [9, 6, 6, 9], "texture": "#1"}
+ }
+ },
+ {
+ "name": "cube inverted",
+ "from": [11, 10, 11],
+ "to": [5, 9, 5],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 13.5, 9]},
+ "faces": {
+ "north": {"uv": [9, 1.5, 12, 1], "texture": "#1"},
+ "east": {"uv": [9, 2, 12, 1.5], "texture": "#1"},
+ "south": {"uv": [9, 0.5, 12, 0], "texture": "#1"},
+ "west": {"uv": [9, 1, 12, 0.5], "texture": "#1"},
+ "up": {"uv": [9, 9, 6, 6], "texture": "#1"},
+ "down": {"uv": [9, 6, 6, 3], "texture": "#1"}
+ }
+ }
+ ],
+ "gui_light": "front",
+ "display": {
+ "thirdperson_righthand": {
+ "rotation": [0, 90, 0],
+ "translation": [-1.25, 2.25, 2.25],
+ "scale": [0.55, 0.55, 0.55]
+ },
+ "thirdperson_lefthand": {
+ "rotation": [0, 90, 0],
+ "translation": [-1.25, 2.25, 2.25],
+ "scale": [0.55, 0.55, 0.55]
+ },
+ "firstperson_righthand": {
+ "rotation": [-155.67, 87.24, 146.71],
+ "translation": [-0.75, 4.75, 2.25],
+ "scale": [0.44883, 0.44883, 0.44883]
+ },
+ "firstperson_lefthand": {
+ "rotation": [-155.67, 87.24, 146.71],
+ "translation": [-0.75, 4.75, 2.25],
+ "scale": [0.44883, 0.44883, 0.44883]
+ },
+ "ground": {
+ "translation": [0, 2.5, 0],
+ "scale": [0.5, 0.5, 0.5]
+ },
+ "gui": {
+ "rotation": [-171.31, 28.48, -168.29],
+ "translation": [0.5, 3.25, 0],
+ "scale": [1.07695, 1.07695, 1.07695]
+ },
+ "head": {
+ "rotation": [0, -180, 0],
+ "translation": [0, 13, 0.25]
+ },
+ "fixed": {
+ "translation": [0, 4.75, 0]
+ },
+ "on_shelf": {
+ "rotation": [0, -180, 0]
+ }
+ },
+ "groups": [
+ {
+ "name": "group",
+ "origin": [8, 9, 6],
+ "scope": 0,
+ "color": 0,
+ "children": [0, 1]
+ },
+ 2,
+ {
+ "name": "group",
+ "origin": [7, 12.5, 9],
+ "scope": 0,
+ "color": 0,
+ "children": [3, 4]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/_sa_food_models/01_罐头食品/canned_evaporated_milk.json b/_sa_food_models/01_罐头食品/canned_evaporated_milk.json
new file mode 100644
index 0000000..eaeff6a
--- /dev/null
+++ b/_sa_food_models/01_罐头食品/canned_evaporated_milk.json
@@ -0,0 +1,135 @@
+{
+ "format_version": "1.21.11",
+ "credit": "Made with Blockbench",
+ "texture_size": [32, 32],
+ "textures": {
+ "1": "sa_combat:item/canned_foods/canned_evaporated_milk"
+ },
+ "elements": [
+ {
+ "from": [7, 11.91342, 6.3806],
+ "to": [9, 11.91342, 8.3806],
+ "rotation": {"angle": -22.5, "axis": "x", "origin": [8, 10, 11]},
+ "faces": {
+ "north": {"uv": [1, 0, 0, 0], "rotation": 180, "texture": "#1"},
+ "east": {"uv": [0, 0, 0, 1], "rotation": 90, "texture": "#1"},
+ "south": {"uv": [1, 0, 0, 0], "texture": "#1"},
+ "west": {"uv": [0, 0, 0, 1], "rotation": 270, "texture": "#1"},
+ "up": {"uv": [3, 9, 4, 10], "texture": "#1"},
+ "down": {"uv": [9, 2, 10, 3], "rotation": 180, "texture": "#1"}
+ }
+ },
+ {
+ "from": [5, 10, 5],
+ "to": [11, 10, 11],
+ "rotation": {"angle": 0, "axis": "x", "origin": [8, 10, 11]},
+ "faces": {
+ "north": {"uv": [0, 3, 0, 0], "rotation": 180, "texture": "#1"},
+ "east": {"uv": [0, 0, 0, 3], "rotation": 90, "texture": "#1"},
+ "south": {"uv": [0, 0, 0, 3], "texture": "#1"},
+ "west": {"uv": [0, 0, 0, 3], "rotation": 270, "texture": "#1"},
+ "up": {"uv": [9, 3, 6, 0], "texture": "#1"},
+ "down": {"uv": [6, 0, 9, 3], "rotation": 180, "texture": "#1"}
+ }
+ },
+ {
+ "from": [5, 0, 5],
+ "to": [11, 9, 11],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 5.5, 9]},
+ "faces": {
+ "north": {"uv": [0, 0, 3, 4.5], "texture": "#1"},
+ "east": {"uv": [6, 4.5, 3, 9], "texture": "#1"},
+ "south": {"uv": [0, 4.5, 3, 9], "texture": "#1"},
+ "west": {"uv": [3, 4.5, 6, 9], "texture": "#1"},
+ "up": {"uv": [3, 12, 0, 9], "texture": "#1"},
+ "down": {"uv": [6, 0, 9, 3], "texture": "#1"}
+ }
+ },
+ {
+ "from": [5, 9, 5],
+ "to": [11, 10, 11],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 13.5, 9]},
+ "faces": {
+ "north": {"uv": [9, 0, 12, 0.5], "texture": "#1"},
+ "east": {"uv": [9, 0.5, 12, 1], "texture": "#1"},
+ "south": {"uv": [9, 1, 12, 1.5], "texture": "#1"},
+ "west": {"uv": [9, 1.5, 12, 2], "texture": "#1"},
+ "up": {"uv": [9, 6, 6, 3], "texture": "#1"},
+ "down": {"uv": [9, 6, 6, 9], "texture": "#1"}
+ }
+ },
+ {
+ "name": "cube inverted",
+ "from": [11, 10, 11],
+ "to": [5, 9, 5],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 13.5, 9]},
+ "faces": {
+ "north": {"uv": [9, 1.5, 12, 1], "texture": "#1"},
+ "east": {"uv": [9, 2, 12, 1.5], "texture": "#1"},
+ "south": {"uv": [9, 0.5, 12, 0], "texture": "#1"},
+ "west": {"uv": [9, 1, 12, 0.5], "texture": "#1"},
+ "up": {"uv": [9, 9, 6, 6], "texture": "#1"},
+ "down": {"uv": [9, 6, 6, 3], "texture": "#1"}
+ }
+ }
+ ],
+ "gui_light": "front",
+ "display": {
+ "thirdperson_righthand": {
+ "rotation": [0, 90, 0],
+ "translation": [-1.25, 2.25, 2.25],
+ "scale": [0.55, 0.55, 0.55]
+ },
+ "thirdperson_lefthand": {
+ "rotation": [0, 90, 0],
+ "translation": [-1.25, 2.25, 2.25],
+ "scale": [0.55, 0.55, 0.55]
+ },
+ "firstperson_righthand": {
+ "rotation": [-155.67, 87.24, 146.71],
+ "translation": [-0.75, 4.75, 2.25],
+ "scale": [0.44883, 0.44883, 0.44883]
+ },
+ "firstperson_lefthand": {
+ "rotation": [-155.67, 87.24, 146.71],
+ "translation": [-0.75, 4.75, 2.25],
+ "scale": [0.44883, 0.44883, 0.44883]
+ },
+ "ground": {
+ "translation": [0, 2.5, 0],
+ "scale": [0.5, 0.5, 0.5]
+ },
+ "gui": {
+ "rotation": [-171.31, 28.48, -168.29],
+ "translation": [0.5, 3.25, 0],
+ "scale": [1.07695, 1.07695, 1.07695]
+ },
+ "head": {
+ "rotation": [0, -180, 0],
+ "translation": [0, 13, 0.25]
+ },
+ "fixed": {
+ "translation": [0, 4.75, 0]
+ },
+ "on_shelf": {
+ "rotation": [0, -180, 0]
+ }
+ },
+ "groups": [
+ {
+ "name": "group",
+ "origin": [8, 9, 6],
+ "scope": 0,
+ "color": 0,
+ "children": [0, 1]
+ },
+ 2,
+ {
+ "name": "group",
+ "origin": [7, 12.5, 9],
+ "scope": 0,
+ "color": 0,
+ "children": [3, 4]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/_sa_food_models/01_罐头食品/canned_evaporated_milk_open.json b/_sa_food_models/01_罐头食品/canned_evaporated_milk_open.json
new file mode 100644
index 0000000..7fdf925
--- /dev/null
+++ b/_sa_food_models/01_罐头食品/canned_evaporated_milk_open.json
@@ -0,0 +1,136 @@
+{
+ "format_version": "1.21.11",
+ "credit": "Made with Blockbench",
+ "texture_size": [32, 32],
+ "textures": {
+ "1": "sa_combat:item/canned_foods/canned_evaporated_milk",
+ "particle": "sa_combat:item/canned_foods/canned_evaporated_milk_p"
+ },
+ "elements": [
+ {
+ "from": [7, 8.08658, 13.6194],
+ "to": [9, 8.08658, 15.6194],
+ "rotation": {"angle": 22.5, "axis": "x", "origin": [8, 10, 11]},
+ "faces": {
+ "north": {"uv": [1, 0, 0, 0], "rotation": 180, "texture": "#1"},
+ "east": {"uv": [0, 0, 0, 1], "rotation": 270, "texture": "#1"},
+ "south": {"uv": [1, 0, 0, 0], "texture": "#1"},
+ "west": {"uv": [0, 0, 0, 1], "rotation": 90, "texture": "#1"},
+ "up": {"uv": [9, 2, 10, 3], "rotation": 180, "texture": "#1"},
+ "down": {"uv": [3, 9, 4, 10], "texture": "#1"}
+ }
+ },
+ {
+ "from": [5, 10, 11],
+ "to": [11, 10, 17],
+ "rotation": {"angle": 45, "axis": "x", "origin": [8, 10, 11]},
+ "faces": {
+ "north": {"uv": [0, 0, 0, 3], "rotation": 180, "texture": "#1"},
+ "east": {"uv": [0, 0, 0, 3], "rotation": 270, "texture": "#1"},
+ "south": {"uv": [0, 3, 0, 0], "texture": "#1"},
+ "west": {"uv": [0, 0, 0, 3], "rotation": 90, "texture": "#1"},
+ "up": {"uv": [6, 0, 9, 3], "rotation": 180, "texture": "#1"},
+ "down": {"uv": [9, 3, 6, 0], "texture": "#1"}
+ }
+ },
+ {
+ "from": [5, 0, 5],
+ "to": [11, 9, 11],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 5.5, 9]},
+ "faces": {
+ "north": {"uv": [0, 0, 3, 4.5], "texture": "#1"},
+ "east": {"uv": [6, 4.5, 3, 9], "texture": "#1"},
+ "south": {"uv": [0, 4.5, 3, 9], "texture": "#1"},
+ "west": {"uv": [3, 4.5, 6, 9], "texture": "#1"},
+ "up": {"uv": [3, 12, 0, 9], "texture": "#1"},
+ "down": {"uv": [6, 0, 9, 3], "texture": "#1"}
+ }
+ },
+ {
+ "from": [5, 9, 5],
+ "to": [11, 10, 11],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 13.5, 9]},
+ "faces": {
+ "north": {"uv": [9, 0, 12, 0.5], "texture": "#1"},
+ "east": {"uv": [9, 0.5, 12, 1], "texture": "#1"},
+ "south": {"uv": [9, 1, 12, 1.5], "texture": "#1"},
+ "west": {"uv": [9, 1.5, 12, 2], "texture": "#1"},
+ "up": {"uv": [9, 6, 6, 3], "texture": "#1"},
+ "down": {"uv": [9, 6, 6, 9], "texture": "#1"}
+ }
+ },
+ {
+ "name": "cube inverted",
+ "from": [11, 10, 11],
+ "to": [5, 9, 5],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 13.5, 9]},
+ "faces": {
+ "north": {"uv": [9, 1.5, 12, 1], "texture": "#1"},
+ "east": {"uv": [9, 2, 12, 1.5], "texture": "#1"},
+ "south": {"uv": [9, 0.5, 12, 0], "texture": "#1"},
+ "west": {"uv": [9, 1, 12, 0.5], "texture": "#1"},
+ "up": {"uv": [9, 9, 6, 6], "texture": "#1"},
+ "down": {"uv": [9, 6, 6, 3], "texture": "#1"}
+ }
+ }
+ ],
+ "gui_light": "front",
+ "display": {
+ "thirdperson_righthand": {
+ "rotation": [0, 90, 0],
+ "translation": [-1.25, 2.25, 2.25],
+ "scale": [0.55, 0.55, 0.55]
+ },
+ "thirdperson_lefthand": {
+ "rotation": [0, 90, 0],
+ "translation": [-1.25, 2.25, 2.25],
+ "scale": [0.55, 0.55, 0.55]
+ },
+ "firstperson_righthand": {
+ "rotation": [-155.67, 87.24, 146.71],
+ "translation": [-0.75, 4.75, 2.25],
+ "scale": [0.44883, 0.44883, 0.44883]
+ },
+ "firstperson_lefthand": {
+ "rotation": [-155.67, 87.24, 146.71],
+ "translation": [-0.75, 4.75, 2.25],
+ "scale": [0.44883, 0.44883, 0.44883]
+ },
+ "ground": {
+ "translation": [0, 2.5, 0],
+ "scale": [0.5, 0.5, 0.5]
+ },
+ "gui": {
+ "rotation": [-171.31, 28.48, -168.29],
+ "translation": [0.5, 3.25, 0],
+ "scale": [1.07695, 1.07695, 1.07695]
+ },
+ "head": {
+ "rotation": [0, -180, 0],
+ "translation": [0, 13, 0.25]
+ },
+ "fixed": {
+ "translation": [0, 4.75, 0]
+ },
+ "on_shelf": {
+ "rotation": [0, -180, 0]
+ }
+ },
+ "groups": [
+ {
+ "name": "group",
+ "origin": [8, 9, 6],
+ "scope": 0,
+ "color": 0,
+ "children": [0, 1]
+ },
+ 2,
+ {
+ "name": "group",
+ "origin": [7, 12.5, 9],
+ "scope": 0,
+ "color": 0,
+ "children": [3, 4]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/_sa_food_models/01_罐头食品/canned_fruit_beverage.json b/_sa_food_models/01_罐头食品/canned_fruit_beverage.json
new file mode 100644
index 0000000..6295262
--- /dev/null
+++ b/_sa_food_models/01_罐头食品/canned_fruit_beverage.json
@@ -0,0 +1,136 @@
+{
+ "format_version": "1.21.11",
+ "credit": "Made with Blockbench",
+ "texture_size": [32, 32],
+ "textures": {
+ "2": "sa_combat:item/canned_foods/fruit_beverage",
+ "particle": "sa_combat:item/canned_foods/fruit_beverage"
+ },
+ "elements": [
+ {
+ "from": [9.31492, 13.44415, 7],
+ "to": [11.31492, 13.44415, 9],
+ "rotation": {"angle": -22.5, "axis": "z", "origin": [3, 10, 8]},
+ "faces": {
+ "north": {"uv": [0, 0, 1, 0], "texture": "#2"},
+ "east": {"uv": [0, 0, 1, 0], "texture": "#2"},
+ "south": {"uv": [0, 0, 1, 0], "texture": "#2"},
+ "west": {"uv": [1, 0, 0, 0], "texture": "#2"},
+ "up": {"uv": [11, 3, 10, 2], "rotation": 90, "texture": "#2"},
+ "down": {"uv": [11, 3, 10, 4], "rotation": 270, "texture": "#2"}
+ }
+ },
+ {
+ "from": [3, 10, 5],
+ "to": [13, 10, 11],
+ "rotation": {"angle": 0, "axis": "x", "origin": [3, 10, 8]},
+ "faces": {
+ "north": {"uv": [0, 0, 5, 0], "texture": "#2"},
+ "east": {"uv": [0, 0, 5, 0], "texture": "#2"},
+ "south": {"uv": [0, 0, 5, 0], "texture": "#2"},
+ "west": {"uv": [0, 0, 5, 0], "texture": "#2"},
+ "up": {"uv": [10, 3, 5, 0], "texture": "#2"},
+ "down": {"uv": [10, 0, 5, 3], "texture": "#2"}
+ }
+ },
+ {
+ "from": [3, 0, 5],
+ "to": [13, 9, 11],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 5.5, 9]},
+ "faces": {
+ "north": {"uv": [0, 0, 5, 4.5], "texture": "#2"},
+ "east": {"uv": [5, 9, 8, 13.5], "texture": "#2"},
+ "south": {"uv": [0, 4.5, 5, 9], "texture": "#2"},
+ "west": {"uv": [8, 9, 5, 13.5], "texture": "#2"},
+ "up": {"uv": [5, 12, 0, 9], "texture": "#2"},
+ "down": {"uv": [10, 0, 5, 3], "texture": "#2"}
+ }
+ },
+ {
+ "from": [3, 9, 5],
+ "to": [13, 10, 11],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 13.5, 9]},
+ "faces": {
+ "north": {"uv": [10, 0, 15, 0.5], "texture": "#2"},
+ "east": {"uv": [10, 1, 13, 1.5], "texture": "#2"},
+ "south": {"uv": [10, 0.5, 15, 1], "texture": "#2"},
+ "west": {"uv": [10, 1.5, 13, 2], "texture": "#2"},
+ "up": {"uv": [10, 6, 5, 3], "texture": "#2"},
+ "down": {"uv": [10, 6, 5, 9], "texture": "#2"}
+ }
+ },
+ {
+ "name": "cube inverted",
+ "from": [13, 10, 11],
+ "to": [3, 9, 5],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 13.5, 9]},
+ "faces": {
+ "north": {"uv": [10, 1, 15, 0.5], "texture": "#2"},
+ "east": {"uv": [10, 2, 13, 1.5], "texture": "#2"},
+ "south": {"uv": [10, 0.5, 15, 0], "texture": "#2"},
+ "west": {"uv": [10, 1.5, 13, 1], "texture": "#2"},
+ "up": {"uv": [5, 6, 10, 9], "texture": "#2"},
+ "down": {"uv": [5, 6, 10, 3], "texture": "#2"}
+ }
+ }
+ ],
+ "gui_light": "front",
+ "display": {
+ "thirdperson_righthand": {
+ "rotation": [0, 90, 0],
+ "translation": [-1.25, 2.25, 2.25],
+ "scale": [0.55, 0.55, 0.55]
+ },
+ "thirdperson_lefthand": {
+ "rotation": [0, 90, 0],
+ "translation": [-1.25, 2.25, 2.25],
+ "scale": [0.55, 0.55, 0.55]
+ },
+ "firstperson_righthand": {
+ "rotation": [-155.67, 87.24, 146.71],
+ "translation": [-0.75, 4, 2.25],
+ "scale": [0.44883, 0.44883, 0.44883]
+ },
+ "firstperson_lefthand": {
+ "rotation": [-155.67, 87.24, 146.71],
+ "translation": [-0.75, 4, 2.25],
+ "scale": [0.44883, 0.44883, 0.44883]
+ },
+ "ground": {
+ "translation": [0, 2.5, 0],
+ "scale": [0.5, 0.5, 0.5]
+ },
+ "gui": {
+ "rotation": [-171.31, 28.48, -168.29],
+ "translation": [0.5, 3.25, 0],
+ "scale": [1.07695, 1.07695, 1.07695]
+ },
+ "head": {
+ "rotation": [0, -180, 0],
+ "translation": [0, 13, 0.25]
+ },
+ "fixed": {
+ "translation": [0, 4.75, 0]
+ },
+ "on_shelf": {
+ "rotation": [0, -180, 0]
+ }
+ },
+ "groups": [
+ {
+ "name": "group",
+ "origin": [8, 9, 6],
+ "scope": 0,
+ "color": 0,
+ "children": [0, 1]
+ },
+ 2,
+ {
+ "name": "group",
+ "origin": [7, 12.5, 9],
+ "scope": 0,
+ "color": 0,
+ "children": [3, 4]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/_sa_food_models/01_罐头食品/canned_fruit_beverage_open.json b/_sa_food_models/01_罐头食品/canned_fruit_beverage_open.json
new file mode 100644
index 0000000..cc7137f
--- /dev/null
+++ b/_sa_food_models/01_罐头食品/canned_fruit_beverage_open.json
@@ -0,0 +1,136 @@
+{
+ "format_version": "1.21.11",
+ "credit": "Made with Blockbench",
+ "texture_size": [32, 32],
+ "textures": {
+ "2": "sa_combat:item/canned_foods/fruit_beverage",
+ "particle": "sa_combat:item/canned_foods/fruit_beverage_open"
+ },
+ "elements": [
+ {
+ "from": [6.44415, 1.68508, 7],
+ "to": [6.44415, 3.68508, 9],
+ "rotation": {"angle": -45, "axis": "z", "origin": [3, 10, 8]},
+ "faces": {
+ "north": {"uv": [0, 0, 1, 0], "rotation": 270, "texture": "#2"},
+ "east": {"uv": [11, 3, 10, 2], "rotation": 180, "texture": "#2"},
+ "south": {"uv": [0, 0, 1, 0], "rotation": 90, "texture": "#2"},
+ "west": {"uv": [11, 3, 10, 4], "texture": "#2"},
+ "up": {"uv": [1, 0, 0, 0], "rotation": 90, "texture": "#2"},
+ "down": {"uv": [0, 0, 1, 0], "rotation": 90, "texture": "#2"}
+ }
+ },
+ {
+ "from": [3, 0, 5],
+ "to": [3, 10, 11],
+ "rotation": {"angle": -22.5, "axis": "z", "origin": [3, 10, 8]},
+ "faces": {
+ "north": {"uv": [0, 0, 5, 0], "rotation": 270, "texture": "#2"},
+ "east": {"uv": [10, 3, 5, 0], "rotation": 90, "texture": "#2"},
+ "south": {"uv": [0, 0, 5, 0], "rotation": 90, "texture": "#2"},
+ "west": {"uv": [10, 0, 5, 3], "rotation": 90, "texture": "#2"},
+ "up": {"uv": [0, 0, 5, 0], "rotation": 90, "texture": "#2"},
+ "down": {"uv": [0, 0, 5, 0], "rotation": 90, "texture": "#2"}
+ }
+ },
+ {
+ "from": [3, 0, 5],
+ "to": [13, 9, 11],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 5.5, 9]},
+ "faces": {
+ "north": {"uv": [0, 0, 5, 4.5], "texture": "#2"},
+ "east": {"uv": [5, 9, 8, 13.5], "texture": "#2"},
+ "south": {"uv": [0, 4.5, 5, 9], "texture": "#2"},
+ "west": {"uv": [8, 9, 5, 13.5], "texture": "#2"},
+ "up": {"uv": [5, 12, 0, 9], "texture": "#2"},
+ "down": {"uv": [10, 0, 5, 3], "texture": "#2"}
+ }
+ },
+ {
+ "from": [3, 9, 5],
+ "to": [13, 10, 11],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 13.5, 9]},
+ "faces": {
+ "north": {"uv": [10, 0, 15, 0.5], "texture": "#2"},
+ "east": {"uv": [10, 1, 13, 1.5], "texture": "#2"},
+ "south": {"uv": [10, 0.5, 15, 1], "texture": "#2"},
+ "west": {"uv": [10, 1.5, 13, 2], "texture": "#2"},
+ "up": {"uv": [10, 6, 5, 3], "texture": "#2"},
+ "down": {"uv": [10, 6, 5, 9], "texture": "#2"}
+ }
+ },
+ {
+ "name": "cube inverted",
+ "from": [13, 10, 11],
+ "to": [3, 9, 5],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 13.5, 9]},
+ "faces": {
+ "north": {"uv": [10, 1, 15, 0.5], "texture": "#2"},
+ "east": {"uv": [10, 2, 13, 1.5], "texture": "#2"},
+ "south": {"uv": [10, 0.5, 15, 0], "texture": "#2"},
+ "west": {"uv": [10, 1.5, 13, 1], "texture": "#2"},
+ "up": {"uv": [5, 6, 10, 9], "texture": "#2"},
+ "down": {"uv": [5, 6, 10, 3], "texture": "#2"}
+ }
+ }
+ ],
+ "gui_light": "front",
+ "display": {
+ "thirdperson_righthand": {
+ "rotation": [0, 90, 0],
+ "translation": [-1.25, 2.25, 2.25],
+ "scale": [0.55, 0.55, 0.55]
+ },
+ "thirdperson_lefthand": {
+ "rotation": [0, 90, 0],
+ "translation": [-1.25, 2.25, 2.25],
+ "scale": [0.55, 0.55, 0.55]
+ },
+ "firstperson_righthand": {
+ "rotation": [-155.67, 87.24, 146.71],
+ "translation": [-0.75, 4, 2.25],
+ "scale": [0.44883, 0.44883, 0.44883]
+ },
+ "firstperson_lefthand": {
+ "rotation": [-155.67, 87.24, 146.71],
+ "translation": [-0.75, 4, 2.25],
+ "scale": [0.44883, 0.44883, 0.44883]
+ },
+ "ground": {
+ "translation": [0, 2.5, 0],
+ "scale": [0.5, 0.5, 0.5]
+ },
+ "gui": {
+ "rotation": [-171.31, 28.48, -168.29],
+ "translation": [0.5, 3.25, 0],
+ "scale": [1.07695, 1.07695, 1.07695]
+ },
+ "head": {
+ "rotation": [0, -180, 0],
+ "translation": [0, 13, 0.25]
+ },
+ "fixed": {
+ "translation": [0, 4.75, 0]
+ },
+ "on_shelf": {
+ "rotation": [0, -180, 0]
+ }
+ },
+ "groups": [
+ {
+ "name": "group",
+ "origin": [8, 9, 6],
+ "scope": 0,
+ "color": 0,
+ "children": [0, 1]
+ },
+ 2,
+ {
+ "name": "group",
+ "origin": [7, 12.5, 9],
+ "scope": 0,
+ "color": 0,
+ "children": [3, 4]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/_sa_food_models/01_罐头食品/canned_fruit_cocktail.json b/_sa_food_models/01_罐头食品/canned_fruit_cocktail.json
new file mode 100644
index 0000000..d45ab68
--- /dev/null
+++ b/_sa_food_models/01_罐头食品/canned_fruit_cocktail.json
@@ -0,0 +1,135 @@
+{
+ "format_version": "1.21.11",
+ "credit": "Made with Blockbench",
+ "texture_size": [32, 32],
+ "textures": {
+ "1": "sa_combat:item/canned_foods/canned_fruit_cocktail"
+ },
+ "elements": [
+ {
+ "from": [7, 11.91342, 6.3806],
+ "to": [9, 11.91342, 8.3806],
+ "rotation": {"angle": -22.5, "axis": "x", "origin": [8, 10, 11]},
+ "faces": {
+ "north": {"uv": [1, 0, 0, 0], "rotation": 180, "texture": "#1"},
+ "east": {"uv": [0, 0, 0, 1], "rotation": 90, "texture": "#1"},
+ "south": {"uv": [1, 0, 0, 0], "texture": "#1"},
+ "west": {"uv": [0, 0, 0, 1], "rotation": 270, "texture": "#1"},
+ "up": {"uv": [3, 9, 4, 10], "texture": "#1"},
+ "down": {"uv": [9, 2, 10, 3], "rotation": 180, "texture": "#1"}
+ }
+ },
+ {
+ "from": [5, 10, 5],
+ "to": [11, 10, 11],
+ "rotation": {"angle": 0, "axis": "x", "origin": [8, 10, 11]},
+ "faces": {
+ "north": {"uv": [0, 3, 0, 0], "rotation": 180, "texture": "#1"},
+ "east": {"uv": [0, 0, 0, 3], "rotation": 90, "texture": "#1"},
+ "south": {"uv": [0, 0, 0, 3], "texture": "#1"},
+ "west": {"uv": [0, 0, 0, 3], "rotation": 270, "texture": "#1"},
+ "up": {"uv": [9, 3, 6, 0], "texture": "#1"},
+ "down": {"uv": [6, 0, 9, 3], "rotation": 180, "texture": "#1"}
+ }
+ },
+ {
+ "from": [5, 0, 5],
+ "to": [11, 9, 11],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 5.5, 9]},
+ "faces": {
+ "north": {"uv": [0, 0, 3, 4.5], "texture": "#1"},
+ "east": {"uv": [6, 4.5, 3, 9], "texture": "#1"},
+ "south": {"uv": [0, 4.5, 3, 9], "texture": "#1"},
+ "west": {"uv": [3, 4.5, 6, 9], "texture": "#1"},
+ "up": {"uv": [3, 12, 0, 9], "texture": "#1"},
+ "down": {"uv": [6, 0, 9, 3], "texture": "#1"}
+ }
+ },
+ {
+ "from": [5, 9, 5],
+ "to": [11, 10, 11],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 13.5, 9]},
+ "faces": {
+ "north": {"uv": [9, 0, 12, 0.5], "texture": "#1"},
+ "east": {"uv": [9, 0.5, 12, 1], "texture": "#1"},
+ "south": {"uv": [9, 1, 12, 1.5], "texture": "#1"},
+ "west": {"uv": [9, 1.5, 12, 2], "texture": "#1"},
+ "up": {"uv": [9, 6, 6, 3], "texture": "#1"},
+ "down": {"uv": [9, 6, 6, 9], "texture": "#1"}
+ }
+ },
+ {
+ "name": "cube inverted",
+ "from": [11, 10, 11],
+ "to": [5, 9, 5],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 13.5, 9]},
+ "faces": {
+ "north": {"uv": [9, 1.5, 12, 1], "texture": "#1"},
+ "east": {"uv": [9, 2, 12, 1.5], "texture": "#1"},
+ "south": {"uv": [9, 0.5, 12, 0], "texture": "#1"},
+ "west": {"uv": [9, 1, 12, 0.5], "texture": "#1"},
+ "up": {"uv": [9, 9, 6, 6], "texture": "#1"},
+ "down": {"uv": [9, 6, 6, 3], "texture": "#1"}
+ }
+ }
+ ],
+ "gui_light": "front",
+ "display": {
+ "thirdperson_righthand": {
+ "rotation": [0, 90, 0],
+ "translation": [-1.25, 2.25, 2.25],
+ "scale": [0.55, 0.55, 0.55]
+ },
+ "thirdperson_lefthand": {
+ "rotation": [0, 90, 0],
+ "translation": [-1.25, 2.25, 2.25],
+ "scale": [0.55, 0.55, 0.55]
+ },
+ "firstperson_righthand": {
+ "rotation": [-155.67, 87.24, 146.71],
+ "translation": [-0.75, 4.75, 2.25],
+ "scale": [0.44883, 0.44883, 0.44883]
+ },
+ "firstperson_lefthand": {
+ "rotation": [-155.67, 87.24, 146.71],
+ "translation": [-0.75, 4.75, 2.25],
+ "scale": [0.44883, 0.44883, 0.44883]
+ },
+ "ground": {
+ "translation": [0, 2.5, 0],
+ "scale": [0.5, 0.5, 0.5]
+ },
+ "gui": {
+ "rotation": [-171.31, 28.48, -168.29],
+ "translation": [0.5, 3.25, 0],
+ "scale": [1.07695, 1.07695, 1.07695]
+ },
+ "head": {
+ "rotation": [0, -180, 0],
+ "translation": [0, 13, 0.25]
+ },
+ "fixed": {
+ "translation": [0, 4.75, 0]
+ },
+ "on_shelf": {
+ "rotation": [0, -180, 0]
+ }
+ },
+ "groups": [
+ {
+ "name": "group",
+ "origin": [8, 9, 6],
+ "scope": 0,
+ "color": 0,
+ "children": [0, 1]
+ },
+ 2,
+ {
+ "name": "group",
+ "origin": [7, 12.5, 9],
+ "scope": 0,
+ "color": 0,
+ "children": [3, 4]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/_sa_food_models/01_罐头食品/canned_fruit_cocktail_open.json b/_sa_food_models/01_罐头食品/canned_fruit_cocktail_open.json
new file mode 100644
index 0000000..375587f
--- /dev/null
+++ b/_sa_food_models/01_罐头食品/canned_fruit_cocktail_open.json
@@ -0,0 +1,136 @@
+{
+ "format_version": "1.21.11",
+ "credit": "Made with Blockbench",
+ "texture_size": [32, 32],
+ "textures": {
+ "1": "sa_combat:item/canned_foods/canned_fruit_cocktail",
+ "particle": "sa_combat:item/canned_foods/canned_fruit_cocktail_p"
+ },
+ "elements": [
+ {
+ "from": [7, 8.08658, 13.6194],
+ "to": [9, 8.08658, 15.6194],
+ "rotation": {"angle": 22.5, "axis": "x", "origin": [8, 10, 11]},
+ "faces": {
+ "north": {"uv": [1, 0, 0, 0], "rotation": 180, "texture": "#1"},
+ "east": {"uv": [0, 0, 0, 1], "rotation": 270, "texture": "#1"},
+ "south": {"uv": [1, 0, 0, 0], "texture": "#1"},
+ "west": {"uv": [0, 0, 0, 1], "rotation": 90, "texture": "#1"},
+ "up": {"uv": [9, 2, 10, 3], "rotation": 180, "texture": "#1"},
+ "down": {"uv": [3, 9, 4, 10], "texture": "#1"}
+ }
+ },
+ {
+ "from": [5, 10, 11],
+ "to": [11, 10, 17],
+ "rotation": {"angle": 45, "axis": "x", "origin": [8, 10, 11]},
+ "faces": {
+ "north": {"uv": [0, 0, 0, 3], "rotation": 180, "texture": "#1"},
+ "east": {"uv": [0, 0, 0, 3], "rotation": 270, "texture": "#1"},
+ "south": {"uv": [0, 3, 0, 0], "texture": "#1"},
+ "west": {"uv": [0, 0, 0, 3], "rotation": 90, "texture": "#1"},
+ "up": {"uv": [6, 0, 9, 3], "rotation": 180, "texture": "#1"},
+ "down": {"uv": [9, 3, 6, 0], "texture": "#1"}
+ }
+ },
+ {
+ "from": [5, 0, 5],
+ "to": [11, 9, 11],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 5.5, 9]},
+ "faces": {
+ "north": {"uv": [0, 0, 3, 4.5], "texture": "#1"},
+ "east": {"uv": [6, 4.5, 3, 9], "texture": "#1"},
+ "south": {"uv": [0, 4.5, 3, 9], "texture": "#1"},
+ "west": {"uv": [3, 4.5, 6, 9], "texture": "#1"},
+ "up": {"uv": [3, 12, 0, 9], "texture": "#1"},
+ "down": {"uv": [6, 0, 9, 3], "texture": "#1"}
+ }
+ },
+ {
+ "from": [5, 9, 5],
+ "to": [11, 10, 11],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 13.5, 9]},
+ "faces": {
+ "north": {"uv": [9, 0, 12, 0.5], "texture": "#1"},
+ "east": {"uv": [9, 0.5, 12, 1], "texture": "#1"},
+ "south": {"uv": [9, 1, 12, 1.5], "texture": "#1"},
+ "west": {"uv": [9, 1.5, 12, 2], "texture": "#1"},
+ "up": {"uv": [9, 6, 6, 3], "texture": "#1"},
+ "down": {"uv": [9, 6, 6, 9], "texture": "#1"}
+ }
+ },
+ {
+ "name": "cube inverted",
+ "from": [11, 10, 11],
+ "to": [5, 9, 5],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 13.5, 9]},
+ "faces": {
+ "north": {"uv": [9, 1.5, 12, 1], "texture": "#1"},
+ "east": {"uv": [9, 2, 12, 1.5], "texture": "#1"},
+ "south": {"uv": [9, 0.5, 12, 0], "texture": "#1"},
+ "west": {"uv": [9, 1, 12, 0.5], "texture": "#1"},
+ "up": {"uv": [9, 9, 6, 6], "texture": "#1"},
+ "down": {"uv": [9, 6, 6, 3], "texture": "#1"}
+ }
+ }
+ ],
+ "gui_light": "front",
+ "display": {
+ "thirdperson_righthand": {
+ "rotation": [0, 90, 0],
+ "translation": [-1.25, 2.25, 2.25],
+ "scale": [0.55, 0.55, 0.55]
+ },
+ "thirdperson_lefthand": {
+ "rotation": [0, 90, 0],
+ "translation": [-1.25, 2.25, 2.25],
+ "scale": [0.55, 0.55, 0.55]
+ },
+ "firstperson_righthand": {
+ "rotation": [-155.67, 87.24, 146.71],
+ "translation": [-0.75, 4.75, 2.25],
+ "scale": [0.44883, 0.44883, 0.44883]
+ },
+ "firstperson_lefthand": {
+ "rotation": [-155.67, 87.24, 146.71],
+ "translation": [-0.75, 4.75, 2.25],
+ "scale": [0.44883, 0.44883, 0.44883]
+ },
+ "ground": {
+ "translation": [0, 2.5, 0],
+ "scale": [0.5, 0.5, 0.5]
+ },
+ "gui": {
+ "rotation": [-171.31, 28.48, -168.29],
+ "translation": [0.5, 3.25, 0],
+ "scale": [1.07695, 1.07695, 1.07695]
+ },
+ "head": {
+ "rotation": [0, -180, 0],
+ "translation": [0, 13, 0.25]
+ },
+ "fixed": {
+ "translation": [0, 4.75, 0]
+ },
+ "on_shelf": {
+ "rotation": [0, -180, 0]
+ }
+ },
+ "groups": [
+ {
+ "name": "group",
+ "origin": [8, 9, 6],
+ "scope": 0,
+ "color": 0,
+ "children": [0, 1]
+ },
+ 2,
+ {
+ "name": "group",
+ "origin": [7, 12.5, 9],
+ "scope": 0,
+ "color": 0,
+ "children": [3, 4]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/_sa_food_models/01_罐头食品/canned_mushroom_soup.json b/_sa_food_models/01_罐头食品/canned_mushroom_soup.json
new file mode 100644
index 0000000..b9294cd
--- /dev/null
+++ b/_sa_food_models/01_罐头食品/canned_mushroom_soup.json
@@ -0,0 +1,135 @@
+{
+ "format_version": "1.21.11",
+ "credit": "Made with Blockbench",
+ "texture_size": [32, 32],
+ "textures": {
+ "1": "sa_combat:item/canned_foods/canned_mushroom_soup"
+ },
+ "elements": [
+ {
+ "from": [7, 11.91342, 6.3806],
+ "to": [9, 11.91342, 8.3806],
+ "rotation": {"angle": -22.5, "axis": "x", "origin": [8, 10, 11]},
+ "faces": {
+ "north": {"uv": [1, 0, 0, 0], "rotation": 180, "texture": "#1"},
+ "east": {"uv": [0, 0, 0, 1], "rotation": 90, "texture": "#1"},
+ "south": {"uv": [1, 0, 0, 0], "texture": "#1"},
+ "west": {"uv": [0, 0, 0, 1], "rotation": 270, "texture": "#1"},
+ "up": {"uv": [3, 9, 4, 10], "texture": "#1"},
+ "down": {"uv": [9, 2, 10, 3], "rotation": 180, "texture": "#1"}
+ }
+ },
+ {
+ "from": [5, 10, 5],
+ "to": [11, 10, 11],
+ "rotation": {"angle": 0, "axis": "x", "origin": [8, 10, 11]},
+ "faces": {
+ "north": {"uv": [0, 3, 0, 0], "rotation": 180, "texture": "#1"},
+ "east": {"uv": [0, 0, 0, 3], "rotation": 90, "texture": "#1"},
+ "south": {"uv": [0, 0, 0, 3], "texture": "#1"},
+ "west": {"uv": [0, 0, 0, 3], "rotation": 270, "texture": "#1"},
+ "up": {"uv": [9, 3, 6, 0], "texture": "#1"},
+ "down": {"uv": [6, 0, 9, 3], "rotation": 180, "texture": "#1"}
+ }
+ },
+ {
+ "from": [5, 0, 5],
+ "to": [11, 9, 11],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 5.5, 9]},
+ "faces": {
+ "north": {"uv": [0, 0, 3, 4.5], "texture": "#1"},
+ "east": {"uv": [6, 4.5, 3, 9], "texture": "#1"},
+ "south": {"uv": [0, 4.5, 3, 9], "texture": "#1"},
+ "west": {"uv": [3, 4.5, 6, 9], "texture": "#1"},
+ "up": {"uv": [3, 12, 0, 9], "texture": "#1"},
+ "down": {"uv": [6, 0, 9, 3], "texture": "#1"}
+ }
+ },
+ {
+ "from": [5, 9, 5],
+ "to": [11, 10, 11],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 13.5, 9]},
+ "faces": {
+ "north": {"uv": [9, 0, 12, 0.5], "texture": "#1"},
+ "east": {"uv": [9, 0.5, 12, 1], "texture": "#1"},
+ "south": {"uv": [9, 1, 12, 1.5], "texture": "#1"},
+ "west": {"uv": [9, 1.5, 12, 2], "texture": "#1"},
+ "up": {"uv": [9, 6, 6, 3], "texture": "#1"},
+ "down": {"uv": [9, 6, 6, 9], "texture": "#1"}
+ }
+ },
+ {
+ "name": "cube inverted",
+ "from": [11, 10, 11],
+ "to": [5, 9, 5],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 13.5, 9]},
+ "faces": {
+ "north": {"uv": [9, 1.5, 12, 1], "texture": "#1"},
+ "east": {"uv": [9, 2, 12, 1.5], "texture": "#1"},
+ "south": {"uv": [9, 0.5, 12, 0], "texture": "#1"},
+ "west": {"uv": [9, 1, 12, 0.5], "texture": "#1"},
+ "up": {"uv": [9, 9, 6, 6], "texture": "#1"},
+ "down": {"uv": [9, 6, 6, 3], "texture": "#1"}
+ }
+ }
+ ],
+ "gui_light": "front",
+ "display": {
+ "thirdperson_righthand": {
+ "rotation": [0, 90, 0],
+ "translation": [-1.25, 2.25, 2.25],
+ "scale": [0.55, 0.55, 0.55]
+ },
+ "thirdperson_lefthand": {
+ "rotation": [0, 90, 0],
+ "translation": [-1.25, 2.25, 2.25],
+ "scale": [0.55, 0.55, 0.55]
+ },
+ "firstperson_righthand": {
+ "rotation": [-155.67, 87.24, 146.71],
+ "translation": [-0.75, 4.75, 2.25],
+ "scale": [0.44883, 0.44883, 0.44883]
+ },
+ "firstperson_lefthand": {
+ "rotation": [-155.67, 87.24, 146.71],
+ "translation": [-0.75, 4.75, 2.25],
+ "scale": [0.44883, 0.44883, 0.44883]
+ },
+ "ground": {
+ "translation": [0, 2.5, 0],
+ "scale": [0.5, 0.5, 0.5]
+ },
+ "gui": {
+ "rotation": [-171.31, 28.48, -168.29],
+ "translation": [0.5, 3.25, 0],
+ "scale": [1.07695, 1.07695, 1.07695]
+ },
+ "head": {
+ "rotation": [0, -180, 0],
+ "translation": [0, 13, 0.25]
+ },
+ "fixed": {
+ "translation": [0, 4.75, 0]
+ },
+ "on_shelf": {
+ "rotation": [0, -180, 0]
+ }
+ },
+ "groups": [
+ {
+ "name": "group",
+ "origin": [8, 9, 6],
+ "scope": 0,
+ "color": 0,
+ "children": [0, 1]
+ },
+ 2,
+ {
+ "name": "group",
+ "origin": [7, 12.5, 9],
+ "scope": 0,
+ "color": 0,
+ "children": [3, 4]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/_sa_food_models/01_罐头食品/canned_mushroom_soup_open.json b/_sa_food_models/01_罐头食品/canned_mushroom_soup_open.json
new file mode 100644
index 0000000..72c835a
--- /dev/null
+++ b/_sa_food_models/01_罐头食品/canned_mushroom_soup_open.json
@@ -0,0 +1,136 @@
+{
+ "format_version": "1.21.11",
+ "credit": "Made with Blockbench",
+ "texture_size": [32, 32],
+ "textures": {
+ "1": "sa_combat:item/canned_foods/canned_mushroom_soup",
+ "particle": "sa_combat:item/canned_foods/canned_mushroom_soup_p"
+ },
+ "elements": [
+ {
+ "from": [7, 8.08658, 13.6194],
+ "to": [9, 8.08658, 15.6194],
+ "rotation": {"angle": 22.5, "axis": "x", "origin": [8, 10, 11]},
+ "faces": {
+ "north": {"uv": [1, 0, 0, 0], "rotation": 180, "texture": "#1"},
+ "east": {"uv": [0, 0, 0, 1], "rotation": 270, "texture": "#1"},
+ "south": {"uv": [1, 0, 0, 0], "texture": "#1"},
+ "west": {"uv": [0, 0, 0, 1], "rotation": 90, "texture": "#1"},
+ "up": {"uv": [9, 2, 10, 3], "rotation": 180, "texture": "#1"},
+ "down": {"uv": [3, 9, 4, 10], "texture": "#1"}
+ }
+ },
+ {
+ "from": [5, 10, 11],
+ "to": [11, 10, 17],
+ "rotation": {"angle": 45, "axis": "x", "origin": [8, 10, 11]},
+ "faces": {
+ "north": {"uv": [0, 0, 0, 3], "rotation": 180, "texture": "#1"},
+ "east": {"uv": [0, 0, 0, 3], "rotation": 270, "texture": "#1"},
+ "south": {"uv": [0, 3, 0, 0], "texture": "#1"},
+ "west": {"uv": [0, 0, 0, 3], "rotation": 90, "texture": "#1"},
+ "up": {"uv": [6, 0, 9, 3], "rotation": 180, "texture": "#1"},
+ "down": {"uv": [9, 3, 6, 0], "texture": "#1"}
+ }
+ },
+ {
+ "from": [5, 0, 5],
+ "to": [11, 9, 11],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 5.5, 9]},
+ "faces": {
+ "north": {"uv": [0, 0, 3, 4.5], "texture": "#1"},
+ "east": {"uv": [6, 4.5, 3, 9], "texture": "#1"},
+ "south": {"uv": [0, 4.5, 3, 9], "texture": "#1"},
+ "west": {"uv": [3, 4.5, 6, 9], "texture": "#1"},
+ "up": {"uv": [3, 12, 0, 9], "texture": "#1"},
+ "down": {"uv": [6, 0, 9, 3], "texture": "#1"}
+ }
+ },
+ {
+ "from": [5, 9, 5],
+ "to": [11, 10, 11],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 13.5, 9]},
+ "faces": {
+ "north": {"uv": [9, 0, 12, 0.5], "texture": "#1"},
+ "east": {"uv": [9, 0.5, 12, 1], "texture": "#1"},
+ "south": {"uv": [9, 1, 12, 1.5], "texture": "#1"},
+ "west": {"uv": [9, 1.5, 12, 2], "texture": "#1"},
+ "up": {"uv": [9, 6, 6, 3], "texture": "#1"},
+ "down": {"uv": [9, 6, 6, 9], "texture": "#1"}
+ }
+ },
+ {
+ "name": "cube inverted",
+ "from": [11, 10, 11],
+ "to": [5, 9, 5],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 13.5, 9]},
+ "faces": {
+ "north": {"uv": [9, 1.5, 12, 1], "texture": "#1"},
+ "east": {"uv": [9, 2, 12, 1.5], "texture": "#1"},
+ "south": {"uv": [9, 0.5, 12, 0], "texture": "#1"},
+ "west": {"uv": [9, 1, 12, 0.5], "texture": "#1"},
+ "up": {"uv": [9, 9, 6, 6], "texture": "#1"},
+ "down": {"uv": [9, 6, 6, 3], "texture": "#1"}
+ }
+ }
+ ],
+ "gui_light": "front",
+ "display": {
+ "thirdperson_righthand": {
+ "rotation": [0, 90, 0],
+ "translation": [-1.25, 2.25, 2.25],
+ "scale": [0.55, 0.55, 0.55]
+ },
+ "thirdperson_lefthand": {
+ "rotation": [0, 90, 0],
+ "translation": [-1.25, 2.25, 2.25],
+ "scale": [0.55, 0.55, 0.55]
+ },
+ "firstperson_righthand": {
+ "rotation": [-155.67, 87.24, 146.71],
+ "translation": [-0.75, 4.75, 2.25],
+ "scale": [0.44883, 0.44883, 0.44883]
+ },
+ "firstperson_lefthand": {
+ "rotation": [-155.67, 87.24, 146.71],
+ "translation": [-0.75, 4.75, 2.25],
+ "scale": [0.44883, 0.44883, 0.44883]
+ },
+ "ground": {
+ "translation": [0, 2.5, 0],
+ "scale": [0.5, 0.5, 0.5]
+ },
+ "gui": {
+ "rotation": [-171.31, 28.48, -168.29],
+ "translation": [0.5, 3.25, 0],
+ "scale": [1.07695, 1.07695, 1.07695]
+ },
+ "head": {
+ "rotation": [0, -180, 0],
+ "translation": [0, 13, 0.25]
+ },
+ "fixed": {
+ "translation": [0, 4.75, 0]
+ },
+ "on_shelf": {
+ "rotation": [0, -180, 0]
+ }
+ },
+ "groups": [
+ {
+ "name": "group",
+ "origin": [8, 9, 6],
+ "scope": 0,
+ "color": 0,
+ "children": [0, 1]
+ },
+ 2,
+ {
+ "name": "group",
+ "origin": [7, 12.5, 9],
+ "scope": 0,
+ "color": 0,
+ "children": [3, 4]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/_sa_food_models/01_罐头食品/canned_peaches.json b/_sa_food_models/01_罐头食品/canned_peaches.json
new file mode 100644
index 0000000..b9294cd
--- /dev/null
+++ b/_sa_food_models/01_罐头食品/canned_peaches.json
@@ -0,0 +1,135 @@
+{
+ "format_version": "1.21.11",
+ "credit": "Made with Blockbench",
+ "texture_size": [32, 32],
+ "textures": {
+ "1": "sa_combat:item/canned_foods/canned_mushroom_soup"
+ },
+ "elements": [
+ {
+ "from": [7, 11.91342, 6.3806],
+ "to": [9, 11.91342, 8.3806],
+ "rotation": {"angle": -22.5, "axis": "x", "origin": [8, 10, 11]},
+ "faces": {
+ "north": {"uv": [1, 0, 0, 0], "rotation": 180, "texture": "#1"},
+ "east": {"uv": [0, 0, 0, 1], "rotation": 90, "texture": "#1"},
+ "south": {"uv": [1, 0, 0, 0], "texture": "#1"},
+ "west": {"uv": [0, 0, 0, 1], "rotation": 270, "texture": "#1"},
+ "up": {"uv": [3, 9, 4, 10], "texture": "#1"},
+ "down": {"uv": [9, 2, 10, 3], "rotation": 180, "texture": "#1"}
+ }
+ },
+ {
+ "from": [5, 10, 5],
+ "to": [11, 10, 11],
+ "rotation": {"angle": 0, "axis": "x", "origin": [8, 10, 11]},
+ "faces": {
+ "north": {"uv": [0, 3, 0, 0], "rotation": 180, "texture": "#1"},
+ "east": {"uv": [0, 0, 0, 3], "rotation": 90, "texture": "#1"},
+ "south": {"uv": [0, 0, 0, 3], "texture": "#1"},
+ "west": {"uv": [0, 0, 0, 3], "rotation": 270, "texture": "#1"},
+ "up": {"uv": [9, 3, 6, 0], "texture": "#1"},
+ "down": {"uv": [6, 0, 9, 3], "rotation": 180, "texture": "#1"}
+ }
+ },
+ {
+ "from": [5, 0, 5],
+ "to": [11, 9, 11],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 5.5, 9]},
+ "faces": {
+ "north": {"uv": [0, 0, 3, 4.5], "texture": "#1"},
+ "east": {"uv": [6, 4.5, 3, 9], "texture": "#1"},
+ "south": {"uv": [0, 4.5, 3, 9], "texture": "#1"},
+ "west": {"uv": [3, 4.5, 6, 9], "texture": "#1"},
+ "up": {"uv": [3, 12, 0, 9], "texture": "#1"},
+ "down": {"uv": [6, 0, 9, 3], "texture": "#1"}
+ }
+ },
+ {
+ "from": [5, 9, 5],
+ "to": [11, 10, 11],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 13.5, 9]},
+ "faces": {
+ "north": {"uv": [9, 0, 12, 0.5], "texture": "#1"},
+ "east": {"uv": [9, 0.5, 12, 1], "texture": "#1"},
+ "south": {"uv": [9, 1, 12, 1.5], "texture": "#1"},
+ "west": {"uv": [9, 1.5, 12, 2], "texture": "#1"},
+ "up": {"uv": [9, 6, 6, 3], "texture": "#1"},
+ "down": {"uv": [9, 6, 6, 9], "texture": "#1"}
+ }
+ },
+ {
+ "name": "cube inverted",
+ "from": [11, 10, 11],
+ "to": [5, 9, 5],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 13.5, 9]},
+ "faces": {
+ "north": {"uv": [9, 1.5, 12, 1], "texture": "#1"},
+ "east": {"uv": [9, 2, 12, 1.5], "texture": "#1"},
+ "south": {"uv": [9, 0.5, 12, 0], "texture": "#1"},
+ "west": {"uv": [9, 1, 12, 0.5], "texture": "#1"},
+ "up": {"uv": [9, 9, 6, 6], "texture": "#1"},
+ "down": {"uv": [9, 6, 6, 3], "texture": "#1"}
+ }
+ }
+ ],
+ "gui_light": "front",
+ "display": {
+ "thirdperson_righthand": {
+ "rotation": [0, 90, 0],
+ "translation": [-1.25, 2.25, 2.25],
+ "scale": [0.55, 0.55, 0.55]
+ },
+ "thirdperson_lefthand": {
+ "rotation": [0, 90, 0],
+ "translation": [-1.25, 2.25, 2.25],
+ "scale": [0.55, 0.55, 0.55]
+ },
+ "firstperson_righthand": {
+ "rotation": [-155.67, 87.24, 146.71],
+ "translation": [-0.75, 4.75, 2.25],
+ "scale": [0.44883, 0.44883, 0.44883]
+ },
+ "firstperson_lefthand": {
+ "rotation": [-155.67, 87.24, 146.71],
+ "translation": [-0.75, 4.75, 2.25],
+ "scale": [0.44883, 0.44883, 0.44883]
+ },
+ "ground": {
+ "translation": [0, 2.5, 0],
+ "scale": [0.5, 0.5, 0.5]
+ },
+ "gui": {
+ "rotation": [-171.31, 28.48, -168.29],
+ "translation": [0.5, 3.25, 0],
+ "scale": [1.07695, 1.07695, 1.07695]
+ },
+ "head": {
+ "rotation": [0, -180, 0],
+ "translation": [0, 13, 0.25]
+ },
+ "fixed": {
+ "translation": [0, 4.75, 0]
+ },
+ "on_shelf": {
+ "rotation": [0, -180, 0]
+ }
+ },
+ "groups": [
+ {
+ "name": "group",
+ "origin": [8, 9, 6],
+ "scope": 0,
+ "color": 0,
+ "children": [0, 1]
+ },
+ 2,
+ {
+ "name": "group",
+ "origin": [7, 12.5, 9],
+ "scope": 0,
+ "color": 0,
+ "children": [3, 4]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/_sa_food_models/01_罐头食品/canned_peaches_open.json b/_sa_food_models/01_罐头食品/canned_peaches_open.json
new file mode 100644
index 0000000..61c0633
--- /dev/null
+++ b/_sa_food_models/01_罐头食品/canned_peaches_open.json
@@ -0,0 +1,136 @@
+{
+ "format_version": "1.21.11",
+ "credit": "Made with Blockbench",
+ "texture_size": [32, 32],
+ "textures": {
+ "1": "sa_combat:item/canned_foods/canned_peaches",
+ "particle": "sa_combat:item/canned_foods/canned_peaches_p"
+ },
+ "elements": [
+ {
+ "from": [7, 8.08658, 13.6194],
+ "to": [9, 8.08658, 15.6194],
+ "rotation": {"angle": 22.5, "axis": "x", "origin": [8, 10, 11]},
+ "faces": {
+ "north": {"uv": [1, 0, 0, 0], "rotation": 180, "texture": "#1"},
+ "east": {"uv": [0, 0, 0, 1], "rotation": 270, "texture": "#1"},
+ "south": {"uv": [1, 0, 0, 0], "texture": "#1"},
+ "west": {"uv": [0, 0, 0, 1], "rotation": 90, "texture": "#1"},
+ "up": {"uv": [9, 2, 10, 3], "rotation": 180, "texture": "#1"},
+ "down": {"uv": [3, 9, 4, 10], "texture": "#1"}
+ }
+ },
+ {
+ "from": [5, 10, 11],
+ "to": [11, 10, 17],
+ "rotation": {"angle": 45, "axis": "x", "origin": [8, 10, 11]},
+ "faces": {
+ "north": {"uv": [0, 0, 0, 3], "rotation": 180, "texture": "#1"},
+ "east": {"uv": [0, 0, 0, 3], "rotation": 270, "texture": "#1"},
+ "south": {"uv": [0, 3, 0, 0], "texture": "#1"},
+ "west": {"uv": [0, 0, 0, 3], "rotation": 90, "texture": "#1"},
+ "up": {"uv": [6, 0, 9, 3], "rotation": 180, "texture": "#1"},
+ "down": {"uv": [9, 3, 6, 0], "texture": "#1"}
+ }
+ },
+ {
+ "from": [5, 0, 5],
+ "to": [11, 9, 11],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 5.5, 9]},
+ "faces": {
+ "north": {"uv": [0, 0, 3, 4.5], "texture": "#1"},
+ "east": {"uv": [3, 0, 6, 4.5], "texture": "#1"},
+ "south": {"uv": [0, 4.5, 3, 9], "texture": "#1"},
+ "west": {"uv": [6, 0, 3, 4.5], "texture": "#1"},
+ "up": {"uv": [3, 12, 0, 9], "texture": "#1"},
+ "down": {"uv": [6, 0, 9, 3], "texture": "#1"}
+ }
+ },
+ {
+ "from": [5, 9, 5],
+ "to": [11, 10, 11],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 13.5, 9]},
+ "faces": {
+ "north": {"uv": [9, 0, 12, 0.5], "texture": "#1"},
+ "east": {"uv": [9, 0.5, 12, 1], "texture": "#1"},
+ "south": {"uv": [9, 1, 12, 1.5], "texture": "#1"},
+ "west": {"uv": [9, 1.5, 12, 2], "texture": "#1"},
+ "up": {"uv": [9, 6, 6, 3], "texture": "#1"},
+ "down": {"uv": [9, 6, 6, 9], "texture": "#1"}
+ }
+ },
+ {
+ "name": "cube inverted",
+ "from": [11, 10, 11],
+ "to": [5, 9, 5],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 13.5, 9]},
+ "faces": {
+ "north": {"uv": [9, 1.5, 12, 1], "texture": "#1"},
+ "east": {"uv": [9, 2, 12, 1.5], "texture": "#1"},
+ "south": {"uv": [9, 0.5, 12, 0], "texture": "#1"},
+ "west": {"uv": [9, 1, 12, 0.5], "texture": "#1"},
+ "up": {"uv": [9, 9, 6, 6], "texture": "#1"},
+ "down": {"uv": [9, 6, 6, 3], "texture": "#1"}
+ }
+ }
+ ],
+ "gui_light": "front",
+ "display": {
+ "thirdperson_righthand": {
+ "rotation": [0, 90, 0],
+ "translation": [-1.25, 2.25, 2.25],
+ "scale": [0.55, 0.55, 0.55]
+ },
+ "thirdperson_lefthand": {
+ "rotation": [0, 90, 0],
+ "translation": [-1.25, 2.25, 2.25],
+ "scale": [0.55, 0.55, 0.55]
+ },
+ "firstperson_righthand": {
+ "rotation": [-155.67, 87.24, 146.71],
+ "translation": [-0.75, 4.75, 2.25],
+ "scale": [0.44883, 0.44883, 0.44883]
+ },
+ "firstperson_lefthand": {
+ "rotation": [-155.67, 87.24, 146.71],
+ "translation": [-0.75, 4.75, 2.25],
+ "scale": [0.44883, 0.44883, 0.44883]
+ },
+ "ground": {
+ "translation": [0, 2.5, 0],
+ "scale": [0.5, 0.5, 0.5]
+ },
+ "gui": {
+ "rotation": [-171.31, 28.48, -168.29],
+ "translation": [0.5, 3.25, 0],
+ "scale": [1.07695, 1.07695, 1.07695]
+ },
+ "head": {
+ "rotation": [0, -180, 0],
+ "translation": [0, 13, 0.25]
+ },
+ "fixed": {
+ "translation": [0, 4.75, 0]
+ },
+ "on_shelf": {
+ "rotation": [0, -180, 0]
+ }
+ },
+ "groups": [
+ {
+ "name": "group",
+ "origin": [8, 9, 6],
+ "scope": 0,
+ "color": 0,
+ "children": [0, 1]
+ },
+ 2,
+ {
+ "name": "group",
+ "origin": [7, 12.5, 9],
+ "scope": 0,
+ "color": 0,
+ "children": [3, 4]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/_sa_food_models/01_罐头食品/canned_peas.json b/_sa_food_models/01_罐头食品/canned_peas.json
new file mode 100644
index 0000000..d45ab68
--- /dev/null
+++ b/_sa_food_models/01_罐头食品/canned_peas.json
@@ -0,0 +1,135 @@
+{
+ "format_version": "1.21.11",
+ "credit": "Made with Blockbench",
+ "texture_size": [32, 32],
+ "textures": {
+ "1": "sa_combat:item/canned_foods/canned_fruit_cocktail"
+ },
+ "elements": [
+ {
+ "from": [7, 11.91342, 6.3806],
+ "to": [9, 11.91342, 8.3806],
+ "rotation": {"angle": -22.5, "axis": "x", "origin": [8, 10, 11]},
+ "faces": {
+ "north": {"uv": [1, 0, 0, 0], "rotation": 180, "texture": "#1"},
+ "east": {"uv": [0, 0, 0, 1], "rotation": 90, "texture": "#1"},
+ "south": {"uv": [1, 0, 0, 0], "texture": "#1"},
+ "west": {"uv": [0, 0, 0, 1], "rotation": 270, "texture": "#1"},
+ "up": {"uv": [3, 9, 4, 10], "texture": "#1"},
+ "down": {"uv": [9, 2, 10, 3], "rotation": 180, "texture": "#1"}
+ }
+ },
+ {
+ "from": [5, 10, 5],
+ "to": [11, 10, 11],
+ "rotation": {"angle": 0, "axis": "x", "origin": [8, 10, 11]},
+ "faces": {
+ "north": {"uv": [0, 3, 0, 0], "rotation": 180, "texture": "#1"},
+ "east": {"uv": [0, 0, 0, 3], "rotation": 90, "texture": "#1"},
+ "south": {"uv": [0, 0, 0, 3], "texture": "#1"},
+ "west": {"uv": [0, 0, 0, 3], "rotation": 270, "texture": "#1"},
+ "up": {"uv": [9, 3, 6, 0], "texture": "#1"},
+ "down": {"uv": [6, 0, 9, 3], "rotation": 180, "texture": "#1"}
+ }
+ },
+ {
+ "from": [5, 0, 5],
+ "to": [11, 9, 11],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 5.5, 9]},
+ "faces": {
+ "north": {"uv": [0, 0, 3, 4.5], "texture": "#1"},
+ "east": {"uv": [6, 4.5, 3, 9], "texture": "#1"},
+ "south": {"uv": [0, 4.5, 3, 9], "texture": "#1"},
+ "west": {"uv": [3, 4.5, 6, 9], "texture": "#1"},
+ "up": {"uv": [3, 12, 0, 9], "texture": "#1"},
+ "down": {"uv": [6, 0, 9, 3], "texture": "#1"}
+ }
+ },
+ {
+ "from": [5, 9, 5],
+ "to": [11, 10, 11],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 13.5, 9]},
+ "faces": {
+ "north": {"uv": [9, 0, 12, 0.5], "texture": "#1"},
+ "east": {"uv": [9, 0.5, 12, 1], "texture": "#1"},
+ "south": {"uv": [9, 1, 12, 1.5], "texture": "#1"},
+ "west": {"uv": [9, 1.5, 12, 2], "texture": "#1"},
+ "up": {"uv": [9, 6, 6, 3], "texture": "#1"},
+ "down": {"uv": [9, 6, 6, 9], "texture": "#1"}
+ }
+ },
+ {
+ "name": "cube inverted",
+ "from": [11, 10, 11],
+ "to": [5, 9, 5],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 13.5, 9]},
+ "faces": {
+ "north": {"uv": [9, 1.5, 12, 1], "texture": "#1"},
+ "east": {"uv": [9, 2, 12, 1.5], "texture": "#1"},
+ "south": {"uv": [9, 0.5, 12, 0], "texture": "#1"},
+ "west": {"uv": [9, 1, 12, 0.5], "texture": "#1"},
+ "up": {"uv": [9, 9, 6, 6], "texture": "#1"},
+ "down": {"uv": [9, 6, 6, 3], "texture": "#1"}
+ }
+ }
+ ],
+ "gui_light": "front",
+ "display": {
+ "thirdperson_righthand": {
+ "rotation": [0, 90, 0],
+ "translation": [-1.25, 2.25, 2.25],
+ "scale": [0.55, 0.55, 0.55]
+ },
+ "thirdperson_lefthand": {
+ "rotation": [0, 90, 0],
+ "translation": [-1.25, 2.25, 2.25],
+ "scale": [0.55, 0.55, 0.55]
+ },
+ "firstperson_righthand": {
+ "rotation": [-155.67, 87.24, 146.71],
+ "translation": [-0.75, 4.75, 2.25],
+ "scale": [0.44883, 0.44883, 0.44883]
+ },
+ "firstperson_lefthand": {
+ "rotation": [-155.67, 87.24, 146.71],
+ "translation": [-0.75, 4.75, 2.25],
+ "scale": [0.44883, 0.44883, 0.44883]
+ },
+ "ground": {
+ "translation": [0, 2.5, 0],
+ "scale": [0.5, 0.5, 0.5]
+ },
+ "gui": {
+ "rotation": [-171.31, 28.48, -168.29],
+ "translation": [0.5, 3.25, 0],
+ "scale": [1.07695, 1.07695, 1.07695]
+ },
+ "head": {
+ "rotation": [0, -180, 0],
+ "translation": [0, 13, 0.25]
+ },
+ "fixed": {
+ "translation": [0, 4.75, 0]
+ },
+ "on_shelf": {
+ "rotation": [0, -180, 0]
+ }
+ },
+ "groups": [
+ {
+ "name": "group",
+ "origin": [8, 9, 6],
+ "scope": 0,
+ "color": 0,
+ "children": [0, 1]
+ },
+ 2,
+ {
+ "name": "group",
+ "origin": [7, 12.5, 9],
+ "scope": 0,
+ "color": 0,
+ "children": [3, 4]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/_sa_food_models/01_罐头食品/canned_peas_open.json b/_sa_food_models/01_罐头食品/canned_peas_open.json
new file mode 100644
index 0000000..b8a0a89
--- /dev/null
+++ b/_sa_food_models/01_罐头食品/canned_peas_open.json
@@ -0,0 +1,136 @@
+{
+ "format_version": "1.21.11",
+ "credit": "Made with Blockbench",
+ "texture_size": [32, 32],
+ "textures": {
+ "1": "sa_combat:item/canned_foods/canned_peas",
+ "particle": "sa_combat:item/canned_foods/canned_peas_p"
+ },
+ "elements": [
+ {
+ "from": [7, 8.08658, 13.6194],
+ "to": [9, 8.08658, 15.6194],
+ "rotation": {"angle": 22.5, "axis": "x", "origin": [8, 10, 11]},
+ "faces": {
+ "north": {"uv": [1, 0, 0, 0], "rotation": 180, "texture": "#1"},
+ "east": {"uv": [0, 0, 0, 1], "rotation": 270, "texture": "#1"},
+ "south": {"uv": [1, 0, 0, 0], "texture": "#1"},
+ "west": {"uv": [0, 0, 0, 1], "rotation": 90, "texture": "#1"},
+ "up": {"uv": [9, 2, 10, 3], "rotation": 180, "texture": "#1"},
+ "down": {"uv": [3, 9, 4, 10], "texture": "#1"}
+ }
+ },
+ {
+ "from": [5, 10, 11],
+ "to": [11, 10, 17],
+ "rotation": {"angle": 45, "axis": "x", "origin": [8, 10, 11]},
+ "faces": {
+ "north": {"uv": [0, 0, 0, 3], "rotation": 180, "texture": "#1"},
+ "east": {"uv": [0, 0, 0, 3], "rotation": 270, "texture": "#1"},
+ "south": {"uv": [0, 3, 0, 0], "texture": "#1"},
+ "west": {"uv": [0, 0, 0, 3], "rotation": 90, "texture": "#1"},
+ "up": {"uv": [6, 0, 9, 3], "rotation": 180, "texture": "#1"},
+ "down": {"uv": [9, 3, 6, 0], "texture": "#1"}
+ }
+ },
+ {
+ "from": [5, 0, 5],
+ "to": [11, 9, 11],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 5.5, 9]},
+ "faces": {
+ "north": {"uv": [0, 0, 3, 4.5], "texture": "#1"},
+ "east": {"uv": [6, 4.5, 3, 9], "texture": "#1"},
+ "south": {"uv": [0, 4.5, 3, 9], "texture": "#1"},
+ "west": {"uv": [3, 4.5, 6, 9], "texture": "#1"},
+ "up": {"uv": [3, 12, 0, 9], "texture": "#1"},
+ "down": {"uv": [6, 0, 9, 3], "texture": "#1"}
+ }
+ },
+ {
+ "from": [5, 9, 5],
+ "to": [11, 10, 11],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 13.5, 9]},
+ "faces": {
+ "north": {"uv": [9, 0, 12, 0.5], "texture": "#1"},
+ "east": {"uv": [9, 0.5, 12, 1], "texture": "#1"},
+ "south": {"uv": [9, 1, 12, 1.5], "texture": "#1"},
+ "west": {"uv": [9, 1.5, 12, 2], "texture": "#1"},
+ "up": {"uv": [9, 6, 6, 3], "texture": "#1"},
+ "down": {"uv": [9, 6, 6, 9], "texture": "#1"}
+ }
+ },
+ {
+ "name": "cube inverted",
+ "from": [11, 10, 11],
+ "to": [5, 9, 5],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 13.5, 9]},
+ "faces": {
+ "north": {"uv": [9, 1.5, 12, 1], "texture": "#1"},
+ "east": {"uv": [9, 2, 12, 1.5], "texture": "#1"},
+ "south": {"uv": [9, 0.5, 12, 0], "texture": "#1"},
+ "west": {"uv": [9, 1, 12, 0.5], "texture": "#1"},
+ "up": {"uv": [9, 9, 6, 6], "texture": "#1"},
+ "down": {"uv": [9, 6, 6, 3], "texture": "#1"}
+ }
+ }
+ ],
+ "gui_light": "front",
+ "display": {
+ "thirdperson_righthand": {
+ "rotation": [0, 90, 0],
+ "translation": [-1.25, 2.25, 2.25],
+ "scale": [0.55, 0.55, 0.55]
+ },
+ "thirdperson_lefthand": {
+ "rotation": [0, 90, 0],
+ "translation": [-1.25, 2.25, 2.25],
+ "scale": [0.55, 0.55, 0.55]
+ },
+ "firstperson_righthand": {
+ "rotation": [-155.67, 87.24, 146.71],
+ "translation": [-0.75, 4.75, 2.25],
+ "scale": [0.44883, 0.44883, 0.44883]
+ },
+ "firstperson_lefthand": {
+ "rotation": [-155.67, 87.24, 146.71],
+ "translation": [-0.75, 4.75, 2.25],
+ "scale": [0.44883, 0.44883, 0.44883]
+ },
+ "ground": {
+ "translation": [0, 2.5, 0],
+ "scale": [0.5, 0.5, 0.5]
+ },
+ "gui": {
+ "rotation": [-171.31, 28.48, -168.29],
+ "translation": [0.5, 3.25, 0],
+ "scale": [1.07695, 1.07695, 1.07695]
+ },
+ "head": {
+ "rotation": [0, -180, 0],
+ "translation": [0, 13, 0.25]
+ },
+ "fixed": {
+ "translation": [0, 4.75, 0]
+ },
+ "on_shelf": {
+ "rotation": [0, -180, 0]
+ }
+ },
+ "groups": [
+ {
+ "name": "group",
+ "origin": [8, 9, 6],
+ "scope": 0,
+ "color": 0,
+ "children": [0, 1]
+ },
+ 2,
+ {
+ "name": "group",
+ "origin": [7, 12.5, 9],
+ "scope": 0,
+ "color": 0,
+ "children": [3, 4]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/_sa_food_models/01_罐头食品/canned_pineapple.json b/_sa_food_models/01_罐头食品/canned_pineapple.json
new file mode 100644
index 0000000..5a02183
--- /dev/null
+++ b/_sa_food_models/01_罐头食品/canned_pineapple.json
@@ -0,0 +1,135 @@
+{
+ "format_version": "1.21.11",
+ "credit": "Made with Blockbench",
+ "texture_size": [32, 32],
+ "textures": {
+ "1": "sa_combat:item/canned_foods/canned_pineapple"
+ },
+ "elements": [
+ {
+ "from": [7, 11.91342, 6.3806],
+ "to": [9, 11.91342, 8.3806],
+ "rotation": {"angle": -22.5, "axis": "x", "origin": [8, 10, 11]},
+ "faces": {
+ "north": {"uv": [1, 0, 0, 0], "rotation": 180, "texture": "#1"},
+ "east": {"uv": [0, 0, 0, 1], "rotation": 90, "texture": "#1"},
+ "south": {"uv": [1, 0, 0, 0], "texture": "#1"},
+ "west": {"uv": [0, 0, 0, 1], "rotation": 270, "texture": "#1"},
+ "up": {"uv": [3, 9, 4, 10], "texture": "#1"},
+ "down": {"uv": [9, 2, 10, 3], "rotation": 180, "texture": "#1"}
+ }
+ },
+ {
+ "from": [5, 10, 5],
+ "to": [11, 10, 11],
+ "rotation": {"angle": 0, "axis": "x", "origin": [8, 10, 11]},
+ "faces": {
+ "north": {"uv": [0, 3, 0, 0], "rotation": 180, "texture": "#1"},
+ "east": {"uv": [0, 0, 0, 3], "rotation": 90, "texture": "#1"},
+ "south": {"uv": [0, 0, 0, 3], "texture": "#1"},
+ "west": {"uv": [0, 0, 0, 3], "rotation": 270, "texture": "#1"},
+ "up": {"uv": [9, 3, 6, 0], "texture": "#1"},
+ "down": {"uv": [6, 0, 9, 3], "rotation": 180, "texture": "#1"}
+ }
+ },
+ {
+ "from": [5, 0, 5],
+ "to": [11, 9, 11],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 5.5, 9]},
+ "faces": {
+ "north": {"uv": [0, 0, 3, 4.5], "texture": "#1"},
+ "east": {"uv": [6, 4.5, 3, 9], "texture": "#1"},
+ "south": {"uv": [0, 4.5, 3, 9], "texture": "#1"},
+ "west": {"uv": [3, 4.5, 6, 9], "texture": "#1"},
+ "up": {"uv": [3, 12, 0, 9], "texture": "#1"},
+ "down": {"uv": [6, 0, 9, 3], "texture": "#1"}
+ }
+ },
+ {
+ "from": [5, 9, 5],
+ "to": [11, 10, 11],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 13.5, 9]},
+ "faces": {
+ "north": {"uv": [9, 0, 12, 0.5], "texture": "#1"},
+ "east": {"uv": [9, 0.5, 12, 1], "texture": "#1"},
+ "south": {"uv": [9, 1, 12, 1.5], "texture": "#1"},
+ "west": {"uv": [9, 1.5, 12, 2], "texture": "#1"},
+ "up": {"uv": [9, 6, 6, 3], "texture": "#1"},
+ "down": {"uv": [9, 6, 6, 9], "texture": "#1"}
+ }
+ },
+ {
+ "name": "cube inverted",
+ "from": [11, 10, 11],
+ "to": [5, 9, 5],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 13.5, 9]},
+ "faces": {
+ "north": {"uv": [9, 1.5, 12, 1], "texture": "#1"},
+ "east": {"uv": [9, 2, 12, 1.5], "texture": "#1"},
+ "south": {"uv": [9, 0.5, 12, 0], "texture": "#1"},
+ "west": {"uv": [9, 1, 12, 0.5], "texture": "#1"},
+ "up": {"uv": [9, 9, 6, 6], "texture": "#1"},
+ "down": {"uv": [9, 6, 6, 3], "texture": "#1"}
+ }
+ }
+ ],
+ "gui_light": "front",
+ "display": {
+ "thirdperson_righthand": {
+ "rotation": [0, 90, 0],
+ "translation": [-1.25, 2.25, 2.25],
+ "scale": [0.55, 0.55, 0.55]
+ },
+ "thirdperson_lefthand": {
+ "rotation": [0, 90, 0],
+ "translation": [-1.25, 2.25, 2.25],
+ "scale": [0.55, 0.55, 0.55]
+ },
+ "firstperson_righthand": {
+ "rotation": [-155.67, 87.24, 146.71],
+ "translation": [-0.75, 4.75, 2.25],
+ "scale": [0.44883, 0.44883, 0.44883]
+ },
+ "firstperson_lefthand": {
+ "rotation": [-155.67, 87.24, 146.71],
+ "translation": [-0.75, 4.75, 2.25],
+ "scale": [0.44883, 0.44883, 0.44883]
+ },
+ "ground": {
+ "translation": [0, 2.5, 0],
+ "scale": [0.5, 0.5, 0.5]
+ },
+ "gui": {
+ "rotation": [-171.31, 28.48, -168.29],
+ "translation": [0.5, 3.25, 0],
+ "scale": [1.07695, 1.07695, 1.07695]
+ },
+ "head": {
+ "rotation": [0, -180, 0],
+ "translation": [0, 13, 0.25]
+ },
+ "fixed": {
+ "translation": [0, 4.75, 0]
+ },
+ "on_shelf": {
+ "rotation": [0, -180, 0]
+ }
+ },
+ "groups": [
+ {
+ "name": "group",
+ "origin": [8, 9, 6],
+ "scope": 0,
+ "color": 0,
+ "children": [0, 1]
+ },
+ 2,
+ {
+ "name": "group",
+ "origin": [7, 12.5, 9],
+ "scope": 0,
+ "color": 0,
+ "children": [3, 4]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/_sa_food_models/01_罐头食品/canned_pineapple_open.json b/_sa_food_models/01_罐头食品/canned_pineapple_open.json
new file mode 100644
index 0000000..1991764
--- /dev/null
+++ b/_sa_food_models/01_罐头食品/canned_pineapple_open.json
@@ -0,0 +1,136 @@
+{
+ "format_version": "1.21.11",
+ "credit": "Made with Blockbench",
+ "texture_size": [32, 32],
+ "textures": {
+ "1": "sa_combat:item/canned_foods/canned_pineapple",
+ "particle": "sa_combat:item/canned_foods/canned_pineapple_p"
+ },
+ "elements": [
+ {
+ "from": [7, 8.08658, 13.6194],
+ "to": [9, 8.08658, 15.6194],
+ "rotation": {"angle": 22.5, "axis": "x", "origin": [8, 10, 11]},
+ "faces": {
+ "north": {"uv": [1, 0, 0, 0], "rotation": 180, "texture": "#1"},
+ "east": {"uv": [0, 0, 0, 1], "rotation": 270, "texture": "#1"},
+ "south": {"uv": [1, 0, 0, 0], "texture": "#1"},
+ "west": {"uv": [0, 0, 0, 1], "rotation": 90, "texture": "#1"},
+ "up": {"uv": [9, 2, 10, 3], "rotation": 180, "texture": "#1"},
+ "down": {"uv": [3, 9, 4, 10], "texture": "#1"}
+ }
+ },
+ {
+ "from": [5, 10, 11],
+ "to": [11, 10, 17],
+ "rotation": {"angle": 45, "axis": "x", "origin": [8, 10, 11]},
+ "faces": {
+ "north": {"uv": [0, 0, 0, 3], "rotation": 180, "texture": "#1"},
+ "east": {"uv": [0, 0, 0, 3], "rotation": 270, "texture": "#1"},
+ "south": {"uv": [0, 3, 0, 0], "texture": "#1"},
+ "west": {"uv": [0, 0, 0, 3], "rotation": 90, "texture": "#1"},
+ "up": {"uv": [6, 0, 9, 3], "rotation": 180, "texture": "#1"},
+ "down": {"uv": [9, 3, 6, 0], "texture": "#1"}
+ }
+ },
+ {
+ "from": [5, 0, 5],
+ "to": [11, 9, 11],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 5.5, 9]},
+ "faces": {
+ "north": {"uv": [0, 0, 3, 4.5], "texture": "#1"},
+ "east": {"uv": [6, 4.5, 3, 9], "texture": "#1"},
+ "south": {"uv": [0, 4.5, 3, 9], "texture": "#1"},
+ "west": {"uv": [3, 4.5, 6, 9], "texture": "#1"},
+ "up": {"uv": [3, 12, 0, 9], "texture": "#1"},
+ "down": {"uv": [6, 0, 9, 3], "texture": "#1"}
+ }
+ },
+ {
+ "from": [5, 9, 5],
+ "to": [11, 10, 11],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 13.5, 9]},
+ "faces": {
+ "north": {"uv": [9, 0, 12, 0.5], "texture": "#1"},
+ "east": {"uv": [9, 0.5, 12, 1], "texture": "#1"},
+ "south": {"uv": [9, 1, 12, 1.5], "texture": "#1"},
+ "west": {"uv": [9, 1.5, 12, 2], "texture": "#1"},
+ "up": {"uv": [9, 6, 6, 3], "texture": "#1"},
+ "down": {"uv": [9, 6, 6, 9], "texture": "#1"}
+ }
+ },
+ {
+ "name": "cube inverted",
+ "from": [11, 10, 11],
+ "to": [5, 9, 5],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 13.5, 9]},
+ "faces": {
+ "north": {"uv": [9, 1.5, 12, 1], "texture": "#1"},
+ "east": {"uv": [9, 2, 12, 1.5], "texture": "#1"},
+ "south": {"uv": [9, 0.5, 12, 0], "texture": "#1"},
+ "west": {"uv": [9, 1, 12, 0.5], "texture": "#1"},
+ "up": {"uv": [9, 9, 6, 6], "texture": "#1"},
+ "down": {"uv": [9, 6, 6, 3], "texture": "#1"}
+ }
+ }
+ ],
+ "gui_light": "front",
+ "display": {
+ "thirdperson_righthand": {
+ "rotation": [0, 90, 0],
+ "translation": [-1.25, 2.25, 2.25],
+ "scale": [0.55, 0.55, 0.55]
+ },
+ "thirdperson_lefthand": {
+ "rotation": [0, 90, 0],
+ "translation": [-1.25, 2.25, 2.25],
+ "scale": [0.55, 0.55, 0.55]
+ },
+ "firstperson_righthand": {
+ "rotation": [-155.67, 87.24, 146.71],
+ "translation": [-0.75, 4.75, 2.25],
+ "scale": [0.44883, 0.44883, 0.44883]
+ },
+ "firstperson_lefthand": {
+ "rotation": [-155.67, 87.24, 146.71],
+ "translation": [-0.75, 4.75, 2.25],
+ "scale": [0.44883, 0.44883, 0.44883]
+ },
+ "ground": {
+ "translation": [0, 2.5, 0],
+ "scale": [0.5, 0.5, 0.5]
+ },
+ "gui": {
+ "rotation": [-171.31, 28.48, -168.29],
+ "translation": [0.5, 3.25, 0],
+ "scale": [1.07695, 1.07695, 1.07695]
+ },
+ "head": {
+ "rotation": [0, -180, 0],
+ "translation": [0, 13, 0.25]
+ },
+ "fixed": {
+ "translation": [0, 4.75, 0]
+ },
+ "on_shelf": {
+ "rotation": [0, -180, 0]
+ }
+ },
+ "groups": [
+ {
+ "name": "group",
+ "origin": [8, 9, 6],
+ "scope": 0,
+ "color": 0,
+ "children": [0, 1]
+ },
+ 2,
+ {
+ "name": "group",
+ "origin": [7, 12.5, 9],
+ "scope": 0,
+ "color": 0,
+ "children": [3, 4]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/_sa_food_models/01_罐头食品/canned_potato.json b/_sa_food_models/01_罐头食品/canned_potato.json
new file mode 100644
index 0000000..2c96b77
--- /dev/null
+++ b/_sa_food_models/01_罐头食品/canned_potato.json
@@ -0,0 +1,135 @@
+{
+ "format_version": "1.21.11",
+ "credit": "Made with Blockbench",
+ "texture_size": [32, 32],
+ "textures": {
+ "1": "sa_combat:item/canned_foods/canned_potato"
+ },
+ "elements": [
+ {
+ "from": [7, 11.91342, 6.3806],
+ "to": [9, 11.91342, 8.3806],
+ "rotation": {"angle": -22.5, "axis": "x", "origin": [8, 10, 11]},
+ "faces": {
+ "north": {"uv": [1, 0, 0, 0], "rotation": 180, "texture": "#1"},
+ "east": {"uv": [0, 0, 0, 1], "rotation": 90, "texture": "#1"},
+ "south": {"uv": [1, 0, 0, 0], "texture": "#1"},
+ "west": {"uv": [0, 0, 0, 1], "rotation": 270, "texture": "#1"},
+ "up": {"uv": [3, 9, 4, 10], "texture": "#1"},
+ "down": {"uv": [9, 2, 10, 3], "rotation": 180, "texture": "#1"}
+ }
+ },
+ {
+ "from": [5, 10, 5],
+ "to": [11, 10, 11],
+ "rotation": {"angle": 0, "axis": "x", "origin": [8, 10, 11]},
+ "faces": {
+ "north": {"uv": [0, 3, 0, 0], "rotation": 180, "texture": "#1"},
+ "east": {"uv": [0, 0, 0, 3], "rotation": 90, "texture": "#1"},
+ "south": {"uv": [0, 0, 0, 3], "texture": "#1"},
+ "west": {"uv": [0, 0, 0, 3], "rotation": 270, "texture": "#1"},
+ "up": {"uv": [9, 3, 6, 0], "texture": "#1"},
+ "down": {"uv": [6, 0, 9, 3], "rotation": 180, "texture": "#1"}
+ }
+ },
+ {
+ "from": [5, 0, 5],
+ "to": [11, 9, 11],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 5.5, 9]},
+ "faces": {
+ "north": {"uv": [0, 0, 3, 4.5], "texture": "#1"},
+ "east": {"uv": [6, 4.5, 3, 9], "texture": "#1"},
+ "south": {"uv": [0, 4.5, 3, 9], "texture": "#1"},
+ "west": {"uv": [3, 4.5, 6, 9], "texture": "#1"},
+ "up": {"uv": [3, 12, 0, 9], "texture": "#1"},
+ "down": {"uv": [6, 0, 9, 3], "texture": "#1"}
+ }
+ },
+ {
+ "from": [5, 9, 5],
+ "to": [11, 10, 11],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 13.5, 9]},
+ "faces": {
+ "north": {"uv": [9, 0, 12, 0.5], "texture": "#1"},
+ "east": {"uv": [9, 0.5, 12, 1], "texture": "#1"},
+ "south": {"uv": [9, 1, 12, 1.5], "texture": "#1"},
+ "west": {"uv": [9, 1.5, 12, 2], "texture": "#1"},
+ "up": {"uv": [9, 6, 6, 3], "texture": "#1"},
+ "down": {"uv": [9, 6, 6, 9], "texture": "#1"}
+ }
+ },
+ {
+ "name": "cube inverted",
+ "from": [11, 10, 11],
+ "to": [5, 9, 5],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 13.5, 9]},
+ "faces": {
+ "north": {"uv": [9, 1.5, 12, 1], "texture": "#1"},
+ "east": {"uv": [9, 2, 12, 1.5], "texture": "#1"},
+ "south": {"uv": [9, 0.5, 12, 0], "texture": "#1"},
+ "west": {"uv": [9, 1, 12, 0.5], "texture": "#1"},
+ "up": {"uv": [9, 9, 6, 6], "texture": "#1"},
+ "down": {"uv": [9, 6, 6, 3], "texture": "#1"}
+ }
+ }
+ ],
+ "gui_light": "front",
+ "display": {
+ "thirdperson_righthand": {
+ "rotation": [0, 90, 0],
+ "translation": [-1.25, 2.25, 2.25],
+ "scale": [0.55, 0.55, 0.55]
+ },
+ "thirdperson_lefthand": {
+ "rotation": [0, 90, 0],
+ "translation": [-1.25, 2.25, 2.25],
+ "scale": [0.55, 0.55, 0.55]
+ },
+ "firstperson_righthand": {
+ "rotation": [-155.67, 87.24, 146.71],
+ "translation": [-0.75, 4.75, 2.25],
+ "scale": [0.44883, 0.44883, 0.44883]
+ },
+ "firstperson_lefthand": {
+ "rotation": [-155.67, 87.24, 146.71],
+ "translation": [-0.75, 4.75, 2.25],
+ "scale": [0.44883, 0.44883, 0.44883]
+ },
+ "ground": {
+ "translation": [0, 2.5, 0],
+ "scale": [0.5, 0.5, 0.5]
+ },
+ "gui": {
+ "rotation": [-171.31, 28.48, -168.29],
+ "translation": [0.5, 3.25, 0],
+ "scale": [1.07695, 1.07695, 1.07695]
+ },
+ "head": {
+ "rotation": [0, -180, 0],
+ "translation": [0, 13, 0.25]
+ },
+ "fixed": {
+ "translation": [0, 4.75, 0]
+ },
+ "on_shelf": {
+ "rotation": [0, -180, 0]
+ }
+ },
+ "groups": [
+ {
+ "name": "group",
+ "origin": [8, 9, 6],
+ "scope": 0,
+ "color": 0,
+ "children": [0, 1]
+ },
+ 2,
+ {
+ "name": "group",
+ "origin": [7, 12.5, 9],
+ "scope": 0,
+ "color": 0,
+ "children": [3, 4]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/_sa_food_models/01_罐头食品/canned_potato_open.json b/_sa_food_models/01_罐头食品/canned_potato_open.json
new file mode 100644
index 0000000..fa67efe
--- /dev/null
+++ b/_sa_food_models/01_罐头食品/canned_potato_open.json
@@ -0,0 +1,136 @@
+{
+ "format_version": "1.21.11",
+ "credit": "Made with Blockbench",
+ "texture_size": [32, 32],
+ "textures": {
+ "1": "sa_combat:item/canned_foods/canned_potato",
+ "particle": "sa_combat:item/canned_foods/canned_pineapple_p"
+ },
+ "elements": [
+ {
+ "from": [7, 8.08658, 13.6194],
+ "to": [9, 8.08658, 15.6194],
+ "rotation": {"angle": 22.5, "axis": "x", "origin": [8, 10, 11]},
+ "faces": {
+ "north": {"uv": [1, 0, 0, 0], "rotation": 180, "texture": "#1"},
+ "east": {"uv": [0, 0, 0, 1], "rotation": 270, "texture": "#1"},
+ "south": {"uv": [1, 0, 0, 0], "texture": "#1"},
+ "west": {"uv": [0, 0, 0, 1], "rotation": 90, "texture": "#1"},
+ "up": {"uv": [9, 2, 10, 3], "rotation": 180, "texture": "#1"},
+ "down": {"uv": [3, 9, 4, 10], "texture": "#1"}
+ }
+ },
+ {
+ "from": [5, 10, 11],
+ "to": [11, 10, 17],
+ "rotation": {"angle": 45, "axis": "x", "origin": [8, 10, 11]},
+ "faces": {
+ "north": {"uv": [0, 0, 0, 3], "rotation": 180, "texture": "#1"},
+ "east": {"uv": [0, 0, 0, 3], "rotation": 270, "texture": "#1"},
+ "south": {"uv": [0, 3, 0, 0], "texture": "#1"},
+ "west": {"uv": [0, 0, 0, 3], "rotation": 90, "texture": "#1"},
+ "up": {"uv": [6, 0, 9, 3], "rotation": 180, "texture": "#1"},
+ "down": {"uv": [9, 3, 6, 0], "texture": "#1"}
+ }
+ },
+ {
+ "from": [5, 0, 5],
+ "to": [11, 9, 11],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 5.5, 9]},
+ "faces": {
+ "north": {"uv": [0, 0, 3, 4.5], "texture": "#1"},
+ "east": {"uv": [6, 4.5, 3, 9], "texture": "#1"},
+ "south": {"uv": [0, 4.5, 3, 9], "texture": "#1"},
+ "west": {"uv": [3, 4.5, 6, 9], "texture": "#1"},
+ "up": {"uv": [3, 12, 0, 9], "texture": "#1"},
+ "down": {"uv": [6, 0, 9, 3], "texture": "#1"}
+ }
+ },
+ {
+ "from": [5, 9, 5],
+ "to": [11, 10, 11],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 13.5, 9]},
+ "faces": {
+ "north": {"uv": [9, 0, 12, 0.5], "texture": "#1"},
+ "east": {"uv": [9, 0.5, 12, 1], "texture": "#1"},
+ "south": {"uv": [9, 1, 12, 1.5], "texture": "#1"},
+ "west": {"uv": [9, 1.5, 12, 2], "texture": "#1"},
+ "up": {"uv": [9, 6, 6, 3], "texture": "#1"},
+ "down": {"uv": [9, 6, 6, 9], "texture": "#1"}
+ }
+ },
+ {
+ "name": "cube inverted",
+ "from": [11, 10, 11],
+ "to": [5, 9, 5],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 13.5, 9]},
+ "faces": {
+ "north": {"uv": [9, 1.5, 12, 1], "texture": "#1"},
+ "east": {"uv": [9, 2, 12, 1.5], "texture": "#1"},
+ "south": {"uv": [9, 0.5, 12, 0], "texture": "#1"},
+ "west": {"uv": [9, 1, 12, 0.5], "texture": "#1"},
+ "up": {"uv": [9, 9, 6, 6], "texture": "#1"},
+ "down": {"uv": [9, 6, 6, 3], "texture": "#1"}
+ }
+ }
+ ],
+ "gui_light": "front",
+ "display": {
+ "thirdperson_righthand": {
+ "rotation": [0, 90, 0],
+ "translation": [-1.25, 2.25, 2.25],
+ "scale": [0.55, 0.55, 0.55]
+ },
+ "thirdperson_lefthand": {
+ "rotation": [0, 90, 0],
+ "translation": [-1.25, 2.25, 2.25],
+ "scale": [0.55, 0.55, 0.55]
+ },
+ "firstperson_righthand": {
+ "rotation": [-155.67, 87.24, 146.71],
+ "translation": [-0.75, 4.75, 2.25],
+ "scale": [0.44883, 0.44883, 0.44883]
+ },
+ "firstperson_lefthand": {
+ "rotation": [-155.67, 87.24, 146.71],
+ "translation": [-0.75, 4.75, 2.25],
+ "scale": [0.44883, 0.44883, 0.44883]
+ },
+ "ground": {
+ "translation": [0, 2.5, 0],
+ "scale": [0.5, 0.5, 0.5]
+ },
+ "gui": {
+ "rotation": [-171.31, 28.48, -168.29],
+ "translation": [0.5, 3.25, 0],
+ "scale": [1.07695, 1.07695, 1.07695]
+ },
+ "head": {
+ "rotation": [0, -180, 0],
+ "translation": [0, 13, 0.25]
+ },
+ "fixed": {
+ "translation": [0, 4.75, 0]
+ },
+ "on_shelf": {
+ "rotation": [0, -180, 0]
+ }
+ },
+ "groups": [
+ {
+ "name": "group",
+ "origin": [8, 9, 6],
+ "scope": 0,
+ "color": 0,
+ "children": [0, 1]
+ },
+ 2,
+ {
+ "name": "group",
+ "origin": [7, 12.5, 9],
+ "scope": 0,
+ "color": 0,
+ "children": [3, 4]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/_sa_food_models/01_罐头食品/canned_sardines.json b/_sa_food_models/01_罐头食品/canned_sardines.json
new file mode 100644
index 0000000..26bb5bd
--- /dev/null
+++ b/_sa_food_models/01_罐头食品/canned_sardines.json
@@ -0,0 +1,149 @@
+{
+ "format_version": "1.21.11",
+ "credit": "Made with Blockbench",
+ "texture_size": [32, 32],
+ "textures": {
+ "1": "sa_combat:item/canned_foods/canned_sardines",
+ "particle": "sa_combat:item/canned_foods/canned_sardines_p"
+ },
+ "elements": [
+ {
+ "from": [8.81492, 7.94415, 7],
+ "to": [10.81492, 7.94415, 9],
+ "rotation": {"angle": 22.5, "axis": "z", "origin": [10.31492, 9.44415, 8]},
+ "faces": {
+ "north": {"uv": [0, 0, 1, 0], "texture": "#1"},
+ "east": {"uv": [0, 0, 1, 0], "texture": "#1"},
+ "south": {"uv": [0, 0, 1, 0], "texture": "#1"},
+ "west": {"uv": [1, 0, 0, 0], "texture": "#1"},
+ "up": {"uv": [3.5, 7, 2.5, 6], "texture": "#1"},
+ "down": {"uv": [4.5, 6, 3.5, 7], "texture": "#1"}
+ }
+ },
+ {
+ "from": [3, 5, 5],
+ "to": [8, 5, 11],
+ "rotation": {"angle": 0, "axis": "z", "origin": [3, 6, 8]},
+ "faces": {
+ "north": {"uv": [0, 0, 2.5, 0], "texture": "#1"},
+ "east": {"uv": [0, 0, 2.5, 0], "texture": "#1"},
+ "south": {"uv": [0, 0, 2.5, 0], "texture": "#1"},
+ "west": {"uv": [0, 0, 2.5, 0], "texture": "#1"},
+ "up": {"uv": [2.5, 9, 0, 6], "texture": "#1"},
+ "down": {"uv": [0, 6, 2.5, 9], "texture": "#1"}
+ }
+ },
+ {
+ "from": [8, 5, 5],
+ "to": [13, 5, 11],
+ "rotation": {"angle": 45, "axis": "z", "origin": [8, 5, 8]},
+ "faces": {
+ "north": {"uv": [0, 0, 2.5, 0], "texture": "#1"},
+ "east": {"uv": [0, 0, 2.5, 0], "texture": "#1"},
+ "south": {"uv": [0, 0, 2.5, 0], "texture": "#1"},
+ "west": {"uv": [0, 0, 2.5, 0], "texture": "#1"},
+ "up": {"uv": [0, 6, 2.5, 9], "texture": "#1"},
+ "down": {"uv": [0, 6, 2.5, 9], "texture": "#1"}
+ }
+ },
+ {
+ "from": [3, 0, 5],
+ "to": [13, 4, 11],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 5.5, 9]},
+ "faces": {
+ "north": {"uv": [5, 3, 10, 5], "texture": "#1"},
+ "east": {"uv": [2.5, 7, 5.5, 9], "texture": "#1"},
+ "south": {"uv": [5, 5, 10, 7], "texture": "#1"},
+ "west": {"uv": [5.5, 7, 2.5, 9], "texture": "#1"},
+ "up": {"uv": [10, 3, 5, 0], "texture": "#1"},
+ "down": {"uv": [2, 9, 7, 12], "texture": "#1"}
+ }
+ },
+ {
+ "from": [3, 4, 5],
+ "to": [13, 5, 11],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 8.5, 9]},
+ "faces": {
+ "north": {"uv": [5.5, 7, 10.5, 7.5], "texture": "#1"},
+ "east": {"uv": [5.5, 8, 8.5, 8.5], "texture": "#1"},
+ "south": {"uv": [5.5, 7.5, 10.5, 8], "texture": "#1"},
+ "west": {"uv": [5.5, 8.5, 8.5, 9], "texture": "#1"},
+ "up": {"uv": [5, 3, 0, 0], "texture": "#1"},
+ "down": {"uv": [5, 3, 0, 6], "texture": "#1"}
+ }
+ },
+ {
+ "name": "cube inverted",
+ "from": [13, 5, 11],
+ "to": [3, 4, 5],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 8.5, 9]},
+ "faces": {
+ "north": {"uv": [5.5, 8, 10.5, 7.5], "texture": "#1"},
+ "east": {"uv": [5.5, 9, 8.5, 8.5], "texture": "#1"},
+ "south": {"uv": [5.5, 7.5, 10.5, 7], "texture": "#1"},
+ "west": {"uv": [5.5, 8.5, 8.5, 8], "texture": "#1"},
+ "up": {"uv": [5, 6, 0, 3], "texture": "#1"},
+ "down": {"uv": [5, 3, 0, 0], "texture": "#1"}
+ }
+ }
+ ],
+ "gui_light": "front",
+ "display": {
+ "thirdperson_righthand": {
+ "rotation": [0, 90, 0],
+ "translation": [-1.25, 2.25, 2.25],
+ "scale": [0.55, 0.55, 0.55]
+ },
+ "thirdperson_lefthand": {
+ "rotation": [0, 90, 0],
+ "translation": [-1.25, 2.25, 2.25],
+ "scale": [0.55, 0.55, 0.55]
+ },
+ "firstperson_righthand": {
+ "rotation": [-155.67, 87.24, 146.71],
+ "translation": [-0.75, 4, 2.25],
+ "scale": [0.44883, 0.44883, 0.44883]
+ },
+ "firstperson_lefthand": {
+ "rotation": [-155.67, 87.24, 146.71],
+ "translation": [-0.75, 4, 2.25],
+ "scale": [0.44883, 0.44883, 0.44883]
+ },
+ "ground": {
+ "translation": [0, 2.5, 0],
+ "scale": [0.5, 0.5, 0.5]
+ },
+ "gui": {
+ "rotation": [-171.31, 28.48, -168.29],
+ "translation": [1.25, 4.75, 0],
+ "scale": [1.07695, 1.07695, 1.07695]
+ },
+ "head": {
+ "rotation": [0, -180, 0],
+ "translation": [0, 13, 0.25]
+ },
+ "fixed": {
+ "translation": [0, 4.75, 0]
+ },
+ "on_shelf": {
+ "rotation": [0, -180, 0]
+ }
+ },
+ "groups": [
+ {
+ "name": "group",
+ "origin": [8, 9, 6],
+ "scope": 0,
+ "color": 0,
+ "children": [0, 1, 2]
+ },
+ 3,
+ {
+ "name": "group",
+ "origin": [7, 12.5, 9],
+ "scope": 0,
+ "color": 0,
+ "children": [4, 5]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/_sa_food_models/01_罐头食品/canned_spaghetti_bolognese.json b/_sa_food_models/01_罐头食品/canned_spaghetti_bolognese.json
new file mode 100644
index 0000000..3ed4147
--- /dev/null
+++ b/_sa_food_models/01_罐头食品/canned_spaghetti_bolognese.json
@@ -0,0 +1,136 @@
+{
+ "format_version": "1.21.11",
+ "credit": "Made with Blockbench",
+ "texture_size": [32, 32],
+ "textures": {
+ "2": "sa_combat:item/canned_foods/canned_spaghetti_bolognese",
+ "particle": "sa_combat:item/canned_foods/canned_spaghetti_bolognese"
+ },
+ "elements": [
+ {
+ "from": [9.31492, 13.44415, 7],
+ "to": [11.31492, 13.44415, 9],
+ "rotation": {"angle": -22.5, "axis": "z", "origin": [3, 10, 8]},
+ "faces": {
+ "north": {"uv": [0, 0, 1, 0], "texture": "#2"},
+ "east": {"uv": [0, 0, 1, 0], "texture": "#2"},
+ "south": {"uv": [0, 0, 1, 0], "texture": "#2"},
+ "west": {"uv": [1, 0, 0, 0], "texture": "#2"},
+ "up": {"uv": [11, 3, 10, 2], "rotation": 90, "texture": "#2"},
+ "down": {"uv": [11, 3, 10, 4], "rotation": 270, "texture": "#2"}
+ }
+ },
+ {
+ "from": [3, 10, 5],
+ "to": [13, 10, 11],
+ "rotation": {"angle": 0, "axis": "x", "origin": [3, 10, 8]},
+ "faces": {
+ "north": {"uv": [0, 0, 5, 0], "texture": "#2"},
+ "east": {"uv": [0, 0, 5, 0], "texture": "#2"},
+ "south": {"uv": [0, 0, 5, 0], "texture": "#2"},
+ "west": {"uv": [0, 0, 5, 0], "texture": "#2"},
+ "up": {"uv": [10, 3, 5, 0], "texture": "#2"},
+ "down": {"uv": [10, 0, 5, 3], "texture": "#2"}
+ }
+ },
+ {
+ "from": [3, 0, 5],
+ "to": [13, 9, 11],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 5.5, 9]},
+ "faces": {
+ "north": {"uv": [0, 0, 5, 4.5], "texture": "#2"},
+ "east": {"uv": [5, 9, 8, 13.5], "texture": "#2"},
+ "south": {"uv": [0, 4.5, 5, 9], "texture": "#2"},
+ "west": {"uv": [8, 9, 5, 13.5], "texture": "#2"},
+ "up": {"uv": [5, 12, 0, 9], "texture": "#2"},
+ "down": {"uv": [10, 0, 5, 3], "texture": "#2"}
+ }
+ },
+ {
+ "from": [3, 9, 5],
+ "to": [13, 10, 11],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 13.5, 9]},
+ "faces": {
+ "north": {"uv": [10, 0, 15, 0.5], "texture": "#2"},
+ "east": {"uv": [10, 1, 13, 1.5], "texture": "#2"},
+ "south": {"uv": [10, 0.5, 15, 1], "texture": "#2"},
+ "west": {"uv": [10, 1.5, 13, 2], "texture": "#2"},
+ "up": {"uv": [10, 6, 5, 3], "texture": "#2"},
+ "down": {"uv": [10, 6, 5, 9], "texture": "#2"}
+ }
+ },
+ {
+ "name": "cube inverted",
+ "from": [13, 10, 11],
+ "to": [3, 9, 5],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 13.5, 9]},
+ "faces": {
+ "north": {"uv": [10, 1, 15, 0.5], "texture": "#2"},
+ "east": {"uv": [10, 2, 13, 1.5], "texture": "#2"},
+ "south": {"uv": [10, 0.5, 15, 0], "texture": "#2"},
+ "west": {"uv": [10, 1.5, 13, 1], "texture": "#2"},
+ "up": {"uv": [5, 6, 10, 9], "texture": "#2"},
+ "down": {"uv": [5, 6, 10, 3], "texture": "#2"}
+ }
+ }
+ ],
+ "gui_light": "front",
+ "display": {
+ "thirdperson_righthand": {
+ "rotation": [0, 90, 0],
+ "translation": [-1.25, 2.25, 2.25],
+ "scale": [0.55, 0.55, 0.55]
+ },
+ "thirdperson_lefthand": {
+ "rotation": [0, 90, 0],
+ "translation": [-1.25, 2.25, 2.25],
+ "scale": [0.55, 0.55, 0.55]
+ },
+ "firstperson_righthand": {
+ "rotation": [-155.67, 87.24, 146.71],
+ "translation": [-0.75, 4, 2.25],
+ "scale": [0.44883, 0.44883, 0.44883]
+ },
+ "firstperson_lefthand": {
+ "rotation": [-155.67, 87.24, 146.71],
+ "translation": [-0.75, 4, 2.25],
+ "scale": [0.44883, 0.44883, 0.44883]
+ },
+ "ground": {
+ "translation": [0, 2.5, 0],
+ "scale": [0.5, 0.5, 0.5]
+ },
+ "gui": {
+ "rotation": [-171.31, 28.48, -168.29],
+ "translation": [0.5, 3.25, 0],
+ "scale": [1.07695, 1.07695, 1.07695]
+ },
+ "head": {
+ "rotation": [0, -180, 0],
+ "translation": [0, 13, 0.25]
+ },
+ "fixed": {
+ "translation": [0, 4.75, 0]
+ },
+ "on_shelf": {
+ "rotation": [0, -180, 0]
+ }
+ },
+ "groups": [
+ {
+ "name": "group",
+ "origin": [8, 9, 6],
+ "scope": 0,
+ "color": 0,
+ "children": [0, 1]
+ },
+ 2,
+ {
+ "name": "group",
+ "origin": [7, 12.5, 9],
+ "scope": 0,
+ "color": 0,
+ "children": [3, 4]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/_sa_food_models/01_罐头食品/canned_spaghetti_bolognese_open.json b/_sa_food_models/01_罐头食品/canned_spaghetti_bolognese_open.json
new file mode 100644
index 0000000..3aba8f5
--- /dev/null
+++ b/_sa_food_models/01_罐头食品/canned_spaghetti_bolognese_open.json
@@ -0,0 +1,136 @@
+{
+ "format_version": "1.21.11",
+ "credit": "Made with Blockbench",
+ "texture_size": [32, 32],
+ "textures": {
+ "2": "sa_combat:item/canned_foods/canned_spaghetti_bolognese",
+ "particle": "sa_combat:item/canned_foods/canned_spaghetti_bolognese_p"
+ },
+ "elements": [
+ {
+ "from": [6.44415, 1.68508, 7],
+ "to": [6.44415, 3.68508, 9],
+ "rotation": {"angle": -45, "axis": "z", "origin": [3, 10, 8]},
+ "faces": {
+ "north": {"uv": [0, 0, 1, 0], "rotation": 270, "texture": "#2"},
+ "east": {"uv": [11, 3, 10, 2], "rotation": 180, "texture": "#2"},
+ "south": {"uv": [0, 0, 1, 0], "rotation": 90, "texture": "#2"},
+ "west": {"uv": [11, 3, 10, 4], "texture": "#2"},
+ "up": {"uv": [1, 0, 0, 0], "rotation": 90, "texture": "#2"},
+ "down": {"uv": [0, 0, 1, 0], "rotation": 90, "texture": "#2"}
+ }
+ },
+ {
+ "from": [3, 0, 5],
+ "to": [3, 10, 11],
+ "rotation": {"angle": -22.5, "axis": "z", "origin": [3, 10, 8]},
+ "faces": {
+ "north": {"uv": [0, 0, 5, 0], "rotation": 270, "texture": "#2"},
+ "east": {"uv": [10, 3, 5, 0], "rotation": 90, "texture": "#2"},
+ "south": {"uv": [0, 0, 5, 0], "rotation": 90, "texture": "#2"},
+ "west": {"uv": [10, 0, 5, 3], "rotation": 90, "texture": "#2"},
+ "up": {"uv": [0, 0, 5, 0], "rotation": 90, "texture": "#2"},
+ "down": {"uv": [0, 0, 5, 0], "rotation": 90, "texture": "#2"}
+ }
+ },
+ {
+ "from": [3, 0, 5],
+ "to": [13, 9, 11],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 5.5, 9]},
+ "faces": {
+ "north": {"uv": [0, 0, 5, 4.5], "texture": "#2"},
+ "east": {"uv": [5, 9, 8, 13.5], "texture": "#2"},
+ "south": {"uv": [0, 4.5, 5, 9], "texture": "#2"},
+ "west": {"uv": [8, 9, 5, 13.5], "texture": "#2"},
+ "up": {"uv": [5, 12, 0, 9], "texture": "#2"},
+ "down": {"uv": [10, 0, 5, 3], "texture": "#2"}
+ }
+ },
+ {
+ "from": [3, 9, 5],
+ "to": [13, 10, 11],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 13.5, 9]},
+ "faces": {
+ "north": {"uv": [10, 0, 15, 0.5], "texture": "#2"},
+ "east": {"uv": [10, 1, 13, 1.5], "texture": "#2"},
+ "south": {"uv": [10, 0.5, 15, 1], "texture": "#2"},
+ "west": {"uv": [10, 1.5, 13, 2], "texture": "#2"},
+ "up": {"uv": [10, 6, 5, 3], "texture": "#2"},
+ "down": {"uv": [10, 6, 5, 9], "texture": "#2"}
+ }
+ },
+ {
+ "name": "cube inverted",
+ "from": [13, 10, 11],
+ "to": [3, 9, 5],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 13.5, 9]},
+ "faces": {
+ "north": {"uv": [10, 1, 15, 0.5], "texture": "#2"},
+ "east": {"uv": [10, 2, 13, 1.5], "texture": "#2"},
+ "south": {"uv": [10, 0.5, 15, 0], "texture": "#2"},
+ "west": {"uv": [10, 1.5, 13, 1], "texture": "#2"},
+ "up": {"uv": [5, 6, 10, 9], "texture": "#2"},
+ "down": {"uv": [5, 6, 10, 3], "texture": "#2"}
+ }
+ }
+ ],
+ "gui_light": "front",
+ "display": {
+ "thirdperson_righthand": {
+ "rotation": [0, 90, 0],
+ "translation": [-1.25, 2.25, 2.25],
+ "scale": [0.55, 0.55, 0.55]
+ },
+ "thirdperson_lefthand": {
+ "rotation": [0, 90, 0],
+ "translation": [-1.25, 2.25, 2.25],
+ "scale": [0.55, 0.55, 0.55]
+ },
+ "firstperson_righthand": {
+ "rotation": [-155.67, 87.24, 146.71],
+ "translation": [-0.75, 4, 2.25],
+ "scale": [0.44883, 0.44883, 0.44883]
+ },
+ "firstperson_lefthand": {
+ "rotation": [-155.67, 87.24, 146.71],
+ "translation": [-0.75, 4, 2.25],
+ "scale": [0.44883, 0.44883, 0.44883]
+ },
+ "ground": {
+ "translation": [0, 2.5, 0],
+ "scale": [0.5, 0.5, 0.5]
+ },
+ "gui": {
+ "rotation": [-171.31, 28.48, -168.29],
+ "translation": [0.5, 3.25, 0],
+ "scale": [1.07695, 1.07695, 1.07695]
+ },
+ "head": {
+ "rotation": [0, -180, 0],
+ "translation": [0, 13, 0.25]
+ },
+ "fixed": {
+ "translation": [0, 4.75, 0]
+ },
+ "on_shelf": {
+ "rotation": [0, -180, 0]
+ }
+ },
+ "groups": [
+ {
+ "name": "group",
+ "origin": [8, 9, 6],
+ "scope": 0,
+ "color": 0,
+ "children": [0, 1]
+ },
+ 2,
+ {
+ "name": "group",
+ "origin": [7, 12.5, 9],
+ "scope": 0,
+ "color": 0,
+ "children": [3, 4]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/_sa_food_models/01_罐头食品/canned_tuna.json b/_sa_food_models/01_罐头食品/canned_tuna.json
new file mode 100644
index 0000000..b5041e1
--- /dev/null
+++ b/_sa_food_models/01_罐头食品/canned_tuna.json
@@ -0,0 +1,149 @@
+{
+ "format_version": "1.21.11",
+ "credit": "Made with Blockbench",
+ "texture_size": [32, 32],
+ "textures": {
+ "1": "sa_combat:item/canned_foods/canned_tuna",
+ "particle": "sa_combat:item/canned_foods/canned_chilli_p"
+ },
+ "elements": [
+ {
+ "from": [8.81492, 7.94415, 7],
+ "to": [10.81492, 7.94415, 9],
+ "rotation": {"angle": 22.5, "axis": "z", "origin": [10.31492, 9.44415, 8]},
+ "faces": {
+ "north": {"uv": [0, 0, 1, 0], "texture": "#1"},
+ "east": {"uv": [0, 0, 1, 0], "texture": "#1"},
+ "south": {"uv": [0, 0, 1, 0], "texture": "#1"},
+ "west": {"uv": [1, 0, 0, 0], "texture": "#1"},
+ "up": {"uv": [3.5, 7, 2.5, 6], "texture": "#1"},
+ "down": {"uv": [4.5, 6, 3.5, 7], "texture": "#1"}
+ }
+ },
+ {
+ "from": [3, 5, 5],
+ "to": [8, 5, 11],
+ "rotation": {"angle": 0, "axis": "z", "origin": [3, 6, 8]},
+ "faces": {
+ "north": {"uv": [0, 0, 2.5, 0], "texture": "#1"},
+ "east": {"uv": [0, 0, 2.5, 0], "texture": "#1"},
+ "south": {"uv": [0, 0, 2.5, 0], "texture": "#1"},
+ "west": {"uv": [0, 0, 2.5, 0], "texture": "#1"},
+ "up": {"uv": [2.5, 9, 0, 6], "texture": "#1"},
+ "down": {"uv": [0, 6, 2.5, 9], "texture": "#1"}
+ }
+ },
+ {
+ "from": [8, 5, 5],
+ "to": [13, 5, 11],
+ "rotation": {"angle": 45, "axis": "z", "origin": [8, 5, 8]},
+ "faces": {
+ "north": {"uv": [0, 0, 2.5, 0], "texture": "#1"},
+ "east": {"uv": [0, 0, 2.5, 0], "texture": "#1"},
+ "south": {"uv": [0, 0, 2.5, 0], "texture": "#1"},
+ "west": {"uv": [0, 0, 2.5, 0], "texture": "#1"},
+ "up": {"uv": [0, 6, 2.5, 9], "texture": "#1"},
+ "down": {"uv": [0, 6, 2.5, 9], "texture": "#1"}
+ }
+ },
+ {
+ "from": [3, 0, 5],
+ "to": [13, 4, 11],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 5.5, 9]},
+ "faces": {
+ "north": {"uv": [5, 5, 10, 7], "texture": "#1"},
+ "east": {"uv": [2.5, 7, 5.5, 9], "texture": "#1"},
+ "south": {"uv": [5, 3, 10, 5], "texture": "#1"},
+ "west": {"uv": [5.5, 7, 2.5, 9], "texture": "#1"},
+ "up": {"uv": [10, 3, 5, 0], "texture": "#1"},
+ "down": {"uv": [2, 9, 7, 12], "texture": "#1"}
+ }
+ },
+ {
+ "from": [3, 4, 5],
+ "to": [13, 5, 11],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 8.5, 9]},
+ "faces": {
+ "north": {"uv": [5.5, 7, 10.5, 7.5], "texture": "#1"},
+ "east": {"uv": [5.5, 8, 8.5, 8.5], "texture": "#1"},
+ "south": {"uv": [5.5, 7.5, 10.5, 8], "texture": "#1"},
+ "west": {"uv": [5.5, 8.5, 8.5, 9], "texture": "#1"},
+ "up": {"uv": [5, 3, 0, 0], "texture": "#1"},
+ "down": {"uv": [5, 3, 0, 6], "texture": "#1"}
+ }
+ },
+ {
+ "name": "cube inverted",
+ "from": [13, 5, 11],
+ "to": [3, 4, 5],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 8.5, 9]},
+ "faces": {
+ "north": {"uv": [5.5, 8, 10.5, 7.5], "texture": "#1"},
+ "east": {"uv": [5.5, 9, 8.5, 8.5], "texture": "#1"},
+ "south": {"uv": [5.5, 7.5, 10.5, 7], "texture": "#1"},
+ "west": {"uv": [5.5, 8.5, 8.5, 8], "texture": "#1"},
+ "up": {"uv": [5, 6, 0, 3], "texture": "#1"},
+ "down": {"uv": [5, 3, 0, 0], "texture": "#1"}
+ }
+ }
+ ],
+ "gui_light": "front",
+ "display": {
+ "thirdperson_righthand": {
+ "rotation": [0, 90, 0],
+ "translation": [-1.25, 2.25, 2.25],
+ "scale": [0.55, 0.55, 0.55]
+ },
+ "thirdperson_lefthand": {
+ "rotation": [0, 90, 0],
+ "translation": [-1.25, 2.25, 2.25],
+ "scale": [0.55, 0.55, 0.55]
+ },
+ "firstperson_righthand": {
+ "rotation": [-155.67, 87.24, 146.71],
+ "translation": [-0.75, 4, 2.25],
+ "scale": [0.44883, 0.44883, 0.44883]
+ },
+ "firstperson_lefthand": {
+ "rotation": [-155.67, 87.24, 146.71],
+ "translation": [-0.75, 4, 2.25],
+ "scale": [0.44883, 0.44883, 0.44883]
+ },
+ "ground": {
+ "translation": [0, 2.5, 0],
+ "scale": [0.5, 0.5, 0.5]
+ },
+ "gui": {
+ "rotation": [-171.31, 28.48, -168.29],
+ "translation": [1.25, 4.75, 0],
+ "scale": [1.07695, 1.07695, 1.07695]
+ },
+ "head": {
+ "rotation": [0, -180, 0],
+ "translation": [0, 13, 0.25]
+ },
+ "fixed": {
+ "translation": [0, 4.75, 0]
+ },
+ "on_shelf": {
+ "rotation": [0, -180, 0]
+ }
+ },
+ "groups": [
+ {
+ "name": "group",
+ "origin": [8, 9, 6],
+ "scope": 0,
+ "color": 0,
+ "children": [0, 1, 2]
+ },
+ 3,
+ {
+ "name": "group",
+ "origin": [7, 12.5, 9],
+ "scope": 0,
+ "color": 0,
+ "children": [4, 5]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/_sa_food_models/01_罐头食品/canned_vegetable_soup.json b/_sa_food_models/01_罐头食品/canned_vegetable_soup.json
new file mode 100644
index 0000000..ebe76ba
--- /dev/null
+++ b/_sa_food_models/01_罐头食品/canned_vegetable_soup.json
@@ -0,0 +1,136 @@
+{
+ "format_version": "1.21.11",
+ "credit": "Made with Blockbench",
+ "texture_size": [32, 32],
+ "textures": {
+ "2": "sa_combat:item/canned_foods/canned_vegetable_soup",
+ "particle": "sa_combat:item/canned_foods/canned_vegetable_soup"
+ },
+ "elements": [
+ {
+ "from": [9.31492, 13.44415, 7],
+ "to": [11.31492, 13.44415, 9],
+ "rotation": {"angle": -22.5, "axis": "z", "origin": [3, 10, 8]},
+ "faces": {
+ "north": {"uv": [0, 0, 1, 0], "texture": "#2"},
+ "east": {"uv": [0, 0, 1, 0], "texture": "#2"},
+ "south": {"uv": [0, 0, 1, 0], "texture": "#2"},
+ "west": {"uv": [1, 0, 0, 0], "texture": "#2"},
+ "up": {"uv": [11, 3, 10, 2], "rotation": 90, "texture": "#2"},
+ "down": {"uv": [11, 3, 10, 4], "rotation": 270, "texture": "#2"}
+ }
+ },
+ {
+ "from": [3, 10, 5],
+ "to": [13, 10, 11],
+ "rotation": {"angle": 0, "axis": "x", "origin": [3, 10, 8]},
+ "faces": {
+ "north": {"uv": [0, 0, 5, 0], "texture": "#2"},
+ "east": {"uv": [0, 0, 5, 0], "texture": "#2"},
+ "south": {"uv": [0, 0, 5, 0], "texture": "#2"},
+ "west": {"uv": [0, 0, 5, 0], "texture": "#2"},
+ "up": {"uv": [10, 3, 5, 0], "texture": "#2"},
+ "down": {"uv": [10, 0, 5, 3], "texture": "#2"}
+ }
+ },
+ {
+ "from": [3, 0, 5],
+ "to": [13, 9, 11],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 5.5, 9]},
+ "faces": {
+ "north": {"uv": [0, 0, 5, 4.5], "texture": "#2"},
+ "east": {"uv": [5, 9, 8, 13.5], "texture": "#2"},
+ "south": {"uv": [0, 4.5, 5, 9], "texture": "#2"},
+ "west": {"uv": [8, 9, 5, 13.5], "texture": "#2"},
+ "up": {"uv": [5, 12, 0, 9], "texture": "#2"},
+ "down": {"uv": [10, 0, 5, 3], "texture": "#2"}
+ }
+ },
+ {
+ "from": [3, 9, 5],
+ "to": [13, 10, 11],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 13.5, 9]},
+ "faces": {
+ "north": {"uv": [10, 0, 15, 0.5], "texture": "#2"},
+ "east": {"uv": [10, 1, 13, 1.5], "texture": "#2"},
+ "south": {"uv": [10, 0.5, 15, 1], "texture": "#2"},
+ "west": {"uv": [10, 1.5, 13, 2], "texture": "#2"},
+ "up": {"uv": [10, 6, 5, 3], "texture": "#2"},
+ "down": {"uv": [10, 6, 5, 9], "texture": "#2"}
+ }
+ },
+ {
+ "name": "cube inverted",
+ "from": [13, 10, 11],
+ "to": [3, 9, 5],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 13.5, 9]},
+ "faces": {
+ "north": {"uv": [10, 1, 15, 0.5], "texture": "#2"},
+ "east": {"uv": [10, 2, 13, 1.5], "texture": "#2"},
+ "south": {"uv": [10, 0.5, 15, 0], "texture": "#2"},
+ "west": {"uv": [10, 1.5, 13, 1], "texture": "#2"},
+ "up": {"uv": [5, 6, 10, 9], "texture": "#2"},
+ "down": {"uv": [5, 6, 10, 3], "texture": "#2"}
+ }
+ }
+ ],
+ "gui_light": "front",
+ "display": {
+ "thirdperson_righthand": {
+ "rotation": [0, 90, 0],
+ "translation": [-1.25, 2.25, 2.25],
+ "scale": [0.55, 0.55, 0.55]
+ },
+ "thirdperson_lefthand": {
+ "rotation": [0, 90, 0],
+ "translation": [-1.25, 2.25, 2.25],
+ "scale": [0.55, 0.55, 0.55]
+ },
+ "firstperson_righthand": {
+ "rotation": [-155.67, 87.24, 146.71],
+ "translation": [-0.75, 4, 2.25],
+ "scale": [0.44883, 0.44883, 0.44883]
+ },
+ "firstperson_lefthand": {
+ "rotation": [-155.67, 87.24, 146.71],
+ "translation": [-0.75, 4, 2.25],
+ "scale": [0.44883, 0.44883, 0.44883]
+ },
+ "ground": {
+ "translation": [0, 2.5, 0],
+ "scale": [0.5, 0.5, 0.5]
+ },
+ "gui": {
+ "rotation": [-171.31, 28.48, -168.29],
+ "translation": [0.5, 3.25, 0],
+ "scale": [1.07695, 1.07695, 1.07695]
+ },
+ "head": {
+ "rotation": [0, -180, 0],
+ "translation": [0, 13, 0.25]
+ },
+ "fixed": {
+ "translation": [0, 4.75, 0]
+ },
+ "on_shelf": {
+ "rotation": [0, -180, 0]
+ }
+ },
+ "groups": [
+ {
+ "name": "group",
+ "origin": [8, 9, 6],
+ "scope": 0,
+ "color": 0,
+ "children": [0, 1]
+ },
+ 2,
+ {
+ "name": "group",
+ "origin": [7, 12.5, 9],
+ "scope": 0,
+ "color": 0,
+ "children": [3, 4]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/_sa_food_models/01_罐头食品/canned_vegetable_soup_open.json b/_sa_food_models/01_罐头食品/canned_vegetable_soup_open.json
new file mode 100644
index 0000000..8452645
--- /dev/null
+++ b/_sa_food_models/01_罐头食品/canned_vegetable_soup_open.json
@@ -0,0 +1,136 @@
+{
+ "format_version": "1.21.11",
+ "credit": "Made with Blockbench",
+ "texture_size": [32, 32],
+ "textures": {
+ "2": "sa_combat:item/canned_foods/canned_vegetable_soup",
+ "particle": "sa_combat:item/canned_foods/canned_vegetable_soup_p"
+ },
+ "elements": [
+ {
+ "from": [6.44415, 1.68508, 7],
+ "to": [6.44415, 3.68508, 9],
+ "rotation": {"angle": -45, "axis": "z", "origin": [3, 10, 8]},
+ "faces": {
+ "north": {"uv": [0, 0, 1, 0], "rotation": 270, "texture": "#2"},
+ "east": {"uv": [11, 3, 10, 2], "rotation": 180, "texture": "#2"},
+ "south": {"uv": [0, 0, 1, 0], "rotation": 90, "texture": "#2"},
+ "west": {"uv": [11, 3, 10, 4], "texture": "#2"},
+ "up": {"uv": [1, 0, 0, 0], "rotation": 90, "texture": "#2"},
+ "down": {"uv": [0, 0, 1, 0], "rotation": 90, "texture": "#2"}
+ }
+ },
+ {
+ "from": [3, 0, 5],
+ "to": [3, 10, 11],
+ "rotation": {"angle": -22.5, "axis": "z", "origin": [3, 10, 8]},
+ "faces": {
+ "north": {"uv": [0, 0, 5, 0], "rotation": 270, "texture": "#2"},
+ "east": {"uv": [10, 3, 5, 0], "rotation": 90, "texture": "#2"},
+ "south": {"uv": [0, 0, 5, 0], "rotation": 90, "texture": "#2"},
+ "west": {"uv": [10, 0, 5, 3], "rotation": 90, "texture": "#2"},
+ "up": {"uv": [0, 0, 5, 0], "rotation": 90, "texture": "#2"},
+ "down": {"uv": [0, 0, 5, 0], "rotation": 90, "texture": "#2"}
+ }
+ },
+ {
+ "from": [3, 0, 5],
+ "to": [13, 9, 11],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 5.5, 9]},
+ "faces": {
+ "north": {"uv": [0, 0, 5, 4.5], "texture": "#2"},
+ "east": {"uv": [5, 9, 8, 13.5], "texture": "#2"},
+ "south": {"uv": [0, 4.5, 5, 9], "texture": "#2"},
+ "west": {"uv": [8, 9, 5, 13.5], "texture": "#2"},
+ "up": {"uv": [5, 12, 0, 9], "texture": "#2"},
+ "down": {"uv": [10, 0, 5, 3], "texture": "#2"}
+ }
+ },
+ {
+ "from": [3, 9, 5],
+ "to": [13, 10, 11],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 13.5, 9]},
+ "faces": {
+ "north": {"uv": [10, 0, 15, 0.5], "texture": "#2"},
+ "east": {"uv": [10, 1, 13, 1.5], "texture": "#2"},
+ "south": {"uv": [10, 0.5, 15, 1], "texture": "#2"},
+ "west": {"uv": [10, 1.5, 13, 2], "texture": "#2"},
+ "up": {"uv": [10, 6, 5, 3], "texture": "#2"},
+ "down": {"uv": [10, 6, 5, 9], "texture": "#2"}
+ }
+ },
+ {
+ "name": "cube inverted",
+ "from": [13, 10, 11],
+ "to": [3, 9, 5],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 13.5, 9]},
+ "faces": {
+ "north": {"uv": [10, 1, 15, 0.5], "texture": "#2"},
+ "east": {"uv": [10, 2, 13, 1.5], "texture": "#2"},
+ "south": {"uv": [10, 0.5, 15, 0], "texture": "#2"},
+ "west": {"uv": [10, 1.5, 13, 1], "texture": "#2"},
+ "up": {"uv": [5, 6, 10, 9], "texture": "#2"},
+ "down": {"uv": [5, 6, 10, 3], "texture": "#2"}
+ }
+ }
+ ],
+ "gui_light": "front",
+ "display": {
+ "thirdperson_righthand": {
+ "rotation": [0, 90, 0],
+ "translation": [-1.25, 2.25, 2.25],
+ "scale": [0.55, 0.55, 0.55]
+ },
+ "thirdperson_lefthand": {
+ "rotation": [0, 90, 0],
+ "translation": [-1.25, 2.25, 2.25],
+ "scale": [0.55, 0.55, 0.55]
+ },
+ "firstperson_righthand": {
+ "rotation": [-155.67, 87.24, 146.71],
+ "translation": [-0.75, 4, 2.25],
+ "scale": [0.44883, 0.44883, 0.44883]
+ },
+ "firstperson_lefthand": {
+ "rotation": [-155.67, 87.24, 146.71],
+ "translation": [-0.75, 4, 2.25],
+ "scale": [0.44883, 0.44883, 0.44883]
+ },
+ "ground": {
+ "translation": [0, 2.5, 0],
+ "scale": [0.5, 0.5, 0.5]
+ },
+ "gui": {
+ "rotation": [-171.31, 28.48, -168.29],
+ "translation": [0.5, 3.25, 0],
+ "scale": [1.07695, 1.07695, 1.07695]
+ },
+ "head": {
+ "rotation": [0, -180, 0],
+ "translation": [0, 13, 0.25]
+ },
+ "fixed": {
+ "translation": [0, 4.75, 0]
+ },
+ "on_shelf": {
+ "rotation": [0, -180, 0]
+ }
+ },
+ "groups": [
+ {
+ "name": "group",
+ "origin": [8, 9, 6],
+ "scope": 0,
+ "color": 0,
+ "children": [0, 1]
+ },
+ 2,
+ {
+ "name": "group",
+ "origin": [7, 12.5, 9],
+ "scope": 0,
+ "color": 0,
+ "children": [3, 4]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/_sa_food_models/02_果汁饮料/apple_juice_box.json b/_sa_food_models/02_果汁饮料/apple_juice_box.json
new file mode 100644
index 0000000..a7b47a2
--- /dev/null
+++ b/_sa_food_models/02_果汁饮料/apple_juice_box.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:item/generated",
+ "textures": {
+ "layer0": "sa_combat:item/apple_juice_box"
+ }
+}
\ No newline at end of file
diff --git a/_sa_food_models/02_果汁饮料/berry_juice_box.json b/_sa_food_models/02_果汁饮料/berry_juice_box.json
new file mode 100644
index 0000000..2ed7aca
--- /dev/null
+++ b/_sa_food_models/02_果汁饮料/berry_juice_box.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:item/generated",
+ "textures": {
+ "layer0": "sa_combat:item/berry_juice_box"
+ }
+}
\ No newline at end of file
diff --git a/_sa_food_models/02_果汁饮料/grape_juice_box.json b/_sa_food_models/02_果汁饮料/grape_juice_box.json
new file mode 100644
index 0000000..09310ce
--- /dev/null
+++ b/_sa_food_models/02_果汁饮料/grape_juice_box.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:item/generated",
+ "textures": {
+ "layer0": "sa_combat:item/grape_juice_box"
+ }
+}
\ No newline at end of file
diff --git a/_sa_food_models/02_果汁饮料/milk_box.json b/_sa_food_models/02_果汁饮料/milk_box.json
new file mode 100644
index 0000000..2bc5abb
--- /dev/null
+++ b/_sa_food_models/02_果汁饮料/milk_box.json
@@ -0,0 +1,146 @@
+{
+ "format_version": "1.21.11",
+ "credit": "Made with Blockbench",
+ "texture_size": [32, 32],
+ "textures": {
+ "0": "sa_combat:item/milk_box",
+ "particle": "sa_combat:item/milk_box"
+ },
+ "elements": [
+ {
+ "from": [5, 0, 6],
+ "to": [11, 10, 10],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, -6.5, 8]},
+ "faces": {
+ "north": {"uv": [0, 0, 3, 5], "texture": "#0"},
+ "east": {"uv": [0, 5.5, 2, 10.5], "texture": "#0"},
+ "south": {"uv": [3.5, 0, 6.5, 5], "texture": "#0"},
+ "west": {"uv": [2.5, 5.5, 4.5, 10.5], "texture": "#0"},
+ "up": {"uv": [8, 7.5, 5, 5.5], "texture": "#0"},
+ "down": {"uv": [10, 0, 7, 2], "texture": "#0"}
+ }
+ },
+ {
+ "from": [5, 10, 9],
+ "to": [11, 12.8, 10],
+ "rotation": {"angle": -45, "axis": "x", "origin": [8, 10, 10]},
+ "faces": {
+ "north": {"uv": [7, 2.5, 10, 4], "texture": "#0"},
+ "east": {"uv": [8.5, 10.5, 9, 12], "texture": "#0"},
+ "south": {"uv": [5, 8, 8, 9.5], "texture": "#0"},
+ "west": {"uv": [9.5, 10.5, 10, 12], "texture": "#0"},
+ "up": {"uv": [13.5, 0.5, 10.5, 0], "texture": "#0"},
+ "down": {"uv": [13.5, 1, 10.5, 1.5], "texture": "#0"}
+ }
+ },
+ {
+ "from": [5, 10, 6],
+ "to": [11, 12.8, 7],
+ "rotation": {"angle": 45, "axis": "x", "origin": [8, 10, 6]},
+ "faces": {
+ "north": {"uv": [8.5, 4.5, 11.5, 6], "texture": "#0"},
+ "east": {"uv": [10.5, 10.5, 11, 12], "texture": "#0"},
+ "south": {"uv": [8.5, 6.5, 11.5, 8], "texture": "#0"},
+ "west": {"uv": [0, 11, 0.5, 12.5], "texture": "#0"},
+ "up": {"uv": [13.5, 2.5, 10.5, 2], "texture": "#0"},
+ "down": {"uv": [13.5, 3, 10.5, 3.5], "texture": "#0"}
+ }
+ },
+ {
+ "from": [7, 10, 5.5],
+ "to": [9, 11.9, 7],
+ "rotation": {"angle": 45, "axis": "x", "origin": [8, 10, 6]},
+ "faces": {
+ "north": {"uv": [9.5, 5, 10.5, 6], "texture": "#0"},
+ "east": {"uv": [9.5, 5, 10.5, 6], "texture": "#0"},
+ "south": {"uv": [9.5, 5, 10.5, 6], "texture": "#0"},
+ "west": {"uv": [9.5, 5, 10.5, 6], "texture": "#0"},
+ "up": {"uv": [9.5, 5, 10.5, 6], "texture": "#0"},
+ "down": {"uv": [9.5, 5, 10.5, 6], "texture": "#0"}
+ }
+ },
+ {
+ "from": [5, 10, 8],
+ "to": [11, 13, 8],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, -3.5, 8]},
+ "faces": {
+ "north": {"uv": [8.5, 8.5, 11.5, 10], "texture": "#0"},
+ "east": {"uv": [1, 11, 1, 12.5], "texture": "#0"},
+ "south": {"uv": [5, 10, 8, 11.5], "texture": "#0"},
+ "west": {"uv": [1.5, 11, 1.5, 12.5], "texture": "#0"},
+ "up": {"uv": [13.5, 4, 10.5, 4], "texture": "#0"},
+ "down": {"uv": [14.5, 10.5, 11.5, 10.5], "texture": "#0"}
+ }
+ }
+ ],
+ "display": {
+ "thirdperson_righthand": {
+ "rotation": [0, 90, 0],
+ "translation": [-1.5, 2.25, 2.25],
+ "scale": [0.5, 0.5, 0.5]
+ },
+ "thirdperson_lefthand": {
+ "rotation": [0, 90, 0],
+ "translation": [-1.5, 2.25, 2.25],
+ "scale": [0.5, 0.5, 0.5]
+ },
+ "firstperson_righthand": {
+ "rotation": [-9, 93, 0],
+ "translation": [0.5, 3.5, 2],
+ "scale": [0.5, 0.5, 0.5]
+ },
+ "firstperson_lefthand": {
+ "rotation": [-9, 93, 0],
+ "translation": [0.5, 3.5, 2],
+ "scale": [0.5, 0.5, 0.5]
+ },
+ "ground": {
+ "translation": [0, 3.25, 0],
+ "scale": [0.5, 0.5, 0.5]
+ },
+ "gui": {
+ "rotation": [-5, 137, 27],
+ "translation": [0.5, 2, 0],
+ "scale": [1.02148, 1.02148, 1.02148]
+ },
+ "head": {
+ "translation": [0, 14.25, 0]
+ },
+ "fixed": {
+ "translation": [0, 4.75, 0]
+ }
+ },
+ "groups": [
+ {
+ "name": "group",
+ "origin": [8, 4.5, 8],
+ "scope": 0,
+ "color": 0,
+ "children": [
+ {
+ "name": "group",
+ "origin": [7, 2.5, 8],
+ "scope": 0,
+ "color": 0,
+ "children": []
+ },
+ {
+ "name": "group",
+ "origin": [7, -0.5, 8],
+ "scope": 0,
+ "color": 0,
+ "children": [
+ 0,
+ {
+ "name": "group",
+ "origin": [8, 10, 10],
+ "scope": 0,
+ "color": 0,
+ "children": [1, 2, 3, 4]
+ }
+ ]
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/_sa_food_models/02_果汁饮料/milk_gallon.json b/_sa_food_models/02_果汁饮料/milk_gallon.json
new file mode 100644
index 0000000..c633a84
--- /dev/null
+++ b/_sa_food_models/02_果汁饮料/milk_gallon.json
@@ -0,0 +1,124 @@
+{
+ "format_version": "1.21.11",
+ "credit": "Made with Blockbench",
+ "texture_size": [32, 32],
+ "textures": {
+ "0": "sa_combat:item/milk_gallon",
+ "particle": "sa_combat:item/milk_gallon"
+ },
+ "elements": [
+ {
+ "from": [4, 0, 5],
+ "to": [12, 6, 11],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, -7.5, 8]},
+ "faces": {
+ "north": {"uv": [0, 0, 4, 3], "texture": "#0"},
+ "east": {"uv": [0, 7, 3, 10], "texture": "#0"},
+ "south": {"uv": [0, 3.5, 4, 6.5], "texture": "#0"},
+ "west": {"uv": [3.5, 7, 6.5, 10], "texture": "#0"},
+ "up": {"uv": [8.5, 3, 4.5, 0], "texture": "#0"},
+ "down": {"uv": [8.5, 3.5, 4.5, 6.5], "texture": "#0"}
+ }
+ },
+ {
+ "from": [5.7, 7.4, 7],
+ "to": [8.4, 8.8, 9],
+ "rotation": {"angle": 45, "axis": "z", "origin": [6.4, 7.8, 8]},
+ "faces": {
+ "north": {"uv": [12.5, 3.5, 14, 4], "texture": "#0"},
+ "east": {"uv": [8, 12.5, 9, 13], "texture": "#0"},
+ "south": {"uv": [12.5, 4.5, 14, 5], "texture": "#0"},
+ "west": {"uv": [0, 13, 1, 13.5], "texture": "#0"},
+ "up": {"uv": [4.5, 11.5, 3, 10.5], "texture": "#0"},
+ "down": {"uv": [6.5, 10.5, 5, 11.5], "texture": "#0"}
+ }
+ },
+ {
+ "from": [4.4, 5.1, 7],
+ "to": [5.8, 7.8, 9],
+ "rotation": {"angle": -22.5, "axis": "z", "origin": [5.4, 5.8, 8]},
+ "faces": {
+ "north": {"uv": [6, 12, 6.5, 13.5], "texture": "#0"},
+ "east": {"uv": [7, 10.5, 8, 12], "texture": "#0"},
+ "south": {"uv": [7, 12.5, 7.5, 14], "texture": "#0"},
+ "west": {"uv": [8.5, 10.5, 9.5, 12], "texture": "#0"},
+ "up": {"uv": [2, 14, 1.5, 13], "texture": "#0"},
+ "down": {"uv": [13.5, 8.5, 13, 9.5], "texture": "#0"}
+ }
+ },
+ {
+ "from": [7, 6, 5],
+ "to": [12, 10, 11],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, -7.5, 8]},
+ "faces": {
+ "north": {"uv": [10, 8.5, 12.5, 10.5], "texture": "#0"},
+ "east": {"uv": [9, 3.5, 12, 5.5], "texture": "#0"},
+ "south": {"uv": [0, 10.5, 2.5, 12.5], "texture": "#0"},
+ "west": {"uv": [10, 6, 13, 8], "texture": "#0"},
+ "up": {"uv": [9.5, 10, 7, 7], "texture": "#0"},
+ "down": {"uv": [11.5, 0, 9, 3], "texture": "#0"}
+ }
+ },
+ {
+ "from": [8.6, 8, 7],
+ "to": [10.6, 11, 9],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7.2, -5.5, 8]},
+ "faces": {
+ "north": {"uv": [10, 11, 11, 12.5], "texture": "#0"},
+ "east": {"uv": [11.5, 11, 12.5, 12.5], "texture": "#0"},
+ "south": {"uv": [12, 0, 13, 1.5], "texture": "#0"},
+ "west": {"uv": [3, 12, 4, 13.5], "texture": "#0"},
+ "up": {"uv": [13, 3, 12, 2], "texture": "#0"},
+ "down": {"uv": [5.5, 12, 4.5, 13], "texture": "#0"}
+ }
+ }
+ ],
+ "gui_light": "front",
+ "display": {
+ "thirdperson_righthand": {
+ "rotation": [34, 90, 0],
+ "translation": [0, 0.5, -1],
+ "scale": [0.77539, 0.77539, 0.77539]
+ },
+ "thirdperson_lefthand": {
+ "rotation": [34, -90, 0],
+ "translation": [0, 0.5, -1],
+ "scale": [0.77539, 0.77539, 0.77539]
+ },
+ "firstperson_righthand": {
+ "rotation": [-9, 102, 0],
+ "translation": [0.5, 4.5, 1],
+ "scale": [0.64063, 0.64063, 0.64063]
+ },
+ "firstperson_lefthand": {
+ "rotation": [-9, -67, 0],
+ "translation": [0.5, 4.5, 1],
+ "scale": [0.64063, 0.64063, 0.64063]
+ },
+ "ground": {
+ "translation": [0, 3.25, 0],
+ "scale": [0.5, 0.5, 0.5]
+ },
+ "gui": {
+ "rotation": [-5, 137, 27],
+ "translation": [1.5, 3.25, 0],
+ "scale": [1.28906, 1.28906, 1.28906]
+ },
+ "head": {
+ "translation": [0, 14.25, 0]
+ },
+ "fixed": {
+ "translation": [0, 6.25, 0],
+ "scale": [1.19727, 1.19727, 1.19727]
+ }
+ },
+ "groups": [
+ {
+ "name": "group",
+ "origin": [8, 4.5, 8],
+ "scope": 0,
+ "color": 0,
+ "children": [0, 1, 2, 3, 4]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/_sa_food_models/02_果汁饮料/orange_juice_box.json b/_sa_food_models/02_果汁饮料/orange_juice_box.json
new file mode 100644
index 0000000..cca7300
--- /dev/null
+++ b/_sa_food_models/02_果汁饮料/orange_juice_box.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:item/generated",
+ "textures": {
+ "layer0": "sa_combat:item/orange_juice_box"
+ }
+}
\ No newline at end of file
diff --git a/_sa_food_models/02_果汁饮料/peach_juice_bottle.json b/_sa_food_models/02_果汁饮料/peach_juice_bottle.json
new file mode 100644
index 0000000..b1bcb76
--- /dev/null
+++ b/_sa_food_models/02_果汁饮料/peach_juice_bottle.json
@@ -0,0 +1,114 @@
+{
+ "format_version": "1.21.11",
+ "credit": "Made with Blockbench",
+ "texture_size": [32, 32],
+ "textures": {
+ "2": "sa_combat:item/peach_juice_bottle",
+ "particle": "sa_combat:item/peach_juice_bottle"
+ },
+ "elements": [
+ {
+ "from": [6, 0, 7],
+ "to": [10, 9, 11],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 0, 7]},
+ "faces": {
+ "north": {"uv": [0, 0, 2, 5], "texture": "#2"},
+ "east": {"uv": [2, 0, 4, 5], "texture": "#2"},
+ "south": {"uv": [4, 0, 6, 5], "texture": "#2"},
+ "west": {"uv": [2, 0, 4, 5], "texture": "#2"},
+ "up": {"uv": [5.5, 7, 3.5, 5], "texture": "#2"},
+ "down": {"uv": [7.5, 5, 5.5, 7], "texture": "#2"}
+ }
+ },
+ {
+ "from": [6.4, 0.2, 7.5],
+ "to": [9.6, 7.2, 10.5],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 0, 7]},
+ "faces": {
+ "north": {"uv": [0.5, 2.5, 1, 3], "texture": "#2"},
+ "east": {"uv": [0.5, 2.5, 1, 3], "texture": "#2"},
+ "south": {"uv": [0.5, 2.5, 1, 3], "texture": "#2"},
+ "west": {"uv": [0.5, 2.5, 1, 3], "texture": "#2"},
+ "up": {"uv": [0.5, 2.5, 1, 3], "texture": "#2"},
+ "down": {"uv": [0.5, 2.5, 1, 3], "texture": "#2"}
+ }
+ },
+ {
+ "from": [7, 9, 8],
+ "to": [9, 11, 10],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 8, 7]},
+ "faces": {
+ "north": {"uv": [4, 0, 5, 1], "texture": "#2"},
+ "east": {"uv": [4, 0, 5, 1], "texture": "#2"},
+ "south": {"uv": [4, 0, 5, 1], "texture": "#2"},
+ "west": {"uv": [4, 0, 5, 1], "texture": "#2"},
+ "up": {"uv": [8, 1, 7, 0], "texture": "#2"},
+ "down": {"uv": [8, 7, 6, 9], "texture": "#2"}
+ }
+ },
+ {
+ "from": [6.8, 10.2, 7.8],
+ "to": [9.2, 11.6, 10.2],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 10.4, 7]},
+ "faces": {
+ "north": {"uv": [7, 4, 8, 4.5], "texture": "#2"},
+ "east": {"uv": [7, 4, 8, 4.5], "texture": "#2"},
+ "south": {"uv": [7, 4, 8, 4.5], "texture": "#2"},
+ "west": {"uv": [7, 4, 8, 4.5], "texture": "#2"},
+ "up": {"uv": [7, 3.5, 8, 4.5], "texture": "#2"},
+ "down": {"uv": [7, 3.5, 8, 4.5], "texture": "#2"}
+ }
+ }
+ ],
+ "display": {
+ "thirdperson_righthand": {
+ "rotation": [56, 64, 0],
+ "translation": [-2, 1, 3],
+ "scale": [0.73984, 0.73984, 0.73984]
+ },
+ "thirdperson_lefthand": {
+ "rotation": [56, 64, 0],
+ "translation": [-2, 1, 3],
+ "scale": [0.73984, 0.73984, 0.73984]
+ },
+ "firstperson_righthand": {
+ "rotation": [0, 96, 5],
+ "translation": [0.75, 4, 1.25],
+ "scale": [0.59531, 0.59531, 0.59531]
+ },
+ "firstperson_lefthand": {
+ "rotation": [0, 96, 5],
+ "translation": [0.75, 4, 1.25],
+ "scale": [0.59531, 0.59531, 0.59531]
+ },
+ "ground": {
+ "translation": [0, 2, 0],
+ "scale": [0.5, 0.5, 0.5]
+ },
+ "gui": {
+ "rotation": [163.78, 14.88, -166.47],
+ "translation": [0.25, 3.25, 0],
+ "scale": [1.30978, 1.30978, 1.30978]
+ },
+ "head": {
+ "rotation": [0, -180, 0],
+ "translation": [0, 13, 7]
+ },
+ "fixed": {
+ "translation": [0, 5.25, 0],
+ "scale": [1.02734, 1.02734, 1.02734]
+ },
+ "on_shelf": {
+ "rotation": [0, -180, 0]
+ }
+ },
+ "groups": [
+ {
+ "name": "group",
+ "origin": [7, 0, 7],
+ "scope": 0,
+ "color": 0,
+ "children": [0, 1, 2, 3]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/_sa_food_models/02_果汁饮料/pineapple_juice_bottle.json b/_sa_food_models/02_果汁饮料/pineapple_juice_bottle.json
new file mode 100644
index 0000000..c376019
--- /dev/null
+++ b/_sa_food_models/02_果汁饮料/pineapple_juice_bottle.json
@@ -0,0 +1,114 @@
+{
+ "format_version": "1.21.11",
+ "credit": "Made with Blockbench",
+ "texture_size": [32, 32],
+ "textures": {
+ "2": "sa_combat:item/pineapple_juice_bottle",
+ "particle": "sa_combat:item/pineapple_juice_bottle"
+ },
+ "elements": [
+ {
+ "from": [6, 0, 7],
+ "to": [10, 9, 11],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 0, 7]},
+ "faces": {
+ "north": {"uv": [0, 0, 2, 5], "texture": "#2"},
+ "east": {"uv": [2, 0, 4, 5], "texture": "#2"},
+ "south": {"uv": [4, 0, 6, 5], "texture": "#2"},
+ "west": {"uv": [2, 0, 4, 5], "texture": "#2"},
+ "up": {"uv": [5.5, 7, 3.5, 5], "texture": "#2"},
+ "down": {"uv": [7.5, 5, 5.5, 7], "texture": "#2"}
+ }
+ },
+ {
+ "from": [6.4, 0.2, 7.5],
+ "to": [9.6, 7.2, 10.5],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 0, 7]},
+ "faces": {
+ "north": {"uv": [0.5, 2.5, 1, 3], "texture": "#2"},
+ "east": {"uv": [0.5, 2.5, 1, 3], "texture": "#2"},
+ "south": {"uv": [0.5, 2.5, 1, 3], "texture": "#2"},
+ "west": {"uv": [0.5, 2.5, 1, 3], "texture": "#2"},
+ "up": {"uv": [0.5, 2.5, 1, 3], "texture": "#2"},
+ "down": {"uv": [0.5, 2.5, 1, 3], "texture": "#2"}
+ }
+ },
+ {
+ "from": [7, 9, 8],
+ "to": [9, 11, 10],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 8, 7]},
+ "faces": {
+ "north": {"uv": [4, 0, 5, 1], "texture": "#2"},
+ "east": {"uv": [4, 0, 5, 1], "texture": "#2"},
+ "south": {"uv": [4, 0, 5, 1], "texture": "#2"},
+ "west": {"uv": [4, 0, 5, 1], "texture": "#2"},
+ "up": {"uv": [8, 1, 7, 0], "texture": "#2"},
+ "down": {"uv": [8, 7, 6, 9], "texture": "#2"}
+ }
+ },
+ {
+ "from": [6.8, 10.2, 7.8],
+ "to": [9.2, 11.6, 10.2],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 10.4, 7]},
+ "faces": {
+ "north": {"uv": [7, 4, 8, 4.5], "texture": "#2"},
+ "east": {"uv": [7, 4, 8, 4.5], "texture": "#2"},
+ "south": {"uv": [7, 4, 8, 4.5], "texture": "#2"},
+ "west": {"uv": [7, 4, 8, 4.5], "texture": "#2"},
+ "up": {"uv": [7, 3.5, 8, 4.5], "texture": "#2"},
+ "down": {"uv": [7, 3.5, 8, 4.5], "texture": "#2"}
+ }
+ }
+ ],
+ "display": {
+ "thirdperson_righthand": {
+ "rotation": [56, 64, 0],
+ "translation": [-2, 1, 3],
+ "scale": [0.73984, 0.73984, 0.73984]
+ },
+ "thirdperson_lefthand": {
+ "rotation": [56, 64, 0],
+ "translation": [-2, 1, 3],
+ "scale": [0.73984, 0.73984, 0.73984]
+ },
+ "firstperson_righthand": {
+ "rotation": [0, 96, 5],
+ "translation": [0.75, 4, 1.25],
+ "scale": [0.59531, 0.59531, 0.59531]
+ },
+ "firstperson_lefthand": {
+ "rotation": [0, 96, 5],
+ "translation": [0.75, 4, 1.25],
+ "scale": [0.59531, 0.59531, 0.59531]
+ },
+ "ground": {
+ "translation": [0, 2, 0],
+ "scale": [0.5, 0.5, 0.5]
+ },
+ "gui": {
+ "rotation": [163.78, 14.88, -166.47],
+ "translation": [0.25, 3.25, 0],
+ "scale": [1.30978, 1.30978, 1.30978]
+ },
+ "head": {
+ "rotation": [0, -180, 0],
+ "translation": [0, 13, 7]
+ },
+ "fixed": {
+ "translation": [0, 5.25, 0],
+ "scale": [1.02734, 1.02734, 1.02734]
+ },
+ "on_shelf": {
+ "rotation": [0, -180, 0]
+ }
+ },
+ "groups": [
+ {
+ "name": "group",
+ "origin": [7, 0, 7],
+ "scope": 0,
+ "color": 0,
+ "children": [0, 1, 2, 3]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/_sa_food_models/03_汽水能量饮料/coffee.json b/_sa_food_models/03_汽水能量饮料/coffee.json
new file mode 100644
index 0000000..087f300
--- /dev/null
+++ b/_sa_food_models/03_汽水能量饮料/coffee.json
@@ -0,0 +1,112 @@
+{
+ "format_version": "1.21.11",
+ "credit": "Made with Blockbench",
+ "texture_size": [32, 32],
+ "textures": {
+ "0": "sa_combat:item/coffee",
+ "particle": "sa_combat:item/coffee"
+ },
+ "elements": [
+ {
+ "from": [6, 0, 6],
+ "to": [10, 5, 10],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 0, 7]},
+ "faces": {
+ "north": {"uv": [0, 0, 2, 2.5], "texture": "#0"},
+ "east": {"uv": [2.5, 0, 4.5, 2.5], "texture": "#0"},
+ "south": {"uv": [0, 3, 2, 5.5], "texture": "#0"},
+ "west": {"uv": [2.5, 3, 4.5, 5.5], "texture": "#0"},
+ "up": {"uv": [7, 2, 5, 0], "texture": "#0"},
+ "down": {"uv": [7, 2.5, 5, 4.5], "texture": "#0"}
+ }
+ },
+ {
+ "from": [5.9, 0.9, 5.9],
+ "to": [10.1, 4.1, 10.1],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 0, 7]},
+ "faces": {
+ "north": {"uv": [7.5, 5, 9.5, 6.5], "texture": "#0"},
+ "east": {"uv": [7.5, 7, 9.5, 8.5], "texture": "#0"},
+ "south": {"uv": [0, 8.5, 2, 10], "texture": "#0"},
+ "west": {"uv": [2.5, 8.5, 4.5, 10], "texture": "#0"},
+ "up": {"uv": [7, 7, 5, 5], "texture": "#0"},
+ "down": {"uv": [2, 6, 0, 8], "texture": "#0"}
+ }
+ },
+ {
+ "from": [6, 5, 6],
+ "to": [10, 7, 10],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 5, 7]},
+ "faces": {
+ "north": {"uv": [7.5, 9, 9.5, 10], "texture": "#0"},
+ "east": {"uv": [10, 0, 12, 1], "texture": "#0"},
+ "south": {"uv": [10, 1.5, 12, 2.5], "texture": "#0"},
+ "west": {"uv": [10, 3, 12, 4], "texture": "#0"},
+ "up": {"uv": [4.5, 8, 2.5, 6], "texture": "#0"},
+ "down": {"uv": [9.5, 0, 7.5, 2], "texture": "#0"}
+ }
+ },
+ {
+ "from": [5.8, 4.8, 5.8],
+ "to": [10.2, 6.2, 10.2],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 5, 7]},
+ "faces": {
+ "north": {"uv": [10, 4.5, 12, 5], "texture": "#0"},
+ "east": {"uv": [5, 10, 7, 10.5], "texture": "#0"},
+ "south": {"uv": [10, 5.5, 12, 6], "texture": "#0"},
+ "west": {"uv": [10, 6.5, 12, 7], "texture": "#0"},
+ "up": {"uv": [9.5, 4.5, 7.5, 2.5], "texture": "#0"},
+ "down": {"uv": [7, 7.5, 5, 9.5], "texture": "#0"}
+ }
+ }
+ ],
+ "gui_light": "front",
+ "display": {
+ "thirdperson_righthand": {
+ "rotation": [0, -180, 0],
+ "translation": [-1.5, 1.75, 2.25],
+ "scale": [0.61523, 0.61523, 0.61523]
+ },
+ "thirdperson_lefthand": {
+ "rotation": [0, -180, 0],
+ "translation": [-1.5, 1.75, 2.25],
+ "scale": [0.61523, 0.61523, 0.61523]
+ },
+ "firstperson_righthand": {
+ "rotation": [-9, -180, 0],
+ "translation": [-1, 5.25, 2.5],
+ "scale": [0.5586, 0.5586, 0.5586]
+ },
+ "firstperson_lefthand": {
+ "rotation": [-9, -180, 0],
+ "translation": [-1, 5.25, 2.5],
+ "scale": [0.5586, 0.5586, 0.5586]
+ },
+ "ground": {
+ "translation": [0, 3.25, 0],
+ "scale": [0.5, 0.5, 0.5]
+ },
+ "gui": {
+ "rotation": [30, -125, 16],
+ "translation": [1, 6, 0],
+ "scale": [1.39259, 1.39259, 1.39259]
+ },
+ "head": {
+ "translation": [0, 14.25, 0]
+ },
+ "fixed": {
+ "rotation": [0, 90, 0],
+ "translation": [0, 7.25, 0],
+ "scale": [1.24219, 1.24219, 1.24219]
+ }
+ },
+ "groups": [
+ {
+ "name": "group",
+ "origin": [7, 0, 7],
+ "scope": 0,
+ "color": 0,
+ "children": [0, 1, 2, 3]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/_sa_food_models/03_汽水能量饮料/cola.json b/_sa_food_models/03_汽水能量饮料/cola.json
new file mode 100644
index 0000000..df27d23
--- /dev/null
+++ b/_sa_food_models/03_汽水能量饮料/cola.json
@@ -0,0 +1,163 @@
+{
+ "format_version": "1.21.11",
+ "credit": "Made with Blockbench",
+ "texture_size": [32, 32],
+ "textures": {
+ "1": "sa_combat:item/cola"
+ },
+ "elements": [
+ {
+ "from": [5, 0, 5],
+ "to": [11, 12, 11],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 4.5, 9]},
+ "faces": {
+ "north": {"uv": [0, 0, 3, 6], "texture": "#1"},
+ "east": {"uv": [3.5, 0, 6.5, 6], "texture": "#1"},
+ "south": {"uv": [0, 6.5, 3, 12.5], "texture": "#1"},
+ "west": {"uv": [3.5, 6.5, 6.5, 12.5], "texture": "#1"},
+ "up": {"uv": [10, 3, 7, 0], "texture": "#1"},
+ "down": {"uv": [10, 3.5, 7, 6.5], "texture": "#1"}
+ }
+ },
+ {
+ "from": [5, 13, 5],
+ "to": [11, 13, 11],
+ "rotation": {"angle": 0, "axis": "x", "origin": [8, 13, 11]},
+ "faces": {
+ "north": {"uv": [10.5, 10.5, 13.5, 10.5], "texture": "#1"},
+ "east": {"uv": [10.5, 11, 13.5, 11], "texture": "#1"},
+ "south": {"uv": [7, 11.5, 10, 11.5], "texture": "#1"},
+ "west": {"uv": [10.5, 11.5, 13.5, 11.5], "texture": "#1"},
+ "up": {"uv": [10, 10, 7, 7], "texture": "#1"},
+ "down": {"uv": [13.5, 0, 10.5, 3], "texture": "#1"}
+ }
+ },
+ {
+ "from": [7, 13.55, 7.5],
+ "to": [9, 13.55, 9.5],
+ "rotation": {"angle": -45, "axis": "x", "origin": [8, 13.55, 8.5]},
+ "faces": {
+ "north": {"uv": [10.5, 10.5, 13.5, 10.5], "texture": "#missing"},
+ "east": {"uv": [10.5, 11, 13.5, 11], "texture": "#missing"},
+ "south": {"uv": [7, 11.5, 10, 11.5], "texture": "#missing"},
+ "west": {"uv": [10.5, 11.5, 13.5, 11.5], "texture": "#missing"},
+ "up": {"uv": [9, 11, 8.5, 10.5], "texture": "#1"},
+ "down": {"uv": [9.5, 9, 9, 8.5], "texture": "#1"}
+ }
+ },
+ {
+ "from": [5, 12, 11],
+ "to": [11, 13, 11],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 7.5, 9]},
+ "faces": {
+ "north": {"uv": [10.5, 3.5, 13.5, 4], "texture": "#1"},
+ "east": {"uv": [7, 12, 7, 12.5], "texture": "#1"},
+ "south": {"uv": [10.5, 4.5, 13.5, 5], "texture": "#1"},
+ "west": {"uv": [7.5, 12, 7.5, 12.5], "texture": "#1"},
+ "up": {"uv": [11, 12, 8, 12], "texture": "#1"},
+ "down": {"uv": [14.5, 12, 11.5, 12], "texture": "#1"}
+ }
+ },
+ {
+ "from": [5, 12, 5],
+ "to": [5, 13, 11],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 7.5, 9]},
+ "faces": {
+ "north": {"uv": [8, 12.5, 8, 13], "texture": "#1"},
+ "east": {"uv": [10.5, 5.5, 13.5, 6], "texture": "#1"},
+ "south": {"uv": [8.5, 12.5, 8.5, 13], "texture": "#1"},
+ "west": {"uv": [10.5, 6.5, 13.5, 7], "texture": "#1"},
+ "up": {"uv": [9, 15.5, 9, 12.5], "texture": "#1"},
+ "down": {"uv": [9.5, 12.5, 9.5, 15.5], "texture": "#1"}
+ }
+ },
+ {
+ "from": [5, 12, 5],
+ "to": [11, 13, 5],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 7.5, 9]},
+ "faces": {
+ "north": {"uv": [7, 10.5, 10, 11], "texture": "#1"},
+ "east": {"uv": [10, 12.5, 10, 13], "texture": "#1"},
+ "south": {"uv": [10.5, 7.5, 13.5, 8], "texture": "#1"},
+ "west": {"uv": [10.5, 12.5, 10.5, 13], "texture": "#1"},
+ "up": {"uv": [14, 12.5, 11, 12.5], "texture": "#1"},
+ "down": {"uv": [3, 13, 0, 13], "texture": "#1"}
+ }
+ },
+ {
+ "from": [11, 12, 5],
+ "to": [11, 13, 11],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 7.5, 9]},
+ "faces": {
+ "north": {"uv": [3.5, 13, 3.5, 13.5], "texture": "#1"},
+ "east": {"uv": [10.5, 8.5, 13.5, 9], "texture": "#1"},
+ "south": {"uv": [4, 13, 4, 13.5], "texture": "#1"},
+ "west": {"uv": [10.5, 9.5, 13.5, 10], "texture": "#1"},
+ "up": {"uv": [4.5, 16, 4.5, 13], "texture": "#1"},
+ "down": {"uv": [5, 13, 5, 16], "texture": "#1"}
+ }
+ }
+ ],
+ "display": {
+ "thirdperson_righthand": {
+ "rotation": [0, 90, 0],
+ "translation": [-1, 2.25, 2.75],
+ "scale": [0.5, 0.5, 0.5]
+ },
+ "thirdperson_lefthand": {
+ "rotation": [0, 90, 0],
+ "translation": [-1, 2.25, 2.75],
+ "scale": [0.5, 0.5, 0.5]
+ },
+ "firstperson_righthand": {
+ "rotation": [-9, 93, 0],
+ "translation": [-1.5, 3.5, 2],
+ "scale": [0.5, 0.5, 0.5]
+ },
+ "firstperson_lefthand": {
+ "rotation": [-9, 93, 0],
+ "translation": [-1.5, 3.5, 2],
+ "scale": [0.5, 0.5, 0.5]
+ },
+ "ground": {
+ "translation": [0, 3.25, 0],
+ "scale": [0.5, 0.5, 0.5]
+ },
+ "gui": {
+ "rotation": [-171.31, 28.48, -168.29],
+ "translation": [0, 1.5, 0],
+ "scale": [1.02812, 1.02812, 1.02812]
+ },
+ "head": {
+ "translation": [0, 14.25, 0]
+ },
+ "fixed": {
+ "translation": [0, 4, 0],
+ "scale": [0.85938, 0.85938, 0.85938]
+ }
+ },
+ "groups": [
+ {
+ "name": "group",
+ "origin": [8, 4.5, 8],
+ "scope": 0,
+ "color": 0,
+ "children": [
+ {
+ "name": "group",
+ "origin": [8, 4.5, 8],
+ "scope": 0,
+ "color": 0,
+ "children": [0]
+ },
+ {
+ "name": "group",
+ "origin": [8, 4.5, 8],
+ "scope": 0,
+ "color": 0,
+ "children": [1, 2, 3, 4, 5, 6]
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/_sa_food_models/03_汽水能量饮料/energy_drink.json b/_sa_food_models/03_汽水能量饮料/energy_drink.json
new file mode 100644
index 0000000..ef3a975
--- /dev/null
+++ b/_sa_food_models/03_汽水能量饮料/energy_drink.json
@@ -0,0 +1,163 @@
+{
+ "format_version": "1.21.11",
+ "credit": "Made with Blockbench",
+ "texture_size": [32, 32],
+ "textures": {
+ "1": "sa_combat:item/energy_drink"
+ },
+ "elements": [
+ {
+ "from": [5, 0, 5],
+ "to": [11, 12, 11],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 4.5, 9]},
+ "faces": {
+ "north": {"uv": [0, 0, 3, 6], "texture": "#1"},
+ "east": {"uv": [3.5, 0, 6.5, 6], "texture": "#1"},
+ "south": {"uv": [0, 6.5, 3, 12.5], "texture": "#1"},
+ "west": {"uv": [3.5, 6.5, 6.5, 12.5], "texture": "#1"},
+ "up": {"uv": [10, 3, 7, 0], "texture": "#1"},
+ "down": {"uv": [10, 3.5, 7, 6.5], "texture": "#1"}
+ }
+ },
+ {
+ "from": [5, 13, 5],
+ "to": [11, 13, 11],
+ "rotation": {"angle": 0, "axis": "x", "origin": [8, 13, 11]},
+ "faces": {
+ "north": {"uv": [10.5, 10.5, 13.5, 10.5], "texture": "#1"},
+ "east": {"uv": [10.5, 11, 13.5, 11], "texture": "#1"},
+ "south": {"uv": [7, 11.5, 10, 11.5], "texture": "#1"},
+ "west": {"uv": [10.5, 11.5, 13.5, 11.5], "texture": "#1"},
+ "up": {"uv": [10, 10, 7, 7], "texture": "#1"},
+ "down": {"uv": [13.5, 0, 10.5, 3], "texture": "#1"}
+ }
+ },
+ {
+ "from": [7, 13.55, 7.5],
+ "to": [9, 13.55, 9.5],
+ "rotation": {"angle": -45, "axis": "x", "origin": [8, 13.55, 8.5]},
+ "faces": {
+ "north": {"uv": [10.5, 10.5, 13.5, 10.5], "texture": "#missing"},
+ "east": {"uv": [10.5, 11, 13.5, 11], "texture": "#missing"},
+ "south": {"uv": [7, 11.5, 10, 11.5], "texture": "#missing"},
+ "west": {"uv": [10.5, 11.5, 13.5, 11.5], "texture": "#missing"},
+ "up": {"uv": [9, 11, 8.5, 10.5], "texture": "#1"},
+ "down": {"uv": [9.5, 9, 9, 8.5], "texture": "#1"}
+ }
+ },
+ {
+ "from": [5, 12, 11],
+ "to": [11, 13, 11],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 7.5, 9]},
+ "faces": {
+ "north": {"uv": [10.5, 3.5, 13.5, 4], "texture": "#1"},
+ "east": {"uv": [7, 12, 7, 12.5], "texture": "#1"},
+ "south": {"uv": [10.5, 4.5, 13.5, 5], "texture": "#1"},
+ "west": {"uv": [7.5, 12, 7.5, 12.5], "texture": "#1"},
+ "up": {"uv": [11, 12, 8, 12], "texture": "#1"},
+ "down": {"uv": [14.5, 12, 11.5, 12], "texture": "#1"}
+ }
+ },
+ {
+ "from": [5, 12, 5],
+ "to": [5, 13, 11],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 7.5, 9]},
+ "faces": {
+ "north": {"uv": [8, 12.5, 8, 13], "texture": "#1"},
+ "east": {"uv": [10.5, 5.5, 13.5, 6], "texture": "#1"},
+ "south": {"uv": [8.5, 12.5, 8.5, 13], "texture": "#1"},
+ "west": {"uv": [10.5, 6.5, 13.5, 7], "texture": "#1"},
+ "up": {"uv": [9, 15.5, 9, 12.5], "texture": "#1"},
+ "down": {"uv": [9.5, 12.5, 9.5, 15.5], "texture": "#1"}
+ }
+ },
+ {
+ "from": [5, 12, 5],
+ "to": [11, 13, 5],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 7.5, 9]},
+ "faces": {
+ "north": {"uv": [7, 10.5, 10, 11], "texture": "#1"},
+ "east": {"uv": [10, 12.5, 10, 13], "texture": "#1"},
+ "south": {"uv": [10.5, 7.5, 13.5, 8], "texture": "#1"},
+ "west": {"uv": [10.5, 12.5, 10.5, 13], "texture": "#1"},
+ "up": {"uv": [14, 12.5, 11, 12.5], "texture": "#1"},
+ "down": {"uv": [3, 13, 0, 13], "texture": "#1"}
+ }
+ },
+ {
+ "from": [11, 12, 5],
+ "to": [11, 13, 11],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 7.5, 9]},
+ "faces": {
+ "north": {"uv": [3.5, 13, 3.5, 13.5], "texture": "#1"},
+ "east": {"uv": [10.5, 8.5, 13.5, 9], "texture": "#1"},
+ "south": {"uv": [4, 13, 4, 13.5], "texture": "#1"},
+ "west": {"uv": [10.5, 9.5, 13.5, 10], "texture": "#1"},
+ "up": {"uv": [4.5, 16, 4.5, 13], "texture": "#1"},
+ "down": {"uv": [5, 13, 5, 16], "texture": "#1"}
+ }
+ }
+ ],
+ "display": {
+ "thirdperson_righthand": {
+ "rotation": [0, 90, 0],
+ "translation": [-1, 2.25, 2.75],
+ "scale": [0.5, 0.5, 0.5]
+ },
+ "thirdperson_lefthand": {
+ "rotation": [0, 90, 0],
+ "translation": [-1, 2.25, 2.75],
+ "scale": [0.5, 0.5, 0.5]
+ },
+ "firstperson_righthand": {
+ "rotation": [-9, 93, 0],
+ "translation": [-1.5, 3.5, 2],
+ "scale": [0.5, 0.5, 0.5]
+ },
+ "firstperson_lefthand": {
+ "rotation": [-9, 93, 0],
+ "translation": [-1.5, 3.5, 2],
+ "scale": [0.5, 0.5, 0.5]
+ },
+ "ground": {
+ "translation": [0, 3.25, 0],
+ "scale": [0.5, 0.5, 0.5]
+ },
+ "gui": {
+ "rotation": [-171.31, 28.48, -168.29],
+ "translation": [0, 1.5, 0],
+ "scale": [1.02812, 1.02812, 1.02812]
+ },
+ "head": {
+ "translation": [0, 14.25, 0]
+ },
+ "fixed": {
+ "translation": [0, 4, 0],
+ "scale": [0.85938, 0.85938, 0.85938]
+ }
+ },
+ "groups": [
+ {
+ "name": "group",
+ "origin": [8, 4.5, 8],
+ "scope": 0,
+ "color": 0,
+ "children": [
+ {
+ "name": "group",
+ "origin": [8, 4.5, 8],
+ "scope": 0,
+ "color": 0,
+ "children": [0]
+ },
+ {
+ "name": "group",
+ "origin": [8, 4.5, 8],
+ "scope": 0,
+ "color": 0,
+ "children": [1, 2, 3, 4, 5, 6]
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/_sa_food_models/03_汽水能量饮料/fanta_grape_soda.json b/_sa_food_models/03_汽水能量饮料/fanta_grape_soda.json
new file mode 100644
index 0000000..f51c683
--- /dev/null
+++ b/_sa_food_models/03_汽水能量饮料/fanta_grape_soda.json
@@ -0,0 +1,163 @@
+{
+ "format_version": "1.21.11",
+ "credit": "Made with Blockbench",
+ "texture_size": [32, 32],
+ "textures": {
+ "1": "sa_combat:item/fanta_grape_soda"
+ },
+ "elements": [
+ {
+ "from": [5, 0, 5],
+ "to": [11, 12, 11],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 4.5, 9]},
+ "faces": {
+ "north": {"uv": [0, 0, 3, 6], "texture": "#1"},
+ "east": {"uv": [3.5, 0, 6.5, 6], "texture": "#1"},
+ "south": {"uv": [0, 6.5, 3, 12.5], "texture": "#1"},
+ "west": {"uv": [3.5, 6.5, 6.5, 12.5], "texture": "#1"},
+ "up": {"uv": [10, 3, 7, 0], "texture": "#1"},
+ "down": {"uv": [10, 3.5, 7, 6.5], "texture": "#1"}
+ }
+ },
+ {
+ "from": [5, 13, 5],
+ "to": [11, 13, 11],
+ "rotation": {"angle": 0, "axis": "x", "origin": [8, 13, 11]},
+ "faces": {
+ "north": {"uv": [10.5, 10.5, 13.5, 10.5], "texture": "#1"},
+ "east": {"uv": [10.5, 11, 13.5, 11], "texture": "#1"},
+ "south": {"uv": [7, 11.5, 10, 11.5], "texture": "#1"},
+ "west": {"uv": [10.5, 11.5, 13.5, 11.5], "texture": "#1"},
+ "up": {"uv": [10, 10, 7, 7], "texture": "#1"},
+ "down": {"uv": [13.5, 0, 10.5, 3], "texture": "#1"}
+ }
+ },
+ {
+ "from": [7, 13.55, 7.5],
+ "to": [9, 13.55, 9.5],
+ "rotation": {"angle": -45, "axis": "x", "origin": [8, 13.55, 8.5]},
+ "faces": {
+ "north": {"uv": [10.5, 10.5, 13.5, 10.5], "texture": "#missing"},
+ "east": {"uv": [10.5, 11, 13.5, 11], "texture": "#missing"},
+ "south": {"uv": [7, 11.5, 10, 11.5], "texture": "#missing"},
+ "west": {"uv": [10.5, 11.5, 13.5, 11.5], "texture": "#missing"},
+ "up": {"uv": [9, 11, 8.5, 10.5], "texture": "#1"},
+ "down": {"uv": [9.5, 9, 9, 8.5], "texture": "#1"}
+ }
+ },
+ {
+ "from": [5, 12, 11],
+ "to": [11, 13, 11],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 7.5, 9]},
+ "faces": {
+ "north": {"uv": [10.5, 3.5, 13.5, 4], "texture": "#1"},
+ "east": {"uv": [7, 12, 7, 12.5], "texture": "#1"},
+ "south": {"uv": [10.5, 4.5, 13.5, 5], "texture": "#1"},
+ "west": {"uv": [7.5, 12, 7.5, 12.5], "texture": "#1"},
+ "up": {"uv": [11, 12, 8, 12], "texture": "#1"},
+ "down": {"uv": [14.5, 12, 11.5, 12], "texture": "#1"}
+ }
+ },
+ {
+ "from": [5, 12, 5],
+ "to": [5, 13, 11],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 7.5, 9]},
+ "faces": {
+ "north": {"uv": [8, 12.5, 8, 13], "texture": "#1"},
+ "east": {"uv": [10.5, 5.5, 13.5, 6], "texture": "#1"},
+ "south": {"uv": [8.5, 12.5, 8.5, 13], "texture": "#1"},
+ "west": {"uv": [10.5, 6.5, 13.5, 7], "texture": "#1"},
+ "up": {"uv": [9, 15.5, 9, 12.5], "texture": "#1"},
+ "down": {"uv": [9.5, 12.5, 9.5, 15.5], "texture": "#1"}
+ }
+ },
+ {
+ "from": [5, 12, 5],
+ "to": [11, 13, 5],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 7.5, 9]},
+ "faces": {
+ "north": {"uv": [7, 10.5, 10, 11], "texture": "#1"},
+ "east": {"uv": [10, 12.5, 10, 13], "texture": "#1"},
+ "south": {"uv": [10.5, 7.5, 13.5, 8], "texture": "#1"},
+ "west": {"uv": [10.5, 12.5, 10.5, 13], "texture": "#1"},
+ "up": {"uv": [14, 12.5, 11, 12.5], "texture": "#1"},
+ "down": {"uv": [3, 13, 0, 13], "texture": "#1"}
+ }
+ },
+ {
+ "from": [11, 12, 5],
+ "to": [11, 13, 11],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 7.5, 9]},
+ "faces": {
+ "north": {"uv": [3.5, 13, 3.5, 13.5], "texture": "#1"},
+ "east": {"uv": [10.5, 8.5, 13.5, 9], "texture": "#1"},
+ "south": {"uv": [4, 13, 4, 13.5], "texture": "#1"},
+ "west": {"uv": [10.5, 9.5, 13.5, 10], "texture": "#1"},
+ "up": {"uv": [4.5, 16, 4.5, 13], "texture": "#1"},
+ "down": {"uv": [5, 13, 5, 16], "texture": "#1"}
+ }
+ }
+ ],
+ "display": {
+ "thirdperson_righthand": {
+ "rotation": [0, 90, 0],
+ "translation": [-1, 2.25, 2.75],
+ "scale": [0.5, 0.5, 0.5]
+ },
+ "thirdperson_lefthand": {
+ "rotation": [0, 90, 0],
+ "translation": [-1, 2.25, 2.75],
+ "scale": [0.5, 0.5, 0.5]
+ },
+ "firstperson_righthand": {
+ "rotation": [-9, 93, 0],
+ "translation": [-1.5, 3.5, 2],
+ "scale": [0.5, 0.5, 0.5]
+ },
+ "firstperson_lefthand": {
+ "rotation": [-9, 93, 0],
+ "translation": [-1.5, 3.5, 2],
+ "scale": [0.5, 0.5, 0.5]
+ },
+ "ground": {
+ "translation": [0, 3.25, 0],
+ "scale": [0.5, 0.5, 0.5]
+ },
+ "gui": {
+ "rotation": [-171.31, 28.48, -168.29],
+ "translation": [0, 1.5, 0],
+ "scale": [1.02812, 1.02812, 1.02812]
+ },
+ "head": {
+ "translation": [0, 14.25, 0]
+ },
+ "fixed": {
+ "translation": [0, 4, 0],
+ "scale": [0.85938, 0.85938, 0.85938]
+ }
+ },
+ "groups": [
+ {
+ "name": "group",
+ "origin": [8, 4.5, 8],
+ "scope": 0,
+ "color": 0,
+ "children": [
+ {
+ "name": "group",
+ "origin": [8, 4.5, 8],
+ "scope": 0,
+ "color": 0,
+ "children": [0]
+ },
+ {
+ "name": "group",
+ "origin": [8, 4.5, 8],
+ "scope": 0,
+ "color": 0,
+ "children": [1, 2, 3, 4, 5, 6]
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/_sa_food_models/03_汽水能量饮料/fanta_orange_soda.json b/_sa_food_models/03_汽水能量饮料/fanta_orange_soda.json
new file mode 100644
index 0000000..2dcad93
--- /dev/null
+++ b/_sa_food_models/03_汽水能量饮料/fanta_orange_soda.json
@@ -0,0 +1,163 @@
+{
+ "format_version": "1.21.11",
+ "credit": "Made with Blockbench",
+ "texture_size": [32, 32],
+ "textures": {
+ "1": "sa_combat:item/fanta_orange_soda"
+ },
+ "elements": [
+ {
+ "from": [5, 0, 5],
+ "to": [11, 12, 11],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 4.5, 9]},
+ "faces": {
+ "north": {"uv": [0, 0, 3, 6], "texture": "#1"},
+ "east": {"uv": [3.5, 0, 6.5, 6], "texture": "#1"},
+ "south": {"uv": [0, 6.5, 3, 12.5], "texture": "#1"},
+ "west": {"uv": [3.5, 6.5, 6.5, 12.5], "texture": "#1"},
+ "up": {"uv": [10, 3, 7, 0], "texture": "#1"},
+ "down": {"uv": [10, 3.5, 7, 6.5], "texture": "#1"}
+ }
+ },
+ {
+ "from": [5, 13, 5],
+ "to": [11, 13, 11],
+ "rotation": {"angle": 0, "axis": "x", "origin": [8, 13, 11]},
+ "faces": {
+ "north": {"uv": [10.5, 10.5, 13.5, 10.5], "texture": "#1"},
+ "east": {"uv": [10.5, 11, 13.5, 11], "texture": "#1"},
+ "south": {"uv": [7, 11.5, 10, 11.5], "texture": "#1"},
+ "west": {"uv": [10.5, 11.5, 13.5, 11.5], "texture": "#1"},
+ "up": {"uv": [10, 10, 7, 7], "texture": "#1"},
+ "down": {"uv": [13.5, 0, 10.5, 3], "texture": "#1"}
+ }
+ },
+ {
+ "from": [7, 13.55, 7.5],
+ "to": [9, 13.55, 9.5],
+ "rotation": {"angle": -45, "axis": "x", "origin": [8, 13.55, 8.5]},
+ "faces": {
+ "north": {"uv": [10.5, 10.5, 13.5, 10.5], "texture": "#missing"},
+ "east": {"uv": [10.5, 11, 13.5, 11], "texture": "#missing"},
+ "south": {"uv": [7, 11.5, 10, 11.5], "texture": "#missing"},
+ "west": {"uv": [10.5, 11.5, 13.5, 11.5], "texture": "#missing"},
+ "up": {"uv": [9, 11, 8.5, 10.5], "texture": "#1"},
+ "down": {"uv": [9.5, 9, 9, 8.5], "texture": "#1"}
+ }
+ },
+ {
+ "from": [5, 12, 11],
+ "to": [11, 13, 11],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 7.5, 9]},
+ "faces": {
+ "north": {"uv": [10.5, 3.5, 13.5, 4], "texture": "#1"},
+ "east": {"uv": [7, 12, 7, 12.5], "texture": "#1"},
+ "south": {"uv": [10.5, 4.5, 13.5, 5], "texture": "#1"},
+ "west": {"uv": [7.5, 12, 7.5, 12.5], "texture": "#1"},
+ "up": {"uv": [11, 12, 8, 12], "texture": "#1"},
+ "down": {"uv": [14.5, 12, 11.5, 12], "texture": "#1"}
+ }
+ },
+ {
+ "from": [5, 12, 5],
+ "to": [5, 13, 11],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 7.5, 9]},
+ "faces": {
+ "north": {"uv": [8, 12.5, 8, 13], "texture": "#1"},
+ "east": {"uv": [10.5, 5.5, 13.5, 6], "texture": "#1"},
+ "south": {"uv": [8.5, 12.5, 8.5, 13], "texture": "#1"},
+ "west": {"uv": [10.5, 6.5, 13.5, 7], "texture": "#1"},
+ "up": {"uv": [9, 15.5, 9, 12.5], "texture": "#1"},
+ "down": {"uv": [9.5, 12.5, 9.5, 15.5], "texture": "#1"}
+ }
+ },
+ {
+ "from": [5, 12, 5],
+ "to": [11, 13, 5],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 7.5, 9]},
+ "faces": {
+ "north": {"uv": [7, 10.5, 10, 11], "texture": "#1"},
+ "east": {"uv": [10, 12.5, 10, 13], "texture": "#1"},
+ "south": {"uv": [10.5, 7.5, 13.5, 8], "texture": "#1"},
+ "west": {"uv": [10.5, 12.5, 10.5, 13], "texture": "#1"},
+ "up": {"uv": [14, 12.5, 11, 12.5], "texture": "#1"},
+ "down": {"uv": [3, 13, 0, 13], "texture": "#1"}
+ }
+ },
+ {
+ "from": [11, 12, 5],
+ "to": [11, 13, 11],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 7.5, 9]},
+ "faces": {
+ "north": {"uv": [3.5, 13, 3.5, 13.5], "texture": "#1"},
+ "east": {"uv": [10.5, 8.5, 13.5, 9], "texture": "#1"},
+ "south": {"uv": [4, 13, 4, 13.5], "texture": "#1"},
+ "west": {"uv": [10.5, 9.5, 13.5, 10], "texture": "#1"},
+ "up": {"uv": [4.5, 16, 4.5, 13], "texture": "#1"},
+ "down": {"uv": [5, 13, 5, 16], "texture": "#1"}
+ }
+ }
+ ],
+ "display": {
+ "thirdperson_righthand": {
+ "rotation": [0, 90, 0],
+ "translation": [-1, 2.25, 2.75],
+ "scale": [0.5, 0.5, 0.5]
+ },
+ "thirdperson_lefthand": {
+ "rotation": [0, 90, 0],
+ "translation": [-1, 2.25, 2.75],
+ "scale": [0.5, 0.5, 0.5]
+ },
+ "firstperson_righthand": {
+ "rotation": [-9, 93, 0],
+ "translation": [-1.5, 3.5, 2],
+ "scale": [0.5, 0.5, 0.5]
+ },
+ "firstperson_lefthand": {
+ "rotation": [-9, 93, 0],
+ "translation": [-1.5, 3.5, 2],
+ "scale": [0.5, 0.5, 0.5]
+ },
+ "ground": {
+ "translation": [0, 3.25, 0],
+ "scale": [0.5, 0.5, 0.5]
+ },
+ "gui": {
+ "rotation": [-171.31, 28.48, -168.29],
+ "translation": [0, 1.5, 0],
+ "scale": [1.02812, 1.02812, 1.02812]
+ },
+ "head": {
+ "translation": [0, 14.25, 0]
+ },
+ "fixed": {
+ "translation": [0, 4, 0],
+ "scale": [0.85938, 0.85938, 0.85938]
+ }
+ },
+ "groups": [
+ {
+ "name": "group",
+ "origin": [8, 4.5, 8],
+ "scope": 0,
+ "color": 0,
+ "children": [
+ {
+ "name": "group",
+ "origin": [8, 4.5, 8],
+ "scope": 0,
+ "color": 0,
+ "children": [0]
+ },
+ {
+ "name": "group",
+ "origin": [8, 4.5, 8],
+ "scope": 0,
+ "color": 0,
+ "children": [1, 2, 3, 4, 5, 6]
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/_sa_food_models/03_汽水能量饮料/guarana_soda.json b/_sa_food_models/03_汽水能量饮料/guarana_soda.json
new file mode 100644
index 0000000..8d07921
--- /dev/null
+++ b/_sa_food_models/03_汽水能量饮料/guarana_soda.json
@@ -0,0 +1,163 @@
+{
+ "format_version": "1.21.11",
+ "credit": "Made with Blockbench",
+ "texture_size": [32, 32],
+ "textures": {
+ "1": "sa_combat:item/guarana_soda"
+ },
+ "elements": [
+ {
+ "from": [5, 0, 5],
+ "to": [11, 12, 11],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 4.5, 9]},
+ "faces": {
+ "north": {"uv": [0, 0, 3, 6], "texture": "#1"},
+ "east": {"uv": [3.5, 0, 6.5, 6], "texture": "#1"},
+ "south": {"uv": [0, 6.5, 3, 12.5], "texture": "#1"},
+ "west": {"uv": [3.5, 6.5, 6.5, 12.5], "texture": "#1"},
+ "up": {"uv": [10, 3, 7, 0], "texture": "#1"},
+ "down": {"uv": [10, 3.5, 7, 6.5], "texture": "#1"}
+ }
+ },
+ {
+ "from": [5, 13, 5],
+ "to": [11, 13, 11],
+ "rotation": {"angle": 0, "axis": "x", "origin": [8, 13, 11]},
+ "faces": {
+ "north": {"uv": [10.5, 10.5, 13.5, 10.5], "texture": "#1"},
+ "east": {"uv": [10.5, 11, 13.5, 11], "texture": "#1"},
+ "south": {"uv": [7, 11.5, 10, 11.5], "texture": "#1"},
+ "west": {"uv": [10.5, 11.5, 13.5, 11.5], "texture": "#1"},
+ "up": {"uv": [10, 10, 7, 7], "texture": "#1"},
+ "down": {"uv": [13.5, 0, 10.5, 3], "texture": "#1"}
+ }
+ },
+ {
+ "from": [7, 13.55, 7.5],
+ "to": [9, 13.55, 9.5],
+ "rotation": {"angle": -45, "axis": "x", "origin": [8, 13.55, 8.5]},
+ "faces": {
+ "north": {"uv": [10.5, 10.5, 13.5, 10.5], "texture": "#missing"},
+ "east": {"uv": [10.5, 11, 13.5, 11], "texture": "#missing"},
+ "south": {"uv": [7, 11.5, 10, 11.5], "texture": "#missing"},
+ "west": {"uv": [10.5, 11.5, 13.5, 11.5], "texture": "#missing"},
+ "up": {"uv": [9, 11, 8.5, 10.5], "texture": "#1"},
+ "down": {"uv": [9.5, 9, 9, 8.5], "texture": "#1"}
+ }
+ },
+ {
+ "from": [5, 12, 11],
+ "to": [11, 13, 11],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 7.5, 9]},
+ "faces": {
+ "north": {"uv": [10.5, 3.5, 13.5, 4], "texture": "#1"},
+ "east": {"uv": [7, 12, 7, 12.5], "texture": "#1"},
+ "south": {"uv": [10.5, 4.5, 13.5, 5], "texture": "#1"},
+ "west": {"uv": [7.5, 12, 7.5, 12.5], "texture": "#1"},
+ "up": {"uv": [11, 12, 8, 12], "texture": "#1"},
+ "down": {"uv": [14.5, 12, 11.5, 12], "texture": "#1"}
+ }
+ },
+ {
+ "from": [5, 12, 5],
+ "to": [5, 13, 11],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 7.5, 9]},
+ "faces": {
+ "north": {"uv": [8, 12.5, 8, 13], "texture": "#1"},
+ "east": {"uv": [10.5, 5.5, 13.5, 6], "texture": "#1"},
+ "south": {"uv": [8.5, 12.5, 8.5, 13], "texture": "#1"},
+ "west": {"uv": [10.5, 6.5, 13.5, 7], "texture": "#1"},
+ "up": {"uv": [9, 15.5, 9, 12.5], "texture": "#1"},
+ "down": {"uv": [9.5, 12.5, 9.5, 15.5], "texture": "#1"}
+ }
+ },
+ {
+ "from": [5, 12, 5],
+ "to": [11, 13, 5],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 7.5, 9]},
+ "faces": {
+ "north": {"uv": [7, 10.5, 10, 11], "texture": "#1"},
+ "east": {"uv": [10, 12.5, 10, 13], "texture": "#1"},
+ "south": {"uv": [10.5, 7.5, 13.5, 8], "texture": "#1"},
+ "west": {"uv": [10.5, 12.5, 10.5, 13], "texture": "#1"},
+ "up": {"uv": [14, 12.5, 11, 12.5], "texture": "#1"},
+ "down": {"uv": [3, 13, 0, 13], "texture": "#1"}
+ }
+ },
+ {
+ "from": [11, 12, 5],
+ "to": [11, 13, 11],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 7.5, 9]},
+ "faces": {
+ "north": {"uv": [3.5, 13, 3.5, 13.5], "texture": "#1"},
+ "east": {"uv": [10.5, 8.5, 13.5, 9], "texture": "#1"},
+ "south": {"uv": [4, 13, 4, 13.5], "texture": "#1"},
+ "west": {"uv": [10.5, 9.5, 13.5, 10], "texture": "#1"},
+ "up": {"uv": [4.5, 16, 4.5, 13], "texture": "#1"},
+ "down": {"uv": [5, 13, 5, 16], "texture": "#1"}
+ }
+ }
+ ],
+ "display": {
+ "thirdperson_righthand": {
+ "rotation": [0, 90, 0],
+ "translation": [-1, 2.25, 2.75],
+ "scale": [0.5, 0.5, 0.5]
+ },
+ "thirdperson_lefthand": {
+ "rotation": [0, 90, 0],
+ "translation": [-1, 2.25, 2.75],
+ "scale": [0.5, 0.5, 0.5]
+ },
+ "firstperson_righthand": {
+ "rotation": [-9, 93, 0],
+ "translation": [-1.5, 3.5, 2],
+ "scale": [0.5, 0.5, 0.5]
+ },
+ "firstperson_lefthand": {
+ "rotation": [-9, 93, 0],
+ "translation": [-1.5, 3.5, 2],
+ "scale": [0.5, 0.5, 0.5]
+ },
+ "ground": {
+ "translation": [0, 3.25, 0],
+ "scale": [0.5, 0.5, 0.5]
+ },
+ "gui": {
+ "rotation": [-171.31, 28.48, -168.29],
+ "translation": [0, 1.5, 0],
+ "scale": [1.02812, 1.02812, 1.02812]
+ },
+ "head": {
+ "translation": [0, 14.25, 0]
+ },
+ "fixed": {
+ "translation": [0, 4, 0],
+ "scale": [0.85938, 0.85938, 0.85938]
+ }
+ },
+ "groups": [
+ {
+ "name": "group",
+ "origin": [8, 4.5, 8],
+ "scope": 0,
+ "color": 0,
+ "children": [
+ {
+ "name": "group",
+ "origin": [8, 4.5, 8],
+ "scope": 0,
+ "color": 0,
+ "children": [0]
+ },
+ {
+ "name": "group",
+ "origin": [8, 4.5, 8],
+ "scope": 0,
+ "color": 0,
+ "children": [1, 2, 3, 4, 5, 6]
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/_sa_food_models/03_汽水能量饮料/monster.json b/_sa_food_models/03_汽水能量饮料/monster.json
new file mode 100644
index 0000000..b18aa07
--- /dev/null
+++ b/_sa_food_models/03_汽水能量饮料/monster.json
@@ -0,0 +1,163 @@
+{
+ "format_version": "1.21.11",
+ "credit": "Made with Blockbench",
+ "texture_size": [32, 32],
+ "textures": {
+ "1": "sa_combat:item/monster"
+ },
+ "elements": [
+ {
+ "from": [5, 0, 5],
+ "to": [11, 12, 11],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 4.5, 9]},
+ "faces": {
+ "north": {"uv": [0, 0, 3, 6], "texture": "#1"},
+ "east": {"uv": [3.5, 0, 6.5, 6], "texture": "#1"},
+ "south": {"uv": [0, 6.5, 3, 12.5], "texture": "#1"},
+ "west": {"uv": [3.5, 6.5, 6.5, 12.5], "texture": "#1"},
+ "up": {"uv": [10, 3, 7, 0], "texture": "#1"},
+ "down": {"uv": [10, 3.5, 7, 6.5], "texture": "#1"}
+ }
+ },
+ {
+ "from": [5, 13, 5],
+ "to": [11, 13, 11],
+ "rotation": {"angle": 0, "axis": "x", "origin": [8, 13, 11]},
+ "faces": {
+ "north": {"uv": [10.5, 10.5, 13.5, 10.5], "texture": "#1"},
+ "east": {"uv": [10.5, 11, 13.5, 11], "texture": "#1"},
+ "south": {"uv": [7, 11.5, 10, 11.5], "texture": "#1"},
+ "west": {"uv": [10.5, 11.5, 13.5, 11.5], "texture": "#1"},
+ "up": {"uv": [10, 10, 7, 7], "texture": "#1"},
+ "down": {"uv": [13.5, 0, 10.5, 3], "texture": "#1"}
+ }
+ },
+ {
+ "from": [7, 13.55, 7.5],
+ "to": [9, 13.55, 9.5],
+ "rotation": {"angle": -45, "axis": "x", "origin": [8, 13.55, 8.5]},
+ "faces": {
+ "north": {"uv": [10.5, 10.5, 13.5, 10.5], "texture": "#missing"},
+ "east": {"uv": [10.5, 11, 13.5, 11], "texture": "#missing"},
+ "south": {"uv": [7, 11.5, 10, 11.5], "texture": "#missing"},
+ "west": {"uv": [10.5, 11.5, 13.5, 11.5], "texture": "#missing"},
+ "up": {"uv": [9, 11, 8.5, 10.5], "texture": "#1"},
+ "down": {"uv": [9.5, 9, 9, 8.5], "texture": "#1"}
+ }
+ },
+ {
+ "from": [5, 12, 11],
+ "to": [11, 13, 11],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 7.5, 9]},
+ "faces": {
+ "north": {"uv": [10.5, 3.5, 13.5, 4], "texture": "#1"},
+ "east": {"uv": [7, 12, 7, 12.5], "texture": "#1"},
+ "south": {"uv": [10.5, 4.5, 13.5, 5], "texture": "#1"},
+ "west": {"uv": [7.5, 12, 7.5, 12.5], "texture": "#1"},
+ "up": {"uv": [11, 12, 8, 12], "texture": "#1"},
+ "down": {"uv": [14.5, 12, 11.5, 12], "texture": "#1"}
+ }
+ },
+ {
+ "from": [5, 12, 5],
+ "to": [5, 13, 11],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 7.5, 9]},
+ "faces": {
+ "north": {"uv": [8, 12.5, 8, 13], "texture": "#1"},
+ "east": {"uv": [10.5, 5.5, 13.5, 6], "texture": "#1"},
+ "south": {"uv": [8.5, 12.5, 8.5, 13], "texture": "#1"},
+ "west": {"uv": [10.5, 6.5, 13.5, 7], "texture": "#1"},
+ "up": {"uv": [9, 15.5, 9, 12.5], "texture": "#1"},
+ "down": {"uv": [9.5, 12.5, 9.5, 15.5], "texture": "#1"}
+ }
+ },
+ {
+ "from": [5, 12, 5],
+ "to": [11, 13, 5],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 7.5, 9]},
+ "faces": {
+ "north": {"uv": [7, 10.5, 10, 11], "texture": "#1"},
+ "east": {"uv": [10, 12.5, 10, 13], "texture": "#1"},
+ "south": {"uv": [10.5, 7.5, 13.5, 8], "texture": "#1"},
+ "west": {"uv": [10.5, 12.5, 10.5, 13], "texture": "#1"},
+ "up": {"uv": [14, 12.5, 11, 12.5], "texture": "#1"},
+ "down": {"uv": [3, 13, 0, 13], "texture": "#1"}
+ }
+ },
+ {
+ "from": [11, 12, 5],
+ "to": [11, 13, 11],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 7.5, 9]},
+ "faces": {
+ "north": {"uv": [3.5, 13, 3.5, 13.5], "texture": "#1"},
+ "east": {"uv": [10.5, 8.5, 13.5, 9], "texture": "#1"},
+ "south": {"uv": [4, 13, 4, 13.5], "texture": "#1"},
+ "west": {"uv": [10.5, 9.5, 13.5, 10], "texture": "#1"},
+ "up": {"uv": [4.5, 16, 4.5, 13], "texture": "#1"},
+ "down": {"uv": [5, 13, 5, 16], "texture": "#1"}
+ }
+ }
+ ],
+ "display": {
+ "thirdperson_righthand": {
+ "rotation": [0, 90, 0],
+ "translation": [-1, 2.25, 2.75],
+ "scale": [0.5, 0.5, 0.5]
+ },
+ "thirdperson_lefthand": {
+ "rotation": [0, 90, 0],
+ "translation": [-1, 2.25, 2.75],
+ "scale": [0.5, 0.5, 0.5]
+ },
+ "firstperson_righthand": {
+ "rotation": [-9, 93, 0],
+ "translation": [-1.5, 3.5, 2],
+ "scale": [0.5, 0.5, 0.5]
+ },
+ "firstperson_lefthand": {
+ "rotation": [-9, 93, 0],
+ "translation": [-1.5, 3.5, 2],
+ "scale": [0.5, 0.5, 0.5]
+ },
+ "ground": {
+ "translation": [0, 3.25, 0],
+ "scale": [0.5, 0.5, 0.5]
+ },
+ "gui": {
+ "rotation": [-171.31, 28.48, -168.29],
+ "translation": [0, 1.5, 0],
+ "scale": [1.02812, 1.02812, 1.02812]
+ },
+ "head": {
+ "translation": [0, 14.25, 0]
+ },
+ "fixed": {
+ "translation": [0, 4, 0],
+ "scale": [0.85938, 0.85938, 0.85938]
+ }
+ },
+ "groups": [
+ {
+ "name": "group",
+ "origin": [8, 4.5, 8],
+ "scope": 0,
+ "color": 0,
+ "children": [
+ {
+ "name": "group",
+ "origin": [8, 4.5, 8],
+ "scope": 0,
+ "color": 0,
+ "children": [0]
+ },
+ {
+ "name": "group",
+ "origin": [8, 4.5, 8],
+ "scope": 0,
+ "color": 0,
+ "children": [1, 2, 3, 4, 5, 6]
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/_sa_food_models/03_汽水能量饮料/pepsi.json b/_sa_food_models/03_汽水能量饮料/pepsi.json
new file mode 100644
index 0000000..0f81b4d
--- /dev/null
+++ b/_sa_food_models/03_汽水能量饮料/pepsi.json
@@ -0,0 +1,163 @@
+{
+ "format_version": "1.21.11",
+ "credit": "Made with Blockbench",
+ "texture_size": [32, 32],
+ "textures": {
+ "1": "sa_combat:item/pepsi"
+ },
+ "elements": [
+ {
+ "from": [5, 0, 5],
+ "to": [11, 12, 11],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 4.5, 9]},
+ "faces": {
+ "north": {"uv": [0, 0, 3, 6], "texture": "#1"},
+ "east": {"uv": [3.5, 0, 6.5, 6], "texture": "#1"},
+ "south": {"uv": [0, 6.5, 3, 12.5], "texture": "#1"},
+ "west": {"uv": [3.5, 6.5, 6.5, 12.5], "texture": "#1"},
+ "up": {"uv": [10, 3, 7, 0], "texture": "#1"},
+ "down": {"uv": [10, 3.5, 7, 6.5], "texture": "#1"}
+ }
+ },
+ {
+ "from": [5, 13, 5],
+ "to": [11, 13, 11],
+ "rotation": {"angle": 0, "axis": "x", "origin": [8, 13, 11]},
+ "faces": {
+ "north": {"uv": [10.5, 10.5, 13.5, 10.5], "texture": "#1"},
+ "east": {"uv": [10.5, 11, 13.5, 11], "texture": "#1"},
+ "south": {"uv": [7, 11.5, 10, 11.5], "texture": "#1"},
+ "west": {"uv": [10.5, 11.5, 13.5, 11.5], "texture": "#1"},
+ "up": {"uv": [10, 10, 7, 7], "texture": "#1"},
+ "down": {"uv": [13.5, 0, 10.5, 3], "texture": "#1"}
+ }
+ },
+ {
+ "from": [7, 13.55, 7.5],
+ "to": [9, 13.55, 9.5],
+ "rotation": {"angle": -45, "axis": "x", "origin": [8, 13.55, 8.5]},
+ "faces": {
+ "north": {"uv": [10.5, 10.5, 13.5, 10.5], "texture": "#missing"},
+ "east": {"uv": [10.5, 11, 13.5, 11], "texture": "#missing"},
+ "south": {"uv": [7, 11.5, 10, 11.5], "texture": "#missing"},
+ "west": {"uv": [10.5, 11.5, 13.5, 11.5], "texture": "#missing"},
+ "up": {"uv": [9, 11, 8.5, 10.5], "texture": "#1"},
+ "down": {"uv": [9.5, 9, 9, 8.5], "texture": "#1"}
+ }
+ },
+ {
+ "from": [5, 12, 11],
+ "to": [11, 13, 11],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 7.5, 9]},
+ "faces": {
+ "north": {"uv": [10.5, 3.5, 13.5, 4], "texture": "#1"},
+ "east": {"uv": [7, 12, 7, 12.5], "texture": "#1"},
+ "south": {"uv": [10.5, 4.5, 13.5, 5], "texture": "#1"},
+ "west": {"uv": [7.5, 12, 7.5, 12.5], "texture": "#1"},
+ "up": {"uv": [11, 12, 8, 12], "texture": "#1"},
+ "down": {"uv": [14.5, 12, 11.5, 12], "texture": "#1"}
+ }
+ },
+ {
+ "from": [5, 12, 5],
+ "to": [5, 13, 11],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 7.5, 9]},
+ "faces": {
+ "north": {"uv": [8, 12.5, 8, 13], "texture": "#1"},
+ "east": {"uv": [10.5, 5.5, 13.5, 6], "texture": "#1"},
+ "south": {"uv": [8.5, 12.5, 8.5, 13], "texture": "#1"},
+ "west": {"uv": [10.5, 6.5, 13.5, 7], "texture": "#1"},
+ "up": {"uv": [9, 15.5, 9, 12.5], "texture": "#1"},
+ "down": {"uv": [9.5, 12.5, 9.5, 15.5], "texture": "#1"}
+ }
+ },
+ {
+ "from": [5, 12, 5],
+ "to": [11, 13, 5],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 7.5, 9]},
+ "faces": {
+ "north": {"uv": [7, 10.5, 10, 11], "texture": "#1"},
+ "east": {"uv": [10, 12.5, 10, 13], "texture": "#1"},
+ "south": {"uv": [10.5, 7.5, 13.5, 8], "texture": "#1"},
+ "west": {"uv": [10.5, 12.5, 10.5, 13], "texture": "#1"},
+ "up": {"uv": [14, 12.5, 11, 12.5], "texture": "#1"},
+ "down": {"uv": [3, 13, 0, 13], "texture": "#1"}
+ }
+ },
+ {
+ "from": [11, 12, 5],
+ "to": [11, 13, 11],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 7.5, 9]},
+ "faces": {
+ "north": {"uv": [3.5, 13, 3.5, 13.5], "texture": "#1"},
+ "east": {"uv": [10.5, 8.5, 13.5, 9], "texture": "#1"},
+ "south": {"uv": [4, 13, 4, 13.5], "texture": "#1"},
+ "west": {"uv": [10.5, 9.5, 13.5, 10], "texture": "#1"},
+ "up": {"uv": [4.5, 16, 4.5, 13], "texture": "#1"},
+ "down": {"uv": [5, 13, 5, 16], "texture": "#1"}
+ }
+ }
+ ],
+ "display": {
+ "thirdperson_righthand": {
+ "rotation": [0, 90, 0],
+ "translation": [-1, 2.25, 2.75],
+ "scale": [0.5, 0.5, 0.5]
+ },
+ "thirdperson_lefthand": {
+ "rotation": [0, 90, 0],
+ "translation": [-1, 2.25, 2.75],
+ "scale": [0.5, 0.5, 0.5]
+ },
+ "firstperson_righthand": {
+ "rotation": [-9, 93, 0],
+ "translation": [-1.5, 3.5, 2],
+ "scale": [0.5, 0.5, 0.5]
+ },
+ "firstperson_lefthand": {
+ "rotation": [-9, 93, 0],
+ "translation": [-1.5, 3.5, 2],
+ "scale": [0.5, 0.5, 0.5]
+ },
+ "ground": {
+ "translation": [0, 3.25, 0],
+ "scale": [0.5, 0.5, 0.5]
+ },
+ "gui": {
+ "rotation": [-171.31, 28.48, -168.29],
+ "translation": [0, 1.5, 0],
+ "scale": [1.02812, 1.02812, 1.02812]
+ },
+ "head": {
+ "translation": [0, 14.25, 0]
+ },
+ "fixed": {
+ "translation": [0, 4, 0],
+ "scale": [0.85938, 0.85938, 0.85938]
+ }
+ },
+ "groups": [
+ {
+ "name": "group",
+ "origin": [8, 4.5, 8],
+ "scope": 0,
+ "color": 0,
+ "children": [
+ {
+ "name": "group",
+ "origin": [8, 4.5, 8],
+ "scope": 0,
+ "color": 0,
+ "children": [0]
+ },
+ {
+ "name": "group",
+ "origin": [8, 4.5, 8],
+ "scope": 0,
+ "color": 0,
+ "children": [1, 2, 3, 4, 5, 6]
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/_sa_food_models/04_酒类/beer.json b/_sa_food_models/04_酒类/beer.json
new file mode 100644
index 0000000..8b76dba
--- /dev/null
+++ b/_sa_food_models/04_酒类/beer.json
@@ -0,0 +1,106 @@
+{
+ "format_version": "1.21.11",
+ "credit": "Made with Blockbench",
+ "texture_size": [32, 32],
+ "textures": {
+ "2": "sa_combat:item/beer",
+ "particle": "sa_combat:item/beer"
+ },
+ "elements": [
+ {
+ "from": [6.8, 12.5, 6.8],
+ "to": [9.2, 13.5, 9.2],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 3, 8]},
+ "faces": {
+ "north": {"uv": [8.5, 8, 9.5, 8.5], "texture": "#2"},
+ "east": {"uv": [9, 0, 10, 0.5], "texture": "#2"},
+ "south": {"uv": [9, 1, 10, 1.5], "texture": "#2"},
+ "west": {"uv": [9, 2, 10, 2.5], "texture": "#2"},
+ "up": {"uv": [8.5, 6, 7.5, 5], "texture": "#2"},
+ "down": {"uv": [6.5, 7.5, 5.5, 8.5], "texture": "#2"}
+ }
+ },
+ {
+ "from": [7, 9, 7],
+ "to": [9, 13, 9],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 2.5, 8]},
+ "faces": {
+ "north": {"uv": [7.5, 0, 8.5, 2], "texture": "#2"},
+ "east": {"uv": [2.5, 7.5, 3.5, 9.5], "texture": "#2"},
+ "south": {"uv": [7.5, 2.5, 8.5, 4.5], "texture": "#2"},
+ "west": {"uv": [4, 7.5, 5, 9.5], "texture": "#2"},
+ "up": {"uv": [8.5, 7.5, 7.5, 6.5], "texture": "#2"},
+ "down": {"uv": [8, 8, 7, 9], "texture": "#2"}
+ }
+ },
+ {
+ "from": [6, 0, 6],
+ "to": [10, 9, 10],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, -6.5, 8]},
+ "faces": {
+ "north": {"uv": [0, 0, 2, 4.5], "texture": "#2"},
+ "east": {"uv": [2.5, 0, 4.5, 4.5], "texture": "#2"},
+ "south": {"uv": [0, 5, 2, 9.5], "texture": "#2"},
+ "west": {"uv": [5, 0, 7, 4.5], "texture": "#2"},
+ "up": {"uv": [4.5, 7, 2.5, 5], "texture": "#2"},
+ "down": {"uv": [7, 5, 5, 7], "texture": "#2"}
+ }
+ }
+ ],
+ "display": {
+ "thirdperson_righthand": {
+ "rotation": [0, 90, 0],
+ "translation": [-1.5, 2.25, 2.25],
+ "scale": [0.5, 0.5, 0.5]
+ },
+ "thirdperson_lefthand": {
+ "rotation": [0, 90, 0],
+ "translation": [-1.5, 2.25, 2.25],
+ "scale": [0.5, 0.5, 0.5]
+ },
+ "firstperson_righthand": {
+ "rotation": [-9, 93, 0],
+ "translation": [0.5, 3.5, 2],
+ "scale": [0.5, 0.5, 0.5]
+ },
+ "firstperson_lefthand": {
+ "rotation": [-9, 93, 0],
+ "translation": [0.5, 3.5, 2],
+ "scale": [0.5, 0.5, 0.5]
+ },
+ "ground": {
+ "translation": [0, 3.25, 0],
+ "scale": [0.5, 0.5, 0.5]
+ },
+ "gui": {
+ "rotation": [-171.31, 28.48, -168.29],
+ "translation": [0.25, 2, 0],
+ "scale": [1.21953, 1.21953, 1.21953]
+ },
+ "head": {
+ "translation": [0, 14.25, 0]
+ },
+ "fixed": {
+ "translation": [0, 4.5, 0]
+ }
+ },
+ "groups": [
+ {
+ "name": "group",
+ "origin": [8, 4.5, 8],
+ "scope": 0,
+ "color": 0,
+ "children": [
+ 0,
+ 1,
+ {
+ "name": "group",
+ "origin": [7, -0.5, 8],
+ "scope": 0,
+ "color": 0,
+ "children": [2]
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/_sa_food_models/04_酒类/duff_beer.json b/_sa_food_models/04_酒类/duff_beer.json
new file mode 100644
index 0000000..1cf5e51
--- /dev/null
+++ b/_sa_food_models/04_酒类/duff_beer.json
@@ -0,0 +1,176 @@
+{
+ "format_version": "1.21.11",
+ "credit": "Made with Blockbench",
+ "texture_size": [32, 32],
+ "textures": {
+ "1": "sa_combat:item/duff_beer"
+ },
+ "elements": [
+ {
+ "from": [5, 0, 5],
+ "to": [11, 12, 11],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 4.5, 9]},
+ "faces": {
+ "north": {"uv": [0, 0, 3, 6], "texture": "#1"},
+ "east": {"uv": [3.5, 0, 6.5, 6], "texture": "#1"},
+ "south": {"uv": [0, 6.5, 3, 12.5], "texture": "#1"},
+ "west": {"uv": [3.5, 6.5, 6.5, 12.5], "texture": "#1"},
+ "up": {"uv": [10, 3, 7, 0], "texture": "#1"},
+ "down": {"uv": [10, 3.5, 7, 6.5], "texture": "#1"}
+ }
+ },
+ {
+ "from": [5.3, 3.3, 4.99],
+ "to": [10.7, 7.7, 4.99],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 4.5, 9]},
+ "faces": {
+ "north": {"uv": [8, 12, 12.5, 15.5], "texture": "#1"},
+ "east": {"uv": [3.5, 0, 6.5, 6], "texture": "#1"},
+ "south": {"uv": [0, 14, 3, 14], "texture": "#1"},
+ "west": {"uv": [3.5, 6.5, 6.5, 12.5], "texture": "#1"},
+ "up": {"uv": [10, 3, 7, 0], "texture": "#1"},
+ "down": {"uv": [10, 3.5, 7, 6.5], "texture": "#1"}
+ }
+ },
+ {
+ "from": [5, 13, 5],
+ "to": [11, 13, 11],
+ "rotation": {"angle": 0, "axis": "x", "origin": [8, 13, 11]},
+ "faces": {
+ "north": {"uv": [10.5, 10.5, 13.5, 10.5], "texture": "#1"},
+ "east": {"uv": [10.5, 11, 13.5, 11], "texture": "#1"},
+ "south": {"uv": [7, 11.5, 10, 11.5], "texture": "#1"},
+ "west": {"uv": [10.5, 11.5, 13.5, 11.5], "texture": "#1"},
+ "up": {"uv": [10, 10, 7, 7], "texture": "#1"},
+ "down": {"uv": [13.5, 0, 10.5, 3], "texture": "#1"}
+ }
+ },
+ {
+ "from": [7, 13.55, 7.5],
+ "to": [9, 13.55, 9.5],
+ "rotation": {"angle": -45, "axis": "x", "origin": [8, 13.55, 8.5]},
+ "faces": {
+ "north": {"uv": [10.5, 10.5, 13.5, 10.5], "texture": "#missing"},
+ "east": {"uv": [10.5, 11, 13.5, 11], "texture": "#missing"},
+ "south": {"uv": [7, 11.5, 10, 11.5], "texture": "#missing"},
+ "west": {"uv": [10.5, 11.5, 13.5, 11.5], "texture": "#missing"},
+ "up": {"uv": [9, 11, 8.5, 10.5], "texture": "#1"},
+ "down": {"uv": [9.5, 9, 9, 8.5], "texture": "#1"}
+ }
+ },
+ {
+ "from": [5, 12, 11],
+ "to": [11, 13, 11],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 7.5, 9]},
+ "faces": {
+ "north": {"uv": [10.5, 3.5, 13.5, 4], "texture": "#1"},
+ "east": {"uv": [7, 12, 7, 12.5], "texture": "#1"},
+ "south": {"uv": [10.5, 4.5, 13.5, 5], "texture": "#1"},
+ "west": {"uv": [7.5, 12, 7.5, 12.5], "texture": "#1"},
+ "up": {"uv": [11, 12, 8, 12], "texture": "#1"},
+ "down": {"uv": [14.5, 12, 11.5, 12], "texture": "#1"}
+ }
+ },
+ {
+ "from": [5, 12, 5],
+ "to": [5, 13, 11],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 7.5, 9]},
+ "faces": {
+ "north": {"uv": [8, 12.5, 8, 13], "texture": "#1"},
+ "east": {"uv": [10.5, 5.5, 13.5, 6], "texture": "#1"},
+ "south": {"uv": [8.5, 12.5, 8.5, 13], "texture": "#1"},
+ "west": {"uv": [10.5, 6.5, 13.5, 7], "texture": "#1"},
+ "up": {"uv": [9, 15.5, 9, 12.5], "texture": "#1"},
+ "down": {"uv": [9.5, 12.5, 9.5, 15.5], "texture": "#1"}
+ }
+ },
+ {
+ "from": [5, 12, 5],
+ "to": [11, 13, 5],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 7.5, 9]},
+ "faces": {
+ "north": {"uv": [7, 10.5, 10, 11], "texture": "#1"},
+ "east": {"uv": [10, 12.5, 10, 13], "texture": "#1"},
+ "south": {"uv": [10.5, 7.5, 13.5, 8], "texture": "#1"},
+ "west": {"uv": [10.5, 12.5, 10.5, 13], "texture": "#1"},
+ "up": {"uv": [14, 12.5, 11, 12.5], "texture": "#1"},
+ "down": {"uv": [3, 13, 0, 13], "texture": "#1"}
+ }
+ },
+ {
+ "from": [11, 12, 5],
+ "to": [11, 13, 11],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 7.5, 9]},
+ "faces": {
+ "north": {"uv": [3.5, 13, 3.5, 13.5], "texture": "#1"},
+ "east": {"uv": [10.5, 8.5, 13.5, 9], "texture": "#1"},
+ "south": {"uv": [4, 13, 4, 13.5], "texture": "#1"},
+ "west": {"uv": [10.5, 9.5, 13.5, 10], "texture": "#1"},
+ "up": {"uv": [4.5, 16, 4.5, 13], "texture": "#1"},
+ "down": {"uv": [5, 13, 5, 16], "texture": "#1"}
+ }
+ }
+ ],
+ "display": {
+ "thirdperson_righthand": {
+ "rotation": [0, 90, 0],
+ "translation": [-1, 2.25, 2.75],
+ "scale": [0.5, 0.5, 0.5]
+ },
+ "thirdperson_lefthand": {
+ "rotation": [0, 90, 0],
+ "translation": [-1, 2.25, 2.75],
+ "scale": [0.5, 0.5, 0.5]
+ },
+ "firstperson_righthand": {
+ "rotation": [-9, 93, 0],
+ "translation": [-1.5, 3.5, 2],
+ "scale": [0.5, 0.5, 0.5]
+ },
+ "firstperson_lefthand": {
+ "rotation": [-9, 93, 0],
+ "translation": [-1.5, 3.5, 2],
+ "scale": [0.5, 0.5, 0.5]
+ },
+ "ground": {
+ "translation": [0, 3.25, 0],
+ "scale": [0.5, 0.5, 0.5]
+ },
+ "gui": {
+ "rotation": [-171.31, 28.48, -168.29],
+ "translation": [0, 1.5, 0],
+ "scale": [1.02812, 1.02812, 1.02812]
+ },
+ "head": {
+ "translation": [0, 14.25, 0]
+ },
+ "fixed": {
+ "translation": [0, 4, 0],
+ "scale": [0.85938, 0.85938, 0.85938]
+ }
+ },
+ "groups": [
+ {
+ "name": "group",
+ "origin": [8, 4.5, 8],
+ "scope": 0,
+ "color": 0,
+ "children": [
+ {
+ "name": "group",
+ "origin": [8, 4.5, 8],
+ "scope": 0,
+ "color": 0,
+ "children": [0, 1]
+ },
+ {
+ "name": "group",
+ "origin": [8, 4.5, 8],
+ "scope": 0,
+ "color": 0,
+ "children": [2, 3, 4, 5, 6, 7]
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/_sa_food_models/04_酒类/vodka.json b/_sa_food_models/04_酒类/vodka.json
new file mode 100644
index 0000000..fd699df
--- /dev/null
+++ b/_sa_food_models/04_酒类/vodka.json
@@ -0,0 +1,150 @@
+{
+ "format_version": "1.21.11",
+ "credit": "Made with Blockbench",
+ "texture_size": [32, 32],
+ "textures": {
+ "0": "sa_combat:item/vodka",
+ "particle": "sa_combat:item/vodka"
+ },
+ "elements": [
+ {
+ "from": [7, 12, 7],
+ "to": [9, 15, 9],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 4.5, 8]},
+ "faces": {
+ "north": {"uv": [8.5, 0, 9.5, 1.5], "texture": "#0"},
+ "east": {"uv": [8.5, 2, 9.5, 3.5], "texture": "#0"},
+ "south": {"uv": [8.5, 4, 9.5, 5.5], "texture": "#0"},
+ "west": {"uv": [8.5, 6, 9.5, 7.5], "texture": "#0"},
+ "up": {"uv": [9.5, 9, 8.5, 8], "texture": "#0"},
+ "down": {"uv": [3.5, 9, 2.5, 10], "texture": "#0"}
+ }
+ },
+ {
+ "from": [6.9, 12.8, 6.9],
+ "to": [9.1, 13.2, 9.1],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 4, 8]},
+ "faces": {
+ "north": {"uv": [11.5, 7.5, 12.5, 8], "texture": "#0"},
+ "east": {"uv": [11.5, 7.5, 12.5, 8], "texture": "#0"},
+ "south": {"uv": [11.5, 7.5, 12.5, 8], "texture": "#0"},
+ "west": {"uv": [11.5, 7.5, 12.5, 8], "texture": "#0"},
+ "up": {"uv": [11.5, 7.5, 12.5, 8], "texture": "#0"},
+ "down": {"uv": [11.5, 7.5, 12.5, 8], "texture": "#0"}
+ }
+ },
+ {
+ "from": [6.9, 14.6, 6.9],
+ "to": [9.1, 15, 9.1],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 5.8, 8]},
+ "faces": {
+ "north": {"uv": [11.5, 7.5, 12.5, 8], "texture": "#0"},
+ "east": {"uv": [11.5, 7.5, 12.5, 8], "texture": "#0"},
+ "south": {"uv": [11.5, 7.5, 12.5, 8], "texture": "#0"},
+ "west": {"uv": [11.5, 7.5, 12.5, 8], "texture": "#0"},
+ "up": {"uv": [11.5, 7.5, 12.5, 8], "texture": "#0"},
+ "down": {"uv": [11.5, 7.5, 12.5, 8], "texture": "#0"}
+ }
+ },
+ {
+ "from": [6.8, 15, 6.8],
+ "to": [9.2, 16, 9.2],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 5.5, 8]},
+ "faces": {
+ "north": {"uv": [7, 9, 8, 9.5], "texture": "#0"},
+ "east": {"uv": [8.5, 9.5, 9.5, 10], "texture": "#0"},
+ "south": {"uv": [10, 0, 11, 0.5], "texture": "#0"},
+ "west": {"uv": [10, 1, 11, 1.5], "texture": "#0"},
+ "up": {"uv": [5, 10, 4, 9], "texture": "#0"},
+ "down": {"uv": [6.5, 9, 5.5, 10], "texture": "#0"}
+ }
+ },
+ {
+ "from": [5.5, 0, 6],
+ "to": [10.5, 12, 10],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, -6.5, 8]},
+ "faces": {
+ "north": {"uv": [0, 0, 2.5, 6], "texture": "#0"},
+ "east": {"uv": [6, 0, 8, 6], "texture": "#0"},
+ "south": {"uv": [3, 0, 5.5, 6], "texture": "#0"},
+ "west": {"uv": [0, 6.5, 2, 12.5], "texture": "#0"},
+ "up": {"uv": [5, 8.5, 2.5, 6.5], "texture": "#0"},
+ "down": {"uv": [8, 6.5, 5.5, 8.5], "texture": "#0"}
+ }
+ },
+ {
+ "from": [6.5, 1.4, 5.99],
+ "to": [9.5, 3.2, 5.99],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, -4.3, 8]},
+ "faces": {
+ "north": {"uv": [11.5, 5, 14, 6.5], "texture": "#0"},
+ "east": {"uv": [13.5, 0, 15.5, 0], "texture": "#0"},
+ "south": {"uv": [13.5, 0, 15.5, 0], "texture": "#0"},
+ "west": {"uv": [13.5, 0, 15.5, 0], "texture": "#0"},
+ "up": {"uv": [13.5, 0, 15.5, 0], "texture": "#0"},
+ "down": {"uv": [13.5, 0, 15.5, 0], "texture": "#0"}
+ }
+ }
+ ],
+ "display": {
+ "thirdperson_righthand": {
+ "rotation": [0, 90, 0],
+ "translation": [-1.5, 2.25, 2.25],
+ "scale": [0.5, 0.5, 0.5]
+ },
+ "thirdperson_lefthand": {
+ "rotation": [0, 90, 0],
+ "translation": [-1.5, 2.25, 2.25],
+ "scale": [0.5, 0.5, 0.5]
+ },
+ "firstperson_righthand": {
+ "rotation": [-9, 93, 0],
+ "translation": [0.5, 3.5, 2],
+ "scale": [0.5, 0.5, 0.5]
+ },
+ "firstperson_lefthand": {
+ "rotation": [-9, 93, 0],
+ "translation": [0.5, 3.5, 2],
+ "scale": [0.5, 0.5, 0.5]
+ },
+ "ground": {
+ "translation": [0, 3.25, 0],
+ "scale": [0.5, 0.5, 0.5]
+ },
+ "gui": {
+ "rotation": [-171.31, 28.48, -168.29],
+ "translation": [0.25, -0.25, 0],
+ "scale": [1.05937, 1.05937, 1.05937]
+ },
+ "head": {
+ "translation": [0, 14.25, 0]
+ },
+ "fixed": {
+ "translation": [0, 4.5, 0]
+ }
+ },
+ "groups": [
+ {
+ "name": "group",
+ "origin": [8, 4.5, 8],
+ "scope": 0,
+ "color": 0,
+ "children": [
+ {
+ "name": "group",
+ "origin": [7, 2.5, 8],
+ "scope": 0,
+ "color": 0,
+ "children": [0, 1, 2, 3]
+ },
+ {
+ "name": "group",
+ "origin": [7, -0.5, 8],
+ "scope": 0,
+ "color": 0,
+ "children": [4, 5]
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/_sa_food_models/04_酒类/whiskey.json b/_sa_food_models/04_酒类/whiskey.json
new file mode 100644
index 0000000..751cfac
--- /dev/null
+++ b/_sa_food_models/04_酒类/whiskey.json
@@ -0,0 +1,96 @@
+{
+ "format_version": "1.21.11",
+ "credit": "Made with Blockbench",
+ "texture_size": [32, 32],
+ "textures": {
+ "1": "sa_combat:item/whiskey"
+ },
+ "elements": [
+ {
+ "from": [3.7, -0.3, 4.7],
+ "to": [11.3, 11.1, 10.3],
+ "rotation": {"angle": 0, "axis": "y", "origin": [8, 4.5, 8]},
+ "faces": {
+ "north": {"uv": [0, 0, 4, 5.5], "texture": "#1"},
+ "east": {"uv": [0, 6, 3, 11.5], "texture": "#1"},
+ "south": {"uv": [4.5, 0, 8.5, 5.5], "texture": "#1"},
+ "west": {"uv": [3.5, 6, 6.5, 11.5], "texture": "#1"},
+ "up": {"uv": [11, 9, 7, 6], "texture": "#1"},
+ "down": {"uv": [13, 0, 9, 3], "texture": "#1"}
+ }
+ },
+ {
+ "from": [6.1, 10.4, 6.1],
+ "to": [8.9, 16.3, 8.9],
+ "rotation": {"angle": 0, "axis": "y", "origin": [8, 14.8, 8]},
+ "faces": {
+ "north": {"uv": [7, 9.5, 8.5, 12.5], "texture": "#1"},
+ "east": {"uv": [9, 9.5, 10.5, 12.5], "texture": "#1"},
+ "south": {"uv": [11, 9.5, 12.5, 12.5], "texture": "#1"},
+ "west": {"uv": [11.5, 3.5, 13, 6.5], "texture": "#1"},
+ "up": {"uv": [10.5, 5, 9, 3.5], "texture": "#1"},
+ "down": {"uv": [13, 7, 11.5, 8.5], "texture": "#1"}
+ }
+ },
+ {
+ "from": [5.9, 16, 5.9],
+ "to": [9.1, 17.4, 9.1],
+ "rotation": {"angle": 0, "axis": "y", "origin": [8, 11.8, 8]},
+ "faces": {
+ "north": {"uv": [4, 12, 5.5, 12.5], "texture": "#1"},
+ "east": {"uv": [4, 13, 5.5, 13.5], "texture": "#1"},
+ "south": {"uv": [6, 13, 7.5, 13.5], "texture": "#1"},
+ "west": {"uv": [8, 13, 9.5, 13.5], "texture": "#1"},
+ "up": {"uv": [1.5, 13.5, 0, 12], "texture": "#1"},
+ "down": {"uv": [3.5, 12, 2, 13.5], "texture": "#1"}
+ }
+ }
+ ],
+ "gui_light": "front",
+ "display": {
+ "thirdperson_righthand": {
+ "rotation": [0, 90, 0],
+ "translation": [-1.5, 2.25, 2.25],
+ "scale": [0.5, 0.5, 0.5]
+ },
+ "thirdperson_lefthand": {
+ "rotation": [0, 90, 0],
+ "translation": [-1.5, 2.25, 2.25],
+ "scale": [0.5, 0.5, 0.5]
+ },
+ "firstperson_righthand": {
+ "rotation": [-9, 93, 0],
+ "translation": [0.5, 3.5, 2],
+ "scale": [0.36719, 0.36719, 0.36719]
+ },
+ "firstperson_lefthand": {
+ "rotation": [-9, 93, 0],
+ "translation": [0.5, 3.5, 2],
+ "scale": [0.36719, 0.36719, 0.36719]
+ },
+ "ground": {
+ "translation": [0, 3.25, 0],
+ "scale": [0.5, 0.5, 0.5]
+ },
+ "gui": {
+ "rotation": [-171.31, 28.48, -168.29],
+ "translation": [0.25, 0, 0],
+ "scale": [0.93047, 0.93047, 0.93047]
+ },
+ "head": {
+ "translation": [0, 14.25, 0]
+ },
+ "fixed": {
+ "translation": [0, 4.5, 0]
+ }
+ },
+ "groups": [
+ {
+ "name": "group",
+ "origin": [8, 8, 8],
+ "scope": 0,
+ "color": 0,
+ "children": [0, 1, 2]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/_sa_food_models/04_酒类/wine.json b/_sa_food_models/04_酒类/wine.json
new file mode 100644
index 0000000..c51b2ba
--- /dev/null
+++ b/_sa_food_models/04_酒类/wine.json
@@ -0,0 +1,97 @@
+{
+ "format_version": "1.21.11",
+ "credit": "Made with Blockbench",
+ "texture_size": [32, 32],
+ "textures": {
+ "0": "sa_combat:item/wine",
+ "particle": "sa_combat:item/wine"
+ },
+ "elements": [
+ {
+ "from": [4.8, -0.3, 4.8],
+ "to": [10.2, 11.1, 10.2],
+ "rotation": {"angle": 0, "axis": "y", "origin": [8, 4.5, 8]},
+ "faces": {
+ "north": {"uv": [0, 0, 2.5, 5.5], "texture": "#0"},
+ "east": {"uv": [3, 0, 5.5, 5.5], "texture": "#0"},
+ "south": {"uv": [0, 6, 2.5, 11.5], "texture": "#0"},
+ "west": {"uv": [6, 0, 8.5, 5.5], "texture": "#0"},
+ "up": {"uv": [5.5, 8.5, 3, 6], "texture": "#0"},
+ "down": {"uv": [8.5, 6, 6, 8.5], "texture": "#0"}
+ }
+ },
+ {
+ "from": [6.1, 10.4, 6.1],
+ "to": [8.9, 17.3, 8.9],
+ "rotation": {"angle": 0, "axis": "y", "origin": [8, 14.8, 8]},
+ "faces": {
+ "north": {"uv": [9, 0, 10.5, 3.5], "texture": "#0"},
+ "east": {"uv": [3, 9, 4.5, 12.5], "texture": "#0"},
+ "south": {"uv": [9, 4, 10.5, 7.5], "texture": "#0"},
+ "west": {"uv": [5, 9, 6.5, 12.5], "texture": "#0"},
+ "up": {"uv": [8.5, 10.5, 7, 9], "texture": "#0"},
+ "down": {"uv": [10.5, 8, 9, 9.5], "texture": "#0"}
+ }
+ },
+ {
+ "from": [5.9, 17, 5.9],
+ "to": [9.1, 18.4, 9.1],
+ "rotation": {"angle": 0, "axis": "y", "origin": [8, 12.8, 8]},
+ "faces": {
+ "north": {"uv": [11, 2, 12.5, 2.5], "texture": "#0"},
+ "east": {"uv": [11, 3, 12.5, 3.5], "texture": "#0"},
+ "south": {"uv": [11, 4, 12.5, 4.5], "texture": "#0"},
+ "west": {"uv": [11, 5, 12.5, 5.5], "texture": "#0"},
+ "up": {"uv": [10.5, 11.5, 9, 10], "texture": "#0"},
+ "down": {"uv": [12.5, 0, 11, 1.5], "texture": "#0"}
+ }
+ }
+ ],
+ "gui_light": "front",
+ "display": {
+ "thirdperson_righthand": {
+ "rotation": [0, 90, 0],
+ "translation": [-1.5, 1.75, 2.25],
+ "scale": [0.5, 0.5, 0.5]
+ },
+ "thirdperson_lefthand": {
+ "rotation": [0, 90, 0],
+ "translation": [-1.5, 2.25, 2.25],
+ "scale": [0.5, 0.5, 0.5]
+ },
+ "firstperson_righthand": {
+ "rotation": [-9, 93, 0],
+ "translation": [0.5, 3.5, 2],
+ "scale": [0.36719, 0.36719, 0.36719]
+ },
+ "firstperson_lefthand": {
+ "rotation": [-9, 93, 0],
+ "translation": [0.5, 3.5, 2],
+ "scale": [0.36719, 0.36719, 0.36719]
+ },
+ "ground": {
+ "translation": [0, 3.25, 0],
+ "scale": [0.5, 0.5, 0.5]
+ },
+ "gui": {
+ "rotation": [-171.31, 28.48, -168.29],
+ "translation": [-0.5, -0.5, 0],
+ "scale": [0.86015, 0.86015, 0.86015]
+ },
+ "head": {
+ "translation": [0, 14.25, 0]
+ },
+ "fixed": {
+ "translation": [0, 4.5, 0]
+ }
+ },
+ "groups": [
+ {
+ "name": "group",
+ "origin": [8, 8, 8],
+ "scope": 0,
+ "color": 0,
+ "children": [0, 1, 2]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/_sa_food_models/05_快餐熟食/big_burger.json b/_sa_food_models/05_快餐熟食/big_burger.json
new file mode 100644
index 0000000..93e4e14
--- /dev/null
+++ b/_sa_food_models/05_快餐熟食/big_burger.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:item/generated",
+ "textures": {
+ "layer0": "sa_combat:item/big_burger"
+ }
+}
\ No newline at end of file
diff --git a/_sa_food_models/05_快餐熟食/big_burger_rotten.json b/_sa_food_models/05_快餐熟食/big_burger_rotten.json
new file mode 100644
index 0000000..e982f36
--- /dev/null
+++ b/_sa_food_models/05_快餐熟食/big_burger_rotten.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:item/generated",
+ "textures": {
+ "layer0": "sa_combat:item/big_burger_rotten"
+ }
+}
\ No newline at end of file
diff --git a/_sa_food_models/05_快餐熟食/biscuit.json b/_sa_food_models/05_快餐熟食/biscuit.json
new file mode 100644
index 0000000..e8d003a
--- /dev/null
+++ b/_sa_food_models/05_快餐熟食/biscuit.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:item/generated",
+ "textures": {
+ "layer0": "sa_combat:item/biscuit"
+ }
+}
\ No newline at end of file
diff --git a/_sa_food_models/05_快餐熟食/biscuit_rotten.json b/_sa_food_models/05_快餐熟食/biscuit_rotten.json
new file mode 100644
index 0000000..c175c61
--- /dev/null
+++ b/_sa_food_models/05_快餐熟食/biscuit_rotten.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:item/generated",
+ "textures": {
+ "layer0": "sa_combat:item/biscuit_rotten"
+ }
+}
\ No newline at end of file
diff --git a/_sa_food_models/05_快餐熟食/burger.json b/_sa_food_models/05_快餐熟食/burger.json
new file mode 100644
index 0000000..3401ac0
--- /dev/null
+++ b/_sa_food_models/05_快餐熟食/burger.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:item/generated",
+ "textures": {
+ "layer0": "sa_combat:item/burger"
+ }
+}
\ No newline at end of file
diff --git a/_sa_food_models/05_快餐熟食/burger_rotten.json b/_sa_food_models/05_快餐熟食/burger_rotten.json
new file mode 100644
index 0000000..d535431
--- /dev/null
+++ b/_sa_food_models/05_快餐熟食/burger_rotten.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:item/generated",
+ "textures": {
+ "layer0": "sa_combat:item/burger_rotten"
+ }
+}
\ No newline at end of file
diff --git a/_sa_food_models/05_快餐熟食/burrito.json b/_sa_food_models/05_快餐熟食/burrito.json
new file mode 100644
index 0000000..f4a7859
--- /dev/null
+++ b/_sa_food_models/05_快餐熟食/burrito.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:item/generated",
+ "textures": {
+ "layer0": "sa_combat:item/burrito"
+ }
+}
\ No newline at end of file
diff --git a/_sa_food_models/05_快餐熟食/burrito_rotten.json b/_sa_food_models/05_快餐熟食/burrito_rotten.json
new file mode 100644
index 0000000..8b395a9
--- /dev/null
+++ b/_sa_food_models/05_快餐熟食/burrito_rotten.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:item/generated",
+ "textures": {
+ "layer0": "sa_combat:item/burrito_rotten"
+ }
+}
\ No newline at end of file
diff --git a/_sa_food_models/05_快餐熟食/cheese_burger.json b/_sa_food_models/05_快餐熟食/cheese_burger.json
new file mode 100644
index 0000000..9b59ae1
--- /dev/null
+++ b/_sa_food_models/05_快餐熟食/cheese_burger.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:item/generated",
+ "textures": {
+ "layer0": "sa_combat:item/cheese_burger"
+ }
+}
\ No newline at end of file
diff --git a/_sa_food_models/05_快餐熟食/cheese_burger_rotten.json b/_sa_food_models/05_快餐熟食/cheese_burger_rotten.json
new file mode 100644
index 0000000..dd93387
--- /dev/null
+++ b/_sa_food_models/05_快餐熟食/cheese_burger_rotten.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:item/generated",
+ "textures": {
+ "layer0": "sa_combat:item/cheese_burger_rotten"
+ }
+}
\ No newline at end of file
diff --git a/_sa_food_models/05_快餐熟食/donut.json b/_sa_food_models/05_快餐熟食/donut.json
new file mode 100644
index 0000000..0f6a1bc
--- /dev/null
+++ b/_sa_food_models/05_快餐熟食/donut.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:item/generated",
+ "textures": {
+ "layer0": "sa_combat:item/donut"
+ }
+}
\ No newline at end of file
diff --git a/_sa_food_models/05_快餐熟食/donut_rotten.json b/_sa_food_models/05_快餐熟食/donut_rotten.json
new file mode 100644
index 0000000..6414a7f
--- /dev/null
+++ b/_sa_food_models/05_快餐熟食/donut_rotten.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:item/generated",
+ "textures": {
+ "layer0": "sa_combat:item/donut_rotten"
+ }
+}
\ No newline at end of file
diff --git a/_sa_food_models/05_快餐熟食/hot_dog.json b/_sa_food_models/05_快餐熟食/hot_dog.json
new file mode 100644
index 0000000..67731ce
--- /dev/null
+++ b/_sa_food_models/05_快餐熟食/hot_dog.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:item/generated",
+ "textures": {
+ "layer0": "sa_combat:item/hot_dog"
+ }
+}
\ No newline at end of file
diff --git a/_sa_food_models/05_快餐熟食/hot_dog_rotten.json b/_sa_food_models/05_快餐熟食/hot_dog_rotten.json
new file mode 100644
index 0000000..d95fc17
--- /dev/null
+++ b/_sa_food_models/05_快餐熟食/hot_dog_rotten.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:item/generated",
+ "textures": {
+ "layer0": "sa_combat:item/hot_dog_rotten"
+ }
+}
\ No newline at end of file
diff --git a/_sa_food_models/05_快餐熟食/taco.json b/_sa_food_models/05_快餐熟食/taco.json
new file mode 100644
index 0000000..9f8237c
--- /dev/null
+++ b/_sa_food_models/05_快餐熟食/taco.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:item/generated",
+ "textures": {
+ "layer0": "sa_combat:item/taco"
+ }
+}
\ No newline at end of file
diff --git a/_sa_food_models/05_快餐熟食/taco_rotten.json b/_sa_food_models/05_快餐熟食/taco_rotten.json
new file mode 100644
index 0000000..a4b573f
--- /dev/null
+++ b/_sa_food_models/05_快餐熟食/taco_rotten.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:item/generated",
+ "textures": {
+ "layer0": "sa_combat:item/taco_rotten"
+ }
+}
\ No newline at end of file
diff --git a/_sa_food_models/05_快餐熟食/toast.json b/_sa_food_models/05_快餐熟食/toast.json
new file mode 100644
index 0000000..d7ad905
--- /dev/null
+++ b/_sa_food_models/05_快餐熟食/toast.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:item/generated",
+ "textures": {
+ "layer0": "sa_combat:item/toast"
+ }
+}
\ No newline at end of file
diff --git a/_sa_food_models/05_快餐熟食/toast_rotten.json b/_sa_food_models/05_快餐熟食/toast_rotten.json
new file mode 100644
index 0000000..7a2b7f7
--- /dev/null
+++ b/_sa_food_models/05_快餐熟食/toast_rotten.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:item/generated",
+ "textures": {
+ "layer0": "sa_combat:item/toast_rotten"
+ }
+}
\ No newline at end of file
diff --git a/_sa_food_models/05_快餐熟食/waffles.json b/_sa_food_models/05_快餐熟食/waffles.json
new file mode 100644
index 0000000..973fcc5
--- /dev/null
+++ b/_sa_food_models/05_快餐熟食/waffles.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:item/generated",
+ "textures": {
+ "layer0": "sa_combat:item/waffles"
+ }
+}
\ No newline at end of file
diff --git a/_sa_food_models/05_快餐熟食/waffles_rotten.json b/_sa_food_models/05_快餐熟食/waffles_rotten.json
new file mode 100644
index 0000000..cf3b947
--- /dev/null
+++ b/_sa_food_models/05_快餐熟食/waffles_rotten.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:item/generated",
+ "textures": {
+ "layer0": "sa_combat:item/waffles_rotten"
+ }
+}
\ No newline at end of file
diff --git a/_sa_food_models/06_零食甜食酱料/butter.json b/_sa_food_models/06_零食甜食酱料/butter.json
new file mode 100644
index 0000000..1bd2a2f
--- /dev/null
+++ b/_sa_food_models/06_零食甜食酱料/butter.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:item/generated",
+ "textures": {
+ "layer0": "sa_combat:item/butter"
+ }
+}
\ No newline at end of file
diff --git a/_sa_food_models/06_零食甜食酱料/candys.json b/_sa_food_models/06_零食甜食酱料/candys.json
new file mode 100644
index 0000000..2967a92
--- /dev/null
+++ b/_sa_food_models/06_零食甜食酱料/candys.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:item/generated",
+ "textures": {
+ "layer0": "sa_combat:item/candys"
+ }
+}
\ No newline at end of file
diff --git a/_sa_food_models/06_零食甜食酱料/cheese.json b/_sa_food_models/06_零食甜食酱料/cheese.json
new file mode 100644
index 0000000..b764ff2
--- /dev/null
+++ b/_sa_food_models/06_零食甜食酱料/cheese.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:item/generated",
+ "textures": {
+ "layer0": "sa_combat:item/cheese"
+ }
+}
\ No newline at end of file
diff --git a/_sa_food_models/06_零食甜食酱料/cheese_bread.json b/_sa_food_models/06_零食甜食酱料/cheese_bread.json
new file mode 100644
index 0000000..2b7dc0a
--- /dev/null
+++ b/_sa_food_models/06_零食甜食酱料/cheese_bread.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:item/generated",
+ "textures": {
+ "layer0": "sa_combat:item/cheese_bread"
+ }
+}
\ No newline at end of file
diff --git a/_sa_food_models/06_零食甜食酱料/chocolate_bar.json b/_sa_food_models/06_零食甜食酱料/chocolate_bar.json
new file mode 100644
index 0000000..be18cff
--- /dev/null
+++ b/_sa_food_models/06_零食甜食酱料/chocolate_bar.json
@@ -0,0 +1,145 @@
+{
+ "format_version": "1.21.11",
+ "credit": "Made with Blockbench",
+ "parent": "survival_instinct:custom/adrenaline_injector",
+ "texture_size": [32, 32],
+ "textures": {
+ "2": "sa_combat:item/chocolate_bar",
+ "particle": "sa_combat:item/particule_smirkers"
+ },
+ "elements": [
+ {
+ "from": [4, 0, 7],
+ "to": [12, 14, 9],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 0, 7]},
+ "faces": {
+ "north": {"uv": [4.5, 0, 9, 7], "texture": "#2"},
+ "east": {"uv": [1.5, 7.5, 2.5, 14.5], "texture": "#2"},
+ "south": {"uv": [4.5, 0, 9, 7], "texture": "#2"},
+ "west": {"uv": [1.5, 7.5, 2.5, 14.5], "texture": "#2"},
+ "up": {"uv": [13, 1, 9, 0], "texture": "#2"},
+ "down": {"uv": [13, 1.5, 9, 2.5], "texture": "#2"}
+ }
+ },
+ {
+ "from": [4, 5.55, 9.9],
+ "to": [12, 8.55, 9.9],
+ "rotation": {"angle": -22.5, "axis": "x", "origin": [8, 6.5, 7.9]},
+ "faces": {
+ "north": {"uv": [3, 7.5, 7, 9], "texture": "#2"},
+ "east": {"uv": [3, 9.5, 3, 11], "texture": "#2"},
+ "south": {"uv": [7.5, 7.5, 11.5, 9], "texture": "#2"},
+ "west": {"uv": [3.5, 9.5, 3.5, 11], "texture": "#2"},
+ "up": {"uv": [13, 7, 9, 7], "texture": "#2"},
+ "down": {"uv": [8, 9.5, 4, 9.5], "texture": "#2"}
+ }
+ },
+ {
+ "from": [12.9, 5.45, 7],
+ "to": [12.9, 8.45, 9],
+ "rotation": {"angle": 22.5, "axis": "z", "origin": [10.9, 6.45, 11]},
+ "faces": {
+ "north": {"uv": [8.5, 9.5, 8.5, 11], "texture": "#2"},
+ "east": {"uv": [9, 3, 10, 4.5], "texture": "#2"},
+ "south": {"uv": [9, 9.5, 9, 11], "texture": "#2"},
+ "west": {"uv": [9, 5, 10, 6.5], "texture": "#2"},
+ "up": {"uv": [9.5, 10.5, 9.5, 9.5], "texture": "#2"},
+ "down": {"uv": [4, 10, 4, 11], "texture": "#2"}
+ }
+ },
+ {
+ "from": [4, 5.55, 6.1],
+ "to": [12, 8.55, 6.1],
+ "rotation": {"angle": 22.5, "axis": "x", "origin": [8, 6.5, 8.1]},
+ "faces": {
+ "north": {"uv": [7.5, 7.5, 11.5, 9], "texture": "#2"},
+ "east": {"uv": [3, 9.5, 3, 11], "texture": "#2"},
+ "south": {"uv": [3, 7.5, 7, 9], "texture": "#2"},
+ "west": {"uv": [3.5, 9.5, 3.5, 11], "texture": "#2"},
+ "up": {"uv": [9, 7, 13, 7], "texture": "#2"},
+ "down": {"uv": [4, 9.5, 8, 9.5], "texture": "#2"}
+ }
+ },
+ {
+ "from": [3.1, 5.45, 7],
+ "to": [3.1, 8.45, 9],
+ "rotation": {"angle": -22.5, "axis": "z", "origin": [5.1, 6.45, 5]},
+ "faces": {
+ "north": {"uv": [9, 9.5, 9, 11], "texture": "#2"},
+ "east": {"uv": [9, 5, 10, 6.5], "texture": "#2"},
+ "south": {"uv": [8.5, 9.5, 8.5, 11], "texture": "#2"},
+ "west": {"uv": [9, 3, 10, 4.5], "texture": "#2"},
+ "up": {"uv": [9.5, 9.5, 9.5, 10.5], "texture": "#2"},
+ "down": {"uv": [4, 10, 4, 11], "texture": "#2"}
+ }
+ }
+ ],
+ "display": {
+ "thirdperson_righthand": {
+ "rotation": [56, 64, 0],
+ "translation": [-1, 1, 1.25],
+ "scale": [0.4, 0.4, 0.4]
+ },
+ "thirdperson_lefthand": {
+ "rotation": [56, 64, 0],
+ "translation": [-1, 1, 1.25],
+ "scale": [0.4, 0.4, 0.4]
+ },
+ "firstperson_righthand": {
+ "rotation": [0, 107, 17],
+ "translation": [-0.5, 2.25, 1.25],
+ "scale": [0.4, 0.4, 0.4]
+ },
+ "firstperson_lefthand": {
+ "rotation": [0, 107, 17],
+ "translation": [-0.5, 2.25, 1.25],
+ "scale": [0.4, 0.4, 0.4]
+ },
+ "ground": {
+ "translation": [0, 2, 0],
+ "scale": [0.5, 0.5, 0.5]
+ },
+ "gui": {
+ "rotation": [-19, 169, 26],
+ "translation": [0.25, 1, 0],
+ "scale": [0.99923, 0.99923, 0.99923]
+ },
+ "head": {
+ "rotation": [0, -180, 0],
+ "translation": [0, 13, 7]
+ },
+ "fixed": {
+ "rotation": [25, 0, 0],
+ "translation": [0, 3.25, 0.25],
+ "scale": [0.83594, 0.83594, 0.83594]
+ },
+ "on_shelf": {
+ "rotation": [0, -180, 0]
+ }
+ },
+ "groups": [
+ {
+ "name": "group",
+ "origin": [7, 0, 7],
+ "scope": 0,
+ "color": 0,
+ "children": [
+ 0,
+ {
+ "name": "group",
+ "origin": [8, 6, 8],
+ "scope": 0,
+ "color": 0,
+ "children": [1, 2]
+ },
+ {
+ "name": "group",
+ "origin": [8, 6, 8],
+ "scope": 0,
+ "color": 0,
+ "children": [3, 4]
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/_sa_food_models/06_零食甜食酱料/energy_bar.json b/_sa_food_models/06_零食甜食酱料/energy_bar.json
new file mode 100644
index 0000000..444c2b9
--- /dev/null
+++ b/_sa_food_models/06_零食甜食酱料/energy_bar.json
@@ -0,0 +1,145 @@
+{
+ "format_version": "1.21.11",
+ "credit": "Made with Blockbench",
+ "parent": "survival_instinct:custom/adrenaline_injector",
+ "texture_size": [32, 32],
+ "textures": {
+ "0": "sa_combat:item/energy_bar",
+ "particle": "sa_combat:item/particule_smirkers"
+ },
+ "elements": [
+ {
+ "from": [6, 0, 7],
+ "to": [10, 14, 9],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 0, 7]},
+ "faces": {
+ "north": {"uv": [0, 0, 2, 7], "texture": "#0"},
+ "east": {"uv": [5, 0, 6, 7], "texture": "#0"},
+ "south": {"uv": [2.5, 0, 4.5, 7], "texture": "#0"},
+ "west": {"uv": [6.5, 0, 7.5, 7], "texture": "#0"},
+ "up": {"uv": [10, 1, 8, 0], "texture": "#0"},
+ "down": {"uv": [10, 1.5, 8, 2.5], "texture": "#0"}
+ }
+ },
+ {
+ "from": [6, 5.55, 9.9],
+ "to": [10, 8.55, 9.9],
+ "rotation": {"angle": -22.5, "axis": "x", "origin": [8, 6.5, 7.9]},
+ "faces": {
+ "north": {"uv": [4.5, 7.5, 2.5, 9], "texture": "#0"},
+ "east": {"uv": [3, 9.5, 3, 11], "texture": "#0"},
+ "south": {"uv": [2, 7.5, 0, 9], "texture": "#0"},
+ "west": {"uv": [9.5, 3, 9.5, 4.5], "texture": "#0"},
+ "up": {"uv": [10, 7, 8, 7], "texture": "#0"},
+ "down": {"uv": [5.5, 9.5, 3.5, 9.5], "texture": "#0"}
+ }
+ },
+ {
+ "from": [10.9, 5.45, 7],
+ "to": [10.9, 8.45, 9],
+ "rotation": {"angle": 22.5, "axis": "z", "origin": [8.9, 6.45, 11]},
+ "faces": {
+ "north": {"uv": [3.5, 10, 3.5, 11.5], "texture": "#0"},
+ "east": {"uv": [8, 5, 9, 6.5], "texture": "#0"},
+ "south": {"uv": [10, 3, 10, 4.5], "texture": "#0"},
+ "west": {"uv": [8, 3, 9, 4.5], "texture": "#0"},
+ "up": {"uv": [4, 10, 4, 11], "texture": "#0"},
+ "down": {"uv": [4.5, 11, 4.5, 10], "texture": "#0"}
+ }
+ },
+ {
+ "from": [6, 5.55, 6.1],
+ "to": [10, 8.55, 6.1],
+ "rotation": {"angle": 22.5, "axis": "x", "origin": [8, 6.5, 8.1]},
+ "faces": {
+ "north": {"uv": [0, 7.5, 2, 9], "texture": "#0"},
+ "east": {"uv": [3, 9.5, 3, 11], "texture": "#0"},
+ "south": {"uv": [2.5, 7.5, 4.5, 9], "texture": "#0"},
+ "west": {"uv": [9.5, 3, 9.5, 4.5], "texture": "#0"},
+ "up": {"uv": [10, 7, 8, 7], "texture": "#0"},
+ "down": {"uv": [5.5, 9.5, 3.5, 9.5], "texture": "#0"}
+ }
+ },
+ {
+ "from": [5.1, 5.45, 7],
+ "to": [5.1, 8.45, 9],
+ "rotation": {"angle": -22.5, "axis": "z", "origin": [7.1, 6.45, 5]},
+ "faces": {
+ "north": {"uv": [10, 3, 10, 4.5], "texture": "#0"},
+ "east": {"uv": [8, 3, 9, 4.5], "texture": "#0"},
+ "south": {"uv": [3.5, 10, 3.5, 11.5], "texture": "#0"},
+ "west": {"uv": [8, 5, 9, 6.5], "texture": "#0"},
+ "up": {"uv": [4, 11, 4, 10], "texture": "#0"},
+ "down": {"uv": [4.5, 10, 4.5, 11], "texture": "#0"}
+ }
+ }
+ ],
+ "display": {
+ "thirdperson_righthand": {
+ "rotation": [56, 64, 0],
+ "translation": [-1, 1, 1.25],
+ "scale": [0.4, 0.4, 0.4]
+ },
+ "thirdperson_lefthand": {
+ "rotation": [56, 64, 0],
+ "translation": [-1, 1, 1.25],
+ "scale": [0.4, 0.4, 0.4]
+ },
+ "firstperson_righthand": {
+ "rotation": [0, 107, 17],
+ "translation": [-0.5, 2.25, 1.25],
+ "scale": [0.4, 0.4, 0.4]
+ },
+ "firstperson_lefthand": {
+ "rotation": [0, 107, 17],
+ "translation": [-0.5, 2.25, 1.25],
+ "scale": [0.4, 0.4, 0.4]
+ },
+ "ground": {
+ "translation": [0, 2, 0],
+ "scale": [0.5, 0.5, 0.5]
+ },
+ "gui": {
+ "rotation": [-19, 169, 26],
+ "translation": [0.25, 1, 0],
+ "scale": [0.99923, 0.99923, 0.99923]
+ },
+ "head": {
+ "rotation": [0, -180, 0],
+ "translation": [0, 13, 7]
+ },
+ "fixed": {
+ "rotation": [25, 0, 0],
+ "translation": [0, 3.25, 0.25],
+ "scale": [0.83594, 0.83594, 0.83594]
+ },
+ "on_shelf": {
+ "rotation": [0, -180, 0]
+ }
+ },
+ "groups": [
+ {
+ "name": "group",
+ "origin": [7, 0, 7],
+ "scope": 0,
+ "color": 0,
+ "children": [
+ 0,
+ {
+ "name": "group",
+ "origin": [8, 6, 8],
+ "scope": 0,
+ "color": 0,
+ "children": [1, 2]
+ },
+ {
+ "name": "group",
+ "origin": [8, 6, 8],
+ "scope": 0,
+ "color": 0,
+ "children": [3, 4]
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/_sa_food_models/06_零食甜食酱料/fruit_jam.json b/_sa_food_models/06_零食甜食酱料/fruit_jam.json
new file mode 100644
index 0000000..cddcd3c
--- /dev/null
+++ b/_sa_food_models/06_零食甜食酱料/fruit_jam.json
@@ -0,0 +1,80 @@
+{
+ "format_version": "1.21.11",
+ "credit": "Made with Blockbench",
+ "texture_size": [32, 32],
+ "textures": {
+ "0": "sa_combat:item/fruit_jam",
+ "particle": "sa_combat:item/fruit_jam"
+ },
+ "elements": [
+ {
+ "from": [5, 0, 5],
+ "to": [11, 10, 11],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 0, 7]},
+ "faces": {
+ "north": {"uv": [0, 0, 3, 5], "texture": "#0"},
+ "east": {"uv": [3, 0, 6, 5], "texture": "#0"},
+ "south": {"uv": [0, 5, 3, 10], "texture": "#0"},
+ "west": {"uv": [3, 5, 6, 10], "texture": "#0"},
+ "up": {"uv": [9, 3, 6, 0], "texture": "#0"},
+ "down": {"uv": [9, 3, 6, 6], "texture": "#0"}
+ }
+ },
+ {
+ "from": [5.3, 10, 5.3],
+ "to": [10.7, 12, 10.7],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 10, 7]},
+ "faces": {
+ "north": {"uv": [8.5, 6, 11, 7], "texture": "#0"},
+ "east": {"uv": [8.5, 7, 11, 8], "texture": "#0"},
+ "south": {"uv": [8.5, 8, 11, 9], "texture": "#0"},
+ "west": {"uv": [9, 0, 11.5, 1], "texture": "#0"},
+ "up": {"uv": [8.5, 8.5, 6, 6], "texture": "#0"},
+ "down": {"uv": [8.5, 8.5, 6, 11], "texture": "#0"}
+ }
+ }
+ ],
+ "gui_light": "front",
+ "display": {
+ "thirdperson_righthand": {
+ "rotation": [0, 90, 0],
+ "translation": [-1.25, 2.25, 2.25],
+ "scale": [0.55, 0.55, 0.55]
+ },
+ "thirdperson_lefthand": {
+ "rotation": [0, 90, 0],
+ "translation": [-1.25, 2.25, 2.25],
+ "scale": [0.55, 0.55, 0.55]
+ },
+ "firstperson_righthand": {
+ "rotation": [-155.67, 87.24, 146.71],
+ "translation": [-0.75, 4, 2.25],
+ "scale": [0.44883, 0.44883, 0.44883]
+ },
+ "firstperson_lefthand": {
+ "rotation": [-155.67, 87.24, 146.71],
+ "translation": [-0.75, 4, 2.25],
+ "scale": [0.44883, 0.44883, 0.44883]
+ },
+ "ground": {
+ "translation": [0, 2.5, 0],
+ "scale": [0.5, 0.5, 0.5]
+ },
+ "gui": {
+ "rotation": [-171.31, 28.48, -168.29],
+ "translation": [0.5, 2.5, 0],
+ "scale": [1.07695, 1.07695, 1.07695]
+ },
+ "head": {
+ "rotation": [0, -180, 0],
+ "translation": [0, 13, 0.25]
+ },
+ "fixed": {
+ "translation": [0, 4, 0],
+ "scale": [0.85938, 0.85938, 0.85938]
+ },
+ "on_shelf": {
+ "rotation": [0, -180, 0]
+ }
+ }
+}
\ No newline at end of file
diff --git a/_sa_food_models/06_零食甜食酱料/granola_bar.json b/_sa_food_models/06_零食甜食酱料/granola_bar.json
new file mode 100644
index 0000000..1c9fd17
--- /dev/null
+++ b/_sa_food_models/06_零食甜食酱料/granola_bar.json
@@ -0,0 +1,145 @@
+{
+ "format_version": "1.21.11",
+ "credit": "Made with Blockbench",
+ "parent": "survival_instinct:custom/adrenaline_injector",
+ "texture_size": [32, 32],
+ "textures": {
+ "0": "sa_combat:item/granola_bar",
+ "particle": "sa_combat:item/particle_granola"
+ },
+ "elements": [
+ {
+ "from": [6, 0, 7],
+ "to": [10, 14, 9],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 0, 7]},
+ "faces": {
+ "north": {"uv": [0, 0, 2, 7], "texture": "#0"},
+ "east": {"uv": [5, 0, 6, 7], "texture": "#0"},
+ "south": {"uv": [2.5, 0, 4.5, 7], "texture": "#0"},
+ "west": {"uv": [6.5, 0, 7.5, 7], "texture": "#0"},
+ "up": {"uv": [10, 1, 8, 0], "texture": "#0"},
+ "down": {"uv": [10, 1.5, 8, 2.5], "texture": "#0"}
+ }
+ },
+ {
+ "from": [6, 5.55, 9.9],
+ "to": [10, 8.55, 9.9],
+ "rotation": {"angle": -22.5, "axis": "x", "origin": [8, 6.5, 7.9]},
+ "faces": {
+ "north": {"uv": [4.5, 7.5, 2.5, 9], "texture": "#0"},
+ "east": {"uv": [3, 9.5, 3, 11], "texture": "#0"},
+ "south": {"uv": [2, 7.5, 0, 9], "texture": "#0"},
+ "west": {"uv": [9.5, 3, 9.5, 4.5], "texture": "#0"},
+ "up": {"uv": [10, 7, 8, 7], "texture": "#0"},
+ "down": {"uv": [5.5, 9.5, 3.5, 9.5], "texture": "#0"}
+ }
+ },
+ {
+ "from": [10.9, 5.45, 7],
+ "to": [10.9, 8.45, 9],
+ "rotation": {"angle": 22.5, "axis": "z", "origin": [8.9, 6.45, 11]},
+ "faces": {
+ "north": {"uv": [3.5, 10, 3.5, 11.5], "texture": "#0"},
+ "east": {"uv": [8, 5, 9, 6.5], "texture": "#0"},
+ "south": {"uv": [10, 3, 10, 4.5], "texture": "#0"},
+ "west": {"uv": [8, 3, 9, 4.5], "texture": "#0"},
+ "up": {"uv": [4, 10, 4, 11], "texture": "#0"},
+ "down": {"uv": [4.5, 11, 4.5, 10], "texture": "#0"}
+ }
+ },
+ {
+ "from": [6, 5.55, 6.1],
+ "to": [10, 8.55, 6.1],
+ "rotation": {"angle": 22.5, "axis": "x", "origin": [8, 6.5, 8.1]},
+ "faces": {
+ "north": {"uv": [0, 7.5, 2, 9], "texture": "#0"},
+ "east": {"uv": [3, 9.5, 3, 11], "texture": "#0"},
+ "south": {"uv": [2.5, 7.5, 4.5, 9], "texture": "#0"},
+ "west": {"uv": [9.5, 3, 9.5, 4.5], "texture": "#0"},
+ "up": {"uv": [10, 7, 8, 7], "texture": "#0"},
+ "down": {"uv": [5.5, 9.5, 3.5, 9.5], "texture": "#0"}
+ }
+ },
+ {
+ "from": [5.1, 5.45, 7],
+ "to": [5.1, 8.45, 9],
+ "rotation": {"angle": -22.5, "axis": "z", "origin": [7.1, 6.45, 5]},
+ "faces": {
+ "north": {"uv": [10, 3, 10, 4.5], "texture": "#0"},
+ "east": {"uv": [8, 3, 9, 4.5], "texture": "#0"},
+ "south": {"uv": [3.5, 10, 3.5, 11.5], "texture": "#0"},
+ "west": {"uv": [8, 5, 9, 6.5], "texture": "#0"},
+ "up": {"uv": [4, 11, 4, 10], "texture": "#0"},
+ "down": {"uv": [4.5, 10, 4.5, 11], "texture": "#0"}
+ }
+ }
+ ],
+ "display": {
+ "thirdperson_righthand": {
+ "rotation": [56, 64, 0],
+ "translation": [-1, 1, 1.25],
+ "scale": [0.4, 0.4, 0.4]
+ },
+ "thirdperson_lefthand": {
+ "rotation": [56, 64, 0],
+ "translation": [-1, 1, 1.25],
+ "scale": [0.4, 0.4, 0.4]
+ },
+ "firstperson_righthand": {
+ "rotation": [0, 107, 17],
+ "translation": [-0.5, 2.25, 1.25],
+ "scale": [0.4, 0.4, 0.4]
+ },
+ "firstperson_lefthand": {
+ "rotation": [0, 107, 17],
+ "translation": [-0.5, 2.25, 1.25],
+ "scale": [0.4, 0.4, 0.4]
+ },
+ "ground": {
+ "translation": [0, 2, 0],
+ "scale": [0.5, 0.5, 0.5]
+ },
+ "gui": {
+ "rotation": [-19, 169, 26],
+ "translation": [0.25, 1, 0],
+ "scale": [0.99923, 0.99923, 0.99923]
+ },
+ "head": {
+ "rotation": [0, -180, 0],
+ "translation": [0, 13, 7]
+ },
+ "fixed": {
+ "rotation": [25, 0, 0],
+ "translation": [0, 3.25, 0.25],
+ "scale": [0.83594, 0.83594, 0.83594]
+ },
+ "on_shelf": {
+ "rotation": [0, -180, 0]
+ }
+ },
+ "groups": [
+ {
+ "name": "group",
+ "origin": [7, 0, 7],
+ "scope": 0,
+ "color": 0,
+ "children": [
+ 0,
+ {
+ "name": "group",
+ "origin": [8, 6, 8],
+ "scope": 0,
+ "color": 0,
+ "children": [1, 2]
+ },
+ {
+ "name": "group",
+ "origin": [8, 6, 8],
+ "scope": 0,
+ "color": 0,
+ "children": [3, 4]
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/_sa_food_models/06_零食甜食酱料/peanut_butter.json b/_sa_food_models/06_零食甜食酱料/peanut_butter.json
new file mode 100644
index 0000000..dea6ca0
--- /dev/null
+++ b/_sa_food_models/06_零食甜食酱料/peanut_butter.json
@@ -0,0 +1,80 @@
+{
+ "format_version": "1.21.11",
+ "credit": "Made with Blockbench",
+ "texture_size": [32, 32],
+ "textures": {
+ "0": "sa_combat:item/peanut_butter",
+ "particle": "sa_combat:item/peanut_butter"
+ },
+ "elements": [
+ {
+ "from": [5, 0, 5],
+ "to": [11, 10, 11],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 0, 7]},
+ "faces": {
+ "north": {"uv": [0, 0, 3, 5], "texture": "#0"},
+ "east": {"uv": [3, 0, 6, 5], "texture": "#0"},
+ "south": {"uv": [0, 5, 3, 10], "texture": "#0"},
+ "west": {"uv": [3, 5, 6, 10], "texture": "#0"},
+ "up": {"uv": [9, 3, 6, 0], "texture": "#0"},
+ "down": {"uv": [9, 3, 6, 6], "texture": "#0"}
+ }
+ },
+ {
+ "from": [5.3, 10, 5.3],
+ "to": [10.7, 12, 10.7],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 10, 7]},
+ "faces": {
+ "north": {"uv": [8.5, 6, 11, 7], "texture": "#0"},
+ "east": {"uv": [8.5, 7, 11, 8], "texture": "#0"},
+ "south": {"uv": [8.5, 8, 11, 9], "texture": "#0"},
+ "west": {"uv": [9, 0, 11.5, 1], "texture": "#0"},
+ "up": {"uv": [8.5, 8.5, 6, 6], "texture": "#0"},
+ "down": {"uv": [8.5, 8.5, 6, 11], "texture": "#0"}
+ }
+ }
+ ],
+ "gui_light": "front",
+ "display": {
+ "thirdperson_righthand": {
+ "rotation": [0, 90, 0],
+ "translation": [-1.25, 2.25, 2.25],
+ "scale": [0.55, 0.55, 0.55]
+ },
+ "thirdperson_lefthand": {
+ "rotation": [0, 90, 0],
+ "translation": [-1.25, 2.25, 2.25],
+ "scale": [0.55, 0.55, 0.55]
+ },
+ "firstperson_righthand": {
+ "rotation": [-155.67, 87.24, 146.71],
+ "translation": [-0.75, 4, 2.25],
+ "scale": [0.44883, 0.44883, 0.44883]
+ },
+ "firstperson_lefthand": {
+ "rotation": [-155.67, 87.24, 146.71],
+ "translation": [-0.75, 4, 2.25],
+ "scale": [0.44883, 0.44883, 0.44883]
+ },
+ "ground": {
+ "translation": [0, 2.5, 0],
+ "scale": [0.5, 0.5, 0.5]
+ },
+ "gui": {
+ "rotation": [-171.31, 28.48, -168.29],
+ "translation": [0.5, 2.5, 0],
+ "scale": [1.07695, 1.07695, 1.07695]
+ },
+ "head": {
+ "rotation": [0, -180, 0],
+ "translation": [0, 13, 0.25]
+ },
+ "fixed": {
+ "translation": [0, 4, 0],
+ "scale": [0.85938, 0.85938, 0.85938]
+ },
+ "on_shelf": {
+ "rotation": [0, -180, 0]
+ }
+ }
+}
\ No newline at end of file
diff --git a/_sa_food_models/06_零食甜食酱料/smirkers_bar.json b/_sa_food_models/06_零食甜食酱料/smirkers_bar.json
new file mode 100644
index 0000000..3677af9
--- /dev/null
+++ b/_sa_food_models/06_零食甜食酱料/smirkers_bar.json
@@ -0,0 +1,145 @@
+{
+ "format_version": "1.21.11",
+ "credit": "Made with Blockbench",
+ "parent": "survival_instinct:custom/adrenaline_injector",
+ "texture_size": [32, 32],
+ "textures": {
+ "0": "sa_combat:item/smirkers_bar",
+ "particle": "sa_combat:item/particule_smirkers"
+ },
+ "elements": [
+ {
+ "from": [6, 0, 7],
+ "to": [10, 14, 9],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 0, 7]},
+ "faces": {
+ "north": {"uv": [0, 0, 2, 7], "texture": "#0"},
+ "east": {"uv": [5, 0, 6, 7], "texture": "#0"},
+ "south": {"uv": [2.5, 0, 4.5, 7], "texture": "#0"},
+ "west": {"uv": [6.5, 0, 7.5, 7], "texture": "#0"},
+ "up": {"uv": [10, 1, 8, 0], "texture": "#0"},
+ "down": {"uv": [10, 1.5, 8, 2.5], "texture": "#0"}
+ }
+ },
+ {
+ "from": [6, 5.55, 9.9],
+ "to": [10, 8.55, 9.9],
+ "rotation": {"angle": -22.5, "axis": "x", "origin": [8, 6.5, 7.9]},
+ "faces": {
+ "north": {"uv": [4.5, 7.5, 2.5, 9], "texture": "#0"},
+ "east": {"uv": [3, 9.5, 3, 11], "texture": "#0"},
+ "south": {"uv": [2, 7.5, 0, 9], "texture": "#0"},
+ "west": {"uv": [9.5, 3, 9.5, 4.5], "texture": "#0"},
+ "up": {"uv": [10, 7, 8, 7], "texture": "#0"},
+ "down": {"uv": [5.5, 9.5, 3.5, 9.5], "texture": "#0"}
+ }
+ },
+ {
+ "from": [10.9, 5.45, 7],
+ "to": [10.9, 8.45, 9],
+ "rotation": {"angle": 22.5, "axis": "z", "origin": [8.9, 6.45, 11]},
+ "faces": {
+ "north": {"uv": [3.5, 10, 3.5, 11.5], "texture": "#0"},
+ "east": {"uv": [8, 5, 9, 6.5], "texture": "#0"},
+ "south": {"uv": [10, 3, 10, 4.5], "texture": "#0"},
+ "west": {"uv": [8, 3, 9, 4.5], "texture": "#0"},
+ "up": {"uv": [4, 10, 4, 11], "texture": "#0"},
+ "down": {"uv": [4.5, 11, 4.5, 10], "texture": "#0"}
+ }
+ },
+ {
+ "from": [6, 5.55, 6.1],
+ "to": [10, 8.55, 6.1],
+ "rotation": {"angle": 22.5, "axis": "x", "origin": [8, 6.5, 8.1]},
+ "faces": {
+ "north": {"uv": [0, 7.5, 2, 9], "texture": "#0"},
+ "east": {"uv": [3, 9.5, 3, 11], "texture": "#0"},
+ "south": {"uv": [2.5, 7.5, 4.5, 9], "texture": "#0"},
+ "west": {"uv": [9.5, 3, 9.5, 4.5], "texture": "#0"},
+ "up": {"uv": [10, 7, 8, 7], "texture": "#0"},
+ "down": {"uv": [5.5, 9.5, 3.5, 9.5], "texture": "#0"}
+ }
+ },
+ {
+ "from": [5.1, 5.45, 7],
+ "to": [5.1, 8.45, 9],
+ "rotation": {"angle": -22.5, "axis": "z", "origin": [7.1, 6.45, 5]},
+ "faces": {
+ "north": {"uv": [10, 3, 10, 4.5], "texture": "#0"},
+ "east": {"uv": [8, 3, 9, 4.5], "texture": "#0"},
+ "south": {"uv": [3.5, 10, 3.5, 11.5], "texture": "#0"},
+ "west": {"uv": [8, 5, 9, 6.5], "texture": "#0"},
+ "up": {"uv": [4, 11, 4, 10], "texture": "#0"},
+ "down": {"uv": [4.5, 10, 4.5, 11], "texture": "#0"}
+ }
+ }
+ ],
+ "display": {
+ "thirdperson_righthand": {
+ "rotation": [56, 64, 0],
+ "translation": [-1, 1, 1.25],
+ "scale": [0.4, 0.4, 0.4]
+ },
+ "thirdperson_lefthand": {
+ "rotation": [56, 64, 0],
+ "translation": [-1, 1, 1.25],
+ "scale": [0.4, 0.4, 0.4]
+ },
+ "firstperson_righthand": {
+ "rotation": [0, 107, 17],
+ "translation": [-0.5, 2.25, 1.25],
+ "scale": [0.4, 0.4, 0.4]
+ },
+ "firstperson_lefthand": {
+ "rotation": [0, 107, 17],
+ "translation": [-0.5, 2.25, 1.25],
+ "scale": [0.4, 0.4, 0.4]
+ },
+ "ground": {
+ "translation": [0, 2, 0],
+ "scale": [0.5, 0.5, 0.5]
+ },
+ "gui": {
+ "rotation": [-19, 169, 26],
+ "translation": [0.25, 1, 0],
+ "scale": [0.99923, 0.99923, 0.99923]
+ },
+ "head": {
+ "rotation": [0, -180, 0],
+ "translation": [0, 13, 7]
+ },
+ "fixed": {
+ "rotation": [25, 0, 0],
+ "translation": [0, 3.25, 0.25],
+ "scale": [0.83594, 0.83594, 0.83594]
+ },
+ "on_shelf": {
+ "rotation": [0, -180, 0]
+ }
+ },
+ "groups": [
+ {
+ "name": "group",
+ "origin": [7, 0, 7],
+ "scope": 0,
+ "color": 0,
+ "children": [
+ 0,
+ {
+ "name": "group",
+ "origin": [8, 6, 8],
+ "scope": 0,
+ "color": 0,
+ "children": [1, 2]
+ },
+ {
+ "name": "group",
+ "origin": [8, 6, 8],
+ "scope": 0,
+ "color": 0,
+ "children": [3, 4]
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/_sa_food_models/06_零食甜食酱料/sniksnak_bar.json b/_sa_food_models/06_零食甜食酱料/sniksnak_bar.json
new file mode 100644
index 0000000..d55ed41
--- /dev/null
+++ b/_sa_food_models/06_零食甜食酱料/sniksnak_bar.json
@@ -0,0 +1,145 @@
+{
+ "format_version": "1.21.11",
+ "credit": "Made with Blockbench",
+ "parent": "survival_instinct:custom/adrenaline_injector",
+ "texture_size": [32, 32],
+ "textures": {
+ "0": "sa_combat:item/sniksnak_bar",
+ "particle": "sa_combat:item/particule_smirkers"
+ },
+ "elements": [
+ {
+ "from": [6, 0, 7],
+ "to": [10, 14, 9],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 0, 7]},
+ "faces": {
+ "north": {"uv": [0, 0, 2, 7], "texture": "#0"},
+ "east": {"uv": [5, 0, 6, 7], "texture": "#0"},
+ "south": {"uv": [2.5, 0, 4.5, 7], "texture": "#0"},
+ "west": {"uv": [6.5, 0, 7.5, 7], "texture": "#0"},
+ "up": {"uv": [10, 1, 8, 0], "texture": "#0"},
+ "down": {"uv": [10, 1.5, 8, 2.5], "texture": "#0"}
+ }
+ },
+ {
+ "from": [6, 5.55, 9.9],
+ "to": [10, 8.55, 9.9],
+ "rotation": {"angle": -22.5, "axis": "x", "origin": [8, 6.5, 7.9]},
+ "faces": {
+ "north": {"uv": [4.5, 7.5, 2.5, 9], "texture": "#0"},
+ "east": {"uv": [3, 9.5, 3, 11], "texture": "#0"},
+ "south": {"uv": [2, 7.5, 0, 9], "texture": "#0"},
+ "west": {"uv": [9.5, 3, 9.5, 4.5], "texture": "#0"},
+ "up": {"uv": [10, 7, 8, 7], "texture": "#0"},
+ "down": {"uv": [5.5, 9.5, 3.5, 9.5], "texture": "#0"}
+ }
+ },
+ {
+ "from": [10.9, 5.45, 7],
+ "to": [10.9, 8.45, 9],
+ "rotation": {"angle": 22.5, "axis": "z", "origin": [8.9, 6.45, 11]},
+ "faces": {
+ "north": {"uv": [3.5, 10, 3.5, 11.5], "texture": "#0"},
+ "east": {"uv": [8, 5, 9, 6.5], "texture": "#0"},
+ "south": {"uv": [10, 3, 10, 4.5], "texture": "#0"},
+ "west": {"uv": [8, 3, 9, 4.5], "texture": "#0"},
+ "up": {"uv": [4, 10, 4, 11], "texture": "#0"},
+ "down": {"uv": [4.5, 11, 4.5, 10], "texture": "#0"}
+ }
+ },
+ {
+ "from": [6, 5.55, 6.1],
+ "to": [10, 8.55, 6.1],
+ "rotation": {"angle": 22.5, "axis": "x", "origin": [8, 6.5, 8.1]},
+ "faces": {
+ "north": {"uv": [0, 7.5, 2, 9], "texture": "#0"},
+ "east": {"uv": [3, 9.5, 3, 11], "texture": "#0"},
+ "south": {"uv": [2.5, 7.5, 4.5, 9], "texture": "#0"},
+ "west": {"uv": [9.5, 3, 9.5, 4.5], "texture": "#0"},
+ "up": {"uv": [10, 7, 8, 7], "texture": "#0"},
+ "down": {"uv": [5.5, 9.5, 3.5, 9.5], "texture": "#0"}
+ }
+ },
+ {
+ "from": [5.1, 5.45, 7],
+ "to": [5.1, 8.45, 9],
+ "rotation": {"angle": -22.5, "axis": "z", "origin": [7.1, 6.45, 5]},
+ "faces": {
+ "north": {"uv": [10, 3, 10, 4.5], "texture": "#0"},
+ "east": {"uv": [8, 3, 9, 4.5], "texture": "#0"},
+ "south": {"uv": [3.5, 10, 3.5, 11.5], "texture": "#0"},
+ "west": {"uv": [8, 5, 9, 6.5], "texture": "#0"},
+ "up": {"uv": [4, 11, 4, 10], "texture": "#0"},
+ "down": {"uv": [4.5, 10, 4.5, 11], "texture": "#0"}
+ }
+ }
+ ],
+ "display": {
+ "thirdperson_righthand": {
+ "rotation": [56, 64, 0],
+ "translation": [-1, 1, 1.25],
+ "scale": [0.4, 0.4, 0.4]
+ },
+ "thirdperson_lefthand": {
+ "rotation": [56, 64, 0],
+ "translation": [-1, 1, 1.25],
+ "scale": [0.4, 0.4, 0.4]
+ },
+ "firstperson_righthand": {
+ "rotation": [0, 107, 17],
+ "translation": [-0.5, 2.25, 1.25],
+ "scale": [0.4, 0.4, 0.4]
+ },
+ "firstperson_lefthand": {
+ "rotation": [0, 107, 17],
+ "translation": [-0.5, 2.25, 1.25],
+ "scale": [0.4, 0.4, 0.4]
+ },
+ "ground": {
+ "translation": [0, 2, 0],
+ "scale": [0.5, 0.5, 0.5]
+ },
+ "gui": {
+ "rotation": [-19, 169, 26],
+ "translation": [0.25, 1, 0],
+ "scale": [0.99923, 0.99923, 0.99923]
+ },
+ "head": {
+ "rotation": [0, -180, 0],
+ "translation": [0, 13, 7]
+ },
+ "fixed": {
+ "rotation": [25, 0, 0],
+ "translation": [0, 3.25, 0.25],
+ "scale": [0.83594, 0.83594, 0.83594]
+ },
+ "on_shelf": {
+ "rotation": [0, -180, 0]
+ }
+ },
+ "groups": [
+ {
+ "name": "group",
+ "origin": [7, 0, 7],
+ "scope": 0,
+ "color": 0,
+ "children": [
+ 0,
+ {
+ "name": "group",
+ "origin": [8, 6, 8],
+ "scope": 0,
+ "color": 0,
+ "children": [1, 2]
+ },
+ {
+ "name": "group",
+ "origin": [8, 6, 8],
+ "scope": 0,
+ "color": 0,
+ "children": [3, 4]
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/_sa_food_models/07_巴西小食/brigadeiro.json b/_sa_food_models/07_巴西小食/brigadeiro.json
new file mode 100644
index 0000000..cf5a560
--- /dev/null
+++ b/_sa_food_models/07_巴西小食/brigadeiro.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:item/generated",
+ "textures": {
+ "layer0": "sa_combat:item/brigadeiro"
+ }
+}
\ No newline at end of file
diff --git a/_sa_food_models/07_巴西小食/coxinha.json b/_sa_food_models/07_巴西小食/coxinha.json
new file mode 100644
index 0000000..39a99df
--- /dev/null
+++ b/_sa_food_models/07_巴西小食/coxinha.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:item/generated",
+ "textures": {
+ "layer0": "sa_combat:item/coxinha"
+ }
+}
\ No newline at end of file
diff --git a/_sa_food_models/07_巴西小食/coxinha_dough.json b/_sa_food_models/07_巴西小食/coxinha_dough.json
new file mode 100644
index 0000000..01b7c9b
--- /dev/null
+++ b/_sa_food_models/07_巴西小食/coxinha_dough.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:item/generated",
+ "textures": {
+ "layer0": "sa_combat:item/coxinha_dough"
+ }
+}
\ No newline at end of file
diff --git a/_sa_food_models/07_巴西小食/meat_pastel.json b/_sa_food_models/07_巴西小食/meat_pastel.json
new file mode 100644
index 0000000..46c00c4
--- /dev/null
+++ b/_sa_food_models/07_巴西小食/meat_pastel.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:item/generated",
+ "textures": {
+ "layer0": "sa_combat:item/meat_pastel"
+ }
+}
\ No newline at end of file
diff --git a/_sa_food_models/07_巴西小食/pacoquita.json b/_sa_food_models/07_巴西小食/pacoquita.json
new file mode 100644
index 0000000..c40fac2
--- /dev/null
+++ b/_sa_food_models/07_巴西小食/pacoquita.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:item/generated",
+ "textures": {
+ "layer0": "sa_combat:item/pacoquita"
+ }
+}
\ No newline at end of file
diff --git a/_sa_food_models/07_巴西小食/pastel_dough.json b/_sa_food_models/07_巴西小食/pastel_dough.json
new file mode 100644
index 0000000..3676da7
--- /dev/null
+++ b/_sa_food_models/07_巴西小食/pastel_dough.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:item/generated",
+ "textures": {
+ "layer0": "sa_combat:item/pastel_dough"
+ }
+}
\ No newline at end of file
diff --git a/_sa_food_models/07_巴西小食/raw_cheese_pastel.json b/_sa_food_models/07_巴西小食/raw_cheese_pastel.json
new file mode 100644
index 0000000..b7d036c
--- /dev/null
+++ b/_sa_food_models/07_巴西小食/raw_cheese_pastel.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:item/generated",
+ "textures": {
+ "layer0": "sa_combat:item/raw_cheese_pastel"
+ }
+}
\ No newline at end of file
diff --git a/_sa_food_models/07_巴西小食/raw_coxinha.json b/_sa_food_models/07_巴西小食/raw_coxinha.json
new file mode 100644
index 0000000..a3017e4
--- /dev/null
+++ b/_sa_food_models/07_巴西小食/raw_coxinha.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:item/generated",
+ "textures": {
+ "layer0": "sa_combat:item/raw_coxinha"
+ }
+}
\ No newline at end of file
diff --git a/_sa_food_models/07_巴西小食/raw_meat_pastel.json b/_sa_food_models/07_巴西小食/raw_meat_pastel.json
new file mode 100644
index 0000000..7d56c4e
--- /dev/null
+++ b/_sa_food_models/07_巴西小食/raw_meat_pastel.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:item/generated",
+ "textures": {
+ "layer0": "sa_combat:item/raw_meat_pastel"
+ }
+}
\ No newline at end of file
diff --git a/_sa_food_models/07_巴西小食/raw_wind_pastel.json b/_sa_food_models/07_巴西小食/raw_wind_pastel.json
new file mode 100644
index 0000000..3eae98e
--- /dev/null
+++ b/_sa_food_models/07_巴西小食/raw_wind_pastel.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:item/generated",
+ "textures": {
+ "layer0": "sa_combat:item/raw_wind_pastel"
+ }
+}
\ No newline at end of file
diff --git a/_sa_food_models/07_巴西小食/rotten_coxinha.json b/_sa_food_models/07_巴西小食/rotten_coxinha.json
new file mode 100644
index 0000000..3393d5b
--- /dev/null
+++ b/_sa_food_models/07_巴西小食/rotten_coxinha.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:item/generated",
+ "textures": {
+ "layer0": "sa_combat:item/rotten_coxinha"
+ }
+}
\ No newline at end of file
diff --git a/_sa_food_models/07_巴西小食/saltine_cracker.json b/_sa_food_models/07_巴西小食/saltine_cracker.json
new file mode 100644
index 0000000..473855b
--- /dev/null
+++ b/_sa_food_models/07_巴西小食/saltine_cracker.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:item/generated",
+ "textures": {
+ "layer0": "sa_combat:item/saltine_cracker"
+ }
+}
\ No newline at end of file
diff --git a/_sa_food_models/07_巴西小食/wind_pastel.json b/_sa_food_models/07_巴西小食/wind_pastel.json
new file mode 100644
index 0000000..5e1cbb4
--- /dev/null
+++ b/_sa_food_models/07_巴西小食/wind_pastel.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:item/generated",
+ "textures": {
+ "layer0": "sa_combat:item/wind_pastel"
+ }
+}
\ No newline at end of file
diff --git a/_sa_food_models/08_披萨薯片谷物/barbecue_chips_bag.json b/_sa_food_models/08_披萨薯片谷物/barbecue_chips_bag.json
new file mode 100644
index 0000000..a074baf
--- /dev/null
+++ b/_sa_food_models/08_披萨薯片谷物/barbecue_chips_bag.json
@@ -0,0 +1,104 @@
+{
+ "format_version": "1.21.11",
+ "credit": "Made with Blockbench",
+ "parent": "survival_instinct:custom/adrenaline_injector",
+ "texture_size": [64, 64],
+ "textures": {
+ "0": "sa_combat:item/barbecue_chips_bag",
+ "particle": "sa_combat:item/chips"
+ },
+ "elements": [
+ {
+ "from": [3, 0, 8],
+ "to": [13, 2, 8],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 0, 7]},
+ "faces": {
+ "north": {"uv": [4.25, 3.25, 6.75, 3.75], "texture": "#0"},
+ "east": {"uv": [5.5, 0, 5.5, 0.5], "texture": "#0"},
+ "south": {"uv": [4.25, 3.25, 6.75, 3.75], "texture": "#0"},
+ "west": {"uv": [5.5, 0.75, 5.5, 1.25], "texture": "#0"},
+ "up": {"uv": [4, 5.5, 1.5, 5.5], "texture": "#0"},
+ "down": {"uv": [8, 1.5, 5.5, 1.5], "texture": "#0"}
+ }
+ },
+ {
+ "from": [3, 14, 8],
+ "to": [13, 16, 8],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 14, 7]},
+ "faces": {
+ "north": {"uv": [1.5, 4.75, 4, 5.25], "texture": "#0"},
+ "east": {"uv": [5.5, 1.75, 5.5, 2.25], "texture": "#0"},
+ "south": {"uv": [1.5, 4.75, 4, 5.25], "texture": "#0"},
+ "west": {"uv": [5.5, 2.5, 5.5, 3], "texture": "#0"},
+ "up": {"uv": [6.75, 5.5, 4.25, 5.5], "texture": "#0"},
+ "down": {"uv": [8.25, 0, 5.75, 0], "texture": "#0"}
+ }
+ },
+ {
+ "from": [3, 2, 7],
+ "to": [13, 14, 9],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 2, 7]},
+ "faces": {
+ "north": {"uv": [2.75, 0, 5.25, 3], "texture": "#0"},
+ "east": {"uv": [0, 3.25, 0.5, 6.25], "texture": "#0"},
+ "south": {"uv": [0, 0, 2.5, 3], "texture": "#0"},
+ "west": {"uv": [0.75, 3.25, 1.25, 6.25], "texture": "#0"},
+ "up": {"uv": [4, 3.75, 1.5, 3.25], "texture": "#0"},
+ "down": {"uv": [4, 4, 1.5, 4.5], "texture": "#0"}
+ }
+ }
+ ],
+ "gui_light": "front",
+ "display": {
+ "thirdperson_righthand": {
+ "rotation": [56, 64, 0],
+ "translation": [-1.75, 0.25, 0.25],
+ "scale": [0.4, 0.4, 0.4]
+ },
+ "thirdperson_lefthand": {
+ "rotation": [56, 64, 0],
+ "translation": [-1.75, 0.25, 0.25],
+ "scale": [0.4, 0.4, 0.4]
+ },
+ "firstperson_righthand": {
+ "rotation": [-4, 117, 19],
+ "translation": [-1.5, 2.75, 2.75],
+ "scale": [0.4, 0.4, 0.4]
+ },
+ "firstperson_lefthand": {
+ "rotation": [-4, 117, 19],
+ "translation": [-1.5, 2.75, 2.75],
+ "scale": [0.4, 0.4, 0.4]
+ },
+ "ground": {
+ "translation": [0, 2, 0],
+ "scale": [0.5, 0.5, 0.5]
+ },
+ "gui": {
+ "rotation": [-31, 157, 23],
+ "translation": [0.25, 0, 0],
+ "scale": [0.90352, 0.90352, 0.90352]
+ },
+ "head": {
+ "rotation": [0, -180, 0],
+ "translation": [0, 13, 7]
+ },
+ "fixed": {
+ "rotation": [25, 0, 0],
+ "translation": [0, 3, 0.25],
+ "scale": [0.83594, 0.83594, 0.83594]
+ },
+ "on_shelf": {
+ "rotation": [0, -180, 0]
+ }
+ },
+ "groups": [
+ {
+ "name": "group",
+ "origin": [7, 0, 8],
+ "scope": 0,
+ "color": 0,
+ "children": [0, 1, 2]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/_sa_food_models/08_披萨薯片谷物/candy_package.json b/_sa_food_models/08_披萨薯片谷物/candy_package.json
new file mode 100644
index 0000000..85688b7
--- /dev/null
+++ b/_sa_food_models/08_披萨薯片谷物/candy_package.json
@@ -0,0 +1,104 @@
+{
+ "format_version": "1.21.11",
+ "credit": "Made with Blockbench",
+ "parent": "survival_instinct:custom/adrenaline_injector",
+ "texture_size": [32, 32],
+ "textures": {
+ "1": "sa_combat:item/candy_package",
+ "particle": "sa_combat:item/candys"
+ },
+ "elements": [
+ {
+ "from": [3, 0, 8],
+ "to": [13, 2, 8],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 0, 7]},
+ "faces": {
+ "north": {"uv": [9, 6, 14, 7], "texture": "#1"},
+ "east": {"uv": [0, 0, 0, 1], "texture": "#1"},
+ "south": {"uv": [9, 6, 14, 7], "texture": "#1"},
+ "west": {"uv": [0, 0, 0, 1], "texture": "#1"},
+ "up": {"uv": [5, 0, 0, 0], "texture": "#1"},
+ "down": {"uv": [5, 0, 0, 0], "texture": "#1"}
+ }
+ },
+ {
+ "from": [3, 14, 8],
+ "to": [13, 16, 8],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 14, 7]},
+ "faces": {
+ "north": {"uv": [9, 7, 14, 6], "texture": "#1"},
+ "east": {"uv": [0, 0, 0, 1], "texture": "#1"},
+ "south": {"uv": [9, 7, 14, 6], "texture": "#1"},
+ "west": {"uv": [0, 0, 0, 1], "texture": "#1"},
+ "up": {"uv": [5, 0, 0, 0], "texture": "#1"},
+ "down": {"uv": [5, 0, 0, 0], "texture": "#1"}
+ }
+ },
+ {
+ "from": [3, 2, 6],
+ "to": [13, 14, 10],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 2, 7]},
+ "faces": {
+ "north": {"uv": [0, 0, 5, 6], "texture": "#1"},
+ "east": {"uv": [0, 6, 2, 12], "texture": "#1"},
+ "south": {"uv": [0, 0, 5, 6], "texture": "#1"},
+ "west": {"uv": [2, 6, 0, 12], "texture": "#1"},
+ "up": {"uv": [9, 8, 4, 6], "texture": "#1"},
+ "down": {"uv": [9, 8, 4, 10], "texture": "#1"}
+ }
+ }
+ ],
+ "gui_light": "front",
+ "display": {
+ "thirdperson_righthand": {
+ "rotation": [56, 64, 0],
+ "translation": [-1.75, 0.25, 0.25],
+ "scale": [0.4, 0.4, 0.4]
+ },
+ "thirdperson_lefthand": {
+ "rotation": [56, 64, 0],
+ "translation": [-1.75, 0.25, 0.25],
+ "scale": [0.4, 0.4, 0.4]
+ },
+ "firstperson_righthand": {
+ "rotation": [-22, 121, 19],
+ "translation": [-1.5, 3.25, 2.75],
+ "scale": [0.4, 0.4, 0.4]
+ },
+ "firstperson_lefthand": {
+ "rotation": [-22, 121, 19],
+ "translation": [-1.5, 3.25, 2.75],
+ "scale": [0.4, 0.4, 0.4]
+ },
+ "ground": {
+ "translation": [0, 2, 0],
+ "scale": [0.5, 0.5, 0.5]
+ },
+ "gui": {
+ "rotation": [-31, 157, 23],
+ "translation": [0.25, 0, 0],
+ "scale": [0.90352, 0.90352, 0.90352]
+ },
+ "head": {
+ "rotation": [0, -180, 0],
+ "translation": [0, 13, 7]
+ },
+ "fixed": {
+ "rotation": [25, 0, 0],
+ "translation": [0, 3, 0.25],
+ "scale": [0.83594, 0.83594, 0.83594]
+ },
+ "on_shelf": {
+ "rotation": [0, -180, 0]
+ }
+ },
+ "groups": [
+ {
+ "name": "group",
+ "origin": [7, 0, 8],
+ "scope": 0,
+ "color": 0,
+ "children": [0, 1, 2]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/_sa_food_models/08_披萨薯片谷物/cereal.json b/_sa_food_models/08_披萨薯片谷物/cereal.json
new file mode 100644
index 0000000..68cba75
--- /dev/null
+++ b/_sa_food_models/08_披萨薯片谷物/cereal.json
@@ -0,0 +1,67 @@
+{
+ "format_version": "1.21.11",
+ "credit": "Made with Blockbench",
+ "texture_size": [64, 64],
+ "textures": {
+ "0": "sa_combat:item/cereal",
+ "particle": "sa_combat:item/cereal_kelloggys_flakes"
+ },
+ "elements": [
+ {
+ "from": [2, 0, 6],
+ "to": [14, 17, 10],
+ "rotation": {"angle": 0, "axis": "y", "origin": [0, 0, 7]},
+ "faces": {
+ "north": {"uv": [0, 0, 5, 7], "texture": "#0"},
+ "east": {"uv": [2.5, 7.5, 4.5, 14.5], "texture": "#0"},
+ "south": {"uv": [5.5, 0, 10.5, 7], "texture": "#0"},
+ "west": {"uv": [0, 7.5, 2, 14.5], "texture": "#0"},
+ "up": {"uv": [5, 7.5, 10, 9.5], "texture": "#0"},
+ "down": {"uv": [5, 7.5, 10, 9.5], "texture": "#0"}
+ }
+ }
+ ],
+ "gui_light": "front",
+ "display": {
+ "thirdperson_righthand": {
+ "rotation": [92.75, 73.5, -67.5],
+ "translation": [-2, 2.25, 2.25],
+ "scale": [0.55, 0.55, 0.55]
+ },
+ "thirdperson_lefthand": {
+ "rotation": [92.75, 73.5, -67.5],
+ "translation": [-2, 2.25, 2.25],
+ "scale": [0.55, 0.55, 0.55]
+ },
+ "firstperson_righthand": {
+ "rotation": [-155.67, 87.24, 146.71],
+ "translation": [-1.5, 3.25, 2.25],
+ "scale": [0.44883, 0.44883, 0.44883]
+ },
+ "firstperson_lefthand": {
+ "rotation": [-155.67, 87.24, 146.71],
+ "translation": [-1.5, 3.25, 2.25],
+ "scale": [0.44883, 0.44883, 0.44883]
+ },
+ "ground": {
+ "translation": [0, 2.5, 0],
+ "scale": [0.5, 0.5, 0.5]
+ },
+ "gui": {
+ "rotation": [-171.31, 28.48, -168.29],
+ "translation": [-0.25, -0.25, 0],
+ "scale": [0.81718, 0.81718, 0.81718]
+ },
+ "head": {
+ "rotation": [0, -180, 0],
+ "translation": [0, 13, 0.25]
+ },
+ "fixed": {
+ "rotation": [0, 1, 0],
+ "translation": [0, 4.75, 0]
+ },
+ "on_shelf": {
+ "rotation": [0, -180, 0]
+ }
+ }
+}
\ No newline at end of file
diff --git a/_sa_food_models/08_披萨薯片谷物/cereal_fruit_loops.json b/_sa_food_models/08_披萨薯片谷物/cereal_fruit_loops.json
new file mode 100644
index 0000000..f541530
--- /dev/null
+++ b/_sa_food_models/08_披萨薯片谷物/cereal_fruit_loops.json
@@ -0,0 +1,67 @@
+{
+ "format_version": "1.21.11",
+ "credit": "Made with Blockbench",
+ "texture_size": [64, 64],
+ "textures": {
+ "0": "sa_combat:item/cereal_fruit_loops",
+ "particle": "sa_combat:item/cereal_fruit_loops"
+ },
+ "elements": [
+ {
+ "from": [2, 0, 6],
+ "to": [14, 17, 10],
+ "rotation": {"angle": 0, "axis": "y", "origin": [0, 0, 7]},
+ "faces": {
+ "north": {"uv": [0, 0, 5, 7], "texture": "#0"},
+ "east": {"uv": [2.5, 7.5, 4.5, 14.5], "texture": "#0"},
+ "south": {"uv": [5.5, 0, 10.5, 7], "texture": "#0"},
+ "west": {"uv": [0, 7.5, 2, 14.5], "texture": "#0"},
+ "up": {"uv": [5, 7.5, 10, 9.5], "texture": "#0"},
+ "down": {"uv": [5, 7.5, 10, 9.5], "texture": "#0"}
+ }
+ }
+ ],
+ "gui_light": "front",
+ "display": {
+ "thirdperson_righthand": {
+ "rotation": [92.75, 73.5, -67.5],
+ "translation": [-2, 2.25, 2.25],
+ "scale": [0.55, 0.55, 0.55]
+ },
+ "thirdperson_lefthand": {
+ "rotation": [92.75, 73.5, -67.5],
+ "translation": [-2, 2.25, 2.25],
+ "scale": [0.55, 0.55, 0.55]
+ },
+ "firstperson_righthand": {
+ "rotation": [-155.67, 87.24, 146.71],
+ "translation": [-1.5, 3.25, 2.25],
+ "scale": [0.44883, 0.44883, 0.44883]
+ },
+ "firstperson_lefthand": {
+ "rotation": [-155.67, 87.24, 146.71],
+ "translation": [-1.5, 3.25, 2.25],
+ "scale": [0.44883, 0.44883, 0.44883]
+ },
+ "ground": {
+ "translation": [0, 2.5, 0],
+ "scale": [0.5, 0.5, 0.5]
+ },
+ "gui": {
+ "rotation": [-171.31, 28.48, -168.29],
+ "translation": [-0.25, -0.25, 0],
+ "scale": [0.81718, 0.81718, 0.81718]
+ },
+ "head": {
+ "rotation": [0, -180, 0],
+ "translation": [0, 13, 0.25]
+ },
+ "fixed": {
+ "rotation": [0, 1, 0],
+ "translation": [0, 4.75, 0]
+ },
+ "on_shelf": {
+ "rotation": [0, -180, 0]
+ }
+ }
+}
\ No newline at end of file
diff --git a/_sa_food_models/08_披萨薯片谷物/cereal_fruit_loops_flakes.json b/_sa_food_models/08_披萨薯片谷物/cereal_fruit_loops_flakes.json
new file mode 100644
index 0000000..26d8a57
--- /dev/null
+++ b/_sa_food_models/08_披萨薯片谷物/cereal_fruit_loops_flakes.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:item/generated",
+ "textures": {
+ "layer0": "sa_combat:item/cereal_fruit_loops_flakes"
+ }
+}
\ No newline at end of file
diff --git a/_sa_food_models/08_披萨薯片谷物/cereal_kelloggys.json b/_sa_food_models/08_披萨薯片谷物/cereal_kelloggys.json
new file mode 100644
index 0000000..d2eefc4
--- /dev/null
+++ b/_sa_food_models/08_披萨薯片谷物/cereal_kelloggys.json
@@ -0,0 +1,67 @@
+{
+ "format_version": "1.21.11",
+ "credit": "Made with Blockbench",
+ "texture_size": [64, 64],
+ "textures": {
+ "0": "sa_combat:item/cereal_kelloggys",
+ "particle": "sa_combat:item/cereal_kelloggys_flakes"
+ },
+ "elements": [
+ {
+ "from": [2, 0, 6],
+ "to": [14, 17, 10],
+ "rotation": {"angle": 0, "axis": "y", "origin": [0, 0, 7]},
+ "faces": {
+ "north": {"uv": [0, 0, 3, 4.25], "texture": "#0"},
+ "east": {"uv": [0, 4.25, 1, 8.5], "texture": "#0"},
+ "south": {"uv": [3, 0, 6, 4.25], "texture": "#0"},
+ "west": {"uv": [1, 4.25, 2, 8.5], "texture": "#0"},
+ "up": {"uv": [5, 5.25, 2, 4.25], "texture": "#0"},
+ "down": {"uv": [8, 4.25, 5, 5.25], "texture": "#0"}
+ }
+ }
+ ],
+ "gui_light": "front",
+ "display": {
+ "thirdperson_righthand": {
+ "rotation": [92.75, 73.5, -67.5],
+ "translation": [-2, 2.25, 2.25],
+ "scale": [0.55, 0.55, 0.55]
+ },
+ "thirdperson_lefthand": {
+ "rotation": [92.75, 73.5, -67.5],
+ "translation": [-2, 2.25, 2.25],
+ "scale": [0.55, 0.55, 0.55]
+ },
+ "firstperson_righthand": {
+ "rotation": [-155.67, 87.24, 146.71],
+ "translation": [-1.5, 3.25, 2.25],
+ "scale": [0.44883, 0.44883, 0.44883]
+ },
+ "firstperson_lefthand": {
+ "rotation": [-155.67, 87.24, 146.71],
+ "translation": [-1.5, 3.25, 2.25],
+ "scale": [0.44883, 0.44883, 0.44883]
+ },
+ "ground": {
+ "translation": [0, 2.5, 0],
+ "scale": [0.5, 0.5, 0.5]
+ },
+ "gui": {
+ "rotation": [-171.31, 28.48, -168.29],
+ "translation": [-0.25, -0.25, 0],
+ "scale": [0.81718, 0.81718, 0.81718]
+ },
+ "head": {
+ "rotation": [0, -180, 0],
+ "translation": [0, 13, 0.25]
+ },
+ "fixed": {
+ "rotation": [0, 1, 0],
+ "translation": [0, 4.75, 0]
+ },
+ "on_shelf": {
+ "rotation": [0, -180, 0]
+ }
+ }
+}
\ No newline at end of file
diff --git a/_sa_food_models/08_披萨薯片谷物/cereal_kelloggys_flakes.json b/_sa_food_models/08_披萨薯片谷物/cereal_kelloggys_flakes.json
new file mode 100644
index 0000000..82f5269
--- /dev/null
+++ b/_sa_food_models/08_披萨薯片谷物/cereal_kelloggys_flakes.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:item/generated",
+ "textures": {
+ "layer0": "sa_combat:item/cereal_kelloggys_flakes"
+ }
+}
\ No newline at end of file
diff --git a/_sa_food_models/08_披萨薯片谷物/chips.json b/_sa_food_models/08_披萨薯片谷物/chips.json
new file mode 100644
index 0000000..cf12863
--- /dev/null
+++ b/_sa_food_models/08_披萨薯片谷物/chips.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:item/generated",
+ "textures": {
+ "layer0": "sa_combat:item/chips"
+ }
+}
\ No newline at end of file
diff --git a/_sa_food_models/08_披萨薯片谷物/pizza.json b/_sa_food_models/08_披萨薯片谷物/pizza.json
new file mode 100644
index 0000000..64ff5c9
--- /dev/null
+++ b/_sa_food_models/08_披萨薯片谷物/pizza.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:item/generated",
+ "textures": {
+ "layer0": "sa_combat:item/pizza"
+ }
+}
\ No newline at end of file
diff --git a/_sa_food_models/08_披萨薯片谷物/pizza_box.json b/_sa_food_models/08_披萨薯片谷物/pizza_box.json
new file mode 100644
index 0000000..8d3dbbd
--- /dev/null
+++ b/_sa_food_models/08_披萨薯片谷物/pizza_box.json
@@ -0,0 +1,135 @@
+{
+ "format_version": "1.21.11",
+ "credit": "Made with Blockbench",
+ "texture_size": [64, 64],
+ "textures": {
+ "0": "sa_combat:item/pizza_box",
+ "particle": "sa_combat:item/pizza_box"
+ },
+ "elements": [
+ {
+ "from": [0, 0, 0],
+ "to": [16, 2, 16],
+ "faces": {
+ "north": {"uv": [4.25, 0, 8.25, 0.5], "texture": "#0"},
+ "east": {"uv": [4.25, 0.75, 8.25, 1.25], "texture": "#0"},
+ "south": {"uv": [4.25, 1.5, 8.25, 2], "texture": "#0"},
+ "west": {"uv": [4.25, 2.25, 8.25, 2.75], "texture": "#0"},
+ "up": {"uv": [4, 4, 0, 0], "texture": "#0"},
+ "down": {"uv": [4, 4.25, 0, 8.25], "texture": "#0"}
+ }
+ },
+ {
+ "from": [1, 2.01, 5],
+ "to": [15, 2.01, 11],
+ "rotation": {"angle": 45, "axis": "y", "origin": [8, 2, 8]},
+ "faces": {
+ "north": {"uv": [4.25, 0, 8.25, 0.5], "texture": "#0"},
+ "east": {"uv": [4.25, 0.75, 8.25, 1.25], "texture": "#0"},
+ "south": {"uv": [4.25, 1.5, 8.25, 2], "texture": "#0"},
+ "west": {"uv": [4.25, 2.25, 8.25, 2.75], "texture": "#0"},
+ "up": {"uv": [13.25, 2.75, 9, 0.75], "texture": "#0"},
+ "down": {"uv": [12.75, 0, 8.75, 4], "texture": "#0"}
+ }
+ },
+ {
+ "from": [16, 1, 0],
+ "to": [16, 2, 16],
+ "rotation": {"angle": 22.5, "axis": "z", "origin": [16, 2, 8]},
+ "faces": {
+ "north": {"uv": [4.25, 7, 4.25, 7.25], "texture": "#0"},
+ "east": {"uv": [4.25, 3, 8.25, 3.25], "texture": "#0"},
+ "south": {"uv": [4.5, 7, 4.5, 7.25], "texture": "#0"},
+ "west": {"uv": [4.25, 3.5, 8.25, 3.75], "texture": "#0"},
+ "up": {"uv": [4.75, 11, 4.75, 7], "texture": "#0"},
+ "down": {"uv": [5, 7, 5, 11], "texture": "#0"}
+ }
+ },
+ {
+ "from": [0, 1, 0],
+ "to": [0, 2, 16],
+ "rotation": {"angle": -22.5, "axis": "z", "origin": [0, 2, 8]},
+ "faces": {
+ "north": {"uv": [5.25, 7, 5.25, 7.25], "texture": "#0"},
+ "east": {"uv": [4.25, 4, 8.25, 4.25], "texture": "#0"},
+ "south": {"uv": [5.5, 7, 5.5, 7.25], "texture": "#0"},
+ "west": {"uv": [4.25, 4.5, 8.25, 4.75], "texture": "#0"},
+ "up": {"uv": [5.75, 11, 5.75, 7], "texture": "#0"},
+ "down": {"uv": [6, 7, 6, 11], "texture": "#0"}
+ }
+ },
+ {
+ "from": [0, 1, 0],
+ "to": [16, 2, 0],
+ "rotation": {"angle": 22.5, "axis": "x", "origin": [7, 2, 0]},
+ "faces": {
+ "north": {"uv": [4.25, 5, 8.25, 5.25], "texture": "#0"},
+ "east": {"uv": [6.25, 7, 6.25, 7.25], "texture": "#0"},
+ "south": {"uv": [4.25, 5.5, 8.25, 5.75], "texture": "#0"},
+ "west": {"uv": [6.5, 7, 6.5, 7.25], "texture": "#0"},
+ "up": {"uv": [10.75, 7, 6.75, 7], "texture": "#0"},
+ "down": {"uv": [10.75, 7.25, 6.75, 7.25], "texture": "#0"}
+ }
+ },
+ {
+ "from": [0, 1, 16],
+ "to": [16, 2, 16],
+ "rotation": {"angle": -22.5, "axis": "x", "origin": [7, 2, 16]},
+ "faces": {
+ "north": {"uv": [4.25, 6, 8.25, 6.25], "texture": "#0"},
+ "east": {"uv": [4.25, 7.5, 4.25, 7.75], "texture": "#0"},
+ "south": {"uv": [4.25, 6.5, 8.25, 6.75], "texture": "#0"},
+ "west": {"uv": [4.5, 7.5, 4.5, 7.75], "texture": "#0"},
+ "up": {"uv": [10.25, 7.5, 6.25, 7.5], "texture": "#0"},
+ "down": {"uv": [10.25, 7.75, 6.25, 7.75], "texture": "#0"}
+ }
+ }
+ ],
+ "display": {
+ "thirdperson_righthand": {
+ "rotation": [8, 60, 0],
+ "translation": [0.5, 3.75, 1],
+ "scale": [0.5, 0.5, 0.5]
+ },
+ "thirdperson_lefthand": {
+ "rotation": [8, 60, 0],
+ "translation": [0.5, 3.75, 1],
+ "scale": [0.5, 0.5, 0.5]
+ },
+ "firstperson_righthand": {
+ "rotation": [15, 55, 0],
+ "translation": [-1.5, 6, 2],
+ "scale": [0.5, 0.5, 0.5]
+ },
+ "firstperson_lefthand": {
+ "rotation": [15, -126, 0],
+ "translation": [-1.5, 6, 2],
+ "scale": [0.5, 0.5, 0.5]
+ },
+ "ground": {
+ "translation": [0, 3.25, 0],
+ "scale": [0.5, 0.5, 0.5]
+ },
+ "gui": {
+ "rotation": [42, 138, 0],
+ "translation": [-0.25, 4.25, 0],
+ "scale": [0.85078, 0.85078, 0.85078]
+ },
+ "head": {
+ "translation": [0, 14.25, 0]
+ },
+ "fixed": {
+ "translation": [0, 5.5, 0],
+ "scale": [1.09375, 1.09375, 1.09375]
+ }
+ },
+ "groups": [
+ {
+ "name": "group",
+ "origin": [0, 0, 0],
+ "scope": 0,
+ "color": 0,
+ "children": [0, 1, 2, 3, 4, 5]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/_sa_food_models/08_披萨薯片谷物/plain_chips_bag.json b/_sa_food_models/08_披萨薯片谷物/plain_chips_bag.json
new file mode 100644
index 0000000..541dfe5
--- /dev/null
+++ b/_sa_food_models/08_披萨薯片谷物/plain_chips_bag.json
@@ -0,0 +1,104 @@
+{
+ "format_version": "1.21.11",
+ "credit": "Made with Blockbench",
+ "parent": "survival_instinct:custom/adrenaline_injector",
+ "texture_size": [64, 64],
+ "textures": {
+ "0": "sa_combat:item/plain_chips_bag",
+ "particle": "sa_combat:item/chips"
+ },
+ "elements": [
+ {
+ "from": [3, 0, 8],
+ "to": [13, 2, 8],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 0, 7]},
+ "faces": {
+ "north": {"uv": [4.25, 3.25, 6.75, 3.75], "texture": "#0"},
+ "east": {"uv": [5.5, 0, 5.5, 0.5], "texture": "#0"},
+ "south": {"uv": [4.25, 3.25, 6.75, 3.75], "texture": "#0"},
+ "west": {"uv": [5.5, 0.75, 5.5, 1.25], "texture": "#0"},
+ "up": {"uv": [4, 5.5, 1.5, 5.5], "texture": "#0"},
+ "down": {"uv": [8, 1.5, 5.5, 1.5], "texture": "#0"}
+ }
+ },
+ {
+ "from": [3, 14, 8],
+ "to": [13, 16, 8],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 14, 7]},
+ "faces": {
+ "north": {"uv": [1.5, 4.75, 4, 5.25], "texture": "#0"},
+ "east": {"uv": [5.5, 1.75, 5.5, 2.25], "texture": "#0"},
+ "south": {"uv": [1.5, 4.75, 4, 5.25], "texture": "#0"},
+ "west": {"uv": [5.5, 2.5, 5.5, 3], "texture": "#0"},
+ "up": {"uv": [6.75, 5.5, 4.25, 5.5], "texture": "#0"},
+ "down": {"uv": [8.25, 0, 5.75, 0], "texture": "#0"}
+ }
+ },
+ {
+ "from": [3, 2, 7],
+ "to": [13, 14, 9],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 2, 7]},
+ "faces": {
+ "north": {"uv": [2.75, 0, 5.25, 3], "texture": "#0"},
+ "east": {"uv": [0, 3.25, 0.5, 6.25], "texture": "#0"},
+ "south": {"uv": [0, 0, 2.5, 3], "texture": "#0"},
+ "west": {"uv": [0.75, 3.25, 1.25, 6.25], "texture": "#0"},
+ "up": {"uv": [4, 3.75, 1.5, 3.25], "texture": "#0"},
+ "down": {"uv": [4, 4, 1.5, 4.5], "texture": "#0"}
+ }
+ }
+ ],
+ "gui_light": "front",
+ "display": {
+ "thirdperson_righthand": {
+ "rotation": [56, 64, 0],
+ "translation": [-1.75, 0.25, 0.25],
+ "scale": [0.4, 0.4, 0.4]
+ },
+ "thirdperson_lefthand": {
+ "rotation": [56, 64, 0],
+ "translation": [-1.75, 0.25, 0.25],
+ "scale": [0.4, 0.4, 0.4]
+ },
+ "firstperson_righthand": {
+ "rotation": [-4, 117, 19],
+ "translation": [-1.5, 2.75, 2.75],
+ "scale": [0.4, 0.4, 0.4]
+ },
+ "firstperson_lefthand": {
+ "rotation": [-4, 117, 19],
+ "translation": [-1.5, 2.75, 2.75],
+ "scale": [0.4, 0.4, 0.4]
+ },
+ "ground": {
+ "translation": [0, 2, 0],
+ "scale": [0.5, 0.5, 0.5]
+ },
+ "gui": {
+ "rotation": [-31, 157, 23],
+ "translation": [0.25, 0, 0],
+ "scale": [0.90352, 0.90352, 0.90352]
+ },
+ "head": {
+ "rotation": [0, -180, 0],
+ "translation": [0, 13, 7]
+ },
+ "fixed": {
+ "rotation": [25, 0, 0],
+ "translation": [0, 3, 0.25],
+ "scale": [0.83594, 0.83594, 0.83594]
+ },
+ "on_shelf": {
+ "rotation": [0, -180, 0]
+ }
+ },
+ "groups": [
+ {
+ "name": "group",
+ "origin": [7, 0, 8],
+ "scope": 0,
+ "color": 0,
+ "children": [0, 1, 2]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/_sa_food_models/08_披萨薯片谷物/salt_vinegar_chips_bag.json b/_sa_food_models/08_披萨薯片谷物/salt_vinegar_chips_bag.json
new file mode 100644
index 0000000..03a4b1d
--- /dev/null
+++ b/_sa_food_models/08_披萨薯片谷物/salt_vinegar_chips_bag.json
@@ -0,0 +1,104 @@
+{
+ "format_version": "1.21.11",
+ "credit": "Made with Blockbench",
+ "parent": "survival_instinct:custom/adrenaline_injector",
+ "texture_size": [64, 64],
+ "textures": {
+ "0": "sa_combat:item/salt_vinegar_chips_bag",
+ "particle": "sa_combat:item/chips"
+ },
+ "elements": [
+ {
+ "from": [3, 0, 8],
+ "to": [13, 2, 8],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 0, 7]},
+ "faces": {
+ "north": {"uv": [4.25, 3.25, 6.75, 3.75], "texture": "#0"},
+ "east": {"uv": [5.5, 0, 5.5, 0.5], "texture": "#0"},
+ "south": {"uv": [4.25, 3.25, 6.75, 3.75], "texture": "#0"},
+ "west": {"uv": [5.5, 0.75, 5.5, 1.25], "texture": "#0"},
+ "up": {"uv": [4, 5.5, 1.5, 5.5], "texture": "#0"},
+ "down": {"uv": [8, 1.5, 5.5, 1.5], "texture": "#0"}
+ }
+ },
+ {
+ "from": [3, 14, 8],
+ "to": [13, 16, 8],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 14, 7]},
+ "faces": {
+ "north": {"uv": [1.5, 5.25, 4, 4.75], "texture": "#0"},
+ "east": {"uv": [5.5, 1.75, 5.5, 2.25], "texture": "#0"},
+ "south": {"uv": [1.5, 5.25, 4, 4.75], "texture": "#0"},
+ "west": {"uv": [5.5, 2.5, 5.5, 3], "texture": "#0"},
+ "up": {"uv": [6.75, 5.5, 4.25, 5.5], "texture": "#0"},
+ "down": {"uv": [8.25, 0, 5.75, 0], "texture": "#0"}
+ }
+ },
+ {
+ "from": [3, 2, 7],
+ "to": [13, 14, 9],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 2, 7]},
+ "faces": {
+ "north": {"uv": [2.75, 0, 5.25, 3], "texture": "#0"},
+ "east": {"uv": [0, 3.25, 0.5, 6.25], "texture": "#0"},
+ "south": {"uv": [0, 0, 2.5, 3], "texture": "#0"},
+ "west": {"uv": [0.75, 3.25, 1.25, 6.25], "texture": "#0"},
+ "up": {"uv": [4, 3.75, 1.5, 3.25], "texture": "#0"},
+ "down": {"uv": [4, 4, 1.5, 4.5], "texture": "#0"}
+ }
+ }
+ ],
+ "gui_light": "front",
+ "display": {
+ "thirdperson_righthand": {
+ "rotation": [56, 64, 0],
+ "translation": [-1.75, 0.25, 0.25],
+ "scale": [0.4, 0.4, 0.4]
+ },
+ "thirdperson_lefthand": {
+ "rotation": [56, 64, 0],
+ "translation": [-1.75, 0.25, 0.25],
+ "scale": [0.4, 0.4, 0.4]
+ },
+ "firstperson_righthand": {
+ "rotation": [-4, 117, 19],
+ "translation": [-1.5, 2.75, 2.75],
+ "scale": [0.4, 0.4, 0.4]
+ },
+ "firstperson_lefthand": {
+ "rotation": [-4, 117, 19],
+ "translation": [-1.5, 2.75, 2.75],
+ "scale": [0.4, 0.4, 0.4]
+ },
+ "ground": {
+ "translation": [0, 2, 0],
+ "scale": [0.5, 0.5, 0.5]
+ },
+ "gui": {
+ "rotation": [-31, 157, 23],
+ "translation": [0.25, 0, 0],
+ "scale": [0.90352, 0.90352, 0.90352]
+ },
+ "head": {
+ "rotation": [0, -180, 0],
+ "translation": [0, 13, 7]
+ },
+ "fixed": {
+ "rotation": [25, 0, 0],
+ "translation": [0, 3, 0.25],
+ "scale": [0.83594, 0.83594, 0.83594]
+ },
+ "on_shelf": {
+ "rotation": [0, -180, 0]
+ }
+ },
+ "groups": [
+ {
+ "name": "group",
+ "origin": [7, 0, 8],
+ "scope": 0,
+ "color": 0,
+ "children": [0, 1, 2]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/_sa_food_models/08_披萨薯片谷物/sour_cream_onion_chips_bag.json b/_sa_food_models/08_披萨薯片谷物/sour_cream_onion_chips_bag.json
new file mode 100644
index 0000000..8dadda2
--- /dev/null
+++ b/_sa_food_models/08_披萨薯片谷物/sour_cream_onion_chips_bag.json
@@ -0,0 +1,104 @@
+{
+ "format_version": "1.21.11",
+ "credit": "Made with Blockbench",
+ "parent": "survival_instinct:custom/adrenaline_injector",
+ "texture_size": [64, 64],
+ "textures": {
+ "0": "sa_combat:item/sour_cream_onion_chips_bag",
+ "particle": "sa_combat:item/chips"
+ },
+ "elements": [
+ {
+ "from": [3, 0, 8],
+ "to": [13, 2, 8],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 0, 7]},
+ "faces": {
+ "north": {"uv": [4.25, 3.25, 6.75, 3.75], "texture": "#0"},
+ "east": {"uv": [5.5, 0, 5.5, 0.5], "texture": "#0"},
+ "south": {"uv": [4.25, 3.25, 6.75, 3.75], "texture": "#0"},
+ "west": {"uv": [5.5, 0.75, 5.5, 1.25], "texture": "#0"},
+ "up": {"uv": [4, 5.5, 1.5, 5.5], "texture": "#0"},
+ "down": {"uv": [8, 1.5, 5.5, 1.5], "texture": "#0"}
+ }
+ },
+ {
+ "from": [3, 14, 8],
+ "to": [13, 16, 8],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 14, 7]},
+ "faces": {
+ "north": {"uv": [1.5, 4.75, 4, 5.25], "texture": "#0"},
+ "east": {"uv": [5.5, 1.75, 5.5, 2.25], "texture": "#0"},
+ "south": {"uv": [1.5, 4.75, 4, 5.25], "texture": "#0"},
+ "west": {"uv": [5.5, 2.5, 5.5, 3], "texture": "#0"},
+ "up": {"uv": [6.75, 5.5, 4.25, 5.5], "texture": "#0"},
+ "down": {"uv": [8.25, 0, 5.75, 0], "texture": "#0"}
+ }
+ },
+ {
+ "from": [3, 2, 7],
+ "to": [13, 14, 9],
+ "rotation": {"angle": 0, "axis": "y", "origin": [7, 2, 7]},
+ "faces": {
+ "north": {"uv": [2.75, 0, 5.25, 3], "texture": "#0"},
+ "east": {"uv": [0, 3.25, 0.5, 6.25], "texture": "#0"},
+ "south": {"uv": [0, 0, 2.5, 3], "texture": "#0"},
+ "west": {"uv": [0.75, 3.25, 1.25, 6.25], "texture": "#0"},
+ "up": {"uv": [4, 3.75, 1.5, 3.25], "texture": "#0"},
+ "down": {"uv": [4, 4, 1.5, 4.5], "texture": "#0"}
+ }
+ }
+ ],
+ "gui_light": "front",
+ "display": {
+ "thirdperson_righthand": {
+ "rotation": [56, 64, 0],
+ "translation": [-1.75, 0.25, 0.25],
+ "scale": [0.4, 0.4, 0.4]
+ },
+ "thirdperson_lefthand": {
+ "rotation": [56, 64, 0],
+ "translation": [-1.75, 0.25, 0.25],
+ "scale": [0.4, 0.4, 0.4]
+ },
+ "firstperson_righthand": {
+ "rotation": [-4, 117, 19],
+ "translation": [-1.5, 2.75, 2.75],
+ "scale": [0.4, 0.4, 0.4]
+ },
+ "firstperson_lefthand": {
+ "rotation": [-4, 117, 19],
+ "translation": [-1.5, 2.75, 2.75],
+ "scale": [0.4, 0.4, 0.4]
+ },
+ "ground": {
+ "translation": [0, 2, 0],
+ "scale": [0.5, 0.5, 0.5]
+ },
+ "gui": {
+ "rotation": [-31, 157, 23],
+ "translation": [0.25, 0, 0],
+ "scale": [0.90352, 0.90352, 0.90352]
+ },
+ "head": {
+ "rotation": [0, -180, 0],
+ "translation": [0, 13, 7]
+ },
+ "fixed": {
+ "rotation": [25, 0, 0],
+ "translation": [0, 3, 0.25],
+ "scale": [0.83594, 0.83594, 0.83594]
+ },
+ "on_shelf": {
+ "rotation": [0, -180, 0]
+ }
+ },
+ "groups": [
+ {
+ "name": "group",
+ "origin": [7, 0, 8],
+ "scope": 0,
+ "color": 0,
+ "children": [0, 1, 2]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/_sa_food_models/09_草药/blue_herb.json b/_sa_food_models/09_草药/blue_herb.json
new file mode 100644
index 0000000..4fa3ba7
--- /dev/null
+++ b/_sa_food_models/09_草药/blue_herb.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:item/generated",
+ "textures": {
+ "layer0": "sa_combat:item/blue_herb"
+ }
+}
\ No newline at end of file
diff --git a/_sa_food_models/09_草药/crushed_blue_herb.json b/_sa_food_models/09_草药/crushed_blue_herb.json
new file mode 100644
index 0000000..b921180
--- /dev/null
+++ b/_sa_food_models/09_草药/crushed_blue_herb.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:item/generated",
+ "textures": {
+ "layer0": "sa_combat:item/crushed_blue_herb"
+ }
+}
\ No newline at end of file
diff --git a/_sa_food_models/09_草药/crushed_green_herb.json b/_sa_food_models/09_草药/crushed_green_herb.json
new file mode 100644
index 0000000..587c4b7
--- /dev/null
+++ b/_sa_food_models/09_草药/crushed_green_herb.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:item/generated",
+ "textures": {
+ "layer0": "sa_combat:item/crushed_green_herb"
+ }
+}
\ No newline at end of file
diff --git a/_sa_food_models/09_草药/crushed_red_herb.json b/_sa_food_models/09_草药/crushed_red_herb.json
new file mode 100644
index 0000000..690fad4
--- /dev/null
+++ b/_sa_food_models/09_草药/crushed_red_herb.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:item/generated",
+ "textures": {
+ "layer0": "sa_combat:item/crushed_red_herb"
+ }
+}
\ No newline at end of file
diff --git a/_sa_food_models/09_草药/crushed_yellow_herb.json b/_sa_food_models/09_草药/crushed_yellow_herb.json
new file mode 100644
index 0000000..caee75c
--- /dev/null
+++ b/_sa_food_models/09_草药/crushed_yellow_herb.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:item/generated",
+ "textures": {
+ "layer0": "sa_combat:item/crushed_yellow_herb"
+ }
+}
\ No newline at end of file
diff --git a/_sa_food_models/09_草药/green_herb.json b/_sa_food_models/09_草药/green_herb.json
new file mode 100644
index 0000000..3004917
--- /dev/null
+++ b/_sa_food_models/09_草药/green_herb.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:item/generated",
+ "textures": {
+ "layer0": "sa_combat:item/green_herb"
+ }
+}
\ No newline at end of file
diff --git a/_sa_food_models/09_草药/mixed_gb_herbs.json b/_sa_food_models/09_草药/mixed_gb_herbs.json
new file mode 100644
index 0000000..aeca01e
--- /dev/null
+++ b/_sa_food_models/09_草药/mixed_gb_herbs.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:item/generated",
+ "textures": {
+ "layer0": "sa_combat:item/mixed_gb_herbs"
+ }
+}
\ No newline at end of file
diff --git a/_sa_food_models/09_草药/mixed_gg_herbs.json b/_sa_food_models/09_草药/mixed_gg_herbs.json
new file mode 100644
index 0000000..632da39
--- /dev/null
+++ b/_sa_food_models/09_草药/mixed_gg_herbs.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:item/generated",
+ "textures": {
+ "layer0": "sa_combat:item/mixed_gg_herbs"
+ }
+}
\ No newline at end of file
diff --git a/_sa_food_models/09_草药/mixed_ggb_herbs.json b/_sa_food_models/09_草药/mixed_ggb_herbs.json
new file mode 100644
index 0000000..3c559c1
--- /dev/null
+++ b/_sa_food_models/09_草药/mixed_ggb_herbs.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:item/generated",
+ "textures": {
+ "layer0": "sa_combat:item/mixed_ggb_herbs"
+ }
+}
\ No newline at end of file
diff --git a/_sa_food_models/09_草药/mixed_ggg_herbs.json b/_sa_food_models/09_草药/mixed_ggg_herbs.json
new file mode 100644
index 0000000..3dbe90e
--- /dev/null
+++ b/_sa_food_models/09_草药/mixed_ggg_herbs.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:item/generated",
+ "textures": {
+ "layer0": "sa_combat:item/mixed_ggg_herbs"
+ }
+}
\ No newline at end of file
diff --git a/_sa_food_models/09_草药/mixed_ggr_herbs.json b/_sa_food_models/09_草药/mixed_ggr_herbs.json
new file mode 100644
index 0000000..de8a934
--- /dev/null
+++ b/_sa_food_models/09_草药/mixed_ggr_herbs.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:item/generated",
+ "textures": {
+ "layer0": "sa_combat:item/mixed_ggr_herbs"
+ }
+}
\ No newline at end of file
diff --git a/_sa_food_models/09_草药/mixed_ggy_herbs.json b/_sa_food_models/09_草药/mixed_ggy_herbs.json
new file mode 100644
index 0000000..086dffe
--- /dev/null
+++ b/_sa_food_models/09_草药/mixed_ggy_herbs.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:item/generated",
+ "textures": {
+ "layer0": "sa_combat:item/mixed_ggy_herbs"
+ }
+}
\ No newline at end of file
diff --git a/_sa_food_models/09_草药/mixed_gr_herbs.json b/_sa_food_models/09_草药/mixed_gr_herbs.json
new file mode 100644
index 0000000..2facc60
--- /dev/null
+++ b/_sa_food_models/09_草药/mixed_gr_herbs.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:item/generated",
+ "textures": {
+ "layer0": "sa_combat:item/mixed_gr_herbs"
+ }
+}
\ No newline at end of file
diff --git a/_sa_food_models/09_草药/mixed_grb_herbs.json b/_sa_food_models/09_草药/mixed_grb_herbs.json
new file mode 100644
index 0000000..25d81b8
--- /dev/null
+++ b/_sa_food_models/09_草药/mixed_grb_herbs.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:item/generated",
+ "textures": {
+ "layer0": "sa_combat:item/mixed_grb_herbs"
+ }
+}
\ No newline at end of file
diff --git a/_sa_food_models/09_草药/mixed_gry_herbs.json b/_sa_food_models/09_草药/mixed_gry_herbs.json
new file mode 100644
index 0000000..4c7c63e
--- /dev/null
+++ b/_sa_food_models/09_草药/mixed_gry_herbs.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:item/generated",
+ "textures": {
+ "layer0": "sa_combat:item/mixed_gry_herbs"
+ }
+}
\ No newline at end of file
diff --git a/_sa_food_models/09_草药/mixed_gy_herbs.json b/_sa_food_models/09_草药/mixed_gy_herbs.json
new file mode 100644
index 0000000..6f4ef5b
--- /dev/null
+++ b/_sa_food_models/09_草药/mixed_gy_herbs.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:item/generated",
+ "textures": {
+ "layer0": "sa_combat:item/mixed_gy_herbs"
+ }
+}
\ No newline at end of file
diff --git a/_sa_food_models/09_草药/mixed_gyb_herbs.json b/_sa_food_models/09_草药/mixed_gyb_herbs.json
new file mode 100644
index 0000000..b3fa8c2
--- /dev/null
+++ b/_sa_food_models/09_草药/mixed_gyb_herbs.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:item/generated",
+ "textures": {
+ "layer0": "sa_combat:item/mixed_gyb_herbs"
+ }
+}
\ No newline at end of file
diff --git a/_sa_food_models/09_草药/mixed_rb_herbs.json b/_sa_food_models/09_草药/mixed_rb_herbs.json
new file mode 100644
index 0000000..9335588
--- /dev/null
+++ b/_sa_food_models/09_草药/mixed_rb_herbs.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:item/generated",
+ "textures": {
+ "layer0": "sa_combat:item/mixed_rb_herbs"
+ }
+}
\ No newline at end of file
diff --git a/_sa_food_models/09_草药/red_herb.json b/_sa_food_models/09_草药/red_herb.json
new file mode 100644
index 0000000..6e06028
--- /dev/null
+++ b/_sa_food_models/09_草药/red_herb.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:item/generated",
+ "textures": {
+ "layer0": "sa_combat:item/red_herb"
+ }
+}
\ No newline at end of file
diff --git a/_sa_food_models/09_草药/yellow_herb.json b/_sa_food_models/09_草药/yellow_herb.json
new file mode 100644
index 0000000..ca9297b
--- /dev/null
+++ b/_sa_food_models/09_草药/yellow_herb.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:item/generated",
+ "textures": {
+ "layer0": "sa_combat:item/yellow_herb"
+ }
+}
\ No newline at end of file
diff --git a/_sa_food_textures/barbecue_chips_bag.png b/_sa_food_textures/barbecue_chips_bag.png
new file mode 100644
index 0000000..340534a
Binary files /dev/null and b/_sa_food_textures/barbecue_chips_bag.png differ
diff --git a/_sa_food_textures/beer.png b/_sa_food_textures/beer.png
new file mode 100644
index 0000000..c01a6ba
Binary files /dev/null and b/_sa_food_textures/beer.png differ
diff --git a/_sa_food_textures/blue_herb.png b/_sa_food_textures/blue_herb.png
new file mode 100644
index 0000000..44628d1
Binary files /dev/null and b/_sa_food_textures/blue_herb.png differ
diff --git a/_sa_food_textures/candy_package.png b/_sa_food_textures/candy_package.png
new file mode 100644
index 0000000..d71d23d
Binary files /dev/null and b/_sa_food_textures/candy_package.png differ
diff --git a/_sa_food_textures/canned_foods/canned_beans.png b/_sa_food_textures/canned_foods/canned_beans.png
new file mode 100644
index 0000000..1c6fae8
Binary files /dev/null and b/_sa_food_textures/canned_foods/canned_beans.png differ
diff --git a/_sa_food_textures/canned_foods/canned_beans_p.png b/_sa_food_textures/canned_foods/canned_beans_p.png
new file mode 100644
index 0000000..f5a1cdc
Binary files /dev/null and b/_sa_food_textures/canned_foods/canned_beans_p.png differ
diff --git a/_sa_food_textures/canned_foods/canned_carrots.png b/_sa_food_textures/canned_foods/canned_carrots.png
new file mode 100644
index 0000000..2324596
Binary files /dev/null and b/_sa_food_textures/canned_foods/canned_carrots.png differ
diff --git a/_sa_food_textures/canned_foods/canned_carrots_p.png b/_sa_food_textures/canned_foods/canned_carrots_p.png
new file mode 100644
index 0000000..fa32c96
Binary files /dev/null and b/_sa_food_textures/canned_foods/canned_carrots_p.png differ
diff --git a/_sa_food_textures/canned_foods/canned_chilli.png b/_sa_food_textures/canned_foods/canned_chilli.png
new file mode 100644
index 0000000..16d317b
Binary files /dev/null and b/_sa_food_textures/canned_foods/canned_chilli.png differ
diff --git a/_sa_food_textures/canned_foods/canned_chilli_p.png b/_sa_food_textures/canned_foods/canned_chilli_p.png
new file mode 100644
index 0000000..1415e9a
Binary files /dev/null and b/_sa_food_textures/canned_foods/canned_chilli_p.png differ
diff --git a/_sa_food_textures/canned_foods/canned_corn.png b/_sa_food_textures/canned_foods/canned_corn.png
new file mode 100644
index 0000000..f52dac5
Binary files /dev/null and b/_sa_food_textures/canned_foods/canned_corn.png differ
diff --git a/_sa_food_textures/canned_foods/canned_corn_p.png b/_sa_food_textures/canned_foods/canned_corn_p.png
new file mode 100644
index 0000000..71a7d22
Binary files /dev/null and b/_sa_food_textures/canned_foods/canned_corn_p.png differ
diff --git a/_sa_food_textures/canned_foods/canned_corned_beef.png b/_sa_food_textures/canned_foods/canned_corned_beef.png
new file mode 100644
index 0000000..3723da3
Binary files /dev/null and b/_sa_food_textures/canned_foods/canned_corned_beef.png differ
diff --git a/_sa_food_textures/canned_foods/canned_corned_beef_p.png b/_sa_food_textures/canned_foods/canned_corned_beef_p.png
new file mode 100644
index 0000000..1415e9a
Binary files /dev/null and b/_sa_food_textures/canned_foods/canned_corned_beef_p.png differ
diff --git a/_sa_food_textures/canned_foods/canned_dog_food.png b/_sa_food_textures/canned_foods/canned_dog_food.png
new file mode 100644
index 0000000..461b445
Binary files /dev/null and b/_sa_food_textures/canned_foods/canned_dog_food.png differ
diff --git a/_sa_food_textures/canned_foods/canned_evaporated_milk.png b/_sa_food_textures/canned_foods/canned_evaporated_milk.png
new file mode 100644
index 0000000..dc05069
Binary files /dev/null and b/_sa_food_textures/canned_foods/canned_evaporated_milk.png differ
diff --git a/_sa_food_textures/canned_foods/canned_evaporated_milk_p.png b/_sa_food_textures/canned_foods/canned_evaporated_milk_p.png
new file mode 100644
index 0000000..2828b73
Binary files /dev/null and b/_sa_food_textures/canned_foods/canned_evaporated_milk_p.png differ
diff --git a/_sa_food_textures/canned_foods/canned_fruit_cocktail.png b/_sa_food_textures/canned_foods/canned_fruit_cocktail.png
new file mode 100644
index 0000000..5257344
Binary files /dev/null and b/_sa_food_textures/canned_foods/canned_fruit_cocktail.png differ
diff --git a/_sa_food_textures/canned_foods/canned_fruit_cocktail_p.png b/_sa_food_textures/canned_foods/canned_fruit_cocktail_p.png
new file mode 100644
index 0000000..40bd8f4
Binary files /dev/null and b/_sa_food_textures/canned_foods/canned_fruit_cocktail_p.png differ
diff --git a/_sa_food_textures/canned_foods/canned_mushroom_soup.png b/_sa_food_textures/canned_foods/canned_mushroom_soup.png
new file mode 100644
index 0000000..8e54528
Binary files /dev/null and b/_sa_food_textures/canned_foods/canned_mushroom_soup.png differ
diff --git a/_sa_food_textures/canned_foods/canned_mushroom_soup_p.png b/_sa_food_textures/canned_foods/canned_mushroom_soup_p.png
new file mode 100644
index 0000000..f15a39c
Binary files /dev/null and b/_sa_food_textures/canned_foods/canned_mushroom_soup_p.png differ
diff --git a/_sa_food_textures/canned_foods/canned_peaches.png b/_sa_food_textures/canned_foods/canned_peaches.png
new file mode 100644
index 0000000..a0d34ef
Binary files /dev/null and b/_sa_food_textures/canned_foods/canned_peaches.png differ
diff --git a/_sa_food_textures/canned_foods/canned_peaches_p.png b/_sa_food_textures/canned_foods/canned_peaches_p.png
new file mode 100644
index 0000000..b65bff6
Binary files /dev/null and b/_sa_food_textures/canned_foods/canned_peaches_p.png differ
diff --git a/_sa_food_textures/canned_foods/canned_peas.png b/_sa_food_textures/canned_foods/canned_peas.png
new file mode 100644
index 0000000..dab09d8
Binary files /dev/null and b/_sa_food_textures/canned_foods/canned_peas.png differ
diff --git a/_sa_food_textures/canned_foods/canned_peas_p.png b/_sa_food_textures/canned_foods/canned_peas_p.png
new file mode 100644
index 0000000..d6eadff
Binary files /dev/null and b/_sa_food_textures/canned_foods/canned_peas_p.png differ
diff --git a/_sa_food_textures/canned_foods/canned_pineapple.png b/_sa_food_textures/canned_foods/canned_pineapple.png
new file mode 100644
index 0000000..ba180bd
Binary files /dev/null and b/_sa_food_textures/canned_foods/canned_pineapple.png differ
diff --git a/_sa_food_textures/canned_foods/canned_pineapple_p.png b/_sa_food_textures/canned_foods/canned_pineapple_p.png
new file mode 100644
index 0000000..1af8b83
Binary files /dev/null and b/_sa_food_textures/canned_foods/canned_pineapple_p.png differ
diff --git a/_sa_food_textures/canned_foods/canned_potato.png b/_sa_food_textures/canned_foods/canned_potato.png
new file mode 100644
index 0000000..f41957c
Binary files /dev/null and b/_sa_food_textures/canned_foods/canned_potato.png differ
diff --git a/_sa_food_textures/canned_foods/canned_sardines.png b/_sa_food_textures/canned_foods/canned_sardines.png
new file mode 100644
index 0000000..1890dc0
Binary files /dev/null and b/_sa_food_textures/canned_foods/canned_sardines.png differ
diff --git a/_sa_food_textures/canned_foods/canned_sardines_p.png b/_sa_food_textures/canned_foods/canned_sardines_p.png
new file mode 100644
index 0000000..2b58d30
Binary files /dev/null and b/_sa_food_textures/canned_foods/canned_sardines_p.png differ
diff --git a/_sa_food_textures/canned_foods/canned_spaghetti_bolognese.png b/_sa_food_textures/canned_foods/canned_spaghetti_bolognese.png
new file mode 100644
index 0000000..01158ac
Binary files /dev/null and b/_sa_food_textures/canned_foods/canned_spaghetti_bolognese.png differ
diff --git a/_sa_food_textures/canned_foods/canned_spaghetti_bolognese_p.png b/_sa_food_textures/canned_foods/canned_spaghetti_bolognese_p.png
new file mode 100644
index 0000000..1415e9a
Binary files /dev/null and b/_sa_food_textures/canned_foods/canned_spaghetti_bolognese_p.png differ
diff --git a/_sa_food_textures/canned_foods/canned_tuna.png b/_sa_food_textures/canned_foods/canned_tuna.png
new file mode 100644
index 0000000..fc28e7a
Binary files /dev/null and b/_sa_food_textures/canned_foods/canned_tuna.png differ
diff --git a/_sa_food_textures/canned_foods/canned_vegetable_soup.png b/_sa_food_textures/canned_foods/canned_vegetable_soup.png
new file mode 100644
index 0000000..7368619
Binary files /dev/null and b/_sa_food_textures/canned_foods/canned_vegetable_soup.png differ
diff --git a/_sa_food_textures/canned_foods/canned_vegetable_soup_p.png b/_sa_food_textures/canned_foods/canned_vegetable_soup_p.png
new file mode 100644
index 0000000..43fd676
Binary files /dev/null and b/_sa_food_textures/canned_foods/canned_vegetable_soup_p.png differ
diff --git a/_sa_food_textures/canned_foods/fruit_beverage.png b/_sa_food_textures/canned_foods/fruit_beverage.png
new file mode 100644
index 0000000..3db4559
Binary files /dev/null and b/_sa_food_textures/canned_foods/fruit_beverage.png differ
diff --git a/_sa_food_textures/canned_foods/fruit_beverage_open.png b/_sa_food_textures/canned_foods/fruit_beverage_open.png
new file mode 100644
index 0000000..55c22a3
Binary files /dev/null and b/_sa_food_textures/canned_foods/fruit_beverage_open.png differ
diff --git a/_sa_food_textures/cereal.png b/_sa_food_textures/cereal.png
new file mode 100644
index 0000000..2f49874
Binary files /dev/null and b/_sa_food_textures/cereal.png differ
diff --git a/_sa_food_textures/cereal_fruit_loops.png b/_sa_food_textures/cereal_fruit_loops.png
new file mode 100644
index 0000000..a9cbd4a
Binary files /dev/null and b/_sa_food_textures/cereal_fruit_loops.png differ
diff --git a/_sa_food_textures/cereal_kelloggys.png b/_sa_food_textures/cereal_kelloggys.png
new file mode 100644
index 0000000..f9d1f41
Binary files /dev/null and b/_sa_food_textures/cereal_kelloggys.png differ
diff --git a/_sa_food_textures/chocolate_bar.png b/_sa_food_textures/chocolate_bar.png
new file mode 100644
index 0000000..c733e18
Binary files /dev/null and b/_sa_food_textures/chocolate_bar.png differ
diff --git a/_sa_food_textures/coffee.png b/_sa_food_textures/coffee.png
new file mode 100644
index 0000000..3591557
Binary files /dev/null and b/_sa_food_textures/coffee.png differ
diff --git a/_sa_food_textures/cola.png b/_sa_food_textures/cola.png
new file mode 100644
index 0000000..69b83a6
Binary files /dev/null and b/_sa_food_textures/cola.png differ
diff --git a/_sa_food_textures/coxinha_dough.png b/_sa_food_textures/coxinha_dough.png
new file mode 100644
index 0000000..c68cb17
Binary files /dev/null and b/_sa_food_textures/coxinha_dough.png differ
diff --git a/_sa_food_textures/crushed_blue_herb.png b/_sa_food_textures/crushed_blue_herb.png
new file mode 100644
index 0000000..405d7ba
Binary files /dev/null and b/_sa_food_textures/crushed_blue_herb.png differ
diff --git a/_sa_food_textures/crushed_green_herb.png b/_sa_food_textures/crushed_green_herb.png
new file mode 100644
index 0000000..0eba8f5
Binary files /dev/null and b/_sa_food_textures/crushed_green_herb.png differ
diff --git a/_sa_food_textures/crushed_red_herb.png b/_sa_food_textures/crushed_red_herb.png
new file mode 100644
index 0000000..27a28be
Binary files /dev/null and b/_sa_food_textures/crushed_red_herb.png differ
diff --git a/_sa_food_textures/crushed_yellow_herb.png b/_sa_food_textures/crushed_yellow_herb.png
new file mode 100644
index 0000000..1f97d0d
Binary files /dev/null and b/_sa_food_textures/crushed_yellow_herb.png differ
diff --git a/_sa_food_textures/duff_beer.png b/_sa_food_textures/duff_beer.png
new file mode 100644
index 0000000..8a05ce9
Binary files /dev/null and b/_sa_food_textures/duff_beer.png differ
diff --git a/_sa_food_textures/energy_bar.png b/_sa_food_textures/energy_bar.png
new file mode 100644
index 0000000..9389107
Binary files /dev/null and b/_sa_food_textures/energy_bar.png differ
diff --git a/_sa_food_textures/energy_drink.png b/_sa_food_textures/energy_drink.png
new file mode 100644
index 0000000..822e43f
Binary files /dev/null and b/_sa_food_textures/energy_drink.png differ
diff --git a/_sa_food_textures/fanta_grape_soda.png b/_sa_food_textures/fanta_grape_soda.png
new file mode 100644
index 0000000..f794f3e
Binary files /dev/null and b/_sa_food_textures/fanta_grape_soda.png differ
diff --git a/_sa_food_textures/fanta_orange_soda.png b/_sa_food_textures/fanta_orange_soda.png
new file mode 100644
index 0000000..6e2944b
Binary files /dev/null and b/_sa_food_textures/fanta_orange_soda.png differ
diff --git a/_sa_food_textures/fruit_jam.png b/_sa_food_textures/fruit_jam.png
new file mode 100644
index 0000000..7979e6a
Binary files /dev/null and b/_sa_food_textures/fruit_jam.png differ
diff --git a/_sa_food_textures/granola_bar.png b/_sa_food_textures/granola_bar.png
new file mode 100644
index 0000000..bc1be23
Binary files /dev/null and b/_sa_food_textures/granola_bar.png differ
diff --git a/_sa_food_textures/green_herb.png b/_sa_food_textures/green_herb.png
new file mode 100644
index 0000000..dca52e3
Binary files /dev/null and b/_sa_food_textures/green_herb.png differ
diff --git a/_sa_food_textures/guarana_soda.png b/_sa_food_textures/guarana_soda.png
new file mode 100644
index 0000000..3b036f4
Binary files /dev/null and b/_sa_food_textures/guarana_soda.png differ
diff --git a/_sa_food_textures/milk_box.png b/_sa_food_textures/milk_box.png
new file mode 100644
index 0000000..103d224
Binary files /dev/null and b/_sa_food_textures/milk_box.png differ
diff --git a/_sa_food_textures/milk_gallon.png b/_sa_food_textures/milk_gallon.png
new file mode 100644
index 0000000..6ad874f
Binary files /dev/null and b/_sa_food_textures/milk_gallon.png differ
diff --git a/_sa_food_textures/mixed_gb_herbs.png b/_sa_food_textures/mixed_gb_herbs.png
new file mode 100644
index 0000000..c214ba4
Binary files /dev/null and b/_sa_food_textures/mixed_gb_herbs.png differ
diff --git a/_sa_food_textures/mixed_gg_herbs.png b/_sa_food_textures/mixed_gg_herbs.png
new file mode 100644
index 0000000..3279c4c
Binary files /dev/null and b/_sa_food_textures/mixed_gg_herbs.png differ
diff --git a/_sa_food_textures/mixed_ggb_herbs.png b/_sa_food_textures/mixed_ggb_herbs.png
new file mode 100644
index 0000000..2e1c1b6
Binary files /dev/null and b/_sa_food_textures/mixed_ggb_herbs.png differ
diff --git a/_sa_food_textures/mixed_ggg_herbs.png b/_sa_food_textures/mixed_ggg_herbs.png
new file mode 100644
index 0000000..405eb95
Binary files /dev/null and b/_sa_food_textures/mixed_ggg_herbs.png differ
diff --git a/_sa_food_textures/mixed_ggr_herbs.png b/_sa_food_textures/mixed_ggr_herbs.png
new file mode 100644
index 0000000..86f3246
Binary files /dev/null and b/_sa_food_textures/mixed_ggr_herbs.png differ
diff --git a/_sa_food_textures/mixed_ggy_herbs.png b/_sa_food_textures/mixed_ggy_herbs.png
new file mode 100644
index 0000000..8c2cb3a
Binary files /dev/null and b/_sa_food_textures/mixed_ggy_herbs.png differ
diff --git a/_sa_food_textures/mixed_gr_herbs.png b/_sa_food_textures/mixed_gr_herbs.png
new file mode 100644
index 0000000..e133640
Binary files /dev/null and b/_sa_food_textures/mixed_gr_herbs.png differ
diff --git a/_sa_food_textures/mixed_grb_herbs.png b/_sa_food_textures/mixed_grb_herbs.png
new file mode 100644
index 0000000..f97c730
Binary files /dev/null and b/_sa_food_textures/mixed_grb_herbs.png differ
diff --git a/_sa_food_textures/mixed_gry_herbs.png b/_sa_food_textures/mixed_gry_herbs.png
new file mode 100644
index 0000000..6747945
Binary files /dev/null and b/_sa_food_textures/mixed_gry_herbs.png differ
diff --git a/_sa_food_textures/mixed_gy_herbs.png b/_sa_food_textures/mixed_gy_herbs.png
new file mode 100644
index 0000000..cb1b45b
Binary files /dev/null and b/_sa_food_textures/mixed_gy_herbs.png differ
diff --git a/_sa_food_textures/mixed_gyb_herbs.png b/_sa_food_textures/mixed_gyb_herbs.png
new file mode 100644
index 0000000..3620d53
Binary files /dev/null and b/_sa_food_textures/mixed_gyb_herbs.png differ
diff --git a/_sa_food_textures/mixed_rb_herbs.png b/_sa_food_textures/mixed_rb_herbs.png
new file mode 100644
index 0000000..bf55711
Binary files /dev/null and b/_sa_food_textures/mixed_rb_herbs.png differ
diff --git a/_sa_food_textures/monster.png b/_sa_food_textures/monster.png
new file mode 100644
index 0000000..ae83fbb
Binary files /dev/null and b/_sa_food_textures/monster.png differ
diff --git a/_sa_food_textures/pastel_dough.png b/_sa_food_textures/pastel_dough.png
new file mode 100644
index 0000000..7390129
Binary files /dev/null and b/_sa_food_textures/pastel_dough.png differ
diff --git a/_sa_food_textures/peach_juice_bottle.png b/_sa_food_textures/peach_juice_bottle.png
new file mode 100644
index 0000000..e3080e0
Binary files /dev/null and b/_sa_food_textures/peach_juice_bottle.png differ
diff --git a/_sa_food_textures/peanut_butter.png b/_sa_food_textures/peanut_butter.png
new file mode 100644
index 0000000..e53461d
Binary files /dev/null and b/_sa_food_textures/peanut_butter.png differ
diff --git a/_sa_food_textures/pepsi.png b/_sa_food_textures/pepsi.png
new file mode 100644
index 0000000..bd2f3cd
Binary files /dev/null and b/_sa_food_textures/pepsi.png differ
diff --git a/_sa_food_textures/pineapple_juice_bottle.png b/_sa_food_textures/pineapple_juice_bottle.png
new file mode 100644
index 0000000..bd1e974
Binary files /dev/null and b/_sa_food_textures/pineapple_juice_bottle.png differ
diff --git a/_sa_food_textures/pizza_box.png b/_sa_food_textures/pizza_box.png
new file mode 100644
index 0000000..90b228b
Binary files /dev/null and b/_sa_food_textures/pizza_box.png differ
diff --git a/_sa_food_textures/plain_chips_bag.png b/_sa_food_textures/plain_chips_bag.png
new file mode 100644
index 0000000..5fe0e88
Binary files /dev/null and b/_sa_food_textures/plain_chips_bag.png differ
diff --git a/_sa_food_textures/red_herb.png b/_sa_food_textures/red_herb.png
new file mode 100644
index 0000000..e19dca6
Binary files /dev/null and b/_sa_food_textures/red_herb.png differ
diff --git a/_sa_food_textures/salt_vinegar_chips_bag.png b/_sa_food_textures/salt_vinegar_chips_bag.png
new file mode 100644
index 0000000..c460183
Binary files /dev/null and b/_sa_food_textures/salt_vinegar_chips_bag.png differ
diff --git a/_sa_food_textures/smirkers_bar.png b/_sa_food_textures/smirkers_bar.png
new file mode 100644
index 0000000..6669454
Binary files /dev/null and b/_sa_food_textures/smirkers_bar.png differ
diff --git a/_sa_food_textures/sniksnak_bar.png b/_sa_food_textures/sniksnak_bar.png
new file mode 100644
index 0000000..927b6cb
Binary files /dev/null and b/_sa_food_textures/sniksnak_bar.png differ
diff --git a/_sa_food_textures/sour_cream_onion_chips_bag.png b/_sa_food_textures/sour_cream_onion_chips_bag.png
new file mode 100644
index 0000000..795b51b
Binary files /dev/null and b/_sa_food_textures/sour_cream_onion_chips_bag.png differ
diff --git a/_sa_food_textures/vodka.png b/_sa_food_textures/vodka.png
new file mode 100644
index 0000000..e9f2ebd
Binary files /dev/null and b/_sa_food_textures/vodka.png differ
diff --git a/_sa_food_textures/whiskey.png b/_sa_food_textures/whiskey.png
new file mode 100644
index 0000000..80b63f6
Binary files /dev/null and b/_sa_food_textures/whiskey.png differ
diff --git a/_sa_food_textures/wine.png b/_sa_food_textures/wine.png
new file mode 100644
index 0000000..11f2c7c
Binary files /dev/null and b/_sa_food_textures/wine.png differ
diff --git a/_sa_food_textures/yellow_herb.png b/_sa_food_textures/yellow_herb.png
new file mode 100644
index 0000000..51d5c3a
Binary files /dev/null and b/_sa_food_textures/yellow_herb.png differ
diff --git a/_sa_food_textures/手持食物/apple_juice_box.png b/_sa_food_textures/手持食物/apple_juice_box.png
new file mode 100644
index 0000000..8ed95f4
Binary files /dev/null and b/_sa_food_textures/手持食物/apple_juice_box.png differ
diff --git a/_sa_food_textures/手持食物/berry_juice_box.png b/_sa_food_textures/手持食物/berry_juice_box.png
new file mode 100644
index 0000000..3389fd8
Binary files /dev/null and b/_sa_food_textures/手持食物/berry_juice_box.png differ
diff --git a/_sa_food_textures/手持食物/big_burger.png b/_sa_food_textures/手持食物/big_burger.png
new file mode 100644
index 0000000..43e17d5
Binary files /dev/null and b/_sa_food_textures/手持食物/big_burger.png differ
diff --git a/_sa_food_textures/手持食物/big_burger_rotten.png b/_sa_food_textures/手持食物/big_burger_rotten.png
new file mode 100644
index 0000000..59b2122
Binary files /dev/null and b/_sa_food_textures/手持食物/big_burger_rotten.png differ
diff --git a/_sa_food_textures/手持食物/biscuit.png b/_sa_food_textures/手持食物/biscuit.png
new file mode 100644
index 0000000..cba811a
Binary files /dev/null and b/_sa_food_textures/手持食物/biscuit.png differ
diff --git a/_sa_food_textures/手持食物/biscuit_rotten.png b/_sa_food_textures/手持食物/biscuit_rotten.png
new file mode 100644
index 0000000..988aa51
Binary files /dev/null and b/_sa_food_textures/手持食物/biscuit_rotten.png differ
diff --git a/_sa_food_textures/手持食物/brigadeiro.png b/_sa_food_textures/手持食物/brigadeiro.png
new file mode 100644
index 0000000..c7ff873
Binary files /dev/null and b/_sa_food_textures/手持食物/brigadeiro.png differ
diff --git a/_sa_food_textures/手持食物/burger.png b/_sa_food_textures/手持食物/burger.png
new file mode 100644
index 0000000..c080fe9
Binary files /dev/null and b/_sa_food_textures/手持食物/burger.png differ
diff --git a/_sa_food_textures/手持食物/burger_rotten.png b/_sa_food_textures/手持食物/burger_rotten.png
new file mode 100644
index 0000000..188aa99
Binary files /dev/null and b/_sa_food_textures/手持食物/burger_rotten.png differ
diff --git a/_sa_food_textures/手持食物/burrito.png b/_sa_food_textures/手持食物/burrito.png
new file mode 100644
index 0000000..d6dc709
Binary files /dev/null and b/_sa_food_textures/手持食物/burrito.png differ
diff --git a/_sa_food_textures/手持食物/burrito_rotten.png b/_sa_food_textures/手持食物/burrito_rotten.png
new file mode 100644
index 0000000..e4ad3ab
Binary files /dev/null and b/_sa_food_textures/手持食物/burrito_rotten.png differ
diff --git a/_sa_food_textures/手持食物/butter.png b/_sa_food_textures/手持食物/butter.png
new file mode 100644
index 0000000..8c1a18f
Binary files /dev/null and b/_sa_food_textures/手持食物/butter.png differ
diff --git a/_sa_food_textures/手持食物/candys.png b/_sa_food_textures/手持食物/candys.png
new file mode 100644
index 0000000..0609544
Binary files /dev/null and b/_sa_food_textures/手持食物/candys.png differ
diff --git a/_sa_food_textures/手持食物/cereal_fruit_loops_flakes.png b/_sa_food_textures/手持食物/cereal_fruit_loops_flakes.png
new file mode 100644
index 0000000..8c38e85
Binary files /dev/null and b/_sa_food_textures/手持食物/cereal_fruit_loops_flakes.png differ
diff --git a/_sa_food_textures/手持食物/cereal_kelloggys_flakes.png b/_sa_food_textures/手持食物/cereal_kelloggys_flakes.png
new file mode 100644
index 0000000..00f7efd
Binary files /dev/null and b/_sa_food_textures/手持食物/cereal_kelloggys_flakes.png differ
diff --git a/_sa_food_textures/手持食物/cheese.png b/_sa_food_textures/手持食物/cheese.png
new file mode 100644
index 0000000..936ab3b
Binary files /dev/null and b/_sa_food_textures/手持食物/cheese.png differ
diff --git a/_sa_food_textures/手持食物/cheese_bread.png b/_sa_food_textures/手持食物/cheese_bread.png
new file mode 100644
index 0000000..206a38b
Binary files /dev/null and b/_sa_food_textures/手持食物/cheese_bread.png differ
diff --git a/_sa_food_textures/手持食物/cheese_burger.png b/_sa_food_textures/手持食物/cheese_burger.png
new file mode 100644
index 0000000..78d8a11
Binary files /dev/null and b/_sa_food_textures/手持食物/cheese_burger.png differ
diff --git a/_sa_food_textures/手持食物/cheese_burger_rotten.png b/_sa_food_textures/手持食物/cheese_burger_rotten.png
new file mode 100644
index 0000000..73771cf
Binary files /dev/null and b/_sa_food_textures/手持食物/cheese_burger_rotten.png differ
diff --git a/_sa_food_textures/手持食物/chips.png b/_sa_food_textures/手持食物/chips.png
new file mode 100644
index 0000000..0799a42
Binary files /dev/null and b/_sa_food_textures/手持食物/chips.png differ
diff --git a/_sa_food_textures/手持食物/coxinha.png b/_sa_food_textures/手持食物/coxinha.png
new file mode 100644
index 0000000..0c439de
Binary files /dev/null and b/_sa_food_textures/手持食物/coxinha.png differ
diff --git a/_sa_food_textures/手持食物/donut.png b/_sa_food_textures/手持食物/donut.png
new file mode 100644
index 0000000..e1a69a1
Binary files /dev/null and b/_sa_food_textures/手持食物/donut.png differ
diff --git a/_sa_food_textures/手持食物/donut_rotten.png b/_sa_food_textures/手持食物/donut_rotten.png
new file mode 100644
index 0000000..d3c6990
Binary files /dev/null and b/_sa_food_textures/手持食物/donut_rotten.png differ
diff --git a/_sa_food_textures/手持食物/empty_juice_box.png b/_sa_food_textures/手持食物/empty_juice_box.png
new file mode 100644
index 0000000..aea84b4
Binary files /dev/null and b/_sa_food_textures/手持食物/empty_juice_box.png differ
diff --git a/_sa_food_textures/手持食物/grape_juice_box.png b/_sa_food_textures/手持食物/grape_juice_box.png
new file mode 100644
index 0000000..39799f8
Binary files /dev/null and b/_sa_food_textures/手持食物/grape_juice_box.png differ
diff --git a/_sa_food_textures/手持食物/hot_dog.png b/_sa_food_textures/手持食物/hot_dog.png
new file mode 100644
index 0000000..9a5ca00
Binary files /dev/null and b/_sa_food_textures/手持食物/hot_dog.png differ
diff --git a/_sa_food_textures/手持食物/hot_dog_rotten.png b/_sa_food_textures/手持食物/hot_dog_rotten.png
new file mode 100644
index 0000000..9f8dbef
Binary files /dev/null and b/_sa_food_textures/手持食物/hot_dog_rotten.png differ
diff --git a/_sa_food_textures/手持食物/meat_pastel.png b/_sa_food_textures/手持食物/meat_pastel.png
new file mode 100644
index 0000000..4cd5c4d
Binary files /dev/null and b/_sa_food_textures/手持食物/meat_pastel.png differ
diff --git a/_sa_food_textures/手持食物/orange_juice_box.png b/_sa_food_textures/手持食物/orange_juice_box.png
new file mode 100644
index 0000000..a35dd8a
Binary files /dev/null and b/_sa_food_textures/手持食物/orange_juice_box.png differ
diff --git a/_sa_food_textures/手持食物/pacoquita.png b/_sa_food_textures/手持食物/pacoquita.png
new file mode 100644
index 0000000..0cce972
Binary files /dev/null and b/_sa_food_textures/手持食物/pacoquita.png differ
diff --git a/_sa_food_textures/手持食物/particle_granola.png b/_sa_food_textures/手持食物/particle_granola.png
new file mode 100644
index 0000000..704215e
Binary files /dev/null and b/_sa_food_textures/手持食物/particle_granola.png differ
diff --git a/_sa_food_textures/手持食物/particule_smirkers.png b/_sa_food_textures/手持食物/particule_smirkers.png
new file mode 100644
index 0000000..4730841
Binary files /dev/null and b/_sa_food_textures/手持食物/particule_smirkers.png differ
diff --git a/_sa_food_textures/手持食物/pizza.png b/_sa_food_textures/手持食物/pizza.png
new file mode 100644
index 0000000..5e55707
Binary files /dev/null and b/_sa_food_textures/手持食物/pizza.png differ
diff --git a/_sa_food_textures/手持食物/raw_cheese_pastel.png b/_sa_food_textures/手持食物/raw_cheese_pastel.png
new file mode 100644
index 0000000..96142ab
Binary files /dev/null and b/_sa_food_textures/手持食物/raw_cheese_pastel.png differ
diff --git a/_sa_food_textures/手持食物/raw_coxinha.png b/_sa_food_textures/手持食物/raw_coxinha.png
new file mode 100644
index 0000000..d417fe4
Binary files /dev/null and b/_sa_food_textures/手持食物/raw_coxinha.png differ
diff --git a/_sa_food_textures/手持食物/raw_meat_pastel.png b/_sa_food_textures/手持食物/raw_meat_pastel.png
new file mode 100644
index 0000000..9978209
Binary files /dev/null and b/_sa_food_textures/手持食物/raw_meat_pastel.png differ
diff --git a/_sa_food_textures/手持食物/raw_wind_pastel.png b/_sa_food_textures/手持食物/raw_wind_pastel.png
new file mode 100644
index 0000000..ebe308c
Binary files /dev/null and b/_sa_food_textures/手持食物/raw_wind_pastel.png differ
diff --git a/_sa_food_textures/手持食物/rotten_coxinha.png b/_sa_food_textures/手持食物/rotten_coxinha.png
new file mode 100644
index 0000000..bc4806f
Binary files /dev/null and b/_sa_food_textures/手持食物/rotten_coxinha.png differ
diff --git a/_sa_food_textures/手持食物/saltine_cracker.png b/_sa_food_textures/手持食物/saltine_cracker.png
new file mode 100644
index 0000000..2a8b1e7
Binary files /dev/null and b/_sa_food_textures/手持食物/saltine_cracker.png differ
diff --git a/_sa_food_textures/手持食物/taco.png b/_sa_food_textures/手持食物/taco.png
new file mode 100644
index 0000000..d1c7fbd
Binary files /dev/null and b/_sa_food_textures/手持食物/taco.png differ
diff --git a/_sa_food_textures/手持食物/taco_rotten.png b/_sa_food_textures/手持食物/taco_rotten.png
new file mode 100644
index 0000000..329d09d
Binary files /dev/null and b/_sa_food_textures/手持食物/taco_rotten.png differ
diff --git a/_sa_food_textures/手持食物/toast.png b/_sa_food_textures/手持食物/toast.png
new file mode 100644
index 0000000..1d9c7a2
Binary files /dev/null and b/_sa_food_textures/手持食物/toast.png differ
diff --git a/_sa_food_textures/手持食物/toast_rotten.png b/_sa_food_textures/手持食物/toast_rotten.png
new file mode 100644
index 0000000..0586ca1
Binary files /dev/null and b/_sa_food_textures/手持食物/toast_rotten.png differ
diff --git a/_sa_food_textures/手持食物/waffles.png b/_sa_food_textures/手持食物/waffles.png
new file mode 100644
index 0000000..47d527c
Binary files /dev/null and b/_sa_food_textures/手持食物/waffles.png differ
diff --git a/_sa_food_textures/手持食物/waffles_rotten.png b/_sa_food_textures/手持食物/waffles_rotten.png
new file mode 100644
index 0000000..8f20d6c
Binary files /dev/null and b/_sa_food_textures/手持食物/waffles_rotten.png differ
diff --git a/_sa_food_textures/手持食物/wind_pastel.png b/_sa_food_textures/手持食物/wind_pastel.png
new file mode 100644
index 0000000..77a8fe7
Binary files /dev/null and b/_sa_food_textures/手持食物/wind_pastel.png differ
diff --git a/_sa_hanhua_out/_preview_craft_cn.png b/_sa_hanhua_out/_preview_craft_cn.png
new file mode 100644
index 0000000..350fd43
Binary files /dev/null and b/_sa_hanhua_out/_preview_craft_cn.png differ
diff --git a/_sa_hanhua_out/_tmp/add_customtips.py b/_sa_hanhua_out/_tmp/add_customtips.py
new file mode 100644
index 0000000..1e27b09
--- /dev/null
+++ b/_sa_hanhua_out/_tmp/add_customtips.py
@@ -0,0 +1,81 @@
+# -*- coding: utf-8 -*-
+"""给 71 个材料 beh json 添加 netease:customtips 描述,清理 lang 无效 .desc 条目"""
+import csv, os, json
+
+BASE = r'e:\MCStudioDownload\work\3027246179@qq.com\Cpp\AddOn\309c2d420bc84ee986db9cdd070ff02a'
+DROP = {'box_of_nails', 'box_of_paperclips', 'box_of_screws', 'gunpowder_bottle', 'rope'}
+
+SPECIAL = {
+ 'dirty_water_bottle': '饮用可能引起饥饿',
+ 'generator_manual': '学习手册并完成实践训练以操作汽油发电机。',
+ 'matchbox': '点燃方块和火焰',
+ 'sterilized_rags': '清洁医用布。使用后返还脏抹布',
+ 'jerry_can': '用于储存液体:右键液体源收集,Shift+右键倒出',
+ 'saw_blade': '锯子部件,用于制作工具',
+ 'money': '战利品货币',
+ 'money_bundle': '一捆货币',
+ 'blank': '空白物品',
+}
+META = ('ashen_steel_ingot', 'ashen_steel_mixture', 'ashen_steel_nugget', 'ashen_steel_rod', 'metal_pipe',
+ 'metal_sheet', 'small_metal_sheet', 'scrap_nugget', 'diamond_nugget', 'netherite_nugget')
+FABRIC = ('cloth', 'dirty_rags', 'dish_towel', 'fabric_patch', 'fiber_fabric', 'polyester',
+ 'rags', 'sterilized_rags', 'kevlar', 'leather_strip')
+THREAD = ('thread', 'kevlar_thread', 'polyester_thread', 'copper_wire', 'insulated_copper_wire', 'wire')
+FASTENER = ('nails', 'screws', 'box_of_nails', 'box_of_screws', 'box_of_paperclips', 'paperclip')
+SCRAP = ('metal_scrap', 'electric_scrap', 'scrap_wood')
+PLASTIC = ('plastic', 'plastic_bag', 'plastic_plate', 'cardboard')
+ADHESIVE = ('glue', 'medical_adhesive', 'adhesive_tape', 'duct_tape')
+
+def desc(name):
+ if name in SPECIAL:
+ return SPECIAL[name]
+ if name in META:
+ return '用于锻造与回收的金属材料。'
+ if name in SCRAP:
+ return '可回收利用的材料。'
+ if name in FABRIC:
+ return '用于缝制、修复与回收的织物材料。'
+ if name in THREAD:
+ return '用于制作与缝合的线材。'
+ if name in FASTENER:
+ return '用于组装的紧固件。'
+ if name in PLASTIC:
+ return '可用于制作物品的塑料材料。'
+ if name in ADHESIVE:
+ return '修复与组装的粘合材料。'
+ if name in ('battery', 'camera', 'cellphone', 'classic_watch', 'falsh_lights'):
+ return '可拆解的电子元件。'
+ if name in ('sulfur', 'sulfur_dust', 'charcoal_dust'):
+ return '可用于制作的化学材料。'
+ if name in ('empty_can', 'dented_can', 'tin_can', 'empty_glass_bottle'):
+ return '空容器,可回收利用。'
+ if name in ('water_bottle', 'water_bottle2', 'alcohol', 'rubbing_alcohol', 'cleaning_liquid',
+ 'hair_gel', 'fermented_mash', 'gasoline_bucket'):
+ return '装有液体的容器。'
+ if name == 'lunch_bag':
+ return '存放食物的袋子。'
+ return '合成与回收材料。'
+
+mats = []
+with open(os.path.join(BASE, '_sa_materials.csv'), encoding='utf-8-sig') as f:
+ for row in csv.reader(f):
+ if row and row[1].endswith('.png') and row[0].isdigit() and row[1][:-4] not in DROP:
+ mats.append(row[1][:-4])
+
+updated = 0
+for m in mats:
+ p = os.path.join(BASE, 'behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_%s.json' % m)
+ d = json.load(open(p, encoding='utf-8'))
+ d['minecraft:item']['components']['netease:customtips'] = {'value': desc(m)}
+ json.dump(d, open(p, 'w', encoding='utf-8'), ensure_ascii=False, indent=4)
+ updated += 1
+print('beh json 添加 customtips 描述:', updated)
+
+LP = os.path.join(BASE, 'resource_pack_t7eJjrxY/texts/zh_CN.lang')
+lines = open(LP, encoding='utf-8').read().splitlines()
+keep = [l for l in lines if not (l.startswith('item.dn_sa:') and '.desc=' in l)]
+open(LP, 'w', encoding='utf-8').write('\n'.join(keep) + ('\n' if keep else ''))
+print('lang 清理 .desc 无效条目:', len(lines) - len(keep), '| 剩余行:', len(keep))
+
+p = os.path.join(BASE, 'behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_metal_scrap.json')
+print('示例 metal_scrap components:', json.dumps(json.load(open(p, encoding='utf-8'))['minecraft:item']['components'], ensure_ascii=False))
diff --git a/_sa_hanhua_out/_tmp/add_drinks.py b/_sa_hanhua_out/_tmp/add_drinks.py
new file mode 100644
index 0000000..771154c
--- /dev/null
+++ b/_sa_hanhua_out/_tmp/add_drinks.py
@@ -0,0 +1,29 @@
+# -*- coding: utf-8 -*-
+"""给可饮用液体材料添加饮用功能:beh food 组件 + res drink 动画"""
+import os, json
+
+BASE = r'e:\MCStudioDownload\work\3027246179@qq.com\Cpp\AddOn\309c2d420bc84ee986db9cdd070ff02a'
+DRINKS = ['alcohol', 'rubbing_alcohol', 'cleaning_liquid', 'hair_gel', 'fermented_mash']
+
+for m in DRINKS:
+ # beh json
+ p = os.path.join(BASE, 'behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_%s.json' % m)
+ d = json.load(open(p, encoding='utf-8'))
+ c = d['minecraft:item']['components']
+ c['minecraft:use_duration'] = 32
+ c['minecraft:food'] = {
+ 'nutrition': 2,
+ 'saturation_modifier': 'low',
+ 'can_always_eat': True
+ }
+ json.dump(d, open(p, 'w', encoding='utf-8'), ensure_ascii=False, indent=4)
+ # res json
+ rp = os.path.join(BASE, 'resource_pack_t7eJjrxY/netease_items_res/dn_sa_%s.json' % m)
+ r = json.load(open(rp, encoding='utf-8'))
+ r['minecraft:item']['components']['minecraft:use_animation'] = 'drink'
+ json.dump(r, open(rp, 'w', encoding='utf-8'), ensure_ascii=False, indent=4)
+ print('已添加饮用功能:', m)
+
+# 验证
+p = os.path.join(BASE, 'behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_alcohol.json')
+print(json.dumps(json.load(open(p, encoding='utf-8'))['minecraft:item']['components'], ensure_ascii=False, indent=1))
diff --git a/_sa_hanhua_out/_tmp/add_materials.py b/_sa_hanhua_out/_tmp/add_materials.py
new file mode 100644
index 0000000..6072fb4
--- /dev/null
+++ b/_sa_hanhua_out/_tmp/add_materials.py
@@ -0,0 +1,120 @@
+# -*- coding: utf-8 -*-
+"""把 sa_core 76 个材料做成网易版 AddOn 物品:beh json + res json + item_texture + zh_CN.lang + 贴图"""
+import csv, os, json, shutil
+
+BASE = r'e:\MCStudioDownload\work\3027246179@qq.com\Cpp\AddOn\309c2d420bc84ee986db9cdd070ff02a'
+BEH = os.path.join(BASE, 'behavior_pack_kcH4M5u0', 'netease_items_beh')
+RES = os.path.join(BASE, 'resource_pack_t7eJjrxY', 'netease_items_res')
+TEX = os.path.join(BASE, 'resource_pack_t7eJjrxY', 'textures', 'items')
+SRC_TEX = os.path.join(BASE, '_sa_material_textures')
+ITEM_TEX = os.path.join(BASE, 'resource_pack_t7eJjrxY', 'textures', 'item_texture.json')
+LANG = os.path.join(BASE, 'resource_pack_t7eJjrxY', 'texts', 'zh_CN.lang')
+
+# 读取材料清单(序号,贴图文件,物品ID,中文名,英文名,路径)
+mats = []
+with open(os.path.join(BASE, '_sa_materials.csv'), encoding='utf-8-sig') as f:
+ for row in csv.reader(f):
+ if row and row[1].endswith('.png') and row[0].isdigit():
+ mats.append((row[1][:-4], row[3])) # (name, zh)
+
+# 描述:特判字典 + 关键词兜底
+SPECIAL = {
+ 'dirty_water_bottle': '饮用可能引起饥饿',
+ 'generator_manual': '学习手册并完成实践训练以操作汽油发电机。',
+ 'matchbox': '点燃方块和火焰',
+ 'sterilized_rags': '清洁医用布。使用后返还脏抹布',
+ 'rope': '可放置且可攀爬,落上时可防止摔落伤害',
+ 'jerry_can': '用于储存液体:右键液体源收集,Shift+右键倒出',
+ 'saw_blade': '锯子部件,用于制作工具',
+ 'money': '战利品货币',
+ 'money_bundle': '一捆货币',
+ 'blank': '',
+}
+META_KEYS = ('ashen_steel_ingot', 'ashen_steel_mixture', 'ashen_steel_nugget', 'ashen_steel_rod',
+ 'metal_pipe', 'metal_sheet', 'small_metal_sheet', 'scrap_nugget',
+ 'diamond_nugget', 'netherite_nugget')
+FABRIC_KEYS = ('cloth', 'dirty_rags', 'dish_towel', 'fabric_patch', 'fiber_fabric', 'polyester',
+ 'rags', 'sterilized_rags', 'kevlar', 'leather_strip')
+THREAD_KEYS = ('thread', 'kevlar_thread', 'polyester_thread', 'copper_wire', 'insulated_copper_wire', 'wire')
+FASTENER_KEYS = ('nails', 'screws', 'box_of_nails', 'box_of_screws', 'box_of_paperclips', 'paperclip')
+SCRAP_KEYS = ('metal_scrap', 'electric_scrap', 'scrap_wood')
+PLASTIC_KEYS = ('plastic', 'plastic_bag', 'plastic_plate', 'cardboard')
+ADHESIVE_KEYS = ('glue', 'medical_adhesive', 'adhesive_tape', 'duct_tape')
+
+def make_desc(name, zh):
+ if name in SPECIAL:
+ return SPECIAL[name]
+ if name in META_KEYS:
+ return '用于锻造与回收的金属材料。'
+ if name in SCRAP_KEYS:
+ return '可回收利用的材料。'
+ if name in FABRIC_KEYS:
+ return '用于缝制、修复与回收的织物材料。'
+ if name in THREAD_KEYS:
+ return '用于制作与缝合的线材。'
+ if name in FASTENER_KEYS:
+ return '用于组装的紧固件。'
+ if name in PLASTIC_KEYS:
+ return '可用于制作物品的塑料材料。'
+ if name in ADHESIVE_KEYS:
+ return '修复与组装的粘合材料。'
+ if name in ('battery', 'camera', 'cellphone', 'classic_watch', 'falsh_lights'):
+ return '可拆解的电子元件。'
+ if name in ('sulfur', 'sulfur_dust', 'charcoal_dust', 'gunpowder_bottle'):
+ return '可用于制作的化学材料。'
+ if name in ('empty_can', 'dented_can', 'tin_can', 'empty_glass_bottle'):
+ return '空容器,可回收利用。'
+ if name in ('water_bottle', 'water_bottle2', 'alcohol', 'rubbing_alcohol', 'cleaning_liquid',
+ 'hair_gel', 'fermented_mash', 'gasoline_bucket'):
+ return '装有液体的容器。'
+ if name in ('lunch_bag',):
+ return '存放食物的袋子。'
+ return '合成与回收材料。'
+
+# 1) 生成 beh / res json + 复制贴图
+beh_tpl = {'format_version': '1.10', 'minecraft:item': {
+ 'components': {'minecraft:max_stack_size': 64},
+ 'description': {'category': 'dn_sa', 'identifier': 'dn_sa:%s'}}}
+res_tpl = {'format_version': '1.10', 'minecraft:item': {
+ 'components': {'minecraft:icon': 'dn_sa:%s'},
+ 'description': {'identifier': 'dn_sa:%s'}}}
+
+count = 0
+for name, zh in mats:
+ beh_path = os.path.join(BEH, 'dn_sa_%s.json' % name)
+ res_path = os.path.join(RES, 'dn_sa_%s.json' % name)
+ with open(beh_path, 'w', encoding='utf-8') as f:
+ json.dump(beh_tpl, f, ensure_ascii=False, indent=4)
+ with open(res_path, 'w', encoding='utf-8') as f:
+ json.dump(res_tpl, f, ensure_ascii=False, indent=4)
+ shutil.copy2(os.path.join(SRC_TEX, name + '.png'), os.path.join(TEX, name + '.png'))
+ count += 1
+print('已生成物品 json + 复制贴图:', count)
+
+# 2) item_texture.json 追加
+with open(ITEM_TEX, encoding='utf-8') as f:
+ it = json.load(f)
+added = 0
+for name, zh in mats:
+ key = 'dn_sa:%s' % name
+ if key not in it['texture_data']:
+ it['texture_data'][key] = {'textures': 'textures/items/%s' % name}
+ added += 1
+with open(ITEM_TEX, 'w', encoding='utf-8') as f:
+ json.dump(it, f, ensure_ascii=False, indent=4)
+print('item_texture.json 新增条目:', added, '| 总数:', len(it['texture_data']))
+
+# 3) zh_CN.lang 追加 name + desc
+lang = open(LANG, encoding='utf-8').read()
+lines_added = 0
+new_lines = []
+existing = set(lang.splitlines())
+for name, zh in mats:
+ nk = 'item.dn_sa:%s.name=%s' % (name, zh)
+ dk = 'item.dn_sa:%s.desc=%s' % (name, make_desc(name, zh))
+ if nk not in existing:
+ new_lines.append(nk); new_lines.append(dk); lines_added += 2
+if new_lines:
+ with open(LANG, 'a', encoding='utf-8') as f:
+ f.write('\n' + '\n'.join(new_lines) + '\n')
+print('zh_CN.lang 追加条目:', lines_added)
diff --git a/_sa_hanhua_out/_tmp/check_decor_english.py b/_sa_hanhua_out/_tmp/check_decor_english.py
new file mode 100644
index 0000000..2364f48
--- /dev/null
+++ b/_sa_hanhua_out/_tmp/check_decor_english.py
@@ -0,0 +1,33 @@
+import zipfile, os, subprocess
+
+jar = r'e:\MCStudioDownload\work\3027246179@qq.com\Cpp\AddOn\309c2d420bc84ee986db9cdd070ff02a\_sa_hanhua_out\sa_decor-forge-1.20.1-1.0.3.jar'
+out = r'e:\MCStudioDownload\work\3027246179@qq.com\Cpp\AddOn\309c2d420bc84ee986db9cdd070ff02a\_sa_hanhua_out\_tmp\classes'
+
+targets = [
+ 'com/ogaba/sa_decor/command/SADecorLootCommand.class',
+ 'com/ogaba/sa_decor/common/loot/DecorLootConfigManager.class',
+]
+
+with zipfile.ZipFile(jar) as z:
+ for t in targets:
+ p = os.path.join(out, t.replace('/', os.sep))
+ os.makedirs(os.path.dirname(p), exist_ok=True)
+ with open(p, 'wb') as f:
+ f.write(z.read(t))
+ print('extracted:', t)
+
+javap = r'D:\我的世界\bin\javap.EXE'
+for t in targets:
+ cname = t[:-6].replace('/', '.')
+ r = subprocess.run([javap, '-c', '-p', '-classpath', out, cname], capture_output=True, text=True, encoding='utf-8', errors='replace')
+ text = r.stdout if r.returncode == 0 else r.stderr
+ with open(os.path.join(out, cname.replace('.', '_') + '.txt'), 'w', encoding='utf-8') as f:
+ f.write(text)
+ print('\n=====', cname, '=====')
+ # 输出含 Survivor 的行上下文
+ lines = text.splitlines()
+ for i, line in enumerate(lines):
+ if 'Survivor' in line or 'Arsenal' in line:
+ for j in range(max(0, i-2), min(len(lines), i+4)):
+ print(lines[j])
+ print('---')
diff --git a/_sa_hanhua_out/_tmp/check_jianbing.py b/_sa_hanhua_out/_tmp/check_jianbing.py
new file mode 100644
index 0000000..63d3290
--- /dev/null
+++ b/_sa_hanhua_out/_tmp/check_jianbing.py
@@ -0,0 +1,18 @@
+# -*- coding: utf-8 -*-
+from PIL import Image
+import os
+base = r"e:\MCStudioDownload\work\3027246179@qq.com\Cpp\AddOn\309c2d420bc84ee986db9cdd070ff02a\resource_pack_t7eJjrxY\textures\items"
+
+# 打印若干物品贴图尺寸对比
+for n in ["burrito", "burrito_rotten", "hot_dog", "taco", "jianbing"]:
+ p = os.path.join(base, n + ".png")
+ if os.path.exists(p):
+ im = Image.open(p)
+ print(n, im.size, im.mode, os.path.getsize(p))
+
+# 校验 jianbing 是否是有效完整PNG且内容是煎饼(采样角点颜色)
+p = os.path.join(base, "jianbing.png")
+im = Image.open(p)
+im.load()
+print("jianbing corners:", im.getpixel((0,0)), im.getpixel((15,0)), im.getpixel((0,15)), im.getpixel((15,15)))
+print("jianbing center:", im.getpixel((8,8)))
\ No newline at end of file
diff --git a/_sa_hanhua_out/_tmp/check_names.py b/_sa_hanhua_out/_tmp/check_names.py
new file mode 100644
index 0000000..5125c42
--- /dev/null
+++ b/_sa_hanhua_out/_tmp/check_names.py
@@ -0,0 +1,21 @@
+import zipfile
+
+base = r'e:\MCStudioDownload\work\3027246179@qq.com\Cpp\AddOn\309c2d420bc84ee986db9cdd070ff02a\_sa_hanhua_out'
+jars = {
+ 'essentials': base + r'\sa_essentials-forge-1.20.1-1.0.0.jar',
+ 'lib': base + r'\sa_lib-forge-1.20.1-1.0.1.jar',
+ 'decor': base + r'\sa_decor-forge-1.20.1-1.0.3.jar',
+}
+
+import json
+for name, jar in jars.items():
+ print('='*30, name, '='*30)
+ with zipfile.ZipFile(jar) as z:
+ for n in z.namelist():
+ if n.startswith('assets/') and n.endswith('/lang/zh_cn.json'):
+ data = json.loads(z.read(n).decode('utf-8'))
+ print('---', n, '---')
+ for k, v in data.items():
+ if 'mod' in k or 'arsenal' in k.lower() or 'survivor' in k.lower() or 'creative' in k or 'tab' in k:
+ print(f' {k} = {v}')
+ print()
diff --git a/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/blueprint/BlueprintDefinitionRegistry$Definition.class b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/blueprint/BlueprintDefinitionRegistry$Definition.class
new file mode 100644
index 0000000..a4fac55
Binary files /dev/null and b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/blueprint/BlueprintDefinitionRegistry$Definition.class differ
diff --git a/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/blueprint/BlueprintDefinitionRegistry.class b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/blueprint/BlueprintDefinitionRegistry.class
new file mode 100644
index 0000000..0edce0d
Binary files /dev/null and b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/blueprint/BlueprintDefinitionRegistry.class differ
diff --git a/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/client/event/CompoundBowClientEvents.class b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/client/event/CompoundBowClientEvents.class
new file mode 100644
index 0000000..7b2bdd3
Binary files /dev/null and b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/client/event/CompoundBowClientEvents.class differ
diff --git a/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/client/event/HitMarkerClientEvents.class b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/client/event/HitMarkerClientEvents.class
new file mode 100644
index 0000000..a09cbcf
Binary files /dev/null and b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/client/event/HitMarkerClientEvents.class differ
diff --git a/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/client/event/SACombatClientForgeEvents.class b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/client/event/SACombatClientForgeEvents.class
new file mode 100644
index 0000000..49d065f
Binary files /dev/null and b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/client/event/SACombatClientForgeEvents.class differ
diff --git a/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/client/model/SAWeaponGeoModel.class b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/client/model/SAWeaponGeoModel.class
new file mode 100644
index 0000000..ee7b3ce
Binary files /dev/null and b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/client/model/SAWeaponGeoModel.class differ
diff --git a/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/client/render/CompoundBowCameraAnimation.class b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/client/render/CompoundBowCameraAnimation.class
new file mode 100644
index 0000000..9b9b29b
Binary files /dev/null and b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/client/render/CompoundBowCameraAnimation.class differ
diff --git a/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/client/render/CompoundBowClient.class b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/client/render/CompoundBowClient.class
new file mode 100644
index 0000000..77a6b17
Binary files /dev/null and b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/client/render/CompoundBowClient.class differ
diff --git a/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/client/render/CompoundBowViewSettings.class b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/client/render/CompoundBowViewSettings.class
new file mode 100644
index 0000000..591aaa3
Binary files /dev/null and b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/client/render/CompoundBowViewSettings.class differ
diff --git a/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/client/render/CrossbowCameraAnimation.class b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/client/render/CrossbowCameraAnimation.class
new file mode 100644
index 0000000..a0a4814
Binary files /dev/null and b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/client/render/CrossbowCameraAnimation.class differ
diff --git a/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/client/render/FixedFirstPersonView.class b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/client/render/FixedFirstPersonView.class
new file mode 100644
index 0000000..3d28e92
Binary files /dev/null and b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/client/render/FixedFirstPersonView.class differ
diff --git a/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/client/render/GeoArmorRenderOptimizer.class b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/client/render/GeoArmorRenderOptimizer.class
new file mode 100644
index 0000000..936fec7
Binary files /dev/null and b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/client/render/GeoArmorRenderOptimizer.class differ
diff --git a/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/client/render/GrenadeCameraAnimation.class b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/client/render/GrenadeCameraAnimation.class
new file mode 100644
index 0000000..1797bb7
Binary files /dev/null and b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/client/render/GrenadeCameraAnimation.class differ
diff --git a/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/client/render/HitMarkerClient.class b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/client/render/HitMarkerClient.class
new file mode 100644
index 0000000..172188f
Binary files /dev/null and b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/client/render/HitMarkerClient.class differ
diff --git a/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/client/render/ImprovisedGrenadeRenderer.class b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/client/render/ImprovisedGrenadeRenderer.class
new file mode 100644
index 0000000..68a0dbc
Binary files /dev/null and b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/client/render/ImprovisedGrenadeRenderer.class differ
diff --git a/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/client/render/MerchantRenderer.class b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/client/render/MerchantRenderer.class
new file mode 100644
index 0000000..afc054f
Binary files /dev/null and b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/client/render/MerchantRenderer.class differ
diff --git a/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/client/render/MolotovRenderer.class b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/client/render/MolotovRenderer.class
new file mode 100644
index 0000000..0718c21
Binary files /dev/null and b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/client/render/MolotovRenderer.class differ
diff --git a/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/client/render/NailGunAimClient.class b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/client/render/NailGunAimClient.class
new file mode 100644
index 0000000..8e15c9c
Binary files /dev/null and b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/client/render/NailGunAimClient.class differ
diff --git a/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/client/render/NailGunCameraAnimation.class b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/client/render/NailGunCameraAnimation.class
new file mode 100644
index 0000000..b5e8d8b
Binary files /dev/null and b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/client/render/NailGunCameraAnimation.class differ
diff --git a/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/client/render/NailRenderer.class b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/client/render/NailRenderer.class
new file mode 100644
index 0000000..8b65bbb
Binary files /dev/null and b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/client/render/NailRenderer.class differ
diff --git a/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/client/render/PlayerArmSkinLayer.class b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/client/render/PlayerArmSkinLayer.class
new file mode 100644
index 0000000..947a52f
Binary files /dev/null and b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/client/render/PlayerArmSkinLayer.class differ
diff --git a/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/client/render/SAArmorCurioRenderer.class b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/client/render/SAArmorCurioRenderer.class
new file mode 100644
index 0000000..c4b18b5
Binary files /dev/null and b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/client/render/SAArmorCurioRenderer.class differ
diff --git a/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/client/render/SAArmorRenderer.class b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/client/render/SAArmorRenderer.class
new file mode 100644
index 0000000..b1d50bf
Binary files /dev/null and b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/client/render/SAArmorRenderer.class differ
diff --git a/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/client/render/SAWeaponItemRenderer.class b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/client/render/SAWeaponItemRenderer.class
new file mode 100644
index 0000000..f5538bc
Binary files /dev/null and b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/client/render/SAWeaponItemRenderer.class differ
diff --git a/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/client/render/SpecialGrenadeItemRenderer$1.class b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/client/render/SpecialGrenadeItemRenderer$1.class
new file mode 100644
index 0000000..9ceae05
Binary files /dev/null and b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/client/render/SpecialGrenadeItemRenderer$1.class differ
diff --git a/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/client/render/SpecialGrenadeItemRenderer$SmoothResult.class b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/client/render/SpecialGrenadeItemRenderer$SmoothResult.class
new file mode 100644
index 0000000..a17e0d2
Binary files /dev/null and b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/client/render/SpecialGrenadeItemRenderer$SmoothResult.class differ
diff --git a/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/client/render/SpecialGrenadeItemRenderer$StaticGrenadeRenderer.class b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/client/render/SpecialGrenadeItemRenderer$StaticGrenadeRenderer.class
new file mode 100644
index 0000000..cf9ae20
Binary files /dev/null and b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/client/render/SpecialGrenadeItemRenderer$StaticGrenadeRenderer.class differ
diff --git a/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/client/render/SpecialGrenadeItemRenderer.class b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/client/render/SpecialGrenadeItemRenderer.class
new file mode 100644
index 0000000..7f19678
Binary files /dev/null and b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/client/render/SpecialGrenadeItemRenderer.class differ
diff --git a/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/client/render/SpecialGrenadePlayerArmSkinLayer.class b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/client/render/SpecialGrenadePlayerArmSkinLayer.class
new file mode 100644
index 0000000..89cc577
Binary files /dev/null and b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/client/render/SpecialGrenadePlayerArmSkinLayer.class differ
diff --git a/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/client/render/SpecialGrenadeRenderer.class b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/client/render/SpecialGrenadeRenderer.class
new file mode 100644
index 0000000..b468c54
Binary files /dev/null and b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/client/render/SpecialGrenadeRenderer.class differ
diff --git a/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/client/render/TacticalBoltRenderer.class b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/client/render/TacticalBoltRenderer.class
new file mode 100644
index 0000000..dd92d2a
Binary files /dev/null and b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/client/render/TacticalBoltRenderer.class differ
diff --git a/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/client/render/TacticalTomahawkRenderer$1.class b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/client/render/TacticalTomahawkRenderer$1.class
new file mode 100644
index 0000000..c24e16e
Binary files /dev/null and b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/client/render/TacticalTomahawkRenderer$1.class differ
diff --git a/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/client/render/TacticalTomahawkRenderer.class b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/client/render/TacticalTomahawkRenderer.class
new file mode 100644
index 0000000..c8c8210
Binary files /dev/null and b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/client/render/TacticalTomahawkRenderer.class differ
diff --git a/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/client/tooltip/BlueprintClientTooltipComponent$1.class b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/client/tooltip/BlueprintClientTooltipComponent$1.class
new file mode 100644
index 0000000..25b941b
Binary files /dev/null and b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/client/tooltip/BlueprintClientTooltipComponent$1.class differ
diff --git a/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/client/tooltip/BlueprintClientTooltipComponent.class b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/client/tooltip/BlueprintClientTooltipComponent.class
new file mode 100644
index 0000000..727441f
Binary files /dev/null and b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/client/tooltip/BlueprintClientTooltipComponent.class differ
diff --git a/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/client/tooltip/BlueprintItemDecorator.class b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/client/tooltip/BlueprintItemDecorator.class
new file mode 100644
index 0000000..bbc0854
Binary files /dev/null and b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/client/tooltip/BlueprintItemDecorator.class differ
diff --git a/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/client/tooltip/BlueprintPreviewResolver.class b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/client/tooltip/BlueprintPreviewResolver.class
new file mode 100644
index 0000000..1cdebfd
Binary files /dev/null and b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/client/tooltip/BlueprintPreviewResolver.class differ
diff --git a/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/client/tooltip/BlueprintPreviewResolverFromData.class b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/client/tooltip/BlueprintPreviewResolverFromData.class
new file mode 100644
index 0000000..0c46bbc
Binary files /dev/null and b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/client/tooltip/BlueprintPreviewResolverFromData.class differ
diff --git a/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/client/tooltip/WeaponClientTooltipComponent$AttachmentRow.class b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/client/tooltip/WeaponClientTooltipComponent$AttachmentRow.class
new file mode 100644
index 0000000..d49c857
Binary files /dev/null and b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/client/tooltip/WeaponClientTooltipComponent$AttachmentRow.class differ
diff --git a/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/client/tooltip/WeaponClientTooltipComponent.class b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/client/tooltip/WeaponClientTooltipComponent.class
new file mode 100644
index 0000000..2caff04
Binary files /dev/null and b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/client/tooltip/WeaponClientTooltipComponent.class differ
diff --git a/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/combat/armor/BallisticProtection$HudState.class b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/combat/armor/BallisticProtection$HudState.class
new file mode 100644
index 0000000..13cfa40
Binary files /dev/null and b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/combat/armor/BallisticProtection$HudState.class differ
diff --git a/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/combat/weapon/NailGunItem.class b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/combat/weapon/NailGunItem.class
new file mode 100644
index 0000000..6863cd0
Binary files /dev/null and b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/combat/weapon/NailGunItem.class differ
diff --git a/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/event/CuriosArmorDurabilityEvents.class b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/event/CuriosArmorDurabilityEvents.class
new file mode 100644
index 0000000..d76d53f
Binary files /dev/null and b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/event/CuriosArmorDurabilityEvents.class differ
diff --git a/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/event/SACombatForgeEvents$1.class b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/event/SACombatForgeEvents$1.class
new file mode 100644
index 0000000..49919c4
Binary files /dev/null and b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/event/SACombatForgeEvents$1.class differ
diff --git a/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/event/SACombatForgeEvents.class b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/event/SACombatForgeEvents.class
new file mode 100644
index 0000000..d5f0876
Binary files /dev/null and b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/event/SACombatForgeEvents.class differ
diff --git a/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/event/SACombatModEvents.class b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/event/SACombatModEvents.class
new file mode 100644
index 0000000..53a123d
Binary files /dev/null and b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/event/SACombatModEvents.class differ
diff --git a/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/item/BlueprintItem.class b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/item/BlueprintItem.class
new file mode 100644
index 0000000..9ca8039
Binary files /dev/null and b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/item/BlueprintItem.class differ
diff --git a/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/item/BlueprintTooltipComponent.class b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/item/BlueprintTooltipComponent.class
new file mode 100644
index 0000000..a120390
Binary files /dev/null and b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/item/BlueprintTooltipComponent.class differ
diff --git a/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/network/packet/FireNailGunC2SPacket.class b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/network/packet/FireNailGunC2SPacket.class
new file mode 100644
index 0000000..20ec4e4
Binary files /dev/null and b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_combat/network/packet/FireNailGunC2SPacket.class differ
diff --git a/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_decor/command/SADecorLootCommand.class b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_decor/command/SADecorLootCommand.class
new file mode 100644
index 0000000..af3cca3
Binary files /dev/null and b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_decor/command/SADecorLootCommand.class differ
diff --git a/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_decor/common/loot/DecorLootConfigManager.class b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_decor/common/loot/DecorLootConfigManager.class
new file mode 100644
index 0000000..91eda2d
Binary files /dev/null and b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_decor/common/loot/DecorLootConfigManager.class differ
diff --git a/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_survival/client/BackpackGuiKeyHandler.class b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_survival/client/BackpackGuiKeyHandler.class
new file mode 100644
index 0000000..ff38648
Binary files /dev/null and b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_survival/client/BackpackGuiKeyHandler.class differ
diff --git a/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_survival/client/BackpackInventoryPanelOverlay$Layout.class b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_survival/client/BackpackInventoryPanelOverlay$Layout.class
new file mode 100644
index 0000000..d26a176
Binary files /dev/null and b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_survival/client/BackpackInventoryPanelOverlay$Layout.class differ
diff --git a/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_survival/client/BackpackInventoryPanelOverlay$RenderSnapshot.class b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_survival/client/BackpackInventoryPanelOverlay$RenderSnapshot.class
new file mode 100644
index 0000000..1282234
Binary files /dev/null and b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_survival/client/BackpackInventoryPanelOverlay$RenderSnapshot.class differ
diff --git a/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_survival/client/BackpackInventoryPanelOverlay$SlotVisualState.class b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_survival/client/BackpackInventoryPanelOverlay$SlotVisualState.class
new file mode 100644
index 0000000..7c29d4f
Binary files /dev/null and b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_survival/client/BackpackInventoryPanelOverlay$SlotVisualState.class differ
diff --git a/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_survival/client/BackpackInventoryPanelOverlay.class b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_survival/client/BackpackInventoryPanelOverlay.class
new file mode 100644
index 0000000..66c09e8
Binary files /dev/null and b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_survival/client/BackpackInventoryPanelOverlay.class differ
diff --git a/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_survival/client/renderer/BackpackCurioRenderer$ParsedWeaponTransform.class b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_survival/client/renderer/BackpackCurioRenderer$ParsedWeaponTransform.class
new file mode 100644
index 0000000..779e3ae
Binary files /dev/null and b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_survival/client/renderer/BackpackCurioRenderer$ParsedWeaponTransform.class differ
diff --git a/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_survival/client/renderer/BackpackCurioRenderer$WeaponMountSide.class b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_survival/client/renderer/BackpackCurioRenderer$WeaponMountSide.class
new file mode 100644
index 0000000..5467386
Binary files /dev/null and b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_survival/client/renderer/BackpackCurioRenderer$WeaponMountSide.class differ
diff --git a/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_survival/client/renderer/BackpackCurioRenderer$WeaponTransform.class b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_survival/client/renderer/BackpackCurioRenderer$WeaponTransform.class
new file mode 100644
index 0000000..f807db5
Binary files /dev/null and b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_survival/client/renderer/BackpackCurioRenderer$WeaponTransform.class differ
diff --git a/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_survival/client/renderer/BackpackCurioRenderer.class b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_survival/client/renderer/BackpackCurioRenderer.class
new file mode 100644
index 0000000..112b897
Binary files /dev/null and b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_survival/client/renderer/BackpackCurioRenderer.class differ
diff --git a/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_survival/client/renderer/ClothingCurioRenderer.class b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_survival/client/renderer/ClothingCurioRenderer.class
new file mode 100644
index 0000000..d77117c
Binary files /dev/null and b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_survival/client/renderer/ClothingCurioRenderer.class differ
diff --git a/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_survival/client/renderer/FlashlightItemRenderer.class b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_survival/client/renderer/FlashlightItemRenderer.class
new file mode 100644
index 0000000..372bf3c
Binary files /dev/null and b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_survival/client/renderer/FlashlightItemRenderer.class differ
diff --git a/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_survival/client/renderer/GeckoClothingArmorRenderer.class b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_survival/client/renderer/GeckoClothingArmorRenderer.class
new file mode 100644
index 0000000..3957603
Binary files /dev/null and b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_survival/client/renderer/GeckoClothingArmorRenderer.class differ
diff --git a/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_survival/client/renderer/GeoArmorRenderOptimizer.class b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_survival/client/renderer/GeoArmorRenderOptimizer.class
new file mode 100644
index 0000000..820e731
Binary files /dev/null and b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_survival/client/renderer/GeoArmorRenderOptimizer.class differ
diff --git a/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_survival/client/tooltip/ClientBackpackContentsTooltip.class b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_survival/client/tooltip/ClientBackpackContentsTooltip.class
new file mode 100644
index 0000000..cb4031b
Binary files /dev/null and b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_survival/client/tooltip/ClientBackpackContentsTooltip.class differ
diff --git a/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_survival/event/BackpackInventoryMenuEvents.class b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_survival/event/BackpackInventoryMenuEvents.class
new file mode 100644
index 0000000..ef10158
Binary files /dev/null and b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_survival/event/BackpackInventoryMenuEvents.class differ
diff --git a/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_survival/event/CuriosArmorDurabilityEvents.class b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_survival/event/CuriosArmorDurabilityEvents.class
new file mode 100644
index 0000000..d5a8711
Binary files /dev/null and b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_survival/event/CuriosArmorDurabilityEvents.class differ
diff --git a/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_survival/event/DrinkCraftingEvents.class b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_survival/event/DrinkCraftingEvents.class
new file mode 100644
index 0000000..af0fa6d
Binary files /dev/null and b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_survival/event/DrinkCraftingEvents.class differ
diff --git a/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_survival/event/ExternalEquipmentStorageTooltipEvents.class b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_survival/event/ExternalEquipmentStorageTooltipEvents.class
new file mode 100644
index 0000000..3b275dc
Binary files /dev/null and b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_survival/event/ExternalEquipmentStorageTooltipEvents.class differ
diff --git a/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_survival/item/tooltip/BackpackContentsTooltip.class b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_survival/item/tooltip/BackpackContentsTooltip.class
new file mode 100644
index 0000000..34c3d2e
Binary files /dev/null and b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_survival/item/tooltip/BackpackContentsTooltip.class differ
diff --git a/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_survival/item/tooltip/EffectTooltipSource.class b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_survival/item/tooltip/EffectTooltipSource.class
new file mode 100644
index 0000000..8f5eed6
Binary files /dev/null and b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_survival/item/tooltip/EffectTooltipSource.class differ
diff --git a/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_survival/item/tooltip/EffectTooltipUtil$1.class b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_survival/item/tooltip/EffectTooltipUtil$1.class
new file mode 100644
index 0000000..030395b
Binary files /dev/null and b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_survival/item/tooltip/EffectTooltipUtil$1.class differ
diff --git a/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_survival/item/tooltip/EffectTooltipUtil.class b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_survival/item/tooltip/EffectTooltipUtil.class
new file mode 100644
index 0000000..777f577
Binary files /dev/null and b/_sa_hanhua_out/_tmp/classes/com/ogaba/sa_survival/item/tooltip/EffectTooltipUtil.class differ
diff --git a/_sa_hanhua_out/_tmp/classes/com_ogaba_sa_decor_command_SADecorLootCommand.txt b/_sa_hanhua_out/_tmp/classes/com_ogaba_sa_decor_command_SADecorLootCommand.txt
new file mode 100644
index 0000000..c9aadcf
--- /dev/null
+++ b/_sa_hanhua_out/_tmp/classes/com_ogaba_sa_decor_command_SADecorLootCommand.txt
@@ -0,0 +1,4271 @@
+Compiled from "SADecorLootCommand.java"
+public final class com.ogaba.sa_decor.command.SADecorLootCommand {
+ public static final java.lang.String LOOT_ITEM_TAG;
+
+ public static final java.lang.String LOOT_SEED_TAG;
+
+ private static final java.lang.String BLOCK_ENTITY_TAG;
+
+ private static final double RAYCAST_DISTANCE;
+
+ private static final int SIMPLE_DEFAULT_WEIGHT;
+
+ private static final int SIMPLE_DEFAULT_MIN_COUNT;
+
+ private static final int SIMPLE_DEFAULT_MAX_COUNT;
+
+ private static final float SIMPLE_DEFAULT_CHANCE;
+
+ private static final com.mojang.brigadier.exceptions.SimpleCommandExceptionType NO_BLOCK_HIT;
+
+ private static final com.mojang.brigadier.exceptions.SimpleCommandExceptionType NOT_LOOT_CONTAINER;
+
+ private static boolean canUseAdminCommands(net.minecraft.commands.CommandSourceStack);
+ Code:
+ 0: aload_0
+ 1: iconst_2
+ 2: invokevirtual #75 // Method net/minecraft/commands/CommandSourceStack.m_6761_:(I)Z
+ 5: ifeq 10
+ 8: iconst_1
+ 9: ireturn
+ 10: aload_0
+ 11: invokevirtual #79 // Method net/minecraft/commands/CommandSourceStack.m_81375_:()Lnet/minecraft/server/level/ServerPlayer;
+ 14: astore_1
+ 15: aload_0
+ 16: invokevirtual #83 // Method net/minecraft/commands/CommandSourceStack.m_81377_:()Lnet/minecraft/server/MinecraftServer;
+ 19: aload_1
+ 20: invokevirtual #89 // Method net/minecraft/server/level/ServerPlayer.m_36316_:()Lcom/mojang/authlib/GameProfile;
+ 23: invokevirtual #95 // Method net/minecraft/server/MinecraftServer.m_7779_:(Lcom/mojang/authlib/GameProfile;)Z
+ 26: ireturn
+ 27: astore_1
+ 28: iconst_0
+ 29: ireturn
+ Exception table:
+ from to target type
+ 10 26 27 Class com/mojang/brigadier/exceptions/CommandSyntaxException
+
+ private com.ogaba.sa_decor.command.SADecorLootCommand();
+ Code:
+ 0: aload_0
+ 1: invokespecial #105 // Method java/lang/Object."":()V
+ 4: return
+
+ public static void register(net.minecraftforge.event.RegisterCommandsEvent);
+ Code:
+ 0: getstatic #115 // Field com/ogaba/sa_decor/SADecor.LOGGER:Lorg/slf4j/Logger;
+ 3: ldc #117 // String Registering SA Decor commands.
+ 5: invokeinterface #123, 2 // InterfaceMethod org/slf4j/Logger.info:(Ljava/lang/String;)V
+ 10: aload_0
+ 11: invokevirtual #129 // Method net/minecraftforge/event/RegisterCommandsEvent.getDispatcher:()Lcom/mojang/brigadier/CommandDispatcher;
+ 14: ldc #131 // String sa_decor
+ 16: invokestatic #137 // Method net/minecraft/commands/Commands.m_82127_:(Ljava/lang/String;)Lcom/mojang/brigadier/builder/LiteralArgumentBuilder;
+ 19: invokedynamic #154, 0 // InvokeDynamic #0:test:()Ljava/util/function/Predicate;
+ 24: invokevirtual #160 // Method com/mojang/brigadier/builder/LiteralArgumentBuilder.requires:(Ljava/util/function/Predicate;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 27: checkcast #156 // class com/mojang/brigadier/builder/LiteralArgumentBuilder
+ 30: invokestatic #164 // Method giveCommand:()Lcom/mojang/brigadier/builder/LiteralArgumentBuilder;
+ 33: invokevirtual #168 // Method com/mojang/brigadier/builder/LiteralArgumentBuilder.then:(Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 36: checkcast #156 // class com/mojang/brigadier/builder/LiteralArgumentBuilder
+ 39: invokestatic #171 // Method lootCommand:()Lcom/mojang/brigadier/builder/LiteralArgumentBuilder;
+ 42: invokevirtual #168 // Method com/mojang/brigadier/builder/LiteralArgumentBuilder.then:(Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 45: checkcast #156 // class com/mojang/brigadier/builder/LiteralArgumentBuilder
+ 48: invokevirtual #176 // Method com/mojang/brigadier/CommandDispatcher.register:(Lcom/mojang/brigadier/builder/LiteralArgumentBuilder;)Lcom/mojang/brigadier/tree/LiteralCommandNode;
+ 51: pop
+ 52: return
+
+ private static com.mojang.brigadier.builder.LiteralArgumentBuilder giveCommand();
+ Code:
+ 0: ldc #181 // String give
+ 2: invokestatic #137 // Method net/minecraft/commands/Commands.m_82127_:(Ljava/lang/String;)Lcom/mojang/brigadier/builder/LiteralArgumentBuilder;
+ 5: ldc #183 // String loot
+ 7: invokestatic #137 // Method net/minecraft/commands/Commands.m_82127_:(Ljava/lang/String;)Lcom/mojang/brigadier/builder/LiteralArgumentBuilder;
+ 10: ldc #185 // String config_id
+ 12: invokestatic #191 // Method com/mojang/brigadier/arguments/StringArgumentType.word:()Lcom/mojang/brigadier/arguments/StringArgumentType;
+ 15: invokestatic #195 // Method net/minecraft/commands/Commands.m_82129_:(Ljava/lang/String;Lcom/mojang/brigadier/arguments/ArgumentType;)Lcom/mojang/brigadier/builder/RequiredArgumentBuilder;
+ 18: ldc #197 // String block_id
+ 20: invokestatic #203 // Method net/minecraft/commands/arguments/ResourceLocationArgument.m_106984_:()Lnet/minecraft/commands/arguments/ResourceLocationArgument;
+ 23: invokestatic #195 // Method net/minecraft/commands/Commands.m_82129_:(Ljava/lang/String;Lcom/mojang/brigadier/arguments/ArgumentType;)Lcom/mojang/brigadier/builder/RequiredArgumentBuilder;
+ 26: invokedynamic #213, 0 // InvokeDynamic #1:run:()Lcom/mojang/brigadier/Command;
+ 31: invokevirtual #219 // Method com/mojang/brigadier/builder/RequiredArgumentBuilder.executes:(Lcom/mojang/brigadier/Command;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 34: checkcast #215 // class com/mojang/brigadier/builder/RequiredArgumentBuilder
+ 37: ldc #221 // String locked
+ 39: invokestatic #227 // Method com/mojang/brigadier/arguments/BoolArgumentType.bool:()Lcom/mojang/brigadier/arguments/BoolArgumentType;
+ 42: invokestatic #195 // Method net/minecraft/commands/Commands.m_82129_:(Ljava/lang/String;Lcom/mojang/brigadier/arguments/ArgumentType;)Lcom/mojang/brigadier/builder/RequiredArgumentBuilder;
+ 45: invokedynamic #232, 0 // InvokeDynamic #2:run:()Lcom/mojang/brigadier/Command;
+ 50: invokevirtual #219 // Method com/mojang/brigadier/builder/RequiredArgumentBuilder.executes:(Lcom/mojang/brigadier/Command;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 53: invokevirtual #233 // Method com/mojang/brigadier/builder/RequiredArgumentBuilder.then:(Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 56: invokevirtual #233 // Method com/mojang/brigadier/builder/RequiredArgumentBuilder.then:(Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 59: invokevirtual #168 // Method com/mojang/brigadier/builder/LiteralArgumentBuilder.then:(Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 62: invokevirtual #168 // Method com/mojang/brigadier/builder/LiteralArgumentBuilder.then:(Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 65: checkcast #156 // class com/mojang/brigadier/builder/LiteralArgumentBuilder
+ 68: areturn
+
+ private static com.mojang.brigadier.builder.LiteralArgumentBuilder lootCommand();
+ Code:
+ 0: ldc #183 // String loot
+ 2: invokestatic #137 // Method net/minecraft/commands/Commands.m_82127_:(Ljava/lang/String;)Lcom/mojang/brigadier/builder/LiteralArgumentBuilder;
+ 5: ldc #235 // String help
+ 7: invokestatic #137 // Method net/minecraft/commands/Commands.m_82127_:(Ljava/lang/String;)Lcom/mojang/brigadier/builder/LiteralArgumentBuilder;
+ 10: invokedynamic #240, 0 // InvokeDynamic #3:run:()Lcom/mojang/brigadier/Command;
+ 15: invokevirtual #241 // Method com/mojang/brigadier/builder/LiteralArgumentBuilder.executes:(Lcom/mojang/brigadier/Command;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 18: invokevirtual #168 // Method com/mojang/brigadier/builder/LiteralArgumentBuilder.then:(Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 21: checkcast #156 // class com/mojang/brigadier/builder/LiteralArgumentBuilder
+ 24: ldc #243 // String reload
+ 26: invokestatic #137 // Method net/minecraft/commands/Commands.m_82127_:(Ljava/lang/String;)Lcom/mojang/brigadier/builder/LiteralArgumentBuilder;
+ 29: invokedynamic #248, 0 // InvokeDynamic #4:run:()Lcom/mojang/brigadier/Command;
+ 34: invokevirtual #241 // Method com/mojang/brigadier/builder/LiteralArgumentBuilder.executes:(Lcom/mojang/brigadier/Command;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 37: invokevirtual #168 // Method com/mojang/brigadier/builder/LiteralArgumentBuilder.then:(Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 40: checkcast #156 // class com/mojang/brigadier/builder/LiteralArgumentBuilder
+ 43: ldc #250 // String restore_defaults
+ 45: invokestatic #137 // Method net/minecraft/commands/Commands.m_82127_:(Ljava/lang/String;)Lcom/mojang/brigadier/builder/LiteralArgumentBuilder;
+ 48: invokedynamic #255, 0 // InvokeDynamic #5:run:()Lcom/mojang/brigadier/Command;
+ 53: invokevirtual #241 // Method com/mojang/brigadier/builder/LiteralArgumentBuilder.executes:(Lcom/mojang/brigadier/Command;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 56: invokevirtual #168 // Method com/mojang/brigadier/builder/LiteralArgumentBuilder.then:(Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 59: checkcast #156 // class com/mojang/brigadier/builder/LiteralArgumentBuilder
+ 62: ldc_w #257 // String undo
+ 65: invokestatic #137 // Method net/minecraft/commands/Commands.m_82127_:(Ljava/lang/String;)Lcom/mojang/brigadier/builder/LiteralArgumentBuilder;
+ 68: invokedynamic #262, 0 // InvokeDynamic #6:run:()Lcom/mojang/brigadier/Command;
+ 73: invokevirtual #241 // Method com/mojang/brigadier/builder/LiteralArgumentBuilder.executes:(Lcom/mojang/brigadier/Command;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 76: invokevirtual #168 // Method com/mojang/brigadier/builder/LiteralArgumentBuilder.then:(Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 79: checkcast #156 // class com/mojang/brigadier/builder/LiteralArgumentBuilder
+ 82: ldc_w #264 // String usage
+ 85: invokestatic #137 // Method net/minecraft/commands/Commands.m_82127_:(Ljava/lang/String;)Lcom/mojang/brigadier/builder/LiteralArgumentBuilder;
+ 88: ldc_w #266 // String profile_id
+ 91: invokestatic #191 // Method com/mojang/brigadier/arguments/StringArgumentType.word:()Lcom/mojang/brigadier/arguments/StringArgumentType;
+ 94: invokestatic #195 // Method net/minecraft/commands/Commands.m_82129_:(Ljava/lang/String;Lcom/mojang/brigadier/arguments/ArgumentType;)Lcom/mojang/brigadier/builder/RequiredArgumentBuilder;
+ 97: invokedynamic #271, 0 // InvokeDynamic #7:run:()Lcom/mojang/brigadier/Command;
+ 102: invokevirtual #219 // Method com/mojang/brigadier/builder/RequiredArgumentBuilder.executes:(Lcom/mojang/brigadier/Command;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 105: invokevirtual #168 // Method com/mojang/brigadier/builder/LiteralArgumentBuilder.then:(Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 108: invokevirtual #168 // Method com/mojang/brigadier/builder/LiteralArgumentBuilder.then:(Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 111: checkcast #156 // class com/mojang/brigadier/builder/LiteralArgumentBuilder
+ 114: ldc_w #273 // String cleanup
+ 117: invokestatic #137 // Method net/minecraft/commands/Commands.m_82127_:(Ljava/lang/String;)Lcom/mojang/brigadier/builder/LiteralArgumentBuilder;
+ 120: invokedynamic #278, 0 // InvokeDynamic #8:run:()Lcom/mojang/brigadier/Command;
+ 125: invokevirtual #241 // Method com/mojang/brigadier/builder/LiteralArgumentBuilder.executes:(Lcom/mojang/brigadier/Command;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 128: checkcast #156 // class com/mojang/brigadier/builder/LiteralArgumentBuilder
+ 131: ldc_w #280 // String remove_missing_profiles
+ 134: invokestatic #227 // Method com/mojang/brigadier/arguments/BoolArgumentType.bool:()Lcom/mojang/brigadier/arguments/BoolArgumentType;
+ 137: invokestatic #195 // Method net/minecraft/commands/Commands.m_82129_:(Ljava/lang/String;Lcom/mojang/brigadier/arguments/ArgumentType;)Lcom/mojang/brigadier/builder/RequiredArgumentBuilder;
+ 140: invokedynamic #285, 0 // InvokeDynamic #9:run:()Lcom/mojang/brigadier/Command;
+ 145: invokevirtual #219 // Method com/mojang/brigadier/builder/RequiredArgumentBuilder.executes:(Lcom/mojang/brigadier/Command;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 148: invokevirtual #168 // Method com/mojang/brigadier/builder/LiteralArgumentBuilder.then:(Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 151: invokevirtual #168 // Method com/mojang/brigadier/builder/LiteralArgumentBuilder.then:(Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 154: checkcast #156 // class com/mojang/brigadier/builder/LiteralArgumentBuilder
+ 157: ldc_w #287 // String export
+ 160: invokestatic #137 // Method net/minecraft/commands/Commands.m_82127_:(Ljava/lang/String;)Lcom/mojang/brigadier/builder/LiteralArgumentBuilder;
+ 163: ldc_w #266 // String profile_id
+ 166: invokestatic #191 // Method com/mojang/brigadier/arguments/StringArgumentType.word:()Lcom/mojang/brigadier/arguments/StringArgumentType;
+ 169: invokestatic #195 // Method net/minecraft/commands/Commands.m_82129_:(Ljava/lang/String;Lcom/mojang/brigadier/arguments/ArgumentType;)Lcom/mojang/brigadier/builder/RequiredArgumentBuilder;
+ 172: invokedynamic #292, 0 // InvokeDynamic #10:run:()Lcom/mojang/brigadier/Command;
+ 177: invokevirtual #219 // Method com/mojang/brigadier/builder/RequiredArgumentBuilder.executes:(Lcom/mojang/brigadier/Command;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 180: invokevirtual #168 // Method com/mojang/brigadier/builder/LiteralArgumentBuilder.then:(Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 183: invokevirtual #168 // Method com/mojang/brigadier/builder/LiteralArgumentBuilder.then:(Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 186: checkcast #156 // class com/mojang/brigadier/builder/LiteralArgumentBuilder
+ 189: ldc_w #294 // String import
+ 192: invokestatic #137 // Method net/minecraft/commands/Commands.m_82127_:(Ljava/lang/String;)Lcom/mojang/brigadier/builder/LiteralArgumentBuilder;
+ 195: ldc_w #296 // String export_id
+ 198: invokestatic #191 // Method com/mojang/brigadier/arguments/StringArgumentType.word:()Lcom/mojang/brigadier/arguments/StringArgumentType;
+ 201: invokestatic #195 // Method net/minecraft/commands/Commands.m_82129_:(Ljava/lang/String;Lcom/mojang/brigadier/arguments/ArgumentType;)Lcom/mojang/brigadier/builder/RequiredArgumentBuilder;
+ 204: ldc_w #298 // String target_id
+ 207: invokestatic #191 // Method com/mojang/brigadier/arguments/StringArgumentType.word:()Lcom/mojang/brigadier/arguments/StringArgumentType;
+ 210: invokestatic #195 // Method net/minecraft/commands/Commands.m_82129_:(Ljava/lang/String;Lcom/mojang/brigadier/arguments/ArgumentType;)Lcom/mojang/brigadier/builder/RequiredArgumentBuilder;
+ 213: invokedynamic #303, 0 // InvokeDynamic #11:run:()Lcom/mojang/brigadier/Command;
+ 218: invokevirtual #219 // Method com/mojang/brigadier/builder/RequiredArgumentBuilder.executes:(Lcom/mojang/brigadier/Command;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 221: invokevirtual #233 // Method com/mojang/brigadier/builder/RequiredArgumentBuilder.then:(Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 224: invokevirtual #168 // Method com/mojang/brigadier/builder/LiteralArgumentBuilder.then:(Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 227: invokevirtual #168 // Method com/mojang/brigadier/builder/LiteralArgumentBuilder.then:(Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 230: checkcast #156 // class com/mojang/brigadier/builder/LiteralArgumentBuilder
+ 233: ldc_w #305 // String preset_as
+ 236: invokestatic #137 // Method net/minecraft/commands/Commands.m_82127_:(Ljava/lang/String;)Lcom/mojang/brigadier/builder/LiteralArgumentBuilder;
+ 239: ldc_w #307 // String preset_id
+ 242: invokestatic #191 // Method com/mojang/brigadier/arguments/StringArgumentType.word:()Lcom/mojang/brigadier/arguments/StringArgumentType;
+ 245: invokestatic #195 // Method net/minecraft/commands/Commands.m_82129_:(Ljava/lang/String;Lcom/mojang/brigadier/arguments/ArgumentType;)Lcom/mojang/brigadier/builder/RequiredArgumentBuilder;
+ 248: ldc_w #298 // String target_id
+ 251: invokestatic #191 // Method com/mojang/brigadier/arguments/StringArgumentType.word:()Lcom/mojang/brigadier/arguments/StringArgumentType;
+ 254: invokestatic #195 // Method net/minecraft/commands/Commands.m_82129_:(Ljava/lang/String;Lcom/mojang/brigadier/arguments/ArgumentType;)Lcom/mojang/brigadier/builder/RequiredArgumentBuilder;
+ 257: invokedynamic #312, 0 // InvokeDynamic #12:run:()Lcom/mojang/brigadier/Command;
+ 262: invokevirtual #219 // Method com/mojang/brigadier/builder/RequiredArgumentBuilder.executes:(Lcom/mojang/brigadier/Command;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 265: invokevirtual #233 // Method com/mojang/brigadier/builder/RequiredArgumentBuilder.then:(Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 268: invokevirtual #168 // Method com/mojang/brigadier/builder/LiteralArgumentBuilder.then:(Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 271: invokevirtual #168 // Method com/mojang/brigadier/builder/LiteralArgumentBuilder.then:(Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 274: checkcast #156 // class com/mojang/brigadier/builder/LiteralArgumentBuilder
+ 277: ldc_w #314 // String list
+ 280: invokestatic #137 // Method net/minecraft/commands/Commands.m_82127_:(Ljava/lang/String;)Lcom/mojang/brigadier/builder/LiteralArgumentBuilder;
+ 283: invokedynamic #319, 0 // InvokeDynamic #13:run:()Lcom/mojang/brigadier/Command;
+ 288: invokevirtual #241 // Method com/mojang/brigadier/builder/LiteralArgumentBuilder.executes:(Lcom/mojang/brigadier/Command;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 291: invokevirtual #168 // Method com/mojang/brigadier/builder/LiteralArgumentBuilder.then:(Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 294: checkcast #156 // class com/mojang/brigadier/builder/LiteralArgumentBuilder
+ 297: ldc_w #321 // String folder
+ 300: invokestatic #137 // Method net/minecraft/commands/Commands.m_82127_:(Ljava/lang/String;)Lcom/mojang/brigadier/builder/LiteralArgumentBuilder;
+ 303: invokedynamic #326, 0 // InvokeDynamic #14:run:()Lcom/mojang/brigadier/Command;
+ 308: invokevirtual #241 // Method com/mojang/brigadier/builder/LiteralArgumentBuilder.executes:(Lcom/mojang/brigadier/Command;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 311: invokevirtual #168 // Method com/mojang/brigadier/builder/LiteralArgumentBuilder.then:(Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 314: checkcast #156 // class com/mojang/brigadier/builder/LiteralArgumentBuilder
+ 317: ldc_w #328 // String preset
+ 320: invokestatic #137 // Method net/minecraft/commands/Commands.m_82127_:(Ljava/lang/String;)Lcom/mojang/brigadier/builder/LiteralArgumentBuilder;
+ 323: invokedynamic #333, 0 // InvokeDynamic #15:run:()Lcom/mojang/brigadier/Command;
+ 328: invokevirtual #241 // Method com/mojang/brigadier/builder/LiteralArgumentBuilder.executes:(Lcom/mojang/brigadier/Command;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 331: checkcast #156 // class com/mojang/brigadier/builder/LiteralArgumentBuilder
+ 334: ldc_w #307 // String preset_id
+ 337: invokestatic #191 // Method com/mojang/brigadier/arguments/StringArgumentType.word:()Lcom/mojang/brigadier/arguments/StringArgumentType;
+ 340: invokestatic #195 // Method net/minecraft/commands/Commands.m_82129_:(Ljava/lang/String;Lcom/mojang/brigadier/arguments/ArgumentType;)Lcom/mojang/brigadier/builder/RequiredArgumentBuilder;
+ 343: invokedynamic #338, 0 // InvokeDynamic #16:run:()Lcom/mojang/brigadier/Command;
+ 348: invokevirtual #219 // Method com/mojang/brigadier/builder/RequiredArgumentBuilder.executes:(Lcom/mojang/brigadier/Command;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 351: invokevirtual #168 // Method com/mojang/brigadier/builder/LiteralArgumentBuilder.then:(Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 354: invokevirtual #168 // Method com/mojang/brigadier/builder/LiteralArgumentBuilder.then:(Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 357: checkcast #156 // class com/mojang/brigadier/builder/LiteralArgumentBuilder
+ 360: invokestatic #341 // Method simpleNewCommand:()Lcom/mojang/brigadier/builder/LiteralArgumentBuilder;
+ 363: invokevirtual #168 // Method com/mojang/brigadier/builder/LiteralArgumentBuilder.then:(Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 366: checkcast #156 // class com/mojang/brigadier/builder/LiteralArgumentBuilder
+ 369: invokestatic #344 // Method simpleAddCommand:()Lcom/mojang/brigadier/builder/LiteralArgumentBuilder;
+ 372: invokevirtual #168 // Method com/mojang/brigadier/builder/LiteralArgumentBuilder.then:(Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 375: checkcast #156 // class com/mojang/brigadier/builder/LiteralArgumentBuilder
+ 378: invokestatic #347 // Method simpleUseCommand:()Lcom/mojang/brigadier/builder/LiteralArgumentBuilder;
+ 381: invokevirtual #168 // Method com/mojang/brigadier/builder/LiteralArgumentBuilder.then:(Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 384: checkcast #156 // class com/mojang/brigadier/builder/LiteralArgumentBuilder
+ 387: invokestatic #350 // Method lootGiveCommand:()Lcom/mojang/brigadier/builder/LiteralArgumentBuilder;
+ 390: invokevirtual #168 // Method com/mojang/brigadier/builder/LiteralArgumentBuilder.then:(Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 393: checkcast #156 // class com/mojang/brigadier/builder/LiteralArgumentBuilder
+ 396: ldc_w #351 // String info
+ 399: invokestatic #137 // Method net/minecraft/commands/Commands.m_82127_:(Ljava/lang/String;)Lcom/mojang/brigadier/builder/LiteralArgumentBuilder;
+ 402: invokedynamic #356, 0 // InvokeDynamic #17:run:()Lcom/mojang/brigadier/Command;
+ 407: invokevirtual #241 // Method com/mojang/brigadier/builder/LiteralArgumentBuilder.executes:(Lcom/mojang/brigadier/Command;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 410: invokevirtual #168 // Method com/mojang/brigadier/builder/LiteralArgumentBuilder.then:(Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 413: checkcast #156 // class com/mojang/brigadier/builder/LiteralArgumentBuilder
+ 416: ldc_w #358 // String clear
+ 419: invokestatic #137 // Method net/minecraft/commands/Commands.m_82127_:(Ljava/lang/String;)Lcom/mojang/brigadier/builder/LiteralArgumentBuilder;
+ 422: invokedynamic #363, 0 // InvokeDynamic #18:run:()Lcom/mojang/brigadier/Command;
+ 427: invokevirtual #241 // Method com/mojang/brigadier/builder/LiteralArgumentBuilder.executes:(Lcom/mojang/brigadier/Command;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 430: invokevirtual #168 // Method com/mojang/brigadier/builder/LiteralArgumentBuilder.then:(Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 433: checkcast #156 // class com/mojang/brigadier/builder/LiteralArgumentBuilder
+ 436: ldc_w #364 // String test
+ 439: invokestatic #137 // Method net/minecraft/commands/Commands.m_82127_:(Ljava/lang/String;)Lcom/mojang/brigadier/builder/LiteralArgumentBuilder;
+ 442: invokedynamic #369, 0 // InvokeDynamic #19:run:()Lcom/mojang/brigadier/Command;
+ 447: invokevirtual #241 // Method com/mojang/brigadier/builder/LiteralArgumentBuilder.executes:(Lcom/mojang/brigadier/Command;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 450: invokevirtual #168 // Method com/mojang/brigadier/builder/LiteralArgumentBuilder.then:(Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 453: checkcast #156 // class com/mojang/brigadier/builder/LiteralArgumentBuilder
+ 456: ldc_w #371 // String lock
+ 459: invokestatic #137 // Method net/minecraft/commands/Commands.m_82127_:(Ljava/lang/String;)Lcom/mojang/brigadier/builder/LiteralArgumentBuilder;
+ 462: invokedynamic #376, 0 // InvokeDynamic #20:run:()Lcom/mojang/brigadier/Command;
+ 467: invokevirtual #241 // Method com/mojang/brigadier/builder/LiteralArgumentBuilder.executes:(Lcom/mojang/brigadier/Command;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 470: invokevirtual #168 // Method com/mojang/brigadier/builder/LiteralArgumentBuilder.then:(Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 473: checkcast #156 // class com/mojang/brigadier/builder/LiteralArgumentBuilder
+ 476: ldc_w #378 // String unlock
+ 479: invokestatic #137 // Method net/minecraft/commands/Commands.m_82127_:(Ljava/lang/String;)Lcom/mojang/brigadier/builder/LiteralArgumentBuilder;
+ 482: invokedynamic #383, 0 // InvokeDynamic #21:run:()Lcom/mojang/brigadier/Command;
+ 487: invokevirtual #241 // Method com/mojang/brigadier/builder/LiteralArgumentBuilder.executes:(Lcom/mojang/brigadier/Command;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 490: invokevirtual #168 // Method com/mojang/brigadier/builder/LiteralArgumentBuilder.then:(Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 493: checkcast #156 // class com/mojang/brigadier/builder/LiteralArgumentBuilder
+ 496: invokestatic #386 // Method advancedLootCommand:()Lcom/mojang/brigadier/builder/LiteralArgumentBuilder;
+ 499: invokevirtual #168 // Method com/mojang/brigadier/builder/LiteralArgumentBuilder.then:(Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 502: checkcast #156 // class com/mojang/brigadier/builder/LiteralArgumentBuilder
+ 505: areturn
+
+ private static com.mojang.brigadier.builder.LiteralArgumentBuilder simpleNewCommand();
+ Code:
+ 0: ldc_w #388 // String new
+ 3: invokestatic #137 // Method net/minecraft/commands/Commands.m_82127_:(Ljava/lang/String;)Lcom/mojang/brigadier/builder/LiteralArgumentBuilder;
+ 6: ldc #185 // String config_id
+ 8: invokestatic #191 // Method com/mojang/brigadier/arguments/StringArgumentType.word:()Lcom/mojang/brigadier/arguments/StringArgumentType;
+ 11: invokestatic #195 // Method net/minecraft/commands/Commands.m_82129_:(Ljava/lang/String;Lcom/mojang/brigadier/arguments/ArgumentType;)Lcom/mojang/brigadier/builder/RequiredArgumentBuilder;
+ 14: invokedynamic #393, 0 // InvokeDynamic #22:run:()Lcom/mojang/brigadier/Command;
+ 19: invokevirtual #219 // Method com/mojang/brigadier/builder/RequiredArgumentBuilder.executes:(Lcom/mojang/brigadier/Command;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 22: invokevirtual #168 // Method com/mojang/brigadier/builder/LiteralArgumentBuilder.then:(Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 25: checkcast #156 // class com/mojang/brigadier/builder/LiteralArgumentBuilder
+ 28: areturn
+
+ private static com.mojang.brigadier.builder.LiteralArgumentBuilder simpleUseCommand();
+ Code:
+ 0: ldc_w #395 // String use
+ 3: invokestatic #137 // Method net/minecraft/commands/Commands.m_82127_:(Ljava/lang/String;)Lcom/mojang/brigadier/builder/LiteralArgumentBuilder;
+ 6: ldc #185 // String config_id
+ 8: invokestatic #191 // Method com/mojang/brigadier/arguments/StringArgumentType.word:()Lcom/mojang/brigadier/arguments/StringArgumentType;
+ 11: invokestatic #195 // Method net/minecraft/commands/Commands.m_82129_:(Ljava/lang/String;Lcom/mojang/brigadier/arguments/ArgumentType;)Lcom/mojang/brigadier/builder/RequiredArgumentBuilder;
+ 14: invokedynamic #400, 0 // InvokeDynamic #23:run:()Lcom/mojang/brigadier/Command;
+ 19: invokevirtual #219 // Method com/mojang/brigadier/builder/RequiredArgumentBuilder.executes:(Lcom/mojang/brigadier/Command;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 22: checkcast #215 // class com/mojang/brigadier/builder/RequiredArgumentBuilder
+ 25: ldc #221 // String locked
+ 27: invokestatic #227 // Method com/mojang/brigadier/arguments/BoolArgumentType.bool:()Lcom/mojang/brigadier/arguments/BoolArgumentType;
+ 30: invokestatic #195 // Method net/minecraft/commands/Commands.m_82129_:(Ljava/lang/String;Lcom/mojang/brigadier/arguments/ArgumentType;)Lcom/mojang/brigadier/builder/RequiredArgumentBuilder;
+ 33: invokedynamic #405, 0 // InvokeDynamic #24:run:()Lcom/mojang/brigadier/Command;
+ 38: invokevirtual #219 // Method com/mojang/brigadier/builder/RequiredArgumentBuilder.executes:(Lcom/mojang/brigadier/Command;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 41: invokevirtual #233 // Method com/mojang/brigadier/builder/RequiredArgumentBuilder.then:(Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 44: invokevirtual #168 // Method com/mojang/brigadier/builder/LiteralArgumentBuilder.then:(Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 47: checkcast #156 // class com/mojang/brigadier/builder/LiteralArgumentBuilder
+ 50: areturn
+
+ private static com.mojang.brigadier.builder.LiteralArgumentBuilder simpleAddCommand();
+ Code:
+ 0: ldc_w #407 // String add
+ 3: invokestatic #137 // Method net/minecraft/commands/Commands.m_82127_:(Ljava/lang/String;)Lcom/mojang/brigadier/builder/LiteralArgumentBuilder;
+ 6: ldc_w #409 // String hand
+ 9: invokestatic #137 // Method net/minecraft/commands/Commands.m_82127_:(Ljava/lang/String;)Lcom/mojang/brigadier/builder/LiteralArgumentBuilder;
+ 12: ldc #185 // String config_id
+ 14: invokestatic #191 // Method com/mojang/brigadier/arguments/StringArgumentType.word:()Lcom/mojang/brigadier/arguments/StringArgumentType;
+ 17: invokestatic #195 // Method net/minecraft/commands/Commands.m_82129_:(Ljava/lang/String;Lcom/mojang/brigadier/arguments/ArgumentType;)Lcom/mojang/brigadier/builder/RequiredArgumentBuilder;
+ 20: invokedynamic #414, 0 // InvokeDynamic #25:run:()Lcom/mojang/brigadier/Command;
+ 25: invokevirtual #219 // Method com/mojang/brigadier/builder/RequiredArgumentBuilder.executes:(Lcom/mojang/brigadier/Command;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 28: checkcast #215 // class com/mojang/brigadier/builder/RequiredArgumentBuilder
+ 31: invokestatic #418 // Method simpleHandEntryArgs:()Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 34: invokevirtual #233 // Method com/mojang/brigadier/builder/RequiredArgumentBuilder.then:(Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 37: invokevirtual #168 // Method com/mojang/brigadier/builder/LiteralArgumentBuilder.then:(Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 40: invokevirtual #168 // Method com/mojang/brigadier/builder/LiteralArgumentBuilder.then:(Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 43: checkcast #156 // class com/mojang/brigadier/builder/LiteralArgumentBuilder
+ 46: ldc_w #420 // String item
+ 49: invokestatic #137 // Method net/minecraft/commands/Commands.m_82127_:(Ljava/lang/String;)Lcom/mojang/brigadier/builder/LiteralArgumentBuilder;
+ 52: ldc #185 // String config_id
+ 54: invokestatic #191 // Method com/mojang/brigadier/arguments/StringArgumentType.word:()Lcom/mojang/brigadier/arguments/StringArgumentType;
+ 57: invokestatic #195 // Method net/minecraft/commands/Commands.m_82129_:(Ljava/lang/String;Lcom/mojang/brigadier/arguments/ArgumentType;)Lcom/mojang/brigadier/builder/RequiredArgumentBuilder;
+ 60: ldc_w #422 // String item_id
+ 63: invokestatic #203 // Method net/minecraft/commands/arguments/ResourceLocationArgument.m_106984_:()Lnet/minecraft/commands/arguments/ResourceLocationArgument;
+ 66: invokestatic #195 // Method net/minecraft/commands/Commands.m_82129_:(Ljava/lang/String;Lcom/mojang/brigadier/arguments/ArgumentType;)Lcom/mojang/brigadier/builder/RequiredArgumentBuilder;
+ 69: invokedynamic #427, 0 // InvokeDynamic #26:run:()Lcom/mojang/brigadier/Command;
+ 74: invokevirtual #219 // Method com/mojang/brigadier/builder/RequiredArgumentBuilder.executes:(Lcom/mojang/brigadier/Command;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 77: checkcast #215 // class com/mojang/brigadier/builder/RequiredArgumentBuilder
+ 80: invokestatic #430 // Method simpleItemEntryArgs:()Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 83: invokevirtual #233 // Method com/mojang/brigadier/builder/RequiredArgumentBuilder.then:(Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 86: invokevirtual #233 // Method com/mojang/brigadier/builder/RequiredArgumentBuilder.then:(Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 89: invokevirtual #168 // Method com/mojang/brigadier/builder/LiteralArgumentBuilder.then:(Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 92: invokevirtual #168 // Method com/mojang/brigadier/builder/LiteralArgumentBuilder.then:(Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 95: checkcast #156 // class com/mojang/brigadier/builder/LiteralArgumentBuilder
+ 98: ldc_w #432 // String tag
+ 101: invokestatic #137 // Method net/minecraft/commands/Commands.m_82127_:(Ljava/lang/String;)Lcom/mojang/brigadier/builder/LiteralArgumentBuilder;
+ 104: ldc #185 // String config_id
+ 106: invokestatic #191 // Method com/mojang/brigadier/arguments/StringArgumentType.word:()Lcom/mojang/brigadier/arguments/StringArgumentType;
+ 109: invokestatic #195 // Method net/minecraft/commands/Commands.m_82129_:(Ljava/lang/String;Lcom/mojang/brigadier/arguments/ArgumentType;)Lcom/mojang/brigadier/builder/RequiredArgumentBuilder;
+ 112: ldc_w #434 // String tag_id
+ 115: invokestatic #203 // Method net/minecraft/commands/arguments/ResourceLocationArgument.m_106984_:()Lnet/minecraft/commands/arguments/ResourceLocationArgument;
+ 118: invokestatic #195 // Method net/minecraft/commands/Commands.m_82129_:(Ljava/lang/String;Lcom/mojang/brigadier/arguments/ArgumentType;)Lcom/mojang/brigadier/builder/RequiredArgumentBuilder;
+ 121: invokedynamic #439, 0 // InvokeDynamic #27:run:()Lcom/mojang/brigadier/Command;
+ 126: invokevirtual #219 // Method com/mojang/brigadier/builder/RequiredArgumentBuilder.executes:(Lcom/mojang/brigadier/Command;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 129: checkcast #215 // class com/mojang/brigadier/builder/RequiredArgumentBuilder
+ 132: invokestatic #442 // Method simpleTagEntryArgs:()Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 135: invokevirtual #233 // Method com/mojang/brigadier/builder/RequiredArgumentBuilder.then:(Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 138: invokevirtual #233 // Method com/mojang/brigadier/builder/RequiredArgumentBuilder.then:(Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 141: invokevirtual #168 // Method com/mojang/brigadier/builder/LiteralArgumentBuilder.then:(Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 144: invokevirtual #168 // Method com/mojang/brigadier/builder/LiteralArgumentBuilder.then:(Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 147: checkcast #156 // class com/mojang/brigadier/builder/LiteralArgumentBuilder
+ 150: ldc_w #444 // String table
+ 153: invokestatic #137 // Method net/minecraft/commands/Commands.m_82127_:(Ljava/lang/String;)Lcom/mojang/brigadier/builder/LiteralArgumentBuilder;
+ 156: ldc #185 // String config_id
+ 158: invokestatic #191 // Method com/mojang/brigadier/arguments/StringArgumentType.word:()Lcom/mojang/brigadier/arguments/StringArgumentType;
+ 161: invokestatic #195 // Method net/minecraft/commands/Commands.m_82129_:(Ljava/lang/String;Lcom/mojang/brigadier/arguments/ArgumentType;)Lcom/mojang/brigadier/builder/RequiredArgumentBuilder;
+ 164: ldc_w #446 // String loot_table_id
+ 167: invokestatic #203 // Method net/minecraft/commands/arguments/ResourceLocationArgument.m_106984_:()Lnet/minecraft/commands/arguments/ResourceLocationArgument;
+ 170: invokestatic #195 // Method net/minecraft/commands/Commands.m_82129_:(Ljava/lang/String;Lcom/mojang/brigadier/arguments/ArgumentType;)Lcom/mojang/brigadier/builder/RequiredArgumentBuilder;
+ 173: invokedynamic #451, 0 // InvokeDynamic #28:run:()Lcom/mojang/brigadier/Command;
+ 178: invokevirtual #219 // Method com/mojang/brigadier/builder/RequiredArgumentBuilder.executes:(Lcom/mojang/brigadier/Command;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 181: invokevirtual #233 // Method com/mojang/brigadier/builder/RequiredArgumentBuilder.then:(Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 184: invokevirtual #168 // Method com/mojang/brigadier/builder/LiteralArgumentBuilder.then:(Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 187: invokevirtual #168 // Method com/mojang/brigadier/builder/LiteralArgumentBuilder.then:(Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 190: checkcast #156 // class com/mojang/brigadier/builder/LiteralArgumentBuilder
+ 193: areturn
+
+ private static com.mojang.brigadier.builder.ArgumentBuilder simpleHandEntryArgs();
+ Code:
+ 0: ldc_w #454 // String weight
+ 3: iconst_1
+ 4: invokestatic #460 // Method com/mojang/brigadier/arguments/IntegerArgumentType.integer:(I)Lcom/mojang/brigadier/arguments/IntegerArgumentType;
+ 7: invokestatic #195 // Method net/minecraft/commands/Commands.m_82129_:(Ljava/lang/String;Lcom/mojang/brigadier/arguments/ArgumentType;)Lcom/mojang/brigadier/builder/RequiredArgumentBuilder;
+ 10: invokedynamic #465, 0 // InvokeDynamic #29:run:()Lcom/mojang/brigadier/Command;
+ 15: invokevirtual #219 // Method com/mojang/brigadier/builder/RequiredArgumentBuilder.executes:(Lcom/mojang/brigadier/Command;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 18: checkcast #215 // class com/mojang/brigadier/builder/RequiredArgumentBuilder
+ 21: ldc_w #467 // String count
+ 24: iconst_1
+ 25: invokestatic #460 // Method com/mojang/brigadier/arguments/IntegerArgumentType.integer:(I)Lcom/mojang/brigadier/arguments/IntegerArgumentType;
+ 28: invokestatic #195 // Method net/minecraft/commands/Commands.m_82129_:(Ljava/lang/String;Lcom/mojang/brigadier/arguments/ArgumentType;)Lcom/mojang/brigadier/builder/RequiredArgumentBuilder;
+ 31: invokedynamic #472, 0 // InvokeDynamic #30:run:()Lcom/mojang/brigadier/Command;
+ 36: invokevirtual #219 // Method com/mojang/brigadier/builder/RequiredArgumentBuilder.executes:(Lcom/mojang/brigadier/Command;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 39: checkcast #215 // class com/mojang/brigadier/builder/RequiredArgumentBuilder
+ 42: ldc_w #474 // String chance
+ 45: fconst_0
+ 46: fconst_1
+ 47: invokestatic #480 // Method com/mojang/brigadier/arguments/FloatArgumentType.floatArg:(FF)Lcom/mojang/brigadier/arguments/FloatArgumentType;
+ 50: invokestatic #195 // Method net/minecraft/commands/Commands.m_82129_:(Ljava/lang/String;Lcom/mojang/brigadier/arguments/ArgumentType;)Lcom/mojang/brigadier/builder/RequiredArgumentBuilder;
+ 53: invokedynamic #485, 0 // InvokeDynamic #31:run:()Lcom/mojang/brigadier/Command;
+ 58: invokevirtual #219 // Method com/mojang/brigadier/builder/RequiredArgumentBuilder.executes:(Lcom/mojang/brigadier/Command;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 61: invokevirtual #233 // Method com/mojang/brigadier/builder/RequiredArgumentBuilder.then:(Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 64: invokevirtual #233 // Method com/mojang/brigadier/builder/RequiredArgumentBuilder.then:(Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 67: checkcast #215 // class com/mojang/brigadier/builder/RequiredArgumentBuilder
+ 70: ldc_w #487 // String min_count
+ 73: iconst_1
+ 74: invokestatic #460 // Method com/mojang/brigadier/arguments/IntegerArgumentType.integer:(I)Lcom/mojang/brigadier/arguments/IntegerArgumentType;
+ 77: invokestatic #195 // Method net/minecraft/commands/Commands.m_82129_:(Ljava/lang/String;Lcom/mojang/brigadier/arguments/ArgumentType;)Lcom/mojang/brigadier/builder/RequiredArgumentBuilder;
+ 80: ldc_w #489 // String max_count
+ 83: iconst_1
+ 84: invokestatic #460 // Method com/mojang/brigadier/arguments/IntegerArgumentType.integer:(I)Lcom/mojang/brigadier/arguments/IntegerArgumentType;
+ 87: invokestatic #195 // Method net/minecraft/commands/Commands.m_82129_:(Ljava/lang/String;Lcom/mojang/brigadier/arguments/ArgumentType;)Lcom/mojang/brigadier/builder/RequiredArgumentBuilder;
+ 90: invokedynamic #494, 0 // InvokeDynamic #32:run:()Lcom/mojang/brigadier/Command;
+ 95: invokevirtual #219 // Method com/mojang/brigadier/builder/RequiredArgumentBuilder.executes:(Lcom/mojang/brigadier/Command;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 98: checkcast #215 // class com/mojang/brigadier/builder/RequiredArgumentBuilder
+ 101: ldc_w #474 // String chance
+ 104: fconst_0
+ 105: fconst_1
+ 106: invokestatic #480 // Method com/mojang/brigadier/arguments/FloatArgumentType.floatArg:(FF)Lcom/mojang/brigadier/arguments/FloatArgumentType;
+ 109: invokestatic #195 // Method net/minecraft/commands/Commands.m_82129_:(Ljava/lang/String;Lcom/mojang/brigadier/arguments/ArgumentType;)Lcom/mojang/brigadier/builder/RequiredArgumentBuilder;
+ 112: invokedynamic #499, 0 // InvokeDynamic #33:run:()Lcom/mojang/brigadier/Command;
+ 117: invokevirtual #219 // Method com/mojang/brigadier/builder/RequiredArgumentBuilder.executes:(Lcom/mojang/brigadier/Command;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 120: invokevirtual #233 // Method com/mojang/brigadier/builder/RequiredArgumentBuilder.then:(Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 123: invokevirtual #233 // Method com/mojang/brigadier/builder/RequiredArgumentBuilder.then:(Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 126: invokevirtual #233 // Method com/mojang/brigadier/builder/RequiredArgumentBuilder.then:(Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 129: areturn
+
+ private static com.mojang.brigadier.builder.ArgumentBuilder simpleItemEntryArgs();
+ Code:
+ 0: ldc_w #454 // String weight
+ 3: iconst_1
+ 4: invokestatic #460 // Method com/mojang/brigadier/arguments/IntegerArgumentType.integer:(I)Lcom/mojang/brigadier/arguments/IntegerArgumentType;
+ 7: invokestatic #195 // Method net/minecraft/commands/Commands.m_82129_:(Ljava/lang/String;Lcom/mojang/brigadier/arguments/ArgumentType;)Lcom/mojang/brigadier/builder/RequiredArgumentBuilder;
+ 10: ldc_w #487 // String min_count
+ 13: iconst_1
+ 14: invokestatic #460 // Method com/mojang/brigadier/arguments/IntegerArgumentType.integer:(I)Lcom/mojang/brigadier/arguments/IntegerArgumentType;
+ 17: invokestatic #195 // Method net/minecraft/commands/Commands.m_82129_:(Ljava/lang/String;Lcom/mojang/brigadier/arguments/ArgumentType;)Lcom/mojang/brigadier/builder/RequiredArgumentBuilder;
+ 20: ldc_w #489 // String max_count
+ 23: iconst_1
+ 24: invokestatic #460 // Method com/mojang/brigadier/arguments/IntegerArgumentType.integer:(I)Lcom/mojang/brigadier/arguments/IntegerArgumentType;
+ 27: invokestatic #195 // Method net/minecraft/commands/Commands.m_82129_:(Ljava/lang/String;Lcom/mojang/brigadier/arguments/ArgumentType;)Lcom/mojang/brigadier/builder/RequiredArgumentBuilder;
+ 30: ldc_w #474 // String chance
+ 33: fconst_0
+ 34: fconst_1
+ 35: invokestatic #480 // Method com/mojang/brigadier/arguments/FloatArgumentType.floatArg:(FF)Lcom/mojang/brigadier/arguments/FloatArgumentType;
+ 38: invokestatic #195 // Method net/minecraft/commands/Commands.m_82129_:(Ljava/lang/String;Lcom/mojang/brigadier/arguments/ArgumentType;)Lcom/mojang/brigadier/builder/RequiredArgumentBuilder;
+ 41: invokedynamic #504, 0 // InvokeDynamic #34:run:()Lcom/mojang/brigadier/Command;
+ 46: invokevirtual #219 // Method com/mojang/brigadier/builder/RequiredArgumentBuilder.executes:(Lcom/mojang/brigadier/Command;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 49: invokevirtual #233 // Method com/mojang/brigadier/builder/RequiredArgumentBuilder.then:(Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 52: invokevirtual #233 // Method com/mojang/brigadier/builder/RequiredArgumentBuilder.then:(Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 55: invokevirtual #233 // Method com/mojang/brigadier/builder/RequiredArgumentBuilder.then:(Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 58: areturn
+
+ private static com.mojang.brigadier.builder.ArgumentBuilder simpleTagEntryArgs();
+ Code:
+ 0: ldc_w #454 // String weight
+ 3: iconst_1
+ 4: invokestatic #460 // Method com/mojang/brigadier/arguments/IntegerArgumentType.integer:(I)Lcom/mojang/brigadier/arguments/IntegerArgumentType;
+ 7: invokestatic #195 // Method net/minecraft/commands/Commands.m_82129_:(Ljava/lang/String;Lcom/mojang/brigadier/arguments/ArgumentType;)Lcom/mojang/brigadier/builder/RequiredArgumentBuilder;
+ 10: ldc_w #487 // String min_count
+ 13: iconst_1
+ 14: invokestatic #460 // Method com/mojang/brigadier/arguments/IntegerArgumentType.integer:(I)Lcom/mojang/brigadier/arguments/IntegerArgumentType;
+ 17: invokestatic #195 // Method net/minecraft/commands/Commands.m_82129_:(Ljava/lang/String;Lcom/mojang/brigadier/arguments/ArgumentType;)Lcom/mojang/brigadier/builder/RequiredArgumentBuilder;
+ 20: ldc_w #489 // String max_count
+ 23: iconst_1
+ 24: invokestatic #460 // Method com/mojang/brigadier/arguments/IntegerArgumentType.integer:(I)Lcom/mojang/brigadier/arguments/IntegerArgumentType;
+ 27: invokestatic #195 // Method net/minecraft/commands/Commands.m_82129_:(Ljava/lang/String;Lcom/mojang/brigadier/arguments/ArgumentType;)Lcom/mojang/brigadier/builder/RequiredArgumentBuilder;
+ 30: ldc_w #474 // String chance
+ 33: fconst_0
+ 34: fconst_1
+ 35: invokestatic #480 // Method com/mojang/brigadier/arguments/FloatArgumentType.floatArg:(FF)Lcom/mojang/brigadier/arguments/FloatArgumentType;
+ 38: invokestatic #195 // Method net/minecraft/commands/Commands.m_82129_:(Ljava/lang/String;Lcom/mojang/brigadier/arguments/ArgumentType;)Lcom/mojang/brigadier/builder/RequiredArgumentBuilder;
+ 41: invokedynamic #509, 0 // InvokeDynamic #35:run:()Lcom/mojang/brigadier/Command;
+ 46: invokevirtual #219 // Method com/mojang/brigadier/builder/RequiredArgumentBuilder.executes:(Lcom/mojang/brigadier/Command;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 49: invokevirtual #233 // Method com/mojang/brigadier/builder/RequiredArgumentBuilder.then:(Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 52: invokevirtual #233 // Method com/mojang/brigadier/builder/RequiredArgumentBuilder.then:(Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 55: invokevirtual #233 // Method com/mojang/brigadier/builder/RequiredArgumentBuilder.then:(Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 58: areturn
+
+ private static com.mojang.brigadier.builder.LiteralArgumentBuilder advancedLootCommand();
+ Code:
+ 0: ldc_w #511 // String advanced
+ 3: invokestatic #137 // Method net/minecraft/commands/Commands.m_82127_:(Ljava/lang/String;)Lcom/mojang/brigadier/builder/LiteralArgumentBuilder;
+ 6: invokedynamic #516, 0 // InvokeDynamic #36:run:()Lcom/mojang/brigadier/Command;
+ 11: invokevirtual #241 // Method com/mojang/brigadier/builder/LiteralArgumentBuilder.executes:(Lcom/mojang/brigadier/Command;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 14: checkcast #156 // class com/mojang/brigadier/builder/LiteralArgumentBuilder
+ 17: invokestatic #519 // Method createCommand:()Lcom/mojang/brigadier/builder/LiteralArgumentBuilder;
+ 20: invokevirtual #168 // Method com/mojang/brigadier/builder/LiteralArgumentBuilder.then:(Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 23: checkcast #156 // class com/mojang/brigadier/builder/LiteralArgumentBuilder
+ 26: ldc_w #521 // String copy
+ 29: invokestatic #137 // Method net/minecraft/commands/Commands.m_82127_:(Ljava/lang/String;)Lcom/mojang/brigadier/builder/LiteralArgumentBuilder;
+ 32: ldc_w #523 // String from_id
+ 35: invokestatic #191 // Method com/mojang/brigadier/arguments/StringArgumentType.word:()Lcom/mojang/brigadier/arguments/StringArgumentType;
+ 38: invokestatic #195 // Method net/minecraft/commands/Commands.m_82129_:(Ljava/lang/String;Lcom/mojang/brigadier/arguments/ArgumentType;)Lcom/mojang/brigadier/builder/RequiredArgumentBuilder;
+ 41: ldc_w #525 // String to_id
+ 44: invokestatic #191 // Method com/mojang/brigadier/arguments/StringArgumentType.word:()Lcom/mojang/brigadier/arguments/StringArgumentType;
+ 47: invokestatic #195 // Method net/minecraft/commands/Commands.m_82129_:(Ljava/lang/String;Lcom/mojang/brigadier/arguments/ArgumentType;)Lcom/mojang/brigadier/builder/RequiredArgumentBuilder;
+ 50: invokedynamic #530, 0 // InvokeDynamic #37:run:()Lcom/mojang/brigadier/Command;
+ 55: invokevirtual #219 // Method com/mojang/brigadier/builder/RequiredArgumentBuilder.executes:(Lcom/mojang/brigadier/Command;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 58: invokevirtual #233 // Method com/mojang/brigadier/builder/RequiredArgumentBuilder.then:(Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 61: invokevirtual #168 // Method com/mojang/brigadier/builder/LiteralArgumentBuilder.then:(Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 64: invokevirtual #168 // Method com/mojang/brigadier/builder/LiteralArgumentBuilder.then:(Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 67: checkcast #156 // class com/mojang/brigadier/builder/LiteralArgumentBuilder
+ 70: invokestatic #533 // Method configCommand:()Lcom/mojang/brigadier/builder/LiteralArgumentBuilder;
+ 73: invokevirtual #168 // Method com/mojang/brigadier/builder/LiteralArgumentBuilder.then:(Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 76: checkcast #156 // class com/mojang/brigadier/builder/LiteralArgumentBuilder
+ 79: invokestatic #536 // Method forceOpenCommand:()Lcom/mojang/brigadier/builder/LiteralArgumentBuilder;
+ 82: invokevirtual #168 // Method com/mojang/brigadier/builder/LiteralArgumentBuilder.then:(Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 85: checkcast #156 // class com/mojang/brigadier/builder/LiteralArgumentBuilder
+ 88: ldc_w #538 // String format
+ 91: invokestatic #137 // Method net/minecraft/commands/Commands.m_82127_:(Ljava/lang/String;)Lcom/mojang/brigadier/builder/LiteralArgumentBuilder;
+ 94: invokedynamic #543, 0 // InvokeDynamic #38:run:()Lcom/mojang/brigadier/Command;
+ 99: invokevirtual #241 // Method com/mojang/brigadier/builder/LiteralArgumentBuilder.executes:(Lcom/mojang/brigadier/Command;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 102: invokevirtual #168 // Method com/mojang/brigadier/builder/LiteralArgumentBuilder.then:(Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 105: checkcast #156 // class com/mojang/brigadier/builder/LiteralArgumentBuilder
+ 108: ldc_w #545 // String refresh
+ 111: invokestatic #137 // Method net/minecraft/commands/Commands.m_82127_:(Ljava/lang/String;)Lcom/mojang/brigadier/builder/LiteralArgumentBuilder;
+ 114: invokedynamic #550, 0 // InvokeDynamic #39:run:()Lcom/mojang/brigadier/Command;
+ 119: invokevirtual #241 // Method com/mojang/brigadier/builder/LiteralArgumentBuilder.executes:(Lcom/mojang/brigadier/Command;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 122: invokevirtual #168 // Method com/mojang/brigadier/builder/LiteralArgumentBuilder.then:(Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 125: checkcast #156 // class com/mojang/brigadier/builder/LiteralArgumentBuilder
+ 128: ldc_w #552 // String clear_inventory
+ 131: invokestatic #137 // Method net/minecraft/commands/Commands.m_82127_:(Ljava/lang/String;)Lcom/mojang/brigadier/builder/LiteralArgumentBuilder;
+ 134: invokedynamic #557, 0 // InvokeDynamic #40:run:()Lcom/mojang/brigadier/Command;
+ 139: invokevirtual #241 // Method com/mojang/brigadier/builder/LiteralArgumentBuilder.executes:(Lcom/mojang/brigadier/Command;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 142: invokevirtual #168 // Method com/mojang/brigadier/builder/LiteralArgumentBuilder.then:(Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 145: checkcast #156 // class com/mojang/brigadier/builder/LiteralArgumentBuilder
+ 148: ldc_w #559 // String reset
+ 151: invokestatic #137 // Method net/minecraft/commands/Commands.m_82127_:(Ljava/lang/String;)Lcom/mojang/brigadier/builder/LiteralArgumentBuilder;
+ 154: invokedynamic #564, 0 // InvokeDynamic #41:run:()Lcom/mojang/brigadier/Command;
+ 159: invokevirtual #241 // Method com/mojang/brigadier/builder/LiteralArgumentBuilder.executes:(Lcom/mojang/brigadier/Command;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 162: invokevirtual #168 // Method com/mojang/brigadier/builder/LiteralArgumentBuilder.then:(Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 165: checkcast #156 // class com/mojang/brigadier/builder/LiteralArgumentBuilder
+ 168: ldc_w #566 // String respawn_now
+ 171: invokestatic #137 // Method net/minecraft/commands/Commands.m_82127_:(Ljava/lang/String;)Lcom/mojang/brigadier/builder/LiteralArgumentBuilder;
+ 174: invokedynamic #571, 0 // InvokeDynamic #42:run:()Lcom/mojang/brigadier/Command;
+ 179: invokevirtual #241 // Method com/mojang/brigadier/builder/LiteralArgumentBuilder.executes:(Lcom/mojang/brigadier/Command;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 182: invokevirtual #168 // Method com/mojang/brigadier/builder/LiteralArgumentBuilder.then:(Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 185: checkcast #156 // class com/mojang/brigadier/builder/LiteralArgumentBuilder
+ 188: ldc_w #573 // String generate
+ 191: invokestatic #137 // Method net/minecraft/commands/Commands.m_82127_:(Ljava/lang/String;)Lcom/mojang/brigadier/builder/LiteralArgumentBuilder;
+ 194: invokedynamic #578, 0 // InvokeDynamic #43:run:()Lcom/mojang/brigadier/Command;
+ 199: invokevirtual #241 // Method com/mojang/brigadier/builder/LiteralArgumentBuilder.executes:(Lcom/mojang/brigadier/Command;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 202: invokevirtual #168 // Method com/mojang/brigadier/builder/LiteralArgumentBuilder.then:(Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 205: checkcast #156 // class com/mojang/brigadier/builder/LiteralArgumentBuilder
+ 208: ldc_w #580 // String set
+ 211: invokestatic #137 // Method net/minecraft/commands/Commands.m_82127_:(Ljava/lang/String;)Lcom/mojang/brigadier/builder/LiteralArgumentBuilder;
+ 214: ldc #185 // String config_id
+ 216: invokestatic #191 // Method com/mojang/brigadier/arguments/StringArgumentType.word:()Lcom/mojang/brigadier/arguments/StringArgumentType;
+ 219: invokestatic #195 // Method net/minecraft/commands/Commands.m_82129_:(Ljava/lang/String;Lcom/mojang/brigadier/arguments/ArgumentType;)Lcom/mojang/brigadier/builder/RequiredArgumentBuilder;
+ 222: invokedynamic #585, 0 // InvokeDynamic #44:run:()Lcom/mojang/brigadier/Command;
+ 227: invokevirtual #219 // Method com/mojang/brigadier/builder/RequiredArgumentBuilder.executes:(Lcom/mojang/brigadier/Command;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 230: checkcast #215 // class com/mojang/brigadier/builder/RequiredArgumentBuilder
+ 233: ldc #221 // String locked
+ 235: invokestatic #227 // Method com/mojang/brigadier/arguments/BoolArgumentType.bool:()Lcom/mojang/brigadier/arguments/BoolArgumentType;
+ 238: invokestatic #195 // Method net/minecraft/commands/Commands.m_82129_:(Ljava/lang/String;Lcom/mojang/brigadier/arguments/ArgumentType;)Lcom/mojang/brigadier/builder/RequiredArgumentBuilder;
+ 241: invokedynamic #590, 0 // InvokeDynamic #45:run:()Lcom/mojang/brigadier/Command;
+ 246: invokevirtual #219 // Method com/mojang/brigadier/builder/RequiredArgumentBuilder.executes:(Lcom/mojang/brigadier/Command;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 249: invokevirtual #233 // Method com/mojang/brigadier/builder/RequiredArgumentBuilder.then:(Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 252: invokevirtual #168 // Method com/mojang/brigadier/builder/LiteralArgumentBuilder.then:(Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 255: invokevirtual #168 // Method com/mojang/brigadier/builder/LiteralArgumentBuilder.then:(Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 258: checkcast #156 // class com/mojang/brigadier/builder/LiteralArgumentBuilder
+ 261: invokestatic #593 // Method addCommand:()Lcom/mojang/brigadier/builder/LiteralArgumentBuilder;
+ 264: invokevirtual #168 // Method com/mojang/brigadier/builder/LiteralArgumentBuilder.then:(Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 267: checkcast #156 // class com/mojang/brigadier/builder/LiteralArgumentBuilder
+ 270: areturn
+
+ private static com.mojang.brigadier.builder.LiteralArgumentBuilder createCommand();
+ Code:
+ 0: ldc_w #595 // String create
+ 3: invokestatic #137 // Method net/minecraft/commands/Commands.m_82127_:(Ljava/lang/String;)Lcom/mojang/brigadier/builder/LiteralArgumentBuilder;
+ 6: ldc #185 // String config_id
+ 8: invokestatic #191 // Method com/mojang/brigadier/arguments/StringArgumentType.word:()Lcom/mojang/brigadier/arguments/StringArgumentType;
+ 11: invokestatic #195 // Method net/minecraft/commands/Commands.m_82129_:(Ljava/lang/String;Lcom/mojang/brigadier/arguments/ArgumentType;)Lcom/mojang/brigadier/builder/RequiredArgumentBuilder;
+ 14: invokedynamic #600, 0 // InvokeDynamic #46:run:()Lcom/mojang/brigadier/Command;
+ 19: invokevirtual #219 // Method com/mojang/brigadier/builder/RequiredArgumentBuilder.executes:(Lcom/mojang/brigadier/Command;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 22: checkcast #215 // class com/mojang/brigadier/builder/RequiredArgumentBuilder
+ 25: ldc_w #602 // String per_player
+ 28: invokestatic #227 // Method com/mojang/brigadier/arguments/BoolArgumentType.bool:()Lcom/mojang/brigadier/arguments/BoolArgumentType;
+ 31: invokestatic #195 // Method net/minecraft/commands/Commands.m_82129_:(Ljava/lang/String;Lcom/mojang/brigadier/arguments/ArgumentType;)Lcom/mojang/brigadier/builder/RequiredArgumentBuilder;
+ 34: invokedynamic #607, 0 // InvokeDynamic #47:run:()Lcom/mojang/brigadier/Command;
+ 39: invokevirtual #219 // Method com/mojang/brigadier/builder/RequiredArgumentBuilder.executes:(Lcom/mojang/brigadier/Command;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 42: checkcast #215 // class com/mojang/brigadier/builder/RequiredArgumentBuilder
+ 45: ldc_w #609 // String search_enabled
+ 48: invokestatic #227 // Method com/mojang/brigadier/arguments/BoolArgumentType.bool:()Lcom/mojang/brigadier/arguments/BoolArgumentType;
+ 51: invokestatic #195 // Method net/minecraft/commands/Commands.m_82129_:(Ljava/lang/String;Lcom/mojang/brigadier/arguments/ArgumentType;)Lcom/mojang/brigadier/builder/RequiredArgumentBuilder;
+ 54: invokedynamic #614, 0 // InvokeDynamic #48:run:()Lcom/mojang/brigadier/Command;
+ 59: invokevirtual #219 // Method com/mojang/brigadier/builder/RequiredArgumentBuilder.executes:(Lcom/mojang/brigadier/Command;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 62: checkcast #215 // class com/mojang/brigadier/builder/RequiredArgumentBuilder
+ 65: ldc_w #616 // String lock_enabled
+ 68: invokestatic #227 // Method com/mojang/brigadier/arguments/BoolArgumentType.bool:()Lcom/mojang/brigadier/arguments/BoolArgumentType;
+ 71: invokestatic #195 // Method net/minecraft/commands/Commands.m_82129_:(Ljava/lang/String;Lcom/mojang/brigadier/arguments/ArgumentType;)Lcom/mojang/brigadier/builder/RequiredArgumentBuilder;
+ 74: invokedynamic #621, 0 // InvokeDynamic #49:run:()Lcom/mojang/brigadier/Command;
+ 79: invokevirtual #219 // Method com/mojang/brigadier/builder/RequiredArgumentBuilder.executes:(Lcom/mojang/brigadier/Command;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 82: invokevirtual #233 // Method com/mojang/brigadier/builder/RequiredArgumentBuilder.then:(Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 85: invokevirtual #233 // Method com/mojang/brigadier/builder/RequiredArgumentBuilder.then:(Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 88: invokevirtual #233 // Method com/mojang/brigadier/builder/RequiredArgumentBuilder.then:(Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 91: invokevirtual #168 // Method com/mojang/brigadier/builder/LiteralArgumentBuilder.then:(Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 94: checkcast #156 // class com/mojang/brigadier/builder/LiteralArgumentBuilder
+ 97: areturn
+
+ private static com.mojang.brigadier.builder.LiteralArgumentBuilder addCommand();
+ Code:
+ 0: ldc_w #407 // String add
+ 3: invokestatic #137 // Method net/minecraft/commands/Commands.m_82127_:(Ljava/lang/String;)Lcom/mojang/brigadier/builder/LiteralArgumentBuilder;
+ 6: ldc #185 // String config_id
+ 8: invokestatic #191 // Method com/mojang/brigadier/arguments/StringArgumentType.word:()Lcom/mojang/brigadier/arguments/StringArgumentType;
+ 11: invokestatic #195 // Method net/minecraft/commands/Commands.m_82129_:(Ljava/lang/String;Lcom/mojang/brigadier/arguments/ArgumentType;)Lcom/mojang/brigadier/builder/RequiredArgumentBuilder;
+ 14: invokestatic #624 // Method addHandCommand:()Lcom/mojang/brigadier/builder/LiteralArgumentBuilder;
+ 17: invokevirtual #233 // Method com/mojang/brigadier/builder/RequiredArgumentBuilder.then:(Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 20: checkcast #215 // class com/mojang/brigadier/builder/RequiredArgumentBuilder
+ 23: invokestatic #627 // Method addItemCommand:()Lcom/mojang/brigadier/builder/LiteralArgumentBuilder;
+ 26: invokevirtual #233 // Method com/mojang/brigadier/builder/RequiredArgumentBuilder.then:(Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 29: checkcast #215 // class com/mojang/brigadier/builder/RequiredArgumentBuilder
+ 32: invokestatic #630 // Method addTagCommand:()Lcom/mojang/brigadier/builder/LiteralArgumentBuilder;
+ 35: invokevirtual #233 // Method com/mojang/brigadier/builder/RequiredArgumentBuilder.then:(Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 38: checkcast #215 // class com/mojang/brigadier/builder/RequiredArgumentBuilder
+ 41: invokestatic #633 // Method addLootTableCommand:()Lcom/mojang/brigadier/builder/LiteralArgumentBuilder;
+ 44: invokevirtual #233 // Method com/mojang/brigadier/builder/RequiredArgumentBuilder.then:(Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 47: invokevirtual #168 // Method com/mojang/brigadier/builder/LiteralArgumentBuilder.then:(Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 50: checkcast #156 // class com/mojang/brigadier/builder/LiteralArgumentBuilder
+ 53: areturn
+
+ private static com.mojang.brigadier.builder.LiteralArgumentBuilder lootGiveCommand();
+ Code:
+ 0: ldc #181 // String give
+ 2: invokestatic #137 // Method net/minecraft/commands/Commands.m_82127_:(Ljava/lang/String;)Lcom/mojang/brigadier/builder/LiteralArgumentBuilder;
+ 5: ldc #185 // String config_id
+ 7: invokestatic #191 // Method com/mojang/brigadier/arguments/StringArgumentType.word:()Lcom/mojang/brigadier/arguments/StringArgumentType;
+ 10: invokestatic #195 // Method net/minecraft/commands/Commands.m_82129_:(Ljava/lang/String;Lcom/mojang/brigadier/arguments/ArgumentType;)Lcom/mojang/brigadier/builder/RequiredArgumentBuilder;
+ 13: ldc #197 // String block_id
+ 15: invokestatic #203 // Method net/minecraft/commands/arguments/ResourceLocationArgument.m_106984_:()Lnet/minecraft/commands/arguments/ResourceLocationArgument;
+ 18: invokestatic #195 // Method net/minecraft/commands/Commands.m_82129_:(Ljava/lang/String;Lcom/mojang/brigadier/arguments/ArgumentType;)Lcom/mojang/brigadier/builder/RequiredArgumentBuilder;
+ 21: invokedynamic #638, 0 // InvokeDynamic #50:run:()Lcom/mojang/brigadier/Command;
+ 26: invokevirtual #219 // Method com/mojang/brigadier/builder/RequiredArgumentBuilder.executes:(Lcom/mojang/brigadier/Command;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 29: checkcast #215 // class com/mojang/brigadier/builder/RequiredArgumentBuilder
+ 32: ldc #221 // String locked
+ 34: invokestatic #227 // Method com/mojang/brigadier/arguments/BoolArgumentType.bool:()Lcom/mojang/brigadier/arguments/BoolArgumentType;
+ 37: invokestatic #195 // Method net/minecraft/commands/Commands.m_82129_:(Ljava/lang/String;Lcom/mojang/brigadier/arguments/ArgumentType;)Lcom/mojang/brigadier/builder/RequiredArgumentBuilder;
+ 40: invokedynamic #643, 0 // InvokeDynamic #51:run:()Lcom/mojang/brigadier/Command;
+ 45: invokevirtual #219 // Method com/mojang/brigadier/builder/RequiredArgumentBuilder.executes:(Lcom/mojang/brigadier/Command;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 48: invokevirtual #233 // Method com/mojang/brigadier/builder/RequiredArgumentBuilder.then:(Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 51: invokevirtual #233 // Method com/mojang/brigadier/builder/RequiredArgumentBuilder.then:(Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 54: invokevirtual #168 // Method com/mojang/brigadier/builder/LiteralArgumentBuilder.then:(Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 57: checkcast #156 // class com/mojang/brigadier/builder/LiteralArgumentBuilder
+ 60: areturn
+
+ private static com.mojang.brigadier.builder.LiteralArgumentBuilder addHandCommand();
+ Code:
+ 0: ldc_w #409 // String hand
+ 3: invokestatic #137 // Method net/minecraft/commands/Commands.m_82127_:(Ljava/lang/String;)Lcom/mojang/brigadier/builder/LiteralArgumentBuilder;
+ 6: ldc_w #454 // String weight
+ 9: iconst_1
+ 10: invokestatic #460 // Method com/mojang/brigadier/arguments/IntegerArgumentType.integer:(I)Lcom/mojang/brigadier/arguments/IntegerArgumentType;
+ 13: invokestatic #195 // Method net/minecraft/commands/Commands.m_82129_:(Ljava/lang/String;Lcom/mojang/brigadier/arguments/ArgumentType;)Lcom/mojang/brigadier/builder/RequiredArgumentBuilder;
+ 16: ldc_w #467 // String count
+ 19: iconst_1
+ 20: invokestatic #460 // Method com/mojang/brigadier/arguments/IntegerArgumentType.integer:(I)Lcom/mojang/brigadier/arguments/IntegerArgumentType;
+ 23: invokestatic #195 // Method net/minecraft/commands/Commands.m_82129_:(Ljava/lang/String;Lcom/mojang/brigadier/arguments/ArgumentType;)Lcom/mojang/brigadier/builder/RequiredArgumentBuilder;
+ 26: ldc_w #474 // String chance
+ 29: fconst_0
+ 30: invokestatic #646 // Method com/mojang/brigadier/arguments/FloatArgumentType.floatArg:(F)Lcom/mojang/brigadier/arguments/FloatArgumentType;
+ 33: invokestatic #195 // Method net/minecraft/commands/Commands.m_82129_:(Ljava/lang/String;Lcom/mojang/brigadier/arguments/ArgumentType;)Lcom/mojang/brigadier/builder/RequiredArgumentBuilder;
+ 36: invokedynamic #651, 0 // InvokeDynamic #52:run:()Lcom/mojang/brigadier/Command;
+ 41: invokevirtual #219 // Method com/mojang/brigadier/builder/RequiredArgumentBuilder.executes:(Lcom/mojang/brigadier/Command;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 44: invokevirtual #233 // Method com/mojang/brigadier/builder/RequiredArgumentBuilder.then:(Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 47: invokevirtual #233 // Method com/mojang/brigadier/builder/RequiredArgumentBuilder.then:(Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 50: checkcast #215 // class com/mojang/brigadier/builder/RequiredArgumentBuilder
+ 53: ldc_w #487 // String min_count
+ 56: iconst_1
+ 57: invokestatic #460 // Method com/mojang/brigadier/arguments/IntegerArgumentType.integer:(I)Lcom/mojang/brigadier/arguments/IntegerArgumentType;
+ 60: invokestatic #195 // Method net/minecraft/commands/Commands.m_82129_:(Ljava/lang/String;Lcom/mojang/brigadier/arguments/ArgumentType;)Lcom/mojang/brigadier/builder/RequiredArgumentBuilder;
+ 63: ldc_w #489 // String max_count
+ 66: iconst_1
+ 67: invokestatic #460 // Method com/mojang/brigadier/arguments/IntegerArgumentType.integer:(I)Lcom/mojang/brigadier/arguments/IntegerArgumentType;
+ 70: invokestatic #195 // Method net/minecraft/commands/Commands.m_82129_:(Ljava/lang/String;Lcom/mojang/brigadier/arguments/ArgumentType;)Lcom/mojang/brigadier/builder/RequiredArgumentBuilder;
+ 73: ldc_w #474 // String chance
+ 76: fconst_0
+ 77: invokestatic #646 // Method com/mojang/brigadier/arguments/FloatArgumentType.floatArg:(F)Lcom/mojang/brigadier/arguments/FloatArgumentType;
+ 80: invokestatic #195 // Method net/minecraft/commands/Commands.m_82129_:(Ljava/lang/String;Lcom/mojang/brigadier/arguments/ArgumentType;)Lcom/mojang/brigadier/builder/RequiredArgumentBuilder;
+ 83: invokedynamic #656, 0 // InvokeDynamic #53:run:()Lcom/mojang/brigadier/Command;
+ 88: invokevirtual #219 // Method com/mojang/brigadier/builder/RequiredArgumentBuilder.executes:(Lcom/mojang/brigadier/Command;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 91: invokevirtual #233 // Method com/mojang/brigadier/builder/RequiredArgumentBuilder.then:(Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 94: invokevirtual #233 // Method com/mojang/brigadier/builder/RequiredArgumentBuilder.then:(Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 97: invokevirtual #233 // Method com/mojang/brigadier/builder/RequiredArgumentBuilder.then:(Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 100: invokevirtual #168 // Method com/mojang/brigadier/builder/LiteralArgumentBuilder.then:(Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 103: checkcast #156 // class com/mojang/brigadier/builder/LiteralArgumentBuilder
+ 106: areturn
+
+ private static com.mojang.brigadier.builder.LiteralArgumentBuilder addItemCommand();
+ Code:
+ 0: ldc_w #420 // String item
+ 3: invokestatic #137 // Method net/minecraft/commands/Commands.m_82127_:(Ljava/lang/String;)Lcom/mojang/brigadier/builder/LiteralArgumentBuilder;
+ 6: ldc_w #422 // String item_id
+ 9: invokestatic #203 // Method net/minecraft/commands/arguments/ResourceLocationArgument.m_106984_:()Lnet/minecraft/commands/arguments/ResourceLocationArgument;
+ 12: invokestatic #195 // Method net/minecraft/commands/Commands.m_82129_:(Ljava/lang/String;Lcom/mojang/brigadier/arguments/ArgumentType;)Lcom/mojang/brigadier/builder/RequiredArgumentBuilder;
+ 15: ldc_w #454 // String weight
+ 18: iconst_1
+ 19: invokestatic #460 // Method com/mojang/brigadier/arguments/IntegerArgumentType.integer:(I)Lcom/mojang/brigadier/arguments/IntegerArgumentType;
+ 22: invokestatic #195 // Method net/minecraft/commands/Commands.m_82129_:(Ljava/lang/String;Lcom/mojang/brigadier/arguments/ArgumentType;)Lcom/mojang/brigadier/builder/RequiredArgumentBuilder;
+ 25: ldc_w #467 // String count
+ 28: iconst_1
+ 29: invokestatic #460 // Method com/mojang/brigadier/arguments/IntegerArgumentType.integer:(I)Lcom/mojang/brigadier/arguments/IntegerArgumentType;
+ 32: invokestatic #195 // Method net/minecraft/commands/Commands.m_82129_:(Ljava/lang/String;Lcom/mojang/brigadier/arguments/ArgumentType;)Lcom/mojang/brigadier/builder/RequiredArgumentBuilder;
+ 35: ldc_w #474 // String chance
+ 38: fconst_0
+ 39: invokestatic #646 // Method com/mojang/brigadier/arguments/FloatArgumentType.floatArg:(F)Lcom/mojang/brigadier/arguments/FloatArgumentType;
+ 42: invokestatic #195 // Method net/minecraft/commands/Commands.m_82129_:(Ljava/lang/String;Lcom/mojang/brigadier/arguments/ArgumentType;)Lcom/mojang/brigadier/builder/RequiredArgumentBuilder;
+ 45: invokedynamic #661, 0 // InvokeDynamic #54:run:()Lcom/mojang/brigadier/Command;
+ 50: invokevirtual #219 // Method com/mojang/brigadier/builder/RequiredArgumentBuilder.executes:(Lcom/mojang/brigadier/Command;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 53: invokevirtual #233 // Method com/mojang/brigadier/builder/RequiredArgumentBuilder.then:(Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 56: invokevirtual #233 // Method com/mojang/brigadier/builder/RequiredArgumentBuilder.then:(Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 59: checkcast #215 // class com/mojang/brigadier/builder/RequiredArgumentBuilder
+ 62: ldc_w #487 // String min_count
+ 65: iconst_1
+ 66: invokestatic #460 // Method com/mojang/brigadier/arguments/IntegerArgumentType.integer:(I)Lcom/mojang/brigadier/arguments/IntegerArgumentType;
+ 69: invokestatic #195 // Method net/minecraft/commands/Commands.m_82129_:(Ljava/lang/String;Lcom/mojang/brigadier/arguments/ArgumentType;)Lcom/mojang/brigadier/builder/RequiredArgumentBuilder;
+ 72: ldc_w #489 // String max_count
+ 75: iconst_1
+ 76: invokestatic #460 // Method com/mojang/brigadier/arguments/IntegerArgumentType.integer:(I)Lcom/mojang/brigadier/arguments/IntegerArgumentType;
+ 79: invokestatic #195 // Method net/minecraft/commands/Commands.m_82129_:(Ljava/lang/String;Lcom/mojang/brigadier/arguments/ArgumentType;)Lcom/mojang/brigadier/builder/RequiredArgumentBuilder;
+ 82: ldc_w #474 // String chance
+ 85: fconst_0
+ 86: invokestatic #646 // Method com/mojang/brigadier/arguments/FloatArgumentType.floatArg:(F)Lcom/mojang/brigadier/arguments/FloatArgumentType;
+ 89: invokestatic #195 // Method net/minecraft/commands/Commands.m_82129_:(Ljava/lang/String;Lcom/mojang/brigadier/arguments/ArgumentType;)Lcom/mojang/brigadier/builder/RequiredArgumentBuilder;
+ 92: invokedynamic #666, 0 // InvokeDynamic #55:run:()Lcom/mojang/brigadier/Command;
+ 97: invokevirtual #219 // Method com/mojang/brigadier/builder/RequiredArgumentBuilder.executes:(Lcom/mojang/brigadier/Command;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 100: invokevirtual #233 // Method com/mojang/brigadier/builder/RequiredArgumentBuilder.then:(Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 103: invokevirtual #233 // Method com/mojang/brigadier/builder/RequiredArgumentBuilder.then:(Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 106: invokevirtual #233 // Method com/mojang/brigadier/builder/RequiredArgumentBuilder.then:(Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 109: invokevirtual #233 // Method com/mojang/brigadier/builder/RequiredArgumentBuilder.then:(Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 112: invokevirtual #168 // Method com/mojang/brigadier/builder/LiteralArgumentBuilder.then:(Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 115: checkcast #156 // class com/mojang/brigadier/builder/LiteralArgumentBuilder
+ 118: areturn
+
+ private static com.mojang.brigadier.builder.LiteralArgumentBuilder addTagCommand();
+ Code:
+ 0: ldc_w #432 // String tag
+ 3: invokestatic #137 // Method net/minecraft/commands/Commands.m_82127_:(Ljava/lang/String;)Lcom/mojang/brigadier/builder/LiteralArgumentBuilder;
+ 6: ldc_w #434 // String tag_id
+ 9: invokestatic #203 // Method net/minecraft/commands/arguments/ResourceLocationArgument.m_106984_:()Lnet/minecraft/commands/arguments/ResourceLocationArgument;
+ 12: invokestatic #195 // Method net/minecraft/commands/Commands.m_82129_:(Ljava/lang/String;Lcom/mojang/brigadier/arguments/ArgumentType;)Lcom/mojang/brigadier/builder/RequiredArgumentBuilder;
+ 15: ldc_w #454 // String weight
+ 18: iconst_1
+ 19: invokestatic #460 // Method com/mojang/brigadier/arguments/IntegerArgumentType.integer:(I)Lcom/mojang/brigadier/arguments/IntegerArgumentType;
+ 22: invokestatic #195 // Method net/minecraft/commands/Commands.m_82129_:(Ljava/lang/String;Lcom/mojang/brigadier/arguments/ArgumentType;)Lcom/mojang/brigadier/builder/RequiredArgumentBuilder;
+ 25: ldc_w #467 // String count
+ 28: iconst_1
+ 29: invokestatic #460 // Method com/mojang/brigadier/arguments/IntegerArgumentType.integer:(I)Lcom/mojang/brigadier/arguments/IntegerArgumentType;
+ 32: invokestatic #195 // Method net/minecraft/commands/Commands.m_82129_:(Ljava/lang/String;Lcom/mojang/brigadier/arguments/ArgumentType;)Lcom/mojang/brigadier/builder/RequiredArgumentBuilder;
+ 35: ldc_w #474 // String chance
+ 38: fconst_0
+ 39: invokestatic #646 // Method com/mojang/brigadier/arguments/FloatArgumentType.floatArg:(F)Lcom/mojang/brigadier/arguments/FloatArgumentType;
+ 42: invokestatic #195 // Method net/minecraft/commands/Commands.m_82129_:(Ljava/lang/String;Lcom/mojang/brigadier/arguments/ArgumentType;)Lcom/mojang/brigadier/builder/RequiredArgumentBuilder;
+ 45: invokedynamic #671, 0 // InvokeDynamic #56:run:()Lcom/mojang/brigadier/Command;
+ 50: invokevirtual #219 // Method com/mojang/brigadier/builder/RequiredArgumentBuilder.executes:(Lcom/mojang/brigadier/Command;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 53: invokevirtual #233 // Method com/mojang/brigadier/builder/RequiredArgumentBuilder.then:(Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 56: invokevirtual #233 // Method com/mojang/brigadier/builder/RequiredArgumentBuilder.then:(Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 59: checkcast #215 // class com/mojang/brigadier/builder/RequiredArgumentBuilder
+ 62: ldc_w #487 // String min_count
+ 65: iconst_1
+ 66: invokestatic #460 // Method com/mojang/brigadier/arguments/IntegerArgumentType.integer:(I)Lcom/mojang/brigadier/arguments/IntegerArgumentType;
+ 69: invokestatic #195 // Method net/minecraft/commands/Commands.m_82129_:(Ljava/lang/String;Lcom/mojang/brigadier/arguments/ArgumentType;)Lcom/mojang/brigadier/builder/RequiredArgumentBuilder;
+ 72: ldc_w #489 // String max_count
+ 75: iconst_1
+ 76: invokestatic #460 // Method com/mojang/brigadier/arguments/IntegerArgumentType.integer:(I)Lcom/mojang/brigadier/arguments/IntegerArgumentType;
+ 79: invokestatic #195 // Method net/minecraft/commands/Commands.m_82129_:(Ljava/lang/String;Lcom/mojang/brigadier/arguments/ArgumentType;)Lcom/mojang/brigadier/builder/RequiredArgumentBuilder;
+ 82: ldc_w #474 // String chance
+ 85: fconst_0
+ 86: invokestatic #646 // Method com/mojang/brigadier/arguments/FloatArgumentType.floatArg:(F)Lcom/mojang/brigadier/arguments/FloatArgumentType;
+ 89: invokestatic #195 // Method net/minecraft/commands/Commands.m_82129_:(Ljava/lang/String;Lcom/mojang/brigadier/arguments/ArgumentType;)Lcom/mojang/brigadier/builder/RequiredArgumentBuilder;
+ 92: invokedynamic #676, 0 // InvokeDynamic #57:run:()Lcom/mojang/brigadier/Command;
+ 97: invokevirtual #219 // Method com/mojang/brigadier/builder/RequiredArgumentBuilder.executes:(Lcom/mojang/brigadier/Command;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 100: invokevirtual #233 // Method com/mojang/brigadier/builder/RequiredArgumentBuilder.then:(Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 103: invokevirtual #233 // Method com/mojang/brigadier/builder/RequiredArgumentBuilder.then:(Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 106: invokevirtual #233 // Method com/mojang/brigadier/builder/RequiredArgumentBuilder.then:(Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 109: invokevirtual #233 // Method com/mojang/brigadier/builder/RequiredArgumentBuilder.then:(Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 112: invokevirtual #168 // Method com/mojang/brigadier/builder/LiteralArgumentBuilder.then:(Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 115: checkcast #156 // class com/mojang/brigadier/builder/LiteralArgumentBuilder
+ 118: areturn
+
+ private static com.mojang.brigadier.builder.LiteralArgumentBuilder addLootTableCommand();
+ Code:
+ 0: ldc_w #678 // String loot_table
+ 3: invokestatic #137 // Method net/minecraft/commands/Commands.m_82127_:(Ljava/lang/String;)Lcom/mojang/brigadier/builder/LiteralArgumentBuilder;
+ 6: ldc_w #446 // String loot_table_id
+ 9: invokestatic #203 // Method net/minecraft/commands/arguments/ResourceLocationArgument.m_106984_:()Lnet/minecraft/commands/arguments/ResourceLocationArgument;
+ 12: invokestatic #195 // Method net/minecraft/commands/Commands.m_82129_:(Ljava/lang/String;Lcom/mojang/brigadier/arguments/ArgumentType;)Lcom/mojang/brigadier/builder/RequiredArgumentBuilder;
+ 15: invokedynamic #683, 0 // InvokeDynamic #58:run:()Lcom/mojang/brigadier/Command;
+ 20: invokevirtual #219 // Method com/mojang/brigadier/builder/RequiredArgumentBuilder.executes:(Lcom/mojang/brigadier/Command;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 23: invokevirtual #168 // Method com/mojang/brigadier/builder/LiteralArgumentBuilder.then:(Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 26: checkcast #156 // class com/mojang/brigadier/builder/LiteralArgumentBuilder
+ 29: areturn
+
+ private static com.mojang.brigadier.builder.LiteralArgumentBuilder configCommand();
+ Code:
+ 0: ldc_w #685 // String config
+ 3: invokestatic #137 // Method net/minecraft/commands/Commands.m_82127_:(Ljava/lang/String;)Lcom/mojang/brigadier/builder/LiteralArgumentBuilder;
+ 6: ldc #185 // String config_id
+ 8: invokestatic #191 // Method com/mojang/brigadier/arguments/StringArgumentType.word:()Lcom/mojang/brigadier/arguments/StringArgumentType;
+ 11: invokestatic #195 // Method net/minecraft/commands/Commands.m_82129_:(Ljava/lang/String;Lcom/mojang/brigadier/arguments/ArgumentType;)Lcom/mojang/brigadier/builder/RequiredArgumentBuilder;
+ 14: ldc_w #602 // String per_player
+ 17: invokestatic #137 // Method net/minecraft/commands/Commands.m_82127_:(Ljava/lang/String;)Lcom/mojang/brigadier/builder/LiteralArgumentBuilder;
+ 20: ldc_w #687 // String enabled
+ 23: invokestatic #227 // Method com/mojang/brigadier/arguments/BoolArgumentType.bool:()Lcom/mojang/brigadier/arguments/BoolArgumentType;
+ 26: invokestatic #195 // Method net/minecraft/commands/Commands.m_82129_:(Ljava/lang/String;Lcom/mojang/brigadier/arguments/ArgumentType;)Lcom/mojang/brigadier/builder/RequiredArgumentBuilder;
+ 29: invokedynamic #692, 0 // InvokeDynamic #59:run:()Lcom/mojang/brigadier/Command;
+ 34: invokevirtual #219 // Method com/mojang/brigadier/builder/RequiredArgumentBuilder.executes:(Lcom/mojang/brigadier/Command;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 37: invokevirtual #168 // Method com/mojang/brigadier/builder/LiteralArgumentBuilder.then:(Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 40: invokevirtual #233 // Method com/mojang/brigadier/builder/RequiredArgumentBuilder.then:(Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 43: checkcast #215 // class com/mojang/brigadier/builder/RequiredArgumentBuilder
+ 46: ldc_w #694 // String search
+ 49: invokestatic #137 // Method net/minecraft/commands/Commands.m_82127_:(Ljava/lang/String;)Lcom/mojang/brigadier/builder/LiteralArgumentBuilder;
+ 52: ldc_w #687 // String enabled
+ 55: invokestatic #227 // Method com/mojang/brigadier/arguments/BoolArgumentType.bool:()Lcom/mojang/brigadier/arguments/BoolArgumentType;
+ 58: invokestatic #195 // Method net/minecraft/commands/Commands.m_82129_:(Ljava/lang/String;Lcom/mojang/brigadier/arguments/ArgumentType;)Lcom/mojang/brigadier/builder/RequiredArgumentBuilder;
+ 61: invokedynamic #699, 0 // InvokeDynamic #60:run:()Lcom/mojang/brigadier/Command;
+ 66: invokevirtual #219 // Method com/mojang/brigadier/builder/RequiredArgumentBuilder.executes:(Lcom/mojang/brigadier/Command;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 69: invokevirtual #168 // Method com/mojang/brigadier/builder/LiteralArgumentBuilder.then:(Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 72: invokevirtual #233 // Method com/mojang/brigadier/builder/RequiredArgumentBuilder.then:(Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 75: checkcast #215 // class com/mojang/brigadier/builder/RequiredArgumentBuilder
+ 78: ldc_w #371 // String lock
+ 81: invokestatic #137 // Method net/minecraft/commands/Commands.m_82127_:(Ljava/lang/String;)Lcom/mojang/brigadier/builder/LiteralArgumentBuilder;
+ 84: ldc_w #687 // String enabled
+ 87: invokestatic #227 // Method com/mojang/brigadier/arguments/BoolArgumentType.bool:()Lcom/mojang/brigadier/arguments/BoolArgumentType;
+ 90: invokestatic #195 // Method net/minecraft/commands/Commands.m_82129_:(Ljava/lang/String;Lcom/mojang/brigadier/arguments/ArgumentType;)Lcom/mojang/brigadier/builder/RequiredArgumentBuilder;
+ 93: invokedynamic #704, 0 // InvokeDynamic #61:run:()Lcom/mojang/brigadier/Command;
+ 98: invokevirtual #219 // Method com/mojang/brigadier/builder/RequiredArgumentBuilder.executes:(Lcom/mojang/brigadier/Command;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 101: invokevirtual #168 // Method com/mojang/brigadier/builder/LiteralArgumentBuilder.then:(Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 104: invokevirtual #233 // Method com/mojang/brigadier/builder/RequiredArgumentBuilder.then:(Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 107: checkcast #215 // class com/mojang/brigadier/builder/RequiredArgumentBuilder
+ 110: ldc_w #706 // String empty
+ 113: invokestatic #137 // Method net/minecraft/commands/Commands.m_82127_:(Ljava/lang/String;)Lcom/mojang/brigadier/builder/LiteralArgumentBuilder;
+ 116: ldc_w #687 // String enabled
+ 119: invokestatic #227 // Method com/mojang/brigadier/arguments/BoolArgumentType.bool:()Lcom/mojang/brigadier/arguments/BoolArgumentType;
+ 122: invokestatic #195 // Method net/minecraft/commands/Commands.m_82129_:(Ljava/lang/String;Lcom/mojang/brigadier/arguments/ArgumentType;)Lcom/mojang/brigadier/builder/RequiredArgumentBuilder;
+ 125: ldc_w #708 // String spawn_chance
+ 128: fconst_0
+ 129: fconst_1
+ 130: invokestatic #480 // Method com/mojang/brigadier/arguments/FloatArgumentType.floatArg:(FF)Lcom/mojang/brigadier/arguments/FloatArgumentType;
+ 133: invokestatic #195 // Method net/minecraft/commands/Commands.m_82129_:(Ljava/lang/String;Lcom/mojang/brigadier/arguments/ArgumentType;)Lcom/mojang/brigadier/builder/RequiredArgumentBuilder;
+ 136: invokedynamic #713, 0 // InvokeDynamic #62:run:()Lcom/mojang/brigadier/Command;
+ 141: invokevirtual #219 // Method com/mojang/brigadier/builder/RequiredArgumentBuilder.executes:(Lcom/mojang/brigadier/Command;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 144: invokevirtual #233 // Method com/mojang/brigadier/builder/RequiredArgumentBuilder.then:(Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 147: invokevirtual #168 // Method com/mojang/brigadier/builder/LiteralArgumentBuilder.then:(Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 150: invokevirtual #233 // Method com/mojang/brigadier/builder/RequiredArgumentBuilder.then:(Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 153: checkcast #215 // class com/mojang/brigadier/builder/RequiredArgumentBuilder
+ 156: ldc_w #715 // String respawn
+ 159: invokestatic #137 // Method net/minecraft/commands/Commands.m_82127_:(Ljava/lang/String;)Lcom/mojang/brigadier/builder/LiteralArgumentBuilder;
+ 162: ldc_w #687 // String enabled
+ 165: invokestatic #227 // Method com/mojang/brigadier/arguments/BoolArgumentType.bool:()Lcom/mojang/brigadier/arguments/BoolArgumentType;
+ 168: invokestatic #195 // Method net/minecraft/commands/Commands.m_82129_:(Ljava/lang/String;Lcom/mojang/brigadier/arguments/ArgumentType;)Lcom/mojang/brigadier/builder/RequiredArgumentBuilder;
+ 171: ldc_w #717 // String time_ticks
+ 174: iconst_1
+ 175: invokestatic #460 // Method com/mojang/brigadier/arguments/IntegerArgumentType.integer:(I)Lcom/mojang/brigadier/arguments/IntegerArgumentType;
+ 178: invokestatic #195 // Method net/minecraft/commands/Commands.m_82129_:(Ljava/lang/String;Lcom/mojang/brigadier/arguments/ArgumentType;)Lcom/mojang/brigadier/builder/RequiredArgumentBuilder;
+ 181: invokedynamic #722, 0 // InvokeDynamic #63:run:()Lcom/mojang/brigadier/Command;
+ 186: invokevirtual #219 // Method com/mojang/brigadier/builder/RequiredArgumentBuilder.executes:(Lcom/mojang/brigadier/Command;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 189: checkcast #215 // class com/mojang/brigadier/builder/RequiredArgumentBuilder
+ 192: ldc_w #724 // String only_if_empty
+ 195: invokestatic #227 // Method com/mojang/brigadier/arguments/BoolArgumentType.bool:()Lcom/mojang/brigadier/arguments/BoolArgumentType;
+ 198: invokestatic #195 // Method net/minecraft/commands/Commands.m_82129_:(Ljava/lang/String;Lcom/mojang/brigadier/arguments/ArgumentType;)Lcom/mojang/brigadier/builder/RequiredArgumentBuilder;
+ 201: ldc_w #726 // String clear_before_respawn
+ 204: invokestatic #227 // Method com/mojang/brigadier/arguments/BoolArgumentType.bool:()Lcom/mojang/brigadier/arguments/BoolArgumentType;
+ 207: invokestatic #195 // Method net/minecraft/commands/Commands.m_82129_:(Ljava/lang/String;Lcom/mojang/brigadier/arguments/ArgumentType;)Lcom/mojang/brigadier/builder/RequiredArgumentBuilder;
+ 210: invokedynamic #731, 0 // InvokeDynamic #64:run:()Lcom/mojang/brigadier/Command;
+ 215: invokevirtual #219 // Method com/mojang/brigadier/builder/RequiredArgumentBuilder.executes:(Lcom/mojang/brigadier/Command;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 218: invokevirtual #233 // Method com/mojang/brigadier/builder/RequiredArgumentBuilder.then:(Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 221: invokevirtual #233 // Method com/mojang/brigadier/builder/RequiredArgumentBuilder.then:(Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 224: invokevirtual #233 // Method com/mojang/brigadier/builder/RequiredArgumentBuilder.then:(Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 227: invokevirtual #168 // Method com/mojang/brigadier/builder/LiteralArgumentBuilder.then:(Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 230: invokevirtual #233 // Method com/mojang/brigadier/builder/RequiredArgumentBuilder.then:(Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 233: invokevirtual #168 // Method com/mojang/brigadier/builder/LiteralArgumentBuilder.then:(Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 236: checkcast #156 // class com/mojang/brigadier/builder/LiteralArgumentBuilder
+ 239: areturn
+
+ private static com.mojang.brigadier.builder.LiteralArgumentBuilder forceOpenCommand();
+ Code:
+ 0: ldc_w #733 // String force_open
+ 3: invokestatic #137 // Method net/minecraft/commands/Commands.m_82127_:(Ljava/lang/String;)Lcom/mojang/brigadier/builder/LiteralArgumentBuilder;
+ 6: ldc_w #321 // String folder
+ 9: invokestatic #137 // Method net/minecraft/commands/Commands.m_82127_:(Ljava/lang/String;)Lcom/mojang/brigadier/builder/LiteralArgumentBuilder;
+ 12: invokedynamic #738, 0 // InvokeDynamic #65:run:()Lcom/mojang/brigadier/Command;
+ 17: invokevirtual #241 // Method com/mojang/brigadier/builder/LiteralArgumentBuilder.executes:(Lcom/mojang/brigadier/Command;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 20: invokevirtual #168 // Method com/mojang/brigadier/builder/LiteralArgumentBuilder.then:(Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 23: checkcast #156 // class com/mojang/brigadier/builder/LiteralArgumentBuilder
+ 26: ldc #243 // String reload
+ 28: invokestatic #137 // Method net/minecraft/commands/Commands.m_82127_:(Ljava/lang/String;)Lcom/mojang/brigadier/builder/LiteralArgumentBuilder;
+ 31: invokedynamic #743, 0 // InvokeDynamic #66:run:()Lcom/mojang/brigadier/Command;
+ 36: invokevirtual #241 // Method com/mojang/brigadier/builder/LiteralArgumentBuilder.executes:(Lcom/mojang/brigadier/Command;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 39: invokevirtual #168 // Method com/mojang/brigadier/builder/LiteralArgumentBuilder.then:(Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 42: checkcast #156 // class com/mojang/brigadier/builder/LiteralArgumentBuilder
+ 45: ldc_w #314 // String list
+ 48: invokestatic #137 // Method net/minecraft/commands/Commands.m_82127_:(Ljava/lang/String;)Lcom/mojang/brigadier/builder/LiteralArgumentBuilder;
+ 51: invokedynamic #748, 0 // InvokeDynamic #67:run:()Lcom/mojang/brigadier/Command;
+ 56: invokevirtual #241 // Method com/mojang/brigadier/builder/LiteralArgumentBuilder.executes:(Lcom/mojang/brigadier/Command;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 59: invokevirtual #168 // Method com/mojang/brigadier/builder/LiteralArgumentBuilder.then:(Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 62: checkcast #156 // class com/mojang/brigadier/builder/LiteralArgumentBuilder
+ 65: ldc_w #407 // String add
+ 68: invokestatic #137 // Method net/minecraft/commands/Commands.m_82127_:(Ljava/lang/String;)Lcom/mojang/brigadier/builder/LiteralArgumentBuilder;
+ 71: ldc_w #420 // String item
+ 74: invokestatic #137 // Method net/minecraft/commands/Commands.m_82127_:(Ljava/lang/String;)Lcom/mojang/brigadier/builder/LiteralArgumentBuilder;
+ 77: ldc_w #422 // String item_id
+ 80: invokestatic #203 // Method net/minecraft/commands/arguments/ResourceLocationArgument.m_106984_:()Lnet/minecraft/commands/arguments/ResourceLocationArgument;
+ 83: invokestatic #195 // Method net/minecraft/commands/Commands.m_82129_:(Ljava/lang/String;Lcom/mojang/brigadier/arguments/ArgumentType;)Lcom/mojang/brigadier/builder/RequiredArgumentBuilder;
+ 86: invokedynamic #753, 0 // InvokeDynamic #68:run:()Lcom/mojang/brigadier/Command;
+ 91: invokevirtual #219 // Method com/mojang/brigadier/builder/RequiredArgumentBuilder.executes:(Lcom/mojang/brigadier/Command;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 94: checkcast #215 // class com/mojang/brigadier/builder/RequiredArgumentBuilder
+ 97: ldc_w #755 // String difficulty
+ 100: invokestatic #191 // Method com/mojang/brigadier/arguments/StringArgumentType.word:()Lcom/mojang/brigadier/arguments/StringArgumentType;
+ 103: invokestatic #195 // Method net/minecraft/commands/Commands.m_82129_:(Ljava/lang/String;Lcom/mojang/brigadier/arguments/ArgumentType;)Lcom/mojang/brigadier/builder/RequiredArgumentBuilder;
+ 106: invokedynamic #760, 0 // InvokeDynamic #69:run:()Lcom/mojang/brigadier/Command;
+ 111: invokevirtual #219 // Method com/mojang/brigadier/builder/RequiredArgumentBuilder.executes:(Lcom/mojang/brigadier/Command;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 114: invokevirtual #233 // Method com/mojang/brigadier/builder/RequiredArgumentBuilder.then:(Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 117: invokevirtual #168 // Method com/mojang/brigadier/builder/LiteralArgumentBuilder.then:(Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 120: invokevirtual #168 // Method com/mojang/brigadier/builder/LiteralArgumentBuilder.then:(Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 123: checkcast #156 // class com/mojang/brigadier/builder/LiteralArgumentBuilder
+ 126: ldc_w #432 // String tag
+ 129: invokestatic #137 // Method net/minecraft/commands/Commands.m_82127_:(Ljava/lang/String;)Lcom/mojang/brigadier/builder/LiteralArgumentBuilder;
+ 132: ldc_w #434 // String tag_id
+ 135: invokestatic #203 // Method net/minecraft/commands/arguments/ResourceLocationArgument.m_106984_:()Lnet/minecraft/commands/arguments/ResourceLocationArgument;
+ 138: invokestatic #195 // Method net/minecraft/commands/Commands.m_82129_:(Ljava/lang/String;Lcom/mojang/brigadier/arguments/ArgumentType;)Lcom/mojang/brigadier/builder/RequiredArgumentBuilder;
+ 141: invokedynamic #765, 0 // InvokeDynamic #70:run:()Lcom/mojang/brigadier/Command;
+ 146: invokevirtual #219 // Method com/mojang/brigadier/builder/RequiredArgumentBuilder.executes:(Lcom/mojang/brigadier/Command;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 149: checkcast #215 // class com/mojang/brigadier/builder/RequiredArgumentBuilder
+ 152: ldc_w #755 // String difficulty
+ 155: invokestatic #191 // Method com/mojang/brigadier/arguments/StringArgumentType.word:()Lcom/mojang/brigadier/arguments/StringArgumentType;
+ 158: invokestatic #195 // Method net/minecraft/commands/Commands.m_82129_:(Ljava/lang/String;Lcom/mojang/brigadier/arguments/ArgumentType;)Lcom/mojang/brigadier/builder/RequiredArgumentBuilder;
+ 161: invokedynamic #770, 0 // InvokeDynamic #71:run:()Lcom/mojang/brigadier/Command;
+ 166: invokevirtual #219 // Method com/mojang/brigadier/builder/RequiredArgumentBuilder.executes:(Lcom/mojang/brigadier/Command;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 169: invokevirtual #233 // Method com/mojang/brigadier/builder/RequiredArgumentBuilder.then:(Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 172: invokevirtual #168 // Method com/mojang/brigadier/builder/LiteralArgumentBuilder.then:(Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 175: invokevirtual #168 // Method com/mojang/brigadier/builder/LiteralArgumentBuilder.then:(Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 178: invokevirtual #168 // Method com/mojang/brigadier/builder/LiteralArgumentBuilder.then:(Lcom/mojang/brigadier/builder/ArgumentBuilder;)Lcom/mojang/brigadier/builder/ArgumentBuilder;
+ 181: checkcast #156 // class com/mojang/brigadier/builder/LiteralArgumentBuilder
+ 184: areturn
+
+ private static int profileUsage(net.minecraft.commands.CommandSourceStack, java.lang.String);
+ Code:
+ 0: aload_1
+ 1: invokestatic #778 // Method com/ogaba/sa_decor/common/loot/DecorLootConfigManager.has:(Ljava/lang/String;)Z
+ 4: ifne 22
+ 7: aload_0
+ 8: aload_1
+ 9: invokedynamic #790, 0 // InvokeDynamic #72:makeConcatWithConstants:(Ljava/lang/String;)Ljava/lang/String;
+ 14: invokestatic #796 // InterfaceMethod net/minecraft/network/chat/Component.m_237113_:(Ljava/lang/String;)Lnet/minecraft/network/chat/MutableComponent;
+ 17: invokevirtual #800 // Method net/minecraft/commands/CommandSourceStack.m_81352_:(Lnet/minecraft/network/chat/Component;)V
+ 20: iconst_0
+ 21: ireturn
+ 22: aload_0
+ 23: invokevirtual #83 // Method net/minecraft/commands/CommandSourceStack.m_81377_:()Lnet/minecraft/server/MinecraftServer;
+ 26: aload_1
+ 27: invokestatic #803 // Method com/ogaba/sa_decor/common/loot/DecorLootProfileUsage.count:(Lnet/minecraft/server/MinecraftServer;Ljava/lang/String;)Lcom/ogaba/sa_decor/common/loot/DecorLootProfileUsage$Usage;
+ 30: astore_2
+ 31: aload_0
+ 32: aload_1
+ 33: aload_2
+ 34: invokedynamic #816, 0 // InvokeDynamic #73:get:(Ljava/lang/String;Lcom/ogaba/sa_decor/common/loot/DecorLootProfileUsage$Usage;)Ljava/util/function/Supplier;
+ 39: iconst_0
+ 40: invokevirtual #820 // Method net/minecraft/commands/CommandSourceStack.m_288197_:(Ljava/util/function/Supplier;Z)V
+ 43: aload_2
+ 44: invokevirtual #824 // Method com/ogaba/sa_decor/common/loot/DecorLootProfileUsage$Usage.total:()I
+ 47: ireturn
+
+ private static int cleanupLootMarkers(net.minecraft.commands.CommandSourceStack, boolean);
+ Code:
+ 0: aload_0
+ 1: invokevirtual #83 // Method net/minecraft/commands/CommandSourceStack.m_81377_:()Lnet/minecraft/server/MinecraftServer;
+ 4: iload_1
+ 5: invokestatic #831 // Method com/ogaba/sa_decor/common/loot/DecorLootProfileUsage.cleanup:(Lnet/minecraft/server/MinecraftServer;Z)Lcom/ogaba/sa_decor/common/loot/DecorLootProfileUsage$CleanupResult;
+ 8: astore_2
+ 9: aload_0
+ 10: aload_2
+ 11: invokedynamic #839, 0 // InvokeDynamic #74:get:(Lcom/ogaba/sa_decor/common/loot/DecorLootProfileUsage$CleanupResult;)Ljava/util/function/Supplier;
+ 16: iconst_1
+ 17: invokevirtual #820 // Method net/minecraft/commands/CommandSourceStack.m_288197_:(Ljava/util/function/Supplier;Z)V
+ 20: aload_2
+ 21: invokevirtual #842 // Method com/ogaba/sa_decor/common/loot/DecorLootProfileUsage$CleanupResult.removed:()I
+ 24: aload_2
+ 25: invokevirtual #845 // Method com/ogaba/sa_decor/common/loot/DecorLootProfileUsage$CleanupResult.indexEntriesFixed:()I
+ 28: iadd
+ 29: ireturn
+
+ private static int exportProfile(net.minecraft.commands.CommandSourceStack, java.lang.String);
+ Code:
+ 0: aload_1
+ 1: invokestatic #853 // Method com/ogaba/sa_decor/common/loot/DecorLootConfigManager.exportConfig:(Ljava/lang/String;)Z
+ 4: istore_2
+ 5: iload_2
+ 6: ifne 24
+ 9: aload_0
+ 10: aload_1
+ 11: invokedynamic #856, 0 // InvokeDynamic #75:makeConcatWithConstants:(Ljava/lang/String;)Ljava/lang/String;
+ 16: invokestatic #796 // InterfaceMethod net/minecraft/network/chat/Component.m_237113_:(Ljava/lang/String;)Lnet/minecraft/network/chat/MutableComponent;
+ 19: invokevirtual #800 // Method net/minecraft/commands/CommandSourceStack.m_81352_:(Lnet/minecraft/network/chat/Component;)V
+ 22: iconst_0
+ 23: ireturn
+ 24: aload_0
+ 25: aload_1
+ 26: invokedynamic #864, 0 // InvokeDynamic #76:get:(Ljava/lang/String;)Ljava/util/function/Supplier;
+ 31: iconst_0
+ 32: invokevirtual #820 // Method net/minecraft/commands/CommandSourceStack.m_288197_:(Ljava/util/function/Supplier;Z)V
+ 35: iconst_1
+ 36: ireturn
+
+ private static int importProfile(net.minecraft.commands.CommandSourceStack, java.lang.String, java.lang.String);
+ Code:
+ 0: aload_1
+ 1: aload_2
+ 2: invokestatic #871 // Method com/ogaba/sa_decor/common/loot/DecorLootConfigManager.importConfig:(Ljava/lang/String;Ljava/lang/String;)Z
+ 5: istore_3
+ 6: iload_3
+ 7: ifne 26
+ 10: aload_0
+ 11: aload_1
+ 12: aload_2
+ 13: invokedynamic #876, 0 // InvokeDynamic #77:makeConcatWithConstants:(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+ 18: invokestatic #796 // InterfaceMethod net/minecraft/network/chat/Component.m_237113_:(Ljava/lang/String;)Lnet/minecraft/network/chat/MutableComponent;
+ 21: invokevirtual #800 // Method net/minecraft/commands/CommandSourceStack.m_81352_:(Lnet/minecraft/network/chat/Component;)V
+ 24: iconst_0
+ 25: ireturn
+ 26: aload_0
+ 27: aload_2
+ 28: invokedynamic #881, 0 // InvokeDynamic #78:get:(Ljava/lang/String;)Ljava/util/function/Supplier;
+ 33: iconst_1
+ 34: invokevirtual #820 // Method net/minecraft/commands/CommandSourceStack.m_288197_:(Ljava/util/function/Supplier;Z)V
+ 37: iconst_1
+ 38: ireturn
+
+ private static int createPresetAs(net.minecraft.commands.CommandSourceStack, java.lang.String, java.lang.String);
+ Code:
+ 0: aload_2
+ 1: aload_1
+ 2: invokestatic #887 // Method com/ogaba/sa_decor/common/loot/DecorLootConfigManager.createConfigFromPreset:(Ljava/lang/String;Ljava/lang/String;)Z
+ 5: istore_3
+ 6: iload_3
+ 7: ifne 29
+ 10: aload_0
+ 11: aload_2
+ 12: aload_1
+ 13: invokestatic #893 // Method com/ogaba/sa_decor/common/loot/DecorLootDefaultProfiles.availablePresetIdsText:()Ljava/lang/String;
+ 16: invokedynamic #898, 0 // InvokeDynamic #79:makeConcatWithConstants:(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+ 21: invokestatic #796 // InterfaceMethod net/minecraft/network/chat/Component.m_237113_:(Ljava/lang/String;)Lnet/minecraft/network/chat/MutableComponent;
+ 24: invokevirtual #800 // Method net/minecraft/commands/CommandSourceStack.m_81352_:(Lnet/minecraft/network/chat/Component;)V
+ 27: iconst_0
+ 28: ireturn
+ 29: aload_0
+ 30: aload_2
+ 31: aload_1
+ 32: invokedynamic #906, 0 // InvokeDynamic #80:get:(Ljava/lang/String;Ljava/lang/String;)Ljava/util/function/Supplier;
+ 37: iconst_1
+ 38: invokevirtual #820 // Method net/minecraft/commands/CommandSourceStack.m_288197_:(Ljava/util/function/Supplier;Z)V
+ 41: iconst_1
+ 42: ireturn
+
+ private static int undoWand(net.minecraft.commands.CommandSourceStack) throws com.mojang.brigadier.exceptions.CommandSyntaxException;
+ Code:
+ 0: aload_0
+ 1: invokevirtual #79 // Method net/minecraft/commands/CommandSourceStack.m_81375_:()Lnet/minecraft/server/level/ServerPlayer;
+ 4: astore_1
+ 5: aload_1
+ 6: invokestatic #915 // Method com/ogaba/sa_decor/common/item/LootCrateWandItem.undoLast:(Lnet/minecraft/server/level/ServerPlayer;)Z
+ 9: istore_2
+ 10: aload_0
+ 11: iload_2
+ 12: invokedynamic #923, 0 // InvokeDynamic #81:get:(Z)Ljava/util/function/Supplier;
+ 17: iconst_0
+ 18: invokevirtual #820 // Method net/minecraft/commands/CommandSourceStack.m_288197_:(Ljava/util/function/Supplier;Z)V
+ 21: iload_2
+ 22: ifeq 29
+ 25: iconst_1
+ 26: goto 30
+ 29: iconst_0
+ 30: ireturn
+
+ private static int reload(net.minecraft.commands.CommandSourceStack);
+ Code:
+ 0: invokestatic #925 // Method com/ogaba/sa_decor/common/loot/DecorLootConfigManager.reload:()V
+ 3: invokestatic #928 // Method com/ogaba/sa_decor/common/loot/DecorLooseLootConfigManager.reload:()V
+ 6: invokestatic #931 // Method com/ogaba/sa_decor/common/loot/DecorForceOpenConfigManager.reload:()V
+ 9: invokestatic #935 // Method com/ogaba/sa_decor/common/loot/DecorLootConfigManager.values:()Ljava/util/Collection;
+ 12: invokeinterface #940, 1 // InterfaceMethod java/util/Collection.size:()I
+ 17: istore_1
+ 18: invokestatic #941 // Method com/ogaba/sa_decor/common/loot/DecorLooseLootConfigManager.values:()Ljava/util/Collection;
+ 21: invokeinterface #940, 1 // InterfaceMethod java/util/Collection.size:()I
+ 26: istore_2
+ 27: invokestatic #945 // Method com/ogaba/sa_decor/common/loot/DecorForceOpenConfigManager.entries:()Ljava/util/List;
+ 30: invokeinterface #948, 1 // InterfaceMethod java/util/List.size:()I
+ 35: istore_3
+ 36: aload_0
+ 37: iload_1
+ 38: iload_2
+ 39: iload_3
+ 40: invokedynamic #956, 0 // InvokeDynamic #82:get:(III)Ljava/util/function/Supplier;
+ 45: iconst_1
+ 46: invokevirtual #820 // Method net/minecraft/commands/CommandSourceStack.m_288197_:(Ljava/util/function/Supplier;Z)V
+ 49: iload_1
+ 50: iload_2
+ 51: iadd
+ 52: iload_3
+ 53: iadd
+ 54: ireturn
+
+ private static int restoreDefaultProfiles(net.minecraft.commands.CommandSourceStack);
+ Code:
+ 0: invokestatic #962 // Method com/ogaba/sa_decor/common/loot/DecorLootConfigManager.restoreDefaultProfiles:()I
+ 3: istore_1
+ 4: iload_1
+ 5: ifge 20
+ 8: aload_0
+ 9: ldc_w #964 // String Could not restore the default loot crate profiles. Check the server log.
+ 12: invokestatic #796 // InterfaceMethod net/minecraft/network/chat/Component.m_237113_:(Ljava/lang/String;)Lnet/minecraft/network/chat/MutableComponent;
+ 15: invokevirtual #800 // Method net/minecraft/commands/CommandSourceStack.m_81352_:(Lnet/minecraft/network/chat/Component;)V
+ 18: iconst_0
+ 19: ireturn
+ 20: iload_1
+ 21: ifne 36
+ 24: aload_0
+ 25: invokedynamic #971, 0 // InvokeDynamic #83:get:()Ljava/util/function/Supplier;
+ 30: iconst_0
+ 31: invokevirtual #820 // Method net/minecraft/commands/CommandSourceStack.m_288197_:(Ljava/util/function/Supplier;Z)V
+ 34: iconst_1
+ 35: ireturn
+ 36: aload_0
+ 37: iload_1
+ 38: invokedynamic #979, 0 // InvokeDynamic #84:get:(I)Ljava/util/function/Supplier;
+ 43: iconst_1
+ 44: invokevirtual #820 // Method net/minecraft/commands/CommandSourceStack.m_288197_:(Ljava/util/function/Supplier;Z)V
+ 47: iload_1
+ 48: ireturn
+
+ private static int list(net.minecraft.commands.CommandSourceStack);
+ Code:
+ 0: invokestatic #935 // Method com/ogaba/sa_decor/common/loot/DecorLootConfigManager.values:()Ljava/util/Collection;
+ 3: invokeinterface #984, 1 // InterfaceMethod java/util/Collection.isEmpty:()Z
+ 8: ifeq 23
+ 11: aload_0
+ 12: invokedynamic #989, 0 // InvokeDynamic #85:get:()Ljava/util/function/Supplier;
+ 17: iconst_0
+ 18: invokevirtual #820 // Method net/minecraft/commands/CommandSourceStack.m_288197_:(Ljava/util/function/Supplier;Z)V
+ 21: iconst_0
+ 22: ireturn
+ 23: invokestatic #935 // Method com/ogaba/sa_decor/common/loot/DecorLootConfigManager.values:()Ljava/util/Collection;
+ 26: invokeinterface #993, 1 // InterfaceMethod java/util/Collection.stream:()Ljava/util/stream/Stream;
+ 31: invokedynamic #1007, 0 // InvokeDynamic #86:apply:()Ljava/util/function/Function;
+ 36: invokeinterface #1013, 2 // InterfaceMethod java/util/stream/Stream.map:(Ljava/util/function/Function;)Ljava/util/stream/Stream;
+ 41: ldc_w #1015 // String ,
+ 44: invokestatic #1021 // Method java/util/stream/Collectors.joining:(Ljava/lang/CharSequence;)Ljava/util/stream/Collector;
+ 47: invokeinterface #1025, 2 // InterfaceMethod java/util/stream/Stream.collect:(Ljava/util/stream/Collector;)Ljava/lang/Object;
+ 52: checkcast #1027 // class java/lang/String
+ 55: astore_1
+ 56: aload_0
+ 57: aload_1
+ 58: invokedynamic #1032, 0 // InvokeDynamic #87:get:(Ljava/lang/String;)Ljava/util/function/Supplier;
+ 63: iconst_0
+ 64: invokevirtual #820 // Method net/minecraft/commands/CommandSourceStack.m_288197_:(Ljava/util/function/Supplier;Z)V
+ 67: invokestatic #935 // Method com/ogaba/sa_decor/common/loot/DecorLootConfigManager.values:()Ljava/util/Collection;
+ 70: invokeinterface #940, 1 // InterfaceMethod java/util/Collection.size:()I
+ 75: ireturn
+
+ private static int folder(net.minecraft.commands.CommandSourceStack);
+ Code:
+ 0: invokestatic #1037 // Method com/ogaba/sa_decor/common/loot/DecorLootConfigManager.getLootCrateConfigDirectory:()Ljava/nio/file/Path;
+ 3: astore_1
+ 4: aload_0
+ 5: aload_1
+ 6: invokedynamic #1045, 0 // InvokeDynamic #88:get:(Ljava/nio/file/Path;)Ljava/util/function/Supplier;
+ 11: iconst_0
+ 12: invokevirtual #820 // Method net/minecraft/commands/CommandSourceStack.m_288197_:(Ljava/util/function/Supplier;Z)V
+ 15: iconst_1
+ 16: ireturn
+
+ private static int help(net.minecraft.commands.CommandSourceStack);
+ Code:
+ 0: aload_0
+ 1: invokedynamic #1052, 0 // InvokeDynamic #89:get:()Ljava/util/function/Supplier;
+ 6: iconst_0
+ 7: invokevirtual #820 // Method net/minecraft/commands/CommandSourceStack.m_288197_:(Ljava/util/function/Supplier;Z)V
+ 10: aload_0
+ 11: invokedynamic #1057, 0 // InvokeDynamic #90:get:()Ljava/util/function/Supplier;
+ 16: iconst_0
+ 17: invokevirtual #820 // Method net/minecraft/commands/CommandSourceStack.m_288197_:(Ljava/util/function/Supplier;Z)V
+ 20: aload_0
+ 21: invokedynamic #1062, 0 // InvokeDynamic #91:get:()Ljava/util/function/Supplier;
+ 26: iconst_0
+ 27: invokevirtual #820 // Method net/minecraft/commands/CommandSourceStack.m_288197_:(Ljava/util/function/Supplier;Z)V
+ 30: aload_0
+ 31: invokedynamic #1067, 0 // InvokeDynamic #92:get:()Ljava/util/function/Supplier;
+ 36: iconst_0
+ 37: invokevirtual #820 // Method net/minecraft/commands/CommandSourceStack.m_288197_:(Ljava/util/function/Supplier;Z)V
+ 40: aload_0
+ 41: invokedynamic #1072, 0 // InvokeDynamic #93:get:()Ljava/util/function/Supplier;
+ 46: iconst_0
+ 47: invokevirtual #820 // Method net/minecraft/commands/CommandSourceStack.m_288197_:(Ljava/util/function/Supplier;Z)V
+ 50: aload_0
+ 51: invokedynamic #1077, 0 // InvokeDynamic #94:get:()Ljava/util/function/Supplier;
+ 56: iconst_0
+ 57: invokevirtual #820 // Method net/minecraft/commands/CommandSourceStack.m_288197_:(Ljava/util/function/Supplier;Z)V
+ 60: aload_0
+ 61: invokedynamic #1082, 0 // InvokeDynamic #95:get:()Ljava/util/function/Supplier;
+ 66: iconst_0
+ 67: invokevirtual #820 // Method net/minecraft/commands/CommandSourceStack.m_288197_:(Ljava/util/function/Supplier;Z)V
+ 70: aload_0
+ 71: invokedynamic #1087, 0 // InvokeDynamic #96:get:()Ljava/util/function/Supplier;
+ 76: iconst_0
+ 77: invokevirtual #820 // Method net/minecraft/commands/CommandSourceStack.m_288197_:(Ljava/util/function/Supplier;Z)V
+ 80: aload_0
+ 81: invokedynamic #1092, 0 // InvokeDynamic #97:get:()Ljava/util/function/Supplier;
+ 86: iconst_0
+ 87: invokevirtual #820 // Method net/minecraft/commands/CommandSourceStack.m_288197_:(Ljava/util/function/Supplier;Z)V
+ 90: aload_0
+ 91: invokedynamic #1097, 0 // InvokeDynamic #98:get:()Ljava/util/function/Supplier;
+ 96: iconst_0
+ 97: invokevirtual #820 // Method net/minecraft/commands/CommandSourceStack.m_288197_:(Ljava/util/function/Supplier;Z)V
+ 100: iconst_1
+ 101: ireturn
+
+ private static int presets(net.minecraft.commands.CommandSourceStack);
+ Code:
+ 0: aload_0
+ 1: invokedynamic #1103, 0 // InvokeDynamic #99:get:()Ljava/util/function/Supplier;
+ 6: iconst_0
+ 7: invokevirtual #820 // Method net/minecraft/commands/CommandSourceStack.m_288197_:(Ljava/util/function/Supplier;Z)V
+ 10: aload_0
+ 11: invokedynamic #1108, 0 // InvokeDynamic #100:get:()Ljava/util/function/Supplier;
+ 16: iconst_0
+ 17: invokevirtual #820 // Method net/minecraft/commands/CommandSourceStack.m_288197_:(Ljava/util/function/Supplier;Z)V
+ 20: invokestatic #893 // Method com/ogaba/sa_decor/common/loot/DecorLootDefaultProfiles.availablePresetIdsText:()Ljava/lang/String;
+ 23: invokevirtual #1111 // Method java/lang/String.isBlank:()Z
+ 26: ifeq 33
+ 29: iconst_0
+ 30: goto 34
+ 33: iconst_1
+ 34: ireturn
+
+ private static int advancedHelp(net.minecraft.commands.CommandSourceStack);
+ Code:
+ 0: aload_0
+ 1: invokedynamic #1117, 0 // InvokeDynamic #101:get:()Ljava/util/function/Supplier;
+ 6: iconst_0
+ 7: invokevirtual #820 // Method net/minecraft/commands/CommandSourceStack.m_288197_:(Ljava/util/function/Supplier;Z)V
+ 10: aload_0
+ 11: invokedynamic #1122, 0 // InvokeDynamic #102:get:()Ljava/util/function/Supplier;
+ 16: iconst_0
+ 17: invokevirtual #820 // Method net/minecraft/commands/CommandSourceStack.m_288197_:(Ljava/util/function/Supplier;Z)V
+ 20: aload_0
+ 21: invokedynamic #1127, 0 // InvokeDynamic #103:get:()Ljava/util/function/Supplier;
+ 26: iconst_0
+ 27: invokevirtual #820 // Method net/minecraft/commands/CommandSourceStack.m_288197_:(Ljava/util/function/Supplier;Z)V
+ 30: aload_0
+ 31: invokedynamic #1132, 0 // InvokeDynamic #104:get:()Ljava/util/function/Supplier;
+ 36: iconst_0
+ 37: invokevirtual #820 // Method net/minecraft/commands/CommandSourceStack.m_288197_:(Ljava/util/function/Supplier;Z)V
+ 40: aload_0
+ 41: invokedynamic #1137, 0 // InvokeDynamic #105:get:()Ljava/util/function/Supplier;
+ 46: iconst_0
+ 47: invokevirtual #820 // Method net/minecraft/commands/CommandSourceStack.m_288197_:(Ljava/util/function/Supplier;Z)V
+ 50: aload_0
+ 51: invokedynamic #1142, 0 // InvokeDynamic #106:get:()Ljava/util/function/Supplier;
+ 56: iconst_0
+ 57: invokevirtual #820 // Method net/minecraft/commands/CommandSourceStack.m_288197_:(Ljava/util/function/Supplier;Z)V
+ 60: aload_0
+ 61: invokedynamic #1147, 0 // InvokeDynamic #107:get:()Ljava/util/function/Supplier;
+ 66: iconst_0
+ 67: invokevirtual #820 // Method net/minecraft/commands/CommandSourceStack.m_288197_:(Ljava/util/function/Supplier;Z)V
+ 70: iconst_1
+ 71: ireturn
+
+ private static int formatConfigs(net.minecraft.commands.CommandSourceStack);
+ Code:
+ 0: invokestatic #1151 // Method com/ogaba/sa_decor/common/loot/DecorLootConfigManager.formatAllConfigs:()I
+ 3: istore_1
+ 4: aload_0
+ 5: iload_1
+ 6: invokedynamic #1156, 0 // InvokeDynamic #108:get:(I)Ljava/util/function/Supplier;
+ 11: iconst_0
+ 12: invokevirtual #820 // Method net/minecraft/commands/CommandSourceStack.m_288197_:(Ljava/util/function/Supplier;Z)V
+ 15: iload_1
+ 16: ireturn
+
+ private static int forceOpenFolder(net.minecraft.commands.CommandSourceStack);
+ Code:
+ 0: invokestatic #1161 // Method com/ogaba/sa_decor/common/loot/DecorForceOpenConfigManager.getConfigFilePath:()Ljava/nio/file/Path;
+ 3: astore_1
+ 4: aload_0
+ 5: aload_1
+ 6: invokedynamic #1166, 0 // InvokeDynamic #109:get:(Ljava/nio/file/Path;)Ljava/util/function/Supplier;
+ 11: iconst_0
+ 12: invokevirtual #820 // Method net/minecraft/commands/CommandSourceStack.m_288197_:(Ljava/util/function/Supplier;Z)V
+ 15: iconst_1
+ 16: ireturn
+
+ private static int forceOpenReload(net.minecraft.commands.CommandSourceStack);
+ Code:
+ 0: invokestatic #931 // Method com/ogaba/sa_decor/common/loot/DecorForceOpenConfigManager.reload:()V
+ 3: aload_0
+ 4: invokedynamic #1173, 0 // InvokeDynamic #110:get:()Ljava/util/function/Supplier;
+ 9: iconst_1
+ 10: invokevirtual #820 // Method net/minecraft/commands/CommandSourceStack.m_288197_:(Ljava/util/function/Supplier;Z)V
+ 13: invokestatic #945 // Method com/ogaba/sa_decor/common/loot/DecorForceOpenConfigManager.entries:()Ljava/util/List;
+ 16: invokeinterface #948, 1 // InterfaceMethod java/util/List.size:()I
+ 21: ireturn
+
+ private static int forceOpenList(net.minecraft.commands.CommandSourceStack);
+ Code:
+ 0: invokestatic #945 // Method com/ogaba/sa_decor/common/loot/DecorForceOpenConfigManager.entries:()Ljava/util/List;
+ 3: invokeinterface #1175, 1 // InterfaceMethod java/util/List.isEmpty:()Z
+ 8: ifeq 23
+ 11: aload_0
+ 12: invokedynamic #1180, 0 // InvokeDynamic #111:get:()Ljava/util/function/Supplier;
+ 17: iconst_0
+ 18: invokevirtual #820 // Method net/minecraft/commands/CommandSourceStack.m_288197_:(Ljava/util/function/Supplier;Z)V
+ 21: iconst_0
+ 22: ireturn
+ 23: invokestatic #945 // Method com/ogaba/sa_decor/common/loot/DecorForceOpenConfigManager.entries:()Ljava/util/List;
+ 26: invokeinterface #1181, 1 // InterfaceMethod java/util/List.stream:()Ljava/util/stream/Stream;
+ 31: invokedynamic #1188, 0 // InvokeDynamic #112:apply:()Ljava/util/function/Function;
+ 36: invokeinterface #1013, 2 // InterfaceMethod java/util/stream/Stream.map:(Ljava/util/function/Function;)Ljava/util/stream/Stream;
+ 41: ldc_w #1015 // String ,
+ 44: invokestatic #1021 // Method java/util/stream/Collectors.joining:(Ljava/lang/CharSequence;)Ljava/util/stream/Collector;
+ 47: invokeinterface #1025, 2 // InterfaceMethod java/util/stream/Stream.collect:(Ljava/util/stream/Collector;)Ljava/lang/Object;
+ 52: checkcast #1027 // class java/lang/String
+ 55: astore_1
+ 56: aload_0
+ 57: aload_1
+ 58: invokedynamic #1193, 0 // InvokeDynamic #113:get:(Ljava/lang/String;)Ljava/util/function/Supplier;
+ 63: iconst_0
+ 64: invokevirtual #820 // Method net/minecraft/commands/CommandSourceStack.m_288197_:(Ljava/util/function/Supplier;Z)V
+ 67: invokestatic #945 // Method com/ogaba/sa_decor/common/loot/DecorForceOpenConfigManager.entries:()Ljava/util/List;
+ 70: invokeinterface #948, 1 // InterfaceMethod java/util/List.size:()I
+ 75: ireturn
+
+ private static com.ogaba.sa_decor.common.loot.DecorForceOpenRule forceOpenRuleByDifficulty(java.lang.String);
+ Code:
+ 0: aload_0
+ 1: invokevirtual #1198 // Method java/lang/String.toLowerCase:()Ljava/lang/String;
+ 4: astore_1
+ 5: iconst_m1
+ 6: istore_2
+ 7: aload_1
+ 8: invokevirtual #1201 // Method java/lang/String.hashCode:()I
+ 11: lookupswitch { // 4
+
+ -1380428966: 97
+
+ -1039745817: 67
+
+ 3105794: 52
+
+ 3195115: 82
+ default: 109
+ }
+ 52: aload_1
+ 53: ldc_w #1203 // String easy
+ 56: invokevirtual #1206 // Method java/lang/String.equals:(Ljava/lang/Object;)Z
+ 59: ifeq 109
+ 62: iconst_0
+ 63: istore_2
+ 64: goto 109
+ 67: aload_1
+ 68: ldc_w #1208 // String normal
+ 71: invokevirtual #1206 // Method java/lang/String.equals:(Ljava/lang/Object;)Z
+ 74: ifeq 109
+ 77: iconst_1
+ 78: istore_2
+ 79: goto 109
+ 82: aload_1
+ 83: ldc_w #1210 // String hard
+ 86: invokevirtual #1206 // Method java/lang/String.equals:(Ljava/lang/Object;)Z
+ 89: ifeq 109
+ 92: iconst_2
+ 93: istore_2
+ 94: goto 109
+ 97: aload_1
+ 98: ldc_w #1212 // String brutal
+ 101: invokevirtual #1206 // Method java/lang/String.equals:(Ljava/lang/Object;)Z
+ 104: ifeq 109
+ 107: iconst_3
+ 108: istore_2
+ 109: iload_2
+ 110: tableswitch { // 0 to 3
+
+ 0: 140
+
+ 1: 165
+
+ 2: 171
+
+ 3: 196
+ default: 223
+ }
+ 140: new #1214 // class com/ogaba/sa_decor/common/loot/DecorForceOpenRule
+ 143: dup
+ 144: sipush 150
+ 147: iconst_3
+ 148: bipush 28
+ 150: iconst_1
+ 151: bipush 18
+ 153: ldc2_w #1215 // double 0.03d
+ 156: dconst_1
+ 157: iconst_0
+ 158: iconst_0
+ 159: invokespecial #1219 // Method com/ogaba/sa_decor/common/loot/DecorForceOpenRule."":(IIIIIDDZZ)V
+ 162: goto 226
+ 165: invokestatic #1223 // Method com/ogaba/sa_decor/common/loot/DecorForceOpenRule.defaults:()Lcom/ogaba/sa_decor/common/loot/DecorForceOpenRule;
+ 168: goto 226
+ 171: new #1214 // class com/ogaba/sa_decor/common/loot/DecorForceOpenRule
+ 174: dup
+ 175: sipush 280
+ 178: iconst_2
+ 179: bipush 52
+ 181: iconst_4
+ 182: bipush 42
+ 184: ldc2_w #1224 // double 0.12d
+ 187: dconst_1
+ 188: iconst_0
+ 189: iconst_0
+ 190: invokespecial #1219 // Method com/ogaba/sa_decor/common/loot/DecorForceOpenRule."":(IIIIIDDZZ)V
+ 193: goto 226
+ 196: new #1214 // class com/ogaba/sa_decor/common/loot/DecorForceOpenRule
+ 199: dup
+ 200: sipush 360
+ 203: iconst_2
+ 204: bipush 62
+ 206: iconst_5
+ 207: bipush 58
+ 209: ldc2_w #1226 // double 0.2d
+ 212: ldc2_w #1228 // double 0.95d
+ 215: iconst_0
+ 216: iconst_0
+ 217: invokespecial #1219 // Method com/ogaba/sa_decor/common/loot/DecorForceOpenRule."":(IIIIIDDZZ)V
+ 220: goto 226
+ 223: invokestatic #1223 // Method com/ogaba/sa_decor/common/loot/DecorForceOpenRule.defaults:()Lcom/ogaba/sa_decor/common/loot/DecorForceOpenRule;
+ 226: areturn
+
+ private static int addForceOpenRule(net.minecraft.commands.CommandSourceStack, java.lang.String, net.minecraft.resources.ResourceLocation, com.ogaba.sa_decor.common.loot.DecorForceOpenRule);
+ Code:
+ 0: aload_1
+ 1: aload_2
+ 2: aload_3
+ 3: invokestatic #1235 // Method com/ogaba/sa_decor/common/loot/DecorForceOpenConfigManager.addRuleToConfig:(Ljava/lang/String;Lnet/minecraft/resources/ResourceLocation;Lcom/ogaba/sa_decor/common/loot/DecorForceOpenRule;)Z
+ 6: istore 4
+ 8: iload 4
+ 10: ifne 32
+ 13: aload_0
+ 14: aload_1
+ 15: aload_2
+ 16: invokestatic #1239 // Method java/lang/String.valueOf:(Ljava/lang/Object;)Ljava/lang/String;
+ 19: invokedynamic #1242, 0 // InvokeDynamic #114:makeConcatWithConstants:(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+ 24: invokestatic #796 // InterfaceMethod net/minecraft/network/chat/Component.m_237113_:(Ljava/lang/String;)Lnet/minecraft/network/chat/MutableComponent;
+ 27: invokevirtual #800 // Method net/minecraft/commands/CommandSourceStack.m_81352_:(Lnet/minecraft/network/chat/Component;)V
+ 30: iconst_0
+ 31: ireturn
+ 32: aload_0
+ 33: aload_1
+ 34: aload_2
+ 35: invokedynamic #1250, 0 // InvokeDynamic #115:get:(Ljava/lang/String;Lnet/minecraft/resources/ResourceLocation;)Ljava/util/function/Supplier;
+ 40: iconst_1
+ 41: invokevirtual #820 // Method net/minecraft/commands/CommandSourceStack.m_288197_:(Ljava/util/function/Supplier;Z)V
+ 44: iconst_1
+ 45: ireturn
+
+ private static java.lang.String formatForceOpenEntry(com.ogaba.sa_decor.common.loot.DecorForceOpenEntry);
+ Code:
+ 0: aload_0
+ 1: invokevirtual #1259 // Method com/ogaba/sa_decor/common/loot/DecorForceOpenEntry.type:()Ljava/lang/String;
+ 4: aload_0
+ 5: invokevirtual #1262 // Method com/ogaba/sa_decor/common/loot/DecorForceOpenEntry.id:()Lnet/minecraft/resources/ResourceLocation;
+ 8: invokestatic #1239 // Method java/lang/String.valueOf:(Ljava/lang/Object;)Ljava/lang/String;
+ 11: aload_0
+ 12: invokevirtual #1265 // Method com/ogaba/sa_decor/common/loot/DecorForceOpenEntry.targetProgress:()I
+ 15: aload_0
+ 16: invokevirtual #1269 // Method com/ogaba/sa_decor/common/loot/DecorForceOpenEntry.successChance:()D
+ 19: invokedynamic #1274, 0 // InvokeDynamic #116:makeConcatWithConstants:(Ljava/lang/String;Ljava/lang/String;ID)Ljava/lang/String;
+ 24: areturn
+
+ private static int preset(net.minecraft.commands.CommandSourceStack, java.lang.String);
+ Code:
+ 0: aload_1
+ 1: invokestatic #1279 // Method com/ogaba/sa_decor/common/loot/DecorLootConfigManager.createPreset:(Ljava/lang/String;)Z
+ 4: istore_2
+ 5: iload_2
+ 6: ifne 27
+ 9: aload_0
+ 10: aload_1
+ 11: invokestatic #893 // Method com/ogaba/sa_decor/common/loot/DecorLootDefaultProfiles.availablePresetIdsText:()Ljava/lang/String;
+ 14: invokedynamic #1282, 0 // InvokeDynamic #117:makeConcatWithConstants:(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+ 19: invokestatic #796 // InterfaceMethod net/minecraft/network/chat/Component.m_237113_:(Ljava/lang/String;)Lnet/minecraft/network/chat/MutableComponent;
+ 22: invokevirtual #800 // Method net/minecraft/commands/CommandSourceStack.m_81352_:(Lnet/minecraft/network/chat/Component;)V
+ 25: iconst_0
+ 26: ireturn
+ 27: aload_0
+ 28: aload_1
+ 29: invokedynamic #1287, 0 // InvokeDynamic #118:get:(Ljava/lang/String;)Ljava/util/function/Supplier;
+ 34: iconst_1
+ 35: invokevirtual #820 // Method net/minecraft/commands/CommandSourceStack.m_288197_:(Ljava/util/function/Supplier;Z)V
+ 38: iconst_1
+ 39: ireturn
+
+ private static int copyConfig(net.minecraft.commands.CommandSourceStack, java.lang.String, java.lang.String);
+ Code:
+ 0: aload_1
+ 1: aload_2
+ 2: invokestatic #1291 // Method com/ogaba/sa_decor/common/loot/DecorLootConfigManager.copyConfig:(Ljava/lang/String;Ljava/lang/String;)Z
+ 5: istore_3
+ 6: iload_3
+ 7: ifne 26
+ 10: aload_0
+ 11: aload_1
+ 12: aload_2
+ 13: invokedynamic #1294, 0 // InvokeDynamic #119:makeConcatWithConstants:(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+ 18: invokestatic #796 // InterfaceMethod net/minecraft/network/chat/Component.m_237113_:(Ljava/lang/String;)Lnet/minecraft/network/chat/MutableComponent;
+ 21: invokevirtual #800 // Method net/minecraft/commands/CommandSourceStack.m_81352_:(Lnet/minecraft/network/chat/Component;)V
+ 24: iconst_0
+ 25: ireturn
+ 26: aload_0
+ 27: aload_1
+ 28: aload_2
+ 29: invokedynamic #1299, 0 // InvokeDynamic #120:get:(Ljava/lang/String;Ljava/lang/String;)Ljava/util/function/Supplier;
+ 34: iconst_1
+ 35: invokevirtual #820 // Method net/minecraft/commands/CommandSourceStack.m_288197_:(Ljava/util/function/Supplier;Z)V
+ 38: iconst_1
+ 39: ireturn
+
+ private static int createConfig(net.minecraft.commands.CommandSourceStack, java.lang.String, boolean, boolean, boolean);
+ Code:
+ 0: aload_1
+ 1: invokestatic #1307 // Method com/ogaba/sa_decor/common/loot/DecorLootConfigManager.isValidConfigId:(Ljava/lang/String;)Z
+ 4: ifne 19
+ 7: aload_0
+ 8: ldc_w #1309 // String Invalid config id. Use only lowercase letters, numbers, _ or -.
+ 11: invokestatic #796 // InterfaceMethod net/minecraft/network/chat/Component.m_237113_:(Ljava/lang/String;)Lnet/minecraft/network/chat/MutableComponent;
+ 14: invokevirtual #800 // Method net/minecraft/commands/CommandSourceStack.m_81352_:(Lnet/minecraft/network/chat/Component;)V
+ 17: iconst_0
+ 18: ireturn
+ 19: aload_1
+ 20: invokestatic #778 // Method com/ogaba/sa_decor/common/loot/DecorLootConfigManager.has:(Ljava/lang/String;)Z
+ 23: ifeq 41
+ 26: aload_0
+ 27: aload_1
+ 28: invokedynamic #1312, 0 // InvokeDynamic #121:makeConcatWithConstants:(Ljava/lang/String;)Ljava/lang/String;
+ 33: invokestatic #796 // InterfaceMethod net/minecraft/network/chat/Component.m_237113_:(Ljava/lang/String;)Lnet/minecraft/network/chat/MutableComponent;
+ 36: invokevirtual #800 // Method net/minecraft/commands/CommandSourceStack.m_81352_:(Lnet/minecraft/network/chat/Component;)V
+ 39: iconst_0
+ 40: ireturn
+ 41: aload_1
+ 42: iload_2
+ 43: iload_3
+ 44: iload 4
+ 46: invokestatic #1315 // Method com/ogaba/sa_decor/common/loot/DecorLootConfigManager.createConfig:(Ljava/lang/String;ZZZ)Z
+ 49: istore 5
+ 51: iload 5
+ 53: ifne 71
+ 56: aload_0
+ 57: aload_1
+ 58: invokedynamic #1318, 0 // InvokeDynamic #122:makeConcatWithConstants:(Ljava/lang/String;)Ljava/lang/String;
+ 63: invokestatic #796 // InterfaceMethod net/minecraft/network/chat/Component.m_237113_:(Ljava/lang/String;)Lnet/minecraft/network/chat/MutableComponent;
+ 66: invokevirtual #800 // Method net/minecraft/commands/CommandSourceStack.m_81352_:(Lnet/minecraft/network/chat/Component;)V
+ 69: iconst_0
+ 70: ireturn
+ 71: aload_0
+ 72: aload_1
+ 73: iload_2
+ 74: iload_3
+ 75: iload 4
+ 77: invokedynamic #1326, 0 // InvokeDynamic #123:get:(Ljava/lang/String;ZZZ)Ljava/util/function/Supplier;
+ 82: iconst_1
+ 83: invokevirtual #820 // Method net/minecraft/commands/CommandSourceStack.m_288197_:(Ljava/util/function/Supplier;Z)V
+ 86: iconst_1
+ 87: ireturn
+
+ private static int setConfigPerPlayer(net.minecraft.commands.CommandSourceStack, java.lang.String, boolean);
+ Code:
+ 0: aload_0
+ 1: aload_1
+ 2: ldc_w #602 // String per_player
+ 5: iload_2
+ 6: aload_1
+ 7: iload_2
+ 8: invokedynamic #1342, 0 // InvokeDynamic #124:getAsBoolean:(Ljava/lang/String;Z)Ljava/util/function/BooleanSupplier;
+ 13: invokestatic #1346 // Method updateConfigFlag:(Lnet/minecraft/commands/CommandSourceStack;Ljava/lang/String;Ljava/lang/String;ZLjava/util/function/BooleanSupplier;)I
+ 16: ireturn
+
+ private static int setConfigSearch(net.minecraft.commands.CommandSourceStack, java.lang.String, boolean);
+ Code:
+ 0: aload_0
+ 1: aload_1
+ 2: ldc_w #1349 // String search.enabled
+ 5: iload_2
+ 6: aload_1
+ 7: iload_2
+ 8: invokedynamic #1354, 0 // InvokeDynamic #125:getAsBoolean:(Ljava/lang/String;Z)Ljava/util/function/BooleanSupplier;
+ 13: invokestatic #1346 // Method updateConfigFlag:(Lnet/minecraft/commands/CommandSourceStack;Ljava/lang/String;Ljava/lang/String;ZLjava/util/function/BooleanSupplier;)I
+ 16: ireturn
+
+ private static int setConfigLock(net.minecraft.commands.CommandSourceStack, java.lang.String, boolean);
+ Code:
+ 0: aload_0
+ 1: aload_1
+ 2: ldc_w #1357 // String lock.enabled
+ 5: iload_2
+ 6: aload_1
+ 7: iload_2
+ 8: invokedynamic #1362, 0 // InvokeDynamic #126:getAsBoolean:(Ljava/lang/String;Z)Ljava/util/function/BooleanSupplier;
+ 13: invokestatic #1346 // Method updateConfigFlag:(Lnet/minecraft/commands/CommandSourceStack;Ljava/lang/String;Ljava/lang/String;ZLjava/util/function/BooleanSupplier;)I
+ 16: ireturn
+
+ private static int setConfigEmpty(net.minecraft.commands.CommandSourceStack, java.lang.String, boolean, float);
+ Code:
+ 0: aload_1
+ 1: invokestatic #778 // Method com/ogaba/sa_decor/common/loot/DecorLootConfigManager.has:(Ljava/lang/String;)Z
+ 4: ifne 22
+ 7: aload_0
+ 8: aload_1
+ 9: invokedynamic #1367, 0 // InvokeDynamic #127:makeConcatWithConstants:(Ljava/lang/String;)Ljava/lang/String;
+ 14: invokestatic #796 // InterfaceMethod net/minecraft/network/chat/Component.m_237113_:(Ljava/lang/String;)Lnet/minecraft/network/chat/MutableComponent;
+ 17: invokevirtual #800 // Method net/minecraft/commands/CommandSourceStack.m_81352_:(Lnet/minecraft/network/chat/Component;)V
+ 20: iconst_0
+ 21: ireturn
+ 22: aload_1
+ 23: iload_2
+ 24: fload_3
+ 25: invokestatic #1371 // Method com/ogaba/sa_decor/common/loot/DecorLootConfigManager.setEmpty:(Ljava/lang/String;ZF)Z
+ 28: istore 4
+ 30: iload 4
+ 32: ifne 50
+ 35: aload_0
+ 36: aload_1
+ 37: invokedynamic #1374, 0 // InvokeDynamic #128:makeConcatWithConstants:(Ljava/lang/String;)Ljava/lang/String;
+ 42: invokestatic #796 // InterfaceMethod net/minecraft/network/chat/Component.m_237113_:(Ljava/lang/String;)Lnet/minecraft/network/chat/MutableComponent;
+ 45: invokevirtual #800 // Method net/minecraft/commands/CommandSourceStack.m_81352_:(Lnet/minecraft/network/chat/Component;)V
+ 48: iconst_0
+ 49: ireturn
+ 50: aload_0
+ 51: aload_1
+ 52: iload_2
+ 53: fload_3
+ 54: invokedynamic #1382, 0 // InvokeDynamic #129:get:(Ljava/lang/String;ZF)Ljava/util/function/Supplier;
+ 59: iconst_1
+ 60: invokevirtual #820 // Method net/minecraft/commands/CommandSourceStack.m_288197_:(Ljava/util/function/Supplier;Z)V
+ 63: iconst_1
+ 64: ireturn
+
+ private static int setConfigRespawn(net.minecraft.commands.CommandSourceStack, java.lang.String, boolean, int, boolean, boolean);
+ Code:
+ 0: aload_1
+ 1: invokestatic #778 // Method com/ogaba/sa_decor/common/loot/DecorLootConfigManager.has:(Ljava/lang/String;)Z
+ 4: ifne 22
+ 7: aload_0
+ 8: aload_1
+ 9: invokedynamic #1367, 0 // InvokeDynamic #127:makeConcatWithConstants:(Ljava/lang/String;)Ljava/lang/String;
+ 14: invokestatic #796 // InterfaceMethod net/minecraft/network/chat/Component.m_237113_:(Ljava/lang/String;)Lnet/minecraft/network/chat/MutableComponent;
+ 17: invokevirtual #800 // Method net/minecraft/commands/CommandSourceStack.m_81352_:(Lnet/minecraft/network/chat/Component;)V
+ 20: iconst_0
+ 21: ireturn
+ 22: aload_1
+ 23: iload_2
+ 24: iload_3
+ 25: iload 4
+ 27: iload 5
+ 29: invokestatic #1390 // Method com/ogaba/sa_decor/common/loot/DecorLootConfigManager.setRespawn:(Ljava/lang/String;ZIZZ)Z
+ 32: istore 6
+ 34: iload 6
+ 36: ifne 54
+ 39: aload_0
+ 40: aload_1
+ 41: invokedynamic #1393, 0 // InvokeDynamic #130:makeConcatWithConstants:(Ljava/lang/String;)Ljava/lang/String;
+ 46: invokestatic #796 // InterfaceMethod net/minecraft/network/chat/Component.m_237113_:(Ljava/lang/String;)Lnet/minecraft/network/chat/MutableComponent;
+ 49: invokevirtual #800 // Method net/minecraft/commands/CommandSourceStack.m_81352_:(Lnet/minecraft/network/chat/Component;)V
+ 52: iconst_0
+ 53: ireturn
+ 54: aload_0
+ 55: aload_1
+ 56: iload_2
+ 57: iload_3
+ 58: iload 4
+ 60: invokedynamic #1401, 0 // InvokeDynamic #131:get:(Ljava/lang/String;ZIZ)Ljava/util/function/Supplier;
+ 65: iconst_1
+ 66: invokevirtual #820 // Method net/minecraft/commands/CommandSourceStack.m_288197_:(Ljava/util/function/Supplier;Z)V
+ 69: iconst_1
+ 70: ireturn
+
+ private static int updateConfigFlag(net.minecraft.commands.CommandSourceStack, java.lang.String, java.lang.String, boolean, java.util.function.BooleanSupplier);
+ Code:
+ 0: aload_1
+ 1: invokestatic #778 // Method com/ogaba/sa_decor/common/loot/DecorLootConfigManager.has:(Ljava/lang/String;)Z
+ 4: ifne 22
+ 7: aload_0
+ 8: aload_1
+ 9: invokedynamic #1367, 0 // InvokeDynamic #127:makeConcatWithConstants:(Ljava/lang/String;)Ljava/lang/String;
+ 14: invokestatic #796 // InterfaceMethod net/minecraft/network/chat/Component.m_237113_:(Ljava/lang/String;)Lnet/minecraft/network/chat/MutableComponent;
+ 17: invokevirtual #800 // Method net/minecraft/commands/CommandSourceStack.m_81352_:(Lnet/minecraft/network/chat/Component;)V
+ 20: iconst_0
+ 21: ireturn
+ 22: aload 4
+ 24: invokeinterface #1408, 1 // InterfaceMethod java/util/function/BooleanSupplier.getAsBoolean:()Z
+ 29: istore 5
+ 31: iload 5
+ 33: ifne 52
+ 36: aload_0
+ 37: aload_2
+ 38: aload_1
+ 39: invokedynamic #1411, 0 // InvokeDynamic #132:makeConcatWithConstants:(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+ 44: invokestatic #796 // InterfaceMethod net/minecraft/network/chat/Component.m_237113_:(Ljava/lang/String;)Lnet/minecraft/network/chat/MutableComponent;
+ 47: invokevirtual #800 // Method net/minecraft/commands/CommandSourceStack.m_81352_:(Lnet/minecraft/network/chat/Component;)V
+ 50: iconst_0
+ 51: ireturn
+ 52: aload_0
+ 53: aload_1
+ 54: aload_2
+ 55: iload_3
+ 56: invokedynamic #1419, 0 // InvokeDynamic #133:get:(Ljava/lang/String;Ljava/lang/String;Z)Ljava/util/function/Supplier;
+ 61: iconst_1
+ 62: invokevirtual #820 // Method net/minecraft/commands/CommandSourceStack.m_288197_:(Ljava/util/function/Supplier;Z)V
+ 65: iconst_1
+ 66: ireturn
+
+ private static int set(net.minecraft.commands.CommandSourceStack, java.lang.String, boolean) throws com.mojang.brigadier.exceptions.CommandSyntaxException;
+ Code:
+ 0: aload_1
+ 1: invokestatic #778 // Method com/ogaba/sa_decor/common/loot/DecorLootConfigManager.has:(Ljava/lang/String;)Z
+ 4: ifne 22
+ 7: aload_0
+ 8: aload_1
+ 9: invokedynamic #1367, 0 // InvokeDynamic #127:makeConcatWithConstants:(Ljava/lang/String;)Ljava/lang/String;
+ 14: invokestatic #796 // InterfaceMethod net/minecraft/network/chat/Component.m_237113_:(Ljava/lang/String;)Lnet/minecraft/network/chat/MutableComponent;
+ 17: invokevirtual #800 // Method net/minecraft/commands/CommandSourceStack.m_81352_:(Lnet/minecraft/network/chat/Component;)V
+ 20: iconst_0
+ 21: ireturn
+ 22: aload_0
+ 23: invokestatic #1426 // Method getTarget:(Lnet/minecraft/commands/CommandSourceStack;)Lcom/ogaba/sa_decor/command/SADecorLootCommand$LootTarget;
+ 26: astore_3
+ 27: aload_3
+ 28: invokevirtual #1430 // Method com/ogaba/sa_decor/command/SADecorLootCommand$LootTarget.level:()Lnet/minecraft/server/level/ServerLevel;
+ 31: invokestatic #1435 // Method com/ogaba/sa_decor/common/loot/DecorLooseLootSavedData.get:(Lnet/minecraft/server/level/ServerLevel;)Lcom/ogaba/sa_decor/common/loot/DecorLooseLootSavedData;
+ 34: aload_3
+ 35: invokevirtual #1439 // Method com/ogaba/sa_decor/command/SADecorLootCommand$LootTarget.pos:()Lnet/minecraft/core/BlockPos;
+ 38: invokevirtual #1443 // Method com/ogaba/sa_decor/common/loot/DecorLooseLootSavedData.getManualProfile:(Lnet/minecraft/core/BlockPos;)Ljava/lang/String;
+ 41: astore 4
+ 43: aload 4
+ 45: invokevirtual #1111 // Method java/lang/String.isBlank:()Z
+ 48: ifne 67
+ 51: aload_0
+ 52: aload 4
+ 54: invokedynamic #1446, 0 // InvokeDynamic #134:makeConcatWithConstants:(Ljava/lang/String;)Ljava/lang/String;
+ 59: invokestatic #796 // InterfaceMethod net/minecraft/network/chat/Component.m_237113_:(Ljava/lang/String;)Lnet/minecraft/network/chat/MutableComponent;
+ 62: invokevirtual #800 // Method net/minecraft/commands/CommandSourceStack.m_81352_:(Lnet/minecraft/network/chat/Component;)V
+ 65: iconst_0
+ 66: ireturn
+ 67: aload_3
+ 68: invokevirtual #1430 // Method com/ogaba/sa_decor/command/SADecorLootCommand$LootTarget.level:()Lnet/minecraft/server/level/ServerLevel;
+ 71: aload_3
+ 72: invokestatic #1450 // Method wrapTarget:(Lcom/ogaba/sa_decor/command/SADecorLootCommand$LootTarget;)Lcom/ogaba/sa_decor/common/loot/DecorLootTargeting$Target;
+ 75: aload_1
+ 76: iload_2
+ 77: iconst_1
+ 78: invokestatic #1456 // Method com/ogaba/sa_decor/common/loot/DecorLootInteraction.markAsLootCrate:(Lnet/minecraft/world/level/Level;Lcom/ogaba/sa_decor/common/loot/DecorLootTargeting$Target;Ljava/lang/String;ZZ)V
+ 81: aload_0
+ 82: aload_3
+ 83: aload_1
+ 84: iload_2
+ 85: invokedynamic #1464, 0 // InvokeDynamic #135:get:(Lcom/ogaba/sa_decor/command/SADecorLootCommand$LootTarget;Ljava/lang/String;Z)Ljava/util/function/Supplier;
+ 90: iconst_1
+ 91: invokevirtual #820 // Method net/minecraft/commands/CommandSourceStack.m_288197_:(Ljava/util/function/Supplier;Z)V
+ 94: iconst_1
+ 95: ireturn
+
+ private static int clear(net.minecraft.commands.CommandSourceStack) throws com.mojang.brigadier.exceptions.CommandSyntaxException;
+ Code:
+ 0: aload_0
+ 1: invokestatic #1426 // Method getTarget:(Lnet/minecraft/commands/CommandSourceStack;)Lcom/ogaba/sa_decor/command/SADecorLootCommand$LootTarget;
+ 4: astore_1
+ 5: aload_1
+ 6: invokevirtual #1471 // Method com/ogaba/sa_decor/command/SADecorLootCommand$LootTarget.data:()Lcom/ogaba/sa_decor/common/loot/DecorLootContainerData;
+ 9: invokevirtual #1475 // Method com/ogaba/sa_decor/common/loot/DecorLootContainerData.clear:()V
+ 12: aload_1
+ 13: invokestatic #1450 // Method wrapTarget:(Lcom/ogaba/sa_decor/command/SADecorLootCommand$LootTarget;)Lcom/ogaba/sa_decor/common/loot/DecorLootTargeting$Target;
+ 16: invokestatic #1481 // Method com/ogaba/sa_decor/compat/rummage/DecorRummageCompat.disable:(Lcom/ogaba/sa_decor/common/loot/DecorLootTargeting$Target;)V
+ 19: aload_1
+ 20: invokestatic #1485 // Method saveTarget:(Lcom/ogaba/sa_decor/command/SADecorLootCommand$LootTarget;)V
+ 23: aload_1
+ 24: invokevirtual #1430 // Method com/ogaba/sa_decor/command/SADecorLootCommand$LootTarget.level:()Lnet/minecraft/server/level/ServerLevel;
+ 27: aload_1
+ 28: invokestatic #1450 // Method wrapTarget:(Lcom/ogaba/sa_decor/command/SADecorLootCommand$LootTarget;)Lcom/ogaba/sa_decor/common/loot/DecorLootTargeting$Target;
+ 31: invokestatic #1490 // Method com/ogaba/sa_decor/common/loot/DecorLootVisualRefresh.refresh:(Lnet/minecraft/world/level/Level;Lcom/ogaba/sa_decor/common/loot/DecorLootTargeting$Target;)V
+ 34: aload_0
+ 35: aload_1
+ 36: invokedynamic #1498, 0 // InvokeDynamic #136:get:(Lcom/ogaba/sa_decor/command/SADecorLootCommand$LootTarget;)Ljava/util/function/Supplier;
+ 41: iconst_1
+ 42: invokevirtual #820 // Method net/minecraft/commands/CommandSourceStack.m_288197_:(Ljava/util/function/Supplier;Z)V
+ 45: iconst_1
+ 46: ireturn
+
+ private static int clearInventory(net.minecraft.commands.CommandSourceStack) throws com.mojang.brigadier.exceptions.CommandSyntaxException;
+ Code:
+ 0: aload_0
+ 1: invokestatic #1426 // Method getTarget:(Lnet/minecraft/commands/CommandSourceStack;)Lcom/ogaba/sa_decor/command/SADecorLootCommand$LootTarget;
+ 4: astore_1
+ 5: aload_1
+ 6: invokevirtual #1503 // Method com/ogaba/sa_decor/command/SADecorLootCommand$LootTarget.container:()Lnet/minecraft/world/Container;
+ 9: invokeinterface #1508, 1 // InterfaceMethod net/minecraft/world/Container.m_6211_:()V
+ 14: aload_1
+ 15: invokevirtual #1503 // Method com/ogaba/sa_decor/command/SADecorLootCommand$LootTarget.container:()Lnet/minecraft/world/Container;
+ 18: invokeinterface #1511, 1 // InterfaceMethod net/minecraft/world/Container.m_6596_:()V
+ 23: aload_1
+ 24: invokestatic #1450 // Method wrapTarget:(Lcom/ogaba/sa_decor/command/SADecorLootCommand$LootTarget;)Lcom/ogaba/sa_decor/common/loot/DecorLootTargeting$Target;
+ 27: iconst_0
+ 28: invokestatic #1515 // Method com/ogaba/sa_decor/compat/rummage/DecorRummageCompat.resetAll:(Lcom/ogaba/sa_decor/common/loot/DecorLootTargeting$Target;Z)V
+ 31: aload_1
+ 32: invokevirtual #1519 // Method com/ogaba/sa_decor/command/SADecorLootCommand$LootTarget.blockEntity:()Lnet/minecraft/world/level/block/entity/BlockEntity;
+ 35: invokevirtual #1522 // Method net/minecraft/world/level/block/entity/BlockEntity.m_6596_:()V
+ 38: aload_1
+ 39: invokestatic #1485 // Method saveTarget:(Lcom/ogaba/sa_decor/command/SADecorLootCommand$LootTarget;)V
+ 42: aload_1
+ 43: invokevirtual #1430 // Method com/ogaba/sa_decor/command/SADecorLootCommand$LootTarget.level:()Lnet/minecraft/server/level/ServerLevel;
+ 46: aload_1
+ 47: invokestatic #1450 // Method wrapTarget:(Lcom/ogaba/sa_decor/command/SADecorLootCommand$LootTarget;)Lcom/ogaba/sa_decor/common/loot/DecorLootTargeting$Target;
+ 50: invokestatic #1490 // Method com/ogaba/sa_decor/common/loot/DecorLootVisualRefresh.refresh:(Lnet/minecraft/world/level/Level;Lcom/ogaba/sa_decor/common/loot/DecorLootTargeting$Target;)V
+ 53: aload_0
+ 54: aload_1
+ 55: invokedynamic #1527, 0 // InvokeDynamic #137:get:(Lcom/ogaba/sa_decor/command/SADecorLootCommand$LootTarget;)Ljava/util/function/Supplier;
+ 60: iconst_1
+ 61: invokevirtual #820 // Method net/minecraft/commands/CommandSourceStack.m_288197_:(Ljava/util/function/Supplier;Z)V
+ 64: iconst_1
+ 65: ireturn
+
+ private static int reset(net.minecraft.commands.CommandSourceStack) throws com.mojang.brigadier.exceptions.CommandSyntaxException;
+ Code:
+ 0: aload_0
+ 1: invokestatic #1426 // Method getTarget:(Lnet/minecraft/commands/CommandSourceStack;)Lcom/ogaba/sa_decor/command/SADecorLootCommand$LootTarget;
+ 4: astore_1
+ 5: aload_1
+ 6: invokevirtual #1471 // Method com/ogaba/sa_decor/command/SADecorLootCommand$LootTarget.data:()Lcom/ogaba/sa_decor/common/loot/DecorLootContainerData;
+ 9: astore_2
+ 10: aload_2
+ 11: invokevirtual #1530 // Method com/ogaba/sa_decor/common/loot/DecorLootContainerData.isMarkedAsLootCrate:()Z
+ 14: ifne 29
+ 17: aload_0
+ 18: ldc_w #1532 // String Target container is not marked as a loot crate.
+ 21: invokestatic #796 // InterfaceMethod net/minecraft/network/chat/Component.m_237113_:(Ljava/lang/String;)Lnet/minecraft/network/chat/MutableComponent;
+ 24: invokevirtual #800 // Method net/minecraft/commands/CommandSourceStack.m_81352_:(Lnet/minecraft/network/chat/Component;)V
+ 27: iconst_0
+ 28: ireturn
+ 29: aload_1
+ 30: invokestatic #1450 // Method wrapTarget:(Lcom/ogaba/sa_decor/command/SADecorLootCommand$LootTarget;)Lcom/ogaba/sa_decor/common/loot/DecorLootTargeting$Target;
+ 33: astore_3
+ 34: aload_1
+ 35: invokevirtual #1430 // Method com/ogaba/sa_decor/command/SADecorLootCommand$LootTarget.level:()Lnet/minecraft/server/level/ServerLevel;
+ 38: aload_3
+ 39: invokestatic #1538 // Method com/ogaba/sa_decor/compat/lootr/DecorLootrCompat.invalidateContainer:(Lnet/minecraft/server/level/ServerLevel;Lcom/ogaba/sa_decor/common/loot/DecorLootTargeting$Target;)V
+ 42: aload_2
+ 43: invokevirtual #1541 // Method com/ogaba/sa_decor/common/loot/DecorLootContainerData.clearLootrContainerId:()V
+ 46: aload_1
+ 47: invokevirtual #1503 // Method com/ogaba/sa_decor/command/SADecorLootCommand$LootTarget.container:()Lnet/minecraft/world/Container;
+ 50: invokeinterface #1508, 1 // InterfaceMethod net/minecraft/world/Container.m_6211_:()V
+ 55: aload_1
+ 56: invokevirtual #1503 // Method com/ogaba/sa_decor/command/SADecorLootCommand$LootTarget.container:()Lnet/minecraft/world/Container;
+ 59: invokeinterface #1511, 1 // InterfaceMethod net/minecraft/world/Container.m_6596_:()V
+ 64: aload_2
+ 65: iconst_0
+ 66: invokevirtual #1545 // Method com/ogaba/sa_decor/common/loot/DecorLootContainerData.setSearched:(Z)V
+ 69: aload_2
+ 70: iconst_0
+ 71: invokevirtual #1548 // Method com/ogaba/sa_decor/common/loot/DecorLootContainerData.setSpawnedEmpty:(Z)V
+ 74: aload_2
+ 75: lconst_0
+ 76: invokevirtual #1552 // Method com/ogaba/sa_decor/common/loot/DecorLootContainerData.setLastGeneratedGameTime:(J)V
+ 79: aload_2
+ 80: invokevirtual #1555 // Method com/ogaba/sa_decor/common/loot/DecorLootContainerData.clearPlayerStates:()V
+ 83: aload_1
+ 84: invokestatic #1450 // Method wrapTarget:(Lcom/ogaba/sa_decor/command/SADecorLootCommand$LootTarget;)Lcom/ogaba/sa_decor/common/loot/DecorLootTargeting$Target;
+ 87: iconst_0
+ 88: invokestatic #1515 // Method com/ogaba/sa_decor/compat/rummage/DecorRummageCompat.resetAll:(Lcom/ogaba/sa_decor/common/loot/DecorLootTargeting$Target;Z)V
+ 91: aload_1
+ 92: invokevirtual #1519 // Method com/ogaba/sa_decor/command/SADecorLootCommand$LootTarget.blockEntity:()Lnet/minecraft/world/level/block/entity/BlockEntity;
+ 95: invokevirtual #1522 // Method net/minecraft/world/level/block/entity/BlockEntity.m_6596_:()V
+ 98: aload_1
+ 99: invokestatic #1485 // Method saveTarget:(Lcom/ogaba/sa_decor/command/SADecorLootCommand$LootTarget;)V
+ 102: aload_1
+ 103: invokevirtual #1430 // Method com/ogaba/sa_decor/command/SADecorLootCommand$LootTarget.level:()Lnet/minecraft/server/level/ServerLevel;
+ 106: aload_1
+ 107: invokestatic #1450 // Method wrapTarget:(Lcom/ogaba/sa_decor/command/SADecorLootCommand$LootTarget;)Lcom/ogaba/sa_decor/common/loot/DecorLootTargeting$Target;
+ 110: invokestatic #1490 // Method com/ogaba/sa_decor/common/loot/DecorLootVisualRefresh.refresh:(Lnet/minecraft/world/level/Level;Lcom/ogaba/sa_decor/common/loot/DecorLootTargeting$Target;)V
+ 113: aload_0
+ 114: aload_1
+ 115: aload_2
+ 116: invokedynamic #1563, 0 // InvokeDynamic #138:get:(Lcom/ogaba/sa_decor/command/SADecorLootCommand$LootTarget;Lcom/ogaba/sa_decor/common/loot/DecorLootContainerData;)Ljava/util/function/Supplier;
+ 121: iconst_1
+ 122: invokevirtual #820 // Method net/minecraft/commands/CommandSourceStack.m_288197_:(Ljava/util/function/Supplier;Z)V
+ 125: iconst_1
+ 126: ireturn
+
+ private static int lock(net.minecraft.commands.CommandSourceStack, boolean) throws com.mojang.brigadier.exceptions.CommandSyntaxException;
+ Code:
+ 0: aload_0
+ 1: invokestatic #1426 // Method getTarget:(Lnet/minecraft/commands/CommandSourceStack;)Lcom/ogaba/sa_decor/command/SADecorLootCommand$LootTarget;
+ 4: astore_2
+ 5: aload_2
+ 6: invokevirtual #1471 // Method com/ogaba/sa_decor/command/SADecorLootCommand$LootTarget.data:()Lcom/ogaba/sa_decor/common/loot/DecorLootContainerData;
+ 9: astore_3
+ 10: aload_3
+ 11: invokevirtual #1530 // Method com/ogaba/sa_decor/common/loot/DecorLootContainerData.isMarkedAsLootCrate:()Z
+ 14: ifne 29
+ 17: aload_0
+ 18: ldc_w #1532 // String Target container is not marked as a loot crate.
+ 21: invokestatic #796 // InterfaceMethod net/minecraft/network/chat/Component.m_237113_:(Ljava/lang/String;)Lnet/minecraft/network/chat/MutableComponent;
+ 24: invokevirtual #800 // Method net/minecraft/commands/CommandSourceStack.m_81352_:(Lnet/minecraft/network/chat/Component;)V
+ 27: iconst_0
+ 28: ireturn
+ 29: aload_3
+ 30: iload_1
+ 31: invokevirtual #1569 // Method com/ogaba/sa_decor/common/loot/DecorLootContainerData.setLocked:(Z)V
+ 34: aload_3
+ 35: iload_1
+ 36: invokevirtual #1572 // Method com/ogaba/sa_decor/common/loot/DecorLootContainerData.setRespawnLocked:(Z)V
+ 39: iload_1
+ 40: ifeq 55
+ 43: aload_2
+ 44: invokevirtual #1430 // Method com/ogaba/sa_decor/command/SADecorLootCommand$LootTarget.level:()Lnet/minecraft/server/level/ServerLevel;
+ 47: aload_2
+ 48: invokestatic #1450 // Method wrapTarget:(Lcom/ogaba/sa_decor/command/SADecorLootCommand$LootTarget;)Lcom/ogaba/sa_decor/common/loot/DecorLootTargeting$Target;
+ 51: iconst_0
+ 52: invokestatic #1576 // Method com/ogaba/sa_decor/common/loot/DecorLootInteraction.forceVisualOpenState:(Lnet/minecraft/world/level/Level;Lcom/ogaba/sa_decor/common/loot/DecorLootTargeting$Target;Z)V
+ 55: aload_2
+ 56: invokevirtual #1519 // Method com/ogaba/sa_decor/command/SADecorLootCommand$LootTarget.blockEntity:()Lnet/minecraft/world/level/block/entity/BlockEntity;
+ 59: invokevirtual #1522 // Method net/minecraft/world/level/block/entity/BlockEntity.m_6596_:()V
+ 62: aload_2
+ 63: invokestatic #1485 // Method saveTarget:(Lcom/ogaba/sa_decor/command/SADecorLootCommand$LootTarget;)V
+ 66: aload_2
+ 67: invokevirtual #1430 // Method com/ogaba/sa_decor/command/SADecorLootCommand$LootTarget.level:()Lnet/minecraft/server/level/ServerLevel;
+ 70: aload_2
+ 71: invokestatic #1450 // Method wrapTarget:(Lcom/ogaba/sa_decor/command/SADecorLootCommand$LootTarget;)Lcom/ogaba/sa_decor/common/loot/DecorLootTargeting$Target;
+ 74: invokestatic #1490 // Method com/ogaba/sa_decor/common/loot/DecorLootVisualRefresh.refresh:(Lnet/minecraft/world/level/Level;Lcom/ogaba/sa_decor/common/loot/DecorLootTargeting$Target;)V
+ 77: aload_0
+ 78: aload_2
+ 79: iload_1
+ 80: invokedynamic #1584, 0 // InvokeDynamic #139:get:(Lcom/ogaba/sa_decor/command/SADecorLootCommand$LootTarget;Z)Ljava/util/function/Supplier;
+ 85: iconst_1
+ 86: invokevirtual #820 // Method net/minecraft/commands/CommandSourceStack.m_288197_:(Ljava/util/function/Supplier;Z)V
+ 89: iconst_1
+ 90: ireturn
+
+ private static int respawnNow(net.minecraft.commands.CommandSourceStack) throws com.mojang.brigadier.exceptions.CommandSyntaxException;
+ Code:
+ 0: aload_0
+ 1: invokestatic #1426 // Method getTarget:(Lnet/minecraft/commands/CommandSourceStack;)Lcom/ogaba/sa_decor/command/SADecorLootCommand$LootTarget;
+ 4: astore_1
+ 5: aload_1
+ 6: invokevirtual #1471 // Method com/ogaba/sa_decor/command/SADecorLootCommand$LootTarget.data:()Lcom/ogaba/sa_decor/common/loot/DecorLootContainerData;
+ 9: astore_2
+ 10: aload_2
+ 11: invokevirtual #1530 // Method com/ogaba/sa_decor/common/loot/DecorLootContainerData.isMarkedAsLootCrate:()Z
+ 14: ifne 29
+ 17: aload_0
+ 18: ldc_w #1532 // String Target container is not marked as a loot crate.
+ 21: invokestatic #796 // InterfaceMethod net/minecraft/network/chat/Component.m_237113_:(Ljava/lang/String;)Lnet/minecraft/network/chat/MutableComponent;
+ 24: invokevirtual #800 // Method net/minecraft/commands/CommandSourceStack.m_81352_:(Lnet/minecraft/network/chat/Component;)V
+ 27: iconst_0
+ 28: ireturn
+ 29: aload_1
+ 30: invokestatic #1450 // Method wrapTarget:(Lcom/ogaba/sa_decor/command/SADecorLootCommand$LootTarget;)Lcom/ogaba/sa_decor/common/loot/DecorLootTargeting$Target;
+ 33: astore_3
+ 34: aload_1
+ 35: invokevirtual #1430 // Method com/ogaba/sa_decor/command/SADecorLootCommand$LootTarget.level:()Lnet/minecraft/server/level/ServerLevel;
+ 38: aload_3
+ 39: invokestatic #1538 // Method com/ogaba/sa_decor/compat/lootr/DecorLootrCompat.invalidateContainer:(Lnet/minecraft/server/level/ServerLevel;Lcom/ogaba/sa_decor/common/loot/DecorLootTargeting$Target;)V
+ 42: aload_2
+ 43: invokevirtual #1541 // Method com/ogaba/sa_decor/common/loot/DecorLootContainerData.clearLootrContainerId:()V
+ 46: aload_1
+ 47: invokevirtual #1503 // Method com/ogaba/sa_decor/command/SADecorLootCommand$LootTarget.container:()Lnet/minecraft/world/Container;
+ 50: invokeinterface #1508, 1 // InterfaceMethod net/minecraft/world/Container.m_6211_:()V
+ 55: aload_1
+ 56: invokevirtual #1503 // Method com/ogaba/sa_decor/command/SADecorLootCommand$LootTarget.container:()Lnet/minecraft/world/Container;
+ 59: invokeinterface #1511, 1 // InterfaceMethod net/minecraft/world/Container.m_6596_:()V
+ 64: aload_2
+ 65: iconst_0
+ 66: invokevirtual #1545 // Method com/ogaba/sa_decor/common/loot/DecorLootContainerData.setSearched:(Z)V
+ 69: aload_2
+ 70: iconst_0
+ 71: invokevirtual #1548 // Method com/ogaba/sa_decor/common/loot/DecorLootContainerData.setSpawnedEmpty:(Z)V
+ 74: aload_2
+ 75: lconst_0
+ 76: invokevirtual #1552 // Method com/ogaba/sa_decor/common/loot/DecorLootContainerData.setLastGeneratedGameTime:(J)V
+ 79: aload_2
+ 80: invokevirtual #1555 // Method com/ogaba/sa_decor/common/loot/DecorLootContainerData.clearPlayerStates:()V
+ 83: aload_1
+ 84: invokestatic #1450 // Method wrapTarget:(Lcom/ogaba/sa_decor/command/SADecorLootCommand$LootTarget;)Lcom/ogaba/sa_decor/common/loot/DecorLootTargeting$Target;
+ 87: iconst_0
+ 88: invokestatic #1515 // Method com/ogaba/sa_decor/compat/rummage/DecorRummageCompat.resetAll:(Lcom/ogaba/sa_decor/common/loot/DecorLootTargeting$Target;Z)V
+ 91: aload_1
+ 92: invokevirtual #1519 // Method com/ogaba/sa_decor/command/SADecorLootCommand$LootTarget.blockEntity:()Lnet/minecraft/world/level/block/entity/BlockEntity;
+ 95: invokevirtual #1522 // Method net/minecraft/world/level/block/entity/BlockEntity.m_6596_:()V
+ 98: aload_1
+ 99: invokestatic #1485 // Method saveTarget:(Lcom/ogaba/sa_decor/command/SADecorLootCommand$LootTarget;)V
+ 102: aload_1
+ 103: invokevirtual #1430 // Method com/ogaba/sa_decor/command/SADecorLootCommand$LootTarget.level:()Lnet/minecraft/server/level/ServerLevel;
+ 106: aload_1
+ 107: invokestatic #1450 // Method wrapTarget:(Lcom/ogaba/sa_decor/command/SADecorLootCommand$LootTarget;)Lcom/ogaba/sa_decor/common/loot/DecorLootTargeting$Target;
+ 110: invokestatic #1490 // Method com/ogaba/sa_decor/common/loot/DecorLootVisualRefresh.refresh:(Lnet/minecraft/world/level/Level;Lcom/ogaba/sa_decor/common/loot/DecorLootTargeting$Target;)V
+ 113: aload_0
+ 114: aload_1
+ 115: invokedynamic #1590, 0 // InvokeDynamic #140:get:(Lcom/ogaba/sa_decor/command/SADecorLootCommand$LootTarget;)Ljava/util/function/Supplier;
+ 120: iconst_1
+ 121: invokevirtual #820 // Method net/minecraft/commands/CommandSourceStack.m_288197_:(Ljava/util/function/Supplier;Z)V
+ 124: iconst_1
+ 125: ireturn
+
+ private static int refresh(net.minecraft.commands.CommandSourceStack) throws com.mojang.brigadier.exceptions.CommandSyntaxException;
+ Code:
+ 0: aload_0
+ 1: invokestatic #1426 // Method getTarget:(Lnet/minecraft/commands/CommandSourceStack;)Lcom/ogaba/sa_decor/command/SADecorLootCommand$LootTarget;
+ 4: astore_1
+ 5: aload_1
+ 6: invokevirtual #1519 // Method com/ogaba/sa_decor/command/SADecorLootCommand$LootTarget.blockEntity:()Lnet/minecraft/world/level/block/entity/BlockEntity;
+ 9: invokevirtual #1522 // Method net/minecraft/world/level/block/entity/BlockEntity.m_6596_:()V
+ 12: aload_1
+ 13: invokevirtual #1430 // Method com/ogaba/sa_decor/command/SADecorLootCommand$LootTarget.level:()Lnet/minecraft/server/level/ServerLevel;
+ 16: aload_1
+ 17: invokestatic #1450 // Method wrapTarget:(Lcom/ogaba/sa_decor/command/SADecorLootCommand$LootTarget;)Lcom/ogaba/sa_decor/common/loot/DecorLootTargeting$Target;
+ 20: invokestatic #1490 // Method com/ogaba/sa_decor/common/loot/DecorLootVisualRefresh.refresh:(Lnet/minecraft/world/level/Level;Lcom/ogaba/sa_decor/common/loot/DecorLootTargeting$Target;)V
+ 23: aload_0
+ 24: aload_1
+ 25: invokedynamic #1595, 0 // InvokeDynamic #141:get:(Lcom/ogaba/sa_decor/command/SADecorLootCommand$LootTarget;)Ljava/util/function/Supplier;
+ 30: iconst_0
+ 31: invokevirtual #820 // Method net/minecraft/commands/CommandSourceStack.m_288197_:(Ljava/util/function/Supplier;Z)V
+ 34: iconst_1
+ 35: ireturn
+
+ private static int info(net.minecraft.commands.CommandSourceStack) throws com.mojang.brigadier.exceptions.CommandSyntaxException;
+ Code:
+ 0: aload_0
+ 1: invokestatic #1426 // Method getTarget:(Lnet/minecraft/commands/CommandSourceStack;)Lcom/ogaba/sa_decor/command/SADecorLootCommand$LootTarget;
+ 4: astore_1
+ 5: aload_1
+ 6: invokevirtual #1471 // Method com/ogaba/sa_decor/command/SADecorLootCommand$LootTarget.data:()Lcom/ogaba/sa_decor/common/loot/DecorLootContainerData;
+ 9: astore_2
+ 10: aload_2
+ 11: invokevirtual #1530 // Method com/ogaba/sa_decor/common/loot/DecorLootContainerData.isMarkedAsLootCrate:()Z
+ 14: ifne 30
+ 17: aload_0
+ 18: aload_1
+ 19: invokedynamic #1600, 0 // InvokeDynamic #142:get:(Lcom/ogaba/sa_decor/command/SADecorLootCommand$LootTarget;)Ljava/util/function/Supplier;
+ 24: iconst_0
+ 25: invokevirtual #820 // Method net/minecraft/commands/CommandSourceStack.m_288197_:(Ljava/util/function/Supplier;Z)V
+ 28: iconst_0
+ 29: ireturn
+ 30: aload_2
+ 31: invokevirtual #1602 // Method com/ogaba/sa_decor/common/loot/DecorLootContainerData.configId:()Ljava/lang/String;
+ 34: invokestatic #1605 // Method com/ogaba/sa_decor/common/loot/DecorLootConfigManager.get:(Ljava/lang/String;)Lcom/ogaba/sa_decor/common/loot/DecorLootConfig;
+ 37: astore_3
+ 38: aload_1
+ 39: invokestatic #1450 // Method wrapTarget:(Lcom/ogaba/sa_decor/command/SADecorLootCommand$LootTarget;)Lcom/ogaba/sa_decor/common/loot/DecorLootTargeting$Target;
+ 42: astore 4
+ 44: aload_3
+ 45: ifnull 61
+ 48: aload_3
+ 49: aload 4
+ 51: invokestatic #1609 // Method com/ogaba/sa_decor/compat/lootr/DecorLootrCompat.shouldUseLootrPerPlayer:(Lcom/ogaba/sa_decor/common/loot/DecorLootConfig;Lcom/ogaba/sa_decor/common/loot/DecorLootTargeting$Target;)Z
+ 54: ifeq 61
+ 57: iconst_1
+ 58: goto 62
+ 61: iconst_0
+ 62: istore 5
+ 64: aload_3
+ 65: ifnull 86
+ 68: iload 5
+ 70: ifne 82
+ 73: aload_3
+ 74: aload 4
+ 76: invokestatic #1612 // Method com/ogaba/sa_decor/common/loot/DecorLootInteraction.usesPerPlayerLoot:(Lcom/ogaba/sa_decor/common/loot/DecorLootConfig;Lcom/ogaba/sa_decor/common/loot/DecorLootTargeting$Target;)Z
+ 79: ifeq 86
+ 82: iconst_1
+ 83: goto 87
+ 86: iconst_0
+ 87: istore 6
+ 89: aload_0
+ 90: invokevirtual #79 // Method net/minecraft/commands/CommandSourceStack.m_81375_:()Lnet/minecraft/server/level/ServerPlayer;
+ 93: astore 7
+ 95: aload_0
+ 96: aload_1
+ 97: aload_2
+ 98: iload 6
+ 100: iload 5
+ 102: aload_3
+ 103: aload 7
+ 105: invokedynamic #1620, 0 // InvokeDynamic #143:get:(Lcom/ogaba/sa_decor/command/SADecorLootCommand$LootTarget;Lcom/ogaba/sa_decor/common/loot/DecorLootContainerData;ZZLcom/ogaba/sa_decor/common/loot/DecorLootConfig;Lnet/minecraft/server/level/ServerPlayer;)Ljava/util/function/Supplier;
+ 110: iconst_0
+ 111: invokevirtual #820 // Method net/minecraft/commands/CommandSourceStack.m_288197_:(Ljava/util/function/Supplier;Z)V
+ 114: iconst_1
+ 115: ireturn
+
+ private static int generate(net.minecraft.commands.CommandSourceStack) throws com.mojang.brigadier.exceptions.CommandSyntaxException;
+ Code:
+ 0: aload_0
+ 1: invokestatic #1426 // Method getTarget:(Lnet/minecraft/commands/CommandSourceStack;)Lcom/ogaba/sa_decor/command/SADecorLootCommand$LootTarget;
+ 4: astore_1
+ 5: aload_1
+ 6: invokevirtual #1471 // Method com/ogaba/sa_decor/command/SADecorLootCommand$LootTarget.data:()Lcom/ogaba/sa_decor/common/loot/DecorLootContainerData;
+ 9: astore_2
+ 10: aload_2
+ 11: invokevirtual #1530 // Method com/ogaba/sa_decor/common/loot/DecorLootContainerData.isMarkedAsLootCrate:()Z
+ 14: ifne 29
+ 17: aload_0
+ 18: ldc_w #1532 // String Target container is not marked as a loot crate.
+ 21: invokestatic #796 // InterfaceMethod net/minecraft/network/chat/Component.m_237113_:(Ljava/lang/String;)Lnet/minecraft/network/chat/MutableComponent;
+ 24: invokevirtual #800 // Method net/minecraft/commands/CommandSourceStack.m_81352_:(Lnet/minecraft/network/chat/Component;)V
+ 27: iconst_0
+ 28: ireturn
+ 29: aload_2
+ 30: invokevirtual #1602 // Method com/ogaba/sa_decor/common/loot/DecorLootContainerData.configId:()Ljava/lang/String;
+ 33: invokestatic #1605 // Method com/ogaba/sa_decor/common/loot/DecorLootConfigManager.get:(Ljava/lang/String;)Lcom/ogaba/sa_decor/common/loot/DecorLootConfig;
+ 36: astore_3
+ 37: aload_3
+ 38: ifnonnull 59
+ 41: aload_0
+ 42: aload_2
+ 43: invokevirtual #1602 // Method com/ogaba/sa_decor/common/loot/DecorLootContainerData.configId:()Ljava/lang/String;
+ 46: invokedynamic #1626, 0 // InvokeDynamic #144:makeConcatWithConstants:(Ljava/lang/String;)Ljava/lang/String;
+ 51: invokestatic #796 // InterfaceMethod net/minecraft/network/chat/Component.m_237113_:(Ljava/lang/String;)Lnet/minecraft/network/chat/MutableComponent;
+ 54: invokevirtual #800 // Method net/minecraft/commands/CommandSourceStack.m_81352_:(Lnet/minecraft/network/chat/Component;)V
+ 57: iconst_0
+ 58: ireturn
+ 59: aload_1
+ 60: invokestatic #1450 // Method wrapTarget:(Lcom/ogaba/sa_decor/command/SADecorLootCommand$LootTarget;)Lcom/ogaba/sa_decor/common/loot/DecorLootTargeting$Target;
+ 63: astore 4
+ 65: aload_3
+ 66: aload 4
+ 68: invokestatic #1609 // Method com/ogaba/sa_decor/compat/lootr/DecorLootrCompat.shouldUseLootrPerPlayer:(Lcom/ogaba/sa_decor/common/loot/DecorLootConfig;Lcom/ogaba/sa_decor/common/loot/DecorLootTargeting$Target;)Z
+ 71: ifeq 135
+ 74: aload_0
+ 75: invokevirtual #79 // Method net/minecraft/commands/CommandSourceStack.m_81375_:()Lnet/minecraft/server/level/ServerPlayer;
+ 78: astore 5
+ 80: aload_1
+ 81: invokevirtual #1430 // Method com/ogaba/sa_decor/command/SADecorLootCommand$LootTarget.level:()Lnet/minecraft/server/level/ServerLevel;
+ 84: aload 4
+ 86: aload 5
+ 88: aload_3
+ 89: invokestatic #1630 // Method com/ogaba/sa_decor/compat/lootr/DecorLootrCompat.forceResetPlayerInventory:(Lnet/minecraft/server/level/ServerLevel;Lcom/ogaba/sa_decor/common/loot/DecorLootTargeting$Target;Lnet/minecraft/server/level/ServerPlayer;Lcom/ogaba/sa_decor/common/loot/DecorLootConfig;)Z
+ 92: ifeq 110
+ 95: aload_1
+ 96: invokevirtual #1430 // Method com/ogaba/sa_decor/command/SADecorLootCommand$LootTarget.level:()Lnet/minecraft/server/level/ServerLevel;
+ 99: aload 4
+ 101: aload 5
+ 103: aload_3
+ 104: invokestatic #1633 // Method com/ogaba/sa_decor/compat/lootr/DecorLootrCompat.openPlayerInventory:(Lnet/minecraft/server/level/ServerLevel;Lcom/ogaba/sa_decor/common/loot/DecorLootTargeting$Target;Lnet/minecraft/server/level/ServerPlayer;Lcom/ogaba/sa_decor/common/loot/DecorLootConfig;)Z
+ 107: ifne 122
+ 110: aload_0
+ 111: ldc_w #1635 // String Lootr backend could not regenerate this player\'s inventory.
+ 114: invokestatic #796 // InterfaceMethod net/minecraft/network/chat/Component.m_237113_:(Ljava/lang/String;)Lnet/minecraft/network/chat/MutableComponent;
+ 117: invokevirtual #800 // Method net/minecraft/commands/CommandSourceStack.m_81352_:(Lnet/minecraft/network/chat/Component;)V
+ 120: iconst_0
+ 121: ireturn
+ 122: aload_0
+ 123: aload_1
+ 124: invokedynamic #1640, 0 // InvokeDynamic #145:get:(Lcom/ogaba/sa_decor/command/SADecorLootCommand$LootTarget;)Ljava/util/function/Supplier;
+ 129: iconst_1
+ 130: invokevirtual #820 // Method net/minecraft/commands/CommandSourceStack.m_288197_:(Ljava/util/function/Supplier;Z)V
+ 133: iconst_1
+ 134: ireturn
+ 135: aload_3
+ 136: aload 4
+ 138: invokestatic #1612 // Method com/ogaba/sa_decor/common/loot/DecorLootInteraction.usesPerPlayerLoot:(Lcom/ogaba/sa_decor/common/loot/DecorLootConfig;Lcom/ogaba/sa_decor/common/loot/DecorLootTargeting$Target;)Z
+ 141: ifeq 222
+ 144: aload_0
+ 145: invokevirtual #79 // Method net/minecraft/commands/CommandSourceStack.m_81375_:()Lnet/minecraft/server/level/ServerPlayer;
+ 148: astore 5
+ 150: aload_1
+ 151: invokevirtual #1503 // Method com/ogaba/sa_decor/command/SADecorLootCommand$LootTarget.container:()Lnet/minecraft/world/Container;
+ 154: invokeinterface #1508, 1 // InterfaceMethod net/minecraft/world/Container.m_6211_:()V
+ 159: aload_2
+ 160: iconst_0
+ 161: invokevirtual #1548 // Method com/ogaba/sa_decor/common/loot/DecorLootContainerData.setSpawnedEmpty:(Z)V
+ 164: aload_2
+ 165: aload 5
+ 167: invokevirtual #1644 // Method net/minecraft/server/level/ServerPlayer.m_20148_:()Ljava/util/UUID;
+ 170: iconst_0
+ 171: invokevirtual #1647 // Method com/ogaba/sa_decor/common/loot/DecorLootContainerData.setSearched:(Ljava/util/UUID;Z)V
+ 174: aload_2
+ 175: aload 5
+ 177: invokevirtual #1644 // Method net/minecraft/server/level/ServerPlayer.m_20148_:()Ljava/util/UUID;
+ 180: lconst_0
+ 181: invokevirtual #1650 // Method com/ogaba/sa_decor/common/loot/DecorLootContainerData.setLastGeneratedGameTime:(Ljava/util/UUID;J)V
+ 184: aload_1
+ 185: invokevirtual #1430 // Method com/ogaba/sa_decor/command/SADecorLootCommand$LootTarget.level:()Lnet/minecraft/server/level/ServerLevel;
+ 188: aload 4
+ 190: aload_2
+ 191: aload_3
+ 192: aload 5
+ 194: invokevirtual #1644 // Method net/minecraft/server/level/ServerPlayer.m_20148_:()Ljava/util/UUID;
+ 197: invokestatic #1654 // Method com/ogaba/sa_decor/common/loot/DecorLootInteraction.generateNowForPlayer:(Lnet/minecraft/world/level/Level;Lcom/ogaba/sa_decor/common/loot/DecorLootTargeting$Target;Lcom/ogaba/sa_decor/common/loot/DecorLootContainerData;Lcom/ogaba/sa_decor/common/loot/DecorLootConfig;Ljava/util/UUID;)V
+ 200: aload_1
+ 201: invokevirtual #1430 // Method com/ogaba/sa_decor/command/SADecorLootCommand$LootTarget.level:()Lnet/minecraft/server/level/ServerLevel;
+ 204: aload 4
+ 206: invokestatic #1490 // Method com/ogaba/sa_decor/common/loot/DecorLootVisualRefresh.refresh:(Lnet/minecraft/world/level/Level;Lcom/ogaba/sa_decor/common/loot/DecorLootTargeting$Target;)V
+ 209: aload_0
+ 210: aload_1
+ 211: invokedynamic #1659, 0 // InvokeDynamic #146:get:(Lcom/ogaba/sa_decor/command/SADecorLootCommand$LootTarget;)Ljava/util/function/Supplier;
+ 216: iconst_1
+ 217: invokevirtual #820 // Method net/minecraft/commands/CommandSourceStack.m_288197_:(Ljava/util/function/Supplier;Z)V
+ 220: iconst_1
+ 221: ireturn
+ 222: aload_2
+ 223: iconst_0
+ 224: invokevirtual #1545 // Method com/ogaba/sa_decor/common/loot/DecorLootContainerData.setSearched:(Z)V
+ 227: aload_2
+ 228: iconst_0
+ 229: invokevirtual #1548 // Method com/ogaba/sa_decor/common/loot/DecorLootContainerData.setSpawnedEmpty:(Z)V
+ 232: aload_1
+ 233: invokevirtual #1519 // Method com/ogaba/sa_decor/command/SADecorLootCommand$LootTarget.blockEntity:()Lnet/minecraft/world/level/block/entity/BlockEntity;
+ 236: invokevirtual #1522 // Method net/minecraft/world/level/block/entity/BlockEntity.m_6596_:()V
+ 239: aload_1
+ 240: invokevirtual #1430 // Method com/ogaba/sa_decor/command/SADecorLootCommand$LootTarget.level:()Lnet/minecraft/server/level/ServerLevel;
+ 243: aload_1
+ 244: invokevirtual #1439 // Method com/ogaba/sa_decor/command/SADecorLootCommand$LootTarget.pos:()Lnet/minecraft/core/BlockPos;
+ 247: aload_1
+ 248: invokevirtual #1519 // Method com/ogaba/sa_decor/command/SADecorLootCommand$LootTarget.blockEntity:()Lnet/minecraft/world/level/block/entity/BlockEntity;
+ 251: invokestatic #1663 // Method com/ogaba/sa_decor/common/loot/DecorLootInteraction.prepareLootBeforeOpen:(Lnet/minecraft/world/level/Level;Lnet/minecraft/core/BlockPos;Lnet/minecraft/world/level/block/entity/BlockEntity;)V
+ 254: aload_1
+ 255: invokestatic #1485 // Method saveTarget:(Lcom/ogaba/sa_decor/command/SADecorLootCommand$LootTarget;)V
+ 258: aload_1
+ 259: invokevirtual #1430 // Method com/ogaba/sa_decor/command/SADecorLootCommand$LootTarget.level:()Lnet/minecraft/server/level/ServerLevel;
+ 262: aload 4
+ 264: invokestatic #1490 // Method com/ogaba/sa_decor/common/loot/DecorLootVisualRefresh.refresh:(Lnet/minecraft/world/level/Level;Lcom/ogaba/sa_decor/common/loot/DecorLootTargeting$Target;)V
+ 267: aload_0
+ 268: aload_1
+ 269: invokedynamic #1668, 0 // InvokeDynamic #147:get:(Lcom/ogaba/sa_decor/command/SADecorLootCommand$LootTarget;)Ljava/util/function/Supplier;
+ 274: iconst_1
+ 275: invokevirtual #820 // Method net/minecraft/commands/CommandSourceStack.m_288197_:(Ljava/util/function/Supplier;Z)V
+ 278: iconst_1
+ 279: ireturn
+
+ private static int giveLootBlock(net.minecraft.commands.CommandSourceStack, java.lang.String, net.minecraft.resources.ResourceLocation, boolean) throws com.mojang.brigadier.exceptions.CommandSyntaxException;
+ Code:
+ 0: aload_0
+ 1: invokevirtual #79 // Method net/minecraft/commands/CommandSourceStack.m_81375_:()Lnet/minecraft/server/level/ServerPlayer;
+ 4: astore 4
+ 6: aload_1
+ 7: invokestatic #778 // Method com/ogaba/sa_decor/common/loot/DecorLootConfigManager.has:(Ljava/lang/String;)Z
+ 10: ifne 28
+ 13: aload_0
+ 14: aload_1
+ 15: invokedynamic #1367, 0 // InvokeDynamic #127:makeConcatWithConstants:(Ljava/lang/String;)Ljava/lang/String;
+ 20: invokestatic #796 // InterfaceMethod net/minecraft/network/chat/Component.m_237113_:(Ljava/lang/String;)Lnet/minecraft/network/chat/MutableComponent;
+ 23: invokevirtual #800 // Method net/minecraft/commands/CommandSourceStack.m_81352_:(Lnet/minecraft/network/chat/Component;)V
+ 26: iconst_0
+ 27: ireturn
+ 28: getstatic #1676 // Field net/minecraft/core/registries/BuiltInRegistries.f_256975_:Lnet/minecraft/core/DefaultedRegistry;
+ 31: aload_2
+ 32: invokeinterface #1682, 2 // InterfaceMethod net/minecraft/core/DefaultedRegistry.m_6612_:(Lnet/minecraft/resources/ResourceLocation;)Ljava/util/Optional;
+ 37: astore 5
+ 39: aload 5
+ 41: invokevirtual #1685 // Method java/util/Optional.isEmpty:()Z
+ 44: ifne 58
+ 47: aload 5
+ 49: invokevirtual #1687 // Method java/util/Optional.get:()Ljava/lang/Object;
+ 52: getstatic #1693 // Field net/minecraft/world/level/block/Blocks.f_50016_:Lnet/minecraft/world/level/block/Block;
+ 55: if_acmpne 76
+ 58: aload_0
+ 59: aload_2
+ 60: invokestatic #1239 // Method java/lang/String.valueOf:(Ljava/lang/Object;)Ljava/lang/String;
+ 63: invokedynamic #1696, 0 // InvokeDynamic #148:makeConcatWithConstants:(Ljava/lang/String;)Ljava/lang/String;
+ 68: invokestatic #796 // InterfaceMethod net/minecraft/network/chat/Component.m_237113_:(Ljava/lang/String;)Lnet/minecraft/network/chat/MutableComponent;
+ 71: invokevirtual #800 // Method net/minecraft/commands/CommandSourceStack.m_81352_:(Lnet/minecraft/network/chat/Component;)V
+ 74: iconst_0
+ 75: ireturn
+ 76: aload 5
+ 78: invokevirtual #1687 // Method java/util/Optional.get:()Ljava/lang/Object;
+ 81: checkcast #1698 // class net/minecraft/world/level/block/Block
+ 84: astore 6
+ 86: new #1700 // class net/minecraft/world/item/ItemStack
+ 89: dup
+ 90: aload 6
+ 92: invokevirtual #1704 // Method net/minecraft/world/level/block/Block.m_5456_:()Lnet/minecraft/world/item/Item;
+ 95: invokespecial #1707 // Method net/minecraft/world/item/ItemStack."":(Lnet/minecraft/world/level/ItemLike;)V
+ 98: astore 7
+ 100: aload 7
+ 102: invokevirtual #1710 // Method net/minecraft/world/item/ItemStack.m_41619_:()Z
+ 105: ifne 119
+ 108: aload 7
+ 110: invokevirtual #1713 // Method net/minecraft/world/item/ItemStack.m_41720_:()Lnet/minecraft/world/item/Item;
+ 113: getstatic #1719 // Field net/minecraft/world/item/Items.f_41852_:Lnet/minecraft/world/item/Item;
+ 116: if_acmpne 137
+ 119: aload_0
+ 120: aload_2
+ 121: invokestatic #1239 // Method java/lang/String.valueOf:(Ljava/lang/Object;)Ljava/lang/String;
+ 124: invokedynamic #1722, 0 // InvokeDynamic #149:makeConcatWithConstants:(Ljava/lang/String;)Ljava/lang/String;
+ 129: invokestatic #796 // InterfaceMethod net/minecraft/network/chat/Component.m_237113_:(Ljava/lang/String;)Lnet/minecraft/network/chat/MutableComponent;
+ 132: invokevirtual #800 // Method net/minecraft/commands/CommandSourceStack.m_81352_:(Lnet/minecraft/network/chat/Component;)V
+ 135: iconst_0
+ 136: ireturn
+ 137: new #1724 // class net/minecraft/nbt/CompoundTag
+ 140: dup
+ 141: invokespecial #1725 // Method net/minecraft/nbt/CompoundTag."":()V
+ 144: astore 8
+ 146: aload 8
+ 148: ldc #185 // String config_id
+ 150: aload_1
+ 151: invokevirtual #1729 // Method net/minecraft/nbt/CompoundTag.m_128359_:(Ljava/lang/String;Ljava/lang/String;)V
+ 154: aload 8
+ 156: ldc #221 // String locked
+ 158: iload_3
+ 159: invokevirtual #1733 // Method net/minecraft/nbt/CompoundTag.m_128379_:(Ljava/lang/String;Z)V
+ 162: new #1724 // class net/minecraft/nbt/CompoundTag
+ 165: dup
+ 166: invokespecial #1725 // Method net/minecraft/nbt/CompoundTag."":()V
+ 169: astore 9
+ 171: aload 9
+ 173: ldc #46 // String sa_decor_loot_seed
+ 175: aload 8
+ 177: invokevirtual #1737 // Method net/minecraft/nbt/CompoundTag.m_128365_:(Ljava/lang/String;Lnet/minecraft/nbt/Tag;)Lnet/minecraft/nbt/Tag;
+ 180: pop
+ 181: aload 7
+ 183: invokevirtual #1741 // Method net/minecraft/world/item/ItemStack.m_41784_:()Lnet/minecraft/nbt/CompoundTag;
+ 186: ldc #49 // String BlockEntityTag
+ 188: aload 9
+ 190: invokevirtual #1737 // Method net/minecraft/nbt/CompoundTag.m_128365_:(Ljava/lang/String;Lnet/minecraft/nbt/Tag;)Lnet/minecraft/nbt/Tag;
+ 193: pop
+ 194: new #1724 // class net/minecraft/nbt/CompoundTag
+ 197: dup
+ 198: invokespecial #1725 // Method net/minecraft/nbt/CompoundTag."":()V
+ 201: astore 10
+ 203: aload 10
+ 205: ldc #185 // String config_id
+ 207: aload_1
+ 208: invokevirtual #1729 // Method net/minecraft/nbt/CompoundTag.m_128359_:(Ljava/lang/String;Ljava/lang/String;)V
+ 211: aload 10
+ 213: ldc #221 // String locked
+ 215: iload_3
+ 216: invokevirtual #1733 // Method net/minecraft/nbt/CompoundTag.m_128379_:(Ljava/lang/String;Z)V
+ 219: aload 7
+ 221: invokevirtual #1741 // Method net/minecraft/world/item/ItemStack.m_41784_:()Lnet/minecraft/nbt/CompoundTag;
+ 224: ldc #43 // String sa_decor_loot_item
+ 226: aload 10
+ 228: invokevirtual #1737 // Method net/minecraft/nbt/CompoundTag.m_128365_:(Ljava/lang/String;Lnet/minecraft/nbt/Tag;)Lnet/minecraft/nbt/Tag;
+ 231: pop
+ 232: aload 4
+ 234: invokevirtual #1745 // Method net/minecraft/server/level/ServerPlayer.m_150109_:()Lnet/minecraft/world/entity/player/Inventory;
+ 237: aload 7
+ 239: invokevirtual #1751 // Method net/minecraft/world/entity/player/Inventory.m_36054_:(Lnet/minecraft/world/item/ItemStack;)Z
+ 242: istore 11
+ 244: iload 11
+ 246: ifne 258
+ 249: aload 4
+ 251: aload 7
+ 253: iconst_0
+ 254: invokevirtual #1755 // Method net/minecraft/server/level/ServerPlayer.m_36176_:(Lnet/minecraft/world/item/ItemStack;Z)Lnet/minecraft/world/entity/item/ItemEntity;
+ 257: pop
+ 258: aload_0
+ 259: aload_2
+ 260: aload_1
+ 261: iload_3
+ 262: invokedynamic #1765, 0 // InvokeDynamic #150:get:(Lnet/minecraft/resources/ResourceLocation;Ljava/lang/String;Z)Ljava/util/function/Supplier;
+ 267: iconst_1
+ 268: invokevirtual #820 // Method net/minecraft/commands/CommandSourceStack.m_288197_:(Ljava/util/function/Supplier;Z)V
+ 271: iconst_1
+ 272: ireturn
+
+ private static int addHeldItem(net.minecraft.commands.CommandSourceStack, java.lang.String, int, int, int, float) throws com.mojang.brigadier.exceptions.CommandSyntaxException;
+ Code:
+ 0: aload_0
+ 1: invokevirtual #79 // Method net/minecraft/commands/CommandSourceStack.m_81375_:()Lnet/minecraft/server/level/ServerPlayer;
+ 4: astore 6
+ 6: aload 6
+ 8: invokevirtual #1782 // Method net/minecraft/server/level/ServerPlayer.m_21205_:()Lnet/minecraft/world/item/ItemStack;
+ 11: astore 7
+ 13: aload 7
+ 15: invokevirtual #1710 // Method net/minecraft/world/item/ItemStack.m_41619_:()Z
+ 18: ifeq 33
+ 21: aload_0
+ 22: ldc_w #1784 // String Hold an item in your main hand first.
+ 25: invokestatic #796 // InterfaceMethod net/minecraft/network/chat/Component.m_237113_:(Ljava/lang/String;)Lnet/minecraft/network/chat/MutableComponent;
+ 28: invokevirtual #800 // Method net/minecraft/commands/CommandSourceStack.m_81352_:(Lnet/minecraft/network/chat/Component;)V
+ 31: iconst_0
+ 32: ireturn
+ 33: getstatic #1787 // Field net/minecraft/core/registries/BuiltInRegistries.f_257033_:Lnet/minecraft/core/DefaultedRegistry;
+ 36: aload 7
+ 38: invokevirtual #1713 // Method net/minecraft/world/item/ItemStack.m_41720_:()Lnet/minecraft/world/item/Item;
+ 41: invokeinterface #1791, 2 // InterfaceMethod net/minecraft/core/DefaultedRegistry.m_7981_:(Ljava/lang/Object;)Lnet/minecraft/resources/ResourceLocation;
+ 46: astore 8
+ 48: aload 7
+ 50: invokevirtual #1794 // Method net/minecraft/world/item/ItemStack.m_41783_:()Lnet/minecraft/nbt/CompoundTag;
+ 53: astore 9
+ 55: aload 9
+ 57: ifnull 68
+ 60: aload 9
+ 62: invokevirtual #1797 // Method net/minecraft/nbt/CompoundTag.m_128456_:()Z
+ 65: ifeq 72
+ 68: aconst_null
+ 69: goto 77
+ 72: aload 9
+ 74: invokevirtual #1800 // Method net/minecraft/nbt/CompoundTag.toString:()Ljava/lang/String;
+ 77: astore 10
+ 79: aload_0
+ 80: aload_1
+ 81: aload 8
+ 83: invokevirtual #1801 // Method net/minecraft/resources/ResourceLocation.toString:()Ljava/lang/String;
+ 86: iload_2
+ 87: iload_3
+ 88: iload 4
+ 90: fload 5
+ 92: aload 10
+ 94: invokestatic #1805 // Method addEntry:(Lnet/minecraft/commands/CommandSourceStack;Ljava/lang/String;Ljava/lang/String;IIIFLjava/lang/String;)I
+ 97: ireturn
+
+ private static int addItemById(net.minecraft.commands.CommandSourceStack, java.lang.String, net.minecraft.resources.ResourceLocation, int, int, int, float);
+ Code:
+ 0: getstatic #1787 // Field net/minecraft/core/registries/BuiltInRegistries.f_257033_:Lnet/minecraft/core/DefaultedRegistry;
+ 3: aload_2
+ 4: invokeinterface #1815, 2 // InterfaceMethod net/minecraft/core/DefaultedRegistry.m_7804_:(Lnet/minecraft/resources/ResourceLocation;)Z
+ 9: ifne 30
+ 12: aload_0
+ 13: aload_2
+ 14: invokestatic #1239 // Method java/lang/String.valueOf:(Ljava/lang/Object;)Ljava/lang/String;
+ 17: invokedynamic #1818, 0 // InvokeDynamic #151:makeConcatWithConstants:(Ljava/lang/String;)Ljava/lang/String;
+ 22: invokestatic #796 // InterfaceMethod net/minecraft/network/chat/Component.m_237113_:(Ljava/lang/String;)Lnet/minecraft/network/chat/MutableComponent;
+ 25: invokevirtual #800 // Method net/minecraft/commands/CommandSourceStack.m_81352_:(Lnet/minecraft/network/chat/Component;)V
+ 28: iconst_0
+ 29: ireturn
+ 30: aload_0
+ 31: aload_1
+ 32: aload_2
+ 33: invokevirtual #1801 // Method net/minecraft/resources/ResourceLocation.toString:()Ljava/lang/String;
+ 36: iload_3
+ 37: iload 4
+ 39: iload 5
+ 41: fload 6
+ 43: invokestatic #1821 // Method addEntry:(Lnet/minecraft/commands/CommandSourceStack;Ljava/lang/String;Ljava/lang/String;IIIF)I
+ 46: ireturn
+
+ private static int addLootTable(net.minecraft.commands.CommandSourceStack, java.lang.String, net.minecraft.resources.ResourceLocation);
+ Code:
+ 0: aload_1
+ 1: invokestatic #778 // Method com/ogaba/sa_decor/common/loot/DecorLootConfigManager.has:(Ljava/lang/String;)Z
+ 4: ifne 22
+ 7: aload_0
+ 8: aload_1
+ 9: invokedynamic #1367, 0 // InvokeDynamic #127:makeConcatWithConstants:(Ljava/lang/String;)Ljava/lang/String;
+ 14: invokestatic #796 // InterfaceMethod net/minecraft/network/chat/Component.m_237113_:(Ljava/lang/String;)Lnet/minecraft/network/chat/MutableComponent;
+ 17: invokevirtual #800 // Method net/minecraft/commands/CommandSourceStack.m_81352_:(Lnet/minecraft/network/chat/Component;)V
+ 20: iconst_0
+ 21: ireturn
+ 22: aload_1
+ 23: aload_2
+ 24: invokevirtual #1801 // Method net/minecraft/resources/ResourceLocation.toString:()Ljava/lang/String;
+ 27: invokestatic #1826 // Method com/ogaba/sa_decor/common/loot/DecorLootConfigManager.addLootTableToConfig:(Ljava/lang/String;Ljava/lang/String;)Z
+ 30: istore_3
+ 31: iload_3
+ 32: ifne 50
+ 35: aload_0
+ 36: aload_1
+ 37: invokedynamic #1829, 0 // InvokeDynamic #152:makeConcatWithConstants:(Ljava/lang/String;)Ljava/lang/String;
+ 42: invokestatic #796 // InterfaceMethod net/minecraft/network/chat/Component.m_237113_:(Ljava/lang/String;)Lnet/minecraft/network/chat/MutableComponent;
+ 45: invokevirtual #800 // Method net/minecraft/commands/CommandSourceStack.m_81352_:(Lnet/minecraft/network/chat/Component;)V
+ 48: iconst_0
+ 49: ireturn
+ 50: aload_0
+ 51: aload_2
+ 52: aload_1
+ 53: invokedynamic #1837, 0 // InvokeDynamic #153:get:(Lnet/minecraft/resources/ResourceLocation;Ljava/lang/String;)Ljava/util/function/Supplier;
+ 58: iconst_1
+ 59: invokevirtual #820 // Method net/minecraft/commands/CommandSourceStack.m_288197_:(Ljava/util/function/Supplier;Z)V
+ 62: iconst_1
+ 63: ireturn
+
+ private static int addTagById(net.minecraft.commands.CommandSourceStack, java.lang.String, net.minecraft.resources.ResourceLocation, int, int, int, float);
+ Code:
+ 0: aload_0
+ 1: aload_1
+ 2: aload_2
+ 3: invokestatic #1239 // Method java/lang/String.valueOf:(Ljava/lang/Object;)Ljava/lang/String;
+ 6: invokedynamic #1842, 0 // InvokeDynamic #154:makeConcatWithConstants:(Ljava/lang/String;)Ljava/lang/String;
+ 11: iload_3
+ 12: iload 4
+ 14: iload 5
+ 16: fload 6
+ 18: invokestatic #1821 // Method addEntry:(Lnet/minecraft/commands/CommandSourceStack;Ljava/lang/String;Ljava/lang/String;IIIF)I
+ 21: ireturn
+
+ private static int addEntry(net.minecraft.commands.CommandSourceStack, java.lang.String, java.lang.String, int, int, int, float);
+ Code:
+ 0: aload_0
+ 1: aload_1
+ 2: aload_2
+ 3: iload_3
+ 4: iload 4
+ 6: iload 5
+ 8: fload 6
+ 10: aconst_null
+ 11: invokestatic #1805 // Method addEntry:(Lnet/minecraft/commands/CommandSourceStack;Ljava/lang/String;Ljava/lang/String;IIIFLjava/lang/String;)I
+ 14: ireturn
+
+ private static int addEntry(net.minecraft.commands.CommandSourceStack, java.lang.String, java.lang.String, int, int, int, float, java.lang.String);
+ Code:
+ 0: aload_1
+ 1: invokestatic #778 // Method com/ogaba/sa_decor/common/loot/DecorLootConfigManager.has:(Ljava/lang/String;)Z
+ 4: ifne 22
+ 7: aload_0
+ 8: aload_1
+ 9: invokedynamic #1367, 0 // InvokeDynamic #127:makeConcatWithConstants:(Ljava/lang/String;)Ljava/lang/String;
+ 14: invokestatic #796 // InterfaceMethod net/minecraft/network/chat/Component.m_237113_:(Ljava/lang/String;)Lnet/minecraft/network/chat/MutableComponent;
+ 17: invokevirtual #800 // Method net/minecraft/commands/CommandSourceStack.m_81352_:(Lnet/minecraft/network/chat/Component;)V
+ 20: iconst_0
+ 21: ireturn
+ 22: aload_1
+ 23: aload_2
+ 24: iload_3
+ 25: iload 4
+ 27: iload 5
+ 29: fload 6
+ 31: aload 7
+ 33: invokestatic #1848 // Method com/ogaba/sa_decor/common/loot/DecorLootConfigManager.addEntryToConfig:(Ljava/lang/String;Ljava/lang/String;IIIFLjava/lang/String;)Z
+ 36: istore 8
+ 38: iload 8
+ 40: ifne 58
+ 43: aload_0
+ 44: aload_1
+ 45: invokedynamic #1851, 0 // InvokeDynamic #155:makeConcatWithConstants:(Ljava/lang/String;)Ljava/lang/String;
+ 50: invokestatic #796 // InterfaceMethod net/minecraft/network/chat/Component.m_237113_:(Ljava/lang/String;)Lnet/minecraft/network/chat/MutableComponent;
+ 53: invokevirtual #800 // Method net/minecraft/commands/CommandSourceStack.m_81352_:(Lnet/minecraft/network/chat/Component;)V
+ 56: iconst_0
+ 57: ireturn
+ 58: aload 7
+ 60: ifnull 75
+ 63: aload 7
+ 65: invokevirtual #1111 // Method java/lang/String.isBlank:()Z
+ 68: ifne 75
+ 71: iconst_1
+ 72: goto 76
+ 75: iconst_0
+ 76: istore 9
+ 78: aload_0
+ 79: aload_2
+ 80: aload_1
+ 81: iload_3
+ 82: iload 4
+ 84: iload 5
+ 86: fload 6
+ 88: iload 9
+ 90: invokedynamic #1859, 0 // InvokeDynamic #156:get:(Ljava/lang/String;Ljava/lang/String;IIIFZ)Ljava/util/function/Supplier;
+ 95: iconst_1
+ 96: invokevirtual #820 // Method net/minecraft/commands/CommandSourceStack.m_288197_:(Ljava/util/function/Supplier;Z)V
+ 99: iconst_1
+ 100: ireturn
+
+ private static com.ogaba.sa_decor.command.SADecorLootCommand$LootTarget getTarget(net.minecraft.commands.CommandSourceStack) throws com.mojang.brigadier.exceptions.CommandSyntaxException;
+ Code:
+ 0: aload_0
+ 1: invokevirtual #79 // Method net/minecraft/commands/CommandSourceStack.m_81375_:()Lnet/minecraft/server/level/ServerPlayer;
+ 4: astore_1
+ 5: aload_1
+ 6: invokevirtual #1863 // Method net/minecraft/server/level/ServerPlayer.m_284548_:()Lnet/minecraft/server/level/ServerLevel;
+ 9: astore_2
+ 10: aload_1
+ 11: invokevirtual #1867 // Method net/minecraft/server/level/ServerPlayer.m_146892_:()Lnet/minecraft/world/phys/Vec3;
+ 14: astore_3
+ 15: aload_3
+ 16: aload_1
+ 17: fconst_1
+ 18: invokevirtual #1871 // Method net/minecraft/server/level/ServerPlayer.m_20252_:(F)Lnet/minecraft/world/phys/Vec3;
+ 21: ldc2_w #52 // double 8.0d
+ 24: invokevirtual #1877 // Method net/minecraft/world/phys/Vec3.m_82490_:(D)Lnet/minecraft/world/phys/Vec3;
+ 27: invokevirtual #1881 // Method net/minecraft/world/phys/Vec3.m_82549_:(Lnet/minecraft/world/phys/Vec3;)Lnet/minecraft/world/phys/Vec3;
+ 30: astore 4
+ 32: aload_2
+ 33: new #25 // class net/minecraft/world/level/ClipContext
+ 36: dup
+ 37: aload_3
+ 38: aload 4
+ 40: getstatic #1885 // Field net/minecraft/world/level/ClipContext$Block.OUTLINE:Lnet/minecraft/world/level/ClipContext$Block;
+ 43: getstatic #1889 // Field net/minecraft/world/level/ClipContext$Fluid.NONE:Lnet/minecraft/world/level/ClipContext$Fluid;
+ 46: aload_1
+ 47: invokespecial #1892 // Method net/minecraft/world/level/ClipContext."":(Lnet/minecraft/world/phys/Vec3;Lnet/minecraft/world/phys/Vec3;Lnet/minecraft/world/level/ClipContext$Block;Lnet/minecraft/world/level/ClipContext$Fluid;Lnet/minecraft/world/entity/Entity;)V
+ 50: invokevirtual #1898 // Method net/minecraft/server/level/ServerLevel.m_45547_:(Lnet/minecraft/world/level/ClipContext;)Lnet/minecraft/world/phys/BlockHitResult;
+ 53: astore 5
+ 55: aload 5
+ 57: invokevirtual #1904 // Method net/minecraft/world/phys/BlockHitResult.m_6662_:()Lnet/minecraft/world/phys/HitResult$Type;
+ 60: getstatic #1908 // Field net/minecraft/world/phys/HitResult$Type.BLOCK:Lnet/minecraft/world/phys/HitResult$Type;
+ 63: if_acmpeq 73
+ 66: getstatic #1910 // Field NO_BLOCK_HIT:Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType;
+ 69: invokevirtual #1915 // Method com/mojang/brigadier/exceptions/SimpleCommandExceptionType.create:()Lcom/mojang/brigadier/exceptions/CommandSyntaxException;
+ 72: athrow
+ 73: aload_2
+ 74: aload 5
+ 76: invokevirtual #1918 // Method net/minecraft/world/phys/BlockHitResult.m_82425_:()Lnet/minecraft/core/BlockPos;
+ 79: invokestatic #1922 // Method com/ogaba/sa_decor/common/loot/DecorLootTargeting.findLootContainer:(Lnet/minecraft/world/level/Level;Lnet/minecraft/core/BlockPos;)Ljava/util/Optional;
+ 82: getstatic #1924 // Field NOT_LOOT_CONTAINER:Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType;
+ 85: dup
+ 86: invokestatic #1929 // Method java/util/Objects.requireNonNull:(Ljava/lang/Object;)Ljava/lang/Object;
+ 89: pop
+ 90: invokedynamic #1934, 0 // InvokeDynamic #157:get:(Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType;)Ljava/util/function/Supplier;
+ 95: invokevirtual #1938 // Method java/util/Optional.orElseThrow:(Ljava/util/function/Supplier;)Ljava/lang/Object;
+ 98: checkcast #18 // class com/ogaba/sa_decor/common/loot/DecorLootTargeting$Target
+ 101: astore 6
+ 103: new #7 // class com/ogaba/sa_decor/command/SADecorLootCommand$LootTarget
+ 106: dup
+ 107: aload_2
+ 108: aload 6
+ 110: invokevirtual #1939 // Method com/ogaba/sa_decor/common/loot/DecorLootTargeting$Target.pos:()Lnet/minecraft/core/BlockPos;
+ 113: aload 6
+ 115: invokevirtual #1940 // Method com/ogaba/sa_decor/common/loot/DecorLootTargeting$Target.blockEntity:()Lnet/minecraft/world/level/block/entity/BlockEntity;
+ 118: aload 6
+ 120: invokevirtual #1941 // Method com/ogaba/sa_decor/common/loot/DecorLootTargeting$Target.data:()Lcom/ogaba/sa_decor/common/loot/DecorLootContainerData;
+ 123: aload 6
+ 125: invokevirtual #1942 // Method com/ogaba/sa_decor/common/loot/DecorLootTargeting$Target.container:()Lnet/minecraft/world/Container;
+ 128: invokespecial #1945 // Method com/ogaba/sa_decor/command/SADecorLootCommand$LootTarget."":(Lnet/minecraft/server/level/ServerLevel;Lnet/minecraft/core/BlockPos;Lnet/minecraft/world/level/block/entity/BlockEntity;Lcom/ogaba/sa_decor/common/loot/DecorLootContainerData;Lnet/minecraft/world/Container;)V
+ 131: areturn
+
+ private static void saveTarget(com.ogaba.sa_decor.command.SADecorLootCommand$LootTarget);
+ Code:
+ 0: aload_0
+ 1: invokevirtual #1430 // Method com/ogaba/sa_decor/command/SADecorLootCommand$LootTarget.level:()Lnet/minecraft/server/level/ServerLevel;
+ 4: aload_0
+ 5: invokestatic #1450 // Method wrapTarget:(Lcom/ogaba/sa_decor/command/SADecorLootCommand$LootTarget;)Lcom/ogaba/sa_decor/common/loot/DecorLootTargeting$Target;
+ 8: invokestatic #1953 // Method com/ogaba/sa_decor/common/loot/DecorLootTargeting.saveTarget:(Lnet/minecraft/world/level/Level;Lcom/ogaba/sa_decor/common/loot/DecorLootTargeting$Target;)V
+ 11: return
+
+ private static com.ogaba.sa_decor.common.loot.DecorLootTargeting$Target wrapTarget(com.ogaba.sa_decor.command.SADecorLootCommand$LootTarget);
+ Code:
+ 0: new #18 // class com/ogaba/sa_decor/common/loot/DecorLootTargeting$Target
+ 3: dup
+ 4: aload_0
+ 5: invokevirtual #1439 // Method com/ogaba/sa_decor/command/SADecorLootCommand$LootTarget.pos:()Lnet/minecraft/core/BlockPos;
+ 8: aload_0
+ 9: invokevirtual #1519 // Method com/ogaba/sa_decor/command/SADecorLootCommand$LootTarget.blockEntity:()Lnet/minecraft/world/level/block/entity/BlockEntity;
+ 12: aload_0
+ 13: invokevirtual #1519 // Method com/ogaba/sa_decor/command/SADecorLootCommand$LootTarget.blockEntity:()Lnet/minecraft/world/level/block/entity/BlockEntity;
+ 16: astore_2
+ 17: aload_2
+ 18: instanceof #1955 // class com/ogaba/sa_decor/common/loot/DecorLootContainer
+ 21: ifeq 33
+ 24: aload_2
+ 25: checkcast #1955 // class com/ogaba/sa_decor/common/loot/DecorLootContainer
+ 28: astore_1
+ 29: aload_1
+ 30: goto 34
+ 33: aconst_null
+ 34: aload_0
+ 35: invokevirtual #1503 // Method com/ogaba/sa_decor/command/SADecorLootCommand$LootTarget.container:()Lnet/minecraft/world/Container;
+ 38: aload_0
+ 39: invokevirtual #1471 // Method com/ogaba/sa_decor/command/SADecorLootCommand$LootTarget.data:()Lcom/ogaba/sa_decor/common/loot/DecorLootContainerData;
+ 42: invokespecial #1960 // Method com/ogaba/sa_decor/common/loot/DecorLootTargeting$Target."":(Lnet/minecraft/core/BlockPos;Lnet/minecraft/world/level/block/entity/BlockEntity;Lcom/ogaba/sa_decor/common/loot/DecorLootContainer;Lnet/minecraft/world/Container;Lcom/ogaba/sa_decor/common/loot/DecorLootContainerData;)V
+ 45: areturn
+
+ private static net.minecraft.resources.ResourceLocation parseResourceLocation(java.lang.String);
+ Code:
+ 0: aload_0
+ 1: ldc_w #1966 // String :
+ 4: invokevirtual #1970 // Method java/lang/String.contains:(Ljava/lang/CharSequence;)Z
+ 7: ifeq 14
+ 10: aload_0
+ 11: goto 20
+ 14: aload_0
+ 15: invokedynamic #1973, 0 // InvokeDynamic #158:makeConcatWithConstants:(Ljava/lang/String;)Ljava/lang/String;
+ 20: astore_1
+ 21: aload_1
+ 22: invokestatic #1976 // Method net/minecraft/resources/ResourceLocation.m_135820_:(Ljava/lang/String;)Lnet/minecraft/resources/ResourceLocation;
+ 25: astore_2
+ 26: aload_2
+ 27: ifnonnull 46
+ 30: new #1757 // class net/minecraft/resources/ResourceLocation
+ 33: dup
+ 34: ldc_w #1978 // String minecraft
+ 37: ldc_w #1980 // String air
+ 40: invokespecial #1982 // Method net/minecraft/resources/ResourceLocation."":(Ljava/lang/String;Ljava/lang/String;)V
+ 43: goto 47
+ 46: aload_2
+ 47: areturn
+
+ private static java.lang.String formatContainerSummary(net.minecraft.world.Container);
+ Code:
+ 0: aload_0
+ 1: invokestatic #1990 // Method countNonEmptySlots:(Lnet/minecraft/world/Container;)I
+ 4: aload_0
+ 5: invokeinterface #1993, 1 // InterfaceMethod net/minecraft/world/Container.m_6643_:()I
+ 10: invokedynamic #1998, 0 // InvokeDynamic #159:makeConcatWithConstants:(II)Ljava/lang/String;
+ 15: areturn
+
+ private static int countNonEmptySlots(net.minecraft.world.Container);
+ Code:
+ 0: iconst_0
+ 1: istore_1
+ 2: iconst_0
+ 3: istore_2
+ 4: iload_2
+ 5: aload_0
+ 6: invokeinterface #1993, 1 // InterfaceMethod net/minecraft/world/Container.m_6643_:()I
+ 11: if_icmpge 36
+ 14: aload_0
+ 15: iload_2
+ 16: invokeinterface #2003, 2 // InterfaceMethod net/minecraft/world/Container.m_8020_:(I)Lnet/minecraft/world/item/ItemStack;
+ 21: invokevirtual #1710 // Method net/minecraft/world/item/ItemStack.m_41619_:()Z
+ 24: ifne 30
+ 27: iinc 1, 1
+ 30: iinc 2, 1
+ 33: goto 4
+ 36: iload_1
+ 37: ireturn
+
+ private static java.lang.String formatPos(net.minecraft.core.BlockPos);
+ Code:
+ 0: aload_0
+ 1: invokevirtual #2008 // Method net/minecraft/core/BlockPos.m_123341_:()I
+ 4: aload_0
+ 5: invokevirtual #2011 // Method net/minecraft/core/BlockPos.m_123342_:()I
+ 8: aload_0
+ 9: invokevirtual #2014 // Method net/minecraft/core/BlockPos.m_123343_:()I
+ 12: invokedynamic #2019, 0 // InvokeDynamic #160:makeConcatWithConstants:(III)Ljava/lang/String;
+ 17: areturn
+
+ private static net.minecraft.network.chat.Component lambda$addEntry$131(java.lang.String, java.lang.String, int, int, int, float, boolean);
+ Code:
+ 0: aload_0
+ 1: aload_1
+ 2: iload_2
+ 3: iload_3
+ 4: iload 4
+ 6: invokestatic #2026 // Method java/lang/Math.min:(II)I
+ 9: iload_3
+ 10: iload 4
+ 12: invokestatic #2029 // Method java/lang/Math.max:(II)I
+ 15: fload 5
+ 17: iload 6
+ 19: ifeq 28
+ 22: ldc_w #2031 // String nbt=true
+ 25: goto 31
+ 28: ldc_w #2033 // String
+ 31: invokedynamic #2038, 0 // InvokeDynamic #161:makeConcatWithConstants:(Ljava/lang/String;Ljava/lang/String;IIIFLjava/lang/String;)Ljava/lang/String;
+ 36: invokestatic #796 // InterfaceMethod net/minecraft/network/chat/Component.m_237113_:(Ljava/lang/String;)Lnet/minecraft/network/chat/MutableComponent;
+ 39: areturn
+
+ private static net.minecraft.network.chat.Component lambda$addLootTable$130(net.minecraft.resources.ResourceLocation, java.lang.String);
+ Code:
+ 0: aload_0
+ 1: invokestatic #1239 // Method java/lang/String.valueOf:(Ljava/lang/Object;)Ljava/lang/String;
+ 4: aload_1
+ 5: invokedynamic #2041, 0 // InvokeDynamic #162:makeConcatWithConstants:(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+ 10: invokestatic #796 // InterfaceMethod net/minecraft/network/chat/Component.m_237113_:(Ljava/lang/String;)Lnet/minecraft/network/chat/MutableComponent;
+ 13: areturn
+
+ private static net.minecraft.network.chat.Component lambda$giveLootBlock$129(net.minecraft.resources.ResourceLocation, java.lang.String, boolean);
+ Code:
+ 0: aload_0
+ 1: invokestatic #1239 // Method java/lang/String.valueOf:(Ljava/lang/Object;)Ljava/lang/String;
+ 4: aload_1
+ 5: iload_2
+ 6: invokedynamic #2046, 0 // InvokeDynamic #163:makeConcatWithConstants:(Ljava/lang/String;Ljava/lang/String;Z)Ljava/lang/String;
+ 11: invokestatic #796 // InterfaceMethod net/minecraft/network/chat/Component.m_237113_:(Ljava/lang/String;)Lnet/minecraft/network/chat/MutableComponent;
+ 14: areturn
+
+ private static net.minecraft.network.chat.Component lambda$generate$128(com.ogaba.sa_decor.command.SADecorLootCommand$LootTarget);
+ Code:
+ 0: aload_0
+ 1: invokevirtual #1439 // Method com/ogaba/sa_decor/command/SADecorLootCommand$LootTarget.pos:()Lnet/minecraft/core/BlockPos;
+ 4: invokestatic #2048 // Method formatPos:(Lnet/minecraft/core/BlockPos;)Ljava/lang/String;
+ 7: invokedynamic #2051, 0 // InvokeDynamic #164:makeConcatWithConstants:(Ljava/lang/String;)Ljava/lang/String;
+ 12: invokestatic #796 // InterfaceMethod net/minecraft/network/chat/Component.m_237113_:(Ljava/lang/String;)Lnet/minecraft/network/chat/MutableComponent;
+ 15: areturn
+
+ private static net.minecraft.network.chat.Component lambda$generate$127(com.ogaba.sa_decor.command.SADecorLootCommand$LootTarget);
+ Code:
+ 0: aload_0
+ 1: invokevirtual #1439 // Method com/ogaba/sa_decor/command/SADecorLootCommand$LootTarget.pos:()Lnet/minecraft/core/BlockPos;
+ 4: invokestatic #2048 // Method formatPos:(Lnet/minecraft/core/BlockPos;)Ljava/lang/String;
+ 7: invokedynamic #2054, 0 // InvokeDynamic #165:makeConcatWithConstants:(Ljava/lang/String;)Ljava/lang/String;
+ 12: invokestatic #796 // InterfaceMethod net/minecraft/network/chat/Component.m_237113_:(Ljava/lang/String;)Lnet/minecraft/network/chat/MutableComponent;
+ 15: areturn
+
+ private static net.minecraft.network.chat.Component lambda$generate$126(com.ogaba.sa_decor.command.SADecorLootCommand$LootTarget);
+ Code:
+ 0: aload_0
+ 1: invokevirtual #1439 // Method com/ogaba/sa_decor/command/SADecorLootCommand$LootTarget.pos:()Lnet/minecraft/core/BlockPos;
+ 4: invokestatic #2048 // Method formatPos:(Lnet/minecraft/core/BlockPos;)Ljava/lang/String;
+ 7: invokedynamic #2057, 0 // InvokeDynamic #166:makeConcatWithConstants:(Ljava/lang/String;)Ljava/lang/String;
+ 12: invokestatic #796 // InterfaceMethod net/minecraft/network/chat/Component.m_237113_:(Ljava/lang/String;)Lnet/minecraft/network/chat/MutableComponent;
+ 15: areturn
+
+ private static net.minecraft.network.chat.Component lambda$info$125(com.ogaba.sa_decor.command.SADecorLootCommand$LootTarget, com.ogaba.sa_decor.common.loot.DecorLootContainerData, boolean, boolean, com.ogaba.sa_decor.common.loot.DecorLootConfig, net.minecraft.server.level.ServerPlayer);
+ Code:
+ 0: aload_0
+ 1: invokevirtual #1439 // Method com/ogaba/sa_decor/command/SADecorLootCommand$LootTarget.pos:()Lnet/minecraft/core/BlockPos;
+ 4: invokestatic #2048 // Method formatPos:(Lnet/minecraft/core/BlockPos;)Ljava/lang/String;
+ 7: aload_1
+ 8: invokevirtual #1602 // Method com/ogaba/sa_decor/common/loot/DecorLootContainerData.configId:()Ljava/lang/String;
+ 11: aload_1
+ 12: invokevirtual #2060 // Method com/ogaba/sa_decor/common/loot/DecorLootContainerData.isLocked:()Z
+ 15: aload_1
+ 16: invokevirtual #2063 // Method com/ogaba/sa_decor/common/loot/DecorLootContainerData.isSpawnedEmpty:()Z
+ 19: iload_2
+ 20: iload_3
+ 21: ifeq 30
+ 24: ldc_w #2065 // String lootr
+ 27: goto 43
+ 30: iload_2
+ 31: ifeq 40
+ 34: ldc_w #2067 // String sa_native
+ 37: goto 43
+ 40: ldc_w #2069 // String shared
+ 43: aload 4
+ 45: ifnull 63
+ 48: aload 4
+ 50: invokevirtual #2073 // Method com/ogaba/sa_decor/common/loot/DecorLootConfig.openPass:()Lcom/ogaba/sa_decor/common/loot/DecorLootOpenPass;
+ 53: invokevirtual #2077 // Method com/ogaba/sa_decor/common/loot/DecorLootOpenPass.enabled:()Z
+ 56: ifeq 63
+ 59: iconst_1
+ 60: goto 64
+ 63: iconst_0
+ 64: aload_1
+ 65: invokevirtual #2080 // Method com/ogaba/sa_decor/common/loot/DecorLootContainerData.isSearched:()Z
+ 68: aload_1
+ 69: invokevirtual #2084 // Method com/ogaba/sa_decor/common/loot/DecorLootContainerData.lastGeneratedGameTime:()J
+ 72: aload_1
+ 73: aload 5
+ 75: invokevirtual #1644 // Method net/minecraft/server/level/ServerPlayer.m_20148_:()Ljava/util/UUID;
+ 78: invokevirtual #2087 // Method com/ogaba/sa_decor/common/loot/DecorLootContainerData.isSearched:(Ljava/util/UUID;)Z
+ 81: aload_1
+ 82: aload 5
+ 84: invokevirtual #1644 // Method net/minecraft/server/level/ServerPlayer.m_20148_:()Ljava/util/UUID;
+ 87: invokevirtual #2090 // Method com/ogaba/sa_decor/common/loot/DecorLootContainerData.lastGeneratedGameTime:(Ljava/util/UUID;)J
+ 90: aload_0
+ 91: invokevirtual #1503 // Method com/ogaba/sa_decor/command/SADecorLootCommand$LootTarget.container:()Lnet/minecraft/world/Container;
+ 94: invokestatic #2092 // Method formatContainerSummary:(Lnet/minecraft/world/Container;)Ljava/lang/String;
+ 97: invokedynamic #2097, 0 // InvokeDynamic #167:makeConcatWithConstants:(Ljava/lang/String;Ljava/lang/String;ZZZLjava/lang/String;ZZJZJLjava/lang/String;)Ljava/lang/String;
+ 102: invokestatic #796 // InterfaceMethod net/minecraft/network/chat/Component.m_237113_:(Ljava/lang/String;)Lnet/minecraft/network/chat/MutableComponent;
+ 105: areturn
+
+ private static net.minecraft.network.chat.Component lambda$info$124(com.ogaba.sa_decor.command.SADecorLootCommand$LootTarget);
+ Code:
+ 0: aload_0
+ 1: invokevirtual #1439 // Method com/ogaba/sa_decor/command/SADecorLootCommand$LootTarget.pos:()Lnet/minecraft/core/BlockPos;
+ 4: invokestatic #2048 // Method formatPos:(Lnet/minecraft/core/BlockPos;)Ljava/lang/String;
+ 7: invokedynamic #2100, 0 // InvokeDynamic #168:makeConcatWithConstants:(Ljava/lang/String;)Ljava/lang/String;
+ 12: invokestatic #796 // InterfaceMethod net/minecraft/network/chat/Component.m_237113_:(Ljava/lang/String;)Lnet/minecraft/network/chat/MutableComponent;
+ 15: areturn
+
+ private static net.minecraft.network.chat.Component lambda$refresh$123(com.ogaba.sa_decor.command.SADecorLootCommand$LootTarget);
+ Code:
+ 0: aload_0
+ 1: invokevirtual #1439 // Method com/ogaba/sa_decor/command/SADecorLootCommand$LootTarget.pos:()Lnet/minecraft/core/BlockPos;
+ 4: invokestatic #2048 // Method formatPos:(Lnet/minecraft/core/BlockPos;)Ljava/lang/String;
+ 7: invokedynamic #2103, 0 // InvokeDynamic #169:makeConcatWithConstants:(Ljava/lang/String;)Ljava/lang/String;
+ 12: invokestatic #796 // InterfaceMethod net/minecraft/network/chat/Component.m_237113_:(Ljava/lang/String;)Lnet/minecraft/network/chat/MutableComponent;
+ 15: areturn
+
+ private static net.minecraft.network.chat.Component lambda$respawnNow$122(com.ogaba.sa_decor.command.SADecorLootCommand$LootTarget);
+ Code:
+ 0: aload_0
+ 1: invokevirtual #1439 // Method com/ogaba/sa_decor/command/SADecorLootCommand$LootTarget.pos:()Lnet/minecraft/core/BlockPos;
+ 4: invokestatic #2048 // Method formatPos:(Lnet/minecraft/core/BlockPos;)Ljava/lang/String;
+ 7: invokedynamic #2106, 0 // InvokeDynamic #170:makeConcatWithConstants:(Ljava/lang/String;)Ljava/lang/String;
+ 12: invokestatic #796 // InterfaceMethod net/minecraft/network/chat/Component.m_237113_:(Ljava/lang/String;)Lnet/minecraft/network/chat/MutableComponent;
+ 15: areturn
+
+ private static net.minecraft.network.chat.Component lambda$lock$121(com.ogaba.sa_decor.command.SADecorLootCommand$LootTarget, boolean);
+ Code:
+ 0: aload_0
+ 1: invokevirtual #1439 // Method com/ogaba/sa_decor/command/SADecorLootCommand$LootTarget.pos:()Lnet/minecraft/core/BlockPos;
+ 4: invokestatic #2048 // Method formatPos:(Lnet/minecraft/core/BlockPos;)Ljava/lang/String;
+ 7: iload_1
+ 8: invokedynamic #2111, 0 // InvokeDynamic #171:makeConcatWithConstants:(Ljava/lang/String;Z)Ljava/lang/String;
+ 13: invokestatic #796 // InterfaceMethod net/minecraft/network/chat/Component.m_237113_:(Ljava/lang/String;)Lnet/minecraft/network/chat/MutableComponent;
+ 16: areturn
+
+ private static net.minecraft.network.chat.Component lambda$reset$120(com.ogaba.sa_decor.command.SADecorLootCommand$LootTarget, com.ogaba.sa_decor.common.loot.DecorLootContainerData);
+ Code:
+ 0: aload_0
+ 1: invokevirtual #1439 // Method com/ogaba/sa_decor/command/SADecorLootCommand$LootTarget.pos:()Lnet/minecraft/core/BlockPos;
+ 4: invokestatic #2048 // Method formatPos:(Lnet/minecraft/core/BlockPos;)Ljava/lang/String;
+ 7: aload_1
+ 8: invokevirtual #1602 // Method com/ogaba/sa_decor/common/loot/DecorLootContainerData.configId:()Ljava/lang/String;
+ 11: invokedynamic #2114, 0 // InvokeDynamic #172:makeConcatWithConstants:(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+ 16: invokestatic #796 // InterfaceMethod net/minecraft/network/chat/Component.m_237113_:(Ljava/lang/String;)Lnet/minecraft/network/chat/MutableComponent;
+ 19: areturn
+
+ private static net.minecraft.network.chat.Component lambda$clearInventory$119(com.ogaba.sa_decor.command.SADecorLootCommand$LootTarget);
+ Code:
+ 0: aload_0
+ 1: invokevirtual #1439 // Method com/ogaba/sa_decor/command/SADecorLootCommand$LootTarget.pos:()Lnet/minecraft/core/BlockPos;
+ 4: invokestatic #2048 // Method formatPos:(Lnet/minecraft/core/BlockPos;)Ljava/lang/String;
+ 7: invokedynamic #2117, 0 // InvokeDynamic #173:makeConcatWithConstants:(Ljava/lang/String;)Ljava/lang/String;
+ 12: invokestatic #796 // InterfaceMethod net/minecraft/network/chat/Component.m_237113_:(Ljava/lang/String;)Lnet/minecraft/network/chat/MutableComponent;
+ 15: areturn
+
+ private static net.minecraft.network.chat.Component lambda$clear$118(com.ogaba.sa_decor.command.SADecorLootCommand$LootTarget);
+ Code:
+ 0: aload_0
+ 1: invokevirtual #1439 // Method com/ogaba/sa_decor/command/SADecorLootCommand$LootTarget.pos:()Lnet/minecraft/core/BlockPos;
+ 4: invokestatic #2048 // Method formatPos:(Lnet/minecraft/core/BlockPos;)Ljava/lang/String;
+ 7: invokedynamic #2120, 0 // InvokeDynamic #174:makeConcatWithConstants:(Ljava/lang/String;)Ljava/lang/String;
+ 12: invokestatic #796 // InterfaceMethod net/minecraft/network/chat/Component.m_237113_:(Ljava/lang/String;)Lnet/minecraft/network/chat/MutableComponent;
+ 15: areturn
+
+ private static net.minecraft.network.chat.Component lambda$set$117(com.ogaba.sa_decor.command.SADecorLootCommand$LootTarget, java.lang.String, boolean);
+ Code:
+ 0: aload_0
+ 1: invokevirtual #1439 // Method com/ogaba/sa_decor/command/SADecorLootCommand$LootTarget.pos:()Lnet/minecraft/core/BlockPos;
+ 4: invokestatic #2048 // Method formatPos:(Lnet/minecraft/core/BlockPos;)Ljava/lang/String;
+ 7: aload_1
+ 8: iload_2
+ 9: invokedynamic #2123, 0 // InvokeDynamic #175:makeConcatWithConstants:(Ljava/lang/String;Ljava/lang/String;Z)Ljava/lang/String;
+ 14: invokestatic #796 // InterfaceMethod net/minecraft/network/chat/Component.m_237113_:(Ljava/lang/String;)Lnet/minecraft/network/chat/MutableComponent;
+ 17: areturn
+
+ private static net.minecraft.network.chat.Component lambda$updateConfigFlag$116(java.lang.String, java.lang.String, boolean);
+ Code:
+ 0: aload_0
+ 1: aload_1
+ 2: iload_2
+ 3: invokedynamic #2126, 0 // InvokeDynamic #176:makeConcatWithConstants:(Ljava/lang/String;Ljava/lang/String;Z)Ljava/lang/String;
+ 8: invokestatic #796 // InterfaceMethod net/minecraft/network/chat/Component.m_237113_:(Ljava/lang/String;)Lnet/minecraft/network/chat/MutableComponent;
+ 11: areturn
+
+ private static net.minecraft.network.chat.Component lambda$setConfigRespawn$115(java.lang.String, boolean, int, boolean);
+ Code:
+ 0: aload_0
+ 1: iload_1
+ 2: iload_2
+ 3: iload_3
+ 4: invokedynamic #2131, 0 // InvokeDynamic #177:makeConcatWithConstants:(Ljava/lang/String;ZIZ)Ljava/lang/String;
+ 9: invokestatic #796 // InterfaceMethod net/minecraft/network/chat/Component.m_237113_:(Ljava/lang/String;)Lnet/minecraft/network/chat/MutableComponent;
+ 12: areturn
+
+ private static net.minecraft.network.chat.Component lambda$setConfigEmpty$114(java.lang.String, boolean, float);
+ Code:
+ 0: aload_0
+ 1: iload_1
+ 2: fconst_0
+ 3: fconst_1
+ 4: fload_2
+ 5: invokestatic #2134 // Method java/lang/Math.min:(FF)F
+ 8: invokestatic #2136 // Method java/lang/Math.max:(FF)F
+ 11: invokedynamic #2141, 0 // InvokeDynamic #178:makeConcatWithConstants:(Ljava/lang/String;ZF)Ljava/lang/String;
+ 16: invokestatic #796 // InterfaceMethod net/minecraft/network/chat/Component.m_237113_:(Ljava/lang/String;)Lnet/minecraft/network/chat/MutableComponent;
+ 19: areturn
+
+ private static boolean lambda$setConfigLock$113(java.lang.String, boolean);
+ Code:
+ 0: aload_0
+ 1: iload_1
+ 2: invokestatic #2144 // Method com/ogaba/sa_decor/common/loot/DecorLootConfigManager.setLockEnabled:(Ljava/lang/String;Z)Z
+ 5: ireturn
+
+ private static boolean lambda$setConfigSearch$112(java.lang.String, boolean);
+ Code:
+ 0: aload_0
+ 1: iload_1
+ 2: invokestatic #2147 // Method com/ogaba/sa_decor/common/loot/DecorLootConfigManager.setSearchEnabled:(Ljava/lang/String;Z)Z
+ 5: ireturn
+
+ private static boolean lambda$setConfigPerPlayer$111(java.lang.String, boolean);
+ Code:
+ 0: aload_0
+ 1: iload_1
+ 2: invokestatic #2150 // Method com/ogaba/sa_decor/common/loot/DecorLootConfigManager.setPerPlayer:(Ljava/lang/String;Z)Z
+ 5: ireturn
+
+ private static net.minecraft.network.chat.Component lambda$createConfig$110(java.lang.String, boolean, boolean, boolean);
+ Code:
+ 0: aload_0
+ 1: aload_0
+ 2: invokestatic #2154 // Method com/ogaba/sa_decor/common/loot/DecorLootConfigManager.getConfigPath:(Ljava/lang/String;)Ljava/nio/file/Path;
+ 5: invokeinterface #2159, 1 // InterfaceMethod java/nio/file/Path.toAbsolutePath:()Ljava/nio/file/Path;
+ 10: invokestatic #1239 // Method java/lang/String.valueOf:(Ljava/lang/Object;)Ljava/lang/String;
+ 13: iload_1
+ 14: iload_2
+ 15: iload_3
+ 16: invokedynamic #2164, 0 // InvokeDynamic #179:makeConcatWithConstants:(Ljava/lang/String;Ljava/lang/String;ZZZ)Ljava/lang/String;
+ 21: invokestatic #796 // InterfaceMethod net/minecraft/network/chat/Component.m_237113_:(Ljava/lang/String;)Lnet/minecraft/network/chat/MutableComponent;
+ 24: areturn
+
+ private static net.minecraft.network.chat.Component lambda$copyConfig$109(java.lang.String, java.lang.String);
+ Code:
+ 0: aload_0
+ 1: aload_1
+ 2: invokedynamic #2167, 0 // InvokeDynamic #180:makeConcatWithConstants:(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+ 7: invokestatic #796 // InterfaceMethod net/minecraft/network/chat/Component.m_237113_:(Ljava/lang/String;)Lnet/minecraft/network/chat/MutableComponent;
+ 10: areturn
+
+ private static net.minecraft.network.chat.Component lambda$preset$108(java.lang.String);
+ Code:
+ 0: aload_0
+ 1: aload_0
+ 2: invokestatic #2154 // Method com/ogaba/sa_decor/common/loot/DecorLootConfigManager.getConfigPath:(Ljava/lang/String;)Ljava/nio/file/Path;
+ 5: invokeinterface #2159, 1 // InterfaceMethod java/nio/file/Path.toAbsolutePath:()Ljava/nio/file/Path;
+ 10: invokestatic #1239 // Method java/lang/String.valueOf:(Ljava/lang/Object;)Ljava/lang/String;
+ 13: invokedynamic #2170, 0 // InvokeDynamic #181:makeConcatWithConstants:(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+ 18: invokestatic #796 // InterfaceMethod net/minecraft/network/chat/Component.m_237113_:(Ljava/lang/String;)Lnet/minecraft/network/chat/MutableComponent;
+ 21: areturn
+
+ private static net.minecraft.network.chat.Component lambda$addForceOpenRule$107(java.lang.String, net.minecraft.resources.ResourceLocation);
+ Code:
+ 0: aload_0
+ 1: aload_1
+ 2: invokestatic #1239 // Method java/lang/String.valueOf:(Ljava/lang/Object;)Ljava/lang/String;
+ 5: invokedynamic #2173, 0 // InvokeDynamic #182:makeConcatWithConstants:(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+ 10: invokestatic #796 // InterfaceMethod net/minecraft/network/chat/Component.m_237113_:(Ljava/lang/String;)Lnet/minecraft/network/chat/MutableComponent;
+ 13: areturn
+
+ private static net.minecraft.network.chat.Component lambda$forceOpenList$106(java.lang.String);
+ Code:
+ 0: aload_0
+ 1: invokedynamic #2176, 0 // InvokeDynamic #183:makeConcatWithConstants:(Ljava/lang/String;)Ljava/lang/String;
+ 6: invokestatic #796 // InterfaceMethod net/minecraft/network/chat/Component.m_237113_:(Ljava/lang/String;)Lnet/minecraft/network/chat/MutableComponent;
+ 9: areturn
+
+ private static net.minecraft.network.chat.Component lambda$forceOpenList$105();
+ Code:
+ 0: ldc_w #2178 // String No force open entries loaded.
+ 3: invokestatic #796 // InterfaceMethod net/minecraft/network/chat/Component.m_237113_:(Ljava/lang/String;)Lnet/minecraft/network/chat/MutableComponent;
+ 6: areturn
+
+ private static net.minecraft.network.chat.Component lambda$forceOpenReload$104();
+ Code:
+ 0: invokestatic #945 // Method com/ogaba/sa_decor/common/loot/DecorForceOpenConfigManager.entries:()Ljava/util/List;
+ 3: invokeinterface #948, 1 // InterfaceMethod java/util/List.size:()I
+ 8: invokedynamic #2183, 0 // InvokeDynamic #184:makeConcatWithConstants:(I)Ljava/lang/String;
+ 13: invokestatic #796 // InterfaceMethod net/minecraft/network/chat/Component.m_237113_:(Ljava/lang/String;)Lnet/minecraft/network/chat/MutableComponent;
+ 16: areturn
+
+ private static net.minecraft.network.chat.Component lambda$forceOpenFolder$103(java.nio.file.Path);
+ Code:
+ 0: aload_0
+ 1: invokeinterface #2159, 1 // InterfaceMethod java/nio/file/Path.toAbsolutePath:()Ljava/nio/file/Path;
+ 6: invokestatic #1239 // Method java/lang/String.valueOf:(Ljava/lang/Object;)Ljava/lang/String;
+ 9: invokedynamic #2186, 0 // InvokeDynamic #185:makeConcatWithConstants:(Ljava/lang/String;)Ljava/lang/String;
+ 14: invokestatic #796 // InterfaceMethod net/minecraft/network/chat/Component.m_237113_:(Ljava/lang/String;)Lnet/minecraft/network/chat/MutableComponent;
+ 17: areturn
+
+ private static net.minecraft.network.chat.Component lambda$formatConfigs$102(int);
+ Code:
+ 0: iload_0
+ 1: invokedynamic #2189, 0 // InvokeDynamic #186:makeConcatWithConstants:(I)Ljava/lang/String;
+ 6: invokestatic #796 // InterfaceMethod net/minecraft/network/chat/Component.m_237113_:(Ljava/lang/String;)Lnet/minecraft/network/chat/MutableComponent;
+ 9: areturn
+
+ private static net.minecraft.network.chat.Component lambda$advancedHelp$101();
+ Code:
+ 0: ldc_w #2191 // String /sa_decor loot advanced reset/generate/refresh/clear_inventory/respawn_now
+ 3: invokestatic #796 // InterfaceMethod net/minecraft/network/chat/Component.m_237113_:(Ljava/lang/String;)Lnet/minecraft/network/chat/MutableComponent;
+ 6: areturn
+
+ private static net.minecraft.network.chat.Component lambda$advancedHelp$100();
+ Code:
+ 0: ldc_w #2193 // String /sa_decor loot advanced format
+ 3: invokestatic #796 // InterfaceMethod net/minecraft/network/chat/Component.m_237113_:(Ljava/lang/String;)Lnet/minecraft/network/chat/MutableComponent;
+ 6: areturn
+
+ private static net.minecraft.network.chat.Component lambda$advancedHelp$99();
+ Code:
+ 0: ldc_w #2195 // String /sa_decor loot advanced force_open list/add/reload/folder
+ 3: invokestatic #796 // InterfaceMethod net/minecraft/network/chat/Component.m_237113_:(Ljava/lang/String;)Lnet/minecraft/network/chat/MutableComponent;
+ 6: areturn
+
+ private static net.minecraft.network.chat.Component lambda$advancedHelp$98();
+ Code:
+ 0: ldc_w #2197 // String /sa_decor loot advanced add hand/item/tag/loot_table ...
+ 3: invokestatic #796 // InterfaceMethod net/minecraft/network/chat/Component.m_237113_:(Ljava/lang/String;)Lnet/minecraft/network/chat/MutableComponent;
+ 6: areturn
+
+ private static net.minecraft.network.chat.Component lambda$advancedHelp$97();
+ Code:
+ 0: ldc_w #2199 // String /sa_decor loot advanced config per_player/search/lock/empty/respawn ...
+ 3: invokestatic #796 // InterfaceMethod net/minecraft/network/chat/Component.m_237113_:(Ljava/lang/String;)Lnet/minecraft/network/chat/MutableComponent;
+ 6: areturn
+
+ private static net.minecraft.network.chat.Component lambda$advancedHelp$96();
+ Code:
+ 0: ldc_w #2201 // String /sa_decor loot advanced create [per_player] [search] [lock]
+ 3: invokestatic #796 // InterfaceMethod net/minecraft/network/chat/Component.m_237113_:(Ljava/lang/String;)Lnet/minecraft/network/chat/MutableComponent;
+ 6: areturn
+
+ private static net.minecraft.network.chat.Component lambda$advancedHelp$95();
+ Code:
+ 0: ldc_w #2203 // String Advanced loot commands:
+ 3: invokestatic #796 // InterfaceMethod net/minecraft/network/chat/Component.m_237113_:(Ljava/lang/String;)Lnet/minecraft/network/chat/MutableComponent;
+ 6: areturn
+
+ private static net.minecraft.network.chat.Component lambda$presets$94();
+ Code:
+ 0: ldc_w #2205 // String Use: /sa_decor loot preset
+ 3: invokestatic #796 // InterfaceMethod net/minecraft/network/chat/Component.m_237113_:(Ljava/lang/String;)Lnet/minecraft/network/chat/MutableComponent;
+ 6: areturn
+
+ private static net.minecraft.network.chat.Component lambda$presets$93();
+ Code:
+ 0: invokestatic #893 // Method com/ogaba/sa_decor/common/loot/DecorLootDefaultProfiles.availablePresetIdsText:()Ljava/lang/String;
+ 3: invokedynamic #2208, 0 // InvokeDynamic #187:makeConcatWithConstants:(Ljava/lang/String;)Ljava/lang/String;
+ 8: invokestatic #796 // InterfaceMethod net/minecraft/network/chat/Component.m_237113_:(Ljava/lang/String;)Lnet/minecraft/network/chat/MutableComponent;
+ 11: areturn
+
+ private static net.minecraft.network.chat.Component lambda$help$92();
+ Code:
+ 0: invokestatic #893 // Method com/ogaba/sa_decor/common/loot/DecorLootDefaultProfiles.availablePresetIdsText:()Ljava/lang/String;
+ 3: invokedynamic #2211, 0 // InvokeDynamic #188:makeConcatWithConstants:(Ljava/lang/String;)Ljava/lang/String;
+ 8: invokestatic #796 // InterfaceMethod net/minecraft/network/chat/Component.m_237113_:(Ljava/lang/String;)Lnet/minecraft/network/chat/MutableComponent;
+ 11: areturn
+
+ private static net.minecraft.network.chat.Component lambda$help$91();
+ Code:
+ 0: ldc_w #2213 // String Advanced options: /sa_decor loot advanced
+ 3: invokestatic #796 // InterfaceMethod net/minecraft/network/chat/Component.m_237113_:(Ljava/lang/String;)Lnet/minecraft/network/chat/MutableComponent;
+ 6: areturn
+
+ private static net.minecraft.network.chat.Component lambda$help$90();
+ Code:
+ 0: ldc_w #2215 // String Useful: list, reload, restore_defaults, folder, info, clear, test, lock, unlock, give
+ 3: invokestatic #796 // InterfaceMethod net/minecraft/network/chat/Component.m_237113_:(Ljava/lang/String;)Lnet/minecraft/network/chat/MutableComponent;
+ 6: areturn
+
+ private static net.minecraft.network.chat.Component lambda$help$89();
+ Code:
+ 0: ldc_w #2217 // String 3) Look at a container: /sa_decor loot use [locked]
+ 3: invokestatic #796 // InterfaceMethod net/minecraft/network/chat/Component.m_237113_:(Ljava/lang/String;)Lnet/minecraft/network/chat/MutableComponent;
+ 6: areturn
+
+ private static net.minecraft.network.chat.Component lambda$help$88();
+ Code:
+ 0: ldc_w #2219 // String Optional item: /sa_decor loot add item minecraft:apple
+ 3: invokestatic #796 // InterfaceMethod net/minecraft/network/chat/Component.m_237113_:(Ljava/lang/String;)Lnet/minecraft/network/chat/MutableComponent;
+ 6: areturn
+
+ private static net.minecraft.network.chat.Component lambda$help$87();
+ Code:
+ 0: ldc_w #2221 // String Range count: /sa_decor loot add hand [chance]
+ 3: invokestatic #796 // InterfaceMethod net/minecraft/network/chat/Component.m_237113_:(Ljava/lang/String;)Lnet/minecraft/network/chat/MutableComponent;
+ 6: areturn
+
+ private static net.minecraft.network.chat.Component lambda$help$86();
+ Code:
+ 0: ldc_w #2223 // String Optional hand: /sa_decor loot add hand [weight] [count] [chance]
+ 3: invokestatic #796 // InterfaceMethod net/minecraft/network/chat/Component.m_237113_:(Ljava/lang/String;)Lnet/minecraft/network/chat/MutableComponent;
+ 6: areturn
+
+ private static net.minecraft.network.chat.Component lambda$help$85();
+ Code:
+ 0: ldc_w #2225 // String 2) Add loot: hold an item and run /sa_decor loot add hand
+ 3: invokestatic #796 // InterfaceMethod net/minecraft/network/chat/Component.m_237113_:(Ljava/lang/String;)Lnet/minecraft/network/chat/MutableComponent;
+ 6: areturn
+
+ private static net.minecraft.network.chat.Component lambda$help$84();
+ Code:
+ 0: ldc_w #2227 // String 1) Create: /sa_decor loot new OR /sa_decor loot preset
+ 3: invokestatic #796 // InterfaceMethod net/minecraft/network/chat/Component.m_237113_:(Ljava/lang/String;)Lnet/minecraft/network/chat/MutableComponent;
+ 6: areturn
+
+ private static net.minecraft.network.chat.Component lambda$help$83();
+ Code:
+ 0: ldc_w #2229 // String SA Decor Loot - simple workflow
+ 3: invokestatic #796 // InterfaceMethod net/minecraft/network/chat/Component.m_237113_:(Ljava/lang/String;)Lnet/minecraft/network/chat/MutableComponent;
+ 6: areturn
+
+ private static net.minecraft.network.chat.Component lambda$folder$82(java.nio.file.Path);
+ Code:
+ 0: aload_0
+ 1: invokeinterface #2159, 1 // InterfaceMethod java/nio/file/Path.toAbsolutePath:()Ljava/nio/file/Path;
+ 6: invokestatic #1239 // Method java/lang/String.valueOf:(Ljava/lang/Object;)Ljava/lang/String;
+ 9: invokedynamic #2232, 0 // InvokeDynamic #189:makeConcatWithConstants:(Ljava/lang/String;)Ljava/lang/String;
+ 14: invokestatic #796 // InterfaceMethod net/minecraft/network/chat/Component.m_237113_:(Ljava/lang/String;)Lnet/minecraft/network/chat/MutableComponent;
+ 17: areturn
+
+ private static net.minecraft.network.chat.Component lambda$list$81(java.lang.String);
+ Code:
+ 0: aload_0
+ 1: invokedynamic #2235, 0 // InvokeDynamic #190:makeConcatWithConstants:(Ljava/lang/String;)Ljava/lang/String;
+ 6: invokestatic #796 // InterfaceMethod net/minecraft/network/chat/Component.m_237113_:(Ljava/lang/String;)Lnet/minecraft/network/chat/MutableComponent;
+ 9: areturn
+
+ private static net.minecraft.network.chat.Component lambda$list$80();
+ Code:
+ 0: ldc_w #2237 // String No loot configs loaded.
+ 3: invokestatic #796 // InterfaceMethod net/minecraft/network/chat/Component.m_237113_:(Ljava/lang/String;)Lnet/minecraft/network/chat/MutableComponent;
+ 6: areturn
+
+ private static net.minecraft.network.chat.Component lambda$restoreDefaultProfiles$79(int);
+ Code:
+ 0: iload_0
+ 1: invokedynamic #2240, 0 // InvokeDynamic #191:makeConcatWithConstants:(I)Ljava/lang/String;
+ 6: invokestatic #796 // InterfaceMethod net/minecraft/network/chat/Component.m_237113_:(Ljava/lang/String;)Lnet/minecraft/network/chat/MutableComponent;
+ 9: areturn
+
+ private static net.minecraft.network.chat.Component lambda$restoreDefaultProfiles$78();
+ Code:
+ 0: ldc_w #2242 // String All default loot crate profiles already exist; nothing was overwritten.
+ 3: invokestatic #796 // InterfaceMethod net/minecraft/network/chat/Component.m_237113_:(Ljava/lang/String;)Lnet/minecraft/network/chat/MutableComponent;
+ 6: areturn
+
+ private static net.minecraft.network.chat.Component lambda$reload$77(int, int, int);
+ Code:
+ 0: iload_0
+ 1: iload_1
+ 2: iload_2
+ 3: invokedynamic #2245, 0 // InvokeDynamic #192:makeConcatWithConstants:(III)Ljava/lang/String;
+ 8: invokestatic #796 // InterfaceMethod net/minecraft/network/chat/Component.m_237113_:(Ljava/lang/String;)Lnet/minecraft/network/chat/MutableComponent;
+ 11: areturn
+
+ private static net.minecraft.network.chat.Component lambda$undoWand$76(boolean);
+ Code:
+ 0: iload_0
+ 1: ifeq 10
+ 4: ldc_w #2247 // String Undid the last Loot Crate Wand edit.
+ 7: goto 13
+ 10: ldc_w #2249 // String There is no wand edit to undo.
+ 13: invokestatic #796 // InterfaceMethod net/minecraft/network/chat/Component.m_237113_:(Ljava/lang/String;)Lnet/minecraft/network/chat/MutableComponent;
+ 16: areturn
+
+ private static net.minecraft.network.chat.Component lambda$createPresetAs$75(java.lang.String, java.lang.String);
+ Code:
+ 0: aload_0
+ 1: aload_1
+ 2: invokedynamic #2252, 0 // InvokeDynamic #193:makeConcatWithConstants:(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+ 7: invokestatic #796 // InterfaceMethod net/minecraft/network/chat/Component.m_237113_:(Ljava/lang/String;)Lnet/minecraft/network/chat/MutableComponent;
+ 10: areturn
+
+ private static net.minecraft.network.chat.Component lambda$importProfile$74(java.lang.String);
+ Code:
+ 0: aload_0
+ 1: invokedynamic #2255, 0 // InvokeDynamic #194:makeConcatWithConstants:(Ljava/lang/String;)Ljava/lang/String;
+ 6: invokestatic #796 // InterfaceMethod net/minecraft/network/chat/Component.m_237113_:(Ljava/lang/String;)Lnet/minecraft/network/chat/MutableComponent;
+ 9: areturn
+
+ private static net.minecraft.network.chat.Component lambda$exportProfile$73(java.lang.String);
+ Code:
+ 0: aload_0
+ 1: invokedynamic #2258, 0 // InvokeDynamic #195:makeConcatWithConstants:(Ljava/lang/String;)Ljava/lang/String;
+ 6: invokestatic #796 // InterfaceMethod net/minecraft/network/chat/Component.m_237113_:(Ljava/lang/String;)Lnet/minecraft/network/chat/MutableComponent;
+ 9: areturn
+
+ private static net.minecraft.network.chat.Component lambda$cleanupLootMarkers$72(com.ogaba.sa_decor.common.loot.DecorLootProfileUsage$CleanupResult);
+ Code:
+ 0: aload_0
+ 1: invokevirtual #2261 // Method com/ogaba/sa_decor/common/loot/DecorLootProfileUsage$CleanupResult.staleContainersRemoved:()I
+ 4: aload_0
+ 5: invokevirtual #2264 // Method com/ogaba/sa_decor/common/loot/DecorLootProfileUsage$CleanupResult.staleLooseRemoved:()I
+ 8: aload_0
+ 9: invokevirtual #2267 // Method com/ogaba/sa_decor/common/loot/DecorLootProfileUsage$CleanupResult.missingProfileReferences:()I
+ 12: aload_0
+ 13: invokevirtual #845 // Method com/ogaba/sa_decor/common/loot/DecorLootProfileUsage$CleanupResult.indexEntriesFixed:()I
+ 16: invokedynamic #2272, 0 // InvokeDynamic #196:makeConcatWithConstants:(IIII)Ljava/lang/String;
+ 21: invokestatic #796 // InterfaceMethod net/minecraft/network/chat/Component.m_237113_:(Ljava/lang/String;)Lnet/minecraft/network/chat/MutableComponent;
+ 24: areturn
+
+ private static net.minecraft.network.chat.Component lambda$profileUsage$71(java.lang.String, com.ogaba.sa_decor.common.loot.DecorLootProfileUsage$Usage);
+ Code:
+ 0: aload_0
+ 1: aload_1
+ 2: invokevirtual #2275 // Method com/ogaba/sa_decor/common/loot/DecorLootProfileUsage$Usage.containers:()I
+ 5: aload_1
+ 6: invokevirtual #2278 // Method com/ogaba/sa_decor/common/loot/DecorLootProfileUsage$Usage.looseLoot:()I
+ 9: aload_1
+ 10: invokevirtual #2281 // Method com/ogaba/sa_decor/common/loot/DecorLootProfileUsage$Usage.looseLootConfigs:()I
+ 13: aload_1
+ 14: invokevirtual #2284 // Method com/ogaba/sa_decor/common/loot/DecorLootProfileUsage$Usage.staleLoadedContainers:()I
+ 17: invokedynamic #2289, 0 // InvokeDynamic #197:makeConcatWithConstants:(Ljava/lang/String;IIII)Ljava/lang/String;
+ 22: invokestatic #796 // InterfaceMethod net/minecraft/network/chat/Component.m_237113_:(Ljava/lang/String;)Lnet/minecraft/network/chat/MutableComponent;
+ 25: areturn
+
+ private static int lambda$forceOpenCommand$70(com.mojang.brigadier.context.CommandContext) throws com.mojang.brigadier.exceptions.CommandSyntaxException;
+ Code:
+ 0: aload_0
+ 1: invokevirtual #2294 // Method com/mojang/brigadier/context/CommandContext.getSource:()Ljava/lang/Object;
+ 4: checkcast #71 // class net/minecraft/commands/CommandSourceStack
+ 7: ldc_w #432 // String tag
+ 10: aload_0
+ 11: ldc_w #434 // String tag_id
+ 14: invokestatic #2298 // Method net/minecraft/commands/arguments/ResourceLocationArgument.m_107011_:(Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Lnet/minecraft/resources/ResourceLocation;
+ 17: aload_0
+ 18: ldc_w #755 // String difficulty
+ 21: invokestatic #2302 // Method com/mojang/brigadier/arguments/StringArgumentType.getString:(Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Ljava/lang/String;
+ 24: invokestatic #2304 // Method forceOpenRuleByDifficulty:(Ljava/lang/String;)Lcom/ogaba/sa_decor/common/loot/DecorForceOpenRule;
+ 27: invokestatic #2306 // Method addForceOpenRule:(Lnet/minecraft/commands/CommandSourceStack;Ljava/lang/String;Lnet/minecraft/resources/ResourceLocation;Lcom/ogaba/sa_decor/common/loot/DecorForceOpenRule;)I
+ 30: ireturn
+
+ private static int lambda$forceOpenCommand$69(com.mojang.brigadier.context.CommandContext) throws com.mojang.brigadier.exceptions.CommandSyntaxException;
+ Code:
+ 0: aload_0
+ 1: invokevirtual #2294 // Method com/mojang/brigadier/context/CommandContext.getSource:()Ljava/lang/Object;
+ 4: checkcast #71 // class net/minecraft/commands/CommandSourceStack
+ 7: ldc_w #432 // String tag
+ 10: aload_0
+ 11: ldc_w #434 // String tag_id
+ 14: invokestatic #2298 // Method net/minecraft/commands/arguments/ResourceLocationArgument.m_107011_:(Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Lnet/minecraft/resources/ResourceLocation;
+ 17: invokestatic #1223 // Method com/ogaba/sa_decor/common/loot/DecorForceOpenRule.defaults:()Lcom/ogaba/sa_decor/common/loot/DecorForceOpenRule;
+ 20: invokestatic #2306 // Method addForceOpenRule:(Lnet/minecraft/commands/CommandSourceStack;Ljava/lang/String;Lnet/minecraft/resources/ResourceLocation;Lcom/ogaba/sa_decor/common/loot/DecorForceOpenRule;)I
+ 23: ireturn
+
+ private static int lambda$forceOpenCommand$68(com.mojang.brigadier.context.CommandContext) throws com.mojang.brigadier.exceptions.CommandSyntaxException;
+ Code:
+ 0: aload_0
+ 1: invokevirtual #2294 // Method com/mojang/brigadier/context/CommandContext.getSource:()Ljava/lang/Object;
+ 4: checkcast #71 // class net/minecraft/commands/CommandSourceStack
+ 7: ldc_w #420 // String item
+ 10: aload_0
+ 11: ldc_w #422 // String item_id
+ 14: invokestatic #2298 // Method net/minecraft/commands/arguments/ResourceLocationArgument.m_107011_:(Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Lnet/minecraft/resources/ResourceLocation;
+ 17: aload_0
+ 18: ldc_w #755 // String difficulty
+ 21: invokestatic #2302 // Method com/mojang/brigadier/arguments/StringArgumentType.getString:(Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Ljava/lang/String;
+ 24: invokestatic #2304 // Method forceOpenRuleByDifficulty:(Ljava/lang/String;)Lcom/ogaba/sa_decor/common/loot/DecorForceOpenRule;
+ 27: invokestatic #2306 // Method addForceOpenRule:(Lnet/minecraft/commands/CommandSourceStack;Ljava/lang/String;Lnet/minecraft/resources/ResourceLocation;Lcom/ogaba/sa_decor/common/loot/DecorForceOpenRule;)I
+ 30: ireturn
+
+ private static int lambda$forceOpenCommand$67(com.mojang.brigadier.context.CommandContext) throws com.mojang.brigadier.exceptions.CommandSyntaxException;
+ Code:
+ 0: aload_0
+ 1: invokevirtual #2294 // Method com/mojang/brigadier/context/CommandContext.getSource:()Ljava/lang/Object;
+ 4: checkcast #71 // class net/minecraft/commands/CommandSourceStack
+ 7: ldc_w #420 // String item
+ 10: aload_0
+ 11: ldc_w #422 // String item_id
+ 14: invokestatic #2298 // Method net/minecraft/commands/arguments/ResourceLocationArgument.m_107011_:(Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Lnet/minecraft/resources/ResourceLocation;
+ 17: invokestatic #1223 // Method com/ogaba/sa_decor/common/loot/DecorForceOpenRule.defaults:()Lcom/ogaba/sa_decor/common/loot/DecorForceOpenRule;
+ 20: invokestatic #2306 // Method addForceOpenRule:(Lnet/minecraft/commands/CommandSourceStack;Ljava/lang/String;Lnet/minecraft/resources/ResourceLocation;Lcom/ogaba/sa_decor/common/loot/DecorForceOpenRule;)I
+ 23: ireturn
+
+ private static int lambda$forceOpenCommand$66(com.mojang.brigadier.context.CommandContext) throws com.mojang.brigadier.exceptions.CommandSyntaxException;
+ Code:
+ 0: aload_0
+ 1: invokevirtual #2294 // Method com/mojang/brigadier/context/CommandContext.getSource:()Ljava/lang/Object;
+ 4: checkcast #71 // class net/minecraft/commands/CommandSourceStack
+ 7: invokestatic #2310 // Method forceOpenList:(Lnet/minecraft/commands/CommandSourceStack;)I
+ 10: ireturn
+
+ private static int lambda$forceOpenCommand$65(com.mojang.brigadier.context.CommandContext) throws com.mojang.brigadier.exceptions.CommandSyntaxException;
+ Code:
+ 0: aload_0
+ 1: invokevirtual #2294 // Method com/mojang/brigadier/context/CommandContext.getSource:()Ljava/lang/Object;
+ 4: checkcast #71 // class net/minecraft/commands/CommandSourceStack
+ 7: invokestatic #2312 // Method forceOpenReload:(Lnet/minecraft/commands/CommandSourceStack;)I
+ 10: ireturn
+
+ private static int lambda$forceOpenCommand$64(com.mojang.brigadier.context.CommandContext) throws com.mojang.brigadier.exceptions.CommandSyntaxException;
+ Code:
+ 0: aload_0
+ 1: invokevirtual #2294 // Method com/mojang/brigadier/context/CommandContext.getSource:()Ljava/lang/Object;
+ 4: checkcast #71 // class net/minecraft/commands/CommandSourceStack
+ 7: invokestatic #2314 // Method forceOpenFolder:(Lnet/minecraft/commands/CommandSourceStack;)I
+ 10: ireturn
+
+ private static int lambda$configCommand$63(com.mojang.brigadier.context.CommandContext) throws com.mojang.brigadier.exceptions.CommandSyntaxException;
+ Code:
+ 0: aload_0
+ 1: invokevirtual #2294 // Method com/mojang/brigadier/context/CommandContext.getSource:()Ljava/lang/Object;
+ 4: checkcast #71 // class net/minecraft/commands/CommandSourceStack
+ 7: aload_0
+ 8: ldc #185 // String config_id
+ 10: invokestatic #2302 // Method com/mojang/brigadier/arguments/StringArgumentType.getString:(Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Ljava/lang/String;
+ 13: aload_0
+ 14: ldc_w #687 // String enabled
+ 17: invokestatic #2318 // Method com/mojang/brigadier/arguments/BoolArgumentType.getBool:(Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Z
+ 20: aload_0
+ 21: ldc_w #717 // String time_ticks
+ 24: invokestatic #2322 // Method com/mojang/brigadier/arguments/IntegerArgumentType.getInteger:(Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)I
+ 27: aload_0
+ 28: ldc_w #724 // String only_if_empty
+ 31: invokestatic #2318 // Method com/mojang/brigadier/arguments/BoolArgumentType.getBool:(Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Z
+ 34: aload_0
+ 35: ldc_w #726 // String clear_before_respawn
+ 38: invokestatic #2318 // Method com/mojang/brigadier/arguments/BoolArgumentType.getBool:(Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Z
+ 41: invokestatic #2324 // Method setConfigRespawn:(Lnet/minecraft/commands/CommandSourceStack;Ljava/lang/String;ZIZZ)I
+ 44: ireturn
+
+ private static int lambda$configCommand$62(com.mojang.brigadier.context.CommandContext) throws com.mojang.brigadier.exceptions.CommandSyntaxException;
+ Code:
+ 0: aload_0
+ 1: invokevirtual #2294 // Method com/mojang/brigadier/context/CommandContext.getSource:()Ljava/lang/Object;
+ 4: checkcast #71 // class net/minecraft/commands/CommandSourceStack
+ 7: aload_0
+ 8: ldc #185 // String config_id
+ 10: invokestatic #2302 // Method com/mojang/brigadier/arguments/StringArgumentType.getString:(Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Ljava/lang/String;
+ 13: aload_0
+ 14: ldc_w #687 // String enabled
+ 17: invokestatic #2318 // Method com/mojang/brigadier/arguments/BoolArgumentType.getBool:(Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Z
+ 20: aload_0
+ 21: ldc_w #717 // String time_ticks
+ 24: invokestatic #2322 // Method com/mojang/brigadier/arguments/IntegerArgumentType.getInteger:(Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)I
+ 27: iconst_1
+ 28: iconst_1
+ 29: invokestatic #2324 // Method setConfigRespawn:(Lnet/minecraft/commands/CommandSourceStack;Ljava/lang/String;ZIZZ)I
+ 32: ireturn
+
+ private static int lambda$configCommand$61(com.mojang.brigadier.context.CommandContext) throws com.mojang.brigadier.exceptions.CommandSyntaxException;
+ Code:
+ 0: aload_0
+ 1: invokevirtual #2294 // Method com/mojang/brigadier/context/CommandContext.getSource:()Ljava/lang/Object;
+ 4: checkcast #71 // class net/minecraft/commands/CommandSourceStack
+ 7: aload_0
+ 8: ldc #185 // String config_id
+ 10: invokestatic #2302 // Method com/mojang/brigadier/arguments/StringArgumentType.getString:(Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Ljava/lang/String;
+ 13: aload_0
+ 14: ldc_w #687 // String enabled
+ 17: invokestatic #2318 // Method com/mojang/brigadier/arguments/BoolArgumentType.getBool:(Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Z
+ 20: aload_0
+ 21: ldc_w #708 // String spawn_chance
+ 24: invokestatic #2328 // Method com/mojang/brigadier/arguments/FloatArgumentType.getFloat:(Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)F
+ 27: invokestatic #2330 // Method setConfigEmpty:(Lnet/minecraft/commands/CommandSourceStack;Ljava/lang/String;ZF)I
+ 30: ireturn
+
+ private static int lambda$configCommand$60(com.mojang.brigadier.context.CommandContext) throws com.mojang.brigadier.exceptions.CommandSyntaxException;
+ Code:
+ 0: aload_0
+ 1: invokevirtual #2294 // Method com/mojang/brigadier/context/CommandContext.getSource:()Ljava/lang/Object;
+ 4: checkcast #71 // class net/minecraft/commands/CommandSourceStack
+ 7: aload_0
+ 8: ldc #185 // String config_id
+ 10: invokestatic #2302 // Method com/mojang/brigadier/arguments/StringArgumentType.getString:(Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Ljava/lang/String;
+ 13: aload_0
+ 14: ldc_w #687 // String enabled
+ 17: invokestatic #2318 // Method com/mojang/brigadier/arguments/BoolArgumentType.getBool:(Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Z
+ 20: invokestatic #2332 // Method setConfigLock:(Lnet/minecraft/commands/CommandSourceStack;Ljava/lang/String;Z)I
+ 23: ireturn
+
+ private static int lambda$configCommand$59(com.mojang.brigadier.context.CommandContext) throws com.mojang.brigadier.exceptions.CommandSyntaxException;
+ Code:
+ 0: aload_0
+ 1: invokevirtual #2294 // Method com/mojang/brigadier/context/CommandContext.getSource:()Ljava/lang/Object;
+ 4: checkcast #71 // class net/minecraft/commands/CommandSourceStack
+ 7: aload_0
+ 8: ldc #185 // String config_id
+ 10: invokestatic #2302 // Method com/mojang/brigadier/arguments/StringArgumentType.getString:(Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Ljava/lang/String;
+ 13: aload_0
+ 14: ldc_w #687 // String enabled
+ 17: invokestatic #2318 // Method com/mojang/brigadier/arguments/BoolArgumentType.getBool:(Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Z
+ 20: invokestatic #2334 // Method setConfigSearch:(Lnet/minecraft/commands/CommandSourceStack;Ljava/lang/String;Z)I
+ 23: ireturn
+
+ private static int lambda$configCommand$58(com.mojang.brigadier.context.CommandContext) throws com.mojang.brigadier.exceptions.CommandSyntaxException;
+ Code:
+ 0: aload_0
+ 1: invokevirtual #2294 // Method com/mojang/brigadier/context/CommandContext.getSource:()Ljava/lang/Object;
+ 4: checkcast #71 // class net/minecraft/commands/CommandSourceStack
+ 7: aload_0
+ 8: ldc #185 // String config_id
+ 10: invokestatic #2302 // Method com/mojang/brigadier/arguments/StringArgumentType.getString:(Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Ljava/lang/String;
+ 13: aload_0
+ 14: ldc_w #687 // String enabled
+ 17: invokestatic #2318 // Method com/mojang/brigadier/arguments/BoolArgumentType.getBool:(Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Z
+ 20: invokestatic #2336 // Method setConfigPerPlayer:(Lnet/minecraft/commands/CommandSourceStack;Ljava/lang/String;Z)I
+ 23: ireturn
+
+ private static int lambda$addLootTableCommand$57(com.mojang.brigadier.context.CommandContext) throws com.mojang.brigadier.exceptions.CommandSyntaxException;
+ Code:
+ 0: aload_0
+ 1: invokevirtual #2294 // Method com/mojang/brigadier/context/CommandContext.getSource:()Ljava/lang/Object;
+ 4: checkcast #71 // class net/minecraft/commands/CommandSourceStack
+ 7: aload_0
+ 8: ldc #185 // String config_id
+ 10: invokestatic #2302 // Method com/mojang/brigadier/arguments/StringArgumentType.getString:(Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Ljava/lang/String;
+ 13: aload_0
+ 14: ldc_w #446 // String loot_table_id
+ 17: invokestatic #2298 // Method net/minecraft/commands/arguments/ResourceLocationArgument.m_107011_:(Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Lnet/minecraft/resources/ResourceLocation;
+ 20: invokestatic #2338 // Method addLootTable:(Lnet/minecraft/commands/CommandSourceStack;Ljava/lang/String;Lnet/minecraft/resources/ResourceLocation;)I
+ 23: ireturn
+
+ private static int lambda$addTagCommand$56(com.mojang.brigadier.context.CommandContext) throws com.mojang.brigadier.exceptions.CommandSyntaxException;
+ Code:
+ 0: aload_0
+ 1: invokevirtual #2294 // Method com/mojang/brigadier/context/CommandContext.getSource:()Ljava/lang/Object;
+ 4: checkcast #71 // class net/minecraft/commands/CommandSourceStack
+ 7: aload_0
+ 8: ldc #185 // String config_id
+ 10: invokestatic #2302 // Method com/mojang/brigadier/arguments/StringArgumentType.getString:(Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Ljava/lang/String;
+ 13: aload_0
+ 14: ldc_w #434 // String tag_id
+ 17: invokestatic #2298 // Method net/minecraft/commands/arguments/ResourceLocationArgument.m_107011_:(Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Lnet/minecraft/resources/ResourceLocation;
+ 20: aload_0
+ 21: ldc_w #454 // String weight
+ 24: invokestatic #2322 // Method com/mojang/brigadier/arguments/IntegerArgumentType.getInteger:(Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)I
+ 27: aload_0
+ 28: ldc_w #487 // String min_count
+ 31: invokestatic #2322 // Method com/mojang/brigadier/arguments/IntegerArgumentType.getInteger:(Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)I
+ 34: aload_0
+ 35: ldc_w #489 // String max_count
+ 38: invokestatic #2322 // Method com/mojang/brigadier/arguments/IntegerArgumentType.getInteger:(Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)I
+ 41: aload_0
+ 42: ldc_w #474 // String chance
+ 45: invokestatic #2328 // Method com/mojang/brigadier/arguments/FloatArgumentType.getFloat:(Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)F
+ 48: invokestatic #2340 // Method addTagById:(Lnet/minecraft/commands/CommandSourceStack;Ljava/lang/String;Lnet/minecraft/resources/ResourceLocation;IIIF)I
+ 51: ireturn
+
+ private static int lambda$addTagCommand$55(com.mojang.brigadier.context.CommandContext) throws com.mojang.brigadier.exceptions.CommandSyntaxException;
+ Code:
+ 0: aload_0
+ 1: invokevirtual #2294 // Method com/mojang/brigadier/context/CommandContext.getSource:()Ljava/lang/Object;
+ 4: checkcast #71 // class net/minecraft/commands/CommandSourceStack
+ 7: aload_0
+ 8: ldc #185 // String config_id
+ 10: invokestatic #2302 // Method com/mojang/brigadier/arguments/StringArgumentType.getString:(Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Ljava/lang/String;
+ 13: aload_0
+ 14: ldc_w #434 // String tag_id
+ 17: invokestatic #2298 // Method net/minecraft/commands/arguments/ResourceLocationArgument.m_107011_:(Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Lnet/minecraft/resources/ResourceLocation;
+ 20: aload_0
+ 21: ldc_w #454 // String weight
+ 24: invokestatic #2322 // Method com/mojang/brigadier/arguments/IntegerArgumentType.getInteger:(Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)I
+ 27: aload_0
+ 28: ldc_w #467 // String count
+ 31: invokestatic #2322 // Method com/mojang/brigadier/arguments/IntegerArgumentType.getInteger:(Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)I
+ 34: aload_0
+ 35: ldc_w #467 // String count
+ 38: invokestatic #2322 // Method com/mojang/brigadier/arguments/IntegerArgumentType.getInteger:(Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)I
+ 41: aload_0
+ 42: ldc_w #474 // String chance
+ 45: invokestatic #2328 // Method com/mojang/brigadier/arguments/FloatArgumentType.getFloat:(Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)F
+ 48: invokestatic #2340 // Method addTagById:(Lnet/minecraft/commands/CommandSourceStack;Ljava/lang/String;Lnet/minecraft/resources/ResourceLocation;IIIF)I
+ 51: ireturn
+
+ private static int lambda$addItemCommand$54(com.mojang.brigadier.context.CommandContext) throws com.mojang.brigadier.exceptions.CommandSyntaxException;
+ Code:
+ 0: aload_0
+ 1: invokevirtual #2294 // Method com/mojang/brigadier/context/CommandContext.getSource:()Ljava/lang/Object;
+ 4: checkcast #71 // class net/minecraft/commands/CommandSourceStack
+ 7: aload_0
+ 8: ldc #185 // String config_id
+ 10: invokestatic #2302 // Method com/mojang/brigadier/arguments/StringArgumentType.getString:(Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Ljava/lang/String;
+ 13: aload_0
+ 14: ldc_w #422 // String item_id
+ 17: invokestatic #2298 // Method net/minecraft/commands/arguments/ResourceLocationArgument.m_107011_:(Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Lnet/minecraft/resources/ResourceLocation;
+ 20: aload_0
+ 21: ldc_w #454 // String weight
+ 24: invokestatic #2322 // Method com/mojang/brigadier/arguments/IntegerArgumentType.getInteger:(Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)I
+ 27: aload_0
+ 28: ldc_w #487 // String min_count
+ 31: invokestatic #2322 // Method com/mojang/brigadier/arguments/IntegerArgumentType.getInteger:(Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)I
+ 34: aload_0
+ 35: ldc_w #489 // String max_count
+ 38: invokestatic #2322 // Method com/mojang/brigadier/arguments/IntegerArgumentType.getInteger:(Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)I
+ 41: aload_0
+ 42: ldc_w #474 // String chance
+ 45: invokestatic #2328 // Method com/mojang/brigadier/arguments/FloatArgumentType.getFloat:(Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)F
+ 48: invokestatic #2342 // Method addItemById:(Lnet/minecraft/commands/CommandSourceStack;Ljava/lang/String;Lnet/minecraft/resources/ResourceLocation;IIIF)I
+ 51: ireturn
+
+ private static int lambda$addItemCommand$53(com.mojang.brigadier.context.CommandContext) throws com.mojang.brigadier.exceptions.CommandSyntaxException;
+ Code:
+ 0: aload_0
+ 1: invokevirtual #2294 // Method com/mojang/brigadier/context/CommandContext.getSource:()Ljava/lang/Object;
+ 4: checkcast #71 // class net/minecraft/commands/CommandSourceStack
+ 7: aload_0
+ 8: ldc #185 // String config_id
+ 10: invokestatic #2302 // Method com/mojang/brigadier/arguments/StringArgumentType.getString:(Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Ljava/lang/String;
+ 13: aload_0
+ 14: ldc_w #422 // String item_id
+ 17: invokestatic #2298 // Method net/minecraft/commands/arguments/ResourceLocationArgument.m_107011_:(Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Lnet/minecraft/resources/ResourceLocation;
+ 20: aload_0
+ 21: ldc_w #454 // String weight
+ 24: invokestatic #2322 // Method com/mojang/brigadier/arguments/IntegerArgumentType.getInteger:(Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)I
+ 27: aload_0
+ 28: ldc_w #467 // String count
+ 31: invokestatic #2322 // Method com/mojang/brigadier/arguments/IntegerArgumentType.getInteger:(Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)I
+ 34: aload_0
+ 35: ldc_w #467 // String count
+ 38: invokestatic #2322 // Method com/mojang/brigadier/arguments/IntegerArgumentType.getInteger:(Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)I
+ 41: aload_0
+ 42: ldc_w #474 // String chance
+ 45: invokestatic #2328 // Method com/mojang/brigadier/arguments/FloatArgumentType.getFloat:(Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)F
+ 48: invokestatic #2342 // Method addItemById:(Lnet/minecraft/commands/CommandSourceStack;Ljava/lang/String;Lnet/minecraft/resources/ResourceLocation;IIIF)I
+ 51: ireturn
+
+ private static int lambda$addHandCommand$52(com.mojang.brigadier.context.CommandContext) throws com.mojang.brigadier.exceptions.CommandSyntaxException;
+ Code:
+ 0: aload_0
+ 1: invokevirtual #2294 // Method com/mojang/brigadier/context/CommandContext.getSource:()Ljava/lang/Object;
+ 4: checkcast #71 // class net/minecraft/commands/CommandSourceStack
+ 7: aload_0
+ 8: ldc #185 // String config_id
+ 10: invokestatic #2302 // Method com/mojang/brigadier/arguments/StringArgumentType.getString:(Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Ljava/lang/String;
+ 13: aload_0
+ 14: ldc_w #454 // String weight
+ 17: invokestatic #2322 // Method com/mojang/brigadier/arguments/IntegerArgumentType.getInteger:(Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)I
+ 20: aload_0
+ 21: ldc_w #487 // String min_count
+ 24: invokestatic #2322 // Method com/mojang/brigadier/arguments/IntegerArgumentType.getInteger:(Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)I
+ 27: aload_0
+ 28: ldc_w #489 // String max_count
+ 31: invokestatic #2322 // Method com/mojang/brigadier/arguments/IntegerArgumentType.getInteger:(Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)I
+ 34: aload_0
+ 35: ldc_w #474 // String chance
+ 38: invokestatic #2328 // Method com/mojang/brigadier/arguments/FloatArgumentType.getFloat:(Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)F
+ 41: invokestatic #2344 // Method addHeldItem:(Lnet/minecraft/commands/CommandSourceStack;Ljava/lang/String;IIIF)I
+ 44: ireturn
+
+ private static int lambda$addHandCommand$51(com.mojang.brigadier.context.CommandContext) throws com.mojang.brigadier.exceptions.CommandSyntaxException;
+ Code:
+ 0: aload_0
+ 1: invokevirtual #2294 // Method com/mojang/brigadier/context/CommandContext.getSource:()Ljava/lang/Object;
+ 4: checkcast #71 // class net/minecraft/commands/CommandSourceStack
+ 7: aload_0
+ 8: ldc #185 // String config_id
+ 10: invokestatic #2302 // Method com/mojang/brigadier/arguments/StringArgumentType.getString:(Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Ljava/lang/String;
+ 13: aload_0
+ 14: ldc_w #454 // String weight
+ 17: invokestatic #2322 // Method com/mojang/brigadier/arguments/IntegerArgumentType.getInteger:(Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)I
+ 20: aload_0
+ 21: ldc_w #467 // String count
+ 24: invokestatic #2322 // Method com/mojang/brigadier/arguments/IntegerArgumentType.getInteger:(Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)I
+ 27: aload_0
+ 28: ldc_w #467 // String count
+ 31: invokestatic #2322 // Method com/mojang/brigadier/arguments/IntegerArgumentType.getInteger:(Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)I
+ 34: aload_0
+ 35: ldc_w #474 // String chance
+ 38: invokestatic #2328 // Method com/mojang/brigadier/arguments/FloatArgumentType.getFloat:(Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)F
+ 41: invokestatic #2344 // Method addHeldItem:(Lnet/minecraft/commands/CommandSourceStack;Ljava/lang/String;IIIF)I
+ 44: ireturn
+
+ private static int lambda$lootGiveCommand$50(com.mojang.brigadier.context.CommandContext) throws com.mojang.brigadier.exceptions.CommandSyntaxException;
+ Code:
+ 0: aload_0
+ 1: invokevirtual #2294 // Method com/mojang/brigadier/context/CommandContext.getSource:()Ljava/lang/Object;
+ 4: checkcast #71 // class net/minecraft/commands/CommandSourceStack
+ 7: aload_0
+ 8: ldc #185 // String config_id
+ 10: invokestatic #2302 // Method com/mojang/brigadier/arguments/StringArgumentType.getString:(Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Ljava/lang/String;
+ 13: aload_0
+ 14: ldc #197 // String block_id
+ 16: invokestatic #2298 // Method net/minecraft/commands/arguments/ResourceLocationArgument.m_107011_:(Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Lnet/minecraft/resources/ResourceLocation;
+ 19: aload_0
+ 20: ldc #221 // String locked
+ 22: invokestatic #2318 // Method com/mojang/brigadier/arguments/BoolArgumentType.getBool:(Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Z
+ 25: invokestatic #2346 // Method giveLootBlock:(Lnet/minecraft/commands/CommandSourceStack;Ljava/lang/String;Lnet/minecraft/resources/ResourceLocation;Z)I
+ 28: ireturn
+
+ private static int lambda$lootGiveCommand$49(com.mojang.brigadier.context.CommandContext) throws com.mojang.brigadier.exceptions.CommandSyntaxException;
+ Code:
+ 0: aload_0
+ 1: invokevirtual #2294 // Method com/mojang/brigadier/context/CommandContext.getSource:()Ljava/lang/Object;
+ 4: checkcast #71 // class net/minecraft/commands/CommandSourceStack
+ 7: aload_0
+ 8: ldc #185 // String config_id
+ 10: invokestatic #2302 // Method com/mojang/brigadier/arguments/StringArgumentType.getString:(Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Ljava/lang/String;
+ 13: aload_0
+ 14: ldc #197 // String block_id
+ 16: invokestatic #2298 // Method net/minecraft/commands/arguments/ResourceLocationArgument.m_107011_:(Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Lnet/minecraft/resources/ResourceLocation;
+ 19: iconst_0
+ 20: invokestatic #2346 // Method giveLootBlock:(Lnet/minecraft/commands/CommandSourceStack;Ljava/lang/String;Lnet/minecraft/resources/ResourceLocation;Z)I
+ 23: ireturn
+
+ private static int lambda$createCommand$48(com.mojang.brigadier.context.CommandContext) throws com.mojang.brigadier.exceptions.CommandSyntaxException;
+ Code:
+ 0: aload_0
+ 1: invokevirtual #2294 // Method com/mojang/brigadier/context/CommandContext.getSource:()Ljava/lang/Object;
+ 4: checkcast #71 // class net/minecraft/commands/CommandSourceStack
+ 7: aload_0
+ 8: ldc #185 // String config_id
+ 10: invokestatic #2302 // Method com/mojang/brigadier/arguments/StringArgumentType.getString:(Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Ljava/lang/String;
+ 13: aload_0
+ 14: ldc_w #602 // String per_player
+ 17: invokestatic #2318 // Method com/mojang/brigadier/arguments/BoolArgumentType.getBool:(Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Z
+ 20: aload_0
+ 21: ldc_w #609 // String search_enabled
+ 24: invokestatic #2318 // Method com/mojang/brigadier/arguments/BoolArgumentType.getBool:(Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Z
+ 27: aload_0
+ 28: ldc_w #616 // String lock_enabled
+ 31: invokestatic #2318 // Method com/mojang/brigadier/arguments/BoolArgumentType.getBool:(Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Z
+ 34: invokestatic #2348 // Method createConfig:(Lnet/minecraft/commands/CommandSourceStack;Ljava/lang/String;ZZZ)I
+ 37: ireturn
+
+ private static int lambda$createCommand$47(com.mojang.brigadier.context.CommandContext) throws com.mojang.brigadier.exceptions.CommandSyntaxException;
+ Code:
+ 0: aload_0
+ 1: invokevirtual #2294 // Method com/mojang/brigadier/context/CommandContext.getSource:()Ljava/lang/Object;
+ 4: checkcast #71 // class net/minecraft/commands/CommandSourceStack
+ 7: aload_0
+ 8: ldc #185 // String config_id
+ 10: invokestatic #2302 // Method com/mojang/brigadier/arguments/StringArgumentType.getString:(Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Ljava/lang/String;
+ 13: aload_0
+ 14: ldc_w #602 // String per_player
+ 17: invokestatic #2318 // Method com/mojang/brigadier/arguments/BoolArgumentType.getBool:(Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Z
+ 20: aload_0
+ 21: ldc_w #609 // String search_enabled
+ 24: invokestatic #2318 // Method com/mojang/brigadier/arguments/BoolArgumentType.getBool:(Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Z
+ 27: iconst_0
+ 28: invokestatic #2348 // Method createConfig:(Lnet/minecraft/commands/CommandSourceStack;Ljava/lang/String;ZZZ)I
+ 31: ireturn
+
+ private static int lambda$createCommand$46(com.mojang.brigadier.context.CommandContext) throws com.mojang.brigadier.exceptions.CommandSyntaxException;
+ Code:
+ 0: aload_0
+ 1: invokevirtual #2294 // Method com/mojang/brigadier/context/CommandContext.getSource:()Ljava/lang/Object;
+ 4: checkcast #71 // class net/minecraft/commands/CommandSourceStack
+ 7: aload_0
+ 8: ldc #185 // String config_id
+ 10: invokestatic #2302 // Method com/mojang/brigadier/arguments/StringArgumentType.getString:(Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Ljava/lang/String;
+ 13: aload_0
+ 14: ldc_w #602 // String per_player
+ 17: invokestatic #2318 // Method com/mojang/brigadier/arguments/BoolArgumentType.getBool:(Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Z
+ 20: iconst_1
+ 21: iconst_0
+ 22: invokestatic #2348 // Method createConfig:(Lnet/minecraft/commands/CommandSourceStack;Ljava/lang/String;ZZZ)I
+ 25: ireturn
+
+ private static int lambda$createCommand$45(com.mojang.brigadier.context.CommandContext) throws com.mojang.brigadier.exceptions.CommandSyntaxException;
+ Code:
+ 0: aload_0
+ 1: invokevirtual #2294 // Method com/mojang/brigadier/context/CommandContext.getSource:()Ljava/lang/Object;
+ 4: checkcast #71 // class net/minecraft/commands/CommandSourceStack
+ 7: aload_0
+ 8: ldc #185 // String config_id
+ 10: invokestatic #2302 // Method com/mojang/brigadier/arguments/StringArgumentType.getString:(Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Ljava/lang/String;
+ 13: iconst_1
+ 14: iconst_1
+ 15: iconst_0
+ 16: invokestatic #2348 // Method createConfig:(Lnet/minecraft/commands/CommandSourceStack;Ljava/lang/String;ZZZ)I
+ 19: ireturn
+
+ private static int lambda$advancedLootCommand$44(com.mojang.brigadier.context.CommandContext) throws com.mojang.brigadier.exceptions.CommandSyntaxException;
+ Code:
+ 0: aload_0
+ 1: invokevirtual #2294 // Method com/mojang/brigadier/context/CommandContext.getSource:()Ljava/lang/Object;
+ 4: checkcast #71 // class net/minecraft/commands/CommandSourceStack
+ 7: aload_0
+ 8: ldc #185 // String config_id
+ 10: invokestatic #2302 // Method com/mojang/brigadier/arguments/StringArgumentType.getString:(Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Ljava/lang/String;
+ 13: aload_0
+ 14: ldc #221 // String locked
+ 16: invokestatic #2318 // Method com/mojang/brigadier/arguments/BoolArgumentType.getBool:(Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Z
+ 19: invokestatic #2350 // Method set:(Lnet/minecraft/commands/CommandSourceStack;Ljava/lang/String;Z)I
+ 22: ireturn
+
+ private static int lambda$advancedLootCommand$43(com.mojang.brigadier.context.CommandContext) throws com.mojang.brigadier.exceptions.CommandSyntaxException;
+ Code:
+ 0: aload_0
+ 1: invokevirtual #2294 // Method com/mojang/brigadier/context/CommandContext.getSource:()Ljava/lang/Object;
+ 4: checkcast #71 // class net/minecraft/commands/CommandSourceStack
+ 7: aload_0
+ 8: ldc #185 // String config_id
+ 10: invokestatic #2302 // Method com/mojang/brigadier/arguments/StringArgumentType.getString:(Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Ljava/lang/String;
+ 13: iconst_0
+ 14: invokestatic #2350 // Method set:(Lnet/minecraft/commands/CommandSourceStack;Ljava/lang/String;Z)I
+ 17: ireturn
+
+ private static int lambda$advancedLootCommand$42(com.mojang.brigadier.context.CommandContext) throws com.mojang.brigadier.exceptions.CommandSyntaxException;
+ Code:
+ 0: aload_0
+ 1: invokevirtual #2294 // Method com/mojang/brigadier/context/CommandContext.getSource:()Ljava/lang/Object;
+ 4: checkcast #71 // class net/minecraft/commands/CommandSourceStack
+ 7: invokestatic #2352 // Method generate:(Lnet/minecraft/commands/CommandSourceStack;)I
+ 10: ireturn
+
+ private static int lambda$advancedLootCommand$41(com.mojang.brigadier.context.CommandContext) throws com.mojang.brigadier.exceptions.CommandSyntaxException;
+ Code:
+ 0: aload_0
+ 1: invokevirtual #2294 // Method com/mojang/brigadier/context/CommandContext.getSource:()Ljava/lang/Object;
+ 4: checkcast #71 // class net/minecraft/commands/CommandSourceStack
+ 7: invokestatic #2354 // Method respawnNow:(Lnet/minecraft/commands/CommandSourceStack;)I
+ 10: ireturn
+
+ private static int lambda$advancedLootCommand$40(com.mojang.brigadier.context.CommandContext) throws com.mojang.brigadier.exceptions.CommandSyntaxException;
+ Code:
+ 0: aload_0
+ 1: invokevirtual #2294 // Method com/mojang/brigadier/context/CommandContext.getSource:()Ljava/lang/Object;
+ 4: checkcast #71 // class net/minecraft/commands/CommandSourceStack
+ 7: invokestatic #2356 // Method reset:(Lnet/minecraft/commands/CommandSourceStack;)I
+ 10: ireturn
+
+ private static int lambda$advancedLootCommand$39(com.mojang.brigadier.context.CommandContext) throws com.mojang.brigadier.exceptions.CommandSyntaxException;
+ Code:
+ 0: aload_0
+ 1: invokevirtual #2294 // Method com/mojang/brigadier/context/CommandContext.getSource:()Ljava/lang/Object;
+ 4: checkcast #71 // class net/minecraft/commands/CommandSourceStack
+ 7: invokestatic #2358 // Method clearInventory:(Lnet/minecraft/commands/CommandSourceStack;)I
+ 10: ireturn
+
+ private static int lambda$advancedLootCommand$38(com.mojang.brigadier.context.CommandContext) throws com.mojang.brigadier.exceptions.CommandSyntaxException;
+ Code:
+ 0: aload_0
+ 1: invokevirtual #2294 // Method com/mojang/brigadier/context/CommandContext.getSource:()Ljava/lang/Object;
+ 4: checkcast #71 // class net/minecraft/commands/CommandSourceStack
+ 7: invokestatic #2360 // Method refresh:(Lnet/minecraft/commands/CommandSourceStack;)I
+ 10: ireturn
+
+ private static int lambda$advancedLootCommand$37(com.mojang.brigadier.context.CommandContext) throws com.mojang.brigadier.exceptions.CommandSyntaxException;
+ Code:
+ 0: aload_0
+ 1: invokevirtual #2294 // Method com/mojang/brigadier/context/CommandContext.getSource:()Ljava/lang/Object;
+ 4: checkcast #71 // class net/minecraft/commands/CommandSourceStack
+ 7: invokestatic #2362 // Method formatConfigs:(Lnet/minecraft/commands/CommandSourceStack;)I
+ 10: ireturn
+
+ private static int lambda$advancedLootCommand$36(com.mojang.brigadier.context.CommandContext) throws com.mojang.brigadier.exceptions.CommandSyntaxException;
+ Code:
+ 0: aload_0
+ 1: invokevirtual #2294 // Method com/mojang/brigadier/context/CommandContext.getSource:()Ljava/lang/Object;
+ 4: checkcast #71 // class net/minecraft/commands/CommandSourceStack
+ 7: aload_0
+ 8: ldc_w #523 // String from_id
+ 11: invokestatic #2302 // Method com/mojang/brigadier/arguments/StringArgumentType.getString:(Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Ljava/lang/String;
+ 14: aload_0
+ 15: ldc_w #525 // String to_id
+ 18: invokestatic #2302 // Method com/mojang/brigadier/arguments/StringArgumentType.getString:(Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Ljava/lang/String;
+ 21: invokestatic #2364 // Method copyConfig:(Lnet/minecraft/commands/CommandSourceStack;Ljava/lang/String;Ljava/lang/String;)I
+ 24: ireturn
+
+ private static int lambda$advancedLootCommand$35(com.mojang.brigadier.context.CommandContext) throws com.mojang.brigadier.exceptions.CommandSyntaxException;
+ Code:
+ 0: aload_0
+ 1: invokevirtual #2294 // Method com/mojang/brigadier/context/CommandContext.getSource:()Ljava/lang/Object;
+ 4: checkcast #71 // class net/minecraft/commands/CommandSourceStack
+ 7: invokestatic #2366 // Method advancedHelp:(Lnet/minecraft/commands/CommandSourceStack;)I
+ 10: ireturn
+
+ private static int lambda$simpleTagEntryArgs$34(com.mojang.brigadier.context.CommandContext) throws com.mojang.brigadier.exceptions.CommandSyntaxException;
+ Code:
+ 0: aload_0
+ 1: invokevirtual #2294 // Method com/mojang/brigadier/context/CommandContext.getSource:()Ljava/lang/Object;
+ 4: checkcast #71 // class net/minecraft/commands/CommandSourceStack
+ 7: aload_0
+ 8: ldc #185 // String config_id
+ 10: invokestatic #2302 // Method com/mojang/brigadier/arguments/StringArgumentType.getString:(Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Ljava/lang/String;
+ 13: aload_0
+ 14: ldc_w #434 // String tag_id
+ 17: invokestatic #2298 // Method net/minecraft/commands/arguments/ResourceLocationArgument.m_107011_:(Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Lnet/minecraft/resources/ResourceLocation;
+ 20: aload_0
+ 21: ldc_w #454 // String weight
+ 24: invokestatic #2322 // Method com/mojang/brigadier/arguments/IntegerArgumentType.getInteger:(Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)I
+ 27: aload_0
+ 28: ldc_w #487 // String min_count
+ 31: invokestatic #2322 // Method com/mojang/brigadier/arguments/IntegerArgumentType.getInteger:(Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)I
+ 34: aload_0
+ 35: ldc_w #489 // String max_count
+ 38: invokestatic #2322 // Method com/mojang/brigadier/arguments/IntegerArgumentType.getInteger:(Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)I
+ 41: aload_0
+ 42: ldc_w #474 // String chance
+ 45: invokestatic #2328 // Method com/mojang/brigadier/arguments/FloatArgumentType.getFloat:(Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)F
+ 48: invokestatic #2340 // Method addTagById:(Lnet/minecraft/commands/CommandSourceStack;Ljava/lang/String;Lnet/minecraft/resources/ResourceLocation;IIIF)I
+ 51: ireturn
+
+ private static int lambda$simpleItemEntryArgs$33(com.mojang.brigadier.context.CommandContext) throws com.mojang.brigadier.exceptions.CommandSyntaxException;
+ Code:
+ 0: aload_0
+ 1: invokevirtual #2294 // Method com/mojang/brigadier/context/CommandContext.getSource:()Ljava/lang/Object;
+ 4: checkcast #71 // class net/minecraft/commands/CommandSourceStack
+ 7: aload_0
+ 8: ldc #185 // String config_id
+ 10: invokestatic #2302 // Method com/mojang/brigadier/arguments/StringArgumentType.getString:(Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Ljava/lang/String;
+ 13: aload_0
+ 14: ldc_w #422 // String item_id
+ 17: invokestatic #2298 // Method net/minecraft/commands/arguments/ResourceLocationArgument.m_107011_:(Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Lnet/minecraft/resources/ResourceLocation;
+ 20: aload_0
+ 21: ldc_w #454 // String weight
+ 24: invokestatic #2322 // Method com/mojang/brigadier/arguments/IntegerArgumentType.getInteger:(Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)I
+ 27: aload_0
+ 28: ldc_w #487 // String min_count
+ 31: invokestatic #2322 // Method com/mojang/brigadier/arguments/IntegerArgumentType.getInteger:(Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)I
+ 34: aload_0
+ 35: ldc_w #489 // String max_count
+ 38: invokestatic #2322 // Method com/mojang/brigadier/arguments/IntegerArgumentType.getInteger:(Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)I
+ 41: aload_0
+ 42: ldc_w #474 // String chance
+ 45: invokestatic #2328 // Method com/mojang/brigadier/arguments/FloatArgumentType.getFloat:(Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)F
+ 48: invokestatic #2342 // Method addItemById:(Lnet/minecraft/commands/CommandSourceStack;Ljava/lang/String;Lnet/minecraft/resources/ResourceLocation;IIIF)I
+ 51: ireturn
+
+ private static int lambda$simpleHandEntryArgs$32(com.mojang.brigadier.context.CommandContext) throws com.mojang.brigadier.exceptions.CommandSyntaxException;
+ Code:
+ 0: aload_0
+ 1: invokevirtual #2294 // Method com/mojang/brigadier/context/CommandContext.getSource:()Ljava/lang/Object;
+ 4: checkcast #71 // class net/minecraft/commands/CommandSourceStack
+ 7: aload_0
+ 8: ldc #185 // String config_id
+ 10: invokestatic #2302 // Method com/mojang/brigadier/arguments/StringArgumentType.getString:(Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Ljava/lang/String;
+ 13: aload_0
+ 14: ldc_w #454 // String weight
+ 17: invokestatic #2322 // Method com/mojang/brigadier/arguments/IntegerArgumentType.getInteger:(Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)I
+ 20: aload_0
+ 21: ldc_w #487 // String min_count
+ 24: invokestatic #2322 // Method com/mojang/brigadier/arguments/IntegerArgumentType.getInteger:(Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)I
+ 27: aload_0
+ 28: ldc_w #489 // String max_count
+ 31: invokestatic #2322 // Method com/mojang/brigadier/arguments/IntegerArgumentType.getInteger:(Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)I
+ 34: aload_0
+ 35: ldc_w #474 // String chance
+ 38: invokestatic #2328 // Method com/mojang/brigadier/arguments/FloatArgumentType.getFloat:(Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)F
+ 41: invokestatic #2344 // Method addHeldItem:(Lnet/minecraft/commands/CommandSourceStack;Ljava/lang/String;IIIF)I
+ 44: ireturn
+
+ private static int lambda$simpleHandEntryArgs$31(com.mojang.brigadier.context.CommandContext) throws com.mojang.brigadier.exceptions.CommandSyntaxException;
+ Code:
+ 0: aload_0
+ 1: invokevirtual #2294 // Method com/mojang/brigadier/context/CommandContext.getSource:()Ljava/lang/Object;
+ 4: checkcast #71 // class net/minecraft/commands/CommandSourceStack
+ 7: aload_0
+ 8: ldc #185 // String config_id
+ 10: invokestatic #2302 // Method com/mojang/brigadier/arguments/StringArgumentType.getString:(Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Ljava/lang/String;
+ 13: aload_0
+ 14: ldc_w #454 // String weight
+ 17: invokestatic #2322 // Method com/mojang/brigadier/arguments/IntegerArgumentType.getInteger:(Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)I
+ 20: aload_0
+ 21: ldc_w #487 // String min_count
+ 24: invokestatic #2322 // Method com/mojang/brigadier/arguments/IntegerArgumentType.getInteger:(Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)I
+ 27: aload_0
+ 28: ldc_w #489 // String max_count
+ 31: invokestatic #2322 // Method com/mojang/brigadier/arguments/IntegerArgumentType.getInteger:(Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)I
+ 34: fconst_1
+ 35: invokestatic #2344 // Method addHeldItem:(Lnet/minecraft/commands/CommandSourceStack;Ljava/lang/String;IIIF)I
+ 38: ireturn
+
+ private static int lambda$simpleHandEntryArgs$30(com.mojang.brigadier.context.CommandContext) throws com.mojang.brigadier.exceptions.CommandSyntaxException;
+ Code:
+ 0: aload_0
+ 1: invokevirtual #2294 // Method com/mojang/brigadier/context/CommandContext.getSource:()Ljava/lang/Object;
+ 4: checkcast #71 // class net/minecraft/commands/CommandSourceStack
+ 7: aload_0
+ 8: ldc #185 // String config_id
+ 10: invokestatic #2302 // Method com/mojang/brigadier/arguments/StringArgumentType.getString:(Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Ljava/lang/String;
+ 13: aload_0
+ 14: ldc_w #454 // String weight
+ 17: invokestatic #2322 // Method com/mojang/brigadier/arguments/IntegerArgumentType.getInteger:(Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)I
+ 20: aload_0
+ 21: ldc_w #467 // String count
+ 24: invokestatic #2322 // Method com/mojang/brigadier/arguments/IntegerArgumentType.getInteger:(Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)I
+ 27: aload_0
+ 28: ldc_w #467 // String count
+ 31: invokestatic #2322 // Method com/mojang/brigadier/arguments/IntegerArgumentType.getInteger:(Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)I
+ 34: aload_0
+ 35: ldc_w #474 // String chance
+ 38: invokestatic #2328 // Method com/mojang/brigadier/arguments/FloatArgumentType.getFloat:(Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)F
+ 41: invokestatic #2344 // Method addHeldItem:(Lnet/minecraft/commands/CommandSourceStack;Ljava/lang/String;IIIF)I
+ 44: ireturn
+
+ private static int lambda$simpleHandEntryArgs$29(com.mojang.brigadier.context.CommandContext) throws com.mojang.brigadier.exceptions.CommandSyntaxException;
+ Code:
+ 0: aload_0
+ 1: invokevirtual #2294 // Method com/mojang/brigadier/context/CommandContext.getSource:()Ljava/lang/Object;
+ 4: checkcast #71 // class net/minecraft/commands/CommandSourceStack
+ 7: aload_0
+ 8: ldc #185 // String config_id
+ 10: invokestatic #2302 // Method com/mojang/brigadier/arguments/StringArgumentType.getString:(Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Ljava/lang/String;
+ 13: aload_0
+ 14: ldc_w #454 // String weight
+ 17: invokestatic #2322 // Method com/mojang/brigadier/arguments/IntegerArgumentType.getInteger:(Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)I
+ 20: aload_0
+ 21: ldc_w #467 // String count
+ 24: invokestatic #2322 // Method com/mojang/brigadier/arguments/IntegerArgumentType.getInteger:(Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)I
+ 27: aload_0
+ 28: ldc_w #467 // String count
+ 31: invokestatic #2322 // Method com/mojang/brigadier/arguments/IntegerArgumentType.getInteger:(Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)I
+ 34: fconst_1
+ 35: invokestatic #2344 // Method addHeldItem:(Lnet/minecraft/commands/CommandSourceStack;Ljava/lang/String;IIIF)I
+ 38: ireturn
+
+ private static int lambda$simpleHandEntryArgs$28(com.mojang.brigadier.context.CommandContext) throws com.mojang.brigadier.exceptions.CommandSyntaxException;
+ Code:
+ 0: aload_0
+ 1: invokevirtual #2294 // Method com/mojang/brigadier/context/CommandContext.getSource:()Ljava/lang/Object;
+ 4: checkcast #71 // class net/minecraft/commands/CommandSourceStack
+ 7: aload_0
+ 8: ldc #185 // String config_id
+ 10: invokestatic #2302 // Method com/mojang/brigadier/arguments/StringArgumentType.getString:(Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Ljava/lang/String;
+ 13: aload_0
+ 14: ldc_w #454 // String weight
+ 17: invokestatic #2322 // Method com/mojang/brigadier/arguments/IntegerArgumentType.getInteger:(Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)I
+ 20: iconst_1
+ 21: iconst_1
+ 22: fconst_1
+ 23: invokestatic #2344 // Method addHeldItem:(Lnet/minecraft/commands/CommandSourceStack;Ljava/lang/String;IIIF)I
+ 26: ireturn
+
+ private static int lambda$simpleAddCommand$27(com.mojang.brigadier.context.CommandContext) throws com.mojang.brigadier.exceptions.CommandSyntaxException;
+ Code:
+ 0: aload_0
+ 1: invokevirtual #2294 // Method com/mojang/brigadier/context/CommandContext.getSource:()Ljava/lang/Object;
+ 4: checkcast #71 // class net/minecraft/commands/CommandSourceStack
+ 7: aload_0
+ 8: ldc #185 // String config_id
+ 10: invokestatic #2302 // Method com/mojang/brigadier/arguments/StringArgumentType.getString:(Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Ljava/lang/String;
+ 13: aload_0
+ 14: ldc_w #446 // String loot_table_id
+ 17: invokestatic #2298 // Method net/minecraft/commands/arguments/ResourceLocationArgument.m_107011_:(Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Lnet/minecraft/resources/ResourceLocation;
+ 20: invokestatic #2338 // Method addLootTable:(Lnet/minecraft/commands/CommandSourceStack;Ljava/lang/String;Lnet/minecraft/resources/ResourceLocation;)I
+ 23: ireturn
+
+ private static int lambda$simpleAddCommand$26(com.mojang.brigadier.context.CommandContext) throws com.mojang.brigadier.exceptions.CommandSyntaxException;
+ Code:
+ 0: aload_0
+ 1: invokevirtual #2294 // Method com/mojang/brigadier/context/CommandContext.getSource:()Ljava/lang/Object;
+ 4: checkcast #71 // class net/minecraft/commands/CommandSourceStack
+ 7: aload_0
+ 8: ldc #185 // String config_id
+ 10: invokestatic #2302 // Method com/mojang/brigadier/arguments/StringArgumentType.getString:(Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Ljava/lang/String;
+ 13: aload_0
+ 14: ldc_w #434 // String tag_id
+ 17: invokestatic #2298 // Method net/minecraft/commands/arguments/ResourceLocationArgument.m_107011_:(Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Lnet/minecraft/resources/ResourceLocation;
+ 20: bipush 10
+ 22: iconst_1
+ 23: iconst_1
+ 24: fconst_1
+ 25: invokestatic #2340 // Method addTagById:(Lnet/minecraft/commands/CommandSourceStack;Ljava/lang/String;Lnet/minecraft/resources/ResourceLocation;IIIF)I
+ 28: ireturn
+
+ private static int lambda$simpleAddCommand$25(com.mojang.brigadier.context.CommandContext) throws com.mojang.brigadier.exceptions.CommandSyntaxException;
+ Code:
+ 0: aload_0
+ 1: invokevirtual #2294 // Method com/mojang/brigadier/context/CommandContext.getSource:()Ljava/lang/Object;
+ 4: checkcast #71 // class net/minecraft/commands/CommandSourceStack
+ 7: aload_0
+ 8: ldc #185 // String config_id
+ 10: invokestatic #2302 // Method com/mojang/brigadier/arguments/StringArgumentType.getString:(Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Ljava/lang/String;
+ 13: aload_0
+ 14: ldc_w #422 // String item_id
+ 17: invokestatic #2298 // Method net/minecraft/commands/arguments/ResourceLocationArgument.m_107011_:(Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Lnet/minecraft/resources/ResourceLocation;
+ 20: bipush 10
+ 22: iconst_1
+ 23: iconst_1
+ 24: fconst_1
+ 25: invokestatic #2342 // Method addItemById:(Lnet/minecraft/commands/CommandSourceStack;Ljava/lang/String;Lnet/minecraft/resources/ResourceLocation;IIIF)I
+ 28: ireturn
+
+ private static int lambda$simpleAddCommand$24(com.mojang.brigadier.context.CommandContext) throws com.mojang.brigadier.exceptions.CommandSyntaxException;
+ Code:
+ 0: aload_0
+ 1: invokevirtual #2294 // Method com/mojang/brigadier/context/CommandContext.getSource:()Ljava/lang/Object;
+ 4: checkcast #71 // class net/minecraft/commands/CommandSourceStack
+ 7: aload_0
+ 8: ldc #185 // String config_id
+ 10: invokestatic #2302 // Method com/mojang/brigadier/arguments/StringArgumentType.getString:(Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Ljava/lang/String;
+ 13: bipush 10
+ 15: iconst_1
+ 16: iconst_1
+ 17: fconst_1
+ 18: invokestatic #2344 // Method addHeldItem:(Lnet/minecraft/commands/CommandSourceStack;Ljava/lang/String;IIIF)I
+ 21: ireturn
+
+ private static int lambda$simpleUseCommand$23(com.mojang.brigadier.context.CommandContext) throws com.mojang.brigadier.exceptions.CommandSyntaxException;
+ Code:
+ 0: aload_0
+ 1: invokevirtual #2294 // Method com/mojang/brigadier/context/CommandContext.getSource:()Ljava/lang/Object;
+ 4: checkcast #71 // class net/minecraft/commands/CommandSourceStack
+ 7: aload_0
+ 8: ldc #185 // String config_id
+ 10: invokestatic #2302 // Method com/mojang/brigadier/arguments/StringArgumentType.getString:(Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Ljava/lang/String;
+ 13: aload_0
+ 14: ldc #221 // String locked
+ 16: invokestatic #2318 // Method com/mojang/brigadier/arguments/BoolArgumentType.getBool:(Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Z
+ 19: invokestatic #2350 // Method set:(Lnet/minecraft/commands/CommandSourceStack;Ljava/lang/String;Z)I
+ 22: ireturn
+
+ private static int lambda$simpleUseCommand$22(com.mojang.brigadier.context.CommandContext) throws com.mojang.brigadier.exceptions.CommandSyntaxException;
+ Code:
+ 0: aload_0
+ 1: invokevirtual #2294 // Method com/mojang/brigadier/context/CommandContext.getSource:()Ljava/lang/Object;
+ 4: checkcast #71 // class net/minecraft/commands/CommandSourceStack
+ 7: aload_0
+ 8: ldc #185 // String config_id
+ 10: invokestatic #2302 // Method com/mojang/brigadier/arguments/StringArgumentType.getString:(Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Ljava/lang/String;
+ 13: iconst_0
+ 14: invokestatic #2350 // Method set:(Lnet/minecraft/commands/CommandSourceStack;Ljava/lang/String;Z)I
+ 17: ireturn
+
+ private static int lambda$simpleNewCommand$21(com.mojang.brigadier.context.CommandContext) throws com.mojang.brigadier.exceptions.CommandSyntaxException;
+ Code:
+ 0: aload_0
+ 1: invokevirtual #2294 // Method com/mojang/brigadier/context/CommandContext.getSource:()Ljava/lang/Object;
+ 4: checkcast #71 // class net/minecraft/commands/CommandSourceStack
+ 7: aload_0
+ 8: ldc #185 // String config_id
+ 10: invokestatic #2302 // Method com/mojang/brigadier/arguments/StringArgumentType.getString:(Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Ljava/lang/String;
+ 13: iconst_1
+ 14: iconst_1
+ 15: iconst_0
+ 16: invokestatic #2348 // Method createConfig:(Lnet/minecraft/commands/CommandSourceStack;Ljava/lang/String;ZZZ)I
+ 19: ireturn
+
+ private static int lambda$lootCommand$20(com.mojang.brigadier.context.CommandContext) throws com.mojang.brigadier.exceptions.CommandSyntaxException;
+ Code:
+ 0: aload_0
+ 1: invokevirtual #2294 // Method com/mojang/brigadier/context/CommandContext.getSource:()Ljava/lang/Object;
+ 4: checkcast #71 // class net/minecraft/commands/CommandSourceStack
+ 7: iconst_0
+ 8: invokestatic #2368 // Method lock:(Lnet/minecraft/commands/CommandSourceStack;Z)I
+ 11: ireturn
+
+ private static int lambda$lootCommand$19(com.mojang.brigadier.context.CommandContext) throws com.mojang.brigadier.exceptions.CommandSyntaxException;
+ Code:
+ 0: aload_0
+ 1: invokevirtual #2294 // Method com/mojang/brigadier/context/CommandContext.getSource:()Ljava/lang/Object;
+ 4: checkcast #71 // class net/minecraft/commands/CommandSourceStack
+ 7: iconst_1
+ 8: invokestatic #2368 // Method lock:(Lnet/minecraft/commands/CommandSourceStack;Z)I
+ 11: ireturn
+
+ private static int lambda$lootCommand$18(com.mojang.brigadier.context.CommandContext) throws com.mojang.brigadier.exceptions.CommandSyntaxException;
+ Code:
+ 0: aload_0
+ 1: invokevirtual #2294 // Method com/mojang/brigadier/context/CommandContext.getSource:()Ljava/lang/Object;
+ 4: checkcast #71 // class net/minecraft/commands/CommandSourceStack
+ 7: invokestatic #2352 // Method generate:(Lnet/minecraft/commands/CommandSourceStack;)I
+ 10: ireturn
+
+ private static int lambda$lootCommand$17(com.mojang.brigadier.context.CommandContext) throws com.mojang.brigadier.exceptions.CommandSyntaxException;
+ Code:
+ 0: aload_0
+ 1: invokevirtual #2294 // Method com/mojang/brigadier/context/CommandContext.getSource:()Ljava/lang/Object;
+ 4: checkcast #71 // class net/minecraft/commands/CommandSourceStack
+ 7: invokestatic #2370 // Method clear:(Lnet/minecraft/commands/CommandSourceStack;)I
+ 10: ireturn
+
+ private static int lambda$lootCommand$16(com.mojang.brigadier.context.CommandContext) throws com.mojang.brigadier.exceptions.CommandSyntaxException;
+ Code:
+ 0: aload_0
+ 1: invokevirtual #2294 // Method com/mojang/brigadier/context/CommandContext.getSource:()Ljava/lang/Object;
+ 4: checkcast #71 // class net/minecraft/commands/CommandSourceStack
+ 7: invokestatic #2372 // Method info:(Lnet/minecraft/commands/CommandSourceStack;)I
+ 10: ireturn
+
+ private static int lambda$lootCommand$15(com.mojang.brigadier.context.CommandContext) throws com.mojang.brigadier.exceptions.CommandSyntaxException;
+ Code:
+ 0: aload_0
+ 1: invokevirtual #2294 // Method com/mojang/brigadier/context/CommandContext.getSource:()Ljava/lang/Object;
+ 4: checkcast #71 // class net/minecraft/commands/CommandSourceStack
+ 7: aload_0
+ 8: ldc_w #307 // String preset_id
+ 11: invokestatic #2302 // Method com/mojang/brigadier/arguments/StringArgumentType.getString:(Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Ljava/lang/String;
+ 14: invokestatic #2374 // Method preset:(Lnet/minecraft/commands/CommandSourceStack;Ljava/lang/String;)I
+ 17: ireturn
+
+ private static int lambda$lootCommand$14(com.mojang.brigadier.context.CommandContext) throws com.mojang.brigadier.exceptions.CommandSyntaxException;
+ Code:
+ 0: aload_0
+ 1: invokevirtual #2294 // Method com/mojang/brigadier/context/CommandContext.getSource:()Ljava/lang/Object;
+ 4: checkcast #71 // class net/minecraft/commands/CommandSourceStack
+ 7: invokestatic #2376 // Method presets:(Lnet/minecraft/commands/CommandSourceStack;)I
+ 10: ireturn
+
+ private static int lambda$lootCommand$13(com.mojang.brigadier.context.CommandContext) throws com.mojang.brigadier.exceptions.CommandSyntaxException;
+ Code:
+ 0: aload_0
+ 1: invokevirtual #2294 // Method com/mojang/brigadier/context/CommandContext.getSource:()Ljava/lang/Object;
+ 4: checkcast #71 // class net/minecraft/commands/CommandSourceStack
+ 7: invokestatic #2378 // Method folder:(Lnet/minecraft/commands/CommandSourceStack;)I
+ 10: ireturn
+
+ private static int lambda$lootCommand$12(com.mojang.brigadier.context.CommandContext) throws com.mojang.brigadier.exceptions.CommandSyntaxException;
+ Code:
+ 0: aload_0
+ 1: invokevirtual #2294 // Method com/mojang/brigadier/context/CommandContext.getSource:()Ljava/lang/Object;
+ 4: checkcast #71 // class net/minecraft/commands/CommandSourceStack
+ 7: invokestatic #2380 // Method list:(Lnet/minecraft/commands/CommandSourceStack;)I
+ 10: ireturn
+
+ private static int lambda$lootCommand$11(com.mojang.brigadier.context.CommandContext) throws com.mojang.brigadier.exceptions.CommandSyntaxException;
+ Code:
+ 0: aload_0
+ 1: invokevirtual #2294 // Method com/mojang/brigadier/context/CommandContext.getSource:()Ljava/lang/Object;
+ 4: checkcast #71 // class net/minecraft/commands/CommandSourceStack
+ 7: aload_0
+ 8: ldc_w #307 // String preset_id
+ 11: invokestatic #2302 // Method com/mojang/brigadier/arguments/StringArgumentType.getString:(Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Ljava/lang/String;
+ 14: aload_0
+ 15: ldc_w #298 // String target_id
+ 18: invokestatic #2302 // Method com/mojang/brigadier/arguments/StringArgumentType.getString:(Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Ljava/lang/String;
+ 21: invokestatic #2382 // Method createPresetAs:(Lnet/minecraft/commands/CommandSourceStack;Ljava/lang/String;Ljava/lang/String;)I
+ 24: ireturn
+
+ private static int lambda$lootCommand$10(com.mojang.brigadier.context.CommandContext) throws com.mojang.brigadier.exceptions.CommandSyntaxException;
+ Code:
+ 0: aload_0
+ 1: invokevirtual #2294 // Method com/mojang/brigadier/context/CommandContext.getSource:()Ljava/lang/Object;
+ 4: checkcast #71 // class net/minecraft/commands/CommandSourceStack
+ 7: aload_0
+ 8: ldc_w #296 // String export_id
+ 11: invokestatic #2302 // Method com/mojang/brigadier/arguments/StringArgumentType.getString:(Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Ljava/lang/String;
+ 14: aload_0
+ 15: ldc_w #298 // String target_id
+ 18: invokestatic #2302 // Method com/mojang/brigadier/arguments/StringArgumentType.getString:(Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Ljava/lang/String;
+ 21: invokestatic #2384 // Method importProfile:(Lnet/minecraft/commands/CommandSourceStack;Ljava/lang/String;Ljava/lang/String;)I
+ 24: ireturn
+
+ private static int lambda$lootCommand$9(com.mojang.brigadier.context.CommandContext) throws com.mojang.brigadier.exceptions.CommandSyntaxException;
+ Code:
+ 0: aload_0
+ 1: invokevirtual #2294 // Method com/mojang/brigadier/context/CommandContext.getSource:()Ljava/lang/Object;
+ 4: checkcast #71 // class net/minecraft/commands/CommandSourceStack
+ 7: aload_0
+ 8: ldc_w #266 // String profile_id
+ 11: invokestatic #2302 // Method com/mojang/brigadier/arguments/StringArgumentType.getString:(Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Ljava/lang/String;
+ 14: invokestatic #2386 // Method exportProfile:(Lnet/minecraft/commands/CommandSourceStack;Ljava/lang/String;)I
+ 17: ireturn
+
+ private static int lambda$lootCommand$8(com.mojang.brigadier.context.CommandContext) throws com.mojang.brigadier.exceptions.CommandSyntaxException;
+ Code:
+ 0: aload_0
+ 1: invokevirtual #2294 // Method com/mojang/brigadier/context/CommandContext.getSource:()Ljava/lang/Object;
+ 4: checkcast #71 // class net/minecraft/commands/CommandSourceStack
+ 7: aload_0
+ 8: ldc_w #280 // String remove_missing_profiles
+ 11: invokestatic #2318 // Method com/mojang/brigadier/arguments/BoolArgumentType.getBool:(Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Z
+ 14: invokestatic #2388 // Method cleanupLootMarkers:(Lnet/minecraft/commands/CommandSourceStack;Z)I
+ 17: ireturn
+
+ private static int lambda$lootCommand$7(com.mojang.brigadier.context.CommandContext) throws com.mojang.brigadier.exceptions.CommandSyntaxException;
+ Code:
+ 0: aload_0
+ 1: invokevirtual #2294 // Method com/mojang/brigadier/context/CommandContext.getSource:()Ljava/lang/Object;
+ 4: checkcast #71 // class net/minecraft/commands/CommandSourceStack
+ 7: iconst_0
+ 8: invokestatic #2388 // Method cleanupLootMarkers:(Lnet/minecraft/commands/CommandSourceStack;Z)I
+ 11: ireturn
+
+ private static int lambda$lootCommand$6(com.mojang.brigadier.context.CommandContext) throws com.mojang.brigadier.exceptions.CommandSyntaxException;
+ Code:
+ 0: aload_0
+ 1: invokevirtual #2294 // Method com/mojang/brigadier/context/CommandContext.getSource:()Ljava/lang/Object;
+ 4: checkcast #71 // class net/minecraft/commands/CommandSourceStack
+ 7: aload_0
+ 8: ldc_w #266 // String profile_id
+ 11: invokestatic #2302 // Method com/mojang/brigadier/arguments/StringArgumentType.getString:(Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Ljava/lang/String;
+ 14: invokestatic #2390 // Method profileUsage:(Lnet/minecraft/commands/CommandSourceStack;Ljava/lang/String;)I
+ 17: ireturn
+
+ private static int lambda$lootCommand$5(com.mojang.brigadier.context.CommandContext) throws com.mojang.brigadier.exceptions.CommandSyntaxException;
+ Code:
+ 0: aload_0
+ 1: invokevirtual #2294 // Method com/mojang/brigadier/context/CommandContext.getSource:()Ljava/lang/Object;
+ 4: checkcast #71 // class net/minecraft/commands/CommandSourceStack
+ 7: invokestatic #2392 // Method undoWand:(Lnet/minecraft/commands/CommandSourceStack;)I
+ 10: ireturn
+
+ private static int lambda$lootCommand$4(com.mojang.brigadier.context.CommandContext) throws com.mojang.brigadier.exceptions.CommandSyntaxException;
+ Code:
+ 0: aload_0
+ 1: invokevirtual #2294 // Method com/mojang/brigadier/context/CommandContext.getSource:()Ljava/lang/Object;
+ 4: checkcast #71 // class net/minecraft/commands/CommandSourceStack
+ 7: invokestatic #2394 // Method restoreDefaultProfiles:(Lnet/minecraft/commands/CommandSourceStack;)I
+ 10: ireturn
+
+ private static int lambda$lootCommand$3(com.mojang.brigadier.context.CommandContext) throws com.mojang.brigadier.exceptions.CommandSyntaxException;
+ Code:
+ 0: aload_0
+ 1: invokevirtual #2294 // Method com/mojang/brigadier/context/CommandContext.getSource:()Ljava/lang/Object;
+ 4: checkcast #71 // class net/minecraft/commands/CommandSourceStack
+ 7: invokestatic #2396 // Method reload:(Lnet/minecraft/commands/CommandSourceStack;)I
+ 10: ireturn
+
+ private static int lambda$lootCommand$2(com.mojang.brigadier.context.CommandContext) throws com.mojang.brigadier.exceptions.CommandSyntaxException;
+ Code:
+ 0: aload_0
+ 1: invokevirtual #2294 // Method com/mojang/brigadier/context/CommandContext.getSource:()Ljava/lang/Object;
+ 4: checkcast #71 // class net/minecraft/commands/CommandSourceStack
+ 7: invokestatic #2398 // Method help:(Lnet/minecraft/commands/CommandSourceStack;)I
+ 10: ireturn
+
+ private static int lambda$giveCommand$1(com.mojang.brigadier.context.CommandContext) throws com.mojang.brigadier.exceptions.CommandSyntaxException;
+ Code:
+ 0: aload_0
+ 1: invokevirtual #2294 // Method com/mojang/brigadier/context/CommandContext.getSource:()Ljava/lang/Object;
+ 4: checkcast #71 // class net/minecraft/commands/CommandSourceStack
+ 7: aload_0
+ 8: ldc #185 // String config_id
+ 10: invokestatic #2302 // Method com/mojang/brigadier/arguments/StringArgumentType.getString:(Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Ljava/lang/String;
+ 13: aload_0
+ 14: ldc #197 // String block_id
+ 16: invokestatic #2298 // Method net/minecraft/commands/arguments/ResourceLocationArgument.m_107011_:(Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Lnet/minecraft/resources/ResourceLocation;
+ 19: aload_0
+ 20: ldc #221 // String locked
+ 22: invokestatic #2318 // Method com/mojang/brigadier/arguments/BoolArgumentType.getBool:(Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Z
+ 25: invokestatic #2346 // Method giveLootBlock:(Lnet/minecraft/commands/CommandSourceStack;Ljava/lang/String;Lnet/minecraft/resources/ResourceLocation;Z)I
+ 28: ireturn
+
+ private static int lambda$giveCommand$0(com.mojang.brigadier.context.CommandContext) throws com.mojang.brigadier.exceptions.CommandSyntaxException;
+ Code:
+ 0: aload_0
+ 1: invokevirtual #2294 // Method com/mojang/brigadier/context/CommandContext.getSource:()Ljava/lang/Object;
+ 4: checkcast #71 // class net/minecraft/commands/CommandSourceStack
+ 7: aload_0
+ 8: ldc #185 // String config_id
+ 10: invokestatic #2302 // Method com/mojang/brigadier/arguments/StringArgumentType.getString:(Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Ljava/lang/String;
+ 13: aload_0
+ 14: ldc #197 // String block_id
+ 16: invokestatic #2298 // Method net/minecraft/commands/arguments/ResourceLocationArgument.m_107011_:(Lcom/mojang/brigadier/context/CommandContext;Ljava/lang/String;)Lnet/minecraft/resources/ResourceLocation;
+ 19: iconst_0
+ 20: invokestatic #2346 // Method giveLootBlock:(Lnet/minecraft/commands/CommandSourceStack;Ljava/lang/String;Lnet/minecraft/resources/ResourceLocation;Z)I
+ 23: ireturn
+
+ static {};
+ Code:
+ 0: new #1912 // class com/mojang/brigadier/exceptions/SimpleCommandExceptionType
+ 3: dup
+ 4: ldc_w #2401 // String Look at a container first.
+ 7: invokestatic #796 // InterfaceMethod net/minecraft/network/chat/Component.m_237113_:(Ljava/lang/String;)Lnet/minecraft/network/chat/MutableComponent;
+ 10: invokespecial #2404 // Method com/mojang/brigadier/exceptions/SimpleCommandExceptionType."":(Lcom/mojang/brigadier/Message;)V
+ 13: putstatic #1910 // Field NO_BLOCK_HIT:Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType;
+ 16: new #1912 // class com/mojang/brigadier/exceptions/SimpleCommandExceptionType
+ 19: dup
+ 20: ldc_w #2406 // String The targeted block is not a loot-capable container.
+ 23: invokestatic #796 // InterfaceMethod net/minecraft/network/chat/Component.m_237113_:(Ljava/lang/String;)Lnet/minecraft/network/chat/MutableComponent;
+ 26: invokespecial #2404 // Method com/mojang/brigadier/exceptions/SimpleCommandExceptionType."":(Lcom/mojang/brigadier/Message;)V
+ 29: putstatic #1924 // Field NOT_LOOT_CONTAINER:Lcom/mojang/brigadier/exceptions/SimpleCommandExceptionType;
+ 32: return
+}
diff --git a/_sa_hanhua_out/_tmp/classes/com_ogaba_sa_decor_common_loot_DecorLootConfigManager.txt b/_sa_hanhua_out/_tmp/classes/com_ogaba_sa_decor_common_loot_DecorLootConfigManager.txt
new file mode 100644
index 0000000..c342b1b
--- /dev/null
+++ b/_sa_hanhua_out/_tmp/classes/com_ogaba_sa_decor_common_loot_DecorLootConfigManager.txt
@@ -0,0 +1,5620 @@
+Compiled from "DecorLootConfigManager.java"
+public final class com.ogaba.sa_decor.common.loot.DecorLootConfigManager {
+ private static final java.lang.String SURVIVORS_ARSENAL_CONFIG_FOLDER;
+
+ private static final int MAX_CONFIG_FILES;
+
+ private static final java.lang.String DEFAULT_PROFILES_INITIALIZED_MARKER;
+
+ private static final com.google.gson.Gson GSON;
+
+ private static final com.google.gson.Gson COMPACT_GSON;
+
+ private static final java.util.Map CONFIGS;
+
+ private static final java.util.Map CONFIG_PATHS;
+
+ private com.ogaba.sa_decor.common.loot.DecorLootConfigManager();
+ Code:
+ 0: aload_0
+ 1: invokespecial #43 // Method java/lang/Object."":()V
+ 4: return
+
+ public static void reload();
+ Code:
+ 0: getstatic #52 // Field CONFIGS:Ljava/util/Map;
+ 3: invokeinterface #55, 1 // InterfaceMethod java/util/Map.clear:()V
+ 8: getstatic #57 // Field CONFIG_PATHS:Ljava/util/Map;
+ 11: invokeinterface #55, 1 // InterfaceMethod java/util/Map.clear:()V
+ 16: invokestatic #62 // Method com/ogaba/sa_decor/common/loot/DecorLootGenerator.clearCaches:()V
+ 19: invokestatic #66 // Method getLootCrateConfigDirectory:()Ljava/nio/file/Path;
+ 22: astore_0
+ 23: aload_0
+ 24: iconst_0
+ 25: anewarray #68 // class java/nio/file/LinkOption
+ 28: invokestatic #74 // Method java/nio/file/Files.isDirectory:(Ljava/nio/file/Path;[Ljava/nio/file/LinkOption;)Z
+ 31: istore_1
+ 32: aload_0
+ 33: iconst_0
+ 34: anewarray #76 // class java/nio/file/attribute/FileAttribute
+ 37: invokestatic #80 // Method java/nio/file/Files.createDirectories:(Ljava/nio/file/Path;[Ljava/nio/file/attribute/FileAttribute;)Ljava/nio/file/Path;
+ 40: pop
+ 41: aload_0
+ 42: iload_1
+ 43: invokestatic #84 // Method initializeDefaultProfilesOnce:(Ljava/nio/file/Path;Z)V
+ 46: goto 63
+ 49: astore_2
+ 50: getstatic #92 // Field com/ogaba/sa_decor/SADecor.LOGGER:Lorg/slf4j/Logger;
+ 53: ldc #94 // String Could not create Survivors Arsenal loot crate config directory: {}
+ 55: aload_0
+ 56: aload_2
+ 57: invokeinterface #100, 4 // InterfaceMethod org/slf4j/Logger.warn:(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)V
+ 62: return
+ 63: aload_0
+ 64: invokestatic #104 // Method java/nio/file/Files.list:(Ljava/nio/file/Path;)Ljava/util/stream/Stream;
+ 67: astore_2
+ 68: aload_2
+ 69: invokedynamic #123, 0 // InvokeDynamic #0:test:()Ljava/util/function/Predicate;
+ 74: invokeinterface #129, 2 // InterfaceMethod java/util/stream/Stream.filter:(Ljava/util/function/Predicate;)Ljava/util/stream/Stream;
+ 79: invokedynamic #134, 0 // InvokeDynamic #1:test:()Ljava/util/function/Predicate;
+ 84: invokeinterface #129, 2 // InterfaceMethod java/util/stream/Stream.filter:(Ljava/util/function/Predicate;)Ljava/util/stream/Stream;
+ 89: invokedynamic #146, 0 // InvokeDynamic #2:apply:()Ljava/util/function/Function;
+ 94: invokestatic #152 // InterfaceMethod java/util/Comparator.comparing:(Ljava/util/function/Function;)Ljava/util/Comparator;
+ 97: invokeinterface #156, 2 // InterfaceMethod java/util/stream/Stream.sorted:(Ljava/util/Comparator;)Ljava/util/stream/Stream;
+ 102: ldc2_w #157 // long 4096l
+ 105: invokeinterface #162, 3 // InterfaceMethod java/util/stream/Stream.limit:(J)Ljava/util/stream/Stream;
+ 110: invokedynamic #174, 0 // InvokeDynamic #3:accept:()Ljava/util/function/Consumer;
+ 115: invokeinterface #178, 2 // InterfaceMethod java/util/stream/Stream.forEach:(Ljava/util/function/Consumer;)V
+ 120: aload_2
+ 121: ifnull 157
+ 124: aload_2
+ 125: invokeinterface #181, 1 // InterfaceMethod java/util/stream/Stream.close:()V
+ 130: goto 157
+ 133: astore_3
+ 134: aload_2
+ 135: ifnull 155
+ 138: aload_2
+ 139: invokeinterface #181, 1 // InterfaceMethod java/util/stream/Stream.close:()V
+ 144: goto 155
+ 147: astore 4
+ 149: aload_3
+ 150: aload 4
+ 152: invokevirtual #185 // Method java/lang/Throwable.addSuppressed:(Ljava/lang/Throwable;)V
+ 155: aload_3
+ 156: athrow
+ 157: goto 173
+ 160: astore_2
+ 161: getstatic #92 // Field com/ogaba/sa_decor/SADecor.LOGGER:Lorg/slf4j/Logger;
+ 164: ldc #187 // String Could not list Survivors Arsenal loot crate configs: {}
+ 166: aload_0
+ 167: aload_2
+ 168: invokeinterface #100, 4 // InterfaceMethod org/slf4j/Logger.warn:(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)V
+ 173: getstatic #92 // Field com/ogaba/sa_decor/SADecor.LOGGER:Lorg/slf4j/Logger;
+ 176: ldc #189 // String Loaded {} Survivors Arsenal loot crate config(s).
+ 178: getstatic #52 // Field CONFIGS:Ljava/util/Map;
+ 181: invokeinterface #193, 1 // InterfaceMethod java/util/Map.size:()I
+ 186: invokestatic #199 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
+ 189: invokeinterface #203, 3 // InterfaceMethod org/slf4j/Logger.info:(Ljava/lang/String;Ljava/lang/Object;)V
+ 194: return
+ Exception table:
+ from to target type
+ 32 46 49 Class java/io/IOException
+ 68 120 133 Class java/lang/Throwable
+ 138 144 147 Class java/lang/Throwable
+ 63 157 160 Class java/io/IOException
+
+ public static com.ogaba.sa_decor.common.loot.DecorLootConfig get(java.lang.String);
+ Code:
+ 0: getstatic #52 // Field CONFIGS:Ljava/util/Map;
+ 3: aload_0
+ 4: invokeinterface #217, 2 // InterfaceMethod java/util/Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
+ 9: checkcast #219 // class com/ogaba/sa_decor/common/loot/DecorLootConfig
+ 12: areturn
+
+ public static java.util.Collection values();
+ Code:
+ 0: getstatic #52 // Field CONFIGS:Ljava/util/Map;
+ 3: invokeinterface #225, 1 // InterfaceMethod java/util/Map.values:()Ljava/util/Collection;
+ 8: areturn
+
+ public static boolean has(java.lang.String);
+ Code:
+ 0: getstatic #52 // Field CONFIGS:Ljava/util/Map;
+ 3: aload_0
+ 4: invokeinterface #230, 2 // InterfaceMethod java/util/Map.containsKey:(Ljava/lang/Object;)Z
+ 9: ireturn
+
+ public static long getRevision(java.lang.String);
+ Code:
+ 0: getstatic #57 // Field CONFIG_PATHS:Ljava/util/Map;
+ 3: aload_0
+ 4: invokeinterface #217, 2 // InterfaceMethod java/util/Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
+ 9: checkcast #86 // class java/nio/file/Path
+ 12: astore_1
+ 13: aload_1
+ 14: ifnull 28
+ 17: aload_1
+ 18: iconst_0
+ 19: anewarray #68 // class java/nio/file/LinkOption
+ 22: invokestatic #235 // Method java/nio/file/Files.isRegularFile:(Ljava/nio/file/Path;[Ljava/nio/file/LinkOption;)Z
+ 25: ifne 30
+ 28: lconst_0
+ 29: lreturn
+ 30: aload_1
+ 31: invokestatic #239 // Method java/nio/file/Files.readAllBytes:(Ljava/nio/file/Path;)[B
+ 34: astore_2
+ 35: ldc2_w #240 // long -3750763034362895579l
+ 38: lstore_3
+ 39: aload_2
+ 40: astore 5
+ 42: aload 5
+ 44: arraylength
+ 45: istore 6
+ 47: iconst_0
+ 48: istore 7
+ 50: iload 7
+ 52: iload 6
+ 54: if_icmpge 86
+ 57: aload 5
+ 59: iload 7
+ 61: baload
+ 62: istore 8
+ 64: lload_3
+ 65: iload 8
+ 67: i2l
+ 68: ldc2_w #246 // long 255l
+ 71: land
+ 72: lxor
+ 73: lstore_3
+ 74: lload_3
+ 75: ldc2_w #248 // long 1099511628211l
+ 78: lmul
+ 79: lstore_3
+ 80: iinc 7, 1
+ 83: goto 50
+ 86: lload_3
+ 87: lconst_0
+ 88: lcmp
+ 89: ifne 96
+ 92: lconst_1
+ 93: goto 97
+ 96: lload_3
+ 97: lreturn
+ 98: astore_2
+ 99: getstatic #92 // Field com/ogaba/sa_decor/SADecor.LOGGER:Lorg/slf4j/Logger;
+ 102: ldc #251 // String Could not calculate loot profile revision for \'{}\'.
+ 104: aload_0
+ 105: aload_2
+ 106: invokeinterface #100, 4 // InterfaceMethod org/slf4j/Logger.warn:(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)V
+ 111: lconst_0
+ 112: lreturn
+ Exception table:
+ from to target type
+ 30 97 98 Class java/io/IOException
+
+ public static boolean revisionMatches(java.lang.String, long);
+ Code:
+ 0: lload_1
+ 1: lconst_0
+ 2: lcmp
+ 3: ifeq 19
+ 6: lload_1
+ 7: aload_0
+ 8: invokestatic #261 // Method getRevision:(Ljava/lang/String;)J
+ 11: lcmp
+ 12: ifne 19
+ 15: iconst_1
+ 16: goto 20
+ 19: iconst_0
+ 20: ireturn
+
+ public static boolean isValidConfigId(java.lang.String);
+ Code:
+ 0: aload_0
+ 1: ifnull 18
+ 4: aload_0
+ 5: ldc_w #265 // String [a-z0-9_\\-]+
+ 8: invokevirtual #268 // Method java/lang/String.matches:(Ljava/lang/String;)Z
+ 11: ifeq 18
+ 14: iconst_1
+ 15: goto 19
+ 18: iconst_0
+ 19: ireturn
+
+ public static boolean createConfig(java.lang.String, boolean, boolean, boolean);
+ Code:
+ 0: aload_0
+ 1: invokestatic #272 // Method isValidConfigId:(Ljava/lang/String;)Z
+ 4: ifne 9
+ 7: iconst_0
+ 8: ireturn
+ 9: invokestatic #66 // Method getLootCrateConfigDirectory:()Ljava/nio/file/Path;
+ 12: astore 4
+ 14: aload 4
+ 16: aload_0
+ 17: invokedynamic #284, 0 // InvokeDynamic #4:makeConcatWithConstants:(Ljava/lang/String;)Ljava/lang/String;
+ 22: invokeinterface #288, 2 // InterfaceMethod java/nio/file/Path.resolve:(Ljava/lang/String;)Ljava/nio/file/Path;
+ 27: astore 5
+ 29: aload 5
+ 31: iconst_0
+ 32: anewarray #68 // class java/nio/file/LinkOption
+ 35: invokestatic #291 // Method java/nio/file/Files.exists:(Ljava/nio/file/Path;[Ljava/nio/file/LinkOption;)Z
+ 38: ifeq 43
+ 41: iconst_0
+ 42: ireturn
+ 43: aload_0
+ 44: iload_1
+ 45: iload_2
+ 46: iload_3
+ 47: invokestatic #295 // Method createEmptyConfigJson:(Ljava/lang/String;ZZZ)Lcom/google/gson/JsonObject;
+ 50: astore 6
+ 52: aload 4
+ 54: iconst_0
+ 55: anewarray #76 // class java/nio/file/attribute/FileAttribute
+ 58: invokestatic #80 // Method java/nio/file/Files.createDirectories:(Ljava/nio/file/Path;[Ljava/nio/file/attribute/FileAttribute;)Ljava/nio/file/Path;
+ 61: pop
+ 62: aload 5
+ 64: aload 6
+ 66: invokestatic #299 // Method writeConfigObject:(Ljava/nio/file/Path;Lcom/google/gson/JsonObject;)V
+ 69: invokestatic #301 // Method reload:()V
+ 72: iconst_1
+ 73: ireturn
+ 74: astore 7
+ 76: getstatic #92 // Field com/ogaba/sa_decor/SADecor.LOGGER:Lorg/slf4j/Logger;
+ 79: ldc_w #305 // String Could not create loot crate config \'{}\' at {}.
+ 82: iconst_3
+ 83: anewarray #4 // class java/lang/Object
+ 86: dup
+ 87: iconst_0
+ 88: aload_0
+ 89: aastore
+ 90: dup
+ 91: iconst_1
+ 92: aload 5
+ 94: aastore
+ 95: dup
+ 96: iconst_2
+ 97: aload 7
+ 99: aastore
+ 100: invokeinterface #308, 3 // InterfaceMethod org/slf4j/Logger.warn:(Ljava/lang/String;[Ljava/lang/Object;)V
+ 105: iconst_0
+ 106: ireturn
+ Exception table:
+ from to target type
+ 52 73 74 Class java/io/IOException
+
+ public static java.nio.file.Path getConfigPath(java.lang.String);
+ Code:
+ 0: getstatic #57 // Field CONFIG_PATHS:Ljava/util/Map;
+ 3: aload_0
+ 4: invokeinterface #217, 2 // InterfaceMethod java/util/Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
+ 9: checkcast #86 // class java/nio/file/Path
+ 12: astore_1
+ 13: aload_1
+ 14: ifnull 19
+ 17: aload_1
+ 18: areturn
+ 19: invokestatic #66 // Method getLootCrateConfigDirectory:()Ljava/nio/file/Path;
+ 22: aload_0
+ 23: invokedynamic #284, 0 // InvokeDynamic #4:makeConcatWithConstants:(Ljava/lang/String;)Ljava/lang/String;
+ 28: invokeinterface #288, 2 // InterfaceMethod java/nio/file/Path.resolve:(Ljava/lang/String;)Ljava/nio/file/Path;
+ 33: areturn
+
+ public static boolean createPreset(java.lang.String);
+ Code:
+ 0: aload_0
+ 1: invokestatic #272 // Method isValidConfigId:(Ljava/lang/String;)Z
+ 4: ifne 9
+ 7: iconst_0
+ 8: ireturn
+ 9: aload_0
+ 10: invokestatic #320 // Method createPresetJson:(Ljava/lang/String;)Lcom/google/gson/JsonObject;
+ 13: astore_1
+ 14: aload_1
+ 15: ifnonnull 20
+ 18: iconst_0
+ 19: ireturn
+ 20: aload_0
+ 21: aload_1
+ 22: invokestatic #324 // Method writeConfigIfMissing:(Ljava/lang/String;Lcom/google/gson/JsonObject;)Z
+ 25: ireturn
+
+ public static boolean copyConfig(java.lang.String, java.lang.String);
+ Code:
+ 0: aload_0
+ 1: invokestatic #331 // Method has:(Ljava/lang/String;)Z
+ 4: ifeq 21
+ 7: aload_1
+ 8: invokestatic #272 // Method isValidConfigId:(Ljava/lang/String;)Z
+ 11: ifeq 21
+ 14: aload_1
+ 15: invokestatic #331 // Method has:(Ljava/lang/String;)Z
+ 18: ifeq 23
+ 21: iconst_0
+ 22: ireturn
+ 23: getstatic #57 // Field CONFIG_PATHS:Ljava/util/Map;
+ 26: aload_0
+ 27: invokeinterface #217, 2 // InterfaceMethod java/util/Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
+ 32: checkcast #86 // class java/nio/file/Path
+ 35: astore_2
+ 36: aload_2
+ 37: ifnonnull 42
+ 40: iconst_0
+ 41: ireturn
+ 42: invokestatic #66 // Method getLootCrateConfigDirectory:()Ljava/nio/file/Path;
+ 45: aload_1
+ 46: invokedynamic #284, 0 // InvokeDynamic #4:makeConcatWithConstants:(Ljava/lang/String;)Ljava/lang/String;
+ 51: invokeinterface #288, 2 // InterfaceMethod java/nio/file/Path.resolve:(Ljava/lang/String;)Ljava/nio/file/Path;
+ 56: astore_3
+ 57: aload_3
+ 58: iconst_0
+ 59: anewarray #68 // class java/nio/file/LinkOption
+ 62: invokestatic #291 // Method java/nio/file/Files.exists:(Ljava/nio/file/Path;[Ljava/nio/file/LinkOption;)Z
+ 65: ifeq 70
+ 68: iconst_0
+ 69: ireturn
+ 70: aload_2
+ 71: invokestatic #335 // Method java/nio/file/Files.newBufferedReader:(Ljava/nio/file/Path;)Ljava/io/BufferedReader;
+ 74: astore 4
+ 76: aload 4
+ 78: invokestatic #341 // Method com/google/gson/JsonParser.parseReader:(Ljava/io/Reader;)Lcom/google/gson/JsonElement;
+ 81: invokevirtual #347 // Method com/google/gson/JsonElement.getAsJsonObject:()Lcom/google/gson/JsonObject;
+ 84: astore 5
+ 86: aload 5
+ 88: ldc_w #348 // String id
+ 91: aload_1
+ 92: invokevirtual #352 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/String;)V
+ 95: aload_3
+ 96: invokeinterface #355, 1 // InterfaceMethod java/nio/file/Path.getParent:()Ljava/nio/file/Path;
+ 101: iconst_0
+ 102: anewarray #76 // class java/nio/file/attribute/FileAttribute
+ 105: invokestatic #80 // Method java/nio/file/Files.createDirectories:(Ljava/nio/file/Path;[Ljava/nio/file/attribute/FileAttribute;)Ljava/nio/file/Path;
+ 108: pop
+ 109: aload_3
+ 110: aload 5
+ 112: invokestatic #299 // Method writeConfigObject:(Ljava/nio/file/Path;Lcom/google/gson/JsonObject;)V
+ 115: invokestatic #301 // Method reload:()V
+ 118: iconst_1
+ 119: istore 6
+ 121: aload 4
+ 123: ifnull 131
+ 126: aload 4
+ 128: invokevirtual #358 // Method java/io/Reader.close:()V
+ 131: iload 6
+ 133: ireturn
+ 134: astore 5
+ 136: aload 4
+ 138: ifnull 158
+ 141: aload 4
+ 143: invokevirtual #358 // Method java/io/Reader.close:()V
+ 146: goto 158
+ 149: astore 6
+ 151: aload 5
+ 153: aload 6
+ 155: invokevirtual #185 // Method java/lang/Throwable.addSuppressed:(Ljava/lang/Throwable;)V
+ 158: aload 5
+ 160: athrow
+ 161: astore 4
+ 163: getstatic #92 // Field com/ogaba/sa_decor/SADecor.LOGGER:Lorg/slf4j/Logger;
+ 166: ldc_w #360 // String Could not copy loot config \'{}\' to \'{}\'.
+ 169: iconst_3
+ 170: anewarray #4 // class java/lang/Object
+ 173: dup
+ 174: iconst_0
+ 175: aload_0
+ 176: aastore
+ 177: dup
+ 178: iconst_1
+ 179: aload_1
+ 180: aastore
+ 181: dup
+ 182: iconst_2
+ 183: aload 4
+ 185: aastore
+ 186: invokeinterface #308, 3 // InterfaceMethod org/slf4j/Logger.warn:(Ljava/lang/String;[Ljava/lang/Object;)V
+ 191: iconst_0
+ 192: ireturn
+ Exception table:
+ from to target type
+ 76 121 134 Class java/lang/Throwable
+ 141 146 149 Class java/lang/Throwable
+ 70 131 161 Class java/lang/Exception
+ 134 161 161 Class java/lang/Exception
+
+ public static boolean setSearchEnabled(java.lang.String, boolean);
+ Code:
+ 0: aload_0
+ 1: ldc_w #371 // String search
+ 4: ldc_w #373 // String enabled
+ 7: iload_1
+ 8: invokestatic #377 // Method updateBooleanInObject:(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Z)Z
+ 11: ireturn
+
+ public static boolean setLockEnabled(java.lang.String, boolean);
+ Code:
+ 0: aload_0
+ 1: ldc_w #381 // String lock
+ 4: ldc_w #373 // String enabled
+ 7: iload_1
+ 8: invokestatic #377 // Method updateBooleanInObject:(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Z)Z
+ 11: ireturn
+
+ public static boolean setPerPlayer(java.lang.String, boolean);
+ Code:
+ 0: aload_0
+ 1: ldc_w #384 // String per_player
+ 4: iload_1
+ 5: invokestatic #388 // Method updateRootBoolean:(Ljava/lang/String;Ljava/lang/String;Z)Z
+ 8: ireturn
+
+ public static boolean setRespawn(java.lang.String, boolean, int, boolean, boolean);
+ Code:
+ 0: getstatic #57 // Field CONFIG_PATHS:Ljava/util/Map;
+ 3: aload_0
+ 4: invokeinterface #217, 2 // InterfaceMethod java/util/Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
+ 9: checkcast #86 // class java/nio/file/Path
+ 12: astore 5
+ 14: aload 5
+ 16: ifnonnull 21
+ 19: iconst_0
+ 20: ireturn
+ 21: aload 5
+ 23: invokestatic #394 // Method readConfigObject:(Ljava/nio/file/Path;)Lcom/google/gson/JsonObject;
+ 26: astore 6
+ 28: aload 6
+ 30: ldc_w #396 // String respawn
+ 33: invokestatic #400 // Method getOrCreateObject:(Lcom/google/gson/JsonObject;Ljava/lang/String;)Lcom/google/gson/JsonObject;
+ 36: astore 7
+ 38: aload 7
+ 40: ldc_w #373 // String enabled
+ 43: iload_1
+ 44: invokestatic #405 // Method java/lang/Boolean.valueOf:(Z)Ljava/lang/Boolean;
+ 47: invokevirtual #408 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/Boolean;)V
+ 50: aload 7
+ 52: ldc_w #410 // String time_ticks
+ 55: iconst_1
+ 56: iload_2
+ 57: invokestatic #416 // Method java/lang/Math.max:(II)I
+ 60: invokestatic #199 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
+ 63: invokevirtual #419 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/Number;)V
+ 66: aload 7
+ 68: ldc_w #421 // String only_if_empty
+ 71: iload_3
+ 72: invokestatic #405 // Method java/lang/Boolean.valueOf:(Z)Ljava/lang/Boolean;
+ 75: invokevirtual #408 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/Boolean;)V
+ 78: aload 7
+ 80: ldc_w #423 // String clear_before_respawn
+ 83: iconst_1
+ 84: invokestatic #405 // Method java/lang/Boolean.valueOf:(Z)Ljava/lang/Boolean;
+ 87: invokevirtual #408 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/Boolean;)V
+ 90: aload 5
+ 92: aload 6
+ 94: invokestatic #299 // Method writeConfigObject:(Ljava/nio/file/Path;Lcom/google/gson/JsonObject;)V
+ 97: invokestatic #301 // Method reload:()V
+ 100: iconst_1
+ 101: ireturn
+ 102: astore 6
+ 104: getstatic #92 // Field com/ogaba/sa_decor/SADecor.LOGGER:Lorg/slf4j/Logger;
+ 107: ldc_w #425 // String Could not update respawn for loot config \'{}\'.
+ 110: aload_0
+ 111: aload 6
+ 113: invokeinterface #100, 4 // InterfaceMethod org/slf4j/Logger.warn:(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)V
+ 118: iconst_0
+ 119: ireturn
+ Exception table:
+ from to target type
+ 21 101 102 Class java/lang/Exception
+
+ public static boolean setEmpty(java.lang.String, boolean, float);
+ Code:
+ 0: getstatic #57 // Field CONFIG_PATHS:Ljava/util/Map;
+ 3: aload_0
+ 4: invokeinterface #217, 2 // InterfaceMethod java/util/Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
+ 9: checkcast #86 // class java/nio/file/Path
+ 12: astore_3
+ 13: aload_3
+ 14: ifnonnull 19
+ 17: iconst_0
+ 18: ireturn
+ 19: aload_3
+ 20: invokestatic #394 // Method readConfigObject:(Ljava/nio/file/Path;)Lcom/google/gson/JsonObject;
+ 23: astore 4
+ 25: aload 4
+ 27: ldc_w #432 // String empty
+ 30: invokestatic #400 // Method getOrCreateObject:(Lcom/google/gson/JsonObject;Ljava/lang/String;)Lcom/google/gson/JsonObject;
+ 33: astore 5
+ 35: aload 5
+ 37: ldc_w #373 // String enabled
+ 40: iload_1
+ 41: invokestatic #405 // Method java/lang/Boolean.valueOf:(Z)Ljava/lang/Boolean;
+ 44: invokevirtual #408 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/Boolean;)V
+ 47: aload 5
+ 49: ldc_w #434 // String spawn_chance
+ 52: fconst_0
+ 53: fconst_1
+ 54: fload_2
+ 55: invokestatic #438 // Method java/lang/Math.min:(FF)F
+ 58: invokestatic #440 // Method java/lang/Math.max:(FF)F
+ 61: invokestatic #445 // Method java/lang/Float.valueOf:(F)Ljava/lang/Float;
+ 64: invokevirtual #419 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/Number;)V
+ 67: aload_3
+ 68: aload 4
+ 70: invokestatic #299 // Method writeConfigObject:(Ljava/nio/file/Path;Lcom/google/gson/JsonObject;)V
+ 73: invokestatic #301 // Method reload:()V
+ 76: iconst_1
+ 77: ireturn
+ 78: astore 4
+ 80: getstatic #92 // Field com/ogaba/sa_decor/SADecor.LOGGER:Lorg/slf4j/Logger;
+ 83: ldc_w #447 // String Could not update empty spawn config for loot config \'{}\'.
+ 86: aload_0
+ 87: aload 4
+ 89: invokeinterface #100, 4 // InterfaceMethod org/slf4j/Logger.warn:(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)V
+ 94: iconst_0
+ 95: ireturn
+ Exception table:
+ from to target type
+ 19 77 78 Class java/lang/Exception
+
+ public static boolean addLootTableToConfig(java.lang.String, java.lang.String);
+ Code:
+ 0: getstatic #57 // Field CONFIG_PATHS:Ljava/util/Map;
+ 3: aload_0
+ 4: invokeinterface #217, 2 // InterfaceMethod java/util/Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
+ 9: checkcast #86 // class java/nio/file/Path
+ 12: astore_2
+ 13: aload_2
+ 14: ifnull 28
+ 17: aload_1
+ 18: ifnull 28
+ 21: aload_1
+ 22: invokevirtual #454 // Method java/lang/String.isBlank:()Z
+ 25: ifeq 30
+ 28: iconst_0
+ 29: ireturn
+ 30: aload_2
+ 31: invokestatic #394 // Method readConfigObject:(Ljava/nio/file/Path;)Lcom/google/gson/JsonObject;
+ 34: astore_3
+ 35: aload_3
+ 36: ldc_w #456 // String loot_tables
+ 39: invokevirtual #457 // Method com/google/gson/JsonObject.has:(Ljava/lang/String;)Z
+ 42: ifeq 70
+ 45: aload_3
+ 46: ldc_w #456 // String loot_tables
+ 49: invokevirtual #460 // Method com/google/gson/JsonObject.get:(Ljava/lang/String;)Lcom/google/gson/JsonElement;
+ 52: invokevirtual #463 // Method com/google/gson/JsonElement.isJsonArray:()Z
+ 55: ifeq 70
+ 58: aload_3
+ 59: ldc_w #456 // String loot_tables
+ 62: invokevirtual #467 // Method com/google/gson/JsonObject.getAsJsonArray:(Ljava/lang/String;)Lcom/google/gson/JsonArray;
+ 65: astore 4
+ 67: goto 88
+ 70: new #469 // class com/google/gson/JsonArray
+ 73: dup
+ 74: invokespecial #470 // Method com/google/gson/JsonArray."":()V
+ 77: astore 4
+ 79: aload_3
+ 80: ldc_w #456 // String loot_tables
+ 83: aload 4
+ 85: invokevirtual #474 // Method com/google/gson/JsonObject.add:(Ljava/lang/String;Lcom/google/gson/JsonElement;)V
+ 88: aload 4
+ 90: aload_1
+ 91: invokevirtual #477 // Method com/google/gson/JsonArray.add:(Ljava/lang/String;)V
+ 94: aload_2
+ 95: aload_3
+ 96: invokestatic #299 // Method writeConfigObject:(Ljava/nio/file/Path;Lcom/google/gson/JsonObject;)V
+ 99: invokestatic #301 // Method reload:()V
+ 102: iconst_1
+ 103: ireturn
+ 104: astore_3
+ 105: getstatic #92 // Field com/ogaba/sa_decor/SADecor.LOGGER:Lorg/slf4j/Logger;
+ 108: ldc_w #479 // String Could not add loot table \'{}\' to loot config \'{}\'.
+ 111: iconst_3
+ 112: anewarray #4 // class java/lang/Object
+ 115: dup
+ 116: iconst_0
+ 117: aload_1
+ 118: aastore
+ 119: dup
+ 120: iconst_1
+ 121: aload_0
+ 122: aastore
+ 123: dup
+ 124: iconst_2
+ 125: aload_3
+ 126: aastore
+ 127: invokeinterface #308, 3 // InterfaceMethod org/slf4j/Logger.warn:(Ljava/lang/String;[Ljava/lang/Object;)V
+ 132: iconst_0
+ 133: ireturn
+ Exception table:
+ from to target type
+ 30 103 104 Class java/lang/Exception
+
+ public static java.nio.file.Path getSurvivorsArsenalConfigDirectory();
+ Code:
+ 0: getstatic #489 // Field net/minecraftforge/fml/loading/FMLPaths.CONFIGDIR:Lnet/minecraftforge/fml/loading/FMLPaths;
+ 3: invokevirtual #491 // Method net/minecraftforge/fml/loading/FMLPaths.get:()Ljava/nio/file/Path;
+ 6: ldc #25 // String survivorsarsenal
+ 8: invokeinterface #288, 2 // InterfaceMethod java/nio/file/Path.resolve:(Ljava/lang/String;)Ljava/nio/file/Path;
+ 13: areturn
+
+ public static java.nio.file.Path getLootCrateConfigDirectory();
+ Code:
+ 0: invokestatic #493 // Method getSurvivorsArsenalConfigDirectory:()Ljava/nio/file/Path;
+ 3: ldc_w #495 // String loot_crates
+ 6: invokeinterface #288, 2 // InterfaceMethod java/nio/file/Path.resolve:(Ljava/lang/String;)Ljava/nio/file/Path;
+ 11: areturn
+
+ public static java.nio.file.Path getLootCrateExportDirectory();
+ Code:
+ 0: invokestatic #493 // Method getSurvivorsArsenalConfigDirectory:()Ljava/nio/file/Path;
+ 3: ldc_w #498 // String loot_crates_exports
+ 6: invokeinterface #288, 2 // InterfaceMethod java/nio/file/Path.resolve:(Ljava/lang/String;)Ljava/nio/file/Path;
+ 11: areturn
+
+ public static boolean createConfigFromPreset(java.lang.String, java.lang.String);
+ Code:
+ 0: aload_0
+ 1: invokestatic #272 // Method isValidConfigId:(Ljava/lang/String;)Z
+ 4: ifeq 25
+ 7: aload_1
+ 8: ifnull 25
+ 11: aload_1
+ 12: invokevirtual #454 // Method java/lang/String.isBlank:()Z
+ 15: ifne 25
+ 18: aload_0
+ 19: invokestatic #331 // Method has:(Ljava/lang/String;)Z
+ 22: ifeq 27
+ 25: iconst_0
+ 26: ireturn
+ 27: aload_1
+ 28: invokevirtual #503 // Method java/lang/String.trim:()Ljava/lang/String;
+ 31: invokestatic #320 // Method createPresetJson:(Ljava/lang/String;)Lcom/google/gson/JsonObject;
+ 34: astore_2
+ 35: aload_2
+ 36: ifnonnull 41
+ 39: iconst_0
+ 40: ireturn
+ 41: aload_2
+ 42: invokevirtual #506 // Method com/google/gson/JsonObject.toString:()Ljava/lang/String;
+ 45: invokestatic #509 // Method com/google/gson/JsonParser.parseString:(Ljava/lang/String;)Lcom/google/gson/JsonElement;
+ 48: invokevirtual #347 // Method com/google/gson/JsonElement.getAsJsonObject:()Lcom/google/gson/JsonObject;
+ 51: astore_3
+ 52: aload_3
+ 53: ldc_w #348 // String id
+ 56: aload_0
+ 57: invokevirtual #352 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/String;)V
+ 60: aload_3
+ 61: ldc_w #511 // String display_name
+ 64: aload_0
+ 65: invokevirtual #352 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/String;)V
+ 68: invokestatic #66 // Method getLootCrateConfigDirectory:()Ljava/nio/file/Path;
+ 71: aload_0
+ 72: invokedynamic #284, 0 // InvokeDynamic #4:makeConcatWithConstants:(Ljava/lang/String;)Ljava/lang/String;
+ 77: invokeinterface #288, 2 // InterfaceMethod java/nio/file/Path.resolve:(Ljava/lang/String;)Ljava/nio/file/Path;
+ 82: astore 4
+ 84: aload 4
+ 86: invokeinterface #355, 1 // InterfaceMethod java/nio/file/Path.getParent:()Ljava/nio/file/Path;
+ 91: iconst_0
+ 92: anewarray #76 // class java/nio/file/attribute/FileAttribute
+ 95: invokestatic #80 // Method java/nio/file/Files.createDirectories:(Ljava/nio/file/Path;[Ljava/nio/file/attribute/FileAttribute;)Ljava/nio/file/Path;
+ 98: pop
+ 99: aload 4
+ 101: aload_3
+ 102: invokestatic #299 // Method writeConfigObject:(Ljava/nio/file/Path;Lcom/google/gson/JsonObject;)V
+ 105: invokestatic #301 // Method reload:()V
+ 108: iconst_1
+ 109: ireturn
+ 110: astore 5
+ 112: getstatic #92 // Field com/ogaba/sa_decor/SADecor.LOGGER:Lorg/slf4j/Logger;
+ 115: ldc_w #513 // String Could not create loot profile \'{}\' from preset \'{}\'.
+ 118: iconst_3
+ 119: anewarray #4 // class java/lang/Object
+ 122: dup
+ 123: iconst_0
+ 124: aload_0
+ 125: aastore
+ 126: dup
+ 127: iconst_1
+ 128: aload_1
+ 129: aastore
+ 130: dup
+ 131: iconst_2
+ 132: aload 5
+ 134: aastore
+ 135: invokeinterface #308, 3 // InterfaceMethod org/slf4j/Logger.warn:(Ljava/lang/String;[Ljava/lang/Object;)V
+ 140: iconst_0
+ 141: ireturn
+ Exception table:
+ from to target type
+ 84 109 110 Class java/lang/Exception
+
+ public static boolean exportConfig(java.lang.String);
+ Code:
+ 0: aload_0
+ 1: invokestatic #272 // Method isValidConfigId:(Ljava/lang/String;)Z
+ 4: ifeq 14
+ 7: aload_0
+ 8: invokestatic #331 // Method has:(Ljava/lang/String;)Z
+ 11: ifne 16
+ 14: iconst_0
+ 15: ireturn
+ 16: getstatic #57 // Field CONFIG_PATHS:Ljava/util/Map;
+ 19: aload_0
+ 20: invokeinterface #217, 2 // InterfaceMethod java/util/Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
+ 25: checkcast #86 // class java/nio/file/Path
+ 28: astore_1
+ 29: aload_1
+ 30: ifnonnull 35
+ 33: iconst_0
+ 34: ireturn
+ 35: invokestatic #519 // Method getLootCrateExportDirectory:()Ljava/nio/file/Path;
+ 38: astore_2
+ 39: aload_2
+ 40: aload_0
+ 41: invokedynamic #284, 0 // InvokeDynamic #4:makeConcatWithConstants:(Ljava/lang/String;)Ljava/lang/String;
+ 46: invokeinterface #288, 2 // InterfaceMethod java/nio/file/Path.resolve:(Ljava/lang/String;)Ljava/nio/file/Path;
+ 51: astore_3
+ 52: aload_2
+ 53: iconst_0
+ 54: anewarray #76 // class java/nio/file/attribute/FileAttribute
+ 57: invokestatic #80 // Method java/nio/file/Files.createDirectories:(Ljava/nio/file/Path;[Ljava/nio/file/attribute/FileAttribute;)Ljava/nio/file/Path;
+ 60: pop
+ 61: aload_1
+ 62: invokestatic #394 // Method readConfigObject:(Ljava/nio/file/Path;)Lcom/google/gson/JsonObject;
+ 65: astore 4
+ 67: aload_3
+ 68: aload 4
+ 70: invokestatic #299 // Method writeConfigObject:(Ljava/nio/file/Path;Lcom/google/gson/JsonObject;)V
+ 73: iconst_1
+ 74: ireturn
+ 75: astore 4
+ 77: getstatic #92 // Field com/ogaba/sa_decor/SADecor.LOGGER:Lorg/slf4j/Logger;
+ 80: ldc_w #521 // String Could not export loot profile \'{}\'.
+ 83: aload_0
+ 84: aload 4
+ 86: invokeinterface #100, 4 // InterfaceMethod org/slf4j/Logger.warn:(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)V
+ 91: iconst_0
+ 92: ireturn
+ Exception table:
+ from to target type
+ 52 74 75 Class java/lang/Exception
+
+ public static boolean importConfig(java.lang.String, java.lang.String);
+ Code:
+ 0: aload_0
+ 1: invokestatic #272 // Method isValidConfigId:(Ljava/lang/String;)Z
+ 4: ifeq 21
+ 7: aload_1
+ 8: invokestatic #272 // Method isValidConfigId:(Ljava/lang/String;)Z
+ 11: ifeq 21
+ 14: aload_1
+ 15: invokestatic #331 // Method has:(Ljava/lang/String;)Z
+ 18: ifeq 23
+ 21: iconst_0
+ 22: ireturn
+ 23: invokestatic #519 // Method getLootCrateExportDirectory:()Ljava/nio/file/Path;
+ 26: aload_0
+ 27: invokedynamic #284, 0 // InvokeDynamic #4:makeConcatWithConstants:(Ljava/lang/String;)Ljava/lang/String;
+ 32: invokeinterface #288, 2 // InterfaceMethod java/nio/file/Path.resolve:(Ljava/lang/String;)Ljava/nio/file/Path;
+ 37: invokeinterface #527, 1 // InterfaceMethod java/nio/file/Path.normalize:()Ljava/nio/file/Path;
+ 42: astore_2
+ 43: invokestatic #519 // Method getLootCrateExportDirectory:()Ljava/nio/file/Path;
+ 46: invokeinterface #527, 1 // InterfaceMethod java/nio/file/Path.normalize:()Ljava/nio/file/Path;
+ 51: astore_3
+ 52: aload_2
+ 53: aload_3
+ 54: invokeinterface #530, 2 // InterfaceMethod java/nio/file/Path.startsWith:(Ljava/nio/file/Path;)Z
+ 59: ifeq 73
+ 62: aload_2
+ 63: iconst_0
+ 64: anewarray #68 // class java/nio/file/LinkOption
+ 67: invokestatic #235 // Method java/nio/file/Files.isRegularFile:(Ljava/nio/file/Path;[Ljava/nio/file/LinkOption;)Z
+ 70: ifne 75
+ 73: iconst_0
+ 74: ireturn
+ 75: aload_2
+ 76: invokestatic #533 // Method java/nio/file/Files.size:(Ljava/nio/file/Path;)J
+ 79: ldc2_w #534 // long 2097152l
+ 82: lcmp
+ 83: ifle 88
+ 86: iconst_0
+ 87: ireturn
+ 88: aload_2
+ 89: invokestatic #394 // Method readConfigObject:(Ljava/nio/file/Path;)Lcom/google/gson/JsonObject;
+ 92: astore 4
+ 94: aload 4
+ 96: ldc_w #348 // String id
+ 99: aload_1
+ 100: invokevirtual #352 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/String;)V
+ 103: aload 4
+ 105: ldc_w #511 // String display_name
+ 108: invokevirtual #457 // Method com/google/gson/JsonObject.has:(Ljava/lang/String;)Z
+ 111: ifeq 131
+ 114: aload 4
+ 116: ldc_w #511 // String display_name
+ 119: invokevirtual #460 // Method com/google/gson/JsonObject.get:(Ljava/lang/String;)Lcom/google/gson/JsonElement;
+ 122: invokevirtual #538 // Method com/google/gson/JsonElement.getAsString:()Ljava/lang/String;
+ 125: invokevirtual #454 // Method java/lang/String.isBlank:()Z
+ 128: ifeq 140
+ 131: aload 4
+ 133: ldc_w #511 // String display_name
+ 136: aload_1
+ 137: invokevirtual #352 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/String;)V
+ 140: invokestatic #66 // Method getLootCrateConfigDirectory:()Ljava/nio/file/Path;
+ 143: aload_1
+ 144: invokedynamic #284, 0 // InvokeDynamic #4:makeConcatWithConstants:(Ljava/lang/String;)Ljava/lang/String;
+ 149: invokeinterface #288, 2 // InterfaceMethod java/nio/file/Path.resolve:(Ljava/lang/String;)Ljava/nio/file/Path;
+ 154: astore 5
+ 156: aload 5
+ 158: aload 4
+ 160: invokestatic #299 // Method writeConfigObject:(Ljava/nio/file/Path;Lcom/google/gson/JsonObject;)V
+ 163: invokestatic #301 // Method reload:()V
+ 166: aload_1
+ 167: invokestatic #331 // Method has:(Ljava/lang/String;)Z
+ 170: ireturn
+ 171: astore 4
+ 173: getstatic #92 // Field com/ogaba/sa_decor/SADecor.LOGGER:Lorg/slf4j/Logger;
+ 176: ldc_w #540 // String Could not import loot profile \'{}\' as \'{}\'.
+ 179: iconst_3
+ 180: anewarray #4 // class java/lang/Object
+ 183: dup
+ 184: iconst_0
+ 185: aload_0
+ 186: aastore
+ 187: dup
+ 188: iconst_1
+ 189: aload_1
+ 190: aastore
+ 191: dup
+ 192: iconst_2
+ 193: aload 4
+ 195: aastore
+ 196: invokeinterface #308, 3 // InterfaceMethod org/slf4j/Logger.warn:(Ljava/lang/String;[Ljava/lang/Object;)V
+ 201: iconst_0
+ 202: ireturn
+ Exception table:
+ from to target type
+ 75 87 171 Class java/lang/Exception
+ 88 170 171 Class java/lang/Exception
+
+ public static java.util.List exportedProfileIds();
+ Code:
+ 0: invokestatic #519 // Method getLootCrateExportDirectory:()Ljava/nio/file/Path;
+ 3: astore_0
+ 4: aload_0
+ 5: iconst_0
+ 6: anewarray #68 // class java/nio/file/LinkOption
+ 9: invokestatic #74 // Method java/nio/file/Files.isDirectory:(Ljava/nio/file/Path;[Ljava/nio/file/LinkOption;)Z
+ 12: ifne 19
+ 15: invokestatic #550 // InterfaceMethod java/util/List.of:()Ljava/util/List;
+ 18: areturn
+ 19: aload_0
+ 20: invokestatic #104 // Method java/nio/file/Files.list:(Ljava/nio/file/Path;)Ljava/util/stream/Stream;
+ 23: astore_1
+ 24: aload_1
+ 25: invokedynamic #555, 0 // InvokeDynamic #5:test:()Ljava/util/function/Predicate;
+ 30: invokeinterface #129, 2 // InterfaceMethod java/util/stream/Stream.filter:(Ljava/util/function/Predicate;)Ljava/util/stream/Stream;
+ 35: invokedynamic #560, 0 // InvokeDynamic #6:apply:()Ljava/util/function/Function;
+ 40: invokeinterface #564, 2 // InterfaceMethod java/util/stream/Stream.map:(Ljava/util/function/Function;)Ljava/util/stream/Stream;
+ 45: invokedynamic #570, 0 // InvokeDynamic #7:test:()Ljava/util/function/Predicate;
+ 50: invokeinterface #129, 2 // InterfaceMethod java/util/stream/Stream.filter:(Ljava/util/function/Predicate;)Ljava/util/stream/Stream;
+ 55: invokedynamic #576, 0 // InvokeDynamic #8:apply:()Ljava/util/function/Function;
+ 60: invokeinterface #564, 2 // InterfaceMethod java/util/stream/Stream.map:(Ljava/util/function/Function;)Ljava/util/stream/Stream;
+ 65: invokedynamic #578, 0 // InvokeDynamic #9:test:()Ljava/util/function/Predicate;
+ 70: invokeinterface #129, 2 // InterfaceMethod java/util/stream/Stream.filter:(Ljava/util/function/Predicate;)Ljava/util/stream/Stream;
+ 75: invokeinterface #581, 1 // InterfaceMethod java/util/stream/Stream.sorted:()Ljava/util/stream/Stream;
+ 80: invokeinterface #584, 1 // InterfaceMethod java/util/stream/Stream.toList:()Ljava/util/List;
+ 85: astore_2
+ 86: aload_1
+ 87: ifnull 96
+ 90: aload_1
+ 91: invokeinterface #181, 1 // InterfaceMethod java/util/stream/Stream.close:()V
+ 96: aload_2
+ 97: areturn
+ 98: astore_2
+ 99: aload_1
+ 100: ifnull 118
+ 103: aload_1
+ 104: invokeinterface #181, 1 // InterfaceMethod java/util/stream/Stream.close:()V
+ 109: goto 118
+ 112: astore_3
+ 113: aload_2
+ 114: aload_3
+ 115: invokevirtual #185 // Method java/lang/Throwable.addSuppressed:(Ljava/lang/Throwable;)V
+ 118: aload_2
+ 119: athrow
+ 120: astore_1
+ 121: invokestatic #550 // InterfaceMethod java/util/List.of:()Ljava/util/List;
+ 124: areturn
+ Exception table:
+ from to target type
+ 24 86 98 Class java/lang/Throwable
+ 103 109 112 Class java/lang/Throwable
+ 19 96 120 Class java/io/IOException
+ 98 120 120 Class java/io/IOException
+
+ public static java.nio.file.Path getCollectiblesConfigDirectory();
+ Code:
+ 0: invokestatic #493 // Method getSurvivorsArsenalConfigDirectory:()Ljava/nio/file/Path;
+ 3: ldc_w #587 // String collectibles
+ 6: invokeinterface #288, 2 // InterfaceMethod java/nio/file/Path.resolve:(Ljava/lang/String;)Ljava/nio/file/Path;
+ 11: areturn
+
+ public static java.nio.file.Path getForceOpenItemsConfigFile();
+ Code:
+ 0: invokestatic #493 // Method getSurvivorsArsenalConfigDirectory:()Ljava/nio/file/Path;
+ 3: ldc_w #590 // String force_open_items.json
+ 6: invokeinterface #288, 2 // InterfaceMethod java/nio/file/Path.resolve:(Ljava/lang/String;)Ljava/nio/file/Path;
+ 11: areturn
+
+ public static int formatAllConfigs();
+ Code:
+ 0: iconst_0
+ 1: istore_0
+ 2: getstatic #57 // Field CONFIG_PATHS:Ljava/util/Map;
+ 5: invokeinterface #225, 1 // InterfaceMethod java/util/Map.values:()Ljava/util/Collection;
+ 10: invokeinterface #597, 1 // InterfaceMethod java/util/Collection.iterator:()Ljava/util/Iterator;
+ 15: astore_1
+ 16: aload_1
+ 17: invokeinterface #602, 1 // InterfaceMethod java/util/Iterator.hasNext:()Z
+ 22: ifeq 68
+ 25: aload_1
+ 26: invokeinterface #606, 1 // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
+ 31: checkcast #86 // class java/nio/file/Path
+ 34: astore_2
+ 35: aload_2
+ 36: invokestatic #394 // Method readConfigObject:(Ljava/nio/file/Path;)Lcom/google/gson/JsonObject;
+ 39: astore_3
+ 40: aload_2
+ 41: aload_3
+ 42: invokestatic #299 // Method writeConfigObject:(Ljava/nio/file/Path;Lcom/google/gson/JsonObject;)V
+ 45: iinc 0, 1
+ 48: goto 65
+ 51: astore_3
+ 52: getstatic #92 // Field com/ogaba/sa_decor/SADecor.LOGGER:Lorg/slf4j/Logger;
+ 55: ldc_w #608 // String Could not format loot config at {}.
+ 58: aload_2
+ 59: aload_3
+ 60: invokeinterface #100, 4 // InterfaceMethod org/slf4j/Logger.warn:(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)V
+ 65: goto 16
+ 68: invokestatic #301 // Method reload:()V
+ 71: iload_0
+ 72: ireturn
+ Exception table:
+ from to target type
+ 35 48 51 Class java/lang/Exception
+
+ public static boolean addEntryToConfig(java.lang.String, java.lang.String, int, int, int, float);
+ Code:
+ 0: aload_0
+ 1: aload_1
+ 2: iload_2
+ 3: iload_3
+ 4: iload 4
+ 6: fload 5
+ 8: aconst_null
+ 9: invokestatic #614 // Method addEntryToConfig:(Ljava/lang/String;Ljava/lang/String;IIIFLjava/lang/String;)Z
+ 12: ireturn
+
+ public static boolean addEntryToConfig(java.lang.String, java.lang.String, int, int, int, float, java.lang.String);
+ Code:
+ 0: getstatic #57 // Field CONFIG_PATHS:Ljava/util/Map;
+ 3: aload_0
+ 4: invokeinterface #217, 2 // InterfaceMethod java/util/Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
+ 9: checkcast #86 // class java/nio/file/Path
+ 12: astore 7
+ 14: aload 7
+ 16: ifnonnull 21
+ 19: iconst_0
+ 20: ireturn
+ 21: aload 7
+ 23: invokestatic #335 // Method java/nio/file/Files.newBufferedReader:(Ljava/nio/file/Path;)Ljava/io/BufferedReader;
+ 26: astore 9
+ 28: aload 9
+ 30: invokestatic #341 // Method com/google/gson/JsonParser.parseReader:(Ljava/io/Reader;)Lcom/google/gson/JsonElement;
+ 33: invokevirtual #347 // Method com/google/gson/JsonElement.getAsJsonObject:()Lcom/google/gson/JsonObject;
+ 36: astore 8
+ 38: aload 9
+ 40: ifnull 78
+ 43: aload 9
+ 45: invokevirtual #358 // Method java/io/Reader.close:()V
+ 48: goto 78
+ 51: astore 10
+ 53: aload 9
+ 55: ifnull 75
+ 58: aload 9
+ 60: invokevirtual #358 // Method java/io/Reader.close:()V
+ 63: goto 75
+ 66: astore 11
+ 68: aload 10
+ 70: aload 11
+ 72: invokevirtual #185 // Method java/lang/Throwable.addSuppressed:(Ljava/lang/Throwable;)V
+ 75: aload 10
+ 77: athrow
+ 78: aload 8
+ 80: ldc_w #621 // String entries
+ 83: invokevirtual #457 // Method com/google/gson/JsonObject.has:(Ljava/lang/String;)Z
+ 86: ifeq 116
+ 89: aload 8
+ 91: ldc_w #621 // String entries
+ 94: invokevirtual #460 // Method com/google/gson/JsonObject.get:(Ljava/lang/String;)Lcom/google/gson/JsonElement;
+ 97: invokevirtual #463 // Method com/google/gson/JsonElement.isJsonArray:()Z
+ 100: ifeq 116
+ 103: aload 8
+ 105: ldc_w #621 // String entries
+ 108: invokevirtual #467 // Method com/google/gson/JsonObject.getAsJsonArray:(Ljava/lang/String;)Lcom/google/gson/JsonArray;
+ 111: astore 9
+ 113: goto 135
+ 116: new #469 // class com/google/gson/JsonArray
+ 119: dup
+ 120: invokespecial #470 // Method com/google/gson/JsonArray."":()V
+ 123: astore 9
+ 125: aload 8
+ 127: ldc_w #621 // String entries
+ 130: aload 9
+ 132: invokevirtual #474 // Method com/google/gson/JsonObject.add:(Ljava/lang/String;Lcom/google/gson/JsonElement;)V
+ 135: new #303 // class com/google/gson/JsonObject
+ 138: dup
+ 139: invokespecial #622 // Method com/google/gson/JsonObject."":()V
+ 142: astore 10
+ 144: aload_1
+ 145: ifnonnull 154
+ 148: ldc_w #624 // String
+ 151: goto 158
+ 154: aload_1
+ 155: invokevirtual #503 // Method java/lang/String.trim:()Ljava/lang/String;
+ 158: astore 11
+ 160: aload 11
+ 162: ldc_w #626 // String #
+ 165: invokevirtual #628 // Method java/lang/String.startsWith:(Ljava/lang/String;)Z
+ 168: ifeq 188
+ 171: aload 10
+ 173: ldc_w #630 // String tag
+ 176: aload 11
+ 178: iconst_1
+ 179: invokevirtual #634 // Method java/lang/String.substring:(I)Ljava/lang/String;
+ 182: invokevirtual #352 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/String;)V
+ 185: goto 198
+ 188: aload 10
+ 190: ldc_w #636 // String item
+ 193: aload 11
+ 195: invokevirtual #352 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/String;)V
+ 198: aload 10
+ 200: ldc_w #637 // String weight
+ 203: iconst_1
+ 204: iload_2
+ 205: invokestatic #416 // Method java/lang/Math.max:(II)I
+ 208: invokestatic #199 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
+ 211: invokevirtual #419 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/Number;)V
+ 214: aload 10
+ 216: ldc_w #638 // String chance
+ 219: fconst_0
+ 220: fload 5
+ 222: invokestatic #440 // Method java/lang/Math.max:(FF)F
+ 225: invokestatic #445 // Method java/lang/Float.valueOf:(F)Ljava/lang/Float;
+ 228: invokevirtual #419 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/Number;)V
+ 231: aload 6
+ 233: ifnull 257
+ 236: aload 6
+ 238: invokevirtual #454 // Method java/lang/String.isBlank:()Z
+ 241: ifne 257
+ 244: aload 10
+ 246: ldc_w #640 // String nbt
+ 249: aload 6
+ 251: invokevirtual #503 // Method java/lang/String.trim:()Ljava/lang/String;
+ 254: invokevirtual #352 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/String;)V
+ 257: new #303 // class com/google/gson/JsonObject
+ 260: dup
+ 261: invokespecial #622 // Method com/google/gson/JsonObject."":()V
+ 264: astore 12
+ 266: aload 12
+ 268: ldc_w #641 // String min
+ 271: iconst_1
+ 272: iload_3
+ 273: iload 4
+ 275: invokestatic #643 // Method java/lang/Math.min:(II)I
+ 278: invokestatic #416 // Method java/lang/Math.max:(II)I
+ 281: invokestatic #199 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
+ 284: invokevirtual #419 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/Number;)V
+ 287: aload 12
+ 289: ldc_w #644 // String max
+ 292: iconst_1
+ 293: iload_3
+ 294: iload 4
+ 296: invokestatic #416 // Method java/lang/Math.max:(II)I
+ 299: invokestatic #416 // Method java/lang/Math.max:(II)I
+ 302: invokestatic #199 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
+ 305: invokevirtual #419 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/Number;)V
+ 308: aload 10
+ 310: ldc_w #646 // String count
+ 313: aload 12
+ 315: invokevirtual #474 // Method com/google/gson/JsonObject.add:(Ljava/lang/String;Lcom/google/gson/JsonElement;)V
+ 318: aload 9
+ 320: aload 10
+ 322: invokevirtual #649 // Method com/google/gson/JsonArray.add:(Lcom/google/gson/JsonElement;)V
+ 325: aload 7
+ 327: aload 8
+ 329: invokestatic #299 // Method writeConfigObject:(Ljava/nio/file/Path;Lcom/google/gson/JsonObject;)V
+ 332: invokestatic #301 // Method reload:()V
+ 335: iconst_1
+ 336: ireturn
+ 337: astore 8
+ 339: getstatic #92 // Field com/ogaba/sa_decor/SADecor.LOGGER:Lorg/slf4j/Logger;
+ 342: ldc_w #651 // String Could not add entry to loot config \'{}\' at {}.
+ 345: iconst_3
+ 346: anewarray #4 // class java/lang/Object
+ 349: dup
+ 350: iconst_0
+ 351: aload_0
+ 352: aastore
+ 353: dup
+ 354: iconst_1
+ 355: aload 7
+ 357: aastore
+ 358: dup
+ 359: iconst_2
+ 360: aload 8
+ 362: aastore
+ 363: invokeinterface #308, 3 // InterfaceMethod org/slf4j/Logger.warn:(Ljava/lang/String;[Ljava/lang/Object;)V
+ 368: iconst_0
+ 369: ireturn
+ Exception table:
+ from to target type
+ 28 38 51 Class java/lang/Throwable
+ 58 63 66 Class java/lang/Throwable
+ 21 336 337 Class java/lang/Exception
+
+ public static boolean addMatchEntryToConfig(java.lang.String, java.lang.String, java.lang.String, int, int, int, float, java.lang.String);
+ Code:
+ 0: getstatic #57 // Field CONFIG_PATHS:Ljava/util/Map;
+ 3: aload_0
+ 4: invokeinterface #217, 2 // InterfaceMethod java/util/Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
+ 9: checkcast #86 // class java/nio/file/Path
+ 12: astore 8
+ 14: aload 8
+ 16: ifnull 30
+ 19: aload_2
+ 20: ifnull 30
+ 23: aload_2
+ 24: invokevirtual #454 // Method java/lang/String.isBlank:()Z
+ 27: ifeq 32
+ 30: iconst_0
+ 31: ireturn
+ 32: aload 8
+ 34: invokestatic #394 // Method readConfigObject:(Ljava/nio/file/Path;)Lcom/google/gson/JsonObject;
+ 37: astore 9
+ 39: aload 9
+ 41: aload_1
+ 42: iconst_1
+ 43: invokestatic #659 // Method getEntryArray:(Lcom/google/gson/JsonObject;Ljava/lang/String;Z)Lcom/google/gson/JsonArray;
+ 46: astore 10
+ 48: aload 10
+ 50: ifnonnull 55
+ 53: iconst_0
+ 54: ireturn
+ 55: new #303 // class com/google/gson/JsonObject
+ 58: dup
+ 59: invokespecial #622 // Method com/google/gson/JsonObject."":()V
+ 62: astore 11
+ 64: aload_2
+ 65: invokevirtual #503 // Method java/lang/String.trim:()Ljava/lang/String;
+ 68: astore 12
+ 70: aload 12
+ 72: ldc_w #626 // String #
+ 75: invokevirtual #628 // Method java/lang/String.startsWith:(Ljava/lang/String;)Z
+ 78: ifeq 90
+ 81: aload 12
+ 83: iconst_1
+ 84: invokevirtual #634 // Method java/lang/String.substring:(I)Ljava/lang/String;
+ 87: goto 92
+ 90: aload 12
+ 92: astore 13
+ 94: aload 13
+ 96: invokestatic #665 // Method net/minecraft/resources/ResourceLocation.m_135820_:(Ljava/lang/String;)Lnet/minecraft/resources/ResourceLocation;
+ 99: astore 14
+ 101: aload 14
+ 103: ifnull 130
+ 106: aload 12
+ 108: ldc_w #626 // String #
+ 111: invokevirtual #628 // Method java/lang/String.startsWith:(Ljava/lang/String;)Z
+ 114: ifne 132
+ 117: getstatic #671 // Field net/minecraft/core/registries/BuiltInRegistries.f_257033_:Lnet/minecraft/core/DefaultedRegistry;
+ 120: aload 14
+ 122: invokeinterface #677, 2 // InterfaceMethod net/minecraft/core/DefaultedRegistry.m_7804_:(Lnet/minecraft/resources/ResourceLocation;)Z
+ 127: ifne 132
+ 130: iconst_0
+ 131: ireturn
+ 132: aload 7
+ 134: ifnull 161
+ 137: aload 7
+ 139: invokevirtual #454 // Method java/lang/String.isBlank:()Z
+ 142: ifne 161
+ 145: aload 7
+ 147: invokevirtual #503 // Method java/lang/String.trim:()Ljava/lang/String;
+ 150: invokestatic #683 // Method net/minecraft/nbt/TagParser.m_129359_:(Ljava/lang/String;)Lnet/minecraft/nbt/CompoundTag;
+ 153: pop
+ 154: goto 161
+ 157: astore 15
+ 159: iconst_0
+ 160: ireturn
+ 161: aload 12
+ 163: ldc_w #626 // String #
+ 166: invokevirtual #628 // Method java/lang/String.startsWith:(Ljava/lang/String;)Z
+ 169: ifeq 185
+ 172: aload 11
+ 174: ldc_w #630 // String tag
+ 177: aload 13
+ 179: invokevirtual #352 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/String;)V
+ 182: goto 195
+ 185: aload 11
+ 187: ldc_w #636 // String item
+ 190: aload 13
+ 192: invokevirtual #352 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/String;)V
+ 195: aload 11
+ 197: ldc_w #637 // String weight
+ 200: iconst_1
+ 201: ldc_w #684 // int 1000000
+ 204: iload_3
+ 205: invokestatic #643 // Method java/lang/Math.min:(II)I
+ 208: invokestatic #416 // Method java/lang/Math.max:(II)I
+ 211: invokestatic #199 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
+ 214: invokevirtual #419 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/Number;)V
+ 217: aload 11
+ 219: ldc_w #638 // String chance
+ 222: ldc_w #685 // float 1.0E-4f
+ 225: fconst_1
+ 226: fload 6
+ 228: invokestatic #438 // Method java/lang/Math.min:(FF)F
+ 231: invokestatic #440 // Method java/lang/Math.max:(FF)F
+ 234: invokestatic #445 // Method java/lang/Float.valueOf:(F)Ljava/lang/Float;
+ 237: invokevirtual #419 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/Number;)V
+ 240: new #303 // class com/google/gson/JsonObject
+ 243: dup
+ 244: invokespecial #622 // Method com/google/gson/JsonObject."":()V
+ 247: astore 15
+ 249: aload 15
+ 251: ldc_w #641 // String min
+ 254: iconst_1
+ 255: bipush 64
+ 257: iload 4
+ 259: iload 5
+ 261: invokestatic #643 // Method java/lang/Math.min:(II)I
+ 264: invokestatic #643 // Method java/lang/Math.min:(II)I
+ 267: invokestatic #416 // Method java/lang/Math.max:(II)I
+ 270: invokestatic #199 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
+ 273: invokevirtual #419 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/Number;)V
+ 276: aload 15
+ 278: ldc_w #644 // String max
+ 281: iconst_1
+ 282: bipush 64
+ 284: iload 4
+ 286: iload 5
+ 288: invokestatic #416 // Method java/lang/Math.max:(II)I
+ 291: invokestatic #643 // Method java/lang/Math.min:(II)I
+ 294: invokestatic #416 // Method java/lang/Math.max:(II)I
+ 297: invokestatic #199 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
+ 300: invokevirtual #419 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/Number;)V
+ 303: aload 11
+ 305: ldc_w #646 // String count
+ 308: aload 15
+ 310: invokevirtual #474 // Method com/google/gson/JsonObject.add:(Ljava/lang/String;Lcom/google/gson/JsonElement;)V
+ 313: aload 7
+ 315: ifnull 339
+ 318: aload 7
+ 320: invokevirtual #454 // Method java/lang/String.isBlank:()Z
+ 323: ifne 339
+ 326: aload 11
+ 328: ldc_w #640 // String nbt
+ 331: aload 7
+ 333: invokevirtual #503 // Method java/lang/String.trim:()Ljava/lang/String;
+ 336: invokevirtual #352 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/String;)V
+ 339: aload 10
+ 341: aload 11
+ 343: invokevirtual #649 // Method com/google/gson/JsonArray.add:(Lcom/google/gson/JsonElement;)V
+ 346: aload 8
+ 348: aload 9
+ 350: invokestatic #299 // Method writeConfigObject:(Ljava/nio/file/Path;Lcom/google/gson/JsonObject;)V
+ 353: invokestatic #301 // Method reload:()V
+ 356: iconst_1
+ 357: ireturn
+ 358: astore 9
+ 360: getstatic #92 // Field com/ogaba/sa_decor/SADecor.LOGGER:Lorg/slf4j/Logger;
+ 363: ldc_w #687 // String Could not add match entry \'{}\' to loot profile \'{}\'.
+ 366: iconst_3
+ 367: anewarray #4 // class java/lang/Object
+ 370: dup
+ 371: iconst_0
+ 372: aload_2
+ 373: aastore
+ 374: dup
+ 375: iconst_1
+ 376: aload_0
+ 377: aastore
+ 378: dup
+ 379: iconst_2
+ 380: aload 9
+ 382: aastore
+ 383: invokeinterface #308, 3 // InterfaceMethod org/slf4j/Logger.warn:(Ljava/lang/String;[Ljava/lang/Object;)V
+ 388: iconst_0
+ 389: ireturn
+ Exception table:
+ from to target type
+ 145 154 157 Class java/lang/Exception
+ 32 54 358 Class java/lang/Exception
+ 55 131 358 Class java/lang/Exception
+ 132 160 358 Class java/lang/Exception
+ 161 357 358 Class java/lang/Exception
+
+ public static boolean addInventoryEntryToConfig(java.lang.String, net.minecraft.world.item.ItemStack, int, int, int, float, boolean, java.util.List);
+ Code:
+ 0: aload_0
+ 1: ldc_w #624 // String
+ 4: aload_1
+ 5: iload_2
+ 6: iload_3
+ 7: iload 4
+ 9: fload 5
+ 11: iload 6
+ 13: aload 7
+ 15: invokestatic #699 // Method addInventoryEntryToConfig:(Ljava/lang/String;Ljava/lang/String;Lnet/minecraft/world/item/ItemStack;IIIFZLjava/util/List;)Z
+ 18: ireturn
+
+ public static boolean addInventoryEntryToConfig(java.lang.String, java.lang.String, net.minecraft.world.item.ItemStack, int, int, int, float, boolean, java.util.List);
+ Code:
+ 0: getstatic #57 // Field CONFIG_PATHS:Ljava/util/Map;
+ 3: aload_0
+ 4: invokeinterface #217, 2 // InterfaceMethod java/util/Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
+ 9: checkcast #86 // class java/nio/file/Path
+ 12: astore 9
+ 14: aload 9
+ 16: ifnull 30
+ 19: aload_2
+ 20: ifnull 30
+ 23: aload_2
+ 24: invokevirtual #711 // Method net/minecraft/world/item/ItemStack.m_41619_:()Z
+ 27: ifeq 32
+ 30: iconst_0
+ 31: ireturn
+ 32: aload 9
+ 34: invokestatic #394 // Method readConfigObject:(Ljava/nio/file/Path;)Lcom/google/gson/JsonObject;
+ 37: astore 10
+ 39: aload 10
+ 41: aload_1
+ 42: iconst_1
+ 43: invokestatic #659 // Method getEntryArray:(Lcom/google/gson/JsonObject;Ljava/lang/String;Z)Lcom/google/gson/JsonArray;
+ 46: astore 11
+ 48: aload 11
+ 50: ifnonnull 55
+ 53: iconst_0
+ 54: ireturn
+ 55: aload_2
+ 56: iconst_1
+ 57: iload_3
+ 58: invokestatic #416 // Method java/lang/Math.max:(II)I
+ 61: ldc_w #685 // float 1.0E-4f
+ 64: fconst_1
+ 65: fload 6
+ 67: invokestatic #438 // Method java/lang/Math.min:(FF)F
+ 70: invokestatic #440 // Method java/lang/Math.max:(FF)F
+ 73: iconst_1
+ 74: iload 4
+ 76: iload 5
+ 78: invokestatic #643 // Method java/lang/Math.min:(II)I
+ 81: invokestatic #416 // Method java/lang/Math.max:(II)I
+ 84: iconst_1
+ 85: iload 4
+ 87: iload 5
+ 89: invokestatic #416 // Method java/lang/Math.max:(II)I
+ 92: invokestatic #416 // Method java/lang/Math.max:(II)I
+ 95: iload 7
+ 97: invokestatic #715 // Method createInventoryEntryJson:(Lnet/minecraft/world/item/ItemStack;IFIIZ)Lcom/google/gson/JsonObject;
+ 100: astore 12
+ 102: aload 8
+ 104: ifnull 228
+ 107: aload 8
+ 109: invokeinterface #718, 1 // InterfaceMethod java/util/List.isEmpty:()Z
+ 114: ifne 228
+ 117: new #469 // class com/google/gson/JsonArray
+ 120: dup
+ 121: invokespecial #470 // Method com/google/gson/JsonArray."":()V
+ 124: astore 13
+ 126: aload 8
+ 128: invokeinterface #719, 1 // InterfaceMethod java/util/List.iterator:()Ljava/util/Iterator;
+ 133: astore 14
+ 135: aload 14
+ 137: invokeinterface #602, 1 // InterfaceMethod java/util/Iterator.hasNext:()Z
+ 142: ifeq 210
+ 145: aload 14
+ 147: invokeinterface #606, 1 // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
+ 152: checkcast #9 // class com/ogaba/sa_decor/common/loot/DecorLootConfigManager$LinkedInventoryStack
+ 155: astore 15
+ 157: aload 15
+ 159: ifnull 135
+ 162: aload 15
+ 164: invokevirtual #723 // Method com/ogaba/sa_decor/common/loot/DecorLootConfigManager$LinkedInventoryStack.stack:()Lnet/minecraft/world/item/ItemStack;
+ 167: invokevirtual #711 // Method net/minecraft/world/item/ItemStack.m_41619_:()Z
+ 170: ifeq 176
+ 173: goto 135
+ 176: aload 13
+ 178: aload 15
+ 180: invokevirtual #723 // Method com/ogaba/sa_decor/common/loot/DecorLootConfigManager$LinkedInventoryStack.stack:()Lnet/minecraft/world/item/ItemStack;
+ 183: iconst_1
+ 184: aload 15
+ 186: invokevirtual #726 // Method com/ogaba/sa_decor/common/loot/DecorLootConfigManager$LinkedInventoryStack.chance:()F
+ 189: aload 15
+ 191: invokevirtual #728 // Method com/ogaba/sa_decor/common/loot/DecorLootConfigManager$LinkedInventoryStack.minCount:()I
+ 194: aload 15
+ 196: invokevirtual #730 // Method com/ogaba/sa_decor/common/loot/DecorLootConfigManager$LinkedInventoryStack.maxCount:()I
+ 199: iload 7
+ 201: invokestatic #715 // Method createInventoryEntryJson:(Lnet/minecraft/world/item/ItemStack;IFIIZ)Lcom/google/gson/JsonObject;
+ 204: invokevirtual #649 // Method com/google/gson/JsonArray.add:(Lcom/google/gson/JsonElement;)V
+ 207: goto 135
+ 210: aload 13
+ 212: invokevirtual #731 // Method com/google/gson/JsonArray.size:()I
+ 215: ifle 228
+ 218: aload 12
+ 220: ldc_w #733 // String with
+ 223: aload 13
+ 225: invokevirtual #474 // Method com/google/gson/JsonObject.add:(Ljava/lang/String;Lcom/google/gson/JsonElement;)V
+ 228: aload 11
+ 230: aload 12
+ 232: invokevirtual #649 // Method com/google/gson/JsonArray.add:(Lcom/google/gson/JsonElement;)V
+ 235: aload 9
+ 237: aload 10
+ 239: invokestatic #299 // Method writeConfigObject:(Ljava/nio/file/Path;Lcom/google/gson/JsonObject;)V
+ 242: invokestatic #301 // Method reload:()V
+ 245: iconst_1
+ 246: ireturn
+ 247: astore 10
+ 249: getstatic #92 // Field com/ogaba/sa_decor/SADecor.LOGGER:Lorg/slf4j/Logger;
+ 252: ldc_w #735 // String Could not add inventory entry to loot config \'{}\'.
+ 255: aload_0
+ 256: aload 10
+ 258: invokeinterface #100, 4 // InterfaceMethod org/slf4j/Logger.warn:(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)V
+ 263: iconst_0
+ 264: ireturn
+ Exception table:
+ from to target type
+ 32 54 247 Class java/lang/Exception
+ 55 246 247 Class java/lang/Exception
+
+ public static boolean updateProfileSettings(java.lang.String, java.lang.String, java.lang.String, int, int, boolean, boolean, boolean, boolean, boolean, float, boolean, float, boolean, boolean, int, boolean, boolean, boolean, java.lang.String, int, boolean);
+ Code:
+ 0: getstatic #57 // Field CONFIG_PATHS:Ljava/util/Map;
+ 3: aload_0
+ 4: invokeinterface #217, 2 // InterfaceMethod java/util/Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
+ 9: checkcast #86 // class java/nio/file/Path
+ 12: astore 22
+ 14: aload 22
+ 16: ifnonnull 21
+ 19: iconst_0
+ 20: ireturn
+ 21: iload 18
+ 23: ifeq 67
+ 26: aload 19
+ 28: ifnonnull 37
+ 31: ldc_w #624 // String
+ 34: goto 42
+ 37: aload 19
+ 39: invokevirtual #503 // Method java/lang/String.trim:()Ljava/lang/String;
+ 42: invokestatic #665 // Method net/minecraft/resources/ResourceLocation.m_135820_:(Ljava/lang/String;)Lnet/minecraft/resources/ResourceLocation;
+ 45: astore 23
+ 47: aload 23
+ 49: ifnull 65
+ 52: getstatic #671 // Field net/minecraft/core/registries/BuiltInRegistries.f_257033_:Lnet/minecraft/core/DefaultedRegistry;
+ 55: aload 23
+ 57: invokeinterface #677, 2 // InterfaceMethod net/minecraft/core/DefaultedRegistry.m_7804_:(Lnet/minecraft/resources/ResourceLocation;)Z
+ 62: ifne 67
+ 65: iconst_0
+ 66: ireturn
+ 67: aload 22
+ 69: invokestatic #394 // Method readConfigObject:(Ljava/nio/file/Path;)Lcom/google/gson/JsonObject;
+ 72: astore 23
+ 74: aload 23
+ 76: ldc_w #511 // String display_name
+ 79: aload_1
+ 80: ifnull 90
+ 83: aload_1
+ 84: invokevirtual #454 // Method java/lang/String.isBlank:()Z
+ 87: ifeq 94
+ 90: aload_0
+ 91: goto 98
+ 94: aload_1
+ 95: invokevirtual #503 // Method java/lang/String.trim:()Ljava/lang/String;
+ 98: invokevirtual #352 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/String;)V
+ 101: aload 23
+ 103: ldc_w #742 // String description
+ 106: aload_2
+ 107: ifnonnull 116
+ 110: ldc_w #624 // String
+ 113: goto 120
+ 116: aload_2
+ 117: invokevirtual #503 // Method java/lang/String.trim:()Ljava/lang/String;
+ 120: invokevirtual #352 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/String;)V
+ 123: aload 23
+ 125: ldc_w #744 // String rolls
+ 128: invokestatic #400 // Method getOrCreateObject:(Lcom/google/gson/JsonObject;Ljava/lang/String;)Lcom/google/gson/JsonObject;
+ 131: astore 24
+ 133: aload 24
+ 135: ldc_w #641 // String min
+ 138: iconst_0
+ 139: bipush 64
+ 141: iload_3
+ 142: iload 4
+ 144: invokestatic #643 // Method java/lang/Math.min:(II)I
+ 147: invokestatic #643 // Method java/lang/Math.min:(II)I
+ 150: invokestatic #416 // Method java/lang/Math.max:(II)I
+ 153: invokestatic #199 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
+ 156: invokevirtual #419 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/Number;)V
+ 159: aload 24
+ 161: ldc_w #644 // String max
+ 164: iconst_0
+ 165: bipush 64
+ 167: iload_3
+ 168: iload 4
+ 170: invokestatic #416 // Method java/lang/Math.max:(II)I
+ 173: invokestatic #643 // Method java/lang/Math.min:(II)I
+ 176: invokestatic #416 // Method java/lang/Math.max:(II)I
+ 179: invokestatic #199 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
+ 182: invokevirtual #419 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/Number;)V
+ 185: aload 23
+ 187: ldc_w #384 // String per_player
+ 190: iload 5
+ 192: invokestatic #405 // Method java/lang/Boolean.valueOf:(Z)Ljava/lang/Boolean;
+ 195: invokevirtual #408 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/Boolean;)V
+ 198: aload 23
+ 200: ldc_w #746 // String allow_duplicates
+ 203: iload 6
+ 205: invokestatic #405 // Method java/lang/Boolean.valueOf:(Z)Ljava/lang/Boolean;
+ 208: invokevirtual #408 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/Boolean;)V
+ 211: aload 23
+ 213: ldc_w #748 // String clear_before_generate
+ 216: iload 7
+ 218: invokestatic #405 // Method java/lang/Boolean.valueOf:(Z)Ljava/lang/Boolean;
+ 221: invokevirtual #408 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/Boolean;)V
+ 224: aload 23
+ 226: ldc_w #371 // String search
+ 229: invokestatic #400 // Method getOrCreateObject:(Lcom/google/gson/JsonObject;Ljava/lang/String;)Lcom/google/gson/JsonObject;
+ 232: astore 25
+ 234: aload 25
+ 236: ldc_w #373 // String enabled
+ 239: iload 8
+ 241: invokestatic #405 // Method java/lang/Boolean.valueOf:(Z)Ljava/lang/Boolean;
+ 244: invokevirtual #408 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/Boolean;)V
+ 247: aload 23
+ 249: ldc_w #432 // String empty
+ 252: invokestatic #400 // Method getOrCreateObject:(Lcom/google/gson/JsonObject;Ljava/lang/String;)Lcom/google/gson/JsonObject;
+ 255: astore 26
+ 257: aload 26
+ 259: ldc_w #373 // String enabled
+ 262: iload 9
+ 264: invokestatic #405 // Method java/lang/Boolean.valueOf:(Z)Ljava/lang/Boolean;
+ 267: invokevirtual #408 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/Boolean;)V
+ 270: aload 26
+ 272: ldc_w #434 // String spawn_chance
+ 275: fconst_0
+ 276: fconst_1
+ 277: fload 10
+ 279: invokestatic #438 // Method java/lang/Math.min:(FF)F
+ 282: invokestatic #440 // Method java/lang/Math.max:(FF)F
+ 285: invokestatic #445 // Method java/lang/Float.valueOf:(F)Ljava/lang/Float;
+ 288: invokevirtual #419 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/Number;)V
+ 291: aload 23
+ 293: ldc_w #381 // String lock
+ 296: invokestatic #400 // Method getOrCreateObject:(Lcom/google/gson/JsonObject;Ljava/lang/String;)Lcom/google/gson/JsonObject;
+ 299: astore 27
+ 301: aload 27
+ 303: ldc_w #373 // String enabled
+ 306: iload 11
+ 308: invokestatic #405 // Method java/lang/Boolean.valueOf:(Z)Ljava/lang/Boolean;
+ 311: invokevirtual #408 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/Boolean;)V
+ 314: aload 27
+ 316: ldc_w #434 // String spawn_chance
+ 319: fconst_0
+ 320: fconst_1
+ 321: fload 12
+ 323: invokestatic #438 // Method java/lang/Math.min:(FF)F
+ 326: invokestatic #440 // Method java/lang/Math.max:(FF)F
+ 329: invokestatic #445 // Method java/lang/Float.valueOf:(F)Ljava/lang/Float;
+ 332: invokevirtual #419 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/Number;)V
+ 335: aload 27
+ 337: ldc_w #750 // String lockpick
+ 340: iload 13
+ 342: invokestatic #405 // Method java/lang/Boolean.valueOf:(Z)Ljava/lang/Boolean;
+ 345: invokevirtual #408 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/Boolean;)V
+ 348: aload 23
+ 350: ldc_w #396 // String respawn
+ 353: invokestatic #400 // Method getOrCreateObject:(Lcom/google/gson/JsonObject;Ljava/lang/String;)Lcom/google/gson/JsonObject;
+ 356: astore 28
+ 358: aload 28
+ 360: ldc_w #373 // String enabled
+ 363: iload 14
+ 365: invokestatic #405 // Method java/lang/Boolean.valueOf:(Z)Ljava/lang/Boolean;
+ 368: invokevirtual #408 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/Boolean;)V
+ 371: aload 28
+ 373: ldc_w #410 // String time_ticks
+ 376: iconst_1
+ 377: iload 15
+ 379: invokestatic #416 // Method java/lang/Math.max:(II)I
+ 382: invokestatic #199 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
+ 385: invokevirtual #419 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/Number;)V
+ 388: aload 28
+ 390: ldc_w #421 // String only_if_empty
+ 393: iload 16
+ 395: invokestatic #405 // Method java/lang/Boolean.valueOf:(Z)Ljava/lang/Boolean;
+ 398: invokevirtual #408 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/Boolean;)V
+ 401: aload 28
+ 403: ldc_w #423 // String clear_before_respawn
+ 406: iconst_1
+ 407: invokestatic #405 // Method java/lang/Boolean.valueOf:(Z)Ljava/lang/Boolean;
+ 410: invokevirtual #408 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/Boolean;)V
+ 413: aload 23
+ 415: ldc_w #752 // String open_pass
+ 418: invokestatic #400 // Method getOrCreateObject:(Lcom/google/gson/JsonObject;Ljava/lang/String;)Lcom/google/gson/JsonObject;
+ 421: astore 29
+ 423: aload 29
+ 425: ldc_w #373 // String enabled
+ 428: iload 18
+ 430: invokestatic #405 // Method java/lang/Boolean.valueOf:(Z)Ljava/lang/Boolean;
+ 433: invokevirtual #408 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/Boolean;)V
+ 436: aload 29
+ 438: ldc_w #754 // String amount
+ 441: iconst_1
+ 442: bipush 64
+ 444: iload 20
+ 446: invokestatic #643 // Method java/lang/Math.min:(II)I
+ 449: invokestatic #416 // Method java/lang/Math.max:(II)I
+ 452: invokestatic #199 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
+ 455: invokevirtual #419 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/Number;)V
+ 458: aload 29
+ 460: ldc_w #756 // String consume
+ 463: iload 21
+ 465: invokestatic #405 // Method java/lang/Boolean.valueOf:(Z)Ljava/lang/Boolean;
+ 468: invokevirtual #408 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/Boolean;)V
+ 471: aload 29
+ 473: ldc_w #758 // String bypass_lock
+ 476: invokevirtual #457 // Method com/google/gson/JsonObject.has:(Ljava/lang/String;)Z
+ 479: ifne 494
+ 482: aload 29
+ 484: ldc_w #758 // String bypass_lock
+ 487: iconst_1
+ 488: invokestatic #405 // Method java/lang/Boolean.valueOf:(Z)Ljava/lang/Boolean;
+ 491: invokevirtual #408 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/Boolean;)V
+ 494: aload 29
+ 496: ldc_w #760 // String bypass_search
+ 499: invokevirtual #457 // Method com/google/gson/JsonObject.has:(Ljava/lang/String;)Z
+ 502: ifne 517
+ 505: aload 29
+ 507: ldc_w #760 // String bypass_search
+ 510: iconst_1
+ 511: invokestatic #405 // Method java/lang/Boolean.valueOf:(Z)Ljava/lang/Boolean;
+ 514: invokevirtual #408 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/Boolean;)V
+ 517: new #469 // class com/google/gson/JsonArray
+ 520: dup
+ 521: invokespecial #470 // Method com/google/gson/JsonArray."":()V
+ 524: astore 30
+ 526: aload 19
+ 528: ifnull 549
+ 531: aload 19
+ 533: invokevirtual #454 // Method java/lang/String.isBlank:()Z
+ 536: ifne 549
+ 539: aload 30
+ 541: aload 19
+ 543: invokevirtual #503 // Method java/lang/String.trim:()Ljava/lang/String;
+ 546: invokevirtual #477 // Method com/google/gson/JsonArray.add:(Ljava/lang/String;)V
+ 549: aload 29
+ 551: ldc_w #762 // String items
+ 554: aload 30
+ 556: invokevirtual #474 // Method com/google/gson/JsonObject.add:(Ljava/lang/String;Lcom/google/gson/JsonElement;)V
+ 559: aload 29
+ 561: ldc_w #764 // String tags
+ 564: invokevirtual #457 // Method com/google/gson/JsonObject.has:(Ljava/lang/String;)Z
+ 567: ifeq 584
+ 570: aload 29
+ 572: ldc_w #764 // String tags
+ 575: invokevirtual #460 // Method com/google/gson/JsonObject.get:(Ljava/lang/String;)Lcom/google/gson/JsonElement;
+ 578: invokevirtual #463 // Method com/google/gson/JsonElement.isJsonArray:()Z
+ 581: ifne 599
+ 584: aload 29
+ 586: ldc_w #764 // String tags
+ 589: new #469 // class com/google/gson/JsonArray
+ 592: dup
+ 593: invokespecial #470 // Method com/google/gson/JsonArray."":()V
+ 596: invokevirtual #474 // Method com/google/gson/JsonObject.add:(Ljava/lang/String;Lcom/google/gson/JsonElement;)V
+ 599: aload 22
+ 601: aload 23
+ 603: invokestatic #299 // Method writeConfigObject:(Ljava/nio/file/Path;Lcom/google/gson/JsonObject;)V
+ 606: invokestatic #301 // Method reload:()V
+ 609: iconst_1
+ 610: ireturn
+ 611: astore 23
+ 613: getstatic #92 // Field com/ogaba/sa_decor/SADecor.LOGGER:Lorg/slf4j/Logger;
+ 616: ldc_w #766 // String Could not update loot profile \'{}\'.
+ 619: aload_0
+ 620: aload 23
+ 622: invokeinterface #100, 4 // InterfaceMethod org/slf4j/Logger.warn:(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)V
+ 627: iconst_0
+ 628: ireturn
+ Exception table:
+ from to target type
+ 67 610 611 Class java/lang/Exception
+
+ public static boolean createPool(java.lang.String, java.lang.String, int, int, boolean);
+ Code:
+ 0: getstatic #57 // Field CONFIG_PATHS:Ljava/util/Map;
+ 3: aload_0
+ 4: invokeinterface #217, 2 // InterfaceMethod java/util/Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
+ 9: checkcast #86 // class java/nio/file/Path
+ 12: astore 5
+ 14: aload 5
+ 16: ifnull 26
+ 19: aload_1
+ 20: invokestatic #272 // Method isValidConfigId:(Ljava/lang/String;)Z
+ 23: ifne 28
+ 26: iconst_0
+ 27: ireturn
+ 28: aload 5
+ 30: invokestatic #394 // Method readConfigObject:(Ljava/nio/file/Path;)Lcom/google/gson/JsonObject;
+ 33: astore 6
+ 35: aload 6
+ 37: ldc_w #788 // String pools
+ 40: invokevirtual #457 // Method com/google/gson/JsonObject.has:(Ljava/lang/String;)Z
+ 43: ifeq 71
+ 46: aload 6
+ 48: ldc_w #788 // String pools
+ 51: invokevirtual #460 // Method com/google/gson/JsonObject.get:(Ljava/lang/String;)Lcom/google/gson/JsonElement;
+ 54: invokevirtual #463 // Method com/google/gson/JsonElement.isJsonArray:()Z
+ 57: ifeq 71
+ 60: aload 6
+ 62: ldc_w #788 // String pools
+ 65: invokevirtual #467 // Method com/google/gson/JsonObject.getAsJsonArray:(Ljava/lang/String;)Lcom/google/gson/JsonArray;
+ 68: goto 78
+ 71: new #469 // class com/google/gson/JsonArray
+ 74: dup
+ 75: invokespecial #470 // Method com/google/gson/JsonArray."":()V
+ 78: astore 7
+ 80: aload 6
+ 82: ldc_w #788 // String pools
+ 85: invokevirtual #457 // Method com/google/gson/JsonObject.has:(Ljava/lang/String;)Z
+ 88: ifeq 105
+ 91: aload 6
+ 93: ldc_w #788 // String pools
+ 96: invokevirtual #460 // Method com/google/gson/JsonObject.get:(Ljava/lang/String;)Lcom/google/gson/JsonElement;
+ 99: invokevirtual #463 // Method com/google/gson/JsonElement.isJsonArray:()Z
+ 102: ifne 115
+ 105: aload 6
+ 107: ldc_w #788 // String pools
+ 110: aload 7
+ 112: invokevirtual #474 // Method com/google/gson/JsonObject.add:(Ljava/lang/String;Lcom/google/gson/JsonElement;)V
+ 115: aload 7
+ 117: invokevirtual #789 // Method com/google/gson/JsonArray.iterator:()Ljava/util/Iterator;
+ 120: astore 8
+ 122: aload 8
+ 124: invokeinterface #602, 1 // InterfaceMethod java/util/Iterator.hasNext:()Z
+ 129: ifeq 178
+ 132: aload 8
+ 134: invokeinterface #606, 1 // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
+ 139: checkcast #343 // class com/google/gson/JsonElement
+ 142: astore 9
+ 144: aload 9
+ 146: invokevirtual #792 // Method com/google/gson/JsonElement.isJsonObject:()Z
+ 149: ifeq 175
+ 152: aload_1
+ 153: aload 9
+ 155: invokevirtual #347 // Method com/google/gson/JsonElement.getAsJsonObject:()Lcom/google/gson/JsonObject;
+ 158: ldc_w #348 // String id
+ 161: ldc_w #624 // String
+ 164: invokestatic #796 // Method getString:(Lcom/google/gson/JsonObject;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+ 167: invokevirtual #799 // Method java/lang/String.equals:(Ljava/lang/Object;)Z
+ 170: ifeq 175
+ 173: iconst_0
+ 174: ireturn
+ 175: goto 122
+ 178: new #303 // class com/google/gson/JsonObject
+ 181: dup
+ 182: invokespecial #622 // Method com/google/gson/JsonObject."":()V
+ 185: astore 8
+ 187: aload 8
+ 189: ldc_w #348 // String id
+ 192: aload_1
+ 193: invokevirtual #352 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/String;)V
+ 196: new #303 // class com/google/gson/JsonObject
+ 199: dup
+ 200: invokespecial #622 // Method com/google/gson/JsonObject."":()V
+ 203: astore 9
+ 205: aload 9
+ 207: ldc_w #641 // String min
+ 210: iconst_0
+ 211: bipush 64
+ 213: iload_2
+ 214: iload_3
+ 215: invokestatic #643 // Method java/lang/Math.min:(II)I
+ 218: invokestatic #643 // Method java/lang/Math.min:(II)I
+ 221: invokestatic #416 // Method java/lang/Math.max:(II)I
+ 224: invokestatic #199 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
+ 227: invokevirtual #419 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/Number;)V
+ 230: aload 9
+ 232: ldc_w #644 // String max
+ 235: iconst_0
+ 236: bipush 64
+ 238: iload_2
+ 239: iload_3
+ 240: invokestatic #416 // Method java/lang/Math.max:(II)I
+ 243: invokestatic #643 // Method java/lang/Math.min:(II)I
+ 246: invokestatic #416 // Method java/lang/Math.max:(II)I
+ 249: invokestatic #199 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
+ 252: invokevirtual #419 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/Number;)V
+ 255: aload 8
+ 257: ldc_w #744 // String rolls
+ 260: aload 9
+ 262: invokevirtual #474 // Method com/google/gson/JsonObject.add:(Ljava/lang/String;Lcom/google/gson/JsonElement;)V
+ 265: aload 8
+ 267: ldc_w #746 // String allow_duplicates
+ 270: iload 4
+ 272: invokestatic #405 // Method java/lang/Boolean.valueOf:(Z)Ljava/lang/Boolean;
+ 275: invokevirtual #408 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/Boolean;)V
+ 278: aload 8
+ 280: ldc_w #621 // String entries
+ 283: new #469 // class com/google/gson/JsonArray
+ 286: dup
+ 287: invokespecial #470 // Method com/google/gson/JsonArray."":()V
+ 290: invokevirtual #474 // Method com/google/gson/JsonObject.add:(Ljava/lang/String;Lcom/google/gson/JsonElement;)V
+ 293: aload 8
+ 295: ldc_w #456 // String loot_tables
+ 298: new #469 // class com/google/gson/JsonArray
+ 301: dup
+ 302: invokespecial #470 // Method com/google/gson/JsonArray."":()V
+ 305: invokevirtual #474 // Method com/google/gson/JsonObject.add:(Ljava/lang/String;Lcom/google/gson/JsonElement;)V
+ 308: aload 7
+ 310: aload 8
+ 312: invokevirtual #649 // Method com/google/gson/JsonArray.add:(Lcom/google/gson/JsonElement;)V
+ 315: aload 5
+ 317: aload 6
+ 319: invokestatic #299 // Method writeConfigObject:(Ljava/nio/file/Path;Lcom/google/gson/JsonObject;)V
+ 322: invokestatic #301 // Method reload:()V
+ 325: iconst_1
+ 326: ireturn
+ 327: astore 6
+ 329: getstatic #92 // Field com/ogaba/sa_decor/SADecor.LOGGER:Lorg/slf4j/Logger;
+ 332: ldc_w #801 // String Could not create pool \'{}\' in loot profile \'{}\'.
+ 335: iconst_3
+ 336: anewarray #4 // class java/lang/Object
+ 339: dup
+ 340: iconst_0
+ 341: aload_1
+ 342: aastore
+ 343: dup
+ 344: iconst_1
+ 345: aload_0
+ 346: aastore
+ 347: dup
+ 348: iconst_2
+ 349: aload 6
+ 351: aastore
+ 352: invokeinterface #308, 3 // InterfaceMethod org/slf4j/Logger.warn:(Ljava/lang/String;[Ljava/lang/Object;)V
+ 357: iconst_0
+ 358: ireturn
+ Exception table:
+ from to target type
+ 28 174 327 Class java/lang/Exception
+ 175 326 327 Class java/lang/Exception
+
+ public static java.lang.String duplicatePool(java.lang.String, java.lang.String);
+ Code:
+ 0: getstatic #57 // Field CONFIG_PATHS:Ljava/util/Map;
+ 3: aload_0
+ 4: invokeinterface #217, 2 // InterfaceMethod java/util/Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
+ 9: checkcast #86 // class java/nio/file/Path
+ 12: astore_2
+ 13: aload_2
+ 14: ifnull 28
+ 17: aload_1
+ 18: ifnull 28
+ 21: aload_1
+ 22: invokevirtual #454 // Method java/lang/String.isBlank:()Z
+ 25: ifeq 30
+ 28: aconst_null
+ 29: areturn
+ 30: aload_2
+ 31: invokestatic #394 // Method readConfigObject:(Ljava/nio/file/Path;)Lcom/google/gson/JsonObject;
+ 34: astore_3
+ 35: aload_3
+ 36: aload_1
+ 37: invokestatic #809 // Method findPoolObject:(Lcom/google/gson/JsonObject;Ljava/lang/String;)Lcom/google/gson/JsonObject;
+ 40: astore 4
+ 42: aload 4
+ 44: ifnonnull 49
+ 47: aconst_null
+ 48: areturn
+ 49: aload_3
+ 50: ldc_w #788 // String pools
+ 53: invokevirtual #457 // Method com/google/gson/JsonObject.has:(Ljava/lang/String;)Z
+ 56: ifeq 82
+ 59: aload_3
+ 60: ldc_w #788 // String pools
+ 63: invokevirtual #460 // Method com/google/gson/JsonObject.get:(Ljava/lang/String;)Lcom/google/gson/JsonElement;
+ 66: invokevirtual #463 // Method com/google/gson/JsonElement.isJsonArray:()Z
+ 69: ifeq 82
+ 72: aload_3
+ 73: ldc_w #788 // String pools
+ 76: invokevirtual #467 // Method com/google/gson/JsonObject.getAsJsonArray:(Ljava/lang/String;)Lcom/google/gson/JsonArray;
+ 79: goto 89
+ 82: new #469 // class com/google/gson/JsonArray
+ 85: dup
+ 86: invokespecial #470 // Method com/google/gson/JsonArray."":()V
+ 89: astore 5
+ 91: aload_3
+ 92: ldc_w #788 // String pools
+ 95: invokevirtual #457 // Method com/google/gson/JsonObject.has:(Ljava/lang/String;)Z
+ 98: ifeq 114
+ 101: aload_3
+ 102: ldc_w #788 // String pools
+ 105: invokevirtual #460 // Method com/google/gson/JsonObject.get:(Ljava/lang/String;)Lcom/google/gson/JsonElement;
+ 108: invokevirtual #463 // Method com/google/gson/JsonElement.isJsonArray:()Z
+ 111: ifne 123
+ 114: aload_3
+ 115: ldc_w #788 // String pools
+ 118: aload 5
+ 120: invokevirtual #474 // Method com/google/gson/JsonObject.add:(Ljava/lang/String;Lcom/google/gson/JsonElement;)V
+ 123: aload_1
+ 124: invokedynamic #812, 0 // InvokeDynamic #10:makeConcatWithConstants:(Ljava/lang/String;)Ljava/lang/String;
+ 129: astore 6
+ 131: aload 6
+ 133: astore 7
+ 135: iconst_2
+ 136: istore 8
+ 138: aload_3
+ 139: aload 7
+ 141: invokestatic #809 // Method findPoolObject:(Lcom/google/gson/JsonObject;Ljava/lang/String;)Lcom/google/gson/JsonObject;
+ 144: ifnull 164
+ 147: aload 6
+ 149: iload 8
+ 151: iinc 8, 1
+ 154: invokedynamic #817, 0 // InvokeDynamic #11:makeConcatWithConstants:(Ljava/lang/String;I)Ljava/lang/String;
+ 159: astore 7
+ 161: goto 138
+ 164: aload 4
+ 166: invokevirtual #506 // Method com/google/gson/JsonObject.toString:()Ljava/lang/String;
+ 169: invokestatic #509 // Method com/google/gson/JsonParser.parseString:(Ljava/lang/String;)Lcom/google/gson/JsonElement;
+ 172: invokevirtual #347 // Method com/google/gson/JsonElement.getAsJsonObject:()Lcom/google/gson/JsonObject;
+ 175: astore 9
+ 177: aload 9
+ 179: ldc_w #348 // String id
+ 182: aload 7
+ 184: invokevirtual #352 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/String;)V
+ 187: aload 5
+ 189: aload 9
+ 191: invokevirtual #649 // Method com/google/gson/JsonArray.add:(Lcom/google/gson/JsonElement;)V
+ 194: aload_2
+ 195: aload_3
+ 196: invokestatic #299 // Method writeConfigObject:(Ljava/nio/file/Path;Lcom/google/gson/JsonObject;)V
+ 199: invokestatic #301 // Method reload:()V
+ 202: aload 7
+ 204: areturn
+ 205: astore_3
+ 206: getstatic #92 // Field com/ogaba/sa_decor/SADecor.LOGGER:Lorg/slf4j/Logger;
+ 209: ldc_w #819 // String Could not duplicate pool \'{}\' in loot profile \'{}\'.
+ 212: iconst_3
+ 213: anewarray #4 // class java/lang/Object
+ 216: dup
+ 217: iconst_0
+ 218: aload_1
+ 219: aastore
+ 220: dup
+ 221: iconst_1
+ 222: aload_0
+ 223: aastore
+ 224: dup
+ 225: iconst_2
+ 226: aload_3
+ 227: aastore
+ 228: invokeinterface #308, 3 // InterfaceMethod org/slf4j/Logger.warn:(Ljava/lang/String;[Ljava/lang/Object;)V
+ 233: aconst_null
+ 234: areturn
+ Exception table:
+ from to target type
+ 30 48 205 Class java/lang/Exception
+ 49 204 205 Class java/lang/Exception
+
+ public static boolean updatePool(java.lang.String, java.lang.String, int, int, boolean);
+ Code:
+ 0: getstatic #57 // Field CONFIG_PATHS:Ljava/util/Map;
+ 3: aload_0
+ 4: invokeinterface #217, 2 // InterfaceMethod java/util/Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
+ 9: checkcast #86 // class java/nio/file/Path
+ 12: astore 5
+ 14: aload 5
+ 16: ifnull 30
+ 19: aload_1
+ 20: ifnull 30
+ 23: aload_1
+ 24: invokevirtual #454 // Method java/lang/String.isBlank:()Z
+ 27: ifeq 32
+ 30: iconst_0
+ 31: ireturn
+ 32: aload 5
+ 34: invokestatic #394 // Method readConfigObject:(Ljava/nio/file/Path;)Lcom/google/gson/JsonObject;
+ 37: astore 6
+ 39: aload 6
+ 41: aload_1
+ 42: invokestatic #809 // Method findPoolObject:(Lcom/google/gson/JsonObject;Ljava/lang/String;)Lcom/google/gson/JsonObject;
+ 45: astore 7
+ 47: aload 7
+ 49: ifnonnull 54
+ 52: iconst_0
+ 53: ireturn
+ 54: aload 7
+ 56: ldc_w #744 // String rolls
+ 59: invokestatic #400 // Method getOrCreateObject:(Lcom/google/gson/JsonObject;Ljava/lang/String;)Lcom/google/gson/JsonObject;
+ 62: astore 8
+ 64: aload 8
+ 66: ldc_w #641 // String min
+ 69: iconst_0
+ 70: bipush 64
+ 72: iload_2
+ 73: iload_3
+ 74: invokestatic #643 // Method java/lang/Math.min:(II)I
+ 77: invokestatic #643 // Method java/lang/Math.min:(II)I
+ 80: invokestatic #416 // Method java/lang/Math.max:(II)I
+ 83: invokestatic #199 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
+ 86: invokevirtual #419 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/Number;)V
+ 89: aload 8
+ 91: ldc_w #644 // String max
+ 94: iconst_0
+ 95: bipush 64
+ 97: iload_2
+ 98: iload_3
+ 99: invokestatic #416 // Method java/lang/Math.max:(II)I
+ 102: invokestatic #643 // Method java/lang/Math.min:(II)I
+ 105: invokestatic #416 // Method java/lang/Math.max:(II)I
+ 108: invokestatic #199 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
+ 111: invokevirtual #419 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/Number;)V
+ 114: aload 7
+ 116: ldc_w #746 // String allow_duplicates
+ 119: iload 4
+ 121: invokestatic #405 // Method java/lang/Boolean.valueOf:(Z)Ljava/lang/Boolean;
+ 124: invokevirtual #408 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/Boolean;)V
+ 127: aload 5
+ 129: aload 6
+ 131: invokestatic #299 // Method writeConfigObject:(Ljava/nio/file/Path;Lcom/google/gson/JsonObject;)V
+ 134: invokestatic #301 // Method reload:()V
+ 137: iconst_1
+ 138: ireturn
+ 139: astore 6
+ 141: getstatic #92 // Field com/ogaba/sa_decor/SADecor.LOGGER:Lorg/slf4j/Logger;
+ 144: ldc_w #825 // String Could not update pool \'{}\' in loot profile \'{}\'.
+ 147: iconst_3
+ 148: anewarray #4 // class java/lang/Object
+ 151: dup
+ 152: iconst_0
+ 153: aload_1
+ 154: aastore
+ 155: dup
+ 156: iconst_1
+ 157: aload_0
+ 158: aastore
+ 159: dup
+ 160: iconst_2
+ 161: aload 6
+ 163: aastore
+ 164: invokeinterface #308, 3 // InterfaceMethod org/slf4j/Logger.warn:(Ljava/lang/String;[Ljava/lang/Object;)V
+ 169: iconst_0
+ 170: ireturn
+ Exception table:
+ from to target type
+ 32 53 139 Class java/lang/Exception
+ 54 138 139 Class java/lang/Exception
+
+ public static boolean deletePool(java.lang.String, java.lang.String);
+ Code:
+ 0: getstatic #57 // Field CONFIG_PATHS:Ljava/util/Map;
+ 3: aload_0
+ 4: invokeinterface #217, 2 // InterfaceMethod java/util/Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
+ 9: checkcast #86 // class java/nio/file/Path
+ 12: astore_2
+ 13: aload_2
+ 14: ifnull 28
+ 17: aload_1
+ 18: ifnull 28
+ 21: aload_1
+ 22: invokevirtual #454 // Method java/lang/String.isBlank:()Z
+ 25: ifeq 30
+ 28: iconst_0
+ 29: ireturn
+ 30: aload_2
+ 31: invokestatic #394 // Method readConfigObject:(Ljava/nio/file/Path;)Lcom/google/gson/JsonObject;
+ 34: astore_3
+ 35: aload_3
+ 36: ldc_w #788 // String pools
+ 39: invokevirtual #457 // Method com/google/gson/JsonObject.has:(Ljava/lang/String;)Z
+ 42: ifeq 58
+ 45: aload_3
+ 46: ldc_w #788 // String pools
+ 49: invokevirtual #460 // Method com/google/gson/JsonObject.get:(Ljava/lang/String;)Lcom/google/gson/JsonElement;
+ 52: invokevirtual #463 // Method com/google/gson/JsonElement.isJsonArray:()Z
+ 55: ifne 60
+ 58: iconst_0
+ 59: ireturn
+ 60: aload_3
+ 61: ldc_w #788 // String pools
+ 64: invokevirtual #467 // Method com/google/gson/JsonObject.getAsJsonArray:(Ljava/lang/String;)Lcom/google/gson/JsonArray;
+ 67: astore 4
+ 69: iconst_0
+ 70: istore 5
+ 72: iload 5
+ 74: aload 4
+ 76: invokevirtual #731 // Method com/google/gson/JsonArray.size:()I
+ 79: if_icmpge 144
+ 82: aload 4
+ 84: iload 5
+ 86: invokevirtual #829 // Method com/google/gson/JsonArray.get:(I)Lcom/google/gson/JsonElement;
+ 89: astore 6
+ 91: aload 6
+ 93: invokevirtual #792 // Method com/google/gson/JsonElement.isJsonObject:()Z
+ 96: ifeq 138
+ 99: aload_1
+ 100: aload 6
+ 102: invokevirtual #347 // Method com/google/gson/JsonElement.getAsJsonObject:()Lcom/google/gson/JsonObject;
+ 105: ldc_w #348 // String id
+ 108: ldc_w #624 // String
+ 111: invokestatic #796 // Method getString:(Lcom/google/gson/JsonObject;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+ 114: invokevirtual #799 // Method java/lang/String.equals:(Ljava/lang/Object;)Z
+ 117: ifeq 138
+ 120: aload 4
+ 122: iload 5
+ 124: invokevirtual #832 // Method com/google/gson/JsonArray.remove:(I)Lcom/google/gson/JsonElement;
+ 127: pop
+ 128: aload_2
+ 129: aload_3
+ 130: invokestatic #299 // Method writeConfigObject:(Ljava/nio/file/Path;Lcom/google/gson/JsonObject;)V
+ 133: invokestatic #301 // Method reload:()V
+ 136: iconst_1
+ 137: ireturn
+ 138: iinc 5, 1
+ 141: goto 72
+ 144: iconst_0
+ 145: ireturn
+ 146: astore_3
+ 147: getstatic #92 // Field com/ogaba/sa_decor/SADecor.LOGGER:Lorg/slf4j/Logger;
+ 150: ldc_w #834 // String Could not delete pool \'{}\' from loot profile \'{}\'.
+ 153: iconst_3
+ 154: anewarray #4 // class java/lang/Object
+ 157: dup
+ 158: iconst_0
+ 159: aload_1
+ 160: aastore
+ 161: dup
+ 162: iconst_1
+ 163: aload_0
+ 164: aastore
+ 165: dup
+ 166: iconst_2
+ 167: aload_3
+ 168: aastore
+ 169: invokeinterface #308, 3 // InterfaceMethod org/slf4j/Logger.warn:(Ljava/lang/String;[Ljava/lang/Object;)V
+ 174: iconst_0
+ 175: ireturn
+ Exception table:
+ from to target type
+ 30 59 146 Class java/lang/Exception
+ 60 137 146 Class java/lang/Exception
+ 138 145 146 Class java/lang/Exception
+
+ public static boolean deleteEntry(java.lang.String, java.lang.String, int);
+ Code:
+ 0: getstatic #57 // Field CONFIG_PATHS:Ljava/util/Map;
+ 3: aload_0
+ 4: invokeinterface #217, 2 // InterfaceMethod java/util/Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
+ 9: checkcast #86 // class java/nio/file/Path
+ 12: astore_3
+ 13: aload_3
+ 14: ifnull 21
+ 17: iload_2
+ 18: ifge 23
+ 21: iconst_0
+ 22: ireturn
+ 23: aload_3
+ 24: invokestatic #394 // Method readConfigObject:(Ljava/nio/file/Path;)Lcom/google/gson/JsonObject;
+ 27: astore 4
+ 29: aload 4
+ 31: aload_1
+ 32: iconst_0
+ 33: invokestatic #659 // Method getEntryArray:(Lcom/google/gson/JsonObject;Ljava/lang/String;Z)Lcom/google/gson/JsonArray;
+ 36: astore 5
+ 38: aload 5
+ 40: ifnull 52
+ 43: iload_2
+ 44: aload 5
+ 46: invokevirtual #731 // Method com/google/gson/JsonArray.size:()I
+ 49: if_icmplt 54
+ 52: iconst_0
+ 53: ireturn
+ 54: aload 5
+ 56: iload_2
+ 57: invokevirtual #832 // Method com/google/gson/JsonArray.remove:(I)Lcom/google/gson/JsonElement;
+ 60: pop
+ 61: aload_3
+ 62: aload 4
+ 64: invokestatic #299 // Method writeConfigObject:(Ljava/nio/file/Path;Lcom/google/gson/JsonObject;)V
+ 67: invokestatic #301 // Method reload:()V
+ 70: iconst_1
+ 71: ireturn
+ 72: astore 4
+ 74: getstatic #92 // Field com/ogaba/sa_decor/SADecor.LOGGER:Lorg/slf4j/Logger;
+ 77: ldc_w #839 // String Could not delete entry {} from loot profile \'{}\'.
+ 80: iconst_3
+ 81: anewarray #4 // class java/lang/Object
+ 84: dup
+ 85: iconst_0
+ 86: iload_2
+ 87: invokestatic #199 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
+ 90: aastore
+ 91: dup
+ 92: iconst_1
+ 93: aload_0
+ 94: aastore
+ 95: dup
+ 96: iconst_2
+ 97: aload 4
+ 99: aastore
+ 100: invokeinterface #308, 3 // InterfaceMethod org/slf4j/Logger.warn:(Ljava/lang/String;[Ljava/lang/Object;)V
+ 105: iconst_0
+ 106: ireturn
+ Exception table:
+ from to target type
+ 23 53 72 Class java/lang/Exception
+ 54 71 72 Class java/lang/Exception
+
+ public static boolean updateEntrySettings(java.lang.String, java.lang.String, int, int, int, int, float);
+ Code:
+ 0: getstatic #57 // Field CONFIG_PATHS:Ljava/util/Map;
+ 3: aload_0
+ 4: invokeinterface #217, 2 // InterfaceMethod java/util/Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
+ 9: checkcast #86 // class java/nio/file/Path
+ 12: astore 7
+ 14: aload 7
+ 16: ifnull 23
+ 19: iload_2
+ 20: ifge 25
+ 23: iconst_0
+ 24: ireturn
+ 25: aload 7
+ 27: invokestatic #394 // Method readConfigObject:(Ljava/nio/file/Path;)Lcom/google/gson/JsonObject;
+ 30: astore 8
+ 32: aload 8
+ 34: aload_1
+ 35: iconst_0
+ 36: invokestatic #659 // Method getEntryArray:(Lcom/google/gson/JsonObject;Ljava/lang/String;Z)Lcom/google/gson/JsonArray;
+ 39: astore 9
+ 41: aload 9
+ 43: ifnull 67
+ 46: iload_2
+ 47: aload 9
+ 49: invokevirtual #731 // Method com/google/gson/JsonArray.size:()I
+ 52: if_icmpge 67
+ 55: aload 9
+ 57: iload_2
+ 58: invokevirtual #829 // Method com/google/gson/JsonArray.get:(I)Lcom/google/gson/JsonElement;
+ 61: invokevirtual #792 // Method com/google/gson/JsonElement.isJsonObject:()Z
+ 64: ifne 69
+ 67: iconst_0
+ 68: ireturn
+ 69: aload 9
+ 71: iload_2
+ 72: invokevirtual #829 // Method com/google/gson/JsonArray.get:(I)Lcom/google/gson/JsonElement;
+ 75: invokevirtual #347 // Method com/google/gson/JsonElement.getAsJsonObject:()Lcom/google/gson/JsonObject;
+ 78: astore 10
+ 80: aload 10
+ 82: ldc_w #637 // String weight
+ 85: iconst_1
+ 86: ldc_w #684 // int 1000000
+ 89: iload_3
+ 90: invokestatic #643 // Method java/lang/Math.min:(II)I
+ 93: invokestatic #416 // Method java/lang/Math.max:(II)I
+ 96: invokestatic #199 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
+ 99: invokevirtual #419 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/Number;)V
+ 102: aload 10
+ 104: ldc_w #638 // String chance
+ 107: ldc_w #685 // float 1.0E-4f
+ 110: fconst_1
+ 111: fload 6
+ 113: invokestatic #438 // Method java/lang/Math.min:(FF)F
+ 116: invokestatic #440 // Method java/lang/Math.max:(FF)F
+ 119: invokestatic #445 // Method java/lang/Float.valueOf:(F)Ljava/lang/Float;
+ 122: invokevirtual #419 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/Number;)V
+ 125: aload 10
+ 127: ldc_w #646 // String count
+ 130: invokestatic #400 // Method getOrCreateObject:(Lcom/google/gson/JsonObject;Ljava/lang/String;)Lcom/google/gson/JsonObject;
+ 133: astore 11
+ 135: aload 11
+ 137: ldc_w #641 // String min
+ 140: iconst_1
+ 141: bipush 64
+ 143: iload 4
+ 145: iload 5
+ 147: invokestatic #643 // Method java/lang/Math.min:(II)I
+ 150: invokestatic #643 // Method java/lang/Math.min:(II)I
+ 153: invokestatic #416 // Method java/lang/Math.max:(II)I
+ 156: invokestatic #199 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
+ 159: invokevirtual #419 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/Number;)V
+ 162: aload 11
+ 164: ldc_w #644 // String max
+ 167: iconst_1
+ 168: bipush 64
+ 170: iload 4
+ 172: iload 5
+ 174: invokestatic #416 // Method java/lang/Math.max:(II)I
+ 177: invokestatic #643 // Method java/lang/Math.min:(II)I
+ 180: invokestatic #416 // Method java/lang/Math.max:(II)I
+ 183: invokestatic #199 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
+ 186: invokevirtual #419 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/Number;)V
+ 189: aload 7
+ 191: aload 8
+ 193: invokestatic #299 // Method writeConfigObject:(Ljava/nio/file/Path;Lcom/google/gson/JsonObject;)V
+ 196: invokestatic #301 // Method reload:()V
+ 199: iconst_1
+ 200: ireturn
+ 201: astore 8
+ 203: getstatic #92 // Field com/ogaba/sa_decor/SADecor.LOGGER:Lorg/slf4j/Logger;
+ 206: ldc_w #844 // String Could not update entry {} in loot profile \'{}\'.
+ 209: iconst_3
+ 210: anewarray #4 // class java/lang/Object
+ 213: dup
+ 214: iconst_0
+ 215: iload_2
+ 216: invokestatic #199 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
+ 219: aastore
+ 220: dup
+ 221: iconst_1
+ 222: aload_0
+ 223: aastore
+ 224: dup
+ 225: iconst_2
+ 226: aload 8
+ 228: aastore
+ 229: invokeinterface #308, 3 // InterfaceMethod org/slf4j/Logger.warn:(Ljava/lang/String;[Ljava/lang/Object;)V
+ 234: iconst_0
+ 235: ireturn
+ Exception table:
+ from to target type
+ 25 68 201 Class java/lang/Exception
+ 69 200 201 Class java/lang/Exception
+
+ public static boolean replaceInventoryEntryAndKit(java.lang.String, java.lang.String, int, net.minecraft.world.item.ItemStack, int, int, int, float, boolean, java.util.List);
+ Code:
+ 0: getstatic #57 // Field CONFIG_PATHS:Ljava/util/Map;
+ 3: aload_0
+ 4: invokeinterface #217, 2 // InterfaceMethod java/util/Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
+ 9: checkcast #86 // class java/nio/file/Path
+ 12: astore 10
+ 14: aload 10
+ 16: ifnull 23
+ 19: iload_2
+ 20: ifge 25
+ 23: iconst_0
+ 24: ireturn
+ 25: aload 10
+ 27: invokestatic #394 // Method readConfigObject:(Ljava/nio/file/Path;)Lcom/google/gson/JsonObject;
+ 30: astore 11
+ 32: aload 11
+ 34: aload_1
+ 35: iconst_0
+ 36: invokestatic #659 // Method getEntryArray:(Lcom/google/gson/JsonObject;Ljava/lang/String;Z)Lcom/google/gson/JsonArray;
+ 39: astore 12
+ 41: aload 12
+ 43: ifnull 67
+ 46: iload_2
+ 47: aload 12
+ 49: invokevirtual #731 // Method com/google/gson/JsonArray.size:()I
+ 52: if_icmpge 67
+ 55: aload 12
+ 57: iload_2
+ 58: invokevirtual #829 // Method com/google/gson/JsonArray.get:(I)Lcom/google/gson/JsonElement;
+ 61: invokevirtual #792 // Method com/google/gson/JsonElement.isJsonObject:()Z
+ 64: ifne 69
+ 67: iconst_0
+ 68: ireturn
+ 69: aload 12
+ 71: iload_2
+ 72: invokevirtual #829 // Method com/google/gson/JsonArray.get:(I)Lcom/google/gson/JsonElement;
+ 75: invokevirtual #347 // Method com/google/gson/JsonElement.getAsJsonObject:()Lcom/google/gson/JsonObject;
+ 78: astore 13
+ 80: aload_3
+ 81: ifnull 142
+ 84: aload_3
+ 85: invokevirtual #711 // Method net/minecraft/world/item/ItemStack.m_41619_:()Z
+ 88: ifne 142
+ 91: aload_3
+ 92: iconst_1
+ 93: iload 4
+ 95: invokestatic #416 // Method java/lang/Math.max:(II)I
+ 98: ldc_w #685 // float 1.0E-4f
+ 101: fconst_1
+ 102: fload 7
+ 104: invokestatic #438 // Method java/lang/Math.min:(FF)F
+ 107: invokestatic #440 // Method java/lang/Math.max:(FF)F
+ 110: iconst_1
+ 111: iload 5
+ 113: iload 6
+ 115: invokestatic #643 // Method java/lang/Math.min:(II)I
+ 118: invokestatic #416 // Method java/lang/Math.max:(II)I
+ 121: iconst_1
+ 122: iload 5
+ 124: iload 6
+ 126: invokestatic #416 // Method java/lang/Math.max:(II)I
+ 129: invokestatic #416 // Method java/lang/Math.max:(II)I
+ 132: iload 8
+ 134: invokestatic #715 // Method createInventoryEntryJson:(Lnet/minecraft/world/item/ItemStack;IFIIZ)Lcom/google/gson/JsonObject;
+ 137: astore 14
+ 139: goto 279
+ 142: aload 13
+ 144: invokevirtual #506 // Method com/google/gson/JsonObject.toString:()Ljava/lang/String;
+ 147: invokestatic #509 // Method com/google/gson/JsonParser.parseString:(Ljava/lang/String;)Lcom/google/gson/JsonElement;
+ 150: invokevirtual #347 // Method com/google/gson/JsonElement.getAsJsonObject:()Lcom/google/gson/JsonObject;
+ 153: astore 14
+ 155: aload 14
+ 157: ldc_w #637 // String weight
+ 160: iconst_1
+ 161: ldc_w #684 // int 1000000
+ 164: iload 4
+ 166: invokestatic #643 // Method java/lang/Math.min:(II)I
+ 169: invokestatic #416 // Method java/lang/Math.max:(II)I
+ 172: invokestatic #199 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
+ 175: invokevirtual #419 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/Number;)V
+ 178: aload 14
+ 180: ldc_w #638 // String chance
+ 183: ldc_w #685 // float 1.0E-4f
+ 186: fconst_1
+ 187: fload 7
+ 189: invokestatic #438 // Method java/lang/Math.min:(FF)F
+ 192: invokestatic #440 // Method java/lang/Math.max:(FF)F
+ 195: invokestatic #445 // Method java/lang/Float.valueOf:(F)Ljava/lang/Float;
+ 198: invokevirtual #419 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/Number;)V
+ 201: aload 14
+ 203: ldc_w #646 // String count
+ 206: invokestatic #400 // Method getOrCreateObject:(Lcom/google/gson/JsonObject;Ljava/lang/String;)Lcom/google/gson/JsonObject;
+ 209: astore 15
+ 211: aload 15
+ 213: ldc_w #641 // String min
+ 216: iconst_1
+ 217: bipush 64
+ 219: iload 5
+ 221: iload 6
+ 223: invokestatic #643 // Method java/lang/Math.min:(II)I
+ 226: invokestatic #643 // Method java/lang/Math.min:(II)I
+ 229: invokestatic #416 // Method java/lang/Math.max:(II)I
+ 232: invokestatic #199 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
+ 235: invokevirtual #419 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/Number;)V
+ 238: aload 15
+ 240: ldc_w #644 // String max
+ 243: iconst_1
+ 244: bipush 64
+ 246: iload 5
+ 248: iload 6
+ 250: invokestatic #416 // Method java/lang/Math.max:(II)I
+ 253: invokestatic #643 // Method java/lang/Math.min:(II)I
+ 256: invokestatic #416 // Method java/lang/Math.max:(II)I
+ 259: invokestatic #199 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
+ 262: invokevirtual #419 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/Number;)V
+ 265: iload 8
+ 267: ifne 279
+ 270: aload 14
+ 272: ldc_w #640 // String nbt
+ 275: invokevirtual #849 // Method com/google/gson/JsonObject.remove:(Ljava/lang/String;)Lcom/google/gson/JsonElement;
+ 278: pop
+ 279: aload 13
+ 281: ldc_w #733 // String with
+ 284: invokevirtual #457 // Method com/google/gson/JsonObject.has:(Ljava/lang/String;)Z
+ 287: ifeq 315
+ 290: aload 13
+ 292: ldc_w #733 // String with
+ 295: invokevirtual #460 // Method com/google/gson/JsonObject.get:(Ljava/lang/String;)Lcom/google/gson/JsonElement;
+ 298: invokevirtual #463 // Method com/google/gson/JsonElement.isJsonArray:()Z
+ 301: ifeq 315
+ 304: aload 13
+ 306: ldc_w #733 // String with
+ 309: invokevirtual #467 // Method com/google/gson/JsonObject.getAsJsonArray:(Ljava/lang/String;)Lcom/google/gson/JsonArray;
+ 312: goto 322
+ 315: new #469 // class com/google/gson/JsonArray
+ 318: dup
+ 319: invokespecial #470 // Method com/google/gson/JsonArray."":()V
+ 322: astore 15
+ 324: new #469 // class com/google/gson/JsonArray
+ 327: dup
+ 328: invokespecial #470 // Method com/google/gson/JsonArray."":()V
+ 331: astore 16
+ 333: aload 9
+ 335: ifnull 552
+ 338: aload 9
+ 340: invokeinterface #719, 1 // InterfaceMethod java/util/List.iterator:()Ljava/util/Iterator;
+ 345: astore 17
+ 347: aload 17
+ 349: invokeinterface #602, 1 // InterfaceMethod java/util/Iterator.hasNext:()Z
+ 354: ifeq 552
+ 357: aload 17
+ 359: invokeinterface #606, 1 // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
+ 364: checkcast #7 // class com/ogaba/sa_decor/common/loot/DecorLootConfigManager$LinkedEntryReplacement
+ 367: astore 18
+ 369: aload 18
+ 371: ifnonnull 377
+ 374: goto 347
+ 377: aconst_null
+ 378: astore 19
+ 380: aload 18
+ 382: invokevirtual #852 // Method com/ogaba/sa_decor/common/loot/DecorLootConfigManager$LinkedEntryReplacement.existingIndex:()I
+ 385: iflt 499
+ 388: aload 18
+ 390: invokevirtual #852 // Method com/ogaba/sa_decor/common/loot/DecorLootConfigManager$LinkedEntryReplacement.existingIndex:()I
+ 393: aload 15
+ 395: invokevirtual #731 // Method com/google/gson/JsonArray.size:()I
+ 398: if_icmpge 499
+ 401: aload 15
+ 403: aload 18
+ 405: invokevirtual #852 // Method com/ogaba/sa_decor/common/loot/DecorLootConfigManager$LinkedEntryReplacement.existingIndex:()I
+ 408: invokevirtual #829 // Method com/google/gson/JsonArray.get:(I)Lcom/google/gson/JsonElement;
+ 411: invokevirtual #792 // Method com/google/gson/JsonElement.isJsonObject:()Z
+ 414: ifeq 499
+ 417: aload 15
+ 419: aload 18
+ 421: invokevirtual #852 // Method com/ogaba/sa_decor/common/loot/DecorLootConfigManager$LinkedEntryReplacement.existingIndex:()I
+ 424: invokevirtual #829 // Method com/google/gson/JsonArray.get:(I)Lcom/google/gson/JsonElement;
+ 427: invokevirtual #853 // Method com/google/gson/JsonElement.toString:()Ljava/lang/String;
+ 430: invokestatic #509 // Method com/google/gson/JsonParser.parseString:(Ljava/lang/String;)Lcom/google/gson/JsonElement;
+ 433: invokevirtual #347 // Method com/google/gson/JsonElement.getAsJsonObject:()Lcom/google/gson/JsonObject;
+ 436: astore 19
+ 438: aload 19
+ 440: ldc_w #638 // String chance
+ 443: aload 18
+ 445: invokevirtual #854 // Method com/ogaba/sa_decor/common/loot/DecorLootConfigManager$LinkedEntryReplacement.chance:()F
+ 448: invokestatic #445 // Method java/lang/Float.valueOf:(F)Ljava/lang/Float;
+ 451: invokevirtual #419 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/Number;)V
+ 454: aload 19
+ 456: ldc_w #646 // String count
+ 459: invokestatic #400 // Method getOrCreateObject:(Lcom/google/gson/JsonObject;Ljava/lang/String;)Lcom/google/gson/JsonObject;
+ 462: astore 20
+ 464: aload 20
+ 466: ldc_w #641 // String min
+ 469: aload 18
+ 471: invokevirtual #855 // Method com/ogaba/sa_decor/common/loot/DecorLootConfigManager$LinkedEntryReplacement.minCount:()I
+ 474: invokestatic #199 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
+ 477: invokevirtual #419 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/Number;)V
+ 480: aload 20
+ 482: ldc_w #644 // String max
+ 485: aload 18
+ 487: invokevirtual #856 // Method com/ogaba/sa_decor/common/loot/DecorLootConfigManager$LinkedEntryReplacement.maxCount:()I
+ 490: invokestatic #199 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
+ 493: invokevirtual #419 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/Number;)V
+ 496: goto 537
+ 499: aload 18
+ 501: invokevirtual #859 // Method com/ogaba/sa_decor/common/loot/DecorLootConfigManager$LinkedEntryReplacement.newStack:()Lnet/minecraft/world/item/ItemStack;
+ 504: invokevirtual #711 // Method net/minecraft/world/item/ItemStack.m_41619_:()Z
+ 507: ifne 537
+ 510: aload 18
+ 512: invokevirtual #859 // Method com/ogaba/sa_decor/common/loot/DecorLootConfigManager$LinkedEntryReplacement.newStack:()Lnet/minecraft/world/item/ItemStack;
+ 515: iconst_1
+ 516: aload 18
+ 518: invokevirtual #854 // Method com/ogaba/sa_decor/common/loot/DecorLootConfigManager$LinkedEntryReplacement.chance:()F
+ 521: aload 18
+ 523: invokevirtual #855 // Method com/ogaba/sa_decor/common/loot/DecorLootConfigManager$LinkedEntryReplacement.minCount:()I
+ 526: aload 18
+ 528: invokevirtual #856 // Method com/ogaba/sa_decor/common/loot/DecorLootConfigManager$LinkedEntryReplacement.maxCount:()I
+ 531: iconst_1
+ 532: invokestatic #715 // Method createInventoryEntryJson:(Lnet/minecraft/world/item/ItemStack;IFIIZ)Lcom/google/gson/JsonObject;
+ 535: astore 19
+ 537: aload 19
+ 539: ifnull 549
+ 542: aload 16
+ 544: aload 19
+ 546: invokevirtual #649 // Method com/google/gson/JsonArray.add:(Lcom/google/gson/JsonElement;)V
+ 549: goto 347
+ 552: aload 16
+ 554: invokevirtual #860 // Method com/google/gson/JsonArray.isEmpty:()Z
+ 557: ifeq 572
+ 560: aload 14
+ 562: ldc_w #733 // String with
+ 565: invokevirtual #849 // Method com/google/gson/JsonObject.remove:(Ljava/lang/String;)Lcom/google/gson/JsonElement;
+ 568: pop
+ 569: goto 582
+ 572: aload 14
+ 574: ldc_w #733 // String with
+ 577: aload 16
+ 579: invokevirtual #474 // Method com/google/gson/JsonObject.add:(Ljava/lang/String;Lcom/google/gson/JsonElement;)V
+ 582: aload 12
+ 584: iload_2
+ 585: aload 14
+ 587: invokevirtual #864 // Method com/google/gson/JsonArray.set:(ILcom/google/gson/JsonElement;)Lcom/google/gson/JsonElement;
+ 590: pop
+ 591: aload 10
+ 593: aload 11
+ 595: invokestatic #299 // Method writeConfigObject:(Ljava/nio/file/Path;Lcom/google/gson/JsonObject;)V
+ 598: invokestatic #301 // Method reload:()V
+ 601: iconst_1
+ 602: ireturn
+ 603: astore 11
+ 605: getstatic #92 // Field com/ogaba/sa_decor/SADecor.LOGGER:Lorg/slf4j/Logger;
+ 608: ldc_w #866 // String Could not replace entry {} in loot profile \'{}\'.
+ 611: iconst_3
+ 612: anewarray #4 // class java/lang/Object
+ 615: dup
+ 616: iconst_0
+ 617: iload_2
+ 618: invokestatic #199 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
+ 621: aastore
+ 622: dup
+ 623: iconst_1
+ 624: aload_0
+ 625: aastore
+ 626: dup
+ 627: iconst_2
+ 628: aload 11
+ 630: aastore
+ 631: invokeinterface #308, 3 // InterfaceMethod org/slf4j/Logger.warn:(Ljava/lang/String;[Ljava/lang/Object;)V
+ 636: iconst_0
+ 637: ireturn
+ Exception table:
+ from to target type
+ 25 68 603 Class java/lang/Exception
+ 69 602 603 Class java/lang/Exception
+
+ public static boolean deleteConfig(java.lang.String);
+ Code:
+ 0: getstatic #57 // Field CONFIG_PATHS:Ljava/util/Map;
+ 3: aload_0
+ 4: invokeinterface #217, 2 // InterfaceMethod java/util/Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
+ 9: checkcast #86 // class java/nio/file/Path
+ 12: astore_1
+ 13: aload_1
+ 14: ifnonnull 19
+ 17: iconst_0
+ 18: ireturn
+ 19: aload_1
+ 20: invokestatic #881 // Method java/nio/file/Files.deleteIfExists:(Ljava/nio/file/Path;)Z
+ 23: istore_2
+ 24: invokestatic #301 // Method reload:()V
+ 27: iload_2
+ 28: ireturn
+ 29: astore_2
+ 30: getstatic #92 // Field com/ogaba/sa_decor/SADecor.LOGGER:Lorg/slf4j/Logger;
+ 33: ldc_w #883 // String Could not delete loot config \'{}\'.
+ 36: aload_0
+ 37: aload_2
+ 38: invokeinterface #100, 4 // InterfaceMethod org/slf4j/Logger.warn:(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)V
+ 43: iconst_0
+ 44: ireturn
+ Exception table:
+ from to target type
+ 19 28 29 Class java/io/IOException
+
+ private static com.google.gson.JsonArray getEntryArray(com.google.gson.JsonObject, java.lang.String, boolean);
+ Code:
+ 0: aload_1
+ 1: ifnonnull 10
+ 4: ldc_w #624 // String
+ 7: goto 14
+ 10: aload_1
+ 11: invokevirtual #503 // Method java/lang/String.trim:()Ljava/lang/String;
+ 14: astore_3
+ 15: aload_3
+ 16: invokevirtual #885 // Method java/lang/String.isEmpty:()Z
+ 19: ifeq 74
+ 22: aload_0
+ 23: ldc_w #621 // String entries
+ 26: invokevirtual #457 // Method com/google/gson/JsonObject.has:(Ljava/lang/String;)Z
+ 29: ifeq 53
+ 32: aload_0
+ 33: ldc_w #621 // String entries
+ 36: invokevirtual #460 // Method com/google/gson/JsonObject.get:(Ljava/lang/String;)Lcom/google/gson/JsonElement;
+ 39: invokevirtual #463 // Method com/google/gson/JsonElement.isJsonArray:()Z
+ 42: ifeq 53
+ 45: aload_0
+ 46: ldc_w #621 // String entries
+ 49: invokevirtual #467 // Method com/google/gson/JsonObject.getAsJsonArray:(Ljava/lang/String;)Lcom/google/gson/JsonArray;
+ 52: areturn
+ 53: new #469 // class com/google/gson/JsonArray
+ 56: dup
+ 57: invokespecial #470 // Method com/google/gson/JsonArray."":()V
+ 60: astore 4
+ 62: aload_0
+ 63: ldc_w #621 // String entries
+ 66: aload 4
+ 68: invokevirtual #474 // Method com/google/gson/JsonObject.add:(Ljava/lang/String;Lcom/google/gson/JsonElement;)V
+ 71: aload 4
+ 73: areturn
+ 74: aload_0
+ 75: ldc_w #788 // String pools
+ 78: invokevirtual #457 // Method com/google/gson/JsonObject.has:(Ljava/lang/String;)Z
+ 81: ifeq 97
+ 84: aload_0
+ 85: ldc_w #788 // String pools
+ 88: invokevirtual #460 // Method com/google/gson/JsonObject.get:(Ljava/lang/String;)Lcom/google/gson/JsonElement;
+ 91: invokevirtual #463 // Method com/google/gson/JsonElement.isJsonArray:()Z
+ 94: ifne 99
+ 97: aconst_null
+ 98: areturn
+ 99: aload_0
+ 100: ldc_w #788 // String pools
+ 103: invokevirtual #467 // Method com/google/gson/JsonObject.getAsJsonArray:(Ljava/lang/String;)Lcom/google/gson/JsonArray;
+ 106: invokevirtual #789 // Method com/google/gson/JsonArray.iterator:()Ljava/util/Iterator;
+ 109: astore 4
+ 111: aload 4
+ 113: invokeinterface #602, 1 // InterfaceMethod java/util/Iterator.hasNext:()Z
+ 118: ifeq 234
+ 121: aload 4
+ 123: invokeinterface #606, 1 // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
+ 128: checkcast #343 // class com/google/gson/JsonElement
+ 131: astore 5
+ 133: aload 5
+ 135: invokevirtual #792 // Method com/google/gson/JsonElement.isJsonObject:()Z
+ 138: ifne 144
+ 141: goto 111
+ 144: aload 5
+ 146: invokevirtual #347 // Method com/google/gson/JsonElement.getAsJsonObject:()Lcom/google/gson/JsonObject;
+ 149: astore 6
+ 151: aload_3
+ 152: aload 6
+ 154: ldc_w #348 // String id
+ 157: ldc_w #624 // String
+ 160: invokestatic #796 // Method getString:(Lcom/google/gson/JsonObject;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+ 163: invokevirtual #799 // Method java/lang/String.equals:(Ljava/lang/Object;)Z
+ 166: ifne 172
+ 169: goto 111
+ 172: aload 6
+ 174: ldc_w #621 // String entries
+ 177: invokevirtual #457 // Method com/google/gson/JsonObject.has:(Ljava/lang/String;)Z
+ 180: ifeq 206
+ 183: aload 6
+ 185: ldc_w #621 // String entries
+ 188: invokevirtual #460 // Method com/google/gson/JsonObject.get:(Ljava/lang/String;)Lcom/google/gson/JsonElement;
+ 191: invokevirtual #463 // Method com/google/gson/JsonElement.isJsonArray:()Z
+ 194: ifeq 206
+ 197: aload 6
+ 199: ldc_w #621 // String entries
+ 202: invokevirtual #467 // Method com/google/gson/JsonObject.getAsJsonArray:(Ljava/lang/String;)Lcom/google/gson/JsonArray;
+ 205: areturn
+ 206: iload_2
+ 207: ifeq 232
+ 210: new #469 // class com/google/gson/JsonArray
+ 213: dup
+ 214: invokespecial #470 // Method com/google/gson/JsonArray."":()V
+ 217: astore 7
+ 219: aload 6
+ 221: ldc_w #621 // String entries
+ 224: aload 7
+ 226: invokevirtual #474 // Method com/google/gson/JsonObject.add:(Ljava/lang/String;Lcom/google/gson/JsonElement;)V
+ 229: aload 7
+ 231: areturn
+ 232: aconst_null
+ 233: areturn
+ 234: aconst_null
+ 235: areturn
+
+ private static com.google.gson.JsonObject findPoolObject(com.google.gson.JsonObject, java.lang.String);
+ Code:
+ 0: aload_0
+ 1: ifnull 38
+ 4: aload_1
+ 5: ifnull 38
+ 8: aload_1
+ 9: invokevirtual #454 // Method java/lang/String.isBlank:()Z
+ 12: ifne 38
+ 15: aload_0
+ 16: ldc_w #788 // String pools
+ 19: invokevirtual #457 // Method com/google/gson/JsonObject.has:(Ljava/lang/String;)Z
+ 22: ifeq 38
+ 25: aload_0
+ 26: ldc_w #788 // String pools
+ 29: invokevirtual #460 // Method com/google/gson/JsonObject.get:(Ljava/lang/String;)Lcom/google/gson/JsonElement;
+ 32: invokevirtual #463 // Method com/google/gson/JsonElement.isJsonArray:()Z
+ 35: ifne 40
+ 38: aconst_null
+ 39: areturn
+ 40: aload_0
+ 41: ldc_w #788 // String pools
+ 44: invokevirtual #467 // Method com/google/gson/JsonObject.getAsJsonArray:(Ljava/lang/String;)Lcom/google/gson/JsonArray;
+ 47: invokevirtual #789 // Method com/google/gson/JsonArray.iterator:()Ljava/util/Iterator;
+ 50: astore_2
+ 51: aload_2
+ 52: invokeinterface #602, 1 // InterfaceMethod java/util/Iterator.hasNext:()Z
+ 57: ifeq 110
+ 60: aload_2
+ 61: invokeinterface #606, 1 // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
+ 66: checkcast #343 // class com/google/gson/JsonElement
+ 69: astore_3
+ 70: aload_3
+ 71: invokevirtual #792 // Method com/google/gson/JsonElement.isJsonObject:()Z
+ 74: ifne 80
+ 77: goto 51
+ 80: aload_3
+ 81: invokevirtual #347 // Method com/google/gson/JsonElement.getAsJsonObject:()Lcom/google/gson/JsonObject;
+ 84: astore 4
+ 86: aload_1
+ 87: aload 4
+ 89: ldc_w #348 // String id
+ 92: ldc_w #624 // String
+ 95: invokestatic #796 // Method getString:(Lcom/google/gson/JsonObject;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+ 98: invokevirtual #799 // Method java/lang/String.equals:(Ljava/lang/Object;)Z
+ 101: ifeq 107
+ 104: aload 4
+ 106: areturn
+ 107: goto 51
+ 110: aconst_null
+ 111: areturn
+
+ private static com.google.gson.JsonObject createInventoryEntryJson(net.minecraft.world.item.ItemStack, int, float, int, int, boolean);
+ Code:
+ 0: new #303 // class com/google/gson/JsonObject
+ 3: dup
+ 4: invokespecial #622 // Method com/google/gson/JsonObject."":()V
+ 7: astore 6
+ 9: aload 6
+ 11: ldc_w #636 // String item
+ 14: getstatic #671 // Field net/minecraft/core/registries/BuiltInRegistries.f_257033_:Lnet/minecraft/core/DefaultedRegistry;
+ 17: aload_0
+ 18: invokevirtual #891 // Method net/minecraft/world/item/ItemStack.m_41720_:()Lnet/minecraft/world/item/Item;
+ 21: invokeinterface #895, 2 // InterfaceMethod net/minecraft/core/DefaultedRegistry.m_7981_:(Ljava/lang/Object;)Lnet/minecraft/resources/ResourceLocation;
+ 26: invokevirtual #896 // Method net/minecraft/resources/ResourceLocation.toString:()Ljava/lang/String;
+ 29: invokevirtual #352 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/String;)V
+ 32: aload 6
+ 34: ldc_w #637 // String weight
+ 37: iconst_1
+ 38: iload_1
+ 39: invokestatic #416 // Method java/lang/Math.max:(II)I
+ 42: invokestatic #199 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
+ 45: invokevirtual #419 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/Number;)V
+ 48: aload 6
+ 50: ldc_w #638 // String chance
+ 53: ldc_w #685 // float 1.0E-4f
+ 56: fconst_1
+ 57: fload_2
+ 58: invokestatic #438 // Method java/lang/Math.min:(FF)F
+ 61: invokestatic #440 // Method java/lang/Math.max:(FF)F
+ 64: invokestatic #445 // Method java/lang/Float.valueOf:(F)Ljava/lang/Float;
+ 67: invokevirtual #419 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/Number;)V
+ 70: new #303 // class com/google/gson/JsonObject
+ 73: dup
+ 74: invokespecial #622 // Method com/google/gson/JsonObject."":()V
+ 77: astore 7
+ 79: aload 7
+ 81: ldc_w #641 // String min
+ 84: iconst_1
+ 85: iload_3
+ 86: iload 4
+ 88: invokestatic #643 // Method java/lang/Math.min:(II)I
+ 91: invokestatic #416 // Method java/lang/Math.max:(II)I
+ 94: invokestatic #199 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
+ 97: invokevirtual #419 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/Number;)V
+ 100: aload 7
+ 102: ldc_w #644 // String max
+ 105: iconst_1
+ 106: iload_3
+ 107: iload 4
+ 109: invokestatic #416 // Method java/lang/Math.max:(II)I
+ 112: invokestatic #416 // Method java/lang/Math.max:(II)I
+ 115: invokestatic #199 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
+ 118: invokevirtual #419 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/Number;)V
+ 121: aload 6
+ 123: ldc_w #646 // String count
+ 126: aload 7
+ 128: invokevirtual #474 // Method com/google/gson/JsonObject.add:(Ljava/lang/String;Lcom/google/gson/JsonElement;)V
+ 131: ldc_w #898 // String tacz
+ 134: getstatic #671 // Field net/minecraft/core/registries/BuiltInRegistries.f_257033_:Lnet/minecraft/core/DefaultedRegistry;
+ 137: aload_0
+ 138: invokevirtual #891 // Method net/minecraft/world/item/ItemStack.m_41720_:()Lnet/minecraft/world/item/Item;
+ 141: invokeinterface #895, 2 // InterfaceMethod net/minecraft/core/DefaultedRegistry.m_7981_:(Ljava/lang/Object;)Lnet/minecraft/resources/ResourceLocation;
+ 146: invokevirtual #901 // Method net/minecraft/resources/ResourceLocation.m_135827_:()Ljava/lang/String;
+ 149: invokevirtual #799 // Method java/lang/String.equals:(Ljava/lang/Object;)Z
+ 152: istore 8
+ 154: iload 5
+ 156: ifne 164
+ 159: iload 8
+ 161: ifeq 240
+ 164: aload_0
+ 165: invokevirtual #904 // Method net/minecraft/world/item/ItemStack.m_41782_:()Z
+ 168: ifeq 240
+ 171: aload_0
+ 172: invokevirtual #908 // Method net/minecraft/world/item/ItemStack.m_41783_:()Lnet/minecraft/nbt/CompoundTag;
+ 175: astore 9
+ 177: aload 9
+ 179: ifnull 240
+ 182: aload 9
+ 184: invokevirtual #913 // Method net/minecraft/nbt/CompoundTag.m_128456_:()Z
+ 187: ifne 240
+ 190: aload 9
+ 192: invokevirtual #916 // Method net/minecraft/nbt/CompoundTag.m_6426_:()Lnet/minecraft/nbt/CompoundTag;
+ 195: astore 10
+ 197: aload 10
+ 199: ldc_w #918 // String GunId
+ 202: invokevirtual #921 // Method net/minecraft/nbt/CompoundTag.m_128461_:(Ljava/lang/String;)Ljava/lang/String;
+ 205: invokevirtual #454 // Method java/lang/String.isBlank:()Z
+ 208: ifne 219
+ 211: aload 10
+ 213: ldc_w #923 // String Durability
+ 216: invokevirtual #926 // Method net/minecraft/nbt/CompoundTag.m_128473_:(Ljava/lang/String;)V
+ 219: aload 10
+ 221: invokevirtual #913 // Method net/minecraft/nbt/CompoundTag.m_128456_:()Z
+ 224: ifne 240
+ 227: aload 6
+ 229: ldc_w #640 // String nbt
+ 232: aload 10
+ 234: invokevirtual #927 // Method net/minecraft/nbt/CompoundTag.toString:()Ljava/lang/String;
+ 237: invokevirtual #352 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/String;)V
+ 240: aload 6
+ 242: areturn
+
+ private static com.google.gson.JsonObject createEmptyConfigJson(java.lang.String, boolean, boolean, boolean);
+ Code:
+ 0: new #303 // class com/google/gson/JsonObject
+ 3: dup
+ 4: invokespecial #622 // Method com/google/gson/JsonObject."":()V
+ 7: astore 4
+ 9: aload 4
+ 11: ldc_w #348 // String id
+ 14: aload_0
+ 15: invokevirtual #352 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/String;)V
+ 18: aload 4
+ 20: ldc_w #511 // String display_name
+ 23: aload_0
+ 24: invokevirtual #352 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/String;)V
+ 27: aload 4
+ 29: ldc_w #742 // String description
+ 32: ldc_w #624 // String
+ 35: invokevirtual #352 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/String;)V
+ 38: new #303 // class com/google/gson/JsonObject
+ 41: dup
+ 42: invokespecial #622 // Method com/google/gson/JsonObject."":()V
+ 45: astore 5
+ 47: aload 5
+ 49: ldc_w #641 // String min
+ 52: iconst_1
+ 53: invokestatic #199 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
+ 56: invokevirtual #419 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/Number;)V
+ 59: aload 5
+ 61: ldc_w #644 // String max
+ 64: iconst_3
+ 65: invokestatic #199 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
+ 68: invokevirtual #419 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/Number;)V
+ 71: aload 4
+ 73: ldc_w #744 // String rolls
+ 76: aload 5
+ 78: invokevirtual #474 // Method com/google/gson/JsonObject.add:(Ljava/lang/String;Lcom/google/gson/JsonElement;)V
+ 81: new #303 // class com/google/gson/JsonObject
+ 84: dup
+ 85: invokespecial #622 // Method com/google/gson/JsonObject."":()V
+ 88: astore 6
+ 90: aload 6
+ 92: ldc_w #373 // String enabled
+ 95: iload_2
+ 96: invokestatic #405 // Method java/lang/Boolean.valueOf:(Z)Ljava/lang/Boolean;
+ 99: invokevirtual #408 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/Boolean;)V
+ 102: aload 4
+ 104: ldc_w #371 // String search
+ 107: aload 6
+ 109: invokevirtual #474 // Method com/google/gson/JsonObject.add:(Ljava/lang/String;Lcom/google/gson/JsonElement;)V
+ 112: new #303 // class com/google/gson/JsonObject
+ 115: dup
+ 116: invokespecial #622 // Method com/google/gson/JsonObject."":()V
+ 119: astore 7
+ 121: aload 7
+ 123: ldc_w #373 // String enabled
+ 126: iload_3
+ 127: invokestatic #405 // Method java/lang/Boolean.valueOf:(Z)Ljava/lang/Boolean;
+ 130: invokevirtual #408 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/Boolean;)V
+ 133: aload 7
+ 135: ldc_w #434 // String spawn_chance
+ 138: fconst_0
+ 139: invokestatic #445 // Method java/lang/Float.valueOf:(F)Ljava/lang/Float;
+ 142: invokevirtual #419 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/Number;)V
+ 145: aload 7
+ 147: ldc_w #750 // String lockpick
+ 150: iconst_1
+ 151: invokestatic #405 // Method java/lang/Boolean.valueOf:(Z)Ljava/lang/Boolean;
+ 154: invokevirtual #408 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/Boolean;)V
+ 157: aload 4
+ 159: ldc_w #381 // String lock
+ 162: aload 7
+ 164: invokevirtual #474 // Method com/google/gson/JsonObject.add:(Ljava/lang/String;Lcom/google/gson/JsonElement;)V
+ 167: new #303 // class com/google/gson/JsonObject
+ 170: dup
+ 171: invokespecial #622 // Method com/google/gson/JsonObject."":()V
+ 174: astore 8
+ 176: aload 8
+ 178: ldc_w #373 // String enabled
+ 181: iconst_0
+ 182: invokestatic #405 // Method java/lang/Boolean.valueOf:(Z)Ljava/lang/Boolean;
+ 185: invokevirtual #408 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/Boolean;)V
+ 188: aload 8
+ 190: ldc_w #434 // String spawn_chance
+ 193: fconst_0
+ 194: invokestatic #445 // Method java/lang/Float.valueOf:(F)Ljava/lang/Float;
+ 197: invokevirtual #419 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/Number;)V
+ 200: aload 4
+ 202: ldc_w #432 // String empty
+ 205: aload 8
+ 207: invokevirtual #474 // Method com/google/gson/JsonObject.add:(Ljava/lang/String;Lcom/google/gson/JsonElement;)V
+ 210: new #303 // class com/google/gson/JsonObject
+ 213: dup
+ 214: invokespecial #622 // Method com/google/gson/JsonObject."":()V
+ 217: astore 9
+ 219: aload 9
+ 221: ldc_w #373 // String enabled
+ 224: iconst_0
+ 225: invokestatic #405 // Method java/lang/Boolean.valueOf:(Z)Ljava/lang/Boolean;
+ 228: invokevirtual #408 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/Boolean;)V
+ 231: aload 9
+ 233: ldc_w #754 // String amount
+ 236: iconst_1
+ 237: invokestatic #199 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
+ 240: invokevirtual #419 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/Number;)V
+ 243: aload 9
+ 245: ldc_w #756 // String consume
+ 248: iconst_1
+ 249: invokestatic #405 // Method java/lang/Boolean.valueOf:(Z)Ljava/lang/Boolean;
+ 252: invokevirtual #408 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/Boolean;)V
+ 255: aload 9
+ 257: ldc_w #758 // String bypass_lock
+ 260: iconst_1
+ 261: invokestatic #405 // Method java/lang/Boolean.valueOf:(Z)Ljava/lang/Boolean;
+ 264: invokevirtual #408 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/Boolean;)V
+ 267: aload 9
+ 269: ldc_w #760 // String bypass_search
+ 272: iconst_1
+ 273: invokestatic #405 // Method java/lang/Boolean.valueOf:(Z)Ljava/lang/Boolean;
+ 276: invokevirtual #408 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/Boolean;)V
+ 279: aload 9
+ 281: ldc_w #762 // String items
+ 284: new #469 // class com/google/gson/JsonArray
+ 287: dup
+ 288: invokespecial #470 // Method com/google/gson/JsonArray."":()V
+ 291: invokevirtual #474 // Method com/google/gson/JsonObject.add:(Ljava/lang/String;Lcom/google/gson/JsonElement;)V
+ 294: aload 9
+ 296: ldc_w #764 // String tags
+ 299: new #469 // class com/google/gson/JsonArray
+ 302: dup
+ 303: invokespecial #470 // Method com/google/gson/JsonArray."":()V
+ 306: invokevirtual #474 // Method com/google/gson/JsonObject.add:(Ljava/lang/String;Lcom/google/gson/JsonElement;)V
+ 309: aload 4
+ 311: ldc_w #752 // String open_pass
+ 314: aload 9
+ 316: invokevirtual #474 // Method com/google/gson/JsonObject.add:(Ljava/lang/String;Lcom/google/gson/JsonElement;)V
+ 319: new #303 // class com/google/gson/JsonObject
+ 322: dup
+ 323: invokespecial #622 // Method com/google/gson/JsonObject."":()V
+ 326: astore 10
+ 328: aload 10
+ 330: ldc_w #373 // String enabled
+ 333: iconst_0
+ 334: invokestatic #405 // Method java/lang/Boolean.valueOf:(Z)Ljava/lang/Boolean;
+ 337: invokevirtual #408 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/Boolean;)V
+ 340: aload 10
+ 342: ldc_w #410 // String time_ticks
+ 345: sipush 24000
+ 348: invokestatic #199 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
+ 351: invokevirtual #419 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/Number;)V
+ 354: aload 10
+ 356: ldc_w #421 // String only_if_empty
+ 359: iconst_1
+ 360: invokestatic #405 // Method java/lang/Boolean.valueOf:(Z)Ljava/lang/Boolean;
+ 363: invokevirtual #408 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/Boolean;)V
+ 366: aload 10
+ 368: ldc_w #423 // String clear_before_respawn
+ 371: iconst_1
+ 372: invokestatic #405 // Method java/lang/Boolean.valueOf:(Z)Ljava/lang/Boolean;
+ 375: invokevirtual #408 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/Boolean;)V
+ 378: aload 4
+ 380: ldc_w #396 // String respawn
+ 383: aload 10
+ 385: invokevirtual #474 // Method com/google/gson/JsonObject.add:(Ljava/lang/String;Lcom/google/gson/JsonElement;)V
+ 388: aload 4
+ 390: ldc_w #384 // String per_player
+ 393: iload_1
+ 394: invokestatic #405 // Method java/lang/Boolean.valueOf:(Z)Ljava/lang/Boolean;
+ 397: invokevirtual #408 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/Boolean;)V
+ 400: aload 4
+ 402: ldc_w #746 // String allow_duplicates
+ 405: iconst_1
+ 406: invokestatic #405 // Method java/lang/Boolean.valueOf:(Z)Ljava/lang/Boolean;
+ 409: invokevirtual #408 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/Boolean;)V
+ 412: aload 4
+ 414: ldc_w #748 // String clear_before_generate
+ 417: iconst_0
+ 418: invokestatic #405 // Method java/lang/Boolean.valueOf:(Z)Ljava/lang/Boolean;
+ 421: invokevirtual #408 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/Boolean;)V
+ 424: aload 4
+ 426: ldc_w #456 // String loot_tables
+ 429: new #469 // class com/google/gson/JsonArray
+ 432: dup
+ 433: invokespecial #470 // Method com/google/gson/JsonArray."":()V
+ 436: invokevirtual #474 // Method com/google/gson/JsonObject.add:(Ljava/lang/String;Lcom/google/gson/JsonElement;)V
+ 439: aload 4
+ 441: ldc_w #621 // String entries
+ 444: new #469 // class com/google/gson/JsonArray
+ 447: dup
+ 448: invokespecial #470 // Method com/google/gson/JsonArray."":()V
+ 451: invokevirtual #474 // Method com/google/gson/JsonObject.add:(Ljava/lang/String;Lcom/google/gson/JsonElement;)V
+ 454: aload 4
+ 456: areturn
+
+ private static boolean writeConfigIfMissing(java.lang.String, com.google.gson.JsonObject);
+ Code:
+ 0: invokestatic #66 // Method getLootCrateConfigDirectory:()Ljava/nio/file/Path;
+ 3: astore_2
+ 4: aload_2
+ 5: aload_0
+ 6: invokedynamic #284, 0 // InvokeDynamic #4:makeConcatWithConstants:(Ljava/lang/String;)Ljava/lang/String;
+ 11: invokeinterface #288, 2 // InterfaceMethod java/nio/file/Path.resolve:(Ljava/lang/String;)Ljava/nio/file/Path;
+ 16: astore_3
+ 17: aload_3
+ 18: iconst_0
+ 19: anewarray #68 // class java/nio/file/LinkOption
+ 22: invokestatic #291 // Method java/nio/file/Files.exists:(Ljava/nio/file/Path;[Ljava/nio/file/LinkOption;)Z
+ 25: ifeq 30
+ 28: iconst_0
+ 29: ireturn
+ 30: aload_2
+ 31: iconst_0
+ 32: anewarray #76 // class java/nio/file/attribute/FileAttribute
+ 35: invokestatic #80 // Method java/nio/file/Files.createDirectories:(Ljava/nio/file/Path;[Ljava/nio/file/attribute/FileAttribute;)Ljava/nio/file/Path;
+ 38: pop
+ 39: aload_3
+ 40: aload_1
+ 41: invokestatic #299 // Method writeConfigObject:(Ljava/nio/file/Path;Lcom/google/gson/JsonObject;)V
+ 44: invokestatic #301 // Method reload:()V
+ 47: iconst_1
+ 48: ireturn
+ 49: astore 4
+ 51: getstatic #92 // Field com/ogaba/sa_decor/SADecor.LOGGER:Lorg/slf4j/Logger;
+ 54: ldc_w #933 // String Could not write loot config \'{}\' at {}.
+ 57: iconst_3
+ 58: anewarray #4 // class java/lang/Object
+ 61: dup
+ 62: iconst_0
+ 63: aload_0
+ 64: aastore
+ 65: dup
+ 66: iconst_1
+ 67: aload_3
+ 68: aastore
+ 69: dup
+ 70: iconst_2
+ 71: aload 4
+ 73: aastore
+ 74: invokeinterface #308, 3 // InterfaceMethod org/slf4j/Logger.warn:(Ljava/lang/String;[Ljava/lang/Object;)V
+ 79: iconst_0
+ 80: ireturn
+ Exception table:
+ from to target type
+ 30 48 49 Class java/io/IOException
+
+ private static com.google.gson.JsonObject createPresetJson(java.lang.String);
+ Code:
+ 0: aload_0
+ 1: invokestatic #936 // Method com/ogaba/sa_decor/common/loot/DecorLootDefaultProfiles.createPresetJson:(Ljava/lang/String;)Lcom/google/gson/JsonObject;
+ 4: areturn
+
+ private static com.google.gson.JsonObject createPresetWithEntries(java.lang.String, boolean, boolean, boolean, java.lang.String[][]);
+ Code:
+ 0: aload_0
+ 1: iload_1
+ 2: iload_2
+ 3: iload_3
+ 4: invokestatic #295 // Method createEmptyConfigJson:(Ljava/lang/String;ZZZ)Lcom/google/gson/JsonObject;
+ 7: astore 5
+ 9: aload 5
+ 11: ldc_w #621 // String entries
+ 14: invokevirtual #467 // Method com/google/gson/JsonObject.getAsJsonArray:(Ljava/lang/String;)Lcom/google/gson/JsonArray;
+ 17: astore 6
+ 19: aload 4
+ 21: astore 7
+ 23: aload 7
+ 25: arraylength
+ 26: istore 8
+ 28: iconst_0
+ 29: istore 9
+ 31: iload 9
+ 33: iload 8
+ 35: if_icmpge 170
+ 38: aload 7
+ 40: iload 9
+ 42: aaload
+ 43: astore 10
+ 45: new #303 // class com/google/gson/JsonObject
+ 48: dup
+ 49: invokespecial #622 // Method com/google/gson/JsonObject."":()V
+ 52: astore 11
+ 54: aload 11
+ 56: ldc_w #636 // String item
+ 59: aload 10
+ 61: iconst_0
+ 62: aaload
+ 63: invokevirtual #352 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/String;)V
+ 66: aload 11
+ 68: ldc_w #637 // String weight
+ 71: aload 10
+ 73: iconst_1
+ 74: aaload
+ 75: invokestatic #944 // Method java/lang/Integer.parseInt:(Ljava/lang/String;)I
+ 78: invokestatic #199 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
+ 81: invokevirtual #419 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/Number;)V
+ 84: aload 11
+ 86: ldc_w #638 // String chance
+ 89: aload 10
+ 91: iconst_4
+ 92: aaload
+ 93: invokestatic #948 // Method java/lang/Float.parseFloat:(Ljava/lang/String;)F
+ 96: invokestatic #445 // Method java/lang/Float.valueOf:(F)Ljava/lang/Float;
+ 99: invokevirtual #419 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/Number;)V
+ 102: new #303 // class com/google/gson/JsonObject
+ 105: dup
+ 106: invokespecial #622 // Method com/google/gson/JsonObject."":()V
+ 109: astore 12
+ 111: aload 12
+ 113: ldc_w #641 // String min
+ 116: aload 10
+ 118: iconst_2
+ 119: aaload
+ 120: invokestatic #944 // Method java/lang/Integer.parseInt:(Ljava/lang/String;)I
+ 123: invokestatic #199 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
+ 126: invokevirtual #419 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/Number;)V
+ 129: aload 12
+ 131: ldc_w #644 // String max
+ 134: aload 10
+ 136: iconst_3
+ 137: aaload
+ 138: invokestatic #944 // Method java/lang/Integer.parseInt:(Ljava/lang/String;)I
+ 141: invokestatic #199 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
+ 144: invokevirtual #419 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/Number;)V
+ 147: aload 11
+ 149: ldc_w #646 // String count
+ 152: aload 12
+ 154: invokevirtual #474 // Method com/google/gson/JsonObject.add:(Ljava/lang/String;Lcom/google/gson/JsonElement;)V
+ 157: aload 6
+ 159: aload 11
+ 161: invokevirtual #649 // Method com/google/gson/JsonArray.add:(Lcom/google/gson/JsonElement;)V
+ 164: iinc 9, 1
+ 167: goto 31
+ 170: aload 5
+ 172: areturn
+
+ private static com.google.gson.JsonObject readConfigObject(java.nio.file.Path) throws java.io.IOException;
+ Code:
+ 0: aload_0
+ 1: invokestatic #335 // Method java/nio/file/Files.newBufferedReader:(Ljava/nio/file/Path;)Ljava/io/BufferedReader;
+ 4: astore_1
+ 5: aload_1
+ 6: invokestatic #341 // Method com/google/gson/JsonParser.parseReader:(Ljava/io/Reader;)Lcom/google/gson/JsonElement;
+ 9: invokevirtual #347 // Method com/google/gson/JsonElement.getAsJsonObject:()Lcom/google/gson/JsonObject;
+ 12: astore_2
+ 13: aload_1
+ 14: ifnull 21
+ 17: aload_1
+ 18: invokevirtual #358 // Method java/io/Reader.close:()V
+ 21: aload_2
+ 22: areturn
+ 23: astore_2
+ 24: aload_1
+ 25: ifnull 41
+ 28: aload_1
+ 29: invokevirtual #358 // Method java/io/Reader.close:()V
+ 32: goto 41
+ 35: astore_3
+ 36: aload_2
+ 37: aload_3
+ 38: invokevirtual #185 // Method java/lang/Throwable.addSuppressed:(Ljava/lang/Throwable;)V
+ 41: aload_2
+ 42: athrow
+ Exception table:
+ from to target type
+ 5 13 23 Class java/lang/Throwable
+ 28 32 35 Class java/lang/Throwable
+
+ private static synchronized void writeConfigObject(java.nio.file.Path, com.google.gson.JsonObject) throws java.io.IOException;
+ Code:
+ 0: aload_0
+ 1: invokeinterface #355, 1 // InterfaceMethod java/nio/file/Path.getParent:()Ljava/nio/file/Path;
+ 6: iconst_0
+ 7: anewarray #76 // class java/nio/file/attribute/FileAttribute
+ 10: invokestatic #80 // Method java/nio/file/Files.createDirectories:(Ljava/nio/file/Path;[Ljava/nio/file/attribute/FileAttribute;)Ljava/nio/file/Path;
+ 13: pop
+ 14: aload_0
+ 15: aload_0
+ 16: invokeinterface #956, 1 // InterfaceMethod java/nio/file/Path.getFileName:()Ljava/nio/file/Path;
+ 21: invokeinterface #957, 1 // InterfaceMethod java/nio/file/Path.toString:()Ljava/lang/String;
+ 26: invokedynamic #960, 0 // InvokeDynamic #12:makeConcatWithConstants:(Ljava/lang/String;)Ljava/lang/String;
+ 31: invokeinterface #963, 2 // InterfaceMethod java/nio/file/Path.resolveSibling:(Ljava/lang/String;)Ljava/nio/file/Path;
+ 36: astore_2
+ 37: aload_2
+ 38: iconst_0
+ 39: anewarray #965 // class java/nio/file/OpenOption
+ 42: invokestatic #969 // Method java/nio/file/Files.newBufferedWriter:(Ljava/nio/file/Path;[Ljava/nio/file/OpenOption;)Ljava/io/BufferedWriter;
+ 45: astore_3
+ 46: aload_3
+ 47: aload_1
+ 48: invokestatic #973 // Method toFriendlyConfigJson:(Lcom/google/gson/JsonObject;)Ljava/lang/String;
+ 51: invokevirtual #978 // Method java/io/Writer.write:(Ljava/lang/String;)V
+ 54: aload_3
+ 55: ifnull 90
+ 58: aload_3
+ 59: invokevirtual #979 // Method java/io/Writer.close:()V
+ 62: goto 90
+ 65: astore 4
+ 67: aload_3
+ 68: ifnull 87
+ 71: aload_3
+ 72: invokevirtual #979 // Method java/io/Writer.close:()V
+ 75: goto 87
+ 78: astore 5
+ 80: aload 4
+ 82: aload 5
+ 84: invokevirtual #185 // Method java/lang/Throwable.addSuppressed:(Ljava/lang/Throwable;)V
+ 87: aload 4
+ 89: athrow
+ 90: aload_2
+ 91: aload_0
+ 92: iconst_2
+ 93: anewarray #981 // class java/nio/file/CopyOption
+ 96: dup
+ 97: iconst_0
+ 98: getstatic #987 // Field java/nio/file/StandardCopyOption.ATOMIC_MOVE:Ljava/nio/file/StandardCopyOption;
+ 101: aastore
+ 102: dup
+ 103: iconst_1
+ 104: getstatic #990 // Field java/nio/file/StandardCopyOption.REPLACE_EXISTING:Ljava/nio/file/StandardCopyOption;
+ 107: aastore
+ 108: invokestatic #994 // Method java/nio/file/Files.move:(Ljava/nio/file/Path;Ljava/nio/file/Path;[Ljava/nio/file/CopyOption;)Ljava/nio/file/Path;
+ 111: pop
+ 112: aload_2
+ 113: invokestatic #881 // Method java/nio/file/Files.deleteIfExists:(Ljava/nio/file/Path;)Z
+ 116: pop
+ 117: goto 155
+ 120: astore_3
+ 121: aload_2
+ 122: aload_0
+ 123: iconst_1
+ 124: anewarray #981 // class java/nio/file/CopyOption
+ 127: dup
+ 128: iconst_0
+ 129: getstatic #990 // Field java/nio/file/StandardCopyOption.REPLACE_EXISTING:Ljava/nio/file/StandardCopyOption;
+ 132: aastore
+ 133: invokestatic #994 // Method java/nio/file/Files.move:(Ljava/nio/file/Path;Ljava/nio/file/Path;[Ljava/nio/file/CopyOption;)Ljava/nio/file/Path;
+ 136: pop
+ 137: aload_2
+ 138: invokestatic #881 // Method java/nio/file/Files.deleteIfExists:(Ljava/nio/file/Path;)Z
+ 141: pop
+ 142: goto 155
+ 145: astore 6
+ 147: aload_2
+ 148: invokestatic #881 // Method java/nio/file/Files.deleteIfExists:(Ljava/nio/file/Path;)Z
+ 151: pop
+ 152: aload 6
+ 154: athrow
+ 155: return
+ Exception table:
+ from to target type
+ 46 54 65 Class java/lang/Throwable
+ 71 75 78 Class java/lang/Throwable
+ 90 112 120 Class java/nio/file/AtomicMoveNotSupportedException
+ 90 112 145 any
+ 120 137 145 any
+ 145 147 145 any
+
+ private static java.lang.String toFriendlyConfigJson(com.google.gson.JsonObject);
+ Code:
+ 0: getstatic #1001 // Field GSON:Lcom/google/gson/Gson;
+ 3: aload_0
+ 4: invokestatic #1005 // Method compactLootConfig:(Lcom/google/gson/JsonObject;)Lcom/google/gson/JsonObject;
+ 7: invokestatic #1009 // Method normalizeNumbers:(Lcom/google/gson/JsonElement;)Lcom/google/gson/JsonElement;
+ 10: invokevirtual #1015 // Method com/google/gson/Gson.toJson:(Lcom/google/gson/JsonElement;)Ljava/lang/String;
+ 13: invokedynamic #1018, 0 // InvokeDynamic #13:makeConcatWithConstants:(Ljava/lang/String;)Ljava/lang/String;
+ 18: areturn
+
+ private static com.google.gson.JsonObject compactLootConfig(com.google.gson.JsonObject);
+ Code:
+ 0: new #303 // class com/google/gson/JsonObject
+ 3: dup
+ 4: invokespecial #622 // Method com/google/gson/JsonObject."":()V
+ 7: astore_1
+ 8: aload_0
+ 9: ldc_w #348 // String id
+ 12: ldc_w #624 // String
+ 15: invokestatic #796 // Method getString:(Lcom/google/gson/JsonObject;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+ 18: astore_2
+ 19: aload_1
+ 20: ldc_w #348 // String id
+ 23: aload_2
+ 24: invokevirtual #352 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/String;)V
+ 27: aload_1
+ 28: ldc_w #511 // String display_name
+ 31: aload_0
+ 32: ldc_w #511 // String display_name
+ 35: aload_2
+ 36: invokestatic #796 // Method getString:(Lcom/google/gson/JsonObject;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+ 39: invokevirtual #352 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/String;)V
+ 42: aload_1
+ 43: ldc_w #742 // String description
+ 46: aload_0
+ 47: ldc_w #742 // String description
+ 50: ldc_w #624 // String
+ 53: invokestatic #796 // Method getString:(Lcom/google/gson/JsonObject;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+ 56: invokevirtual #352 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/String;)V
+ 59: new #303 // class com/google/gson/JsonObject
+ 62: dup
+ 63: invokespecial #622 // Method com/google/gson/JsonObject."":()V
+ 66: astore_3
+ 67: aload_0
+ 68: ldc_w #744 // String rolls
+ 71: invokestatic #1021 // Method getObject:(Lcom/google/gson/JsonObject;Ljava/lang/String;)Lcom/google/gson/JsonObject;
+ 74: astore 4
+ 76: aload_3
+ 77: ldc_w #641 // String min
+ 80: iconst_0
+ 81: aload 4
+ 83: ldc_w #641 // String min
+ 86: iconst_1
+ 87: invokestatic #1025 // Method getInt:(Lcom/google/gson/JsonObject;Ljava/lang/String;I)I
+ 90: invokestatic #416 // Method java/lang/Math.max:(II)I
+ 93: invokestatic #199 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
+ 96: invokevirtual #419 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/Number;)V
+ 99: aload_3
+ 100: ldc_w #644 // String max
+ 103: iconst_0
+ 104: aload 4
+ 106: ldc_w #644 // String max
+ 109: iconst_3
+ 110: invokestatic #1025 // Method getInt:(Lcom/google/gson/JsonObject;Ljava/lang/String;I)I
+ 113: invokestatic #416 // Method java/lang/Math.max:(II)I
+ 116: invokestatic #199 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
+ 119: invokevirtual #419 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/Number;)V
+ 122: aload_1
+ 123: ldc_w #744 // String rolls
+ 126: aload_3
+ 127: invokevirtual #474 // Method com/google/gson/JsonObject.add:(Ljava/lang/String;Lcom/google/gson/JsonElement;)V
+ 130: new #303 // class com/google/gson/JsonObject
+ 133: dup
+ 134: invokespecial #622 // Method com/google/gson/JsonObject."":()V
+ 137: astore 5
+ 139: aload 5
+ 141: ldc_w #373 // String enabled
+ 144: aload_0
+ 145: invokestatic #1029 // Method getSearchEnabled:(Lcom/google/gson/JsonObject;)Z
+ 148: invokestatic #405 // Method java/lang/Boolean.valueOf:(Z)Ljava/lang/Boolean;
+ 151: invokevirtual #408 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/Boolean;)V
+ 154: aload_1
+ 155: ldc_w #371 // String search
+ 158: aload 5
+ 160: invokevirtual #474 // Method com/google/gson/JsonObject.add:(Ljava/lang/String;Lcom/google/gson/JsonElement;)V
+ 163: aload_0
+ 164: ldc_w #381 // String lock
+ 167: invokestatic #1021 // Method getObject:(Lcom/google/gson/JsonObject;Ljava/lang/String;)Lcom/google/gson/JsonObject;
+ 170: astore 6
+ 172: aload 6
+ 174: ldc_w #373 // String enabled
+ 177: iconst_0
+ 178: invokestatic #1033 // Method getBoolean:(Lcom/google/gson/JsonObject;Ljava/lang/String;Z)Z
+ 181: istore 7
+ 183: new #303 // class com/google/gson/JsonObject
+ 186: dup
+ 187: invokespecial #622 // Method com/google/gson/JsonObject."":()V
+ 190: astore 8
+ 192: aload 8
+ 194: ldc_w #373 // String enabled
+ 197: iload 7
+ 199: invokestatic #405 // Method java/lang/Boolean.valueOf:(Z)Ljava/lang/Boolean;
+ 202: invokevirtual #408 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/Boolean;)V
+ 205: aload 8
+ 207: ldc_w #434 // String spawn_chance
+ 210: aload 6
+ 212: ldc_w #434 // String spawn_chance
+ 215: dconst_0
+ 216: invokestatic #1037 // Method getDouble:(Lcom/google/gson/JsonObject;Ljava/lang/String;D)D
+ 219: invokestatic #1041 // Method clamp01:(D)D
+ 222: invokestatic #1046 // Method java/lang/Double.valueOf:(D)Ljava/lang/Double;
+ 225: invokevirtual #419 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/Number;)V
+ 228: aload 8
+ 230: ldc_w #750 // String lockpick
+ 233: aload 6
+ 235: ldc_w #750 // String lockpick
+ 238: iconst_1
+ 239: invokestatic #1033 // Method getBoolean:(Lcom/google/gson/JsonObject;Ljava/lang/String;Z)Z
+ 242: invokestatic #405 // Method java/lang/Boolean.valueOf:(Z)Ljava/lang/Boolean;
+ 245: invokevirtual #408 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/Boolean;)V
+ 248: aload 6
+ 250: ifnull 284
+ 253: aload 6
+ 255: ldc_w #1048 // String consume_lockpick_on_fail
+ 258: invokevirtual #457 // Method com/google/gson/JsonObject.has:(Ljava/lang/String;)Z
+ 261: ifeq 284
+ 264: aload 8
+ 266: ldc_w #1048 // String consume_lockpick_on_fail
+ 269: aload 6
+ 271: ldc_w #1048 // String consume_lockpick_on_fail
+ 274: iconst_0
+ 275: invokestatic #1033 // Method getBoolean:(Lcom/google/gson/JsonObject;Ljava/lang/String;Z)Z
+ 278: invokestatic #405 // Method java/lang/Boolean.valueOf:(Z)Ljava/lang/Boolean;
+ 281: invokevirtual #408 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/Boolean;)V
+ 284: aload 6
+ 286: ifnull 324
+ 289: aload 6
+ 291: ldc_w #1050 // String damage_lockpick_on_success
+ 294: invokevirtual #457 // Method com/google/gson/JsonObject.has:(Ljava/lang/String;)Z
+ 297: ifeq 324
+ 300: aload 8
+ 302: ldc_w #1050 // String damage_lockpick_on_success
+ 305: iconst_0
+ 306: aload 6
+ 308: ldc_w #1050 // String damage_lockpick_on_success
+ 311: iconst_1
+ 312: invokestatic #1025 // Method getInt:(Lcom/google/gson/JsonObject;Ljava/lang/String;I)I
+ 315: invokestatic #416 // Method java/lang/Math.max:(II)I
+ 318: invokestatic #199 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
+ 321: invokevirtual #419 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/Number;)V
+ 324: aload 6
+ 326: ifnull 365
+ 329: aload 6
+ 331: ldc_w #1052 // String damage_lockpick_on_fail
+ 334: invokevirtual #457 // Method com/google/gson/JsonObject.has:(Ljava/lang/String;)Z
+ 337: ifeq 365
+ 340: aload 8
+ 342: ldc_w #1052 // String damage_lockpick_on_fail
+ 345: iconst_0
+ 346: aload 6
+ 348: ldc_w #1052 // String damage_lockpick_on_fail
+ 351: bipush 8
+ 353: invokestatic #1025 // Method getInt:(Lcom/google/gson/JsonObject;Ljava/lang/String;I)I
+ 356: invokestatic #416 // Method java/lang/Math.max:(II)I
+ 359: invokestatic #199 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
+ 362: invokevirtual #419 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/Number;)V
+ 365: aload_1
+ 366: ldc_w #381 // String lock
+ 369: aload 8
+ 371: invokevirtual #474 // Method com/google/gson/JsonObject.add:(Ljava/lang/String;Lcom/google/gson/JsonElement;)V
+ 374: aload_0
+ 375: ldc_w #432 // String empty
+ 378: invokestatic #1021 // Method getObject:(Lcom/google/gson/JsonObject;Ljava/lang/String;)Lcom/google/gson/JsonObject;
+ 381: astore 9
+ 383: aload_0
+ 384: ldc_w #432 // String empty
+ 387: invokevirtual #460 // Method com/google/gson/JsonObject.get:(Ljava/lang/String;)Lcom/google/gson/JsonElement;
+ 390: astore 10
+ 392: aload 9
+ 394: ldc_w #373 // String enabled
+ 397: iconst_0
+ 398: invokestatic #1033 // Method getBoolean:(Lcom/google/gson/JsonObject;Ljava/lang/String;Z)Z
+ 401: istore 11
+ 403: aload 10
+ 405: ifnull 438
+ 408: aload 10
+ 410: invokevirtual #1055 // Method com/google/gson/JsonElement.isJsonPrimitive:()Z
+ 413: ifeq 438
+ 416: aload 10
+ 418: invokevirtual #1059 // Method com/google/gson/JsonElement.getAsJsonPrimitive:()Lcom/google/gson/JsonPrimitive;
+ 421: invokevirtual #1064 // Method com/google/gson/JsonPrimitive.isNumber:()Z
+ 424: ifeq 438
+ 427: aload 10
+ 429: invokevirtual #1068 // Method com/google/gson/JsonElement.getAsDouble:()D
+ 432: invokestatic #1041 // Method clamp01:(D)D
+ 435: goto 450
+ 438: aload 9
+ 440: ldc_w #434 // String spawn_chance
+ 443: dconst_0
+ 444: invokestatic #1037 // Method getDouble:(Lcom/google/gson/JsonObject;Ljava/lang/String;D)D
+ 447: invokestatic #1041 // Method clamp01:(D)D
+ 450: dstore 12
+ 452: new #303 // class com/google/gson/JsonObject
+ 455: dup
+ 456: invokespecial #622 // Method com/google/gson/JsonObject."":()V
+ 459: astore 14
+ 461: aload 14
+ 463: ldc_w #373 // String enabled
+ 466: iload 11
+ 468: invokestatic #405 // Method java/lang/Boolean.valueOf:(Z)Ljava/lang/Boolean;
+ 471: invokevirtual #408 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/Boolean;)V
+ 474: aload 14
+ 476: ldc_w #434 // String spawn_chance
+ 479: dload 12
+ 481: invokestatic #1046 // Method java/lang/Double.valueOf:(D)Ljava/lang/Double;
+ 484: invokevirtual #419 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/Number;)V
+ 487: aload_1
+ 488: ldc_w #432 // String empty
+ 491: aload 14
+ 493: invokevirtual #474 // Method com/google/gson/JsonObject.add:(Ljava/lang/String;Lcom/google/gson/JsonElement;)V
+ 496: aload_0
+ 497: ldc_w #752 // String open_pass
+ 500: invokestatic #1021 // Method getObject:(Lcom/google/gson/JsonObject;Ljava/lang/String;)Lcom/google/gson/JsonObject;
+ 503: astore 15
+ 505: new #303 // class com/google/gson/JsonObject
+ 508: dup
+ 509: invokespecial #622 // Method com/google/gson/JsonObject."":()V
+ 512: astore 16
+ 514: aload 16
+ 516: ldc_w #373 // String enabled
+ 519: aload 15
+ 521: ldc_w #373 // String enabled
+ 524: iconst_0
+ 525: invokestatic #1033 // Method getBoolean:(Lcom/google/gson/JsonObject;Ljava/lang/String;Z)Z
+ 528: invokestatic #405 // Method java/lang/Boolean.valueOf:(Z)Ljava/lang/Boolean;
+ 531: invokevirtual #408 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/Boolean;)V
+ 534: aload 16
+ 536: ldc_w #754 // String amount
+ 539: iconst_1
+ 540: aload 15
+ 542: ldc_w #754 // String amount
+ 545: iconst_1
+ 546: invokestatic #1025 // Method getInt:(Lcom/google/gson/JsonObject;Ljava/lang/String;I)I
+ 549: invokestatic #416 // Method java/lang/Math.max:(II)I
+ 552: invokestatic #199 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
+ 555: invokevirtual #419 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/Number;)V
+ 558: aload 16
+ 560: ldc_w #756 // String consume
+ 563: aload 15
+ 565: ldc_w #756 // String consume
+ 568: iconst_1
+ 569: invokestatic #1033 // Method getBoolean:(Lcom/google/gson/JsonObject;Ljava/lang/String;Z)Z
+ 572: invokestatic #405 // Method java/lang/Boolean.valueOf:(Z)Ljava/lang/Boolean;
+ 575: invokevirtual #408 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/Boolean;)V
+ 578: aload 16
+ 580: ldc_w #758 // String bypass_lock
+ 583: aload 15
+ 585: ldc_w #758 // String bypass_lock
+ 588: iconst_1
+ 589: invokestatic #1033 // Method getBoolean:(Lcom/google/gson/JsonObject;Ljava/lang/String;Z)Z
+ 592: invokestatic #405 // Method java/lang/Boolean.valueOf:(Z)Ljava/lang/Boolean;
+ 595: invokevirtual #408 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/Boolean;)V
+ 598: aload 16
+ 600: ldc_w #760 // String bypass_search
+ 603: aload 15
+ 605: ldc_w #760 // String bypass_search
+ 608: iconst_1
+ 609: invokestatic #1033 // Method getBoolean:(Lcom/google/gson/JsonObject;Ljava/lang/String;Z)Z
+ 612: invokestatic #405 // Method java/lang/Boolean.valueOf:(Z)Ljava/lang/Boolean;
+ 615: invokevirtual #408 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/Boolean;)V
+ 618: aload 15
+ 620: ifnull 654
+ 623: aload 15
+ 625: ldc_w #1070 // String consume_in_creative
+ 628: invokevirtual #457 // Method com/google/gson/JsonObject.has:(Ljava/lang/String;)Z
+ 631: ifeq 654
+ 634: aload 16
+ 636: ldc_w #1070 // String consume_in_creative
+ 639: aload 15
+ 641: ldc_w #1070 // String consume_in_creative
+ 644: iconst_0
+ 645: invokestatic #1033 // Method getBoolean:(Lcom/google/gson/JsonObject;Ljava/lang/String;Z)Z
+ 648: invokestatic #405 // Method java/lang/Boolean.valueOf:(Z)Ljava/lang/Boolean;
+ 651: invokevirtual #408 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/Boolean;)V
+ 654: new #469 // class com/google/gson/JsonArray
+ 657: dup
+ 658: invokespecial #470 // Method com/google/gson/JsonArray."":()V
+ 661: astore 17
+ 663: aload 17
+ 665: aload 15
+ 667: ifnonnull 674
+ 670: aconst_null
+ 671: goto 682
+ 674: aload 15
+ 676: ldc_w #636 // String item
+ 679: invokevirtual #460 // Method com/google/gson/JsonObject.get:(Ljava/lang/String;)Lcom/google/gson/JsonElement;
+ 682: invokestatic #1074 // Method appendStrings:(Lcom/google/gson/JsonArray;Lcom/google/gson/JsonElement;)V
+ 685: aload 17
+ 687: aload 15
+ 689: ifnonnull 696
+ 692: aconst_null
+ 693: goto 704
+ 696: aload 15
+ 698: ldc_w #762 // String items
+ 701: invokevirtual #460 // Method com/google/gson/JsonObject.get:(Ljava/lang/String;)Lcom/google/gson/JsonElement;
+ 704: invokestatic #1074 // Method appendStrings:(Lcom/google/gson/JsonArray;Lcom/google/gson/JsonElement;)V
+ 707: aload 17
+ 709: aload 15
+ 711: ifnonnull 718
+ 714: aconst_null
+ 715: goto 726
+ 718: aload 15
+ 720: ldc_w #1075 // String match
+ 723: invokevirtual #460 // Method com/google/gson/JsonObject.get:(Ljava/lang/String;)Lcom/google/gson/JsonElement;
+ 726: invokestatic #1074 // Method appendStrings:(Lcom/google/gson/JsonArray;Lcom/google/gson/JsonElement;)V
+ 729: aload 17
+ 731: aload 15
+ 733: ifnonnull 740
+ 736: aconst_null
+ 737: goto 748
+ 740: aload 15
+ 742: ldc_w #1076 // String matches
+ 745: invokevirtual #460 // Method com/google/gson/JsonObject.get:(Ljava/lang/String;)Lcom/google/gson/JsonElement;
+ 748: invokestatic #1074 // Method appendStrings:(Lcom/google/gson/JsonArray;Lcom/google/gson/JsonElement;)V
+ 751: aload 16
+ 753: ldc_w #762 // String items
+ 756: aload 17
+ 758: invokevirtual #474 // Method com/google/gson/JsonObject.add:(Ljava/lang/String;Lcom/google/gson/JsonElement;)V
+ 761: new #469 // class com/google/gson/JsonArray
+ 764: dup
+ 765: invokespecial #470 // Method com/google/gson/JsonArray."":()V
+ 768: astore 18
+ 770: aload 18
+ 772: aload 15
+ 774: ifnonnull 781
+ 777: aconst_null
+ 778: goto 789
+ 781: aload 15
+ 783: ldc_w #630 // String tag
+ 786: invokevirtual #460 // Method com/google/gson/JsonObject.get:(Ljava/lang/String;)Lcom/google/gson/JsonElement;
+ 789: invokestatic #1074 // Method appendStrings:(Lcom/google/gson/JsonArray;Lcom/google/gson/JsonElement;)V
+ 792: aload 18
+ 794: aload 15
+ 796: ifnonnull 803
+ 799: aconst_null
+ 800: goto 811
+ 803: aload 15
+ 805: ldc_w #764 // String tags
+ 808: invokevirtual #460 // Method com/google/gson/JsonObject.get:(Ljava/lang/String;)Lcom/google/gson/JsonElement;
+ 811: invokestatic #1074 // Method appendStrings:(Lcom/google/gson/JsonArray;Lcom/google/gson/JsonElement;)V
+ 814: aload 16
+ 816: ldc_w #764 // String tags
+ 819: aload 18
+ 821: invokevirtual #474 // Method com/google/gson/JsonObject.add:(Ljava/lang/String;Lcom/google/gson/JsonElement;)V
+ 824: aload_1
+ 825: ldc_w #752 // String open_pass
+ 828: aload 16
+ 830: invokevirtual #474 // Method com/google/gson/JsonObject.add:(Ljava/lang/String;Lcom/google/gson/JsonElement;)V
+ 833: aload_0
+ 834: ldc_w #396 // String respawn
+ 837: invokestatic #1021 // Method getObject:(Lcom/google/gson/JsonObject;Ljava/lang/String;)Lcom/google/gson/JsonObject;
+ 840: astore 19
+ 842: new #303 // class com/google/gson/JsonObject
+ 845: dup
+ 846: invokespecial #622 // Method com/google/gson/JsonObject."":()V
+ 849: astore 20
+ 851: aload 20
+ 853: ldc_w #373 // String enabled
+ 856: aload 19
+ 858: ldc_w #373 // String enabled
+ 861: iconst_0
+ 862: invokestatic #1033 // Method getBoolean:(Lcom/google/gson/JsonObject;Ljava/lang/String;Z)Z
+ 865: invokestatic #405 // Method java/lang/Boolean.valueOf:(Z)Ljava/lang/Boolean;
+ 868: invokevirtual #408 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/Boolean;)V
+ 871: aload 20
+ 873: ldc_w #410 // String time_ticks
+ 876: lconst_1
+ 877: aload 19
+ 879: ldc_w #410 // String time_ticks
+ 882: ldc2_w #1077 // long 24000l
+ 885: invokestatic #1082 // Method getLong:(Lcom/google/gson/JsonObject;Ljava/lang/String;J)J
+ 888: invokestatic #1085 // Method java/lang/Math.max:(JJ)J
+ 891: invokestatic #1090 // Method java/lang/Long.valueOf:(J)Ljava/lang/Long;
+ 894: invokevirtual #419 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/Number;)V
+ 897: aload 20
+ 899: ldc_w #421 // String only_if_empty
+ 902: aload 19
+ 904: ldc_w #421 // String only_if_empty
+ 907: iconst_1
+ 908: invokestatic #1033 // Method getBoolean:(Lcom/google/gson/JsonObject;Ljava/lang/String;Z)Z
+ 911: invokestatic #405 // Method java/lang/Boolean.valueOf:(Z)Ljava/lang/Boolean;
+ 914: invokevirtual #408 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/Boolean;)V
+ 917: aload 20
+ 919: ldc_w #423 // String clear_before_respawn
+ 922: iconst_1
+ 923: invokestatic #405 // Method java/lang/Boolean.valueOf:(Z)Ljava/lang/Boolean;
+ 926: invokevirtual #408 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/Boolean;)V
+ 929: aload_1
+ 930: ldc_w #396 // String respawn
+ 933: aload 20
+ 935: invokevirtual #474 // Method com/google/gson/JsonObject.add:(Ljava/lang/String;Lcom/google/gson/JsonElement;)V
+ 938: aload_1
+ 939: ldc_w #384 // String per_player
+ 942: aload_0
+ 943: ldc_w #384 // String per_player
+ 946: iconst_0
+ 947: invokestatic #1033 // Method getBoolean:(Lcom/google/gson/JsonObject;Ljava/lang/String;Z)Z
+ 950: invokestatic #405 // Method java/lang/Boolean.valueOf:(Z)Ljava/lang/Boolean;
+ 953: invokevirtual #408 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/Boolean;)V
+ 956: aload_1
+ 957: ldc_w #746 // String allow_duplicates
+ 960: aload_0
+ 961: ldc_w #746 // String allow_duplicates
+ 964: iconst_1
+ 965: invokestatic #1033 // Method getBoolean:(Lcom/google/gson/JsonObject;Ljava/lang/String;Z)Z
+ 968: invokestatic #405 // Method java/lang/Boolean.valueOf:(Z)Ljava/lang/Boolean;
+ 971: invokevirtual #408 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/Boolean;)V
+ 974: aload_1
+ 975: ldc_w #748 // String clear_before_generate
+ 978: aload_0
+ 979: ldc_w #748 // String clear_before_generate
+ 982: iconst_0
+ 983: invokestatic #1033 // Method getBoolean:(Lcom/google/gson/JsonObject;Ljava/lang/String;Z)Z
+ 986: invokestatic #405 // Method java/lang/Boolean.valueOf:(Z)Ljava/lang/Boolean;
+ 989: invokevirtual #408 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/Boolean;)V
+ 992: aload_0
+ 993: ldc_w #456 // String loot_tables
+ 996: invokevirtual #460 // Method com/google/gson/JsonObject.get:(Ljava/lang/String;)Lcom/google/gson/JsonElement;
+ 999: invokestatic #1094 // Method compactStringArray:(Lcom/google/gson/JsonElement;)Lcom/google/gson/JsonArray;
+ 1002: astore 21
+ 1004: aload 21
+ 1006: aload_0
+ 1007: ldc_w #1096 // String loot_table
+ 1010: invokevirtual #460 // Method com/google/gson/JsonObject.get:(Ljava/lang/String;)Lcom/google/gson/JsonElement;
+ 1013: invokestatic #1074 // Method appendStrings:(Lcom/google/gson/JsonArray;Lcom/google/gson/JsonElement;)V
+ 1016: aload_1
+ 1017: ldc_w #456 // String loot_tables
+ 1020: aload 21
+ 1022: invokevirtual #474 // Method com/google/gson/JsonObject.add:(Ljava/lang/String;Lcom/google/gson/JsonElement;)V
+ 1025: aload_0
+ 1026: ldc_w #621 // String entries
+ 1029: invokevirtual #460 // Method com/google/gson/JsonObject.get:(Ljava/lang/String;)Lcom/google/gson/JsonElement;
+ 1032: astore 22
+ 1034: aload 22
+ 1036: ifnull 1055
+ 1039: aload 22
+ 1041: invokevirtual #463 // Method com/google/gson/JsonElement.isJsonArray:()Z
+ 1044: ifeq 1055
+ 1047: aload 22
+ 1049: invokevirtual #1099 // Method com/google/gson/JsonElement.getAsJsonArray:()Lcom/google/gson/JsonArray;
+ 1052: goto 1056
+ 1055: aconst_null
+ 1056: invokestatic #1103 // Method compactEntries:(Lcom/google/gson/JsonArray;)Lcom/google/gson/JsonArray;
+ 1059: astore 23
+ 1061: aload_1
+ 1062: ldc_w #621 // String entries
+ 1065: aload 23
+ 1067: invokevirtual #474 // Method com/google/gson/JsonObject.add:(Ljava/lang/String;Lcom/google/gson/JsonElement;)V
+ 1070: aload_0
+ 1071: ldc_w #788 // String pools
+ 1074: invokevirtual #460 // Method com/google/gson/JsonObject.get:(Ljava/lang/String;)Lcom/google/gson/JsonElement;
+ 1077: invokestatic #1106 // Method compactPools:(Lcom/google/gson/JsonElement;)Lcom/google/gson/JsonArray;
+ 1080: astore 24
+ 1082: aload 24
+ 1084: invokevirtual #731 // Method com/google/gson/JsonArray.size:()I
+ 1087: ifle 1099
+ 1090: aload_1
+ 1091: ldc_w #788 // String pools
+ 1094: aload 24
+ 1096: invokevirtual #474 // Method com/google/gson/JsonObject.add:(Ljava/lang/String;Lcom/google/gson/JsonElement;)V
+ 1099: aload_1
+ 1100: areturn
+
+ private static com.google.gson.JsonObject compactLock(com.google.gson.JsonObject);
+ Code:
+ 0: new #303 // class com/google/gson/JsonObject
+ 3: dup
+ 4: invokespecial #622 // Method com/google/gson/JsonObject."":()V
+ 7: astore_1
+ 8: aload_0
+ 9: ldc_w #373 // String enabled
+ 12: iconst_0
+ 13: invokestatic #1033 // Method getBoolean:(Lcom/google/gson/JsonObject;Ljava/lang/String;Z)Z
+ 16: istore_2
+ 17: aload_0
+ 18: ldc_w #434 // String spawn_chance
+ 21: dconst_0
+ 22: invokestatic #1037 // Method getDouble:(Lcom/google/gson/JsonObject;Ljava/lang/String;D)D
+ 25: invokestatic #1041 // Method clamp01:(D)D
+ 28: dstore_3
+ 29: aload_0
+ 30: ldc_w #750 // String lockpick
+ 33: iconst_1
+ 34: invokestatic #1033 // Method getBoolean:(Lcom/google/gson/JsonObject;Ljava/lang/String;Z)Z
+ 37: istore 5
+ 39: aload_0
+ 40: ldc_w #1048 // String consume_lockpick_on_fail
+ 43: iconst_0
+ 44: invokestatic #1033 // Method getBoolean:(Lcom/google/gson/JsonObject;Ljava/lang/String;Z)Z
+ 47: istore 6
+ 49: iconst_0
+ 50: aload_0
+ 51: ldc_w #1050 // String damage_lockpick_on_success
+ 54: iconst_1
+ 55: invokestatic #1025 // Method getInt:(Lcom/google/gson/JsonObject;Ljava/lang/String;I)I
+ 58: invokestatic #416 // Method java/lang/Math.max:(II)I
+ 61: istore 7
+ 63: iconst_0
+ 64: aload_0
+ 65: ldc_w #1052 // String damage_lockpick_on_fail
+ 68: bipush 8
+ 70: invokestatic #1025 // Method getInt:(Lcom/google/gson/JsonObject;Ljava/lang/String;I)I
+ 73: invokestatic #416 // Method java/lang/Math.max:(II)I
+ 76: istore 8
+ 78: aload_0
+ 79: ifnull 106
+ 82: aload_0
+ 83: ldc_w #1050 // String damage_lockpick_on_success
+ 86: invokevirtual #457 // Method com/google/gson/JsonObject.has:(Ljava/lang/String;)Z
+ 89: ifne 102
+ 92: aload_0
+ 93: ldc_w #1052 // String damage_lockpick_on_fail
+ 96: invokevirtual #457 // Method com/google/gson/JsonObject.has:(Ljava/lang/String;)Z
+ 99: ifeq 106
+ 102: iconst_1
+ 103: goto 107
+ 106: iconst_0
+ 107: istore 9
+ 109: iload_2
+ 110: ifne 136
+ 113: dload_3
+ 114: dconst_0
+ 115: dcmpg
+ 116: ifgt 136
+ 119: iload 5
+ 121: ifeq 136
+ 124: iload 6
+ 126: ifne 136
+ 129: iload 9
+ 131: ifne 136
+ 134: aload_1
+ 135: areturn
+ 136: aload_1
+ 137: ldc_w #373 // String enabled
+ 140: iload_2
+ 141: invokestatic #405 // Method java/lang/Boolean.valueOf:(Z)Ljava/lang/Boolean;
+ 144: invokevirtual #408 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/Boolean;)V
+ 147: iload_2
+ 148: ifne 157
+ 151: dload_3
+ 152: dconst_0
+ 153: dcmpl
+ 154: ifle 168
+ 157: aload_1
+ 158: ldc_w #434 // String spawn_chance
+ 161: dload_3
+ 162: invokestatic #1046 // Method java/lang/Double.valueOf:(D)Ljava/lang/Double;
+ 165: invokevirtual #419 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/Number;)V
+ 168: iload 5
+ 170: ifne 184
+ 173: aload_1
+ 174: ldc_w #750 // String lockpick
+ 177: iconst_0
+ 178: invokestatic #405 // Method java/lang/Boolean.valueOf:(Z)Ljava/lang/Boolean;
+ 181: invokevirtual #408 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/Boolean;)V
+ 184: iload 6
+ 186: ifeq 200
+ 189: aload_1
+ 190: ldc_w #1048 // String consume_lockpick_on_fail
+ 193: iconst_1
+ 194: invokestatic #405 // Method java/lang/Boolean.valueOf:(Z)Ljava/lang/Boolean;
+ 197: invokevirtual #408 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/Boolean;)V
+ 200: iload 9
+ 202: ifeq 229
+ 205: aload_1
+ 206: ldc_w #1050 // String damage_lockpick_on_success
+ 209: iload 7
+ 211: invokestatic #199 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
+ 214: invokevirtual #419 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/Number;)V
+ 217: aload_1
+ 218: ldc_w #1052 // String damage_lockpick_on_fail
+ 221: iload 8
+ 223: invokestatic #199 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
+ 226: invokevirtual #419 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/Number;)V
+ 229: aload_1
+ 230: areturn
+
+ private static com.google.gson.JsonElement compactEmpty(com.google.gson.JsonObject, com.google.gson.JsonElement);
+ Code:
+ 0: aload_1
+ 1: ifnull 32
+ 4: aload_1
+ 5: invokevirtual #1055 // Method com/google/gson/JsonElement.isJsonPrimitive:()Z
+ 8: ifeq 32
+ 11: aload_1
+ 12: invokevirtual #1059 // Method com/google/gson/JsonElement.getAsJsonPrimitive:()Lcom/google/gson/JsonPrimitive;
+ 15: invokevirtual #1064 // Method com/google/gson/JsonPrimitive.isNumber:()Z
+ 18: ifeq 32
+ 21: aload_1
+ 22: invokevirtual #1068 // Method com/google/gson/JsonElement.getAsDouble:()D
+ 25: invokestatic #1041 // Method clamp01:(D)D
+ 28: dstore_2
+ 29: goto 54
+ 32: aload_0
+ 33: ldc_w #373 // String enabled
+ 36: iconst_0
+ 37: invokestatic #1033 // Method getBoolean:(Lcom/google/gson/JsonObject;Ljava/lang/String;Z)Z
+ 40: istore 4
+ 42: aload_0
+ 43: ldc_w #434 // String spawn_chance
+ 46: dconst_0
+ 47: invokestatic #1037 // Method getDouble:(Lcom/google/gson/JsonObject;Ljava/lang/String;D)D
+ 50: invokestatic #1041 // Method clamp01:(D)D
+ 53: dstore_2
+ 54: dload_2
+ 55: dconst_0
+ 56: dcmpg
+ 57: ifgt 62
+ 60: aconst_null
+ 61: areturn
+ 62: new #1061 // class com/google/gson/JsonPrimitive
+ 65: dup
+ 66: dload_2
+ 67: invokestatic #1046 // Method java/lang/Double.valueOf:(D)Ljava/lang/Double;
+ 70: invokespecial #1128 // Method com/google/gson/JsonPrimitive."":(Ljava/lang/Number;)V
+ 73: areturn
+
+ private static com.google.gson.JsonObject compactOpenPass(com.google.gson.JsonObject);
+ Code:
+ 0: new #303 // class com/google/gson/JsonObject
+ 3: dup
+ 4: invokespecial #622 // Method com/google/gson/JsonObject."":()V
+ 7: astore_1
+ 8: aload_0
+ 9: ldc_w #373 // String enabled
+ 12: iconst_0
+ 13: invokestatic #1033 // Method getBoolean:(Lcom/google/gson/JsonObject;Ljava/lang/String;Z)Z
+ 16: istore_2
+ 17: new #469 // class com/google/gson/JsonArray
+ 20: dup
+ 21: invokespecial #470 // Method com/google/gson/JsonArray."":()V
+ 24: astore_3
+ 25: aload_3
+ 26: aload_0
+ 27: ifnonnull 34
+ 30: aconst_null
+ 31: goto 41
+ 34: aload_0
+ 35: ldc_w #636 // String item
+ 38: invokevirtual #460 // Method com/google/gson/JsonObject.get:(Ljava/lang/String;)Lcom/google/gson/JsonElement;
+ 41: invokestatic #1074 // Method appendStrings:(Lcom/google/gson/JsonArray;Lcom/google/gson/JsonElement;)V
+ 44: aload_3
+ 45: aload_0
+ 46: ifnonnull 53
+ 49: aconst_null
+ 50: goto 60
+ 53: aload_0
+ 54: ldc_w #762 // String items
+ 57: invokevirtual #460 // Method com/google/gson/JsonObject.get:(Ljava/lang/String;)Lcom/google/gson/JsonElement;
+ 60: invokestatic #1074 // Method appendStrings:(Lcom/google/gson/JsonArray;Lcom/google/gson/JsonElement;)V
+ 63: aload_3
+ 64: aload_0
+ 65: ifnonnull 72
+ 68: aconst_null
+ 69: goto 79
+ 72: aload_0
+ 73: ldc_w #1075 // String match
+ 76: invokevirtual #460 // Method com/google/gson/JsonObject.get:(Ljava/lang/String;)Lcom/google/gson/JsonElement;
+ 79: invokestatic #1074 // Method appendStrings:(Lcom/google/gson/JsonArray;Lcom/google/gson/JsonElement;)V
+ 82: aload_3
+ 83: aload_0
+ 84: ifnonnull 91
+ 87: aconst_null
+ 88: goto 98
+ 91: aload_0
+ 92: ldc_w #1076 // String matches
+ 95: invokevirtual #460 // Method com/google/gson/JsonObject.get:(Ljava/lang/String;)Lcom/google/gson/JsonElement;
+ 98: invokestatic #1074 // Method appendStrings:(Lcom/google/gson/JsonArray;Lcom/google/gson/JsonElement;)V
+ 101: new #469 // class com/google/gson/JsonArray
+ 104: dup
+ 105: invokespecial #470 // Method com/google/gson/JsonArray."":()V
+ 108: astore 4
+ 110: aload 4
+ 112: aload_0
+ 113: ifnonnull 120
+ 116: aconst_null
+ 117: goto 127
+ 120: aload_0
+ 121: ldc_w #630 // String tag
+ 124: invokevirtual #460 // Method com/google/gson/JsonObject.get:(Ljava/lang/String;)Lcom/google/gson/JsonElement;
+ 127: invokestatic #1074 // Method appendStrings:(Lcom/google/gson/JsonArray;Lcom/google/gson/JsonElement;)V
+ 130: aload 4
+ 132: aload_0
+ 133: ifnonnull 140
+ 136: aconst_null
+ 137: goto 147
+ 140: aload_0
+ 141: ldc_w #764 // String tags
+ 144: invokevirtual #460 // Method com/google/gson/JsonObject.get:(Ljava/lang/String;)Lcom/google/gson/JsonElement;
+ 147: invokestatic #1074 // Method appendStrings:(Lcom/google/gson/JsonArray;Lcom/google/gson/JsonElement;)V
+ 150: iload_2
+ 151: ifne 171
+ 154: aload_3
+ 155: invokevirtual #731 // Method com/google/gson/JsonArray.size:()I
+ 158: ifne 171
+ 161: aload 4
+ 163: invokevirtual #731 // Method com/google/gson/JsonArray.size:()I
+ 166: ifne 171
+ 169: aload_1
+ 170: areturn
+ 171: aload_1
+ 172: ldc_w #373 // String enabled
+ 175: iload_2
+ 176: invokestatic #405 // Method java/lang/Boolean.valueOf:(Z)Ljava/lang/Boolean;
+ 179: invokevirtual #408 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/Boolean;)V
+ 182: iconst_1
+ 183: aload_0
+ 184: ldc_w #754 // String amount
+ 187: iconst_1
+ 188: invokestatic #1025 // Method getInt:(Lcom/google/gson/JsonObject;Ljava/lang/String;I)I
+ 191: invokestatic #416 // Method java/lang/Math.max:(II)I
+ 194: istore 5
+ 196: iload 5
+ 198: iconst_1
+ 199: if_icmpeq 214
+ 202: aload_1
+ 203: ldc_w #754 // String amount
+ 206: iload 5
+ 208: invokestatic #199 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
+ 211: invokevirtual #419 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/Number;)V
+ 214: aload_0
+ 215: ldc_w #756 // String consume
+ 218: iconst_1
+ 219: invokestatic #1033 // Method getBoolean:(Lcom/google/gson/JsonObject;Ljava/lang/String;Z)Z
+ 222: ifne 236
+ 225: aload_1
+ 226: ldc_w #756 // String consume
+ 229: iconst_0
+ 230: invokestatic #405 // Method java/lang/Boolean.valueOf:(Z)Ljava/lang/Boolean;
+ 233: invokevirtual #408 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/Boolean;)V
+ 236: aload_0
+ 237: ldc_w #758 // String bypass_lock
+ 240: iconst_1
+ 241: invokestatic #1033 // Method getBoolean:(Lcom/google/gson/JsonObject;Ljava/lang/String;Z)Z
+ 244: ifne 258
+ 247: aload_1
+ 248: ldc_w #758 // String bypass_lock
+ 251: iconst_0
+ 252: invokestatic #405 // Method java/lang/Boolean.valueOf:(Z)Ljava/lang/Boolean;
+ 255: invokevirtual #408 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/Boolean;)V
+ 258: aload_0
+ 259: ldc_w #760 // String bypass_search
+ 262: iconst_1
+ 263: invokestatic #1033 // Method getBoolean:(Lcom/google/gson/JsonObject;Ljava/lang/String;Z)Z
+ 266: ifne 280
+ 269: aload_1
+ 270: ldc_w #760 // String bypass_search
+ 273: iconst_0
+ 274: invokestatic #405 // Method java/lang/Boolean.valueOf:(Z)Ljava/lang/Boolean;
+ 277: invokevirtual #408 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/Boolean;)V
+ 280: aload_0
+ 281: ifnull 312
+ 284: aload_0
+ 285: ldc_w #1070 // String consume_in_creative
+ 288: invokevirtual #457 // Method com/google/gson/JsonObject.has:(Ljava/lang/String;)Z
+ 291: ifeq 312
+ 294: aload_1
+ 295: ldc_w #1070 // String consume_in_creative
+ 298: aload_0
+ 299: ldc_w #1070 // String consume_in_creative
+ 302: iconst_0
+ 303: invokestatic #1033 // Method getBoolean:(Lcom/google/gson/JsonObject;Ljava/lang/String;Z)Z
+ 306: invokestatic #405 // Method java/lang/Boolean.valueOf:(Z)Ljava/lang/Boolean;
+ 309: invokevirtual #408 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/Boolean;)V
+ 312: aload_3
+ 313: invokevirtual #731 // Method com/google/gson/JsonArray.size:()I
+ 316: ifle 327
+ 319: aload_1
+ 320: ldc_w #762 // String items
+ 323: aload_3
+ 324: invokevirtual #474 // Method com/google/gson/JsonObject.add:(Ljava/lang/String;Lcom/google/gson/JsonElement;)V
+ 327: aload 4
+ 329: invokevirtual #731 // Method com/google/gson/JsonArray.size:()I
+ 332: ifle 344
+ 335: aload_1
+ 336: ldc_w #764 // String tags
+ 339: aload 4
+ 341: invokevirtual #474 // Method com/google/gson/JsonObject.add:(Ljava/lang/String;Lcom/google/gson/JsonElement;)V
+ 344: aload_1
+ 345: areturn
+
+ private static com.google.gson.JsonObject compactRespawn(com.google.gson.JsonObject);
+ Code:
+ 0: new #303 // class com/google/gson/JsonObject
+ 3: dup
+ 4: invokespecial #622 // Method com/google/gson/JsonObject."":()V
+ 7: astore_1
+ 8: aload_0
+ 9: ldc_w #373 // String enabled
+ 12: iconst_0
+ 13: invokestatic #1033 // Method getBoolean:(Lcom/google/gson/JsonObject;Ljava/lang/String;Z)Z
+ 16: istore_2
+ 17: iload_2
+ 18: ifne 23
+ 21: aload_1
+ 22: areturn
+ 23: aload_1
+ 24: ldc_w #373 // String enabled
+ 27: iconst_1
+ 28: invokestatic #405 // Method java/lang/Boolean.valueOf:(Z)Ljava/lang/Boolean;
+ 31: invokevirtual #408 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/Boolean;)V
+ 34: aload_1
+ 35: ldc_w #410 // String time_ticks
+ 38: lconst_1
+ 39: aload_0
+ 40: ldc_w #410 // String time_ticks
+ 43: ldc2_w #1077 // long 24000l
+ 46: invokestatic #1082 // Method getLong:(Lcom/google/gson/JsonObject;Ljava/lang/String;J)J
+ 49: invokestatic #1085 // Method java/lang/Math.max:(JJ)J
+ 52: invokestatic #1090 // Method java/lang/Long.valueOf:(J)Ljava/lang/Long;
+ 55: invokevirtual #419 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/Number;)V
+ 58: aload_0
+ 59: ldc_w #421 // String only_if_empty
+ 62: iconst_1
+ 63: invokestatic #1033 // Method getBoolean:(Lcom/google/gson/JsonObject;Ljava/lang/String;Z)Z
+ 66: ifne 80
+ 69: aload_1
+ 70: ldc_w #421 // String only_if_empty
+ 73: iconst_0
+ 74: invokestatic #405 // Method java/lang/Boolean.valueOf:(Z)Ljava/lang/Boolean;
+ 77: invokevirtual #408 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/Boolean;)V
+ 80: aload_1
+ 81: ldc_w #423 // String clear_before_respawn
+ 84: iconst_1
+ 85: invokestatic #405 // Method java/lang/Boolean.valueOf:(Z)Ljava/lang/Boolean;
+ 88: invokevirtual #408 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/Boolean;)V
+ 91: aload_1
+ 92: areturn
+
+ private static com.google.gson.JsonArray compactEntries(com.google.gson.JsonArray);
+ Code:
+ 0: new #469 // class com/google/gson/JsonArray
+ 3: dup
+ 4: invokespecial #470 // Method com/google/gson/JsonArray."":()V
+ 7: astore_1
+ 8: aload_0
+ 9: ifnonnull 14
+ 12: aload_1
+ 13: areturn
+ 14: aload_0
+ 15: invokevirtual #789 // Method com/google/gson/JsonArray.iterator:()Ljava/util/Iterator;
+ 18: astore_2
+ 19: aload_2
+ 20: invokeinterface #602, 1 // InterfaceMethod java/util/Iterator.hasNext:()Z
+ 25: ifeq 395
+ 28: aload_2
+ 29: invokeinterface #606, 1 // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
+ 34: checkcast #343 // class com/google/gson/JsonElement
+ 37: astore_3
+ 38: aload_3
+ 39: invokevirtual #792 // Method com/google/gson/JsonElement.isJsonObject:()Z
+ 42: ifne 48
+ 45: goto 19
+ 48: aload_3
+ 49: invokevirtual #347 // Method com/google/gson/JsonElement.getAsJsonObject:()Lcom/google/gson/JsonObject;
+ 52: astore 4
+ 54: new #303 // class com/google/gson/JsonObject
+ 57: dup
+ 58: invokespecial #622 // Method com/google/gson/JsonObject."":()V
+ 61: astore 5
+ 63: aload 4
+ 65: aload 5
+ 67: ldc_w #636 // String item
+ 70: invokestatic #1135 // Method copyIfPresent:(Lcom/google/gson/JsonObject;Lcom/google/gson/JsonObject;Ljava/lang/String;)V
+ 73: aload 4
+ 75: aload 5
+ 77: ldc_w #762 // String items
+ 80: invokestatic #1135 // Method copyIfPresent:(Lcom/google/gson/JsonObject;Lcom/google/gson/JsonObject;Ljava/lang/String;)V
+ 83: aload 4
+ 85: aload 5
+ 87: ldc_w #630 // String tag
+ 90: invokestatic #1135 // Method copyIfPresent:(Lcom/google/gson/JsonObject;Lcom/google/gson/JsonObject;Ljava/lang/String;)V
+ 93: aload 4
+ 95: aload 5
+ 97: ldc_w #764 // String tags
+ 100: invokestatic #1135 // Method copyIfPresent:(Lcom/google/gson/JsonObject;Lcom/google/gson/JsonObject;Ljava/lang/String;)V
+ 103: aload 4
+ 105: aload 5
+ 107: ldc_w #1075 // String match
+ 110: invokestatic #1135 // Method copyIfPresent:(Lcom/google/gson/JsonObject;Lcom/google/gson/JsonObject;Ljava/lang/String;)V
+ 113: aload 4
+ 115: aload 5
+ 117: ldc_w #1076 // String matches
+ 120: invokestatic #1135 // Method copyIfPresent:(Lcom/google/gson/JsonObject;Lcom/google/gson/JsonObject;Ljava/lang/String;)V
+ 123: aload 5
+ 125: ldc_w #637 // String weight
+ 128: iconst_1
+ 129: aload 4
+ 131: ldc_w #637 // String weight
+ 134: iconst_1
+ 135: invokestatic #1025 // Method getInt:(Lcom/google/gson/JsonObject;Ljava/lang/String;I)I
+ 138: invokestatic #416 // Method java/lang/Math.max:(II)I
+ 141: invokestatic #199 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
+ 144: invokevirtual #419 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/Number;)V
+ 147: aload 5
+ 149: ldc_w #638 // String chance
+ 152: aload 4
+ 154: ldc_w #638 // String chance
+ 157: dconst_1
+ 158: invokestatic #1037 // Method getDouble:(Lcom/google/gson/JsonObject;Ljava/lang/String;D)D
+ 161: invokestatic #1041 // Method clamp01:(D)D
+ 164: invokestatic #1046 // Method java/lang/Double.valueOf:(D)Ljava/lang/Double;
+ 167: invokevirtual #419 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/Number;)V
+ 170: new #303 // class com/google/gson/JsonObject
+ 173: dup
+ 174: invokespecial #622 // Method com/google/gson/JsonObject."":()V
+ 177: astore 6
+ 179: aload 4
+ 181: ldc_w #646 // String count
+ 184: invokevirtual #460 // Method com/google/gson/JsonObject.get:(Ljava/lang/String;)Lcom/google/gson/JsonElement;
+ 187: astore 7
+ 189: aload 7
+ 191: ifnull 253
+ 194: aload 7
+ 196: invokevirtual #1055 // Method com/google/gson/JsonElement.isJsonPrimitive:()Z
+ 199: ifeq 253
+ 202: aload 7
+ 204: invokevirtual #1059 // Method com/google/gson/JsonElement.getAsJsonPrimitive:()Lcom/google/gson/JsonPrimitive;
+ 207: invokevirtual #1064 // Method com/google/gson/JsonPrimitive.isNumber:()Z
+ 210: ifeq 253
+ 213: iconst_0
+ 214: aload 7
+ 216: invokevirtual #1138 // Method com/google/gson/JsonElement.getAsInt:()I
+ 219: invokestatic #416 // Method java/lang/Math.max:(II)I
+ 222: istore 8
+ 224: aload 6
+ 226: ldc_w #641 // String min
+ 229: iload 8
+ 231: invokestatic #199 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
+ 234: invokevirtual #419 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/Number;)V
+ 237: aload 6
+ 239: ldc_w #644 // String max
+ 242: iload 8
+ 244: invokestatic #199 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
+ 247: invokevirtual #419 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/Number;)V
+ 250: goto 335
+ 253: aload 7
+ 255: ifnull 274
+ 258: aload 7
+ 260: invokevirtual #792 // Method com/google/gson/JsonElement.isJsonObject:()Z
+ 263: ifeq 274
+ 266: aload 7
+ 268: invokevirtual #347 // Method com/google/gson/JsonElement.getAsJsonObject:()Lcom/google/gson/JsonObject;
+ 271: goto 275
+ 274: aconst_null
+ 275: astore 8
+ 277: iconst_0
+ 278: aload 8
+ 280: ldc_w #641 // String min
+ 283: iconst_1
+ 284: invokestatic #1025 // Method getInt:(Lcom/google/gson/JsonObject;Ljava/lang/String;I)I
+ 287: invokestatic #416 // Method java/lang/Math.max:(II)I
+ 290: istore 9
+ 292: iload 9
+ 294: aload 8
+ 296: ldc_w #644 // String max
+ 299: iload 9
+ 301: invokestatic #1025 // Method getInt:(Lcom/google/gson/JsonObject;Ljava/lang/String;I)I
+ 304: invokestatic #416 // Method java/lang/Math.max:(II)I
+ 307: istore 10
+ 309: aload 6
+ 311: ldc_w #641 // String min
+ 314: iload 9
+ 316: invokestatic #199 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
+ 319: invokevirtual #419 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/Number;)V
+ 322: aload 6
+ 324: ldc_w #644 // String max
+ 327: iload 10
+ 329: invokestatic #199 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
+ 332: invokevirtual #419 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/Number;)V
+ 335: aload 5
+ 337: ldc_w #646 // String count
+ 340: aload 6
+ 342: invokevirtual #474 // Method com/google/gson/JsonObject.add:(Ljava/lang/String;Lcom/google/gson/JsonElement;)V
+ 345: aload 4
+ 347: aload 5
+ 349: ldc_w #640 // String nbt
+ 352: invokestatic #1135 // Method copyIfPresent:(Lcom/google/gson/JsonObject;Lcom/google/gson/JsonObject;Ljava/lang/String;)V
+ 355: aload 4
+ 357: ldc_w #733 // String with
+ 360: invokevirtual #460 // Method com/google/gson/JsonObject.get:(Ljava/lang/String;)Lcom/google/gson/JsonElement;
+ 363: invokestatic #1141 // Method compactLinkedEntries:(Lcom/google/gson/JsonElement;)Lcom/google/gson/JsonArray;
+ 366: astore 8
+ 368: aload 8
+ 370: invokevirtual #731 // Method com/google/gson/JsonArray.size:()I
+ 373: ifle 386
+ 376: aload 5
+ 378: ldc_w #733 // String with
+ 381: aload 8
+ 383: invokevirtual #474 // Method com/google/gson/JsonObject.add:(Ljava/lang/String;Lcom/google/gson/JsonElement;)V
+ 386: aload_1
+ 387: aload 5
+ 389: invokevirtual #649 // Method com/google/gson/JsonArray.add:(Lcom/google/gson/JsonElement;)V
+ 392: goto 19
+ 395: aload_1
+ 396: areturn
+
+ private static com.google.gson.JsonArray compactLinkedEntries(com.google.gson.JsonElement);
+ Code:
+ 0: new #469 // class com/google/gson/JsonArray
+ 3: dup
+ 4: invokespecial #470 // Method com/google/gson/JsonArray."":()V
+ 7: astore_1
+ 8: aload_0
+ 9: ifnull 19
+ 12: aload_0
+ 13: invokevirtual #1148 // Method com/google/gson/JsonElement.isJsonNull:()Z
+ 16: ifeq 21
+ 19: aload_1
+ 20: areturn
+ 21: aload_0
+ 22: invokevirtual #463 // Method com/google/gson/JsonElement.isJsonArray:()Z
+ 25: ifeq 36
+ 28: aload_0
+ 29: invokevirtual #1099 // Method com/google/gson/JsonElement.getAsJsonArray:()Lcom/google/gson/JsonArray;
+ 32: invokestatic #1103 // Method compactEntries:(Lcom/google/gson/JsonArray;)Lcom/google/gson/JsonArray;
+ 35: areturn
+ 36: aload_0
+ 37: invokevirtual #792 // Method com/google/gson/JsonElement.isJsonObject:()Z
+ 40: ifeq 61
+ 43: new #469 // class com/google/gson/JsonArray
+ 46: dup
+ 47: invokespecial #470 // Method com/google/gson/JsonArray."":()V
+ 50: astore_2
+ 51: aload_2
+ 52: aload_0
+ 53: invokevirtual #649 // Method com/google/gson/JsonArray.add:(Lcom/google/gson/JsonElement;)V
+ 56: aload_2
+ 57: invokestatic #1103 // Method compactEntries:(Lcom/google/gson/JsonArray;)Lcom/google/gson/JsonArray;
+ 60: areturn
+ 61: aload_1
+ 62: areturn
+
+ private static void appendEntriesArray(java.lang.StringBuilder, com.google.gson.JsonArray);
+ Code:
+ 0: aload_1
+ 1: invokevirtual #731 // Method com/google/gson/JsonArray.size:()I
+ 4: ifne 16
+ 7: aload_0
+ 8: ldc_w #1152 // String []
+ 11: invokevirtual #1158 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
+ 14: pop
+ 15: return
+ 16: aload_0
+ 17: ldc_w #1160 // String [\n
+ 20: invokevirtual #1158 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
+ 23: pop
+ 24: iconst_0
+ 25: istore_2
+ 26: iload_2
+ 27: aload_1
+ 28: invokevirtual #731 // Method com/google/gson/JsonArray.size:()I
+ 31: if_icmpge 87
+ 34: aload_0
+ 35: ldc_w #1162 // String
+ 38: invokevirtual #1158 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
+ 41: getstatic #1164 // Field COMPACT_GSON:Lcom/google/gson/Gson;
+ 44: aload_1
+ 45: iload_2
+ 46: invokevirtual #829 // Method com/google/gson/JsonArray.get:(I)Lcom/google/gson/JsonElement;
+ 49: invokevirtual #1015 // Method com/google/gson/Gson.toJson:(Lcom/google/gson/JsonElement;)Ljava/lang/String;
+ 52: invokevirtual #1158 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
+ 55: pop
+ 56: iload_2
+ 57: iconst_1
+ 58: iadd
+ 59: aload_1
+ 60: invokevirtual #731 // Method com/google/gson/JsonArray.size:()I
+ 63: if_icmpge 73
+ 66: aload_0
+ 67: bipush 44
+ 69: invokevirtual #1167 // Method java/lang/StringBuilder.append:(C)Ljava/lang/StringBuilder;
+ 72: pop
+ 73: aload_0
+ 74: ldc_w #1169 // String \n
+ 77: invokevirtual #1158 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
+ 80: pop
+ 81: iinc 2, 1
+ 84: goto 26
+ 87: aload_0
+ 88: ldc_w #1171 // String ]
+ 91: invokevirtual #1158 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
+ 94: pop
+ 95: return
+
+ private static com.google.gson.JsonArray compactPools(com.google.gson.JsonElement);
+ Code:
+ 0: new #469 // class com/google/gson/JsonArray
+ 3: dup
+ 4: invokespecial #470 // Method com/google/gson/JsonArray."":()V
+ 7: astore_1
+ 8: aload_0
+ 9: ifnull 19
+ 12: aload_0
+ 13: invokevirtual #463 // Method com/google/gson/JsonElement.isJsonArray:()Z
+ 16: ifne 21
+ 19: aload_1
+ 20: areturn
+ 21: aload_0
+ 22: invokevirtual #1099 // Method com/google/gson/JsonElement.getAsJsonArray:()Lcom/google/gson/JsonArray;
+ 25: invokevirtual #789 // Method com/google/gson/JsonArray.iterator:()Ljava/util/Iterator;
+ 28: astore_2
+ 29: aload_2
+ 30: invokeinterface #602, 1 // InterfaceMethod java/util/Iterator.hasNext:()Z
+ 35: ifeq 493
+ 38: aload_2
+ 39: invokeinterface #606, 1 // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
+ 44: checkcast #343 // class com/google/gson/JsonElement
+ 47: astore_3
+ 48: aload_3
+ 49: invokevirtual #792 // Method com/google/gson/JsonElement.isJsonObject:()Z
+ 52: ifne 58
+ 55: goto 29
+ 58: aload_3
+ 59: invokevirtual #347 // Method com/google/gson/JsonElement.getAsJsonObject:()Lcom/google/gson/JsonObject;
+ 62: astore 4
+ 64: new #303 // class com/google/gson/JsonObject
+ 67: dup
+ 68: invokespecial #622 // Method com/google/gson/JsonObject."":()V
+ 71: astore 5
+ 73: aload 4
+ 75: ldc_w #348 // String id
+ 78: invokevirtual #457 // Method com/google/gson/JsonObject.has:(Ljava/lang/String;)Z
+ 81: ifeq 137
+ 84: aload 4
+ 86: ldc_w #348 // String id
+ 89: invokevirtual #460 // Method com/google/gson/JsonObject.get:(Ljava/lang/String;)Lcom/google/gson/JsonElement;
+ 92: invokevirtual #1055 // Method com/google/gson/JsonElement.isJsonPrimitive:()Z
+ 95: ifeq 137
+ 98: aload 4
+ 100: ldc_w #348 // String id
+ 103: invokevirtual #460 // Method com/google/gson/JsonObject.get:(Ljava/lang/String;)Lcom/google/gson/JsonElement;
+ 106: invokevirtual #538 // Method com/google/gson/JsonElement.getAsString:()Ljava/lang/String;
+ 109: astore 6
+ 111: aload 6
+ 113: ifnull 137
+ 116: aload 6
+ 118: invokevirtual #454 // Method java/lang/String.isBlank:()Z
+ 121: ifne 137
+ 124: aload 5
+ 126: ldc_w #348 // String id
+ 129: aload 6
+ 131: invokevirtual #503 // Method java/lang/String.trim:()Ljava/lang/String;
+ 134: invokevirtual #352 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/String;)V
+ 137: new #303 // class com/google/gson/JsonObject
+ 140: dup
+ 141: invokespecial #622 // Method com/google/gson/JsonObject."":()V
+ 144: astore 6
+ 146: aload 4
+ 148: ldc_w #744 // String rolls
+ 151: invokevirtual #460 // Method com/google/gson/JsonObject.get:(Ljava/lang/String;)Lcom/google/gson/JsonElement;
+ 154: astore 7
+ 156: aload 7
+ 158: ifnull 220
+ 161: aload 7
+ 163: invokevirtual #1055 // Method com/google/gson/JsonElement.isJsonPrimitive:()Z
+ 166: ifeq 220
+ 169: aload 7
+ 171: invokevirtual #1059 // Method com/google/gson/JsonElement.getAsJsonPrimitive:()Lcom/google/gson/JsonPrimitive;
+ 174: invokevirtual #1064 // Method com/google/gson/JsonPrimitive.isNumber:()Z
+ 177: ifeq 220
+ 180: iconst_0
+ 181: aload 7
+ 183: invokevirtual #1138 // Method com/google/gson/JsonElement.getAsInt:()I
+ 186: invokestatic #416 // Method java/lang/Math.max:(II)I
+ 189: istore 8
+ 191: aload 6
+ 193: ldc_w #641 // String min
+ 196: iload 8
+ 198: invokestatic #199 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
+ 201: invokevirtual #419 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/Number;)V
+ 204: aload 6
+ 206: ldc_w #644 // String max
+ 209: iload 8
+ 211: invokestatic #199 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
+ 214: invokevirtual #419 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/Number;)V
+ 217: goto 278
+ 220: aload 4
+ 222: ldc_w #744 // String rolls
+ 225: invokestatic #1021 // Method getObject:(Lcom/google/gson/JsonObject;Ljava/lang/String;)Lcom/google/gson/JsonObject;
+ 228: astore 8
+ 230: aload 6
+ 232: ldc_w #641 // String min
+ 235: iconst_0
+ 236: aload 8
+ 238: ldc_w #641 // String min
+ 241: iconst_1
+ 242: invokestatic #1025 // Method getInt:(Lcom/google/gson/JsonObject;Ljava/lang/String;I)I
+ 245: invokestatic #416 // Method java/lang/Math.max:(II)I
+ 248: invokestatic #199 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
+ 251: invokevirtual #419 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/Number;)V
+ 254: aload 6
+ 256: ldc_w #644 // String max
+ 259: iconst_0
+ 260: aload 8
+ 262: ldc_w #644 // String max
+ 265: iconst_1
+ 266: invokestatic #1025 // Method getInt:(Lcom/google/gson/JsonObject;Ljava/lang/String;I)I
+ 269: invokestatic #416 // Method java/lang/Math.max:(II)I
+ 272: invokestatic #199 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
+ 275: invokevirtual #419 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/Number;)V
+ 278: aload 5
+ 280: ldc_w #744 // String rolls
+ 283: aload 6
+ 285: invokevirtual #474 // Method com/google/gson/JsonObject.add:(Ljava/lang/String;Lcom/google/gson/JsonElement;)V
+ 288: aload 4
+ 290: ldc_w #746 // String allow_duplicates
+ 293: invokevirtual #457 // Method com/google/gson/JsonObject.has:(Ljava/lang/String;)Z
+ 296: ifeq 335
+ 299: aload 4
+ 301: ldc_w #746 // String allow_duplicates
+ 304: invokevirtual #460 // Method com/google/gson/JsonObject.get:(Ljava/lang/String;)Lcom/google/gson/JsonElement;
+ 307: invokevirtual #1055 // Method com/google/gson/JsonElement.isJsonPrimitive:()Z
+ 310: ifeq 335
+ 313: aload 5
+ 315: ldc_w #746 // String allow_duplicates
+ 318: aload 4
+ 320: ldc_w #746 // String allow_duplicates
+ 323: invokevirtual #460 // Method com/google/gson/JsonObject.get:(Ljava/lang/String;)Lcom/google/gson/JsonElement;
+ 326: invokevirtual #1177 // Method com/google/gson/JsonElement.getAsBoolean:()Z
+ 329: invokestatic #405 // Method java/lang/Boolean.valueOf:(Z)Ljava/lang/Boolean;
+ 332: invokevirtual #408 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/Boolean;)V
+ 335: aload 4
+ 337: ldc_w #456 // String loot_tables
+ 340: invokevirtual #460 // Method com/google/gson/JsonObject.get:(Ljava/lang/String;)Lcom/google/gson/JsonElement;
+ 343: invokestatic #1094 // Method compactStringArray:(Lcom/google/gson/JsonElement;)Lcom/google/gson/JsonArray;
+ 346: astore 8
+ 348: aload 8
+ 350: aload 4
+ 352: ldc_w #1096 // String loot_table
+ 355: invokevirtual #460 // Method com/google/gson/JsonObject.get:(Ljava/lang/String;)Lcom/google/gson/JsonElement;
+ 358: invokestatic #1074 // Method appendStrings:(Lcom/google/gson/JsonArray;Lcom/google/gson/JsonElement;)V
+ 361: aload 8
+ 363: invokevirtual #731 // Method com/google/gson/JsonArray.size:()I
+ 366: ifle 379
+ 369: aload 5
+ 371: ldc_w #456 // String loot_tables
+ 374: aload 8
+ 376: invokevirtual #474 // Method com/google/gson/JsonObject.add:(Ljava/lang/String;Lcom/google/gson/JsonElement;)V
+ 379: aload 4
+ 381: ldc_w #621 // String entries
+ 384: invokevirtual #460 // Method com/google/gson/JsonObject.get:(Ljava/lang/String;)Lcom/google/gson/JsonElement;
+ 387: astore 9
+ 389: aload 9
+ 391: ifnull 410
+ 394: aload 9
+ 396: invokevirtual #463 // Method com/google/gson/JsonElement.isJsonArray:()Z
+ 399: ifeq 410
+ 402: aload 9
+ 404: invokevirtual #1099 // Method com/google/gson/JsonElement.getAsJsonArray:()Lcom/google/gson/JsonArray;
+ 407: goto 411
+ 410: aconst_null
+ 411: invokestatic #1103 // Method compactEntries:(Lcom/google/gson/JsonArray;)Lcom/google/gson/JsonArray;
+ 414: astore 10
+ 416: aload 5
+ 418: ldc_w #621 // String entries
+ 421: aload 10
+ 423: invokevirtual #474 // Method com/google/gson/JsonObject.add:(Ljava/lang/String;Lcom/google/gson/JsonElement;)V
+ 426: aload 5
+ 428: ldc_w #348 // String id
+ 431: invokevirtual #457 // Method com/google/gson/JsonObject.has:(Ljava/lang/String;)Z
+ 434: ifeq 468
+ 437: aload 5
+ 439: ldc_w #348 // String id
+ 442: invokevirtual #460 // Method com/google/gson/JsonObject.get:(Ljava/lang/String;)Lcom/google/gson/JsonElement;
+ 445: invokevirtual #1055 // Method com/google/gson/JsonElement.isJsonPrimitive:()Z
+ 448: ifeq 468
+ 451: aload 5
+ 453: ldc_w #348 // String id
+ 456: invokevirtual #460 // Method com/google/gson/JsonObject.get:(Ljava/lang/String;)Lcom/google/gson/JsonElement;
+ 459: invokevirtual #538 // Method com/google/gson/JsonElement.getAsString:()Ljava/lang/String;
+ 462: invokevirtual #454 // Method java/lang/String.isBlank:()Z
+ 465: ifeq 484
+ 468: aload 10
+ 470: invokevirtual #731 // Method com/google/gson/JsonArray.size:()I
+ 473: ifgt 484
+ 476: aload 8
+ 478: invokevirtual #731 // Method com/google/gson/JsonArray.size:()I
+ 481: ifle 490
+ 484: aload_1
+ 485: aload 5
+ 487: invokevirtual #649 // Method com/google/gson/JsonArray.add:(Lcom/google/gson/JsonElement;)V
+ 490: goto 29
+ 493: aload_1
+ 494: areturn
+
+ private static com.google.gson.JsonArray compactStringArray(com.google.gson.JsonElement);
+ Code:
+ 0: new #469 // class com/google/gson/JsonArray
+ 3: dup
+ 4: invokespecial #470 // Method com/google/gson/JsonArray."":()V
+ 7: astore_1
+ 8: aload_0
+ 9: ifnull 19
+ 12: aload_0
+ 13: invokevirtual #1148 // Method com/google/gson/JsonElement.isJsonNull:()Z
+ 16: ifeq 21
+ 19: aload_1
+ 20: areturn
+ 21: aload_0
+ 22: invokevirtual #463 // Method com/google/gson/JsonElement.isJsonArray:()Z
+ 25: ifeq 65
+ 28: aload_0
+ 29: invokevirtual #1099 // Method com/google/gson/JsonElement.getAsJsonArray:()Lcom/google/gson/JsonArray;
+ 32: invokevirtual #789 // Method com/google/gson/JsonArray.iterator:()Ljava/util/Iterator;
+ 35: astore_2
+ 36: aload_2
+ 37: invokeinterface #602, 1 // InterfaceMethod java/util/Iterator.hasNext:()Z
+ 42: ifeq 63
+ 45: aload_2
+ 46: invokeinterface #606, 1 // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
+ 51: checkcast #343 // class com/google/gson/JsonElement
+ 54: astore_3
+ 55: aload_1
+ 56: aload_3
+ 57: invokestatic #1181 // Method addString:(Lcom/google/gson/JsonArray;Lcom/google/gson/JsonElement;)V
+ 60: goto 36
+ 63: aload_1
+ 64: areturn
+ 65: aload_1
+ 66: aload_0
+ 67: invokestatic #1181 // Method addString:(Lcom/google/gson/JsonArray;Lcom/google/gson/JsonElement;)V
+ 70: aload_1
+ 71: areturn
+
+ private static void appendStrings(com.google.gson.JsonArray, com.google.gson.JsonElement);
+ Code:
+ 0: aload_1
+ 1: ifnull 11
+ 4: aload_1
+ 5: invokevirtual #1148 // Method com/google/gson/JsonElement.isJsonNull:()Z
+ 8: ifeq 12
+ 11: return
+ 12: aload_1
+ 13: invokevirtual #463 // Method com/google/gson/JsonElement.isJsonArray:()Z
+ 16: ifeq 55
+ 19: aload_1
+ 20: invokevirtual #1099 // Method com/google/gson/JsonElement.getAsJsonArray:()Lcom/google/gson/JsonArray;
+ 23: invokevirtual #789 // Method com/google/gson/JsonArray.iterator:()Ljava/util/Iterator;
+ 26: astore_2
+ 27: aload_2
+ 28: invokeinterface #602, 1 // InterfaceMethod java/util/Iterator.hasNext:()Z
+ 33: ifeq 54
+ 36: aload_2
+ 37: invokeinterface #606, 1 // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
+ 42: checkcast #343 // class com/google/gson/JsonElement
+ 45: astore_3
+ 46: aload_0
+ 47: aload_3
+ 48: invokestatic #1181 // Method addString:(Lcom/google/gson/JsonArray;Lcom/google/gson/JsonElement;)V
+ 51: goto 27
+ 54: return
+ 55: aload_0
+ 56: aload_1
+ 57: invokestatic #1181 // Method addString:(Lcom/google/gson/JsonArray;Lcom/google/gson/JsonElement;)V
+ 60: return
+
+ private static void addString(com.google.gson.JsonArray, com.google.gson.JsonElement);
+ Code:
+ 0: aload_1
+ 1: ifnull 11
+ 4: aload_1
+ 5: invokevirtual #1055 // Method com/google/gson/JsonElement.isJsonPrimitive:()Z
+ 8: ifne 12
+ 11: return
+ 12: aload_1
+ 13: invokevirtual #538 // Method com/google/gson/JsonElement.getAsString:()Ljava/lang/String;
+ 16: astore_2
+ 17: aload_2
+ 18: ifnull 36
+ 21: aload_2
+ 22: invokevirtual #454 // Method java/lang/String.isBlank:()Z
+ 25: ifne 36
+ 28: aload_0
+ 29: aload_2
+ 30: invokevirtual #503 // Method java/lang/String.trim:()Ljava/lang/String;
+ 33: invokevirtual #477 // Method com/google/gson/JsonArray.add:(Ljava/lang/String;)V
+ 36: return
+
+ private static com.google.gson.JsonElement firstExisting(com.google.gson.JsonObject, java.lang.String...);
+ Code:
+ 0: aload_0
+ 1: ifnonnull 6
+ 4: aconst_null
+ 5: areturn
+ 6: aload_1
+ 7: astore_2
+ 8: aload_2
+ 9: arraylength
+ 10: istore_3
+ 11: iconst_0
+ 12: istore 4
+ 14: iload 4
+ 16: iload_3
+ 17: if_icmpge 48
+ 20: aload_2
+ 21: iload 4
+ 23: aaload
+ 24: astore 5
+ 26: aload_0
+ 27: aload 5
+ 29: invokevirtual #457 // Method com/google/gson/JsonObject.has:(Ljava/lang/String;)Z
+ 32: ifeq 42
+ 35: aload_0
+ 36: aload 5
+ 38: invokevirtual #460 // Method com/google/gson/JsonObject.get:(Ljava/lang/String;)Lcom/google/gson/JsonElement;
+ 41: areturn
+ 42: iinc 4, 1
+ 45: goto 14
+ 48: aconst_null
+ 49: areturn
+
+ private static void copyIfPresent(com.google.gson.JsonObject, com.google.gson.JsonObject, java.lang.String);
+ Code:
+ 0: aload_0
+ 1: aload_2
+ 2: invokevirtual #457 // Method com/google/gson/JsonObject.has:(Ljava/lang/String;)Z
+ 5: ifeq 18
+ 8: aload_1
+ 9: aload_2
+ 10: aload_0
+ 11: aload_2
+ 12: invokevirtual #460 // Method com/google/gson/JsonObject.get:(Ljava/lang/String;)Lcom/google/gson/JsonElement;
+ 15: invokevirtual #474 // Method com/google/gson/JsonObject.add:(Ljava/lang/String;Lcom/google/gson/JsonElement;)V
+ 18: return
+
+ private static com.google.gson.JsonObject getObject(com.google.gson.JsonObject, java.lang.String);
+ Code:
+ 0: aload_0
+ 1: ifnull 29
+ 4: aload_0
+ 5: aload_1
+ 6: invokevirtual #457 // Method com/google/gson/JsonObject.has:(Ljava/lang/String;)Z
+ 9: ifeq 29
+ 12: aload_0
+ 13: aload_1
+ 14: invokevirtual #460 // Method com/google/gson/JsonObject.get:(Ljava/lang/String;)Lcom/google/gson/JsonElement;
+ 17: invokevirtual #792 // Method com/google/gson/JsonElement.isJsonObject:()Z
+ 20: ifeq 29
+ 23: aload_0
+ 24: aload_1
+ 25: invokevirtual #1190 // Method com/google/gson/JsonObject.getAsJsonObject:(Ljava/lang/String;)Lcom/google/gson/JsonObject;
+ 28: areturn
+ 29: aconst_null
+ 30: areturn
+
+ private static boolean getSearchEnabled(com.google.gson.JsonObject);
+ Code:
+ 0: aload_0
+ 1: ldc_w #371 // String search
+ 4: invokevirtual #460 // Method com/google/gson/JsonObject.get:(Ljava/lang/String;)Lcom/google/gson/JsonElement;
+ 7: astore_1
+ 8: aload_1
+ 9: ifnull 19
+ 12: aload_1
+ 13: invokevirtual #1148 // Method com/google/gson/JsonElement.isJsonNull:()Z
+ 16: ifeq 21
+ 19: iconst_1
+ 20: ireturn
+ 21: aload_1
+ 22: invokevirtual #1055 // Method com/google/gson/JsonElement.isJsonPrimitive:()Z
+ 25: ifeq 43
+ 28: aload_1
+ 29: invokevirtual #1059 // Method com/google/gson/JsonElement.getAsJsonPrimitive:()Lcom/google/gson/JsonPrimitive;
+ 32: invokevirtual #1193 // Method com/google/gson/JsonPrimitive.isBoolean:()Z
+ 35: ifeq 43
+ 38: aload_1
+ 39: invokevirtual #1177 // Method com/google/gson/JsonElement.getAsBoolean:()Z
+ 42: ireturn
+ 43: aload_1
+ 44: invokevirtual #792 // Method com/google/gson/JsonElement.isJsonObject:()Z
+ 47: ifeq 62
+ 50: aload_1
+ 51: invokevirtual #347 // Method com/google/gson/JsonElement.getAsJsonObject:()Lcom/google/gson/JsonObject;
+ 54: ldc_w #373 // String enabled
+ 57: iconst_1
+ 58: invokestatic #1033 // Method getBoolean:(Lcom/google/gson/JsonObject;Ljava/lang/String;Z)Z
+ 61: ireturn
+ 62: iconst_1
+ 63: ireturn
+
+ private static java.lang.String getString(com.google.gson.JsonObject, java.lang.String, java.lang.String);
+ Code:
+ 0: aload_0
+ 1: aload_1
+ 2: invokevirtual #457 // Method com/google/gson/JsonObject.has:(Ljava/lang/String;)Z
+ 5: ifeq 30
+ 8: aload_0
+ 9: aload_1
+ 10: invokevirtual #460 // Method com/google/gson/JsonObject.get:(Ljava/lang/String;)Lcom/google/gson/JsonElement;
+ 13: invokevirtual #1055 // Method com/google/gson/JsonElement.isJsonPrimitive:()Z
+ 16: ifeq 30
+ 19: aload_0
+ 20: aload_1
+ 21: invokevirtual #460 // Method com/google/gson/JsonObject.get:(Ljava/lang/String;)Lcom/google/gson/JsonElement;
+ 24: invokevirtual #538 // Method com/google/gson/JsonElement.getAsString:()Ljava/lang/String;
+ 27: goto 31
+ 30: aload_2
+ 31: areturn
+
+ private static boolean getBoolean(com.google.gson.JsonObject, java.lang.String, boolean);
+ Code:
+ 0: aload_0
+ 1: ifnull 34
+ 4: aload_0
+ 5: aload_1
+ 6: invokevirtual #457 // Method com/google/gson/JsonObject.has:(Ljava/lang/String;)Z
+ 9: ifeq 34
+ 12: aload_0
+ 13: aload_1
+ 14: invokevirtual #460 // Method com/google/gson/JsonObject.get:(Ljava/lang/String;)Lcom/google/gson/JsonElement;
+ 17: invokevirtual #1055 // Method com/google/gson/JsonElement.isJsonPrimitive:()Z
+ 20: ifeq 34
+ 23: aload_0
+ 24: aload_1
+ 25: invokevirtual #460 // Method com/google/gson/JsonObject.get:(Ljava/lang/String;)Lcom/google/gson/JsonElement;
+ 28: invokevirtual #1177 // Method com/google/gson/JsonElement.getAsBoolean:()Z
+ 31: goto 35
+ 34: iload_2
+ 35: ireturn
+
+ private static int getInt(com.google.gson.JsonObject, java.lang.String, int);
+ Code:
+ 0: aload_0
+ 1: ifnull 34
+ 4: aload_0
+ 5: aload_1
+ 6: invokevirtual #457 // Method com/google/gson/JsonObject.has:(Ljava/lang/String;)Z
+ 9: ifeq 34
+ 12: aload_0
+ 13: aload_1
+ 14: invokevirtual #460 // Method com/google/gson/JsonObject.get:(Ljava/lang/String;)Lcom/google/gson/JsonElement;
+ 17: invokevirtual #1055 // Method com/google/gson/JsonElement.isJsonPrimitive:()Z
+ 20: ifeq 34
+ 23: aload_0
+ 24: aload_1
+ 25: invokevirtual #460 // Method com/google/gson/JsonObject.get:(Ljava/lang/String;)Lcom/google/gson/JsonElement;
+ 28: invokevirtual #1138 // Method com/google/gson/JsonElement.getAsInt:()I
+ 31: goto 35
+ 34: iload_2
+ 35: ireturn
+
+ private static long getLong(com.google.gson.JsonObject, java.lang.String, long);
+ Code:
+ 0: aload_0
+ 1: ifnull 34
+ 4: aload_0
+ 5: aload_1
+ 6: invokevirtual #457 // Method com/google/gson/JsonObject.has:(Ljava/lang/String;)Z
+ 9: ifeq 34
+ 12: aload_0
+ 13: aload_1
+ 14: invokevirtual #460 // Method com/google/gson/JsonObject.get:(Ljava/lang/String;)Lcom/google/gson/JsonElement;
+ 17: invokevirtual #1055 // Method com/google/gson/JsonElement.isJsonPrimitive:()Z
+ 20: ifeq 34
+ 23: aload_0
+ 24: aload_1
+ 25: invokevirtual #460 // Method com/google/gson/JsonObject.get:(Ljava/lang/String;)Lcom/google/gson/JsonElement;
+ 28: invokevirtual #1198 // Method com/google/gson/JsonElement.getAsLong:()J
+ 31: goto 35
+ 34: lload_2
+ 35: lreturn
+
+ private static double getDouble(com.google.gson.JsonObject, java.lang.String, double);
+ Code:
+ 0: aload_0
+ 1: ifnull 34
+ 4: aload_0
+ 5: aload_1
+ 6: invokevirtual #457 // Method com/google/gson/JsonObject.has:(Ljava/lang/String;)Z
+ 9: ifeq 34
+ 12: aload_0
+ 13: aload_1
+ 14: invokevirtual #460 // Method com/google/gson/JsonObject.get:(Ljava/lang/String;)Lcom/google/gson/JsonElement;
+ 17: invokevirtual #1055 // Method com/google/gson/JsonElement.isJsonPrimitive:()Z
+ 20: ifeq 34
+ 23: aload_0
+ 24: aload_1
+ 25: invokevirtual #460 // Method com/google/gson/JsonObject.get:(Ljava/lang/String;)Lcom/google/gson/JsonElement;
+ 28: invokevirtual #1068 // Method com/google/gson/JsonElement.getAsDouble:()D
+ 31: goto 35
+ 34: dload_2
+ 35: dreturn
+
+ private static double clamp01(double);
+ Code:
+ 0: dconst_0
+ 1: dconst_1
+ 2: dload_0
+ 3: invokestatic #1201 // Method java/lang/Math.min:(DD)D
+ 6: invokestatic #1203 // Method java/lang/Math.max:(DD)D
+ 9: dreturn
+
+ private static com.google.gson.JsonElement normalizeNumbers(com.google.gson.JsonElement);
+ Code:
+ 0: aload_0
+ 1: ifnull 11
+ 4: aload_0
+ 5: invokevirtual #1148 // Method com/google/gson/JsonElement.isJsonNull:()Z
+ 8: ifeq 13
+ 11: aload_0
+ 12: areturn
+ 13: aload_0
+ 14: invokevirtual #1055 // Method com/google/gson/JsonElement.isJsonPrimitive:()Z
+ 17: ifeq 90
+ 20: aload_0
+ 21: invokevirtual #1059 // Method com/google/gson/JsonElement.getAsJsonPrimitive:()Lcom/google/gson/JsonPrimitive;
+ 24: astore_1
+ 25: aload_1
+ 26: invokevirtual #1064 // Method com/google/gson/JsonPrimitive.isNumber:()Z
+ 29: ifne 34
+ 32: aload_1
+ 33: areturn
+ 34: aload_1
+ 35: invokevirtual #1204 // Method com/google/gson/JsonPrimitive.getAsDouble:()D
+ 38: dstore_2
+ 39: dload_2
+ 40: invokestatic #1208 // Method java/lang/Double.isFinite:(D)Z
+ 43: ifne 48
+ 46: aload_1
+ 47: areturn
+ 48: dload_2
+ 49: invokestatic #1213 // Method java/math/BigDecimal.valueOf:(D)Ljava/math/BigDecimal;
+ 52: iconst_3
+ 53: getstatic #1219 // Field java/math/RoundingMode.HALF_UP:Ljava/math/RoundingMode;
+ 56: invokevirtual #1223 // Method java/math/BigDecimal.setScale:(ILjava/math/RoundingMode;)Ljava/math/BigDecimal;
+ 59: invokevirtual #1227 // Method java/math/BigDecimal.stripTrailingZeros:()Ljava/math/BigDecimal;
+ 62: astore 4
+ 64: aload 4
+ 66: invokevirtual #1230 // Method java/math/BigDecimal.scale:()I
+ 69: ifge 80
+ 72: aload 4
+ 74: iconst_0
+ 75: invokevirtual #1233 // Method java/math/BigDecimal.setScale:(I)Ljava/math/BigDecimal;
+ 78: astore 4
+ 80: new #1061 // class com/google/gson/JsonPrimitive
+ 83: dup
+ 84: aload 4
+ 86: invokespecial #1128 // Method com/google/gson/JsonPrimitive."":(Ljava/lang/Number;)V
+ 89: areturn
+ 90: aload_0
+ 91: invokevirtual #463 // Method com/google/gson/JsonElement.isJsonArray:()Z
+ 94: ifeq 145
+ 97: new #469 // class com/google/gson/JsonArray
+ 100: dup
+ 101: invokespecial #470 // Method com/google/gson/JsonArray."":()V
+ 104: astore_1
+ 105: aload_0
+ 106: invokevirtual #1099 // Method com/google/gson/JsonElement.getAsJsonArray:()Lcom/google/gson/JsonArray;
+ 109: invokevirtual #789 // Method com/google/gson/JsonArray.iterator:()Ljava/util/Iterator;
+ 112: astore_2
+ 113: aload_2
+ 114: invokeinterface #602, 1 // InterfaceMethod java/util/Iterator.hasNext:()Z
+ 119: ifeq 143
+ 122: aload_2
+ 123: invokeinterface #606, 1 // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
+ 128: checkcast #343 // class com/google/gson/JsonElement
+ 131: astore_3
+ 132: aload_1
+ 133: aload_3
+ 134: invokestatic #1009 // Method normalizeNumbers:(Lcom/google/gson/JsonElement;)Lcom/google/gson/JsonElement;
+ 137: invokevirtual #649 // Method com/google/gson/JsonArray.add:(Lcom/google/gson/JsonElement;)V
+ 140: goto 113
+ 143: aload_1
+ 144: areturn
+ 145: aload_0
+ 146: invokevirtual #792 // Method com/google/gson/JsonElement.isJsonObject:()Z
+ 149: ifeq 222
+ 152: new #303 // class com/google/gson/JsonObject
+ 155: dup
+ 156: invokespecial #622 // Method com/google/gson/JsonObject."":()V
+ 159: astore_1
+ 160: aload_0
+ 161: invokevirtual #347 // Method com/google/gson/JsonElement.getAsJsonObject:()Lcom/google/gson/JsonObject;
+ 164: invokevirtual #1237 // Method com/google/gson/JsonObject.entrySet:()Ljava/util/Set;
+ 167: invokeinterface #1240, 1 // InterfaceMethod java/util/Set.iterator:()Ljava/util/Iterator;
+ 172: astore_2
+ 173: aload_2
+ 174: invokeinterface #602, 1 // InterfaceMethod java/util/Iterator.hasNext:()Z
+ 179: ifeq 220
+ 182: aload_2
+ 183: invokeinterface #606, 1 // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
+ 188: checkcast #13 // class java/util/Map$Entry
+ 191: astore_3
+ 192: aload_1
+ 193: aload_3
+ 194: invokeinterface #1243, 1 // InterfaceMethod java/util/Map$Entry.getKey:()Ljava/lang/Object;
+ 199: checkcast #243 // class java/lang/String
+ 202: aload_3
+ 203: invokeinterface #1246, 1 // InterfaceMethod java/util/Map$Entry.getValue:()Ljava/lang/Object;
+ 208: checkcast #343 // class com/google/gson/JsonElement
+ 211: invokestatic #1009 // Method normalizeNumbers:(Lcom/google/gson/JsonElement;)Lcom/google/gson/JsonElement;
+ 214: invokevirtual #474 // Method com/google/gson/JsonObject.add:(Ljava/lang/String;Lcom/google/gson/JsonElement;)V
+ 217: goto 173
+ 220: aload_1
+ 221: areturn
+ 222: aload_0
+ 223: areturn
+
+ private static java.lang.String cleanWholeNumberDecimals(java.lang.String);
+ Code:
+ 0: aload_0
+ 1: ldc_w #1254 // String (?<=: )(-?\\d+)\\.0(?=[,\\r\\n])
+ 4: ldc_w #1256 // String $1
+ 7: invokevirtual #1259 // Method java/lang/String.replaceAll:(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+ 10: areturn
+
+ private static void appendQuoted(java.lang.StringBuilder, java.lang.String);
+ Code:
+ 0: aload_0
+ 1: getstatic #1164 // Field COMPACT_GSON:Lcom/google/gson/Gson;
+ 4: aload_1
+ 5: invokevirtual #1265 // Method com/google/gson/Gson.toJson:(Ljava/lang/Object;)Ljava/lang/String;
+ 8: invokevirtual #1158 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
+ 11: pop
+ 12: return
+
+ private static boolean updateRootBoolean(java.lang.String, java.lang.String, boolean);
+ Code:
+ 0: getstatic #57 // Field CONFIG_PATHS:Ljava/util/Map;
+ 3: aload_0
+ 4: invokeinterface #217, 2 // InterfaceMethod java/util/Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
+ 9: checkcast #86 // class java/nio/file/Path
+ 12: astore_3
+ 13: aload_3
+ 14: ifnonnull 19
+ 17: iconst_0
+ 18: ireturn
+ 19: aload_3
+ 20: invokestatic #394 // Method readConfigObject:(Ljava/nio/file/Path;)Lcom/google/gson/JsonObject;
+ 23: astore 4
+ 25: aload 4
+ 27: aload_1
+ 28: iload_2
+ 29: invokestatic #405 // Method java/lang/Boolean.valueOf:(Z)Ljava/lang/Boolean;
+ 32: invokevirtual #408 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/Boolean;)V
+ 35: aload_3
+ 36: aload 4
+ 38: invokestatic #299 // Method writeConfigObject:(Ljava/nio/file/Path;Lcom/google/gson/JsonObject;)V
+ 41: invokestatic #301 // Method reload:()V
+ 44: iconst_1
+ 45: ireturn
+ 46: astore 4
+ 48: getstatic #92 // Field com/ogaba/sa_decor/SADecor.LOGGER:Lorg/slf4j/Logger;
+ 51: ldc_w #1267 // String Could not update \'{}\' for loot config \'{}\'.
+ 54: iconst_3
+ 55: anewarray #4 // class java/lang/Object
+ 58: dup
+ 59: iconst_0
+ 60: aload_1
+ 61: aastore
+ 62: dup
+ 63: iconst_1
+ 64: aload_0
+ 65: aastore
+ 66: dup
+ 67: iconst_2
+ 68: aload 4
+ 70: aastore
+ 71: invokeinterface #308, 3 // InterfaceMethod org/slf4j/Logger.warn:(Ljava/lang/String;[Ljava/lang/Object;)V
+ 76: iconst_0
+ 77: ireturn
+ Exception table:
+ from to target type
+ 19 45 46 Class java/lang/Exception
+
+ private static boolean updateBooleanInObject(java.lang.String, java.lang.String, java.lang.String, boolean);
+ Code:
+ 0: getstatic #57 // Field CONFIG_PATHS:Ljava/util/Map;
+ 3: aload_0
+ 4: invokeinterface #217, 2 // InterfaceMethod java/util/Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
+ 9: checkcast #86 // class java/nio/file/Path
+ 12: astore 4
+ 14: aload 4
+ 16: ifnonnull 21
+ 19: iconst_0
+ 20: ireturn
+ 21: aload 4
+ 23: invokestatic #394 // Method readConfigObject:(Ljava/nio/file/Path;)Lcom/google/gson/JsonObject;
+ 26: astore 5
+ 28: aload 5
+ 30: aload_1
+ 31: invokestatic #400 // Method getOrCreateObject:(Lcom/google/gson/JsonObject;Ljava/lang/String;)Lcom/google/gson/JsonObject;
+ 34: astore 6
+ 36: aload 6
+ 38: aload_2
+ 39: iload_3
+ 40: invokestatic #405 // Method java/lang/Boolean.valueOf:(Z)Ljava/lang/Boolean;
+ 43: invokevirtual #408 // Method com/google/gson/JsonObject.addProperty:(Ljava/lang/String;Ljava/lang/Boolean;)V
+ 46: aload 4
+ 48: aload 5
+ 50: invokestatic #299 // Method writeConfigObject:(Ljava/nio/file/Path;Lcom/google/gson/JsonObject;)V
+ 53: invokestatic #301 // Method reload:()V
+ 56: iconst_1
+ 57: ireturn
+ 58: astore 5
+ 60: getstatic #92 // Field com/ogaba/sa_decor/SADecor.LOGGER:Lorg/slf4j/Logger;
+ 63: ldc_w #1269 // String Could not update \'{}.{}\' for loot config \'{}\'.
+ 66: iconst_4
+ 67: anewarray #4 // class java/lang/Object
+ 70: dup
+ 71: iconst_0
+ 72: aload_1
+ 73: aastore
+ 74: dup
+ 75: iconst_1
+ 76: aload_2
+ 77: aastore
+ 78: dup
+ 79: iconst_2
+ 80: aload_0
+ 81: aastore
+ 82: dup
+ 83: iconst_3
+ 84: aload 5
+ 86: aastore
+ 87: invokeinterface #308, 3 // InterfaceMethod org/slf4j/Logger.warn:(Ljava/lang/String;[Ljava/lang/Object;)V
+ 92: iconst_0
+ 93: ireturn
+ Exception table:
+ from to target type
+ 21 57 58 Class java/lang/Exception
+
+ private static com.google.gson.JsonObject getOrCreateObject(com.google.gson.JsonObject, java.lang.String);
+ Code:
+ 0: aload_0
+ 1: aload_1
+ 2: invokevirtual #457 // Method com/google/gson/JsonObject.has:(Ljava/lang/String;)Z
+ 5: ifeq 25
+ 8: aload_0
+ 9: aload_1
+ 10: invokevirtual #460 // Method com/google/gson/JsonObject.get:(Ljava/lang/String;)Lcom/google/gson/JsonElement;
+ 13: invokevirtual #792 // Method com/google/gson/JsonElement.isJsonObject:()Z
+ 16: ifeq 25
+ 19: aload_0
+ 20: aload_1
+ 21: invokevirtual #1190 // Method com/google/gson/JsonObject.getAsJsonObject:(Ljava/lang/String;)Lcom/google/gson/JsonObject;
+ 24: areturn
+ 25: new #303 // class com/google/gson/JsonObject
+ 28: dup
+ 29: invokespecial #622 // Method com/google/gson/JsonObject."":()V
+ 32: astore_2
+ 33: aload_0
+ 34: aload_1
+ 35: aload_2
+ 36: invokevirtual #474 // Method com/google/gson/JsonObject.add:(Ljava/lang/String;Lcom/google/gson/JsonElement;)V
+ 39: aload_2
+ 40: areturn
+
+ private static void loadConfig(java.nio.file.Path);
+ Code:
+ 0: aload_0
+ 1: invokeinterface #956, 1 // InterfaceMethod java/nio/file/Path.getFileName:()Ljava/nio/file/Path;
+ 6: invokeinterface #957, 1 // InterfaceMethod java/nio/file/Path.toString:()Ljava/lang/String;
+ 11: astore_1
+ 12: aload_1
+ 13: iconst_0
+ 14: aload_1
+ 15: invokevirtual #1275 // Method java/lang/String.length:()I
+ 18: ldc_w #1277 // String .json
+ 21: invokevirtual #1275 // Method java/lang/String.length:()I
+ 24: isub
+ 25: invokevirtual #1280 // Method java/lang/String.substring:(II)Ljava/lang/String;
+ 28: astore_2
+ 29: aload_0
+ 30: invokestatic #533 // Method java/nio/file/Files.size:(Ljava/nio/file/Path;)J
+ 33: ldc2_w #1281 // long 8388608l
+ 36: lcmp
+ 37: ifle 53
+ 40: getstatic #92 // Field com/ogaba/sa_decor/SADecor.LOGGER:Lorg/slf4j/Logger;
+ 43: ldc_w #1284 // String Ignoring oversized loot crate config (over 8 MiB): {}
+ 46: aload_0
+ 47: invokeinterface #1286, 3 // InterfaceMethod org/slf4j/Logger.warn:(Ljava/lang/String;Ljava/lang/Object;)V
+ 52: return
+ 53: goto 71
+ 56: astore_3
+ 57: getstatic #92 // Field com/ogaba/sa_decor/SADecor.LOGGER:Lorg/slf4j/Logger;
+ 60: ldc_w #1288 // String Could not inspect loot crate config size: {}
+ 63: aload_0
+ 64: aload_3
+ 65: invokeinterface #100, 4 // InterfaceMethod org/slf4j/Logger.warn:(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)V
+ 70: return
+ 71: aload_0
+ 72: invokestatic #335 // Method java/nio/file/Files.newBufferedReader:(Ljava/nio/file/Path;)Ljava/io/BufferedReader;
+ 75: astore_3
+ 76: aload_3
+ 77: invokestatic #341 // Method com/google/gson/JsonParser.parseReader:(Ljava/io/Reader;)Lcom/google/gson/JsonElement;
+ 80: invokevirtual #347 // Method com/google/gson/JsonElement.getAsJsonObject:()Lcom/google/gson/JsonObject;
+ 83: astore 4
+ 85: aload_2
+ 86: aload 4
+ 88: invokestatic #1292 // Method com/ogaba/sa_decor/common/loot/DecorLootConfig.fromJson:(Ljava/lang/String;Lcom/google/gson/JsonObject;)Lcom/ogaba/sa_decor/common/loot/DecorLootConfig;
+ 91: astore 5
+ 93: aload 5
+ 95: invokevirtual #1295 // Method com/ogaba/sa_decor/common/loot/DecorLootConfig.isValid:()Z
+ 98: ifne 122
+ 101: getstatic #92 // Field com/ogaba/sa_decor/SADecor.LOGGER:Lorg/slf4j/Logger;
+ 104: ldc_w #1297 // String Ignoring invalid loot crate config: {}
+ 107: aload_0
+ 108: invokeinterface #1286, 3 // InterfaceMethod org/slf4j/Logger.warn:(Ljava/lang/String;Ljava/lang/Object;)V
+ 113: aload_3
+ 114: ifnull 121
+ 117: aload_3
+ 118: invokevirtual #358 // Method java/io/Reader.close:()V
+ 121: return
+ 122: getstatic #52 // Field CONFIGS:Ljava/util/Map;
+ 125: aload 5
+ 127: invokevirtual #1299 // Method com/ogaba/sa_decor/common/loot/DecorLootConfig.id:()Ljava/lang/String;
+ 130: invokeinterface #230, 2 // InterfaceMethod java/util/Map.containsKey:(Ljava/lang/Object;)Z
+ 135: ifeq 190
+ 138: getstatic #92 // Field com/ogaba/sa_decor/SADecor.LOGGER:Lorg/slf4j/Logger;
+ 141: ldc_w #1301 // String Ignoring duplicate loot profile id \'{}\' from {} (already loaded from {}).
+ 144: iconst_3
+ 145: anewarray #4 // class java/lang/Object
+ 148: dup
+ 149: iconst_0
+ 150: aload 5
+ 152: invokevirtual #1299 // Method com/ogaba/sa_decor/common/loot/DecorLootConfig.id:()Ljava/lang/String;
+ 155: aastore
+ 156: dup
+ 157: iconst_1
+ 158: aload_0
+ 159: aastore
+ 160: dup
+ 161: iconst_2
+ 162: getstatic #57 // Field CONFIG_PATHS:Ljava/util/Map;
+ 165: aload 5
+ 167: invokevirtual #1299 // Method com/ogaba/sa_decor/common/loot/DecorLootConfig.id:()Ljava/lang/String;
+ 170: invokeinterface #217, 2 // InterfaceMethod java/util/Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
+ 175: aastore
+ 176: invokeinterface #308, 3 // InterfaceMethod org/slf4j/Logger.warn:(Ljava/lang/String;[Ljava/lang/Object;)V
+ 181: aload_3
+ 182: ifnull 189
+ 185: aload_3
+ 186: invokevirtual #358 // Method java/io/Reader.close:()V
+ 189: return
+ 190: getstatic #52 // Field CONFIGS:Ljava/util/Map;
+ 193: aload 5
+ 195: invokevirtual #1299 // Method com/ogaba/sa_decor/common/loot/DecorLootConfig.id:()Ljava/lang/String;
+ 198: aload 5
+ 200: invokeinterface #1305, 3 // InterfaceMethod java/util/Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+ 205: pop
+ 206: getstatic #57 // Field CONFIG_PATHS:Ljava/util/Map;
+ 209: aload 5
+ 211: invokevirtual #1299 // Method com/ogaba/sa_decor/common/loot/DecorLootConfig.id:()Ljava/lang/String;
+ 214: aload_0
+ 215: invokeinterface #1305, 3 // InterfaceMethod java/util/Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+ 220: pop
+ 221: aload_3
+ 222: ifnull 257
+ 225: aload_3
+ 226: invokevirtual #358 // Method java/io/Reader.close:()V
+ 229: goto 257
+ 232: astore 4
+ 234: aload_3
+ 235: ifnull 254
+ 238: aload_3
+ 239: invokevirtual #358 // Method java/io/Reader.close:()V
+ 242: goto 254
+ 245: astore 5
+ 247: aload 4
+ 249: aload 5
+ 251: invokevirtual #185 // Method java/lang/Throwable.addSuppressed:(Ljava/lang/Throwable;)V
+ 254: aload 4
+ 256: athrow
+ 257: goto 274
+ 260: astore_3
+ 261: getstatic #92 // Field com/ogaba/sa_decor/SADecor.LOGGER:Lorg/slf4j/Logger;
+ 264: ldc_w #1307 // String Could not load loot crate config: {}
+ 267: aload_0
+ 268: aload_3
+ 269: invokeinterface #100, 4 // InterfaceMethod org/slf4j/Logger.warn:(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)V
+ 274: return
+ Exception table:
+ from to target type
+ 29 52 56 Class java/io/IOException
+ 76 113 232 Class java/lang/Throwable
+ 122 181 232 Class java/lang/Throwable
+ 190 221 232 Class java/lang/Throwable
+ 238 242 245 Class java/lang/Throwable
+ 71 121 260 Class java/lang/Exception
+ 122 189 260 Class java/lang/Exception
+ 190 257 260 Class java/lang/Exception
+
+ private static void initializeDefaultProfilesOnce(java.nio.file.Path, boolean) throws java.io.IOException;
+ Code:
+ 0: aload_0
+ 1: invokestatic #1315 // Method defaultProfilesInitializedMarker:(Ljava/nio/file/Path;)Ljava/nio/file/Path;
+ 4: astore_2
+ 5: aload_2
+ 6: iconst_0
+ 7: anewarray #68 // class java/nio/file/LinkOption
+ 10: invokestatic #235 // Method java/nio/file/Files.isRegularFile:(Ljava/nio/file/Path;[Ljava/nio/file/LinkOption;)Z
+ 13: ifeq 17
+ 16: return
+ 17: iconst_0
+ 18: istore_3
+ 19: iload_1
+ 20: ifne 28
+ 23: aload_0
+ 24: invokestatic #1319 // Method createExampleConfigsIfMissing:(Ljava/nio/file/Path;)I
+ 27: istore_3
+ 28: aload_2
+ 29: invokeinterface #355, 1 // InterfaceMethod java/nio/file/Path.getParent:()Ljava/nio/file/Path;
+ 34: iconst_0
+ 35: anewarray #76 // class java/nio/file/attribute/FileAttribute
+ 38: invokestatic #80 // Method java/nio/file/Files.createDirectories:(Ljava/nio/file/Path;[Ljava/nio/file/attribute/FileAttribute;)Ljava/nio/file/Path;
+ 41: pop
+ 42: aload_2
+ 43: ldc_w #1321 // String SA Decor loot-crate example profiles initialized.\nDelete any/all JSON profiles freely; reload will not recreate them.\nUse /sa_decor loot restore_defaults to restore missing examples.\n
+ 46: iconst_0
+ 47: anewarray #965 // class java/nio/file/OpenOption
+ 50: invokestatic #1325 // Method java/nio/file/Files.writeString:(Ljava/nio/file/Path;Ljava/lang/CharSequence;[Ljava/nio/file/OpenOption;)Ljava/nio/file/Path;
+ 53: pop
+ 54: getstatic #92 // Field com/ogaba/sa_decor/SADecor.LOGGER:Lorg/slf4j/Logger;
+ 57: ldc_w #1327 // String Loot crate default profiles initialized ({} example profile(s) created).
+ 60: iload_3
+ 61: invokestatic #199 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
+ 64: invokeinterface #203, 3 // InterfaceMethod org/slf4j/Logger.info:(Ljava/lang/String;Ljava/lang/Object;)V
+ 69: return
+
+ public static int restoreDefaultProfiles();
+ Code:
+ 0: invokestatic #66 // Method getLootCrateConfigDirectory:()Ljava/nio/file/Path;
+ 3: astore_0
+ 4: aload_0
+ 5: iconst_0
+ 6: anewarray #76 // class java/nio/file/attribute/FileAttribute
+ 9: invokestatic #80 // Method java/nio/file/Files.createDirectories:(Ljava/nio/file/Path;[Ljava/nio/file/attribute/FileAttribute;)Ljava/nio/file/Path;
+ 12: pop
+ 13: aload_0
+ 14: invokestatic #1319 // Method createExampleConfigsIfMissing:(Ljava/nio/file/Path;)I
+ 17: istore_1
+ 18: aload_0
+ 19: invokestatic #1315 // Method defaultProfilesInitializedMarker:(Ljava/nio/file/Path;)Ljava/nio/file/Path;
+ 22: astore_2
+ 23: aload_2
+ 24: invokeinterface #355, 1 // InterfaceMethod java/nio/file/Path.getParent:()Ljava/nio/file/Path;
+ 29: iconst_0
+ 30: anewarray #76 // class java/nio/file/attribute/FileAttribute
+ 33: invokestatic #80 // Method java/nio/file/Files.createDirectories:(Ljava/nio/file/Path;[Ljava/nio/file/attribute/FileAttribute;)Ljava/nio/file/Path;
+ 36: pop
+ 37: aload_2
+ 38: iconst_0
+ 39: anewarray #68 // class java/nio/file/LinkOption
+ 42: invokestatic #291 // Method java/nio/file/Files.exists:(Ljava/nio/file/Path;[Ljava/nio/file/LinkOption;)Z
+ 45: ifne 60
+ 48: aload_2
+ 49: ldc_w #1321 // String SA Decor loot-crate example profiles initialized.\nDelete any/all JSON profiles freely; reload will not recreate them.\nUse /sa_decor loot restore_defaults to restore missing examples.\n
+ 52: iconst_0
+ 53: anewarray #965 // class java/nio/file/OpenOption
+ 56: invokestatic #1325 // Method java/nio/file/Files.writeString:(Ljava/nio/file/Path;Ljava/lang/CharSequence;[Ljava/nio/file/OpenOption;)Ljava/nio/file/Path;
+ 59: pop
+ 60: invokestatic #301 // Method reload:()V
+ 63: iload_1
+ 64: ireturn
+ 65: astore_1
+ 66: getstatic #92 // Field com/ogaba/sa_decor/SADecor.LOGGER:Lorg/slf4j/Logger;
+ 69: ldc_w #1332 // String Could not restore Survivors Arsenal loot crate default profiles.
+ 72: aload_1
+ 73: invokeinterface #1335, 3 // InterfaceMethod org/slf4j/Logger.warn:(Ljava/lang/String;Ljava/lang/Throwable;)V
+ 78: iconst_m1
+ 79: ireturn
+ Exception table:
+ from to target type
+ 4 64 65 Class java/io/IOException
+
+ private static java.nio.file.Path defaultProfilesInitializedMarker(java.nio.file.Path);
+ Code:
+ 0: aload_0
+ 1: invokeinterface #355, 1 // InterfaceMethod java/nio/file/Path.getParent:()Ljava/nio/file/Path;
+ 6: astore_1
+ 7: aload_1
+ 8: ifnonnull 15
+ 11: aload_0
+ 12: goto 16
+ 15: aload_1
+ 16: ldc #31 // String .loot_crate_defaults_initialized
+ 18: invokeinterface #288, 2 // InterfaceMethod java/nio/file/Path.resolve:(Ljava/lang/String;)Ljava/nio/file/Path;
+ 23: areturn
+
+ private static int createExampleConfigsIfMissing(java.nio.file.Path) throws java.io.IOException;
+ Code:
+ 0: iconst_0
+ 1: istore_1
+ 2: invokestatic #1341 // Method com/ogaba/sa_decor/common/loot/DecorLootDefaultProfiles.createDefaultConfigs:()Ljava/util/Map;
+ 5: invokeinterface #1342, 1 // InterfaceMethod java/util/Map.entrySet:()Ljava/util/Set;
+ 10: invokeinterface #1240, 1 // InterfaceMethod java/util/Set.iterator:()Ljava/util/Iterator;
+ 15: astore_2
+ 16: aload_2
+ 17: invokeinterface #602, 1 // InterfaceMethod java/util/Iterator.hasNext:()Z
+ 22: ifeq 89
+ 25: aload_2
+ 26: invokeinterface #606, 1 // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
+ 31: checkcast #13 // class java/util/Map$Entry
+ 34: astore_3
+ 35: aload_0
+ 36: aload_3
+ 37: invokeinterface #1243, 1 // InterfaceMethod java/util/Map$Entry.getKey:()Ljava/lang/Object;
+ 42: checkcast #243 // class java/lang/String
+ 45: invokedynamic #284, 0 // InvokeDynamic #4:makeConcatWithConstants:(Ljava/lang/String;)Ljava/lang/String;
+ 50: invokeinterface #288, 2 // InterfaceMethod java/nio/file/Path.resolve:(Ljava/lang/String;)Ljava/nio/file/Path;
+ 55: astore 4
+ 57: aload 4
+ 59: iconst_0
+ 60: anewarray #68 // class java/nio/file/LinkOption
+ 63: invokestatic #291 // Method java/nio/file/Files.exists:(Ljava/nio/file/Path;[Ljava/nio/file/LinkOption;)Z
+ 66: ifne 86
+ 69: aload 4
+ 71: aload_3
+ 72: invokeinterface #1246, 1 // InterfaceMethod java/util/Map$Entry.getValue:()Ljava/lang/Object;
+ 77: checkcast #303 // class com/google/gson/JsonObject
+ 80: invokestatic #299 // Method writeConfigObject:(Ljava/nio/file/Path;Lcom/google/gson/JsonObject;)V
+ 83: iinc 1, 1
+ 86: goto 16
+ 89: iload_1
+ 90: ireturn
+
+ private static void writeExample(java.nio.file.Path, java.lang.String) throws java.io.IOException;
+ Code:
+ 0: aload_1
+ 1: invokestatic #509 // Method com/google/gson/JsonParser.parseString:(Ljava/lang/String;)Lcom/google/gson/JsonElement;
+ 4: invokevirtual #347 // Method com/google/gson/JsonElement.getAsJsonObject:()Lcom/google/gson/JsonObject;
+ 7: astore_2
+ 8: aload_0
+ 9: aload_2
+ 10: invokestatic #299 // Method writeConfigObject:(Ljava/nio/file/Path;Lcom/google/gson/JsonObject;)V
+ 13: return
+
+ private static java.lang.String lambda$exportedProfileIds$6(java.lang.String);
+ Code:
+ 0: aload_0
+ 1: iconst_0
+ 2: aload_0
+ 3: invokevirtual #1275 // Method java/lang/String.length:()I
+ 6: iconst_5
+ 7: isub
+ 8: invokevirtual #1280 // Method java/lang/String.substring:(II)Ljava/lang/String;
+ 11: areturn
+
+ private static boolean lambda$exportedProfileIds$5(java.lang.String);
+ Code:
+ 0: aload_0
+ 1: ldc_w #1277 // String .json
+ 4: invokevirtual #1349 // Method java/lang/String.endsWith:(Ljava/lang/String;)Z
+ 7: ireturn
+
+ private static java.lang.String lambda$exportedProfileIds$4(java.nio.file.Path);
+ Code:
+ 0: aload_0
+ 1: invokeinterface #956, 1 // InterfaceMethod java/nio/file/Path.getFileName:()Ljava/nio/file/Path;
+ 6: invokeinterface #957, 1 // InterfaceMethod java/nio/file/Path.toString:()Ljava/lang/String;
+ 11: areturn
+
+ private static boolean lambda$exportedProfileIds$3(java.nio.file.Path);
+ Code:
+ 0: aload_0
+ 1: iconst_0
+ 2: anewarray #68 // class java/nio/file/LinkOption
+ 5: invokestatic #235 // Method java/nio/file/Files.isRegularFile:(Ljava/nio/file/Path;[Ljava/nio/file/LinkOption;)Z
+ 8: ireturn
+
+ private static java.lang.String lambda$reload$2(java.nio.file.Path);
+ Code:
+ 0: aload_0
+ 1: invokeinterface #956, 1 // InterfaceMethod java/nio/file/Path.getFileName:()Ljava/nio/file/Path;
+ 6: invokeinterface #957, 1 // InterfaceMethod java/nio/file/Path.toString:()Ljava/lang/String;
+ 11: areturn
+
+ private static boolean lambda$reload$1(java.nio.file.Path);
+ Code:
+ 0: aload_0
+ 1: invokeinterface #956, 1 // InterfaceMethod java/nio/file/Path.getFileName:()Ljava/nio/file/Path;
+ 6: invokeinterface #957, 1 // InterfaceMethod java/nio/file/Path.toString:()Ljava/lang/String;
+ 11: ldc_w #1277 // String .json
+ 14: invokevirtual #1349 // Method java/lang/String.endsWith:(Ljava/lang/String;)Z
+ 17: ireturn
+
+ private static boolean lambda$reload$0(java.nio.file.Path);
+ Code:
+ 0: aload_0
+ 1: iconst_0
+ 2: anewarray #68 // class java/nio/file/LinkOption
+ 5: invokestatic #235 // Method java/nio/file/Files.isRegularFile:(Ljava/nio/file/Path;[Ljava/nio/file/LinkOption;)Z
+ 8: ireturn
+
+ static {};
+ Code:
+ 0: new #1353 // class com/google/gson/GsonBuilder
+ 3: dup
+ 4: invokespecial #1354 // Method com/google/gson/GsonBuilder."":()V
+ 7: invokevirtual #1358 // Method com/google/gson/GsonBuilder.setPrettyPrinting:()Lcom/google/gson/GsonBuilder;
+ 10: invokevirtual #1361 // Method com/google/gson/GsonBuilder.disableHtmlEscaping:()Lcom/google/gson/GsonBuilder;
+ 13: invokevirtual #1365 // Method com/google/gson/GsonBuilder.create:()Lcom/google/gson/Gson;
+ 16: putstatic #1001 // Field GSON:Lcom/google/gson/Gson;
+ 19: new #1353 // class com/google/gson/GsonBuilder
+ 22: dup
+ 23: invokespecial #1354 // Method com/google/gson/GsonBuilder."":()V
+ 26: invokevirtual #1361 // Method com/google/gson/GsonBuilder.disableHtmlEscaping:()Lcom/google/gson/GsonBuilder;
+ 29: invokevirtual #1365 // Method com/google/gson/GsonBuilder.create:()Lcom/google/gson/Gson;
+ 32: putstatic #1164 // Field COMPACT_GSON:Lcom/google/gson/Gson;
+ 35: new #1367 // class java/util/LinkedHashMap
+ 38: dup
+ 39: invokespecial #1368 // Method java/util/LinkedHashMap."":()V
+ 42: putstatic #52 // Field CONFIGS:Ljava/util/Map;
+ 45: new #1367 // class java/util/LinkedHashMap
+ 48: dup
+ 49: invokespecial #1368 // Method java/util/LinkedHashMap."":()V
+ 52: putstatic #57 // Field CONFIG_PATHS:Ljava/util/Map;
+ 55: return
+}
diff --git a/_sa_hanhua_out/_tmp/consts_render.txt b/_sa_hanhua_out/_tmp/consts_render.txt
new file mode 100644
index 0000000..52fa759
--- /dev/null
+++ b/_sa_hanhua_out/_tmp/consts_render.txt
@@ -0,0 +1,175 @@
+== com.ogaba.sa_combat.client.event.SACombatClientForgeEvents ==
+ item.durability
+ [a-z0-9_.-]+:[a-z0-9_./-]+
+ item.modifiers.mainhand
+ attack damage
+ attack speed
+ attack range
+ entity reach
+ attack knockback
+ dano de ataque
+ velocidade de ataque
+ alcance de ataque
+ repuls
+ knockback
+ when in main hand
+ main hand
+ m?o principal
+ mao principal
+ %.2f
+ ������...
+ renderSpyglassOverlay
+== com.ogaba.sa_combat.client.render.PlayerArmSkinLayer ==
+ root
+ base
+ slim
+ right_hand_wide
+ right_hand_slim
+ left_hand_wide
+ left_hand_slim
+== com.ogaba.sa_combat.client.render.SAWeaponItemRenderer ==
+ idle_view
+ camera
+ right_hand_wide
+ left_hand_wide
+ right_hand_slim
+ left_hand_slim
+ spyglass
+== com.ogaba.sa_combat.client.render.SpecialGrenadeItemRenderer ==
+ camera
+ idle_view
+ held_item
+ granade
+ right_hand
+ left_hand
+ right_hand_wide
+ left_hand_wide
+ right_hand_slim
+ left_hand_slim
+ item/pipe_bomb_visual
+ item/nail_bomb_visual
+ item/molotov_visual
+== com.ogaba.sa_combat.client.render.SpecialGrenadePlayerArmSkinLayer ==
+ main
+ right
+ left
+ right_hand
+ left_hand
+ granade
+ camera
+ right_hand_wide
+ right_hand_slim
+ left_hand_wide
+ left_hand_slim
+ slim
+== com.ogaba.sa_combat.client.tooltip.BlueprintClientTooltipComponent ==
+ tooltip.sa_combat.blueprint.unknown
+ Unknown Unlock
+ tooltip.sa_combat.blueprint.check_data
+ Check blueprint data
+ tooltip.sa_combat.blueprint.unlock
+ Unlock
+ tooltip.sa_combat.blueprint.recipe_unlock
+ Recipe Unlock
+ ����
+ tooltip.sa_combat.blueprint.no_abilities
+ No abilities
+ tooltip.sa_combat.blueprint.on_hit
+ On Hit
+ ����
+ bettercombat
+ attack_range
+ ����
+ ����
+ %.1f
+== com.ogaba.sa_combat.client.tooltip.WeaponClientTooltipComponent ==
+ tooltip.sa_combat.modifier_section
+ tooltip.sa_combat.on_hit
+ tooltip.sa_combat.empty_socket
+== com.ogaba.sa_combat.event.SACombatForgeEvents ==
+ SA Combat TACZ vest bullet resistance
+ SA Combat weapon upgrade damage
+ SA Combat weapon upgrade speed
+ SA Combat weapon upgrade knockback
+ SA Combat weapon upgrade reach
+ SACombatLastShieldThornsTick
+ SACombatLastShieldThornsTick
+ spiked
+ 13a24b02-d971-4ee7-879c-1c7068a6bb71
+ 457d3b0c-c7b7-43a4-8395-01f82ec1bdb2
+ df109f67-5b6d-4de4-9a1b-c75443c0f1b2
+ 9d46b9e9-46cb-4ab3-b2a0-c0e331cce312
+ 11d92754-4e96-4c9e-9b25-d8945bc43b24
+ tacz
+ tacz.bullet_resistance
+== com.ogaba.sa_survival.client.BackpackGuiKeyHandler ==
+ key.sa_combat.open_backpack_gui
+ key.categories.sa_combat
+== com.ogaba.sa_survival.client.BackpackInventoryPanelOverlay$SlotVisualState ==
+ NONE
+ ACTIVE
+ LOCKED
+ EMPTY
+== com.ogaba.sa_survival.client.BackpackInventoryPanelOverlay ==
+ pink
+ blue
+ jeans
+ green
+ yellow
+ desert
+ black
+ camo
+ olive
+ military
+ tactical
+ vest
+ jacket
+ leather
+ brown
+ shirt
+ f_40220_
+ f_40221_
+ [SA Survival] Could not access Slot position fields for modular inventory slots.
+ ����
+ �������IJ�λ
+ �˱�����ʹ�õIJ�λ
+ screen.sa_combat.utility_panel.close
+ screen.sa_combat.utility_panel.open
+== com.ogaba.sa_survival.client.renderer.BackpackCurioRenderer$WeaponMountSide ==
+ RIGHT
+ LEFT
+== com.ogaba.sa_survival.client.renderer.BackpackCurioRenderer ==
+ SatchelCurioRender
+ Expected 3 double values
+ Expected 3 float values
+== com.ogaba.sa_survival.client.renderer.FlashlightItemRenderer ==
+ right_hand_wide
+ right_hand_slim
+ left_hand_wide
+ left_hand_slim
+ item/flashlight_emissive
+== com.ogaba.sa_survival.client.tooltip.ClientBackpackContentsTooltip ==
+ pink
+ yellow
+ desert
+ blue
+ jeans
+ green
+ camo
+ black
+ jacket
+ vest
+== com.ogaba.sa_survival.event.ExternalEquipmentStorageTooltipEvents ==
+ extra slots
+ ��סShift��Ԥ������
+ ��סShift��Ԥ������
+== com.ogaba.sa_survival.item.tooltip.BackpackContentsTooltip ==
+ Items
+ ClothingItems
+== com.ogaba.sa_survival.item.tooltip.EffectTooltipUtil ==
+ tooltip.sa_combat.effects
+ tooltip.sa_combat.removes_poison
+ tooltip.sa_combat.removes_bleeding
+ tooltip.sa_combat.heals_amount
+ potion.withAmplifier
+ potion.withDuration
\ No newline at end of file
diff --git a/_sa_hanhua_out/_tmp/decor_lang.txt b/_sa_hanhua_out/_tmp/decor_lang.txt
new file mode 100644
index 0000000..460e9ca
--- /dev/null
+++ b/_sa_hanhua_out/_tmp/decor_lang.txt
@@ -0,0 +1,3150 @@
+block.sa_decor.air_conditioner
+ EN: Air Conditioner
+ PT: Ar-condicionado
+ ZH: 空调
+block.sa_decor.ambulance
+ EN: Ambulance
+ PT: Ambulância
+ ZH: 救护车
+block.sa_decor.ammo_box
+ EN: Ammo Box
+ PT: Caixa de Municao
+ ZH: 弹药箱
+block.sa_decor.ammo_box_stack_2
+ EN: Ammo Box Stack
+ PT: Pilha de Caixas de Municao
+ ZH: 弹药箱堆
+block.sa_decor.ammo_box_stack_3
+ EN: Large Ammo Box Stack
+ PT: Pilha Grande de Caixas de Municao
+ ZH: 大型弹药箱堆
+block.sa_decor.ammo_box_stack_4
+ EN: Ammo Box Stack x4
+ PT: Pilha de 4 Caixas de Municao
+ ZH: 弹药箱堆 x4
+block.sa_decor.ammo_props
+ EN: Ammo Props
+ PT: Props de Municao
+ ZH: 弹药道具
+block.sa_decor.asphalt
+ EN: Asphalt
+ PT: Asfalto
+ ZH: 沥青
+block.sa_decor.asphalt_corner_white_line
+ EN: Asphalt Corner White Line
+ PT: Asfalto com Linha Branca de Canto
+ ZH: 沥青白色转角线
+block.sa_decor.asphalt_double_yellow_line
+ EN: Asphalt Double Yellow Line
+ PT: Asfalto com Linha Amarela Dupla
+ ZH: 沥青双黄线
+block.sa_decor.asphalt_white_line
+ EN: Asphalt White Line
+ PT: Asfalto com Linha Branca
+ ZH: 沥青白线
+block.sa_decor.attach_case
+ EN: Attach Case
+ PT: Maleta
+ ZH: 配件箱
+block.sa_decor.backpack_loot
+ EN: Loot Backpack
+ PT: Mochila de Loot
+ ZH: 战利品背包
+block.sa_decor.barbed_wire
+ EN: Barbed Wire
+ PT: Arame Farpado
+ ZH: 铁丝网
+block.sa_decor.barricade
+ EN: Barricade
+ PT: Barricada
+ ZH: 路障
+block.sa_decor.bathroom_sink
+ EN: Bathroom Sink
+ PT: Pia de Banheiro
+ ZH: 浴室水槽
+block.sa_decor.bear_trap
+ EN: Bear Trap
+ PT: Armadilha de Urso
+ ZH: 捕兽夹
+block.sa_decor.beige_commercial_wall
+ EN: Beige Commercial Wall
+ PT: Parede Comercial Bege
+ ZH: 米色商用墙
+block.sa_decor.beige_utility_vent_door
+ EN: Beige Utility Vent Door
+ PT: Porta de Ventilação Bege
+ ZH: 米色检修通风门
+block.sa_decor.big_barricade
+ EN: Big Barricade
+ PT: Barricada Grande
+ ZH: 大型路障
+block.sa_decor.big_metal_locker
+ EN: Big Metal Locker
+ PT: Armario Metalico Grande
+ ZH: 大型金属储物柜
+block.sa_decor.big_military_crate
+ EN: Big Military Crate
+ PT: Caixa Militar Grande
+ ZH: 大型军用板条箱
+block.sa_decor.birch_big_wooden_crate
+ EN: Birch Big Wooden Crate
+ PT: Caixa Grande de Bétula
+ ZH: 白桦大型木箱
+block.sa_decor.birch_supply_crate
+ EN: Birch Crate
+ PT: Caixa de Bétula
+ ZH: 白桦木箱
+block.sa_decor.birch_wooden_drawer_double
+ EN: Double Birch Wooden Drawer
+ PT: Gaveta de Madeira de Bétula Dupla
+ ZH: 白桦木双抽屉
+block.sa_decor.birch_wooden_drawer_one
+ EN: Birch Wooden Drawer
+ PT: Gaveta de Madeira de Bétula
+ ZH: 白桦木抽屉
+block.sa_decor.black_commercial_floor
+ EN: Black Commercial Floor
+ PT: Piso Comercial Preto
+ ZH: 黑色商用地板
+block.sa_decor.black_commercial_floor_slab
+ EN: Black Commercial Floor Slab
+ PT: Laje de Piso Comercial Preto
+ ZH: 黑色商用地板台阶
+block.sa_decor.black_desk_lamp
+ EN: Black Desk Lamp
+ PT: Luminária de Mesa Preta
+ ZH: 黑色台灯
+block.sa_decor.black_panel_door
+ EN: Black Panel Door
+ PT: Porta de Painel Preta
+ ZH: 黑色镶板门
+block.sa_decor.black_shutter
+ EN: Black Shutter
+ PT: Shutter Preto
+ ZH: 黑色卷帘
+block.sa_decor.black_storefront_door
+ EN: Black Storefront Door
+ PT: Porta de Fachada Preta
+ ZH: 黑色店面门
+block.sa_decor.black_storefront_double_glass_panel
+ EN: Black Storefront Double Glass Panel
+ PT: Painel de Vidro Duplo de Fachada Preto
+ ZH: 黑色店面双玻璃门
+block.sa_decor.black_storefront_glass_panel
+ EN: Black Storefront Glass Panel
+ PT: Painel de Vidro de Fachada Preto
+ ZH: 黑色店面玻璃门
+block.sa_decor.black_storefront_header_trapdoor
+ EN: Black Storefront Header
+ PT: Complemento de Fachada Preto
+ ZH: 黑色店面招牌
+block.sa_decor.black_storefront_panel
+ EN: Black Storefront Panel
+ PT: Painel de Fachada Preto
+ ZH: 黑色店面镶板
+block.sa_decor.black_telephone
+ EN: Black Telephone
+ PT: Telefone Preto
+ ZH: 黑色电话
+block.sa_decor.blood_props
+ EN: Blood Props
+ PT: Manchas de Sangue
+ ZH: 血迹道具
+block.sa_decor.bloodied_gray_steel_door
+ EN: Bloodied Gray Steel Door
+ PT: Porta de Aço Cinza Ensanguentada
+ ZH: 沾血的灰色钢门
+block.sa_decor.blue_desk_lamp
+ EN: Blue Desk Lamp
+ PT: Luminária de Mesa Azul
+ ZH: 蓝色台灯
+block.sa_decor.blue_horizontal_siding
+ EN: Blue Horizontal Siding
+ PT: Revestimento Horizontal Azul
+ ZH: 蓝色横向护墙板
+block.sa_decor.blue_horizontal_siding_slab
+ EN: Blue Horizontal Siding Slab
+ PT: Laje de Revestimento Horizontal Azul
+ ZH: 蓝色横向护墙板台阶
+block.sa_decor.blue_horizontal_siding_stairs
+ EN: Blue Horizontal Siding Stairs
+ PT: Escadas de Revestimento Horizontal Azul
+ ZH: 蓝色横向护墙板楼梯
+block.sa_decor.blue_horizontal_siding_wall
+ EN: Blue Horizontal Siding Wall
+ PT: Muro de Revestimento Horizontal Azul
+ ZH: 蓝色横向护墙板墙
+block.sa_decor.blue_industrial_door
+ EN: Blue Industrial Door
+ PT: Porta Industrial Azul
+ ZH: 蓝色工业门
+block.sa_decor.blue_low_roof
+ EN: Blue Low Roof
+ PT: Blue Low Roof
+ ZH: 蓝色低屋顶
+block.sa_decor.blue_low_roof_top
+ EN: Blue Low Roof Ridge
+ PT: Blue Low Roof Ridge
+ ZH: 蓝色低屋顶屋脊
+block.sa_decor.blue_roof
+ EN: Blue Roof
+ PT: Blue Roof
+ ZH: 蓝色屋顶
+block.sa_decor.blue_roof_top
+ EN: Blue Roof Ridge
+ PT: Blue Roof Ridge
+ ZH: 蓝色屋顶屋脊
+block.sa_decor.blue_roof_top_slab
+ EN: Blue Roof Top Slab
+ PT: Blue Roof Top Slab
+ ZH: 蓝色屋顶顶台阶
+block.sa_decor.blue_side_bars
+ EN: Blue Side Bars
+ PT: Barras Laterais Azuis
+ ZH: 蓝色侧栏杆
+block.sa_decor.brazil_flag
+ EN: Brazilian Flag
+ PT: Bandeira do Brasil
+ ZH: 巴西国旗
+block.sa_decor.broken_ambulance
+ EN: Broken Ambulance
+ PT: Ambulância Quebrada
+ ZH: 损坏的救护车
+block.sa_decor.broken_asphalt
+ EN: Broken Asphalt
+ PT: Asfalto Quebrado
+ ZH: 破损沥青
+block.sa_decor.broken_ceiling_tile
+ EN: Broken Ceiling Tile
+ PT: Placa de Teto Quebrada
+ ZH: 破损天花板
+block.sa_decor.broken_cinder_block
+ EN: Broken Cinder Block
+ PT: Bloco de Concreto Quebrado
+ ZH: 破损煤渣砖
+block.sa_decor.broken_cinder_block_slab
+ EN: Broken Cinder Block Slab
+ PT: Laje de Blocos de Concreto Quebrados
+ ZH: 破损煤渣砖台阶
+block.sa_decor.broken_cinder_block_stairs
+ EN: Broken Cinder Block Stairs
+ PT: Escadas de Blocos de Concreto Quebrados
+ ZH: 破损煤渣砖楼梯
+block.sa_decor.broken_cinder_block_wall
+ EN: Broken Cinder Block Wall
+ PT: Muro de Blocos de Concreto Quebrados
+ ZH: 破损煤渣砖墙
+block.sa_decor.broken_glass
+ EN: Broken Glass
+ PT: Vidro Quebrado
+ ZH: 碎玻璃
+block.sa_decor.broken_light_asphalt
+ EN: Broken Light Asphalt
+ PT: Asfalto Claro Quebrado
+ ZH: 破损浅色沥青
+block.sa_decor.broken_old_computer
+ EN: Broken Old Computer
+ PT: Computador Antigo Quebrado
+ ZH: 损坏的旧电脑
+block.sa_decor.broken_pickup
+ EN: Broken Pickup
+ PT: Pickup Quebrada
+ ZH: 损坏的皮卡
+block.sa_decor.broken_police_car
+ EN: Broken Police Car
+ PT: Carro de Polícia Quebrado
+ ZH: 损坏的警车
+block.sa_decor.broken_sedan
+ EN: Broken Sedan
+ PT: Sedan Quebrado
+ ZH: 损坏的轿车
+block.sa_decor.broken_van
+ EN: Broken Van
+ PT: Van Quebrada
+ ZH: 损坏的厢式货车
+block.sa_decor.brown_glass_panel_door
+ EN: Brown Glass Panel Door
+ PT: Porta Marrom com Painel de Vidro
+ ZH: 棕色玻璃门
+block.sa_decor.brown_low_roof
+ EN: Brown Low Roof
+ PT: Brown Low Roof
+ ZH: 棕色低屋顶
+block.sa_decor.brown_low_roof_top
+ EN: Brown Low Roof Ridge
+ PT: Brown Low Roof Ridge
+ ZH: 棕色低屋顶屋脊
+block.sa_decor.brown_roof
+ EN: Brown Roof
+ PT: Brown Roof
+ ZH: 棕色屋顶
+block.sa_decor.brown_roof_top
+ EN: Brown Roof Ridge
+ PT: Brown Roof Ridge
+ ZH: 棕色屋顶屋脊
+block.sa_decor.brown_roof_top_slab
+ EN: Brown Roof Top Slab
+ PT: Brown Roof Top Slab
+ ZH: 棕色屋顶顶台阶
+block.sa_decor.brown_seam_low_roof
+ EN: Brown Seam Low Roof
+ PT: Brown Seam Low Roof
+ ZH: 棕色拼接低屋顶
+block.sa_decor.brown_seam_low_roof_top
+ EN: Brown Seam Low Roof Ridge
+ PT: Brown Seam Low Roof Ridge
+ ZH: 棕色拼接低屋顶屋脊
+block.sa_decor.brown_seam_roof
+ EN: Brown Seam Roof
+ PT: Brown Seam Roof
+ ZH: 棕色拼接屋顶
+block.sa_decor.brown_seam_roof_top
+ EN: Brown Seam Roof Ridge
+ PT: Brown Seam Roof Ridge
+ ZH: 棕色拼接屋顶屋脊
+block.sa_decor.brown_seam_roof_top_slab
+ EN: Brown Seam Roof Top Slab
+ PT: Brown Seam Roof Top Slab
+ ZH: 棕色拼接屋顶顶台阶
+block.sa_decor.cabinet_double
+ EN: Double Cabinet
+ PT: Armario Duplo
+ ZH: 双门橱柜
+block.sa_decor.cabinet_one
+ EN: Cabinet
+ PT: Armario
+ ZH: 橱柜
+block.sa_decor.cardboard_box
+ EN: Cardboard Box
+ PT: Caixa de Papelão
+ ZH: 纸板箱
+block.sa_decor.cash_register_machine
+ EN: Cash Register
+ PT: Caixa Registradora
+ ZH: 收银机
+block.sa_decor.ceiling_tile
+ EN: Ceiling Tile
+ PT: Placa de Teto
+ ZH: 天花板
+block.sa_decor.cinder_block
+ EN: Cinder Block
+ PT: Bloco de Concreto
+ ZH: 煤渣砖
+block.sa_decor.cinder_block_slab
+ EN: Cinder Block Slab
+ PT: Laje de Blocos de Concreto
+ ZH: 煤渣砖台阶
+block.sa_decor.cinder_block_stairs
+ EN: Cinder Block Stairs
+ PT: Escadas de Blocos de Concreto
+ ZH: 煤渣砖楼梯
+block.sa_decor.cinder_block_wall
+ EN: Cinder Block Wall
+ PT: Muro de Blocos de Concreto
+ ZH: 煤渣砖墙
+block.sa_decor.concrete_barrier
+ EN: Concrete Barrier
+ PT: Barreira de Concreto
+ ZH: 混凝土隔离墩
+block.sa_decor.concrete_barrier_big
+ EN: Big Concrete Barrier
+ PT: Barreira de Concreto Grande
+ ZH: 大型混凝土隔离墩
+block.sa_decor.concrete_barrier_break
+ EN: Broken Concrete Barrier
+ PT: Barreira de Concreto Quebrada
+ ZH: 破损混凝土隔离墩
+block.sa_decor.concrete_barrier_small
+ EN: Small Concrete Barrier
+ PT: Barreira de Concreto Baixa
+ ZH: 小型混凝土隔离墩
+block.sa_decor.concrete_barrier_smooth
+ EN: Smooth Concrete Barrier
+ PT: Barreira de Concreto Lisa
+ ZH: 光滑混凝土隔离墩
+block.sa_decor.construction_barrier
+ EN: Construction Barrier
+ PT: Barreira de Construção
+ ZH: 施工围挡
+block.sa_decor.construction_barrier_break
+ EN: Broken Construction Barrier
+ PT: Barreira de Construção Quebrada
+ ZH: 破损施工围挡
+block.sa_decor.construction_barrier_break_no_lamp
+ EN: Broken Construction Barrier No Lamp
+ PT: Barreira de Construção Quebrada Sem Luz
+ ZH: 无灯破损施工围挡
+block.sa_decor.construction_barrier_no_lamp
+ EN: Construction Barrier No Lamp
+ PT: Barreira de Construção Sem Luz
+ ZH: 无灯施工围挡
+block.sa_decor.counter_cabinet
+ EN: Counter Cabinet
+ PT: Gabinete de Balcão
+ ZH: 柜台柜
+block.sa_decor.cracked_asphalt
+ EN: Cracked Asphalt
+ PT: Asfalto Rachado
+ ZH: 开裂沥青
+block.sa_decor.cracked_light_asphalt
+ EN: Cracked Light Asphalt
+ PT: Asfalto Claro Rachado
+ ZH: 开裂浅色沥青
+block.sa_decor.cracked_polished_concrete
+ EN: Cracked Polished Concrete
+ PT: Concreto Polido Rachado
+ ZH: 开裂抛光混凝土
+block.sa_decor.cracked_polished_concrete_slab
+ EN: Cracked Polished Concrete Slab
+ PT: Laje de Concreto Polido Rachado
+ ZH: 开裂抛光混凝土台阶
+block.sa_decor.cracked_polished_concrete_stairs
+ EN: Cracked Polished Concrete Stairs
+ PT: Escadas de Concreto Polido Rachado
+ ZH: 开裂抛光混凝土楼梯
+block.sa_decor.cracked_white_tiles
+ EN: Cracked White Tiles
+ PT: Azulejos Brancos Rachados
+ ZH: 开裂白色瓷砖
+block.sa_decor.cracked_white_tiles_slab
+ EN: Cracked White Tiles Slab
+ PT: Laje de Azulejos Brancos Rachados
+ ZH: 开裂白色瓷砖台阶
+block.sa_decor.cream_paneled_door
+ EN: Cream Paneled Door
+ PT: Porta com Painéis Creme
+ ZH: 奶油色镶板门
+block.sa_decor.damaged_dark_brick_wall
+ EN: Damaged Dark Brick Wall
+ PT: Parede de Tijolos Escuros Danificada
+ ZH: 受损深色砖墙
+block.sa_decor.damaged_dark_brick_wall_slab
+ EN: Damaged Dark Brick Wall Slab
+ PT: Laje de Tijolos Escuros Danificada
+ ZH: 受损深色砖墙台阶
+block.sa_decor.damaged_dark_brick_wall_stairs
+ EN: Damaged Dark Brick Wall Stairs
+ PT: Escadas de Tijolos Escuros Danificadas
+ ZH: 受损深色砖墙楼梯
+block.sa_decor.damaged_dark_brick_wall_wall
+ EN: Damaged Dark Brick Wall
+ PT: Muro de Tijolos Escuros Danificado
+ ZH: 受损深色砖墙
+block.sa_decor.danger_sign
+ EN: Danger Sign
+ PT: Placa de Perigo
+ ZH: 危险标志
+block.sa_decor.dark_brick_wall
+ EN: Dark Brick Wall
+ PT: Parede de Tijolos Escuros
+ ZH: 深色砖墙
+block.sa_decor.dark_brick_wall_slab
+ EN: Dark Brick Wall Slab
+ PT: Laje de Tijolos Escuros
+ ZH: 深色砖墙台阶
+block.sa_decor.dark_brick_wall_stairs
+ EN: Dark Brick Wall Stairs
+ PT: Escadas de Tijolos Escuros
+ ZH: 深色砖墙楼梯
+block.sa_decor.dark_brick_wall_wall
+ EN: Dark Brick Wall
+ PT: Muro de Tijolos Escuros
+ ZH: 深色砖墙
+block.sa_decor.decor_workbench
+ EN: Decor Workbench
+ PT: Bancada de Decoração
+ ZH: 装饰工作台
+block.sa_decor.destroyed_ambulance
+ EN: Destroyed Ambulance
+ PT: Ambulância Destruída
+ ZH: 被摧毁的救护车
+block.sa_decor.destroyed_pickup
+ EN: Destroyed Pickup
+ PT: Pickup Destruída
+ ZH: 被摧毁的皮卡
+block.sa_decor.destroyed_police_car
+ EN: Destroyed Police Car
+ PT: Carro de Polícia Destruído
+ ZH: 被摧毁的警车
+block.sa_decor.destroyed_sedan
+ EN: Destroyed Sedan
+ PT: Sedan Destruído
+ ZH: 被摧毁的轿车
+block.sa_decor.destroyed_van
+ EN: Destroyed Van
+ PT: Van Destruída
+ ZH: 被摧毁的厢式货车
+block.sa_decor.dirty_beige_commercial_wall
+ EN: Dirty Beige Commercial Wall
+ PT: Parede Comercial Bege Suja
+ ZH: 脏污米色商用墙
+block.sa_decor.dirty_props
+ EN: Dirty Props
+ PT: Sujeira
+ ZH: 脏污道具
+block.sa_decor.double_flourecent_lamp
+ EN: Double Fluorescent Lamp
+ PT: Lâmpada Fluorescente Dupla
+ ZH: 双管荧光灯
+block.sa_decor.double_flourecent_lamp_broken
+ EN: Broken Double Fluorescent Lamp
+ PT: Lâmpada Fluorescente Dupla Quebrada
+ ZH: 损坏的双管荧光灯
+block.sa_decor.double_flourecent_lamp_flickering
+ EN: Flickering Double Fluorescent Lamp
+ PT: Lâmpada Fluorescente Dupla Piscando
+ ZH: 闪烁的双管荧光灯
+block.sa_decor.double_wooden_supply_crate
+ EN: Double Wooden Supply Crate
+ PT: Caixa Dupla de Suprimentos de Madeira
+ ZH: 双木补给箱
+block.sa_decor.drinking_fountain
+ EN: Drinking Fountain
+ PT: Bebedouro
+ ZH: 饮水机
+block.sa_decor.dual_tripod_work_light
+ EN: Dual Tripod Work Light
+ PT: Luz de Trabalho Dupla com Tripé
+ ZH: 双头三脚架工作灯
+block.sa_decor.duct_trapdoor
+ EN: Duct Trapdoor
+ PT: Alcapao de Duto
+ ZH: 风管活板门
+block.sa_decor.dumpster
+ EN: Dumpster
+ PT: Caçamba de Lixo
+ ZH: 垃圾斗
+block.sa_decor.dumpster_blue
+ EN: Blue Dumpster
+ PT: Caçamba de Lixo Azul
+ ZH: 蓝色垃圾斗
+block.sa_decor.electrical_box
+ EN: Electrical Box
+ PT: Caixa Elétrica
+ ZH: 配电箱
+block.sa_decor.electrical_outlet
+ EN: Electrical Outlet
+ PT: Tomada Elétrica
+ ZH: 电源插座
+block.sa_decor.electronic_security_door
+ EN: Electronic Security Door
+ PT: Porta de Segurança Eletrônica
+ ZH: 电子安全门
+block.sa_decor.empty_hesco_barrier
+ EN: Empty Hesco Barrier
+ PT: Barreira Hesco Vazia
+ ZH: 空赫斯科防爆墙
+block.sa_decor.exit_sign
+ EN: Exit Sign
+ PT: Placa de Saída
+ ZH: 出口标志
+block.sa_decor.fire_escape_platform
+ EN: Fire Escape Platform
+ PT: Plataforma de Escada de Incêndio
+ ZH: 消防梯平台
+block.sa_decor.fire_escape_railing
+ EN: Fire Escape Railing
+ PT: Corrimão de Escada de Incêndio
+ ZH: 消防梯栏杆
+block.sa_decor.fire_escape_stairs
+ EN: Fire Escape Stairs
+ PT: Escada de Incêndio
+ ZH: 消防楼梯
+block.sa_decor.fire_hydrant
+ EN: Fire Hydrant
+ PT: Hidrante
+ ZH: 消防栓
+block.sa_decor.floor_mirror
+ EN: Floor Mirror
+ PT: Espelho de Chão
+ ZH: 落地镜
+block.sa_decor.fly_emitter
+ EN: Fly Emitter
+ PT: Emissor de Moscas
+ ZH: 苍蝇发生器
+block.sa_decor.folding_chair_blue
+ EN: Folding Chair
+ PT: Cadeira Dobrável
+ ZH: 折叠椅
+block.sa_decor.folding_chair_green
+ EN: Green Folding Chair
+ PT: Cadeira Dobrável Verde
+ ZH: 绿色折叠椅
+block.sa_decor.food_crate
+ EN: Food Crate
+ PT: Caixa de Comida
+ ZH: 食品箱
+block.sa_decor.framed_low_roof
+ EN: Black Low Roof
+ PT: Black Low Roof
+ ZH: 黑色低屋顶
+block.sa_decor.framed_low_roof_top
+ EN: Black Low Roof Ridge
+ PT: Black Low Roof Ridge
+ ZH: 黑色低屋顶屋脊
+block.sa_decor.framed_roof
+ EN: Black Roof
+ PT: Black Roof
+ ZH: 黑色屋顶
+block.sa_decor.framed_roof_top
+ EN: Black Roof Ridge
+ PT: Black Roof Ridge
+ ZH: 黑色屋顶屋脊
+block.sa_decor.framed_roof_top_slab
+ EN: Black Roof Top Slab
+ PT: Black Roof Top Slab
+ ZH: 黑色屋顶顶台阶
+block.sa_decor.freezer
+ EN: Freezer
+ PT: Freezer
+ ZH: 冰柜
+block.sa_decor.fridge
+ EN: Fridge
+ PT: Geladeira
+ ZH: 冰箱
+block.sa_decor.fridge_green
+ EN: Green Fridge
+ PT: Geladeira Verde
+ ZH: 绿色冰箱
+block.sa_decor.fridge_red
+ EN: Red Fridge
+ PT: Geladeira Vermelha
+ ZH: 红色冰箱
+block.sa_decor.fuel_pump
+ EN: Fuel Pump
+ PT: Bomba de Combustível
+ ZH: 加油泵
+block.sa_decor.fuse_box
+ EN: Fuse Box
+ PT: Caixa de Fusíveis
+ ZH: 保险丝盒
+block.sa_decor.garage_door
+ EN: White Garage Door
+ PT: Porta de Garagem Branca
+ ZH: 白色车库门
+block.sa_decor.garage_door_metal
+ EN: Metal Garage Door
+ PT: Porta de Garagem de Metal
+ ZH: 金属车库门
+block.sa_decor.garage_door_metal_green
+ EN: Green Metal Garage Door
+ PT: Porta de Garagem de Metal Verde
+ ZH: 绿色金属车库门
+block.sa_decor.garage_door_metal_red
+ EN: Red Metal Garage Door
+ PT: Porta de Garagem de Metal Vermelha
+ ZH: 红色金属车库门
+block.sa_decor.garbage_bin
+ EN: Garbage Bin
+ PT: Lixeira
+ ZH: 垃圾桶
+block.sa_decor.garbage_props
+ EN: Garbage Props
+ PT: Lixo Espalhado
+ ZH: 垃圾道具
+block.sa_decor.gas_barrel
+ EN: Gas Barrel
+ PT: Barril de Gasolina
+ ZH: 汽油桶
+block.sa_decor.gray_fire_escape_platform
+ EN: Gray Fire Escape Platform
+ PT: Plataforma de Escada de Incêndio Cinza
+ ZH: 灰色消防梯平台
+block.sa_decor.gray_fire_escape_railing
+ EN: Gray Fire Escape Railing
+ PT: Corrimão de Escada de Incêndio Cinza
+ ZH: 灰色消防梯栏杆
+block.sa_decor.gray_fire_escape_stairs
+ EN: Gray Fire Escape Stairs
+ PT: Escada de Incêndio Cinza
+ ZH: 灰色消防楼梯
+block.sa_decor.gray_glass_door
+ EN: Gray Glass Door
+ PT: Porta de Vidro Cinza
+ ZH: 灰色玻璃门
+block.sa_decor.gray_industrial_ladder
+ EN: Gray Industrial Ladder
+ PT: Escada Industrial Cinza
+ ZH: 灰色工业梯
+block.sa_decor.gray_low_roof
+ EN: Gray Low Roof
+ PT: Gray Low Roof
+ ZH: 灰色低屋顶
+block.sa_decor.gray_low_roof_top
+ EN: Gray Low Roof Ridge
+ PT: Gray Low Roof Ridge
+ ZH: 灰色低屋顶屋脊
+block.sa_decor.gray_paver_path
+ EN: Gray Paver Path
+ PT: Caminho de Paver Cinza
+ ZH: 灰色铺砖小径
+block.sa_decor.gray_paver_path_slab
+ EN: Gray Paver Path Slab
+ PT: Laje de Paver Cinza
+ ZH: 灰色铺砖小径台阶
+block.sa_decor.gray_paver_path_stairs
+ EN: Gray Paver Path Stairs
+ PT: Escadas de Paver Cinza
+ ZH: 灰色铺砖小径楼梯
+block.sa_decor.gray_paver_path_wall
+ EN: Gray Paver Path Wall
+ PT: Muro de Paver Cinza
+ ZH: 灰色铺砖小径墙
+block.sa_decor.gray_roof
+ EN: Gray Roof
+ PT: Gray Roof
+ ZH: 灰色屋顶
+block.sa_decor.gray_roof_top
+ EN: Gray Roof Ridge
+ PT: Gray Roof Ridge
+ ZH: 灰色屋顶屋脊
+block.sa_decor.gray_roof_top_slab
+ EN: Gray Roof Top Slab
+ PT: Gray Roof Top Slab
+ ZH: 灰色屋顶顶台阶
+block.sa_decor.gray_steel_door
+ EN: Gray Steel Door
+ PT: Porta de Aço Cinza
+ ZH: 灰色钢门
+block.sa_decor.green_horizontal_siding
+ EN: Green Horizontal Siding
+ PT: Revestimento Horizontal Verde
+ ZH: 绿色横向护墙板
+block.sa_decor.green_horizontal_siding_slab
+ EN: Green Horizontal Siding Slab
+ PT: Laje de Revestimento Horizontal Verde
+ ZH: 绿色横向护墙板台阶
+block.sa_decor.green_horizontal_siding_stairs
+ EN: Green Horizontal Siding Stairs
+ PT: Escadas de Revestimento Horizontal Verde
+ ZH: 绿色横向护墙板楼梯
+block.sa_decor.green_horizontal_siding_wall
+ EN: Green Horizontal Siding Wall
+ PT: Muro de Revestimento Horizontal Verde
+ ZH: 绿色横向护墙板墙
+block.sa_decor.green_low_roof
+ EN: Green Low Roof
+ PT: Green Low Roof
+ ZH: 绿色低屋顶
+block.sa_decor.green_low_roof_top
+ EN: Green Low Roof Ridge
+ PT: Green Low Roof Ridge
+ ZH: 绿色低屋顶屋脊
+block.sa_decor.green_roof
+ EN: Green Roof
+ PT: Green Roof
+ ZH: 绿色屋顶
+block.sa_decor.green_roof_top
+ EN: Green Roof Ridge
+ PT: Green Roof Ridge
+ ZH: 绿色屋顶屋脊
+block.sa_decor.green_roof_top_slab
+ EN: Green Roof Top Slab
+ PT: Green Roof Top Slab
+ ZH: 绿色屋顶顶台阶
+block.sa_decor.green_seam_low_roof
+ EN: Green Seam Low Roof
+ PT: Green Seam Low Roof
+ ZH: 绿色拼接低屋顶
+block.sa_decor.green_seam_low_roof_top
+ EN: Green Seam Low Roof Ridge
+ PT: Green Seam Low Roof Ridge
+ ZH: 绿色拼接低屋顶屋脊
+block.sa_decor.green_seam_roof
+ EN: Green Seam Roof
+ PT: Green Seam Roof
+ ZH: 绿色拼接屋顶
+block.sa_decor.green_seam_roof_top
+ EN: Green Seam Roof Ridge
+ PT: Green Seam Roof Ridge
+ ZH: 绿色拼接屋顶屋脊
+block.sa_decor.green_seam_roof_top_slab
+ EN: Green Seam Roof Top Slab
+ PT: Green Seam Roof Top Slab
+ ZH: 绿色拼接屋顶顶台阶
+block.sa_decor.grime
+ EN: Grime
+ PT: Sujeira
+ ZH: 污垢
+block.sa_decor.grime_carpet
+ EN: Grime Carpet
+ PT: Sujeira no Chao
+ ZH: 污垢地毯
+block.sa_decor.gun_cabinet
+ EN: Gun Cabinet
+ PT: Armário de Armas
+ ZH: 枪械柜
+block.sa_decor.gun_case
+ EN: Gun Case
+ PT: Maleta de Arma
+ ZH: 枪械箱
+block.sa_decor.gun_case_green
+ EN: Green Gun Case
+ PT: Maleta de Arma Verde
+ ZH: 绿色枪械箱
+block.sa_decor.gutter
+ EN: Gutter
+ PT: Calha
+ ZH: 排水沟
+block.sa_decor.gutter_tube
+ EN: Gutter Tube
+ PT: Tubo de Calha
+ ZH: 排水管
+block.sa_decor.handgun_case
+ EN: Handgun Case
+ PT: Maleta de Pistola
+ ZH: 手枪箱
+block.sa_decor.handgun_case_green
+ EN: Green Handgun Case
+ PT: Maleta de Pistola Verde
+ ZH: 绿色手枪箱
+block.sa_decor.hesco_barrier
+ EN: Hesco Barrier
+ PT: Barreira Hesco
+ ZH: 赫斯科防爆墙
+block.sa_decor.highway_guardrail
+ EN: Highway Guardrail
+ PT: Guard Rail de Rodovia
+ ZH: 高速护栏
+block.sa_decor.hospital_cabinet
+ EN: Hospital Cabinet
+ PT: Armario Hospitalar
+ ZH: 医院储物柜
+block.sa_decor.hospital_curtain
+ EN: Hospital Curtain
+ PT: Cortina Hospitalar
+ ZH: 医院隔帘
+block.sa_decor.hospital_curtain_big
+ EN: Big Hospital Curtain
+ PT: Cortina Hospitalar Grande
+ ZH: 大型医院隔帘
+block.sa_decor.industrial_ladder
+ EN: Industrial Ladder
+ PT: Escada Industrial
+ ZH: 工业梯
+block.sa_decor.iron_duct
+ EN: Iron Duct
+ PT: Duto de Ferro
+ ZH: 铁制风管
+block.sa_decor.iron_duct_full
+ EN: Iron Duct Full
+ PT: Duto de Ferro Cheio
+ ZH: 铁制全通风管
+block.sa_decor.iv_stand
+ EN: IV Stand
+ PT: Suporte de Soro
+ ZH: 输液架
+block.sa_decor.keycard_reader
+ EN: Keycard Reader
+ PT: Leitor de Cartão
+ ZH: 门禁卡读卡器
+block.sa_decor.kitchen_cover
+ EN: Kitchen Cover
+ PT: Tampa de Cozinha
+ ZH: 厨房遮罩
+block.sa_decor.kitchen_drawer
+ EN: Kitchen Drawer
+ PT: Gaveta de Cozinha
+ ZH: 厨房抽屉
+block.sa_decor.kitchen_shelf
+ EN: Kitchen Shelf
+ PT: Prateleira de Cozinha
+ ZH: 厨房置物架
+block.sa_decor.kitchen_sink
+ EN: Kitchen Sink
+ PT: Pia de Cozinha
+ ZH: 厨房水槽
+block.sa_decor.lamp_block
+ EN: Lamp Block
+ PT: Bloco de Lampada
+ ZH: 灯块
+block.sa_decor.lamp_block_flickering
+ EN: Flickering Lamp Block
+ PT: Bloco de Lampada Piscando
+ ZH: 闪烁灯块
+block.sa_decor.light_asphalt
+ EN: Light Asphalt
+ PT: Asfalto Claro
+ ZH: 浅色沥青
+block.sa_decor.light_asphalt_corner_white_line
+ EN: Light Asphalt Corner White Line
+ PT: Asfalto Claro com Linha Branca de Canto
+ ZH: 浅色沥青白色转角线
+block.sa_decor.light_switch
+ EN: Light Switch
+ PT: Interruptor
+ ZH: 电灯开关
+block.sa_decor.locker
+ EN: Locker
+ PT: Armario
+ ZH: 储物柜
+block.sa_decor.locker_gray
+ EN: Gray Locker
+ PT: Armario Cinza
+ ZH: 灰色储物柜
+block.sa_decor.locker_green
+ EN: Green Locker
+ PT: Armario Verde
+ ZH: 绿色储物柜
+block.sa_decor.locker_red
+ EN: Red Locker
+ PT: Armario Vermelho
+ ZH: 红色储物柜
+block.sa_decor.loose_key
+ EN: Key
+ PT: Chave
+ ZH: 钥匙
+block.sa_decor.loose_keycard
+ EN: Keycard
+ PT: Cartão de Acesso
+ ZH: 门禁卡
+block.sa_decor.lying_corpse
+ EN: Lying Corpse
+ PT: Corpo Caido
+ ZH: 躺着的尸体
+block.sa_decor.manhole
+ EN: Manhole
+ PT: Tampa de Bueiro
+ ZH: 下水道井盖
+block.sa_decor.marketing_shelf
+ EN: Marketing Shelf
+ PT: Prateleira de Mercado
+ ZH: 促销货架
+block.sa_decor.marketing_shelf_wooden
+ EN: Wooden Marketing Shelf
+ PT: Prateleira de Mercado de Madeira
+ ZH: 木质促销货架
+block.sa_decor.medical_props
+ EN: Medical Props
+ PT: Props Medicos
+ ZH: 医疗道具
+block.sa_decor.medicinal_cabinet
+ EN: Medicinal Cabinet
+ PT: Armario de Medicamentos
+ ZH: 药品柜
+block.sa_decor.medicinal_crate
+ EN: Medicinal Crate
+ PT: Caixa de Medicamentos
+ ZH: 药品箱
+block.sa_decor.medium_cardboard_box
+ EN: Medium Cardboard Box
+ PT: Caixa de Papelão Média
+ ZH: 中型纸板箱
+block.sa_decor.metal_counter
+ EN: Metal Counter
+ PT: Balcão Metálico
+ ZH: 金属柜台
+block.sa_decor.metal_counter_cabinet
+ EN: Metal Counter Cabinet
+ PT: Gabinete de Balcão Metálico
+ ZH: 金属柜台柜
+block.sa_decor.metal_rack
+ EN: Metal Rack
+ PT: Prateleira Metalica
+ ZH: 金属货架
+block.sa_decor.metal_rack_side
+ EN: Metal Rack Side
+ PT: Lateral de Prateleira Metalica
+ ZH: 金属货架侧板
+block.sa_decor.microwave
+ EN: Microwave
+ PT: Micro-ondas
+ ZH: 微波炉
+block.sa_decor.military_bed
+ EN: Military Bed
+ PT: Cama Militar
+ ZH: 军用床
+block.sa_decor.military_bed_blue
+ EN: Blue Military Bed
+ PT: Cama Militar Azul
+ ZH: 蓝色军用床
+block.sa_decor.military_crate
+ EN: Military Crate
+ PT: Caixa Militar
+ ZH: 军用板条箱
+block.sa_decor.military_radio
+ EN: Military Radio
+ PT: Radio Militar
+ ZH: 军用无线电
+block.sa_decor.mint_paneled_door
+ EN: Mint Paneled Door
+ PT: Porta com Painéis Verde Menta
+ ZH: 薄荷色镶板门
+block.sa_decor.mirror
+ EN: Mirror
+ PT: Espelho
+ ZH: 镜子
+block.sa_decor.modern_trash_bin
+ EN: Modern Trash Bin
+ PT: Lixeira Moderna
+ ZH: 现代垃圾桶
+block.sa_decor.mustard_commercial_floor
+ EN: Mustard Commercial Floor
+ PT: Piso Comercial Mostarda
+ ZH: 芥末色商用地板
+block.sa_decor.mustard_commercial_floor_slab
+ EN: Mustard Commercial Floor Slab
+ PT: Laje de Piso Comercial Mostarda
+ ZH: 芥末色商用地板台阶
+block.sa_decor.noteboard
+ EN: Noteboard
+ PT: Quadro de Avisos
+ ZH: 公告板
+block.sa_decor.oak_big_wooden_crate
+ EN: Oak Big Wooden Crate
+ PT: Caixa Grande de Carvalho
+ ZH: 橡木大型木箱
+block.sa_decor.oak_supply_crate
+ EN: Oak Crate
+ PT: Caixa de Carvalho
+ ZH: 橡木木箱
+block.sa_decor.oak_wooden_drawer_double
+ EN: Double Oak Wooden Drawer
+ PT: Gaveta de Madeira de Carvalho Dupla
+ ZH: 橡木双抽屉
+block.sa_decor.oak_wooden_drawer_one
+ EN: Oak Wooden Drawer
+ PT: Gaveta de Madeira de Carvalho
+ ZH: 橡木抽屉
+block.sa_decor.office_chair
+ EN: Office Chair
+ PT: Cadeira de Escritório
+ ZH: 办公椅
+block.sa_decor.office_chair_blue
+ EN: Blue Office Chair
+ PT: Cadeira de Escritório Azul
+ ZH: 蓝色办公椅
+block.sa_decor.office_chair_broken
+ EN: Broken Office Chair
+ PT: Cadeira de Escritório Quebrada
+ ZH: 破损办公椅
+block.sa_decor.office_chair_broken_blue
+ EN: Broken Blue Office Chair
+ PT: Cadeira de Escritório Azul Quebrada
+ ZH: 破损蓝色办公椅
+block.sa_decor.office_chair_broken_brown
+ EN: Broken Brown Office Chair
+ PT: Cadeira de Escritório Marrom Quebrada
+ ZH: 破损棕色办公椅
+block.sa_decor.office_chair_broken_green
+ EN: Broken Green Office Chair
+ PT: Cadeira de Escritório Verde Quebrada
+ ZH: 破损绿色办公椅
+block.sa_decor.office_chair_broken_red
+ EN: Broken Red Office Chair
+ PT: Cadeira de Escritório Vermelha Quebrada
+ ZH: 破损红色办公椅
+block.sa_decor.office_chair_brown
+ EN: Brown Office Chair
+ PT: Cadeira de Escritório Marrom
+ ZH: 棕色办公椅
+block.sa_decor.office_chair_green
+ EN: Green Office Chair
+ PT: Cadeira de Escritório Verde
+ ZH: 绿色办公椅
+block.sa_decor.office_chair_red
+ EN: Red Office Chair
+ PT: Cadeira de Escritório Vermelha
+ ZH: 红色办公椅
+block.sa_decor.office_desk
+ EN: Office Desk
+ PT: Mesa de Escritório
+ ZH: 办公桌
+block.sa_decor.oil_barrel
+ EN: Oil Barrel
+ PT: Barril de Óleo
+ ZH: 油桶
+block.sa_decor.oil_barrel_blue
+ EN: Blue Oil Barrel
+ PT: Barril de Óleo Azul
+ ZH: 蓝色油桶
+block.sa_decor.oil_barrel_green
+ EN: Green Oil Barrel
+ PT: Barril de Óleo Verde
+ ZH: 绿色油桶
+block.sa_decor.oil_barrel_red
+ EN: Red Oil Barrel
+ PT: Barril de Óleo Vermelho
+ ZH: 红色油桶
+block.sa_decor.oil_barrel_yellow
+ EN: Yellow Oil Barrel
+ PT: Barril de Óleo Amarelo
+ ZH: 黄色油桶
+block.sa_decor.old_computer
+ EN: Old Computer
+ PT: Computador Antigo
+ ZH: 旧电脑
+block.sa_decor.paper_props
+ EN: Paper Props
+ PT: Papéis Espalhados
+ ZH: 纸张道具
+block.sa_decor.park_bench
+ EN: Park Bench
+ PT: Banco de Parque
+ ZH: 公园长椅
+block.sa_decor.pc
+ EN: PC
+ PT: PC
+ ZH: 电脑
+block.sa_decor.pc_broken
+ EN: Broken PC
+ PT: PC Quebrado
+ ZH: 破损电脑
+block.sa_decor.pickup
+ EN: Pickup
+ PT: Pickup
+ ZH: 皮卡
+block.sa_decor.planks_pallet_stack1
+ EN: Planks Pallet
+ PT: Pallet de Tábuas
+ ZH: 木板托盘
+block.sa_decor.planks_pallet_stack2
+ EN: Stacked Planks Pallet
+ PT: Pallet de Tábuas Empilhado
+ ZH: 堆叠木板托盘
+block.sa_decor.planks_pallet_stack3
+ EN: Tall Planks Pallet
+ PT: Pallet de Tábuas Alto
+ ZH: 高堆木板托盘
+block.sa_decor.plastic_chair_red
+ EN: Red Plastic Chair
+ PT: Cadeira Plástica Vermelha
+ ZH: 红色塑料椅
+block.sa_decor.plastic_chair_white
+ EN: Plastic Chair
+ PT: Cadeira Plástica
+ ZH: 塑料椅
+block.sa_decor.plastic_table_red
+ EN: Red Plastic Table
+ PT: Mesa Plástica Vermelha
+ ZH: 红色塑料桌
+block.sa_decor.plastic_table_white
+ EN: Plastic Table
+ PT: Mesa Plástica
+ ZH: 塑料桌
+block.sa_decor.police_car
+ EN: Police Car
+ PT: Carro de Polícia
+ ZH: 警车
+block.sa_decor.polished_concrete
+ EN: Polished Concrete
+ PT: Concreto Polido
+ ZH: 抛光混凝土
+block.sa_decor.polished_concrete_slab
+ EN: Polished Concrete Slab
+ PT: Laje de Concreto Polido
+ ZH: 抛光混凝土台阶
+block.sa_decor.polished_concrete_stairs
+ EN: Polished Concrete Stairs
+ PT: Escadas de Concreto Polido
+ ZH: 抛光混凝土楼梯
+block.sa_decor.portable_work_light
+ EN: Portable Work Light
+ PT: Luz de Trabalho Portátil
+ ZH: 便携工作灯
+block.sa_decor.post_transformer
+ EN: Post Transformer
+ PT: Transformador de Poste
+ ZH: 电线杆变压器
+block.sa_decor.radio
+ EN: Radio
+ PT: Radio
+ ZH: 收音机
+block.sa_decor.red_horizontal_siding
+ EN: Red Horizontal Siding
+ PT: Revestimento Horizontal Vermelho
+ ZH: 红色横向护墙板
+block.sa_decor.red_horizontal_siding_slab
+ EN: Red Horizontal Siding Slab
+ PT: Laje de Revestimento Horizontal Vermelho
+ ZH: 红色横向护墙板台阶
+block.sa_decor.red_horizontal_siding_stairs
+ EN: Red Horizontal Siding Stairs
+ PT: Escadas de Revestimento Horizontal Vermelho
+ ZH: 红色横向护墙板楼梯
+block.sa_decor.red_horizontal_siding_wall
+ EN: Red Horizontal Siding Wall
+ PT: Muro de Revestimento Horizontal Vermelho
+ ZH: 红色横向护墙板墙
+block.sa_decor.red_seam_low_roof
+ EN: Red Seam Low Roof
+ PT: Red Seam Low Roof
+ ZH: 红色拼接低屋顶
+block.sa_decor.red_seam_low_roof_top
+ EN: Red Seam Low Roof Ridge
+ PT: Red Seam Low Roof Ridge
+ ZH: 红色拼接低屋顶屋脊
+block.sa_decor.red_seam_roof
+ EN: Red Seam Roof
+ PT: Red Seam Roof
+ ZH: 红色拼接屋顶
+block.sa_decor.red_seam_roof_top
+ EN: Red Seam Roof Ridge
+ PT: Red Seam Roof Ridge
+ ZH: 红色拼接屋顶屋脊
+block.sa_decor.red_seam_roof_top_slab
+ EN: Red Seam Roof Top Slab
+ PT: Red Seam Roof Top Slab
+ ZH: 红色拼接屋顶顶台阶
+block.sa_decor.red_sleeping_bag
+ EN: Red Sleeping Bag
+ PT: Saco de Dormir Vermelho
+ ZH: 红色睡袋
+block.sa_decor.refrigerator
+ EN: Refrigerator
+ PT: Refrigerador
+ ZH: 冷藏柜
+block.sa_decor.road_sign_do_not_enter
+ EN: Do Not Enter Road Sign
+ PT: Placa de Proibido Entrar
+ ZH: 禁止驶入路牌
+block.sa_decor.road_sign_no_entry
+ EN: No Entry Road Sign
+ PT: Placa de Entrada Proibida
+ ZH: 禁止进入路牌
+block.sa_decor.road_sign_one_way
+ EN: One Way Road Sign
+ PT: Placa de Mao Unica
+ ZH: 单行道路牌
+block.sa_decor.road_sign_parking
+ EN: Parking Road Sign
+ PT: Placa de Estacionamento
+ ZH: 停车路牌
+block.sa_decor.road_sign_sharp_curves
+ EN: Sharp Curves Road Sign
+ PT: Placa de Curvas Perigosas
+ ZH: 急转弯路牌
+block.sa_decor.road_sign_speed_limit_30
+ EN: Speed Limit 30 Road Sign
+ PT: Placa de Limite 30
+ ZH: 限速 30 路牌
+block.sa_decor.road_sign_stop
+ EN: Stop Road Sign
+ PT: Placa de Pare
+ ZH: 停止路牌
+block.sa_decor.road_sign_traffic_light_warning
+ EN: Traffic Light Warning Road Sign
+ PT: Placa de Semaforo
+ ZH: 信号灯警示路牌
+block.sa_decor.safe
+ EN: Safe
+ PT: Cofre
+ ZH: 保险柜
+block.sa_decor.sand_bag
+ EN: Sand Bag
+ PT: Saco de Areia
+ ZH: 沙袋
+block.sa_decor.security_door
+ EN: Security Door
+ PT: Porta de Segurança
+ ZH: 安全门
+block.sa_decor.sedan
+ EN: Sedan
+ PT: Sedan
+ ZH: 轿车
+block.sa_decor.shutter_leaf
+ EN: Open Shutter
+ PT: Shutter Aberto
+ ZH: 打开卷帘
+block.sa_decor.sidewalk_concrete
+ EN: Sidewalk Concrete
+ PT: Concreto de Calçada
+ ZH: 人行道混凝土
+block.sa_decor.sidewalk_concrete_slab
+ EN: Sidewalk Concrete Slab
+ PT: Laje de Concreto de Calçada
+ ZH: 人行道混凝土台阶
+block.sa_decor.small_cardboard_box
+ EN: Small Cardboard Box
+ PT: Caixa de Papelão Pequena
+ ZH: 小型纸板箱
+block.sa_decor.small_cardboard_box_stack1
+ EN: Small Cardboard Boxes (2)
+ PT: Caixas de Papelão Pequenas (2)
+ ZH: 小型纸板箱(2 个)
+block.sa_decor.small_cardboard_box_stack2
+ EN: Small Cardboard Boxes (3)
+ PT: Caixas de Papelão Pequenas (3)
+ ZH: 小型纸板箱(3 个)
+block.sa_decor.small_cardboard_box_stack3
+ EN: Small Cardboard Boxes (4)
+ PT: Caixas de Papelão Pequenas (4)
+ ZH: 小型纸板箱(4 个)
+block.sa_decor.small_garage_door
+ EN: Metal Small Garage Door
+ PT: Porta de Garagem Pequena de Metal
+ ZH: 金属小型车库门
+block.sa_decor.small_garage_door_metal_green
+ EN: Green Metal Small Garage Door
+ PT: Porta de Garagem Pequena Verde
+ ZH: 绿色金属小型车库门
+block.sa_decor.small_garage_door_metal_red
+ EN: Red Metal Small Garage Door
+ PT: Porta de Garagem Pequena Vermelha
+ ZH: 红色金属小型车库门
+block.sa_decor.small_garage_door_white
+ EN: White Small Garage Door
+ PT: Porta de Garagem Pequena Branca
+ ZH: 白色小型车库门
+block.sa_decor.small_gun_cabinet
+ EN: Small Gun Cabinet
+ PT: Armário de Armas Pequeno
+ ZH: 小型枪械柜
+block.sa_decor.small_lamp
+ EN: Small Lamp
+ PT: Pequena Lâmpada
+ ZH: 小灯
+block.sa_decor.small_lamp_flickering
+ EN: Flickering Small Lamp
+ PT: Pequena Lâmpada Piscando
+ ZH: 闪烁小灯
+block.sa_decor.small_mirror
+ EN: Small Mirror
+ PT: Espelho Pequeno
+ ZH: 小镜子
+block.sa_decor.smart_tv
+ EN: Smart TV
+ PT: Smart TV
+ ZH: 智能电视
+block.sa_decor.smart_tv_broken
+ EN: Broken Smart TV
+ PT: Smart TV Quebrada
+ ZH: 破损智能电视
+block.sa_decor.spruce_big_wooden_crate
+ EN: Spruce Big Wooden Crate
+ PT: Caixa Grande de Pinheiro
+ ZH: 云杉大型木箱
+block.sa_decor.spruce_supply_crate
+ EN: Spruce Crate
+ PT: Caixa de Pinheiro
+ ZH: 云杉木箱
+block.sa_decor.spruce_wooden_drawer_double
+ EN: Double Spruce Wooden Drawer
+ PT: Gaveta de Madeira de Pinheiro Dupla
+ ZH: 云杉双抽屉
+block.sa_decor.spruce_wooden_drawer_one
+ EN: Spruce Wooden Drawer
+ PT: Gaveta de Madeira de Pinheiro
+ ZH: 云杉木抽屉
+block.sa_decor.store_shelf
+ EN: Store Shelf
+ PT: Prateleira de Loja
+ ZH: 商店货架
+block.sa_decor.stove
+ EN: Stove
+ PT: Fogão
+ ZH: 炉灶
+block.sa_decor.stove_green
+ EN: Green Stove
+ PT: Fogão Verde
+ ZH: 绿色炉灶
+block.sa_decor.stove_red
+ EN: Red Stove
+ PT: Fogão Vermelho
+ ZH: 红色炉灶
+block.sa_decor.street_light_arm
+ EN: Street Light Arm
+ PT: Braço de Poste de Rua
+ ZH: 路灯臂
+block.sa_decor.street_light_base
+ EN: Street Light Base
+ PT: Base de Poste de Rua
+ ZH: 路灯底座
+block.sa_decor.street_light_lamp_broken
+ EN: Broken Street Light Lamp
+ PT: Lâmpada de Poste Quebrada
+ ZH: 破损路灯灯头
+block.sa_decor.street_light_lamp_flickering
+ EN: Flickering Street Light Lamp
+ PT: Lâmpada de Poste Piscando
+ ZH: 闪烁路灯灯头
+block.sa_decor.street_light_lamp_off
+ EN: Street Light Lamp Off
+ PT: Lâmpada de Poste Apagada
+ ZH: 关闭的路灯灯头
+block.sa_decor.street_light_lamp_on
+ EN: Street Light Lamp
+ PT: Lâmpada de Poste
+ ZH: 路灯灯头
+block.sa_decor.street_light_pole
+ EN: Street Light Pole
+ PT: Tubo de Poste de Rua
+ ZH: 路灯杆
+block.sa_decor.street_light_support_arm
+ EN: Street Light Support Arm
+ PT: Braço de Suporte de Poste de Rua
+ ZH: 路灯支撑臂
+block.sa_decor.street_light_top
+ EN: Street Light Top
+ PT: Topo de Poste de Rua
+ ZH: 路灯顶部
+block.sa_decor.supply_drop
+ EN: Supply Drop
+ PT: Drop de Suprimentos
+ ZH: 补给空投箱
+block.sa_decor.tire_block
+ EN: Tire Block
+ PT: Bloco de Pneu
+ ZH: 轮胎块
+block.sa_decor.tire_block_stack2
+ EN: Tire Block Stack
+ PT: Pilha de Pneus
+ ZH: 轮胎堆
+block.sa_decor.tire_block_stack2v
+ EN: Tire Block Stack Variant
+ PT: Variação da Pilha de Pneus
+ ZH: 轮胎堆变体
+block.sa_decor.tire_block_stack3
+ EN: Tall Tire Block Stack
+ PT: Pilha Alta de Pneus
+ ZH: 高堆轮胎
+block.sa_decor.tire_block_stack3v
+ EN: Tall Tire Block Stack Variant
+ PT: Variação da Pilha Alta de Pneus
+ ZH: 高堆轮胎变体
+block.sa_decor.toilet
+ EN: Toilet
+ PT: Vaso Sanitário
+ ZH: 马桶
+block.sa_decor.toilet_paper
+ EN: Toilet Paper
+ PT: Papel Higiênico
+ ZH: 厕纸
+block.sa_decor.tool_storage
+ EN: Tool Storage
+ PT: Armazenamento de Ferramentas
+ ZH: 工具收纳架
+block.sa_decor.traffic_cone
+ EN: Traffic Cone
+ PT: Cone de Trânsito
+ ZH: 交通锥
+block.sa_decor.traffic_cone_tall
+ EN: Tall Traffic Cone
+ PT: Cone de Trânsito Alto
+ ZH: 高交通锥
+block.sa_decor.trash_bin
+ EN: Trash Bin
+ PT: Cesto de Lixo
+ ZH: 垃圾桶
+block.sa_decor.trash_can
+ EN: Trash Can
+ PT: Lixeira
+ ZH: 垃圾桶
+block.sa_decor.trash_props
+ EN: Trash Props
+ PT: Props de Lixo
+ ZH: 垃圾道具
+block.sa_decor.tv
+ EN: TV
+ PT: TV
+ ZH: 电视
+block.sa_decor.tv_broken
+ EN: Broken TV
+ PT: TV Quebrada
+ ZH: 破损电视
+block.sa_decor.umbrella_sign
+ EN: Umbrella Sign
+ PT: Placa de Guarda-sol
+ ZH: 伞形招牌
+block.sa_decor.urban_fence
+ EN: Urban Fence
+ PT: Grade Urbana
+ ZH: 城市围栏
+block.sa_decor.urban_fence_door
+ EN: Urban Fence Door
+ PT: Portão de Grade Urbana
+ ZH: 城市围栏门
+block.sa_decor.urban_fence_wire
+ EN: Urban Fence Wire
+ PT: Arame de Grade Urbana
+ ZH: 城市围栏铁丝
+block.sa_decor.usa_flag
+ EN: United States Flag
+ PT: Bandeira dos Estados Unidos
+ ZH: 美国国旗
+block.sa_decor.van
+ EN: Van
+ PT: Van
+ ZH: 厢式货车
+block.sa_decor.vending_machine
+ EN: Vending Machine
+ PT: Máquina de Vendas
+ ZH: 自动售货机
+block.sa_decor.wall_clock
+ EN: Wall Clock
+ PT: Relógio de Parede
+ ZH: 挂钟
+block.sa_decor.wall_metal_counter_cabinet
+ EN: Wall Metal Counter Cabinet
+ PT: Gabinete Metálico de Parede
+ ZH: 壁挂金属柜台柜
+block.sa_decor.wall_metal_rack
+ EN: Wall Metal Rack
+ PT: Prateleira Metalica de Parede
+ ZH: 壁挂金属货架
+block.sa_decor.wall_vent
+ EN: Wall Vent
+ PT: Grade de Ventilação de Parede
+ ZH: 墙面通风口
+block.sa_decor.wall_wooden_drawer
+ EN: Wall Wooden Drawer
+ PT: Gaveta de Madeira de Parede
+ ZH: 壁挂木抽屉
+block.sa_decor.wall_wooden_drawer_glass
+ EN: Glass Wall Wooden Drawer
+ PT: Gaveta de Madeira de Parede com Vidro
+ ZH: 玻璃壁挂木抽屉
+block.sa_decor.wardrobe
+ EN: Wardrobe
+ PT: Guarda-roupa
+ ZH: 衣柜
+block.sa_decor.white_commercial_floor
+ EN: White Commercial Floor
+ PT: Piso Comercial Branco
+ ZH: 白色商用地板
+block.sa_decor.white_commercial_floor_slab
+ EN: White Commercial Floor Slab
+ PT: Laje de Piso Comercial Branco
+ ZH: 白色商用地板台阶
+block.sa_decor.white_full_glass_door
+ EN: White Full Glass Door
+ PT: Porta Branca de Vidro Inteiro
+ ZH: 白色全玻璃门
+block.sa_decor.white_horizontal_siding
+ EN: White Horizontal Siding
+ PT: Revestimento Horizontal Branco
+ ZH: 白色横向护墙板
+block.sa_decor.white_horizontal_siding_slab
+ EN: White Horizontal Siding Slab
+ PT: Laje de Revestimento Horizontal Branco
+ ZH: 白色横向护墙板台阶
+block.sa_decor.white_horizontal_siding_stairs
+ EN: White Horizontal Siding Stairs
+ PT: Escadas de Revestimento Horizontal Branco
+ ZH: 白色横向护墙板楼梯
+block.sa_decor.white_horizontal_siding_wall
+ EN: White Horizontal Siding Wall
+ PT: Muro de Revestimento Horizontal Branco
+ ZH: 白色横向护墙板墙
+block.sa_decor.white_plain_door
+ EN: White Plain Door
+ PT: Porta Branca Lisa
+ ZH: 白色素门
+block.sa_decor.white_plaster_wall
+ EN: White Plaster Wall
+ PT: Parede de Reboco Branco
+ ZH: 白色石膏墙
+block.sa_decor.white_plaster_wall_slab
+ EN: White Plaster Wall Slab
+ PT: Laje de Reboco Branco
+ ZH: 白色石膏墙台阶
+block.sa_decor.white_plaster_wall_stairs
+ EN: White Plaster Wall Stairs
+ PT: Escadas de Reboco Branco
+ ZH: 白色石膏墙楼梯
+block.sa_decor.white_plaster_wall_wall
+ EN: White Plaster Wall
+ PT: Muro de Reboco Branco
+ ZH: 白色石膏墙
+block.sa_decor.white_seam_low_roof
+ EN: White Seam Low Roof
+ PT: White Seam Low Roof
+ ZH: 白色拼接低屋顶
+block.sa_decor.white_seam_low_roof_top
+ EN: White Seam Low Roof Ridge
+ PT: White Seam Low Roof Ridge
+ ZH: 白色拼接低屋顶屋脊
+block.sa_decor.white_seam_roof
+ EN: White Seam Roof
+ PT: White Seam Roof
+ ZH: 白色拼接屋顶
+block.sa_decor.white_seam_roof_top
+ EN: White Seam Roof Ridge
+ PT: White Seam Roof Ridge
+ ZH: 白色拼接屋顶屋脊
+block.sa_decor.white_seam_roof_top_slab
+ EN: White Seam Roof Top Slab
+ PT: White Seam Roof Top Slab
+ ZH: 白色拼接屋顶顶台阶
+block.sa_decor.white_shutter
+ EN: White Shutter
+ PT: Shutter Branco
+ ZH: 白色卷帘
+block.sa_decor.white_smooth_table
+ EN: White Smooth Table
+ PT: Mesa Lisa Branca
+ ZH: 白色光滑桌子
+block.sa_decor.white_stained_glass_door
+ EN: White Stained Glass Door
+ PT: Porta Branca com Vidro Manchado
+ ZH: 白色染色玻璃门
+block.sa_decor.white_telephone
+ EN: White Telephone
+ PT: Telefone Branco
+ ZH: 白色电话
+block.sa_decor.white_tiles
+ EN: White Tiles
+ PT: Azulejos Brancos
+ ZH: 白色瓷砖
+block.sa_decor.white_tiles_slab
+ EN: White Tiles Slab
+ PT: Laje de Azulejos Brancos
+ ZH: 白色瓷砖台阶
+block.sa_decor.wire_connector
+ EN: Wire Connector
+ PT: Conector de Cabo
+ ZH: 电线连接器
+block.sa_decor.wires
+ EN: Wires
+ PT: Fios
+ ZH: 电线
+block.sa_decor.wood_plank_pile
+ EN: Wood Plank Pile
+ PT: Pilha de Tábuas de Madeira
+ ZH: 木板堆
+block.sa_decor.wooden_scaffolding
+ EN: Wooden Scaffolding
+ PT: Andaime de Madeira
+ ZH: 木脚手架
+block.sa_decor.wooden_seat
+ EN: Wooden Seat
+ PT: Banco de Madeira
+ ZH: 木凳
+block.sa_decor.wooden_seat_beige
+ EN: Beige Wooden Seat
+ PT: Banco de Madeira Bege
+ ZH: 米色木凳
+block.sa_decor.wooden_seat_blue
+ EN: Blue Wooden Seat
+ PT: Banco de Madeira Azul
+ ZH: 蓝色木凳
+block.sa_decor.wooden_seat_gray
+ EN: Gray Wooden Seat
+ PT: Banco de Madeira Cinza
+ ZH: 灰色木凳
+block.sa_decor.wooden_seat_green
+ EN: Green Wooden Seat
+ PT: Banco de Madeira Verde
+ ZH: 绿色木凳
+block.sa_decor.wooden_seat_red
+ EN: Red Wooden Seat
+ PT: Banco de Madeira Vermelho
+ ZH: 红色木凳
+block.sa_decor.wooden_shelves
+ EN: Wooden Shelves
+ PT: Prateleiras de Madeira
+ ZH: 木架
+block.sa_decor.wooden_supply_crate
+ EN: Wooden Supply Crate
+ PT: Caixa de Suprimentos de Madeira
+ ZH: 木制补给箱
+block.sa_decor.wooden_table
+ EN: Wooden Table
+ PT: Mesa de Madeira
+ ZH: 木桌
+block.sa_decor.yellow_security_door
+ EN: Yellow Security Door
+ PT: Porta de Segurança Amarela
+ ZH: 黄色安全门
+category.sa_decor.decor_workbench.decor
+ EN: Decor
+ PT: Decoração
+ ZH: 装饰
+category.sa_decor.decor_workbench.functional
+ EN: Functional
+ PT: Funcionais
+ ZH: 功能性
+category.sa_decor.decor_workbench.misc
+ EN: Miscellaneous
+ PT: Diversos
+ ZH: 其他
+category.sa_decor.decor_workbench.storage
+ EN: Storage
+ PT: Armazenamento
+ ZH: 储物
+container.sa_decor.ambulance_trunk
+ EN: Ambulance Trunk
+ PT: Porta-malas da Ambulância
+ ZH: 救护车后备箱
+container.sa_decor.ammo_box
+ EN: Ammo Box
+ PT: Caixa de Municao
+ ZH: 弹药箱
+container.sa_decor.ammo_box_stack_2
+ EN: Ammo Box Stack
+ PT: Pilha de Caixas de Municao
+ ZH: 弹药箱堆
+container.sa_decor.ammo_box_stack_3
+ EN: Large Ammo Box Stack
+ PT: Pilha Grande de Caixas de Municao
+ ZH: 大型弹药箱堆
+container.sa_decor.ammo_box_stack_4
+ EN: Ammo Box Stack x4
+ PT: Pilha de 4 Caixas de Municao
+ ZH: 弹药箱堆 x4
+container.sa_decor.attach_case
+ EN: Attach Case
+ PT: Maleta
+ ZH: 配件箱
+container.sa_decor.big_metal_locker
+ EN: Big Metal Locker
+ PT: Armario Metalico Grande
+ ZH: 大型金属储物柜
+container.sa_decor.big_military_crate
+ EN: Big Military Crate
+ PT: Caixa Militar Grande
+ ZH: 大型军用板条箱
+container.sa_decor.big_wooden_crate
+ EN: Big Wooden Crate
+ PT: Caixa de Madeira Grande
+ ZH: 大型木箱
+container.sa_decor.birch_supply_crate
+ EN: Birch Crate
+ PT: Caixa de Bétula
+ ZH: 白桦木箱
+container.sa_decor.birch_wooden_drawer
+ EN: Birch Wooden Drawer
+ PT: Gaveta de Madeira de Bétula
+ ZH: 白桦木抽屉
+container.sa_decor.cabinet
+ EN: Cabinet
+ PT: Armario
+ ZH: 橱柜
+container.sa_decor.cardboard_box
+ EN: Cardboard Box
+ PT: Caixa de Papelão
+ ZH: 纸板箱
+container.sa_decor.cash_register_machine
+ EN: Cash Register
+ PT: Caixa Registradora
+ ZH: 收银机
+container.sa_decor.counter_cabinet
+ EN: Counter Cabinet
+ PT: Gabinete de Balcão
+ ZH: 柜台柜
+container.sa_decor.decor_workbench
+ EN: Decor Workbench
+ PT: Bancada de Decoração
+ ZH: 装饰工作台
+container.sa_decor.double_wooden_supply_crate
+ EN: Double Wooden Supply Crate
+ PT: Caixa Dupla de Suprimentos de Madeira
+ ZH: 双木补给箱
+container.sa_decor.dumpster
+ EN: Dumpster
+ PT: Caçamba de Lixo
+ ZH: 垃圾斗
+container.sa_decor.food_crate
+ EN: Food Crate
+ PT: Caixa de Comida
+ ZH: 食品箱
+container.sa_decor.freezer
+ EN: Freezer
+ PT: Freezer
+ ZH: 冰柜
+container.sa_decor.fridge
+ EN: Fridge
+ PT: Geladeira
+ ZH: 冰箱
+container.sa_decor.garbage_bin
+ EN: Garbage Bin
+ PT: Lixeira
+ ZH: 垃圾桶
+container.sa_decor.gun_cabinet
+ EN: Gun Cabinet
+ PT: Armário de Armas
+ ZH: 枪械柜
+container.sa_decor.gun_case
+ EN: Gun Case
+ PT: Maleta de Arma
+ ZH: 枪械箱
+container.sa_decor.handgun_case
+ EN: Handgun Case
+ PT: Maleta de Pistola
+ ZH: 手枪箱
+container.sa_decor.hospital_cabinet
+ EN: Hospital Cabinet
+ PT: Armario Hospitalar
+ ZH: 医院储物柜
+container.sa_decor.kitchen_drawer
+ EN: Kitchen Drawer
+ PT: Gaveta de Cozinha
+ ZH: 厨房抽屉
+container.sa_decor.kitchen_shelf
+ EN: Kitchen Shelf
+ PT: Prateleira de Cozinha
+ ZH: 厨房置物架
+container.sa_decor.locker
+ EN: Locker
+ PT: Armario
+ ZH: 储物柜
+container.sa_decor.marketing_shelf
+ EN: Marketing Shelf
+ PT: Prateleira de Mercado
+ ZH: 促销货架
+container.sa_decor.marketing_shelf_wooden
+ EN: Wooden Marketing Shelf
+ PT: Prateleira de Mercado de Madeira
+ ZH: 木质促销货架
+container.sa_decor.medicinal_cabinet
+ EN: Medicinal Cabinet
+ PT: Armario de Medicamentos
+ ZH: 药品柜
+container.sa_decor.medicinal_crate
+ EN: Medicinal Crate
+ PT: Caixa de Medicamentos
+ ZH: 药品箱
+container.sa_decor.medium_cardboard_box
+ EN: Medium Cardboard Box
+ PT: Caixa de Papelão Média
+ ZH: 中型纸板箱
+container.sa_decor.metal_counter_cabinet
+ EN: Metal Counter Cabinet
+ PT: Gabinete de Balcão Metálico
+ ZH: 金属柜台柜
+container.sa_decor.metal_rack
+ EN: Metal Rack
+ PT: Prateleira Metalica
+ ZH: 金属货架
+container.sa_decor.military_crate
+ EN: Military Crate
+ PT: Caixa Militar
+ ZH: 军用板条箱
+container.sa_decor.modern_trash_bin
+ EN: Modern Trash Bin
+ PT: Lixeira Moderna
+ ZH: 现代垃圾桶
+container.sa_decor.oak_supply_crate
+ EN: Oak Crate
+ PT: Caixa de Carvalho
+ ZH: 橡木木箱
+container.sa_decor.oak_wooden_drawer
+ EN: Oak Wooden Drawer
+ PT: Gaveta de Madeira de Carvalho
+ ZH: 橡木抽屉
+container.sa_decor.office_desk
+ EN: Office Desk
+ PT: Mesa de Escritório
+ ZH: 办公桌
+container.sa_decor.pickup_bed
+ EN: Pickup Bed
+ PT: Caçamba da Pickup
+ ZH: 皮卡货斗
+container.sa_decor.police_car_trunk
+ EN: Police Car Trunk
+ PT: Porta-malas do Carro de Polícia
+ ZH: 警车后备箱
+container.sa_decor.refrigerator
+ EN: Refrigerator
+ PT: Refrigerador
+ ZH: 冷藏柜
+container.sa_decor.safe
+ EN: Safe
+ PT: Cofre
+ ZH: 保险柜
+container.sa_decor.sedan_white_trunk
+ EN: Sedan Trunk
+ PT: Porta-malas do Sedan
+ ZH: 轿车后备箱
+container.sa_decor.small_cardboard_box
+ EN: Small Cardboard Box
+ PT: Caixa de Papelão Pequena
+ ZH: 小型纸板箱
+container.sa_decor.small_cardboard_box_stack1
+ EN: Small Cardboard Boxes (2)
+ PT: Caixas de Papelão Pequenas (2)
+ ZH: 小型纸板箱(2 个)
+container.sa_decor.small_cardboard_box_stack2
+ EN: Small Cardboard Boxes (3)
+ PT: Caixas de Papelão Pequenas (3)
+ ZH: 小型纸板箱(3 个)
+container.sa_decor.small_cardboard_box_stack3
+ EN: Small Cardboard Boxes (4)
+ PT: Caixas de Papelão Pequenas (4)
+ ZH: 小型纸板箱(4 个)
+container.sa_decor.small_gun_cabinet
+ EN: Small Gun Cabinet
+ PT: Armário de Armas Pequeno
+ ZH: 小型枪械柜
+container.sa_decor.spruce_supply_crate
+ EN: Spruce Crate
+ PT: Caixa de Pinheiro
+ ZH: 云杉木箱
+container.sa_decor.spruce_wooden_drawer
+ EN: Spruce Wooden Drawer
+ PT: Gaveta de Madeira de Pinheiro
+ ZH: 云杉木抽屉
+container.sa_decor.store_shelf
+ EN: Store Shelf
+ PT: Prateleira de Loja
+ ZH: 商店货架
+container.sa_decor.stove
+ EN: Stove
+ PT: Fogão
+ ZH: 炉灶
+container.sa_decor.supply_drop
+ EN: Supply Drop
+ PT: Drop de Suprimentos
+ ZH: 补给空投箱
+container.sa_decor.tool_storage
+ EN: Tool Storage
+ PT: Armazenamento de Ferramentas
+ ZH: 工具收纳架
+container.sa_decor.trash_bin
+ EN: Trash Bin
+ PT: Cesto de Lixo
+ ZH: 垃圾桶
+container.sa_decor.trash_can
+ EN: Trash Can
+ PT: Lixeira
+ ZH: 垃圾桶
+container.sa_decor.van_trunk
+ EN: Van Trunk
+ PT: Porta-malas da Van
+ ZH: 厢式货车后备箱
+container.sa_decor.vending_machine
+ EN: Vending Machine
+ PT: Máquina de Vendas
+ ZH: 自动售货机
+container.sa_decor.wall_metal_counter_cabinet
+ EN: Wall Metal Counter Cabinet
+ PT: Gabinete Metálico de Parede
+ ZH: 壁挂金属柜台柜
+container.sa_decor.wall_metal_rack
+ EN: Wall Metal Rack
+ PT: Prateleira Metalica de Parede
+ ZH: 壁挂金属货架
+container.sa_decor.wall_wooden_drawer
+ EN: Wall Wooden Drawer
+ PT: Gaveta de Madeira de Parede
+ ZH: 壁挂木抽屉
+container.sa_decor.wardrobe
+ EN: Wardrobe
+ PT: Guarda-roupa
+ ZH: 衣柜
+container.sa_decor.wooden_shelves
+ EN: Wooden Shelves
+ PT: Prateleiras de Madeira
+ ZH: 木架
+container.sa_decor.wooden_supply_crate
+ EN: Wooden Supply Crate
+ PT: Caixa de Suprimentos de Madeira
+ ZH: 木制补给箱
+entity.sa_decor.air_drop
+ EN: Air Drop
+ PT: Suprimento Aéreo
+ ZH: 空投
+gui.sa_decor.decor_workbench.cost
+ EN: Cost
+ PT: Custo
+ ZH: 花费
+gui.sa_decor.decor_workbench.materials_only
+ EN: Show recipes with available materials only
+ PT: Mostrar apenas receitas com materiais disponíveis
+ ZH: 仅显示有可用材料的配方
+item.sa_decor.broken_padlock
+ EN: Broken Padlock
+ PT: Cadeado Quebrado
+ ZH: 破损挂锁
+item.sa_decor.flare_gun
+ EN: Flare Gun
+ PT: Pistola de Sinalização
+ ZH: 信号枪
+item.sa_decor.key
+ EN: Key
+ PT: Chave
+ ZH: 钥匙
+item.sa_decor.keycard
+ EN: Keycard
+ PT: Cartão de Acesso
+ ZH: 门禁卡
+item.sa_decor.linking_tool
+ EN: Linking Tool
+ PT: Ferramenta de Link
+ ZH: 连接工具
+item.sa_decor.lock
+ EN: Padlock
+ PT: Cadeado
+ ZH: 挂锁
+item.sa_decor.lockpick
+ EN: Lockpick
+ PT: Gazua
+ ZH: 撬锁器
+item.sa_decor.loot_crate_wand
+ EN: Loot Crate Wand
+ PT: Varinha de Loot Crate
+ ZH: 战利品箱魔杖
+item.sa_decor.rotation_wand
+ EN: Rotation Wand
+ PT: Varinha de Rotacao
+ ZH: 旋转魔杖
+item.sa_decor.structure_access_tool
+ EN: Structure Access Tool
+ PT: Ferramenta de Acesso de Estrutura
+ ZH: 结构门禁工具
+item.sa_decor.variation_tool
+ EN: Variation Tool
+ PT: Ferramenta de Variacao
+ ZH: 变体工具
+itemGroup.sa_decor
+ EN: Survivor's Arsenal: Loot & Decor
+ PT: SA Decor
+ ZH: 幸存者军火库:战利品与装饰
+key.categories.sa_decor
+ EN: SA Decor
+ PT: SA Decor
+ ZH: SA 装饰
+key.sa_decor.qte
+ EN: Quick Action
+ PT: Ação Rápida
+ ZH: 快速操作
+message.sa_decor.access.break_denied
+ EN: You cannot break this | Owner: %s
+ PT: Você não pode quebrar isto | Dono: %s
+ ZH: 你无法破坏这个 | 所有者:%s
+message.sa_decor.access.break_denied_survival
+ EN: Protected system
+ PT: Sistema protegido
+ ZH: 受保护的系统
+message.sa_decor.access.not_owner
+ EN: Access denied | Owner: %s
+ PT: Acesso negado | Dono: %s
+ ZH: 拒绝访问 | 所有者:%s
+message.sa_decor.airdrop.arrived
+ EN: ✈ Supply drop has landed!
+ PT: ✈ O suprimento pousou!
+ ZH: ✈ 补给空投已落地!
+message.sa_decor.airdrop.arriving
+ EN: Airdrop arriving in %ss
+ PT: Suprimento chegando em %ss
+ ZH: 空投将在 %s 秒后到达
+message.sa_decor.airdrop.landing_failed
+ EN: Supply drop aborted: no safe landing space.
+ PT: Lançamento cancelado: não há espaço seguro para o suprimento.
+ ZH: 补给空投中止:没有安全降落点。
+message.sa_decor.cable.already_connected
+ EN: These blocks are already connected
+ PT: Estes blocos já estão conectados
+ ZH: 这些方块已经连接
+message.sa_decor.cable.connected
+ EN: Cable connected. Used %s cable
+ PT: Cabo conectado. Foram usados %s cabos
+ ZH: 电缆已连接。已使用 %s 根电缆
+message.sa_decor.cable.cut
+ EN: Cut %s cable(s) and recovered %s cable
+ PT: %s cabo(s) cortado(s); %s cabos recuperados
+ ZH: 切断 %s 根电缆并回收 %s 根电缆
+message.sa_decor.cable.dimension_changed
+ EN: Cable selection cleared after changing dimension
+ PT: Seleção do cabo limpa após mudar de dimensão
+ ZH: 更换维度后,电缆选择已清除
+message.sa_decor.cable.drawing_started_branch
+ EN: First end attached to the network. Carry it and click to attach the other end
+ PT: Primeira ponta presa na rede. Leve o cabo e clique para fixar a outra ponta
+ ZH: 第一端已连接到网络。拿着它点击以连接另一端
+message.sa_decor.cable.drawing_started_source
+ EN: First end attached to the power source. Carry it and click to attach the other end
+ PT: Primeira ponta presa na fonte. Leve o cabo e clique para fixar a outra ponta
+ ZH: 第一端已连接到电源。拿着它点击以连接另一端
+message.sa_decor.cable.endpoint_detected
+ EN: Nearby energy consumer detected at %s %s %s
+ PT: Consumidor de energia detectado em %s %s %s
+ ZH: 在 %s %s %s 检测到附近的用电设备
+message.sa_decor.cable.finished_extension
+ EN: Powered cable extension finished. Used %s cable
+ PT: Extensão energizada finalizada. Foram usados %s cabo(s)
+ ZH: 供电电缆延长完成。已使用 %s 根电缆
+message.sa_decor.cable.finished_powered
+ EN: Powered cable finished. Used %s cable
+ PT: Cabo energizado finalizado. Foram usados %s cabo(s)
+ ZH: 供电电缆完成。已使用 %s 根电缆
+message.sa_decor.cable.first_point
+ EN: First cable point selected at %s %s %s
+ PT: Primeiro ponto do cabo selecionado em %s %s %s
+ ZH: 第一个电缆点在 %s %s %s 已选定
+message.sa_decor.cable.invalid_endpoint
+ EN: This block is not an electrical endpoint
+ PT: Este bloco não é um ponto elétrico
+ ZH: 这个方块不是电气端点
+message.sa_decor.cable.invalid_pair
+ EN: Connect an energy source to an energy consumer
+ PT: Conecte uma fonte de energia a um consumidor
+ ZH: 请将电源连接到用电设备
+message.sa_decor.cable.none_to_cut
+ EN: No cable crosses this block
+ PT: Nenhum cabo passa por este bloco
+ ZH: 没有电缆穿过这个方块
+message.sa_decor.cable.not_enough
+ EN: You need %s cable, but only have %s
+ PT: Você precisa de %s cabos, mas possui apenas %s
+ ZH: 你需要 %s 根电缆,但只有 %s 根
+message.sa_decor.cable.not_enough_points
+ EN: Add at least one cable segment before finishing
+ PT: Adicione pelo menos um segmento antes de finalizar
+ ZH: 结束前至少添加一段电缆
+message.sa_decor.cable.out_of_reach
+ EN: This point is outside the %s-block cable reach
+ PT: Este ponto passou do alcance de %s blocos
+ ZH: 这个点超出了 %s 格的电缆铺设范围
+message.sa_decor.cable.point_added
+ EN: Cable point added. %s segment(s), %s cable required
+ PT: Ponto adicionado. %s segmento(s), precisa de %s cabo(s)
+ ZH: 电缆点已添加。%s 段,需要 %s 根电缆
+message.sa_decor.cable.second_point_required
+ EN: Click a surface to attach the second end
+ PT: Clique em uma superfície para fixar a segunda ponta
+ ZH: 点击一个表面以连接第二端
+message.sa_decor.cable.selection_cleared
+ EN: Cable selection cleared
+ PT: Seleção do cabo removida
+ ZH: 电缆选择已清除
+message.sa_decor.cable.source_lost
+ EN: The cable power source is no longer available
+ PT: A fonte de energia do cabo não está mais disponível
+ ZH: 电缆电源已不可用
+message.sa_decor.cable.source_required
+ EN: Start the cable from a power source or an existing powered cable
+ PT: Comece o cabo em uma fonte de energia ou em outro cabo energizado
+ ZH: 请从电源或已有的供电电缆开始铺设
+message.sa_decor.cable.too_far
+ EN: Cable is too long. Maximum: %s blocks
+ PT: Cabo muito longo. Máximo: %s blocos
+ ZH: 电缆太长。最大:%s 格
+message.sa_decor.cable.too_many_points
+ EN: This cable has too many control points
+ PT: Este cabo possui pontos demais
+ ZH: 这条电缆的控制点太多了
+message.sa_decor.door_lock_applied
+ EN: Door locked.
+ PT: Porta trancada.
+ ZH: 门已上锁。
+message.sa_decor.door_lock_applied_hud
+ EN: Door locked
+ PT: Porta trancada
+ ZH: 门已上锁
+message.sa_decor.door_locked_short
+ EN: Door locked. Use a lockpick.
+ PT: Porta trancada. Use uma gazua.
+ ZH: 门已上锁。使用撬锁器。
+message.sa_decor.electronic_access.locked_survival
+ EN: Keycard required
+ PT: Keycard necessária
+ ZH: 需要门禁卡
+message.sa_decor.electronic_access.reader_required
+ EN: Electronic lock.
+Use the Keycard Reader.
+ PT: Trava eletrônica.
+Use o Leitor de Cartão.
+ ZH: 电子锁。
+使用门禁卡读卡器。
+message.sa_decor.electronic_security_door.reader_required
+ EN: Electronic lock.
+Use a linked Keycard Reader.
+ PT: Trava eletrônica.
+Use um Leitor de Cartão vinculado.
+ ZH: 电子锁。
+使用已连接的门禁卡读卡器。
+message.sa_decor.fuel_pump.no_power
+ EN: Fuel Pump requires power to dispense fuel
+ PT: A Bomba de Combustível precisa de energia para abastecer
+ ZH: 加油泵需要电力才能输出燃料
+message.sa_decor.fuel_pump_hud
+ EN: Fuel: %s / %s mB
+ PT: Combustível: %s / %s mB
+ ZH: 燃料:%s / %s mB
+message.sa_decor.fuel_pump_tank_hud
+ EN: Tank: %s / %s mB (%s)
+ PT: Tanque: %s / %s mB (%s)
+ ZH: 油箱:%s / %s mB(%s)
+message.sa_decor.fuse_box.activated
+ EN: Fuse Box activated
+ PT: Caixa de Fusíveis ativada
+ ZH: 保险丝盒已激活
+message.sa_decor.fuse_box.deactivated
+ EN: Fuse Box deactivated
+ PT: Caixa de Fusíveis desativada
+ ZH: 保险丝盒已停用
+message.sa_decor.fuse_box.energy
+ EN: Fuse Box: %s / %s FE
+ PT: Caixa de Fusíveis: %s / %s FE
+ ZH: 保险丝盒:%s / %s FE
+message.sa_decor.fuse_box.no_power
+ EN: No stored power
+ PT: Sem energia armazenada
+ ZH: 没有储存的电力
+message.sa_decor.keycard.access_denied
+ EN: Access denied
+ PT: Acesso negado
+ ZH: 拒绝访问
+message.sa_decor.keycard.access_granted
+ EN: Access granted
+ PT: Acesso liberado
+ ZH: 允许访问
+message.sa_decor.keycard.access_granted_id
+ EN: Access granted | ID %s
+ PT: Acesso liberado | ID %s
+ ZH: 允许访问 | ID %s
+message.sa_decor.keycard.blank_denied
+ EN: Unprogrammed card.
+Use the Linking Tool to enroll.
+ PT: Cartão não programado.
+Use a Linking Tool para cadastrar.
+ ZH: 未编程的卡片。
+使用连接工具登记。
+message.sa_decor.keycard.card_not_recognized
+ EN: Card not recognized
+ PT: Cartão não reconhecido
+ ZH: 卡片无法识别
+message.sa_decor.keycard.enrolled_access_granted
+ EN: Card enrolled. Access granted
+ PT: Cartão registrado. Acesso liberado
+ ZH: 卡片已登记。允许访问
+message.sa_decor.keycard.enrolled_access_granted_id
+ EN: Card enrolled | ID %s | Access granted
+ PT: Cartão registrado | ID %s | Acesso liberado
+ ZH: 卡片已登记 | ID %s | 允许访问
+message.sa_decor.keycard.reader_info
+ EN: ID %s | %s | Reader %s, %s, %s
+Door %s, %s, %s | Readers: %s | Owner: %s
+ PT: ID %s | %s | Leitor %s, %s, %s
+Porta %s, %s, %s | Leitores: %s | Dono: %s
+ ZH: ID %s | %s | 读卡器 %s, %s, %s
+门 %s, %s, %s | 读卡器:%s | 所有者:%s
+message.sa_decor.keycard.reader_info_unlinked
+ EN: Unlinked reader | Position %s, %s, %s
+Owner: %s
+ PT: Leitor sem vínculo | Posição %s, %s, %s
+Dono: %s
+ ZH: 未连接的读卡器 | 位置 %s, %s, %s
+所有者:%s
+message.sa_decor.keycard.reader_not_linked
+ EN: This reader is not linked to a door
+ PT: Este leitor não está vinculado a uma porta
+ ZH: 这个读卡器未连接到任何门
+message.sa_decor.keycard.reader_status_enrollment
+ EN: Enrollment mode
+ PT: Modo de cadastro
+ ZH: 登记模式
+message.sa_decor.keycard.reader_status_granted
+ EN: Access granted
+ PT: Acesso liberado
+ ZH: 允许访问
+message.sa_decor.keycard.reader_status_offline
+ EN: Reader offline
+ PT: Leitor offline
+ ZH: 读卡器离线
+message.sa_decor.keycard.reader_status_ready
+ EN: Reader ready
+ PT: Leitor pronto
+ ZH: 读卡器就绪
+message.sa_decor.keycard.reader_status_waiting
+ EN: Waiting for keycard
+ PT: Aguardando cartão
+ ZH: 等待门禁卡
+message.sa_decor.keycard.status_enrollment
+ EN: ENROLLMENT OPEN
+ PT: CADASTRO ABERTO
+ ZH: 登记开放中
+message.sa_decor.keycard.status_granted
+ EN: ACCESS GRANTED
+ PT: ACESSO LIBERADO
+ ZH: 允许访问
+message.sa_decor.keycard.status_locked
+ EN: LOCKED
+ PT: TRANCADO
+ ZH: 已锁定
+message.sa_decor.keycard.status_waiting_card
+ EN: WAITING FOR CARD
+ PT: AGUARDANDO CARTÃO
+ ZH: 等待刷卡
+message.sa_decor.keycard.swipe_blank_prompt_debug
+ EN: Unprogrammed keycard
+Swipe to enroll
+ PT: Cartão não programado
+Passe para cadastrar
+ ZH: 未编程的门禁卡
+刷卡以登记
+message.sa_decor.keycard.swipe_prompt
+ EN: Swipe keycard
+ PT: Passe o cartão
+ ZH: 刷门禁卡
+message.sa_decor.keycard.swipe_prompt_debug
+ EN: Swipe keycard
+ID: %s
+ PT: Passe o cartão
+ID: %s
+ ZH: 刷门禁卡
+ID:%s
+message.sa_decor.light_switch.applied
+ EN: Light Switch links applied. Linked lamps: %s
+ PT: Links aplicados no interruptor. Lampadas linkadas: %s
+ ZH: 电灯开关连接已应用。已连接灯具:%s
+message.sa_decor.light_switch.cleared
+ EN: Stored Light Switch links cleared
+ PT: Links guardados no interruptor limpos
+ ZH: 已清除储存的电灯开关连接
+message.sa_decor.light_switch.invalid
+ EN: Selected Light Switch is no longer valid
+ PT: O interruptor selecionado nao existe mais
+ ZH: 选中的电灯开关已失效
+message.sa_decor.light_switch.item_linked
+ EN: Lamp stored in switch item. Stored lamps: %s
+ PT: Lampada guardada no item do interruptor. Lampadas guardadas: %s
+ ZH: 灯具已存入开关物品。已储存灯具:%s
+message.sa_decor.light_switch.item_unlinked
+ EN: Lamp removed from switch item. Stored lamps: %s
+ PT: Lampada removida do item do interruptor. Lampadas guardadas: %s
+ ZH: 灯具已从开关物品移除。已储存灯具:%s
+message.sa_decor.light_switch.linked
+ EN: Lamp linked. Linked lamps: %s
+ PT: Lampada linkada. Lampadas linkadas: %s
+ ZH: 灯具已连接。已连接灯具:%s
+message.sa_decor.light_switch.select_first
+ EN: Link lamps with the Light Switch item first
+ PT: Linke as lampadas com o item do interruptor primeiro
+ ZH: 先用开关物品连接灯具
+message.sa_decor.light_switch.selected
+ EN: Light Switch selected for linking
+ PT: Interruptor selecionado para link
+ ZH: 已选择电灯开关进行连接
+message.sa_decor.light_switch.too_far
+ EN: Lamp is too far. Max range: %s blocks
+ PT: Lampada muito longe. Alcance maximo: %s blocos
+ ZH: 灯具太远。最大范围:%s 格
+message.sa_decor.light_switch.unlinked
+ EN: Lamp unlinked. Linked lamps: %s
+ PT: Link da lampada removido. Lampadas linkadas: %s
+ ZH: 灯具已断开。已连接灯具:%s
+message.sa_decor.linking_tool.dimension_mismatch
+ EN: The selected reader is in another dimension
+ PT: O leitor selecionado está em outra dimensão
+ ZH: 选中的读卡器在另一个维度
+message.sa_decor.linking_tool.enrollment_open
+ EN: Enrollment open | ID %s
+%ss remaining
+ PT: Cadastro aberto | ID %s
+%ss restantes
+ ZH: 登记开放 | ID %s
+还剩 %s 秒
+message.sa_decor.linking_tool.enrollment_unavailable
+ EN: This reader does not have an Access Group yet
+ PT: Este leitor ainda não possui um Access Group
+ ZH: 这个读卡器还没有访问组
+message.sa_decor.linking_tool.invalid_target
+ EN: The reader cannot be linked to itself
+ PT: O leitor não pode ser vinculado a ele mesmo
+ ZH: 读卡器不能连接到自身
+message.sa_decor.linking_tool.linked
+ EN: Reader linked to %s, %s, %s
+ PT: Leitor vinculado a %s, %s, %s
+ ZH: 读卡器已连接到 %s, %s, %s
+message.sa_decor.linking_tool.linked_locked
+ EN: Reader linked. Door locked at %s, %s, %s
+ PT: Leitor vinculado. Porta trancada em %s, %s, %s
+ ZH: 读卡器已连接。门已在 %s, %s, %s 处锁定
+message.sa_decor.linking_tool.linked_locked_existing_group
+ EN: Group linked | ID %s | Door %s, %s, %s
+Readers: %s
+ PT: Grupo vinculado | ID %s | Porta %s, %s, %s
+Leitores: %s
+ ZH: 访问组已连接 | ID %s | 门 %s, %s, %s
+读卡器:%s
+message.sa_decor.linking_tool.linked_locked_waiting_card
+ EN: Reader linked. Swipe an unprogrammed Keycard to register access
+ PT: Leitor vinculado. Passe uma Keycard não programada para registrar o acesso
+ ZH: 读卡器已连接。刷一张未编程的门禁卡以登记访问权限
+message.sa_decor.linking_tool.linked_locked_waiting_card_id
+ EN: Door locked | ID %s
+Door %s, %s, %s | Swipe the first card
+ PT: Porta trancada | ID %s
+Porta %s, %s, %s | Passe o primeiro cartão
+ ZH: 门已锁定 | ID %s
+门 %s, %s, %s | 刷第一张卡
+message.sa_decor.linking_tool.no_reader_selected
+ EN: Select a keycard reader first
+ PT: Selecione um leitor de cartão primeiro
+ ZH: 请先选择门禁卡读卡器
+message.sa_decor.linking_tool.pair_requires_door
+ EN: Link the first reader to a door before pairing another reader
+ PT: Vincule o primeiro leitor a uma porta antes de parear outro leitor
+ ZH: 先连接第一个读卡器到门,再配对其他读卡器
+message.sa_decor.linking_tool.reader_cleared
+ EN: Reader link cleared
+ PT: Vínculo do leitor removido
+ ZH: 读卡器连接已清除
+message.sa_decor.linking_tool.reader_missing
+ EN: The selected reader no longer exists
+ PT: O leitor selecionado não existe mais
+ ZH: 选中的读卡器已不存在
+message.sa_decor.linking_tool.reader_selected
+ EN: Reader selected at %s, %s, %s
+ PT: Leitor selecionado em %s, %s, %s
+ ZH: 已在 %s, %s, %s 选择读卡器
+message.sa_decor.linking_tool.reader_selected_configured
+ EN: Reader %s, %s, %s | ID %s
+Door %s, %s, %s
+ PT: Leitor %s, %s, %s | ID %s
+Porta %s, %s, %s
+ ZH: 读卡器 %s, %s, %s | ID %s
+门 %s, %s, %s
+message.sa_decor.linking_tool.readers_paired
+ EN: Readers paired | ID %s | Readers: %s
+ PT: Leitores pareados | ID %s | Leitores: %s
+ ZH: 读卡器已配对 | ID %s | 读卡器:%s
+message.sa_decor.linking_tool.selection_cleared
+ EN: Selection cleared
+ PT: Seleção limpa
+ ZH: 选择已清除
+message.sa_decor.linking_tool.target_not_lockable
+ EN: Target must be a supported door
+ PT: O alvo precisa ser uma porta compatível
+ ZH: 目标必须是受支持的门
+message.sa_decor.lock_applied
+ EN: Lock applied.
+ PT: Cadeado aplicado.
+ ZH: 挂锁已安装。
+message.sa_decor.lock_applied_hud
+ EN: Lock applied
+ PT: Cadeado aplicado
+ ZH: 挂锁已安装
+message.sa_decor.locked_hud
+ EN: It's locked
+ PT: Está trancado
+ ZH: 它被锁住了
+message.sa_decor.locked_short
+ EN: Locked. Use a lockpick.
+ PT: Trancado. Use uma gazua.
+ ZH: 已锁定。使用撬锁器。
+message.sa_decor.loose_pickup.prompt
+ EN: Pick up
+ PT: Pegar
+ ZH: 捡起
+message.sa_decor.loot_break.blocked
+ EN: Protected loot crate - it cannot be broken.
+ PT: Loot crate protegida - não pode ser quebrada.
+ ZH: 受保护的战利品箱 - 无法破坏。
+message.sa_decor.loot_break.blocked_shift
+ EN: Protected loot crate - hold Shift to break it.
+ PT: Loot crate protegida - segure Shift para quebrar.
+ ZH: 受保护的战利品箱 - 按住 Shift 破坏它。
+message.sa_decor.loot_wand.marked
+ EN: Marked container at %s %s %s as loot crate '%s' locked=%s
+ PT: Container em %s %s %s marcado como loot crate '%s' locked=%s
+ ZH: 已将 %s %s %s 处的容器标记为战利品箱 '%s',锁定=%s
+message.sa_decor.loot_wand.missing_config
+ EN: Missing loot crate config: %s
+ PT: Config de loot crate nao encontrada: %s
+ ZH: 缺少战利品箱配置:%s
+message.sa_decor.loot_wand.no_configs
+ EN: No loot crate configs loaded.
+ PT: Nenhuma config de loot crate carregada.
+ ZH: 没有加载任何战利品箱配置。
+message.sa_decor.loot_wand.not_container
+ EN: This block is not a loot container.
+ PT: Este bloco nao e um container de loot.
+ ZH: 这个方块不是战利品容器。
+message.sa_decor.loot_wand.selected
+ EN: Selected loot config: %s
+ PT: Config de loot selecionada: %s
+ ZH: 已选择战利品配置:%s
+message.sa_decor.loot_wand.selected_hud
+ EN: Selected: %s
+ PT: Selecionado: %s
+ ZH: 已选择:%s
+message.sa_decor.mechanical_lock.already_keyed
+ EN: This padlock already has a key
+ PT: Este cadeado já possui uma chave
+ ZH: 这把挂锁已经有钥匙了
+message.sa_decor.mechanical_lock.already_locked
+ EN: This door is already locked
+ PT: Esta porta já está trancada
+ ZH: 这扇门已经锁上了
+message.sa_decor.mechanical_lock.break_denied
+ EN: The padlock prevents you from breaking this
+ PT: O cadeado impede que você quebre isto
+ ZH: 挂锁阻止你破坏这个
+message.sa_decor.mechanical_lock.installed
+ EN: Padlock secured
+ PT: Cadeado instalado
+ ZH: 挂锁已固定
+message.sa_decor.mechanical_lock.installed_debug
+ EN: Padlock secured | Key ID %s
+ PT: Cadeado instalado | ID da chave %s
+ ZH: 挂锁已固定 | 钥匙 ID %s
+message.sa_decor.mechanical_lock.installed_debug_keyed
+ EN: Padlock secured | Keyed | ID %s
+ PT: Cadeado instalado | Com chave | ID %s
+ ZH: 挂锁已固定 | 已配钥匙 | ID %s
+message.sa_decor.mechanical_lock.installed_debug_uncut
+ EN: Padlock secured | Unkeyed | ID %s
+ PT: Cadeado instalado | Sem chave | ID %s
+ ZH: 挂锁已固定 | 未配钥匙 | ID %s
+message.sa_decor.mechanical_lock.installed_existing
+ EN: Padlock secured
+ PT: Cadeado instalado
+ ZH: 挂锁已固定
+message.sa_decor.mechanical_lock.installed_keyed
+ EN: Padlock secured
+ PT: Cadeado instalado
+ ZH: 挂锁已固定
+message.sa_decor.mechanical_lock.installed_uncut
+ EN: Padlock secured. It needs a key.
+ PT: Cadeado instalado. Ainda precisa de uma chave.
+ ZH: 挂锁已固定。它需要一把钥匙。
+message.sa_decor.mechanical_lock.key_reset
+ EN: Key reset
+ PT: Chave resetada
+ ZH: 钥匙已重置
+message.sa_decor.mechanical_lock.key_set
+ EN: Key cut to match this padlock
+ PT: Chave cortada para este cadeado
+ ZH: 钥匙已配好,与这把挂锁匹配
+message.sa_decor.mechanical_lock.key_set_debug
+ EN: Key cut | ID %s
+ PT: Chave cortada | ID %s
+ ZH: 钥匙已配好 | ID %s
+message.sa_decor.mechanical_lock.key_set_denied
+ EN: Only the owner can cut a new key
+ PT: Apenas o dono pode cortar uma nova chave
+ ZH: 只有所有者才能配新钥匙
+message.sa_decor.mechanical_lock.key_set_ownerless_denied
+ EN: Ownerless locks can only be configured in Creative/admin mode
+ PT: Cadeados sem dono só podem ser configurados no Criativo/admin
+ ZH: 无主挂锁只能在创造/管理员模式下配置
+message.sa_decor.mechanical_lock.locked
+ EN: Locked
+ PT: Trancado
+ ZH: 已锁定
+message.sa_decor.mechanical_lock.locked_uncut
+ EN: Locked. No key has been cut yet.
+ PT: Trancado. Nenhuma chave foi cortada ainda.
+ ZH: 已锁定。还没有配过钥匙。
+message.sa_decor.mechanical_lock.loot_separate
+ EN: Loot crates use their own lock system
+ PT: Loot Crates usam o próprio sistema de lock
+ ZH: 战利品箱使用自己的锁系统
+message.sa_decor.mechanical_lock.player_protected
+ EN: Player-owned padlock
+ PT: Cadeado protegido pelo dono
+ ZH: 玩家所有的挂锁
+message.sa_decor.mechanical_lock.removed
+ EN: Padlock removed
+ PT: Cadeado removido
+ ZH: 挂锁已移除
+message.sa_decor.mechanical_lock.unlocked
+ EN: Padlock unlocked
+ PT: Cadeado destrancado
+ ZH: 挂锁已解锁
+message.sa_decor.mechanical_lock.vertical_face
+ EN: Place the padlock on a side face
+ PT: Coloque o cadeado em uma face lateral
+ ZH: 请把挂锁放在侧面
+message.sa_decor.mechanical_lock.wrong_key
+ EN: This key does not fit
+ PT: Esta chave não serve
+ ZH: 这把钥匙不匹配
+message.sa_decor.open_pass.accepted_hud
+ EN: Payment accepted
+ PT: Pagamento aceito
+ ZH: 已接受付款
+message.sa_decor.open_pass.not_enough_hud
+ EN: Not enough payment: %s
+ PT: Pagamento insuficiente: %s
+ ZH: 付款不足:%s
+message.sa_decor.open_pass.required_hud
+ EN: Payment required: %s
+ PT: Pagamento necessário: %s
+ ZH: 需要付款:%s
+message.sa_decor.per_player_container_busy_hud
+ EN: Container is already in use
+ PT: Container já em uso
+ ZH: 容器正在使用中
+message.sa_decor.roof.invalid_camouflage
+ EN: Use a full solid block.
+ PT: Use um bloco sólido completo.
+ ZH: 请使用完整的实心方块。
+message.sa_decor.rotation_wand.axis.pitch
+ EN: Pitch
+ PT: Pitch
+ ZH: 俯仰
+message.sa_decor.rotation_wand.axis.roll
+ EN: Roll
+ PT: Roll
+ ZH: 翻滚
+message.sa_decor.rotation_wand.axis.yaw
+ EN: Yaw
+ PT: Yaw
+ ZH: 偏航
+message.sa_decor.rotation_wand.mode
+ EN: Rotation mode: %s
+ PT: Modo de rotacao: %s
+ ZH: 旋转模式:%s
+message.sa_decor.rotation_wand.reset
+ EN: Visual rotation reset
+ PT: Rotacao visual resetada
+ ZH: 视觉旋转已重置
+message.sa_decor.rotation_wand.rotated
+ EN: %s: %s°
+ PT: %s: %s°
+ ZH: %s:%s°
+message.sa_decor.structure_access.card_candidate_added
+ EN: Keycard spawn added | Spots: %s
+ PT: Ponto de Keycard adicionado | Pontos: %s
+ ZH: 门禁卡生成点已添加 | 位置:%s
+message.sa_decor.structure_access.card_candidate_removed
+ EN: Keycard spawn removed | Spots: %s
+ PT: Ponto de Keycard removido | Pontos: %s
+ ZH: 门禁卡生成点已移除 | 位置:%s
+message.sa_decor.structure_access.controller_missing
+ EN: The selected Key controller no longer exists
+ PT: A Key controladora não existe mais
+ ZH: 选中的门控制器已不存在
+message.sa_decor.structure_access.creative_only
+ EN: Creative/admin tool only
+ PT: Ferramenta apenas para criativo/admin
+ ZH: 仅限创造/管理员工具
+message.sa_decor.structure_access.dimension_mismatch
+ EN: Structure Access selection cleared: different dimension
+ PT: Seleção do Structure Access limpa: outra dimensão
+ ZH: 结构门禁选择已清除:维度不同
+message.sa_decor.structure_access.electronic_click_hint
+ EN: Add a door, Readers or Loose Keycards
+ PT: Adicione a porta, Readers ou Loose Keycards
+ ZH: 添加一扇门、读卡器或散落门禁卡
+message.sa_decor.structure_access.electronic_ready
+ EN: Electronic structure access ready
+Readers: %s | Random card spots: %s
+ PT: Acesso eletrônico da estrutura pronto
+Readers: %s | Pontos aleatórios de card: %s
+ ZH: 电子结构门禁已就绪
+读卡器:%s | 随机门禁卡位置:%s
+message.sa_decor.structure_access.electronic_summary
+ EN: Electronic setup | Door: %s | Readers: %s | Cards: %s
+Shift-click primary Reader to finish
+ PT: Estrutura eletrônica | Porta: %s | Readers: %s | Cards: %s
+Shift-clique no Reader principal para finalizar
+ ZH: 电子设置 | 门:%s | 读卡器:%s | 门禁卡:%s
+Shift + 点击主读卡器完成
+message.sa_decor.structure_access.electronic_target_invalid
+ EN: Electronic access requires a supported door
+ PT: O acesso eletrônico precisa de uma porta compatível
+ ZH: 电子门禁需要一扇受支持的门
+message.sa_decor.structure_access.key_candidate_added
+ EN: Key spawn added | Spots: %s
+ PT: Ponto de Key adicionado | Pontos: %s
+ ZH: 钥匙生成点已添加 | 位置:%s
+message.sa_decor.structure_access.key_candidate_removed
+ EN: Key spawn removed | Spots: %s
+ PT: Ponto de Key removido | Pontos: %s
+ ZH: 钥匙生成点已移除 | 位置:%s
+message.sa_decor.structure_access.mechanical_click_hint
+ EN: Add Loose Keys, then Shift-click the selected Padlock to finish
+ PT: Adicione Loose Keys e depois Shift-clique no Padlock selecionado
+ ZH: 添加散落钥匙,然后 Shift + 点击选中的挂锁完成
+message.sa_decor.structure_access.mechanical_ready
+ EN: Mechanical structure access ready
+Random Key spots: %s
+ PT: Acesso mecânico da estrutura pronto
+Pontos aleatórios de Key: %s
+ ZH: 机械结构门禁已就绪
+随机钥匙位置:%s
+message.sa_decor.structure_access.mechanical_selected
+ EN: Structure Padlock selected: %s, %s, %s
+ PT: Padlock da estrutura selecionado: %s, %s, %s
+ ZH: 已选择结构挂锁:%s, %s, %s
+message.sa_decor.structure_access.mechanical_summary
+ EN: Mechanical structure setup | Key spots: %s
+Shift-click Padlock to finish
+ PT: Estrutura mecânica | Pontos de Key: %s
+Shift-clique no Padlock para finalizar
+ ZH: 机械结构设置 | 钥匙位置:%s
+Shift + 点击挂锁完成
+message.sa_decor.structure_access.need_card_candidate
+ EN: Add at least one Loose Keycard spawn
+ PT: Adicione pelo menos um ponto com Loose Keycard
+ ZH: 至少添加一个散落门禁卡生成点
+message.sa_decor.structure_access.need_door
+ EN: Select the access door first
+ PT: Selecione primeiro a porta de acesso
+ ZH: 请先选择门
+message.sa_decor.structure_access.need_key_candidate
+ EN: Add at least one Loose Key spawn
+ PT: Adicione pelo menos um ponto com Loose Key
+ ZH: 至少添加一个散落钥匙生成点
+message.sa_decor.structure_access.padlock_missing
+ EN: The selected Padlock no longer exists
+ PT: O Padlock selecionado não existe mais
+ ZH: 选中的挂锁已不存在
+message.sa_decor.structure_access.primary_reader_missing
+ EN: The primary Reader no longer exists
+ PT: O Reader principal não existe mais
+ ZH: 主读卡器已不存在
+message.sa_decor.structure_access.reader_added
+ EN: Reader added | Extra readers: %s
+ PT: Reader adicionado | Extras: %s
+ ZH: 读卡器已添加 | 额外读卡器:%s
+message.sa_decor.structure_access.reader_removed
+ EN: Reader removed | Extra readers: %s
+ PT: Reader removido | Extras: %s
+ ZH: 读卡器已移除 | 额外读卡器:%s
+message.sa_decor.structure_access.reader_selected
+ EN: Primary Reader selected: %s, %s, %s
+ PT: Reader principal selecionado: %s, %s, %s
+ ZH: 已选择主读卡器:%s, %s, %s
+message.sa_decor.structure_access.select_source_first
+ EN: Select a Padlock or Keycard Reader first
+ PT: Selecione primeiro um Padlock ou Keycard Reader
+ ZH: 请先选择挂锁或门禁卡读卡器
+message.sa_decor.structure_access.selection_cleared
+ EN: Structure Access selection cleared
+ PT: Seleção do Structure Access limpa
+ ZH: 结构门禁选择已清除
+message.sa_decor.structure_access.target_set
+ EN: Door set: %s, %s, %s
+ PT: Porta definida: %s, %s, %s
+ ZH: 门已设置:%s, %s, %s
+message.sa_decor.wall_clock.time
+ EN: It's: %s
+ PT: Agora são: %s
+ ZH: 现在是:%s
+qte.sa_decor.escape_bear_trap
+ EN: Press [F] to escape
+ PT: Aperte [F] para escapar
+ ZH: 按 [F] 逃脱
+qte.sa_decor.force_open_lock
+ EN: Hold to force open
+ PT: Segure para forçar abertura
+ ZH: 按住强制打开
+qte.sa_decor.force_open_lock_strike
+ EN: Hit to force open
+ PT: Bata para forçar abertura
+ ZH: 击打以强制打开
+qte.sa_decor.mechanical_lock.cut_key
+ EN: Cut key
+ PT: Cortar chave
+ ZH: 配钥匙
+qte.sa_decor.mechanical_lock.pick
+ EN: Pick lock
+ PT: Abrir com lockpick
+ ZH: 撬锁
+qte.sa_decor.mechanical_lock.try_key
+ EN: Try key
+ PT: Testar chave
+ ZH: 试钥匙
+qte.sa_decor.mechanical_lock.unlock
+ EN: Unlock
+ PT: Destrancar
+ ZH: 解锁
+qte.sa_decor.remove_barricade
+ EN: Press F to remove barricade
+ PT: Aperte F para remover a barricada
+ ZH: 按 F 移除路障
+qte.sa_decor.search_loot_crate
+ EN: Search loot crate
+ PT: Vasculhar loot crate
+ ZH: 搜索战利品箱
+qte.sa_decor.searching
+ EN: Searching...
+ PT: Vasculhando...
+ ZH: 搜索中...
+screen.sa_decor.loot_wand
+ EN: Loot Crate Wand
+ PT: Loot Crate Wand
+ ZH: 战利品箱魔杖
+screen.sa_decor.loot_wand.current
+ EN: Current: %s
+ PT: Atual: %s
+ ZH: 当前:%s
+screen.sa_decor.loot_wand.subtitle
+ EN: Select a loot profile
+ PT: Selecione um perfil de loot
+ ZH: 选择一个战利品方案
+screen.sa_decor.loot_wand.tip
+ EN: Click a config to select it. Use the scrollbar on the right.
+ PT: Clique em uma config para selecionar. Use a scrollbar ao lado.
+ ZH: 点击配置以选择它。使用右侧的滚动条。
+text.sa_decor.forcing
+ EN: Forcing...
+ PT: Forçando...
+ ZH: 强制中...
+text.sa_decor.forcing_open
+ EN: Forcing open...
+ PT: Forçando abertura...
+ ZH: 强制打开中...
+text.sa_decor.loot_prompt_locked_prefix
+ EN: [Locked]
+ PT: [Trancado]
+ ZH: [已锁定]
+text.sa_decor.loot_prompt_locked_suffix
+ EN: %s
+ PT: %s
+ ZH: %s
+text.sa_decor.loot_prompt_right_click_prefix
+ EN: [Right Click]
+ PT: [Clique Direito]
+ ZH: [右键]
+text.sa_decor.loot_prompt_suffix
+ EN: to loot %s...
+ PT: para vasculhar %s...
+ ZH: 以搜刮 %s...
+text.sa_decor.loot_prompt_unlock_suffix
+ EN: to unlock %s...
+ PT: para destrancar %s...
+ ZH: 以解锁 %s...
+text.sa_decor.searching
+ EN: Searching...
+ PT: Vasculhando...
+ ZH: 搜索中...
+tooltip.sa_decor.barricade_construction.line1
+ EN: Recommended: build barricades directly in the world
+ PT: Recomendado: construa barricadas diretamente no mundo
+ ZH: 建议:直接在世界上建造路障
+tooltip.sa_decor.barricade_construction.line2
+ EN: Main hand: Hammer | Offhand: Scrap Wood | Keep Nails in inventory
+ PT: Mão principal: Martelo | Offhand: Scrap Wood | Tenha Nails no inventário
+ ZH: 主手:锤子 | 副手:废木料 | 背包里带上钉子
+tooltip.sa_decor.barricade_construction.line3
+ EN: Right-click to build each stage
+ PT: Clique direito para construir cada estágio
+ ZH: 右键建造每个阶段
+tooltip.sa_decor.barricade_construction.line4
+ EN: Press R to switch between normal and big barricades
+ PT: Pressione R para alternar entre barricada normal e grande
+ ZH: 按 R 切换普通与大型路障
+tooltip.sa_decor.cable.connect
+ EN: Start from a power source or an existing powered cable
+ PT: Comece em uma fonte ou em outro cabo energizado
+ ZH: 从电源或已有的供电电缆开始
+tooltip.sa_decor.cable.cost
+ EN: Each cable run reaches up to 16 blocks
+ PT: Cada trecho alcança até 16 blocos
+ ZH: 每段电缆最长可达 16 格
+tooltip.sa_decor.cable.cut
+ EN: Use SA Core pliers to cut and recover cable
+ PT: Use o alicate do SA Core para cortar e recuperar o cabo
+ ZH: 使用 SA 核心的钳子切断并回收电缆
+tooltip.sa_decor.cable.draw
+ EN: Click to attach the first end; walk and click again to attach the other end
+ PT: Clique para prender a primeira ponta; caminhe e clique novamente para fixar
+ ZH: 点击连接第一端;走过去再点击连接另一端
+tooltip.sa_decor.cable.finish
+ EN: Shift + click air to cancel placement
+ PT: Shift + clique no ar para cancelar a colocação
+ ZH: Shift + 点击空气取消放置
+tooltip.sa_decor.cable.power
+ EN: Must begin at a power source or powered cable
+ PT: Deve começar em uma fonte ou cabo energizado
+ ZH: 必须从电源或供电电缆开始
+tooltip.sa_decor.cable.visibility
+ EN: Hold cable or pliers to view the network
+ PT: Segure o cabo ou o alicate para visualizar a rede
+ ZH: 手持电缆或钳子以查看网络
+tooltip.sa_decor.camouflage
+ EN: Right-click with a solid block; empty-hand click removes it
+ PT: Clique com bloco sólido; clique de mão vazia remove
+ ZH: 手持实心方块右键;空手点击移除它
+tooltip.sa_decor.container
+ EN: Stores items
+ PT: Armazena itens
+ ZH: 储存物品
+tooltip.sa_decor.dangerous
+ EN: Dangerous to walk through
+ PT: Perigoso ao atravessar
+ ZH: 踩上去很危险
+tooltip.sa_decor.electrifies_fences
+ EN: Electrifies connected urban fences
+ PT: Eletrifica cercas urbanas conectadas
+ ZH: 使连接的城市围栏通电
+tooltip.sa_decor.fire_hydrant.line1
+ EN: Forge water tank for buckets and fluid pipes
+ PT: Tanque Forge de agua para baldes e pipes
+ ZH: 供桶和流体管道使用的水源水箱
+tooltip.sa_decor.fire_hydrant.line2
+ EN: Capacity: 16L of water
+ PT: Capacidade: 16L de agua
+ ZH: 容量:16L 水
+tooltip.sa_decor.fire_hydrant.line3
+ EN: Stays full with water up to 3 blocks below
+ PT: Fica cheio com agua ate 3 blocos abaixo
+ ZH: 下方 3 格以内有水时保持满水
+tooltip.sa_decor.fire_hydrant.line4
+ EN: Use buckets or pipes to fill and drain it
+ PT: Use baldes ou pipes para encher e esvaziar
+ ZH: 使用桶或管道注水与排水
+tooltip.sa_decor.fly_emitter.line1
+ EN: Invisible fly marker for dirty areas
+ PT: Marcador invisivel de moscas para areas sujas
+ ZH: 用于脏乱区域的隐形苍蝇标记
+tooltip.sa_decor.fly_emitter.line2
+ EN: Right-click placed emitter to increase intensity
+ PT: Clique direito no emissor colocado para aumentar a intensidade
+ ZH: 右键已放置的发生器提高强度
+tooltip.sa_decor.fly_emitter.line3
+ EN: Crouch + right-click to decrease intensity
+ PT: Agache + clique direito para diminuir a intensidade
+ ZH: 潜行 + 右键降低强度
+tooltip.sa_decor.fly_emitter.line4
+ EN: Only visible while holding the emitter item
+ PT: So aparece enquanto segura o item do emissor
+ ZH: 手持发生器物品时才能看到
+tooltip.sa_decor.fuse_box.line1
+ EN: Wall-mounted structure power source
+ PT: Fonte de energia de parede para estruturas
+ ZH: 壁挂式结构电源
+tooltip.sa_decor.fuse_box.line2
+ EN: Creative-placed boxes start charged
+ PT: Caixas colocadas no criativo começam carregadas
+ ZH: 创造模式放置的盒子初始带电
+tooltip.sa_decor.fuse_box.line3
+ EN: Open it, then right-click to activate
+ PT: Abra e clique direito para ativar
+ ZH: 打开它,然后右键激活
+tooltip.sa_decor.fuse_box.line4
+ EN: Crouch + right-click while open to close
+ PT: Agache + clique direito aberta para fechar
+ ZH: 打开状态下潜行 + 右键关闭
+tooltip.sa_decor.garage_door.line1
+ EN: Place at the bottom-center of a clear 5x4 opening
+ PT: Coloque no centro inferior de um espaço livre 5x4
+ ZH: 放置在净空 5x4 开口的底部中央
+tooltip.sa_decor.garage_door.line2
+ EN: Right-click the door or rails to open and close
+ PT: Clique com o botão direito na porta ou trilhos para abrir e fechar
+ ZH: 右键门或轨道以开关
+tooltip.sa_decor.garage_door.line3
+ EN: Redstone power opens it; removing power closes it
+ PT: Sinal de redstone abre; remover o sinal fecha
+ ZH: 红石信号打开它;移除信号关闭它
+tooltip.sa_decor.gas_barrel.amount
+ EN: %s / %s mB
+ PT:
+ ZH: %s / %s mB
+tooltip.sa_decor.gas_barrel.empty
+ EN: Empty / %s mB
+ PT:
+ ZH: 空 / %s mB
+tooltip.sa_decor.gas_barrel.liquid
+ EN: Liquid: %s
+ PT:
+ ZH: 液体:%s
+tooltip.sa_decor.has_variants
+ EN: Use the Variation Tool to change appearance
+ PT: Use a Ferramenta de Variação para trocar a aparência
+ ZH: 使用变体工具更换外观
+tooltip.sa_decor.key.access_id
+ EN: Key ID: %s
+ PT: ID da chave: %s
+ ZH: 钥匙 ID:%s
+tooltip.sa_decor.key.blank
+ EN: Uncut key
+ PT: Chave sem corte
+ ZH: 未配钥匙
+tooltip.sa_decor.key.blank_hint
+ EN: Use on a padlock to cut this key
+ PT: Use em um cadeado para cortar esta chave
+ ZH: 对着挂锁使用以配这把钥匙
+tooltip.sa_decor.key.copy_hint
+ EN: Craft with one blank Key to make a copy
+ PT: Combine com uma Chave em branco para criar uma cópia
+ ZH: 与一把空白钥匙合成以制作副本
+tooltip.sa_decor.key.owner
+ EN: Owner: %s
+ PT: Dono: %s
+ ZH: 所有者:%s
+tooltip.sa_decor.key.programmed
+ EN: Cut key
+ PT: Chave cortada
+ ZH: 已配钥匙
+tooltip.sa_decor.key.reset_hint
+ EN: Place alone in the crafting grid to reset
+ PT: Coloque sozinha na grade de criação para resetar
+ ZH: 单独放入合成格以重置
+tooltip.sa_decor.keycard.access_id
+ EN: ID: %s
+ PT: ID: %s
+ ZH: ID:%s
+tooltip.sa_decor.keycard.blank
+ EN: Unprogrammed
+ PT: Não programado
+ ZH: 未编程
+tooltip.sa_decor.keycard.dimension
+ EN: Dimension: %s
+ PT: Dimensão: %s
+ ZH: 维度:%s
+tooltip.sa_decor.keycard.owner
+ EN: Owner: %s
+ PT: Dono: %s
+ ZH: 所有者:%s
+tooltip.sa_decor.keycard.programmed
+ EN: Programmed
+ PT: Programado
+ ZH: 已编程
+tooltip.sa_decor.keycard.reader_pos
+ EN: Reader: %s, %s, %s
+ PT: Leitor: %s, %s, %s
+ ZH: 读卡器:%s, %s, %s
+tooltip.sa_decor.keycard.target_pos
+ EN: Door: %s, %s, %s
+ PT: Porta: %s, %s, %s
+ ZH: 门:%s, %s, %s
+tooltip.sa_decor.light_switch.line1
+ EN: Crouch + right-click lamps while holding this item
+ PT: Agache + clique direito nas lampadas segurando este item
+ ZH: 手持此物品潜行 + 右键灯具
+tooltip.sa_decor.light_switch.line2
+ EN: Then place the switch to apply those lamp links
+ PT: Depois coloque o interruptor para aplicar os links
+ ZH: 然后放置开关以应用这些灯具连接
+tooltip.sa_decor.light_switch.line3
+ EN: Crouch + right-click air to clear stored links
+ PT: Agache + clique direito no ar para limpar os links
+ ZH: 潜行 + 右键空气以清除储存的连接
+tooltip.sa_decor.light_switch.line4
+ EN: Max range after placing: 24 blocks
+ PT: Alcance maximo apos colocar: 24 blocos
+ ZH: 放置后最大范围:24 格
+tooltip.sa_decor.light_switch.link_mode
+ EN: Linked lamps stored: %s
+ PT: Lampadas guardadas: %s
+ ZH: 已储存连接的灯具:%s
+tooltip.sa_decor.linking_tool.line1
+ EN: Select readers and link their access group to a door
+ PT: Seleciona leitores e vincula o grupo a uma porta
+ ZH: 选择读卡器并将其访问组连接到门
+tooltip.sa_decor.linking_tool.line2
+ EN: Reader -> Door: create/link the Access Group
+ PT: Leitor -> Porta: cria/vincula o Access Group
+ ZH: 读卡器 -> 门:创建/连接访问组
+tooltip.sa_decor.linking_tool.line3
+ EN: Reader -> Reader: add another reader to the same group
+ PT: Leitor -> Leitor: adiciona outro leitor ao mesmo grupo
+ ZH: 读卡器 -> 读卡器:将另一个读卡器加入同一组
+tooltip.sa_decor.linking_tool.line4
+ EN: Shift + reader: enroll 15s | Shift in air: clear selection
+ PT: Shift + leitor: cadastro 15s | Shift no ar: limpa seleção
+ ZH: Shift + 读卡器:登记 15 秒 | 空中 Shift:清除选择
+tooltip.sa_decor.linking_tool.selected
+ EN: Selected reader: %s, %s, %s
+ PT: Leitor selecionado: %s, %s, %s
+ ZH: 已选择读卡器:%s, %s, %s
+tooltip.sa_decor.loot_wand.no_config
+ EN: Selected config: none
+ PT: Config selecionada: nenhuma
+ ZH: 已选择配置:无
+tooltip.sa_decor.loot_wand.selected
+ EN: Selected config: %s
+ PT: Config selecionada: %s
+ ZH: 已选择配置:%s
+tooltip.sa_decor.loot_wand.shift_use
+ EN: Shift + right-click on a container marks it as locked.
+ PT: Shift + clique direito em um container marca ele como trancado.
+ ZH: Shift + 右键容器将其标记为已锁定。
+tooltip.sa_decor.loot_wand.use
+ EN: Right-click air to open the config selector. Right-click a container to mark it.
+ PT: Clique direito no ar para abrir o seletor de configs. Clique em um container para marcar.
+ ZH: 右键空气打开配置选择器。右键容器进行标记。
+tooltip.sa_decor.microwave
+ EN: Insert food, close it, and wait for it to cook
+ PT: Insira comida, feche e aguarde cozinhar
+ ZH: 放入食物,关上,等待加热
+tooltip.sa_decor.noisy_dangerous
+ EN: Makes noise and can cause bleeding
+ PT: Faz barulho e pode causar sangramento
+ ZH: 会产生噪音并可能造成流血
+tooltip.sa_decor.padlock.access_id
+ EN: Key ID: %s
+ PT: ID da chave: %s
+ ZH: 钥匙 ID:%s
+tooltip.sa_decor.padlock.keyed
+ EN: Keyed
+ PT: Com chave
+ ZH: 已配钥匙
+tooltip.sa_decor.padlock.owner
+ EN: Owner: %s
+ PT: Dono: %s
+ ZH: 所有者:%s
+tooltip.sa_decor.padlock.unkeyed
+ EN: Unkeyed
+ PT: Sem chave
+ ZH: 未配钥匙
+tooltip.sa_decor.requires_energy
+ EN: Requires FE energy to operate
+ PT: Requer energia FE para funcionar
+ ZH: 运行时需要 FE 能量
+tooltip.sa_decor.rotation_wand.left_click
+ EN: Left-click block: reset visual rotation
+ PT: Clique esquerdo no bloco: reseta a rotacao visual
+ ZH: 左键点击方块:重置视觉旋转
+tooltip.sa_decor.rotation_wand.mode
+ EN: Mode: %s
+ PT: Modo: %s
+ ZH: 模式:%s
+tooltip.sa_decor.rotation_wand.shift_use
+ EN: Shift + right-click block: rotate backwards
+ PT: Shift + clique direito no bloco: gira ao contrario
+ ZH: Shift + 右键方块:反向旋转
+tooltip.sa_decor.rotation_wand.use
+ EN: Right-click block: rotate visual
+ PT: Clique direito no bloco: gira o visual
+ ZH: 右键方块:旋转外观
+tooltip.sa_decor.shift_to_view
+ EN: Shift to view
+ PT: Shift para ver
+ ZH: 按住 Shift 查看
+tooltip.sa_decor.sittable
+ EN: Click to sit
+ PT: Clique para sentar
+ ZH: 点击坐下
+tooltip.sa_decor.small_garage_door.line1
+ EN: Place at the bottom-center of a clear 3x3 opening
+ PT: Coloque no centro inferior de um espaço livre 3x3
+ ZH: 放置在净空 3x3 开口的底部中央
+tooltip.sa_decor.small_garage_door.line2
+ EN: Right-click the door or rails to open and close
+ PT: Clique com o botão direito na porta ou trilhos para abrir e fechar
+ ZH: 右键门或轨道以开关
+tooltip.sa_decor.small_garage_door.line3
+ EN: Redstone power opens it; removing power closes it
+ PT: Sinal de redstone abre; remover o sinal fecha
+ ZH: 红石信号打开它;移除信号关闭它
+tooltip.sa_decor.stackable
+ EN: Stackable
+ PT: Empilhável
+ ZH: 可堆叠
+tooltip.sa_decor.stackable_count
+ EN: Stacks up to %s
+ PT: Empilhável até %s
+ ZH: 最多堆叠 %s 个
+tooltip.sa_decor.structure_access_tool.line1
+ EN: Creative tool for structure access
+ PT: Ferramenta criativa para acesso de estruturas
+ ZH: 用于结构门禁的创造工具
+tooltip.sa_decor.structure_access_tool.line2
+ EN: Mechanical: Padlock -> Loose Keys
+ PT: Mecânico: Padlock -> Loose Keys
+ ZH: 机械:挂锁 -> 散落钥匙
+tooltip.sa_decor.structure_access_tool.line3
+ EN: Electronic: Reader -> door / Readers / Loose Keycards
+ PT: Eletrônico: Reader -> porta / Readers / Loose Keycards
+ ZH: 电子:读卡器 -> 门 / 读卡器 / 散落门禁卡
+tooltip.sa_decor.structure_access_tool.line4
+ EN: Shift-click selected Padlock/Reader to finalize
+ PT: Shift-clique no Padlock/Reader selecionado para finalizar
+ ZH: Shift + 点击选中的挂锁/读卡器完成
+tooltip.sa_decor.structure_access_tool.line5
+ EN: Shift-right-click air clears the current selection
+ PT: Shift + clique direito no ar limpa a seleção
+ ZH: Shift + 右键空气清除当前选择
+tooltip.sa_decor.structure_access_tool.selected_electronic
+ EN: Primary Reader: %s, %s, %s
+ PT: Reader principal: %s, %s, %s
+ ZH: 主读卡器:%s, %s, %s
+tooltip.sa_decor.structure_access_tool.selected_mechanical
+ EN: Selected Padlock: %s, %s, %s
+ PT: Padlock selecionado: %s, %s, %s
+ ZH: 已选择挂锁:%s, %s, %s
+tooltip.sa_decor.water_source
+ EN: Use an empty bucket to collect water
+ PT: Use um balde vazio para coletar água
+ ZH: 使用空桶收集水
+TOTAL 776
diff --git a/_sa_hanhua_out/_tmp/drop_cellphone.py b/_sa_hanhua_out/_tmp/drop_cellphone.py
new file mode 100644
index 0000000..daa5767
--- /dev/null
+++ b/_sa_hanhua_out/_tmp/drop_cellphone.py
@@ -0,0 +1,28 @@
+# -*- coding: utf-8 -*-
+"""剔除 cellphone(手机,带模型)"""
+import os, json
+
+BASE = r'e:\MCStudioDownload\work\3027246179@qq.com\Cpp\AddOn\309c2d420bc84ee986db9cdd070ff02a'
+DROP = ['cellphone']
+
+for sub in ['behavior_pack_kcH4M5u0/netease_items_beh', 'resource_pack_t7eJjrxY/netease_items_res']:
+ for m in DROP:
+ p = os.path.join(BASE, sub, 'dn_sa_%s.json' % m)
+ if os.path.exists(p):
+ os.remove(p)
+p = os.path.join(BASE, 'resource_pack_t7eJjrxY/textures/items/cellphone.png')
+if os.path.exists(p):
+ os.remove(p)
+
+IP = os.path.join(BASE, 'resource_pack_t7eJjrxY/textures/item_texture.json')
+it = json.load(open(IP, encoding='utf-8'))
+it['texture_data'].pop('dn_sa:cellphone', None)
+json.dump(it, open(IP, 'w', encoding='utf-8'), ensure_ascii=False, indent=4)
+
+LP = os.path.join(BASE, 'resource_pack_t7eJjrxY/texts/zh_CN.lang')
+lines = open(LP, encoding='utf-8').read().splitlines()
+keep = [l for l in lines if not l.startswith('item.dn_sa:cellphone.')]
+open(LP, 'w', encoding='utf-8').write('\n'.join(keep) + ('\n' if keep else ''))
+
+beh = [f for f in os.listdir(os.path.join(BASE, 'behavior_pack_kcH4M5u0/netease_items_beh')) if f.endswith('.json')]
+print('beh json 总数:', len(beh), '| 材料数:', len(beh) - 44)
diff --git a/_sa_hanhua_out/_tmp/drop_dirty_water.py b/_sa_hanhua_out/_tmp/drop_dirty_water.py
new file mode 100644
index 0000000..148e86f
--- /dev/null
+++ b/_sa_hanhua_out/_tmp/drop_dirty_water.py
@@ -0,0 +1,28 @@
+# -*- coding: utf-8 -*-
+"""剔除 dirty_water_bottle(脏水瓶,带模型)"""
+import os, json
+
+BASE = r'e:\MCStudioDownload\work\3027246179@qq.com\Cpp\AddOn\309c2d420bc84ee986db9cdd070ff02a'
+DROP = ['dirty_water_bottle']
+
+for sub in ['behavior_pack_kcH4M5u0/netease_items_beh', 'resource_pack_t7eJjrxY/netease_items_res']:
+ for m in DROP:
+ p = os.path.join(BASE, sub, 'dn_sa_%s.json' % m)
+ if os.path.exists(p):
+ os.remove(p)
+p = os.path.join(BASE, 'resource_pack_t7eJjrxY/textures/items/dirty_water_bottle.png')
+if os.path.exists(p):
+ os.remove(p)
+
+IP = os.path.join(BASE, 'resource_pack_t7eJjrxY/textures/item_texture.json')
+it = json.load(open(IP, encoding='utf-8'))
+it['texture_data'].pop('dn_sa:dirty_water_bottle', None)
+json.dump(it, open(IP, 'w', encoding='utf-8'), ensure_ascii=False, indent=4)
+
+LP = os.path.join(BASE, 'resource_pack_t7eJjrxY/texts/zh_CN.lang')
+lines = open(LP, encoding='utf-8').read().splitlines()
+keep = [l for l in lines if not l.startswith('item.dn_sa:dirty_water_bottle.')]
+open(LP, 'w', encoding='utf-8').write('\n'.join(keep) + ('\n' if keep else ''))
+
+beh = [f for f in os.listdir(os.path.join(BASE, 'behavior_pack_kcH4M5u0/netease_items_beh')) if f.endswith('.json')]
+print('beh json 总数:', len(beh), '| 材料数:', len(beh) - 44)
diff --git a/_sa_hanhua_out/_tmp/drop_jerry.py b/_sa_hanhua_out/_tmp/drop_jerry.py
new file mode 100644
index 0000000..bb09668
--- /dev/null
+++ b/_sa_hanhua_out/_tmp/drop_jerry.py
@@ -0,0 +1,28 @@
+# -*- coding: utf-8 -*-
+"""剔除 jerry_can(油桶,带模型)"""
+import os, json
+
+BASE = r'e:\MCStudioDownload\work\3027246179@qq.com\Cpp\AddOn\309c2d420bc84ee986db9cdd070ff02a'
+DROP = ['jerry_can']
+
+for sub in ['behavior_pack_kcH4M5u0/netease_items_beh', 'resource_pack_t7eJjrxY/netease_items_res']:
+ for m in DROP:
+ p = os.path.join(BASE, sub, 'dn_sa_%s.json' % m)
+ if os.path.exists(p):
+ os.remove(p)
+p = os.path.join(BASE, 'resource_pack_t7eJjrxY/textures/items/jerry_can.png')
+if os.path.exists(p):
+ os.remove(p)
+
+IP = os.path.join(BASE, 'resource_pack_t7eJjrxY/textures/item_texture.json')
+it = json.load(open(IP, encoding='utf-8'))
+it['texture_data'].pop('dn_sa:jerry_can', None)
+json.dump(it, open(IP, 'w', encoding='utf-8'), ensure_ascii=False, indent=4)
+
+LP = os.path.join(BASE, 'resource_pack_t7eJjrxY/texts/zh_CN.lang')
+lines = open(LP, encoding='utf-8').read().splitlines()
+keep = [l for l in lines if not l.startswith('item.dn_sa:jerry_can.')]
+open(LP, 'w', encoding='utf-8').write('\n'.join(keep) + ('\n' if keep else ''))
+
+beh = [f for f in os.listdir(os.path.join(BASE, 'behavior_pack_kcH4M5u0/netease_items_beh')) if f.endswith('.json')]
+print('beh json 总数:', len(beh), '| 材料数:', len(beh) - 44)
diff --git a/_sa_hanhua_out/_tmp/drop_water_blank.py b/_sa_hanhua_out/_tmp/drop_water_blank.py
new file mode 100644
index 0000000..9e4ceab
--- /dev/null
+++ b/_sa_hanhua_out/_tmp/drop_water_blank.py
@@ -0,0 +1,45 @@
+# -*- coding: utf-8 -*-
+"""剔除 water_bottle / water_bottle2 / blank 三个材料(水瓶带模型、空白为占位物品)"""
+import os, json
+
+BASE = r'e:\MCStudioDownload\work\3027246179@qq.com\Cpp\AddOn\309c2d420bc84ee986db9cdd070ff02a'
+DROP = ['water_bottle', 'water_bottle2', 'blank']
+
+# 1) 删 beh/res json + 贴图
+for sub in ['behavior_pack_kcH4M5u0/netease_items_beh', 'resource_pack_t7eJjrxY/netease_items_res']:
+ for m in DROP:
+ p = os.path.join(BASE, sub, 'dn_sa_%s.json' % m)
+ if os.path.exists(p):
+ os.remove(p)
+ print('删', sub.split('/')[-1], m)
+for m in DROP:
+ p = os.path.join(BASE, 'resource_pack_t7eJjrxY/textures/items/%s.png' % m)
+ if os.path.exists(p):
+ os.remove(p)
+ print('删贴图', m)
+
+# 2) item_texture.json 移除
+IP = os.path.join(BASE, 'resource_pack_t7eJjrxY/textures/item_texture.json')
+it = json.load(open(IP, encoding='utf-8'))
+for m in DROP:
+ it['texture_data'].pop('dn_sa:%s' % m, None)
+json.dump(it, open(IP, 'w', encoding='utf-8'), ensure_ascii=False, indent=4)
+print('item_texture 移除后条数:', len(it['texture_data']))
+
+# 3) zh_CN.lang 移除 name 行
+LP = os.path.join(BASE, 'resource_pack_t7eJjrxY/texts/zh_CN.lang')
+lines = open(LP, encoding='utf-8').read().splitlines()
+keep = []
+removed = 0
+for l in lines:
+ if any(('item.dn_sa:%s.' % m) in l for m in DROP):
+ removed += 1
+ continue
+ keep.append(l)
+open(LP, 'w', encoding='utf-8').write('\n'.join(keep) + ('\n' if keep else ''))
+print('lang 移除行:', removed, '| 剩余行:', len(keep))
+
+# 4) 最终数量
+beh = [f for f in os.listdir(os.path.join(BASE, 'behavior_pack_kcH4M5u0/netease_items_beh')) if f.endswith('.json')]
+print('beh json 总数:', len(beh))
+print('材料数:', len(beh) - 44)
diff --git a/_sa_hanhua_out/_tmp/dump_decor.py b/_sa_hanhua_out/_tmp/dump_decor.py
new file mode 100644
index 0000000..f5c77ba
--- /dev/null
+++ b/_sa_hanhua_out/_tmp/dump_decor.py
@@ -0,0 +1,23 @@
+import zipfile, json, os
+
+base = r"e:\MCStudioDownload\work\3027246179@qq.com\Cpp\AddOn\309c2d420bc84ee986db9cdd070ff02a\_sa_hanhua_out"
+jar = os.path.join(base, "sa_decor-forge-1.20.1-1.0.3.jar")
+
+def load(z, n):
+ return json.loads(z.read(n).decode('utf-8'))
+
+with zipfile.ZipFile(jar) as z:
+ en = load(z, "assets/sa_decor/lang/en_us.json")
+ pt = load(z, "assets/sa_decor/lang/pt_br.json")
+ zh = load(z, "assets/sa_decor/lang/zh_cn.json")
+
+keys = sorted(set(en) | set(pt) | set(zh))
+out = []
+for k in keys:
+ e = en.get(k, "")
+ p = pt.get(k, "")
+ c = zh.get(k, "")
+ out.append(f"{k}\n EN: {e}\n PT: {p}\n ZH: {c}")
+with open(os.path.join(base, "_tmp", "decor_lang.txt"), "w", encoding="utf-8") as f:
+ f.write("\n".join(out))
+ f.write(f"\nTOTAL {len(keys)}\n")
diff --git a/_sa_hanhua_out/_tmp/dump_lang.py b/_sa_hanhua_out/_tmp/dump_lang.py
new file mode 100644
index 0000000..0f002f1
--- /dev/null
+++ b/_sa_hanhua_out/_tmp/dump_lang.py
@@ -0,0 +1,12 @@
+import zipfile, json, sys, io, os
+
+base = r"e:\MCStudioDownload\work\3027246179@qq.com\Cpp\AddOn\309c2d420bc84ee986db9cdd070ff02a\_sa_hanhua_out"
+jars = [f for f in os.listdir(base) if f.endswith('.jar')]
+
+for j in jars:
+ p = os.path.join(base, j)
+ print("=" * 30, j)
+ with zipfile.ZipFile(p) as z:
+ names = [n for n in z.namelist() if '/lang/' in n]
+ for n in names:
+ print(" ", n)
diff --git a/_sa_hanhua_out/_tmp/extract_3classes.py b/_sa_hanhua_out/_tmp/extract_3classes.py
new file mode 100644
index 0000000..b7fb0fc
--- /dev/null
+++ b/_sa_hanhua_out/_tmp/extract_3classes.py
@@ -0,0 +1,25 @@
+import zipfile, os, subprocess
+
+jar = r'e:\MCStudioDownload\work\3027246179@qq.com\Cpp\AddOn\309c2d420bc84ee986db9cdd070ff02a\_sa_hanhua_out\sa_essentials-forge-1.20.1-1.0.0.jar'
+out = r'e:\MCStudioDownload\work\3027246179@qq.com\Cpp\AddOn\309c2d420bc84ee986db9cdd070ff02a\_sa_hanhua_out\_tmp\classes'
+
+targets = [
+ 'com/ogaba/sa_survival/item/tooltip/BackpackContentsTooltip.class',
+ 'com/ogaba/sa_survival/event/ExternalEquipmentStorageTooltipEvents.class',
+ 'com/ogaba/sa_combat/event/SACombatForgeEvents.class',
+]
+
+javap = r'D:\我的世界\bin\javap.EXE'
+for t in targets:
+ p = os.path.join(out, t.replace('/', os.sep))
+ os.makedirs(os.path.dirname(p), exist_ok=True)
+ with zipfile.ZipFile(jar) as z:
+ with open(p, 'wb') as f:
+ f.write(z.read(t))
+ cname = t[:-6].replace('/', '.')
+ r = subprocess.run([javap, '-c', '-p', '-classpath', out, cname], capture_output=True, text=True, encoding='utf-8', errors='replace')
+ text = r.stdout if r.returncode == 0 else r.stderr
+ fn = r'e:\MCStudioDownload\work\3027246179@qq.com\Cpp\AddOn\309c2d420bc84ee986db9cdd070ff02a\_sa_hanhua_out\_tmp\javap_%s.txt' % cname.rsplit('.',1)[-1]
+ with open(fn, 'w', encoding='utf-8') as f:
+ f.write(text)
+ print('==', cname, 'written:', fn)
diff --git a/_sa_hanhua_out/_tmp/extract_classes.py b/_sa_hanhua_out/_tmp/extract_classes.py
new file mode 100644
index 0000000..199e666
--- /dev/null
+++ b/_sa_hanhua_out/_tmp/extract_classes.py
@@ -0,0 +1,45 @@
+import zipfile, os, subprocess, shutil
+
+jar = r'e:\MCStudioDownload\work\3027246179@qq.com\Cpp\AddOn\309c2d420bc84ee986db9cdd070ff02a\_sa_hanhua_out\sa_essentials-forge-1.20.1-1.0.0.jar'
+out = r'e:\MCStudioDownload\work\3027246179@qq.com\Cpp\AddOn\309c2d420bc84ee986db9cdd070ff02a\_sa_hanhua_out\_tmp\classes'
+os.makedirs(out, exist_ok=True)
+
+targets = [
+ 'com/ogaba/sa_combat/client/tooltip/BlueprintClientTooltipComponent.class',
+ 'com/ogaba/sa_combat/client/tooltip/BlueprintClientTooltipComponent$1.class',
+ 'com/ogaba/sa_combat/item/BlueprintTooltipComponent.class',
+ 'com/ogaba/sa_combat/item/BlueprintItem.class',
+ 'com/ogaba/sa_combat/blueprint/BlueprintDefinitionRegistry$Definition.class',
+ 'com/ogaba/sa_combat/blueprint/BlueprintDefinitionRegistry.class',
+]
+
+with zipfile.ZipFile(jar) as z:
+ for t in targets:
+ data = z.read(t)
+ p = os.path.join(out, t.replace('/', os.sep))
+ os.makedirs(os.path.dirname(p), exist_ok=True)
+ with open(p, 'wb') as f:
+ f.write(data)
+ print('extracted:', t)
+
+# javap 反编译查看渲染逻辑
+javap = shutil.which('javap')
+if javap is None:
+ # 尝试常见 JDK 路径
+ for cand in [r'C:\Program Files\Java\jdk-17\bin\javap.exe',
+ r'C:\Program Files\Java\jdk-21\bin\javap.exe',
+ r'C:\Program Files\Microsoft\jdk-17.0.11\bin\javap.exe',
+ r'C:\Program Files\Eclipse Adoptium\jdk-17.0.13.11-hotspot\bin\javap.exe']:
+ if os.path.exists(cand):
+ javap = cand
+ break
+print('javap =', javap)
+
+if javap:
+ for t in targets:
+ cname = t[:-6].replace('/', '.')
+ r = subprocess.run([javap, '-c', '-p', '-classpath', out, cname], capture_output=True, text=True, encoding='utf-8', errors='replace')
+ print('\n' + '='*20, cname, '='*20)
+ print(r.stdout[:6000] if r.returncode == 0 else r.stderr[:3000])
+else:
+ print('javap NOT FOUND')
diff --git a/_sa_hanhua_out/_tmp/extract_matchbox.py b/_sa_hanhua_out/_tmp/extract_matchbox.py
new file mode 100644
index 0000000..cc828de
--- /dev/null
+++ b/_sa_hanhua_out/_tmp/extract_matchbox.py
@@ -0,0 +1,40 @@
+# -*- coding: utf-8 -*-
+import zipfile, os, subprocess
+
+jars = [
+ r"e:\MCStudioDownload\work\3027246179@qq.com\Cpp\AddOn\309c2d420bc84ee986db9cdd070ff02a\_sa_hanhua_out\sa_core-forge-1.20.1-1.0.1.jar",
+ r"e:\MCStudioDownload\work\3027246179@qq.com\Cpp\AddOn\309c2d420bc84ee986db9cdd070ff02a\_sa_hanhua_out\sa_lib-forge-1.20.1-1.0.1.jar",
+ r"e:\MCStudioDownload\work\3027246179@qq.com\Cpp\AddOn\309c2d420bc84ee986db9cdd070ff02a\_sa_hanhua_out\sa_decor-forge-1.20.1-1.0.3.jar",
+ r"e:\MCStudioDownload\work\3027246179@qq.com\Cpp\AddOn\309c2d420bc84ee986db9cdd070ff02a\_sa_hanhua_out\sa_essentials-forge-1.20.1-1.0.0.jar",
+]
+
+TARGET = "com/ogaba/sacore/content/item/tool/MatchboxItem.class"
+OUT = r"C:\Users\30272\AppData\Local\Temp\sa_check\javap_jar\out"
+
+found = None
+for j in jars:
+ if os.path.exists(j):
+ try:
+ with zipfile.ZipFile(j) as z:
+ for n in z.namelist():
+ if n.endswith("MatchboxItem.class") and "tool" in n:
+ found = (j, n)
+ print("FOUND in", j, "->", n)
+ break
+ except Exception as e:
+ print("ERR", j, e)
+
+if found:
+ jar, name = found
+ dstdir = os.path.join(OUT, "com", "ogaba", "sacore", "content", "item", "tool")
+ os.makedirs(dstdir, exist_ok=True)
+ dst = os.path.join(dstdir, "MatchboxItem.class")
+ with zipfile.ZipFile(jar) as z:
+ with z.open(name) as src, open(dst, "wb") as out_f:
+ out_f.write(src.read())
+ print("EXTRACTED to", dst)
+ cfr = r"C:\Users\30272\AppData\Local\Temp\sa_check\javap_jar\cfr.jar"
+ r = subprocess.run(["java", "-jar", cfr, dst, "--outputdir", dstdir],
+ capture_output=True, text=True, timeout=120)
+ print("CFR stdout:", r.stdout[-2000:] if r.stdout else "")
+ print("CFR stderr:", r.stderr[-2000:] if r.stderr else "")
diff --git a/_sa_hanhua_out/_tmp/final_scan.py b/_sa_hanhua_out/_tmp/final_scan.py
new file mode 100644
index 0000000..8137f65
--- /dev/null
+++ b/_sa_hanhua_out/_tmp/final_scan.py
@@ -0,0 +1,34 @@
+import zipfile, re
+
+base = r'e:\MCStudioDownload\work\3027246179@qq.com\Cpp\AddOn\309c2d420bc84ee986db9cdd070ff02a\_sa_hanhua_out'
+jars = {
+ 'essentials': base + r'\sa_essentials-forge-1.20.1-1.0.0.jar',
+ 'lib': base + r'\sa_lib-forge-1.20.1-1.0.1.jar',
+ 'decor': base + r'\sa_decor-forge-1.20.1-1.0.3.jar',
+}
+
+pat = re.compile(r"Survivors?\s+Arsenal", re.IGNORECASE)
+for name, jar in jars.items():
+ hits = []
+ with zipfile.ZipFile(jar) as z:
+ for n in z.namelist():
+ if n.endswith('/') or n.endswith('.png'):
+ continue
+ if n.endswith('.class'):
+ try:
+ b = z.read(n)
+ # class 文件只查 ASCII 字符串
+ s = ''.join(chr(c) for c in b if 32 <= c < 127 or c in (9, 10, 13))
+ except Exception:
+ continue
+ else:
+ try:
+ s = z.read(n).decode('utf-8', errors='ignore')
+ except Exception:
+ continue
+ if pat.search(s):
+ hits.append(n)
+ print(f'[{name}] 英文 mod 名残留(除 lang 文件): {len(hits)} 个')
+ for h in hits:
+ if not ('/lang/' in h):
+ print(' ', h)
diff --git a/_sa_hanhua_out/_tmp/find_food.py b/_sa_hanhua_out/_tmp/find_food.py
new file mode 100644
index 0000000..4513c98
--- /dev/null
+++ b/_sa_hanhua_out/_tmp/find_food.py
@@ -0,0 +1,31 @@
+import zipfile, json, os
+
+base = r"e:\MCStudioDownload\work\3027246179@qq.com\Cpp\AddOn\309c2d420bc84ee986db9cdd070ff02a\_sa_hanhua_out"
+tokens = ["pastel","coxinha","brigadeiro","pacoquita","wind","chips","cheese_bread",
+ "cereal","cracker","guarana","duff","burger","hot_dog","taco","donut","waffle",
+ "biscuit","toast","burrito","candy","jam","cheese","butter","peanut","granola",
+ "energy","vodka","whiskey","wine","beer","cola","pepsi","fanta","monster","coffee"]
+
+langs = {
+ "sa_decor-forge-1.20.1-1.0.3.jar": "assets/sa_decor/lang/",
+ "sa_essentials-forge-1.20.1-1.0.0.jar": "assets/sa_combat/lang/",
+ "sa_lib-forge-1.20.1-1.0.1.jar": "assets/sa_core/lang/",
+}
+
+lines = []
+for jar, langdir in langs.items():
+ p = os.path.join(base, jar)
+ with zipfile.ZipFile(p) as z:
+ names = set(z.namelist())
+ en = json.loads(z.read(langdir + "en_us.json").decode('utf-8')) if langdir + "en_us.json" in names else {}
+ pt = json.loads(z.read(langdir + "pt_br.json").decode('utf-8')) if langdir + "pt_br.json" in names else {}
+ zh = json.loads(z.read(langdir + "zh_cn.json").decode('utf-8')) if langdir + "zh_cn.json" in names else {}
+ hits = [k for k in (set(en) | set(pt) | set(zh))
+ if any(t in k.lower() or t in str(en.get(k,'')).lower() or t in str(pt.get(k,'')).lower() for t in tokens)]
+ lines.append("=" * 30 + " " + jar + f" hits={len(hits)}")
+ for k in sorted(hits):
+ lines.append(f"{k}\n EN: {en.get(k,'')}\n PT: {pt.get(k,'')}\n ZH: {zh.get(k,'')}")
+
+with open(os.path.join(base, "_tmp", "food_all.txt"), "w", encoding="utf-8") as f:
+ f.write("\n".join(lines))
+print("done")
diff --git a/_sa_hanhua_out/_tmp/fix_case.py b/_sa_hanhua_out/_tmp/fix_case.py
new file mode 100644
index 0000000..a4166ad
--- /dev/null
+++ b/_sa_hanhua_out/_tmp/fix_case.py
@@ -0,0 +1,16 @@
+# -*- coding: utf-8 -*-
+import os, glob, shutil
+d = r"e:\MCStudioDownload\work\3027246179@qq.com\Cpp\AddOn\309c2d420bc84ee986db9cdd070ff02a\resource_pack_t7eJjrxY\textures\items"
+# listdir 返回磁盘上的真实文件名(保留大小写)
+names = os.listdir(d)
+print("all *ianbing* in dir:", [n for n in names if "ianbing" in n.lower() and n.lower().endswith(".png")])
+target = os.path.join(d, "jianbing.png")
+for n in names:
+ if n.lower() == "jianbing.png" and n != "jianbing.png":
+ src = os.path.join(d, n)
+ # 复制到小写目标(覆盖),再删除大小写不同的旧名
+ shutil.copyfile(src, target)
+ os.remove(src)
+ print("normalized", n, "->", "jianbing.png")
+print("final files:", [os.path.basename(x) for x in glob.glob(d + r"\*ianbing*.png")])
+print("lowercase exists:", os.path.exists(target))
\ No newline at end of file
diff --git a/_sa_hanhua_out/_tmp/fix_drink_effects.py b/_sa_hanhua_out/_tmp/fix_drink_effects.py
new file mode 100644
index 0000000..01fd3d2
--- /dev/null
+++ b/_sa_hanhua_out/_tmp/fix_drink_effects.py
@@ -0,0 +1,37 @@
+# -*- coding: utf-8 -*-
+"""对齐 Java 版饮用效果:3 个有毒饮品加中毒+反胃;发胶/发酵糊移除饮用功能"""
+import os, json
+
+BASE = r'e:\MCStudioDownload\work\3027246179@qq.com\Cpp\AddOn\309c2d420bc84ee986db9cdd070ff02a'
+TOXIC = ['alcohol', 'rubbing_alcohol', 'cleaning_liquid']
+PLAIN = ['hair_gel', 'fermented_mash']
+
+# 1) 3 个有毒饮品:food 加 effects(中毒 II 10s + 反胃 15s)
+for m in TOXIC:
+ p = os.path.join(BASE, 'behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_%s.json' % m)
+ d = json.load(open(p, encoding='utf-8'))
+ c = d['minecraft:item']['components']
+ c['minecraft:food']['effects'] = [
+ {'name': 'poison', 'chance': 1.0, 'duration': 10, 'amplifier': 1},
+ {'name': 'nausea', 'chance': 1.0, 'duration': 15, 'amplifier': 0}
+ ]
+ json.dump(d, open(p, 'w', encoding='utf-8'), ensure_ascii=False, indent=4)
+ print('加效果:', m)
+
+# 2) 发胶/发酵糊:移除饮用功能(恢复普通物品)
+for m in PLAIN:
+ p = os.path.join(BASE, 'behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_%s.json' % m)
+ d = json.load(open(p, encoding='utf-8'))
+ c = d['minecraft:item']['components']
+ c.pop('minecraft:food', None)
+ c.pop('minecraft:use_duration', None)
+ json.dump(d, open(p, 'w', encoding='utf-8'), ensure_ascii=False, indent=4)
+ rp = os.path.join(BASE, 'resource_pack_t7eJjrxY/netease_items_res/dn_sa_%s.json' % m)
+ r = json.load(open(rp, encoding='utf-8'))
+ r['minecraft:item']['components'].pop('minecraft:use_animation', None)
+ json.dump(r, open(rp, 'w', encoding='utf-8'), ensure_ascii=False, indent=4)
+ print('移除饮用:', m)
+
+# 验证
+p = os.path.join(BASE, 'behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_alcohol.json')
+print(json.dumps(json.load(open(p, encoding='utf-8'))['minecraft:item']['components'], ensure_ascii=False))
diff --git a/_sa_hanhua_out/_tmp/fix_lib_desc.py b/_sa_hanhua_out/_tmp/fix_lib_desc.py
new file mode 100644
index 0000000..c81c52b
--- /dev/null
+++ b/_sa_hanhua_out/_tmp/fix_lib_desc.py
@@ -0,0 +1,34 @@
+import zipfile, os, re, shutil
+
+jar = r'e:\MCStudioDownload\work\3027246179@qq.com\Cpp\AddOn\309c2d420bc84ee986db9cdd070ff02a\_sa_hanhua_out\sa_lib-forge-1.20.1-1.0.1.jar'
+
+with zipfile.ZipFile(jar) as z:
+ infos = z.infolist()
+ data = {i.filename: z.read(i) for i in infos}
+ meta = 'META-INF/mods.toml'
+ text = data[meta].decode('utf-8')
+
+new_text = re.sub(
+ r"description\s*=\s*'''[\s\S]*?'''",
+ "description='''\n我们所有幸存者军火库模组的公共库。\n'''",
+ text,
+ count=1,
+)
+print('changed:', new_text != text)
+print(new_text[:400])
+if new_text != text:
+ data[meta] = new_text.encode('utf-8')
+ tmp = jar + '.tmp'
+ with zipfile.ZipFile(tmp, 'w', zipfile.ZIP_DEFLATED) as z:
+ for i in infos:
+ z.writestr(i, data[i.filename])
+ shutil.move(tmp, jar)
+ print('jar updated.')
+
+# verify
+with zipfile.ZipFile(jar) as z:
+ t = z.read(meta).decode('utf-8')
+ for line in t.splitlines():
+ if 'displayName' in line or 'description' in line:
+ print('VERIFY:', line.strip())
+ print('entries=', len(z.namelist()), 'testzip=', z.testzip())
diff --git a/_sa_hanhua_out/_tmp/fix_modstoml.py b/_sa_hanhua_out/_tmp/fix_modstoml.py
new file mode 100644
index 0000000..7281918
--- /dev/null
+++ b/_sa_hanhua_out/_tmp/fix_modstoml.py
@@ -0,0 +1,68 @@
+import zipfile, os, re, shutil
+
+base = r'e:\MCStudioDownload\work\3027246179@qq.com\Cpp\AddOn\309c2d420bc84ee986db9cdd070ff02a\_sa_hanhua_out'
+jars = {
+ 'essentials': base + r'\sa_essentials-forge-1.20.1-1.0.0.jar',
+ 'lib': base + r'\sa_lib-forge-1.20.1-1.0.1.jar',
+ 'decor': base + r'\sa_decor-forge-1.20.1-1.0.3.jar',
+}
+
+# 每个 jar 的 mods.toml 替换规则:(旧字符串, 新字符串) 或 (正则, 新, is_regex)
+repls = {
+ 'essentials': [
+ ('displayName = "Survivors Arsenal: Essentials"',
+ 'displayName = "幸存者军火库:基础包"'),
+ ('description = "Combat, survival and essential gameplay content for Survivors Arsenal."',
+ 'description = "幸存者军火库的战斗、生存与核心玩法内容。"'),
+ ],
+ 'lib': [
+ ('displayName="Survivor\'s Arsenal: Lib"',
+ 'displayName="幸存者军火库:核心"'),
+ (r"description\s*=\s*'''[\s\S]*?'''",
+ "description='''\n我们所有幸存者军火库模组的公共库。\n'''"),
+ ],
+ 'decor': [
+ ('displayName="Survivor\'s Arsenal: Loot & Decor"',
+ 'displayName="幸存者军火库:战利品与装饰"'),
+ ('description="Decoration module for Survivor\'s Arsenal."',
+ 'description="幸存者军火库的装饰模块。"'),
+ ],
+}
+
+for name, jar in jars.items():
+ with zipfile.ZipFile(jar) as z:
+ infos = z.infolist()
+ data = {i.filename: z.read(i) for i in infos}
+ meta = 'META-INF/mods.toml'
+ text = data[meta].decode('utf-8')
+ orig = text
+ for old, new in repls[name]:
+ if text.find(old) != -1:
+ text = text.replace(old, new)
+ print(f'[{name}] replaced: {old[:60]!r}')
+ else:
+ print(f'[{name}] WARN not found: {old[:60]!r}')
+ if text == orig:
+ print(f'[{name}] NO CHANGES!')
+ continue
+ data[meta] = text.encode('utf-8')
+
+ # 重建 jar
+ tmp = jar + '.tmp'
+ with zipfile.ZipFile(tmp, 'w', zipfile.ZIP_DEFLATED) as z:
+ for i in infos:
+ z.writestr(i, data[i.filename])
+ shutil.move(tmp, jar)
+ print(f'[{name}] jar updated.')
+
+# 验证
+print('\n===== VERIFY =====')
+for name, jar in jars.items():
+ with zipfile.ZipFile(jar) as z:
+ t = z.read('META-INF/mods.toml').decode('utf-8')
+ for line in t.splitlines():
+ if 'displayName' in line or 'description' in line:
+ print(f'[{name}] {line.strip()}')
+ # 检查 jar 完好
+ bad = z.testzip()
+ print(f'[{name}] entries={len(z.namelist())} testzip={bad}')
diff --git a/_sa_hanhua_out/_tmp/fix_reloading.py b/_sa_hanhua_out/_tmp/fix_reloading.py
new file mode 100644
index 0000000..f222283
--- /dev/null
+++ b/_sa_hanhua_out/_tmp/fix_reloading.py
@@ -0,0 +1,42 @@
+import zipfile, os, shutil
+
+base = r'e:\MCStudioDownload\work\3027246179@qq.com\Cpp\AddOn\309c2d420bc84ee986db9cdd070ff02a\_sa_hanhua_out'
+jar = base + r'\sa_essentials-forge-1.20.1-1.0.0.jar'
+target = 'com/ogaba/sa_combat/client/event/SACombatClientForgeEvents.class'
+
+old_ascii = b'Reloading...' # 11 字节
+old_pat = b'\x01\x00\x0b' + old_ascii # CONSTANT_Utf8 tag + u2 length(11) + bytes
+new_utf8 = '换弹中...'.encode('utf-8') # 12 字节 (E6 8D A2 E5 BC B9 E4 B8 AD 2E 2E 2E)
+new_pat = b'\x01\x00\x0c' + new_utf8
+print('new bytes:', new_utf8.hex())
+
+with zipfile.ZipFile(jar) as z:
+ infos = z.infolist()
+ data = {i.filename: z.read(i) for i in infos}
+
+b = data[target]
+cnt = b.count(old_pat)
+print('occurrences of utf8-const pattern:', cnt)
+if cnt != 1:
+ raise SystemExit('ABORT: expected exactly 1 occurrence')
+
+nb = b.replace(old_pat, new_pat)
+print('class size: %d -> %d' % (len(b), len(nb)))
+
+# 验证替换后不再含旧 ASCII(单独出现可能在其他字段;此处仅验证常量池模式消失)
+print('old const gone:', nb.count(old_pat) == 0)
+
+data[target] = nb
+tmp = jar + '.tmp'
+with zipfile.ZipFile(tmp, 'w', zipfile.ZIP_DEFLATED) as z:
+ for i in infos:
+ z.writestr(i, data[i.filename])
+shutil.move(tmp, jar)
+print('jar updated.')
+
+# verify
+with zipfile.ZipFile(jar) as z:
+ nb = z.read(target)
+ print('new const present:', nb.count(new_pat) == 1)
+ print('old ascii anywhere in class:', nb.count(old_ascii))
+ print('entries=', len(z.namelist()), 'testzip=', z.testzip())
diff --git a/_sa_hanhua_out/_tmp/fix_reloading2.py b/_sa_hanhua_out/_tmp/fix_reloading2.py
new file mode 100644
index 0000000..fcd7c15
--- /dev/null
+++ b/_sa_hanhua_out/_tmp/fix_reloading2.py
@@ -0,0 +1,38 @@
+import zipfile, shutil
+
+base = r'e:\MCStudioDownload\work\3027246179@qq.com\Cpp\AddOn\309c2d420bc84ee986db9cdd070ff02a\_sa_hanhua_out'
+jar = base + r'\sa_essentials-forge-1.20.1-1.0.0.jar'
+target = 'com/ogaba/sa_combat/client/event/SACombatClientForgeEvents.class'
+
+old_ascii = b'Reloading...' # 12 字节
+old_pat = b'\x01\x00\x0c' + old_ascii
+new_utf8 = '换弹中...'.encode('utf-8') # 12 字节,与旧串等长
+assert len(new_utf8) == len(old_ascii), (len(new_utf8), len(old_ascii))
+new_pat = b'\x01\x00\x0c' + new_utf8
+print('new bytes:', new_utf8.hex(), 'len', len(new_utf8))
+
+with zipfile.ZipFile(jar) as z:
+ infos = z.infolist()
+ data = {i.filename: z.read(i) for i in infos}
+
+b = data[target]
+cnt = b.count(old_pat)
+print('occurrences:', cnt)
+assert cnt == 1, 'ABORT'
+
+nb = b.replace(old_pat, new_pat)
+assert len(nb) == len(b)
+data[target] = nb
+
+tmp = jar + '.tmp'
+with zipfile.ZipFile(tmp, 'w', zipfile.ZIP_DEFLATED) as z:
+ for i in infos:
+ z.writestr(i, data[i.filename])
+shutil.move(tmp, jar)
+print('jar updated.')
+
+with zipfile.ZipFile(jar) as z:
+ nb = z.read(target)
+ print('new const present:', nb.count(new_pat) == 1)
+ print('old ascii remains:', nb.count(old_ascii))
+ print('entries=', len(z.namelist()), 'testzip=', z.testzip())
diff --git a/_sa_hanhua_out/_tmp/fix_xlsx.py b/_sa_hanhua_out/_tmp/fix_xlsx.py
new file mode 100644
index 0000000..b6d4d87
--- /dev/null
+++ b/_sa_hanhua_out/_tmp/fix_xlsx.py
@@ -0,0 +1,31 @@
+import openpyxl, os
+
+base = r"e:\MCStudioDownload\work\3027246179@qq.com\Cpp\AddOn\309c2d420bc84ee986db9cdd070ff02a"
+p = os.path.join(base, "幸存者军火库食物表.xlsx")
+
+fixes = {
+ "taco": "玉米卷",
+ "taco_rotten": "腐烂的玉米卷",
+ "coxinha": "巴西炸鸡肉饺",
+ "rotten_coxinha": "腐烂的炸鸡肉饺",
+ "coxinha_dough": "炸鸡肉饺生面团",
+ "raw_coxinha": "生炸鸡肉饺",
+ "pastel_dough": "炸饺面团",
+ "raw_cheese_pastel": "生芝士炸饺",
+ "raw_meat_pastel": "生肉馅炸饺",
+ "raw_wind_pastel": "生空心炸饺",
+ "meat_pastel": "肉馅炸饺",
+ "wind_pastel": "空心炸饺",
+ "pacoquita": "巴西花生糖",
+}
+
+wb = openpyxl.load_workbook(p)
+ws = wb["全食物数据表"]
+changed = 0
+for r in range(3, ws.max_row + 1):
+ item = ws.cell(row=r, column=2).value
+ if item in fixes:
+ ws.cell(row=r, column=3).value = fixes[item]
+ changed += 1
+wb.save(p)
+print("changed", changed)
diff --git a/_sa_hanhua_out/_tmp/food_all.txt b/_sa_hanhua_out/_tmp/food_all.txt
new file mode 100644
index 0000000..555867b
--- /dev/null
+++ b/_sa_hanhua_out/_tmp/food_all.txt
@@ -0,0 +1,347 @@
+============================== sa_decor-forge-1.20.1-1.0.3.jar hits=4
+message.sa_decor.cable.endpoint_detected
+ EN: Nearby energy consumer detected at %s %s %s
+ PT: Consumidor de energia detectado em %s %s %s
+ ZH: 在 %s %s %s 检测到附近的用电设备
+message.sa_decor.cable.invalid_pair
+ EN: Connect an energy source to an energy consumer
+ PT: Conecte uma fonte de energia a um consumidor
+ ZH: 请将电源连接到用电设备
+message.sa_decor.fuse_box.energy
+ EN: Fuse Box: %s / %s FE
+ PT: Caixa de Fusíveis: %s / %s FE
+ ZH: 保险丝盒:%s / %s FE
+tooltip.sa_decor.requires_energy
+ EN: Requires FE energy to operate
+ PT: Requer energia FE para funcionar
+ ZH: 运行时需要 FE 能量
+============================== sa_essentials-forge-1.20.1-1.0.0.jar hits=77
+attachment.sa_combat.machetes_head.desc
+ EN: Adds paired blades to the bat head
+ PT: Adiciona lâminas duplas na cabeça do taco
+ ZH: 在球棒头装上双砍刀
+item.sa_combat.aluminum_baseball_bat
+ EN: Aluminum Baseball Bat
+ PT: Taco de Baseball de Alumínio
+ ZH: 铝制棒球棒
+item.sa_combat.barbecue_chips_bag
+ EN: Barbecue Chips Bag
+ PT: Saco de Chips Barbecue
+ ZH: 烧烤味薯片袋
+item.sa_combat.baseball_bat
+ EN: Baseball Bat
+ PT: Taco de Baseball
+ ZH: 棒球棒
+item.sa_combat.beer
+ EN: Beer
+ PT: Cerveja
+ ZH: 啤酒
+item.sa_combat.big_burger
+ EN: Big Burger
+ PT: Big Burger
+ ZH: 大汉堡
+item.sa_combat.big_burger_rotten
+ EN: Rotten Big Burger
+ PT: Big Burger Estragado
+ ZH: 腐烂的大汉堡
+item.sa_combat.biscuit
+ EN: Biscuit
+ PT: Biscoito
+ ZH: 饼干
+item.sa_combat.biscuit_rotten
+ EN: Rotten Biscuit
+ PT: Biscoito Estragado
+ ZH: 腐烂的饼干
+item.sa_combat.brigadeiro
+ EN: Brigadeiro
+ PT: Brigadeiro
+ ZH: 巴西巧克力球
+item.sa_combat.burger
+ EN: Burger
+ PT: Burger
+ ZH: 汉堡
+item.sa_combat.burger_rotten
+ EN: Rotten Burger
+ PT: Burger Estragado
+ ZH: 腐烂的汉堡
+item.sa_combat.burrito
+ EN: Burrito
+ PT: Burrito
+ ZH: 卷饼
+item.sa_combat.burrito_rotten
+ EN: Rotten Burrito
+ PT: Burrito Estragado
+ ZH: 腐烂的卷饼
+item.sa_combat.butter
+ EN: Butter
+ PT: Manteiga
+ ZH: 黄油
+item.sa_combat.candy_package
+ EN: Candy Package
+ PT: Pacote de Doces
+ ZH: 糖果包
+item.sa_combat.candys
+ EN: Candys
+ PT: Doces
+ ZH: 糖果
+item.sa_combat.cereal
+ EN: Cereal Box
+ PT: Caixa de Cereal
+ ZH: 麦片盒
+item.sa_combat.cereal_fruit_loops
+ EN: Fruit Loops Cereal Box
+ PT: Caixa de Cereal Fruit Loops
+ ZH: 水果圈麦片盒
+item.sa_combat.cereal_fruit_loops_flakes
+ EN: Fruit Loops Cereal
+ PT: Cereal Fruit Loops
+ ZH: 水果圈麦片
+item.sa_combat.cereal_kelloggys
+ EN: Kelloggys Cereal Box
+ PT: Caixa de Cereal Kelloggys
+ ZH: 家乐氏麦片盒
+item.sa_combat.cereal_kelloggys_flakes
+ EN: Kelloggys Cereal
+ PT: Cereal Kelloggys
+ ZH: 家乐氏麦片
+item.sa_combat.cheese
+ EN: Cheese
+ PT: Queijo
+ ZH: 奶酪
+item.sa_combat.cheese_bread
+ EN: Cheese Bread
+ PT: Pão de Queijo
+ ZH: 奶酪面包
+item.sa_combat.cheese_burger
+ EN: Cheese Burger
+ PT: Cheeseburger
+ ZH: 芝士汉堡
+item.sa_combat.cheese_burger_rotten
+ EN: Rotten Cheese Burger
+ PT: Cheeseburger Estragado
+ ZH: 腐烂的芝士汉堡
+item.sa_combat.chips
+ EN: Chips
+ PT: Chips
+ ZH: 薯片
+item.sa_combat.chocolate_bar
+ EN: Chocolate Bar
+ PT: Barra de Chocolate
+ ZH: 巧克力棒
+item.sa_combat.coffee
+ EN: Coffee
+ PT: Café
+ ZH: 咖啡
+item.sa_combat.cola
+ EN: Cola
+ PT: Cola
+ ZH: 可乐
+item.sa_combat.coxinha
+ EN: Coxinha
+ PT: Coxinha
+ ZH: 巴西炸鸡肉饺
+item.sa_combat.coxinha_dough
+ EN: Coxinha Dough
+ PT: Massa de Coxinha
+ ZH: 炸鸡肉饺面团
+item.sa_combat.donut
+ EN: Donut
+ PT: Donut
+ ZH: 甜甜圈
+item.sa_combat.donut_rotten
+ EN: Rotten Donut
+ PT: Donut Estragado
+ ZH: 腐烂的甜甜圈
+item.sa_combat.duff_beer
+ EN: Duff Beer
+ PT: Duff Beer
+ ZH: 达夫啤酒
+item.sa_combat.duffel_bag_black
+ EN: Black Duffel Bag
+ PT: Bolsa Duffel Preta
+ ZH: 黑色旅行袋
+item.sa_combat.duffel_bag_blue
+ EN: Blue Duffel Bag
+ PT: Bolsa Duffel Azul
+ ZH: 蓝色旅行袋
+item.sa_combat.duffel_bag_red
+ EN: Red Duffel Bag
+ PT: Bolsa Duffel Vermelha
+ ZH: 红色旅行袋
+item.sa_combat.duffel_bag_yellow
+ EN: Yellow Duffel Bag
+ PT: Bolsa Duffel Amarela
+ ZH: 黄色旅行袋
+item.sa_combat.energy_bar
+ EN: Energy Bar
+ PT: Barra Energética
+ ZH: 能量棒
+item.sa_combat.energy_drink
+ EN: Energy Drink
+ PT: Energético
+ ZH: 能量饮料
+item.sa_combat.energy_drink.opened
+ EN: Opened Energy Drink
+ PT: Energético Aberto
+ ZH: 已开封的能量饮料
+item.sa_combat.fanta_grape_soda
+ EN: Fanta Grape Soda
+ PT: Fanta Uva
+ ZH: 芬达葡萄汽水
+item.sa_combat.fanta_orange_soda
+ EN: Fanta Orange Soda
+ PT: Fanta Laranja
+ ZH: 芬达橙味汽水
+item.sa_combat.fruit_jam
+ EN: Fruit Jam
+ PT: Geleia de Frutas
+ ZH: 水果酱
+item.sa_combat.golf_stick
+ EN: Golf Club
+ PT: Taco de Golfe
+ ZH: 高尔夫球杆
+item.sa_combat.granola_bar
+ EN: Granola Bar
+ PT: Barra de Granola
+ ZH: 燕麦棒
+item.sa_combat.guarana_soda
+ EN: Guarana Soda
+ PT: Guaraná
+ ZH: 瓜拉纳汽水
+item.sa_combat.hot_dog
+ EN: Hot Dog
+ PT: Cachorro-Quente
+ ZH: 热狗
+item.sa_combat.hot_dog_rotten
+ EN: Rotten Hot Dog
+ PT: Cachorro-Quente Estragado
+ ZH: 腐烂的热狗
+item.sa_combat.meat_pastel
+ EN: Meat Pastel
+ PT: Pastel de Carne
+ ZH: 肉馅炸饺
+item.sa_combat.monster
+ EN: Monster
+ PT: Monster
+ ZH: 怪物能量饮料
+item.sa_combat.monster.opened
+ EN: Opened Monster
+ PT: Monster Aberto
+ ZH: 已开封的怪物能量饮料
+item.sa_combat.pacoquita
+ EN: Pacoquita
+ PT: Paçoquita
+ ZH: 帕科基塔
+item.sa_combat.pastel_dough
+ EN: Pastel Dough
+ PT: Massa de Pastel
+ ZH: 炸饺面团
+item.sa_combat.peanut_butter
+ EN: Peanut Butter
+ PT: Pasta de Amendoim
+ ZH: 花生酱
+item.sa_combat.pepsi
+ EN: Pepsi
+ PT: Pepsi
+ ZH: 百事可乐
+item.sa_combat.plain_chips_bag
+ EN: Plain Chips Bag
+ PT: Saco de Chips Natural
+ ZH: 原味薯片袋
+item.sa_combat.raw_cheese_pastel
+ EN: Raw Cheese Pastel
+ PT: Pastel de Queijo Cru
+ ZH: 生芝士炸饺
+item.sa_combat.raw_coxinha
+ EN: Raw Coxinha
+ PT: Coxinha Crua
+ ZH: 生炸鸡肉饺
+item.sa_combat.raw_meat_pastel
+ EN: Raw Meat Pastel
+ PT: Pastel de Carne Cru
+ ZH: 生肉馅炸饺
+item.sa_combat.raw_wind_pastel
+ EN: Raw Wind Pastel
+ PT: Pastel de Vento Cru
+ ZH: 生空心炸饺
+item.sa_combat.rotten_coxinha
+ EN: Rotten Coxinha
+ PT: Coxinha Estragada
+ ZH: 腐烂的炸鸡肉饺
+item.sa_combat.salt_vinegar_chips_bag
+ EN: Salt & Vinegar Chips Bag
+ PT: Saco de Chips Sal e Vinagre
+ ZH: 盐醋味薯片袋
+item.sa_combat.saltine_cracker
+ EN: Saltine Cracker
+ PT: Bolacha Água e Sal
+ ZH: 苏打饼干
+item.sa_combat.sour_cream_onion_chips_bag
+ EN: Sour Cream & Onion Chips Bag
+ PT: Saco de Chips Sour Cream e Cebola
+ ZH: 酸奶油洋葱味薯片袋
+item.sa_combat.taco
+ EN: Taco
+ PT: Taco
+ ZH: 玉米卷
+item.sa_combat.taco_rotten
+ EN: Rotten Taco
+ PT: Taco Estragado
+ ZH: 腐烂的玉米卷
+item.sa_combat.toast
+ EN: Toast
+ PT: Torrada
+ ZH: 吐司
+item.sa_combat.toast_rotten
+ EN: Rotten Toast
+ PT: Torrada Estragada
+ ZH: 腐烂的吐司
+item.sa_combat.vodka
+ EN: Vodka
+ PT: Vodka
+ ZH: 伏特加
+item.sa_combat.waffles
+ EN: Waffles
+ PT: Waffles
+ ZH: 华夫饼
+item.sa_combat.waffles_rotten
+ EN: Rotten Waffles
+ PT: Waffles Estragados
+ ZH: 腐烂的华夫饼
+item.sa_combat.whiskey
+ EN: Whiskey
+ PT: Whiskey
+ ZH: 威士忌
+item.sa_combat.wind_pastel
+ EN: Wind Pastel
+ PT: Pastel de Vento
+ ZH: 空心炸饺
+item.sa_combat.wine
+ EN: Wine
+ PT: Vinho
+ ZH: 葡萄酒
+modifier.sa_combat.machetes_head.desc
+ EN: Adds paired machetes to the bat head: Bleeding II, +1 damage, +100 durability.
+ PT: Adiciona facões duplos na cabeça do taco: Sangramento II, +1 de dano e +100 de durabilidade.
+ ZH: 在球棒头加装双砍刀:流血 II、+1 伤害、+100 耐久。
+============================== sa_lib-forge-1.20.1-1.0.1.jar hits=5
+item.sa_core.glue
+ EN: Glue
+ PT: Cola
+ ZH: 胶水
+item.sa_core.plastic_bag
+ EN: Plastic Bag
+ PT: Sacola Plástica
+ ZH: 塑料袋
+screen.sa_core.generator.energy
+ EN: Energy: %s / %s
+ PT: Energia: %s / %s
+ ZH: 能量:%s / %s
+screen.sa_core.recycler.energy
+ EN: Energy: %s / %s FE
+ PT: Energia: %s / %s FE
+ ZH: 能量:%s / %s FE
+tooltip.sa_core.recycler.energy
+ EN: Requires FE while processing (40 FE/t)
+ PT: Requer FE durante o processamento (40 FE/t)
+ ZH: 处理时需要 FE 能量(40 FE/t)
\ No newline at end of file
diff --git a/_sa_hanhua_out/_tmp/javap_BackpackContentsTooltip.txt b/_sa_hanhua_out/_tmp/javap_BackpackContentsTooltip.txt
new file mode 100644
index 0000000..e5e613a
--- /dev/null
+++ b/_sa_hanhua_out/_tmp/javap_BackpackContentsTooltip.txt
@@ -0,0 +1,150 @@
+Compiled from "BackpackContentsTooltip.java"
+public final class com.ogaba.sa_survival.item.tooltip.BackpackContentsTooltip extends java.lang.Record implements net.minecraft.world.inventory.tooltip.TooltipComponent {
+ private final net.minecraft.world.item.ItemStack sourceStack;
+
+ private final java.util.List items;
+
+ private final int slotCount;
+
+ private static final java.lang.String BACKPACK_ITEMS_TAG;
+
+ private static final java.lang.String CLOTHING_ITEMS_TAG;
+
+ public com.ogaba.sa_survival.item.tooltip.BackpackContentsTooltip(net.minecraft.world.item.ItemStack, java.util.List, int);
+ Code:
+ 0: aload_0
+ 1: invokespecial #32 // Method java/lang/Record."":()V
+ 4: aload_0
+ 5: aload_1
+ 6: putfield #34 // Field sourceStack:Lnet/minecraft/world/item/ItemStack;
+ 9: aload_0
+ 10: aload_2
+ 11: putfield #36 // Field items:Ljava/util/List;
+ 14: aload_0
+ 15: iload_3
+ 16: putfield #38 // Field slotCount:I
+ 19: return
+
+ public static com.ogaba.sa_survival.item.tooltip.BackpackContentsTooltip from(net.minecraft.world.item.ItemStack, int);
+ Code:
+ 0: aload_0
+ 1: iload_1
+ 2: ldc #23 // String Items
+ 4: invokestatic #46 // Method fromTag:(Lnet/minecraft/world/item/ItemStack;ILjava/lang/String;)Lcom/ogaba/sa_survival/item/tooltip/BackpackContentsTooltip;
+ 7: areturn
+
+ public static com.ogaba.sa_survival.item.tooltip.BackpackContentsTooltip fromClothing(net.minecraft.world.item.ItemStack, int);
+ Code:
+ 0: aload_0
+ 1: iload_1
+ 2: ldc #26 // String ClothingItems
+ 4: invokestatic #46 // Method fromTag:(Lnet/minecraft/world/item/ItemStack;ILjava/lang/String;)Lcom/ogaba/sa_survival/item/tooltip/BackpackContentsTooltip;
+ 7: areturn
+
+ private static com.ogaba.sa_survival.item.tooltip.BackpackContentsTooltip fromTag(net.minecraft.world.item.ItemStack, int, java.lang.String);
+ Code:
+ 0: iconst_0
+ 1: iload_1
+ 2: invokestatic #57 // Method java/lang/Math.max:(II)I
+ 5: istore_3
+ 6: new #59 // class net/minecraftforge/items/ItemStackHandler
+ 9: dup
+ 10: invokespecial #60 // Method net/minecraftforge/items/ItemStackHandler."":()V
+ 13: astore 4
+ 15: aload_0
+ 16: invokevirtual #66 // Method net/minecraft/world/item/ItemStack.m_41782_:()Z
+ 19: ifeq 67
+ 22: aload_0
+ 23: invokevirtual #70 // Method net/minecraft/world/item/ItemStack.m_41783_:()Lnet/minecraft/nbt/CompoundTag;
+ 26: astore 5
+ 28: aload 5
+ 30: ifnull 67
+ 33: aload 5
+ 35: aload_2
+ 36: invokevirtual #76 // Method net/minecraft/nbt/CompoundTag.m_128441_:(Ljava/lang/String;)Z
+ 39: ifeq 67
+ 42: aload 4
+ 44: aload 5
+ 46: aload_2
+ 47: invokevirtual #80 // Method net/minecraft/nbt/CompoundTag.m_128469_:(Ljava/lang/String;)Lnet/minecraft/nbt/CompoundTag;
+ 50: invokevirtual #84 // Method net/minecraftforge/items/ItemStackHandler.deserializeNBT:(Lnet/minecraft/nbt/CompoundTag;)V
+ 53: goto 67
+ 56: astore 6
+ 58: new #59 // class net/minecraftforge/items/ItemStackHandler
+ 61: dup
+ 62: invokespecial #60 // Method net/minecraftforge/items/ItemStackHandler."":()V
+ 65: astore 4
+ 67: new #88 // class java/util/ArrayList
+ 70: dup
+ 71: iload_3
+ 72: invokespecial #91 // Method java/util/ArrayList."":(I)V
+ 75: astore 5
+ 77: iconst_0
+ 78: istore 6
+ 80: iload 6
+ 82: iload_3
+ 83: if_icmpge 126
+ 86: aload 5
+ 88: iload 6
+ 90: aload 4
+ 92: invokevirtual #97 // Method net/minecraftforge/items/ItemStackHandler.getSlots:()I
+ 95: if_icmpge 111
+ 98: aload 4
+ 100: iload 6
+ 102: invokevirtual #101 // Method net/minecraftforge/items/ItemStackHandler.getStackInSlot:(I)Lnet/minecraft/world/item/ItemStack;
+ 105: invokevirtual #105 // Method net/minecraft/world/item/ItemStack.m_41777_:()Lnet/minecraft/world/item/ItemStack;
+ 108: goto 114
+ 111: getstatic #108 // Field net/minecraft/world/item/ItemStack.f_41583_:Lnet/minecraft/world/item/ItemStack;
+ 114: invokeinterface #112, 2 // InterfaceMethod java/util/List.add:(Ljava/lang/Object;)Z
+ 119: pop
+ 120: iinc 6, 1
+ 123: goto 80
+ 126: new #2 // class com/ogaba/sa_survival/item/tooltip/BackpackContentsTooltip
+ 129: dup
+ 130: aload_0
+ 131: invokevirtual #105 // Method net/minecraft/world/item/ItemStack.m_41777_:()Lnet/minecraft/world/item/ItemStack;
+ 134: aload 5
+ 136: iload_3
+ 137: invokespecial #114 // Method "":(Lnet/minecraft/world/item/ItemStack;Ljava/util/List;I)V
+ 140: areturn
+ Exception table:
+ from to target type
+ 42 53 56 Class java/lang/Throwable
+
+ public final java.lang.String toString();
+ Code:
+ 0: aload_0
+ 1: invokedynamic #141, 0 // InvokeDynamic #0:toString:(Lcom/ogaba/sa_survival/item/tooltip/BackpackContentsTooltip;)Ljava/lang/String;
+ 6: areturn
+
+ public final int hashCode();
+ Code:
+ 0: aload_0
+ 1: invokedynamic #145, 0 // InvokeDynamic #0:hashCode:(Lcom/ogaba/sa_survival/item/tooltip/BackpackContentsTooltip;)I
+ 6: ireturn
+
+ public final boolean equals(java.lang.Object);
+ Code:
+ 0: aload_0
+ 1: aload_1
+ 2: invokedynamic #149, 0 // InvokeDynamic #0:equals:(Lcom/ogaba/sa_survival/item/tooltip/BackpackContentsTooltip;Ljava/lang/Object;)Z
+ 7: ireturn
+
+ public net.minecraft.world.item.ItemStack sourceStack();
+ Code:
+ 0: aload_0
+ 1: getfield #34 // Field sourceStack:Lnet/minecraft/world/item/ItemStack;
+ 4: areturn
+
+ public java.util.List items();
+ Code:
+ 0: aload_0
+ 1: getfield #36 // Field items:Ljava/util/List;
+ 4: areturn
+
+ public int slotCount();
+ Code:
+ 0: aload_0
+ 1: getfield #38 // Field slotCount:I
+ 4: ireturn
+}
diff --git a/_sa_hanhua_out/_tmp/javap_ExternalEquipmentStorageTooltipEvents.txt b/_sa_hanhua_out/_tmp/javap_ExternalEquipmentStorageTooltipEvents.txt
new file mode 100644
index 0000000..220275b
--- /dev/null
+++ b/_sa_hanhua_out/_tmp/javap_ExternalEquipmentStorageTooltipEvents.txt
@@ -0,0 +1,174 @@
+Compiled from "ExternalEquipmentStorageTooltipEvents.java"
+public final class com.ogaba.sa_survival.event.ExternalEquipmentStorageTooltipEvents {
+ private com.ogaba.sa_survival.event.ExternalEquipmentStorageTooltipEvents();
+ Code:
+ 0: aload_0
+ 1: invokespecial #41 // Method java/lang/Object."":()V
+ 4: return
+
+ public static void onItemTooltip(net.minecraftforge.event.entity.player.ItemTooltipEvent);
+ Code:
+ 0: aload_0
+ 1: invokevirtual #55 // Method net/minecraftforge/event/entity/player/ItemTooltipEvent.getItemStack:()Lnet/minecraft/world/item/ItemStack;
+ 4: astore_1
+ 5: aload_1
+ 6: invokevirtual #61 // Method net/minecraft/world/item/ItemStack.m_41619_:()Z
+ 9: ifne 22
+ 12: aload_1
+ 13: invokevirtual #65 // Method net/minecraft/world/item/ItemStack.m_41720_:()Lnet/minecraft/world/item/Item;
+ 16: instanceof #67 // class com/ogaba/sa_survival/item/clothing/ClothingStorageItem
+ 19: ifeq 23
+ 22: return
+ 23: aload_1
+ 24: invokestatic #71 // Method com/ogaba/sa_survival/item/clothing/ExternalEquipmentStorage.resolve:(Lnet/minecraft/world/item/ItemStack;)Ljava/util/Optional;
+ 27: aconst_null
+ 28: invokevirtual #77 // Method java/util/Optional.orElse:(Ljava/lang/Object;)Ljava/lang/Object;
+ 31: checkcast #16 // class com/ogaba/sa_survival/item/clothing/ExternalEquipmentStorage$Entry
+ 34: astore_2
+ 35: aload_2
+ 36: ifnull 46
+ 39: aload_2
+ 40: invokevirtual #81 // Method com/ogaba/sa_survival/item/clothing/ExternalEquipmentStorage$Entry.slots:()I
+ 43: ifgt 47
+ 46: return
+ 47: aload_0
+ 48: invokevirtual #85 // Method net/minecraftforge/event/entity/player/ItemTooltipEvent.getToolTip:()Ljava/util/List;
+ 51: astore_3
+ 52: aload_3
+ 53: ldc #87 // String extra slots
+ 55: aload_2
+ 56: invokevirtual #81 // Method com/ogaba/sa_survival/item/clothing/ExternalEquipmentStorage$Entry.slots:()I
+ 59: invokedynamic #99, 0 // InvokeDynamic #0:makeConcatWithConstants:(I)Ljava/lang/String;
+ 64: invokestatic #105 // InterfaceMethod net/minecraft/network/chat/Component.m_237113_:(Ljava/lang/String;)Lnet/minecraft/network/chat/MutableComponent;
+ 67: getstatic #111 // Field net/minecraft/ChatFormatting.GRAY:Lnet/minecraft/ChatFormatting;
+ 70: invokevirtual #117 // Method net/minecraft/network/chat/MutableComponent.m_130940_:(Lnet/minecraft/ChatFormatting;)Lnet/minecraft/network/chat/MutableComponent;
+ 73: iconst_1
+ 74: invokestatic #121 // Method insertIfMissing:(Ljava/util/List;Ljava/lang/String;Lnet/minecraft/network/chat/Component;I)V
+ 77: aload_3
+ 78: ldc #123 // String ��סShift��Ԥ������
+ 80: ldc #123 // String ��סShift��Ԥ������
+ 82: invokestatic #105 // InterfaceMethod net/minecraft/network/chat/Component.m_237113_:(Ljava/lang/String;)Lnet/minecraft/network/chat/MutableComponent;
+ 85: getstatic #126 // Field net/minecraft/ChatFormatting.DARK_GRAY:Lnet/minecraft/ChatFormatting;
+ 88: invokevirtual #117 // Method net/minecraft/network/chat/MutableComponent.m_130940_:(Lnet/minecraft/ChatFormatting;)Lnet/minecraft/network/chat/MutableComponent;
+ 91: iconst_2
+ 92: invokestatic #121 // Method insertIfMissing:(Ljava/util/List;Ljava/lang/String;Lnet/minecraft/network/chat/Component;I)V
+ 95: return
+
+ public static void onGatherTooltipComponents(net.minecraftforge.client.event.RenderTooltipEvent$GatherComponents);
+ Code:
+ 0: aload_0
+ 1: invokevirtual #138 // Method net/minecraftforge/client/event/RenderTooltipEvent$GatherComponents.getItemStack:()Lnet/minecraft/world/item/ItemStack;
+ 4: astore_1
+ 5: aload_1
+ 6: invokevirtual #61 // Method net/minecraft/world/item/ItemStack.m_41619_:()Z
+ 9: ifne 22
+ 12: aload_1
+ 13: invokevirtual #65 // Method net/minecraft/world/item/ItemStack.m_41720_:()Lnet/minecraft/world/item/Item;
+ 16: instanceof #67 // class com/ogaba/sa_survival/item/clothing/ClothingStorageItem
+ 19: ifeq 23
+ 22: return
+ 23: aload_1
+ 24: invokestatic #71 // Method com/ogaba/sa_survival/item/clothing/ExternalEquipmentStorage.resolve:(Lnet/minecraft/world/item/ItemStack;)Ljava/util/Optional;
+ 27: aconst_null
+ 28: invokevirtual #77 // Method java/util/Optional.orElse:(Ljava/lang/Object;)Ljava/lang/Object;
+ 31: checkcast #16 // class com/ogaba/sa_survival/item/clothing/ExternalEquipmentStorage$Entry
+ 34: astore_2
+ 35: aload_2
+ 36: ifnull 56
+ 39: aload_2
+ 40: invokevirtual #81 // Method com/ogaba/sa_survival/item/clothing/ExternalEquipmentStorage$Entry.slots:()I
+ 43: ifle 56
+ 46: aload_0
+ 47: invokevirtual #141 // Method net/minecraftforge/client/event/RenderTooltipEvent$GatherComponents.getTooltipElements:()Ljava/util/List;
+ 50: invokestatic #145 // Method hasStoragePreview:(Ljava/util/List;)Z
+ 53: ifeq 57
+ 56: return
+ 57: iconst_1
+ 58: aload_0
+ 59: invokevirtual #141 // Method net/minecraftforge/client/event/RenderTooltipEvent$GatherComponents.getTooltipElements:()Ljava/util/List;
+ 62: invokeinterface #150, 1 // InterfaceMethod java/util/List.size:()I
+ 67: invokestatic #156 // Method java/lang/Math.min:(II)I
+ 70: istore_3
+ 71: aload_0
+ 72: invokevirtual #141 // Method net/minecraftforge/client/event/RenderTooltipEvent$GatherComponents.getTooltipElements:()Ljava/util/List;
+ 75: iload_3
+ 76: aload_1
+ 77: aload_2
+ 78: invokevirtual #81 // Method com/ogaba/sa_survival/item/clothing/ExternalEquipmentStorage$Entry.slots:()I
+ 81: invokestatic #162 // Method com/ogaba/sa_survival/item/tooltip/BackpackContentsTooltip.fromClothing:(Lnet/minecraft/world/item/ItemStack;I)Lcom/ogaba/sa_survival/item/tooltip/BackpackContentsTooltip;
+ 84: invokestatic #168 // Method com/mojang/datafixers/util/Either.right:(Ljava/lang/Object;)Lcom/mojang/datafixers/util/Either;
+ 87: invokeinterface #172, 3 // InterfaceMethod java/util/List.add:(ILjava/lang/Object;)V
+ 92: return
+
+ private static void insertIfMissing(java.util.List, java.lang.String, net.minecraft.network.chat.Component, int);
+ Code:
+ 0: aload_0
+ 1: invokeinterface #180, 1 // InterfaceMethod java/util/List.iterator:()Ljava/util/Iterator;
+ 6: astore 4
+ 8: aload 4
+ 10: invokeinterface #185, 1 // InterfaceMethod java/util/Iterator.hasNext:()Z
+ 15: ifeq 48
+ 18: aload 4
+ 20: invokeinterface #189, 1 // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
+ 25: checkcast #101 // class net/minecraft/network/chat/Component
+ 28: astore 5
+ 30: aload 5
+ 32: invokeinterface #193, 1 // InterfaceMethod net/minecraft/network/chat/Component.getString:()Ljava/lang/String;
+ 37: aload_1
+ 38: invokevirtual #199 // Method java/lang/String.contains:(Ljava/lang/CharSequence;)Z
+ 41: ifeq 45
+ 44: return
+ 45: goto 8
+ 48: aload_0
+ 49: invokeinterface #202, 1 // InterfaceMethod java/util/List.isEmpty:()Z
+ 54: ifeq 61
+ 57: iconst_0
+ 58: goto 75
+ 61: iconst_1
+ 62: iload_3
+ 63: aload_0
+ 64: invokeinterface #150, 1 // InterfaceMethod java/util/List.size:()I
+ 69: invokestatic #156 // Method java/lang/Math.min:(II)I
+ 72: invokestatic #205 // Method java/lang/Math.max:(II)I
+ 75: istore 4
+ 77: aload_0
+ 78: iload 4
+ 80: aload_2
+ 81: invokeinterface #172, 3 // InterfaceMethod java/util/List.add:(ILjava/lang/Object;)V
+ 86: return
+
+ private static boolean hasStoragePreview(java.util.List>);
+ Code:
+ 0: aload_0
+ 1: invokeinterface #180, 1 // InterfaceMethod java/util/List.iterator:()Ljava/util/Iterator;
+ 6: astore_1
+ 7: aload_1
+ 8: invokeinterface #185, 1 // InterfaceMethod java/util/Iterator.hasNext:()Z
+ 13: ifeq 59
+ 16: aload_1
+ 17: invokeinterface #189, 1 // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
+ 22: checkcast #164 // class com/mojang/datafixers/util/Either
+ 25: astore_2
+ 26: aload_2
+ 27: invokevirtual #216 // Method com/mojang/datafixers/util/Either.right:()Ljava/util/Optional;
+ 30: invokedynamic #234, 0 // InvokeDynamic #1:apply:()Ljava/util/function/Function;
+ 35: invokevirtual #238 // Method java/util/Optional.map:(Ljava/util/function/Function;)Ljava/util/Optional;
+ 38: iconst_0
+ 39: invokestatic #244 // Method java/lang/Boolean.valueOf:(Z)Ljava/lang/Boolean;
+ 42: invokevirtual #77 // Method java/util/Optional.orElse:(Ljava/lang/Object;)Ljava/lang/Object;
+ 45: checkcast #240 // class java/lang/Boolean
+ 48: invokevirtual #247 // Method java/lang/Boolean.booleanValue:()Z
+ 51: ifeq 56
+ 54: iconst_1
+ 55: ireturn
+ 56: goto 7
+ 59: iconst_0
+ 60: ireturn
+
+ private static java.lang.Boolean lambda$hasStoragePreview$0(net.minecraft.world.inventory.tooltip.TooltipComponent);
+ Code:
+ 0: aload_0
+ 1: instanceof #158 // class com/ogaba/sa_survival/item/tooltip/BackpackContentsTooltip
+ 4: invokestatic #244 // Method java/lang/Boolean.valueOf:(Z)Ljava/lang/Boolean;
+ 7: areturn
+}
diff --git a/_sa_hanhua_out/_tmp/javap_SACombatForgeEvents.txt b/_sa_hanhua_out/_tmp/javap_SACombatForgeEvents.txt
new file mode 100644
index 0000000..627a71b
--- /dev/null
+++ b/_sa_hanhua_out/_tmp/javap_SACombatForgeEvents.txt
@@ -0,0 +1,1356 @@
+Compiled from "SACombatForgeEvents.java"
+public final class com.ogaba.sa_combat.event.SACombatForgeEvents {
+ private static final java.util.UUID EXTERNAL_UPGRADE_DAMAGE_UUID;
+
+ private static final java.util.UUID EXTERNAL_UPGRADE_SPEED_UUID;
+
+ private static final java.util.UUID EXTERNAL_UPGRADE_KNOCKBACK_UUID;
+
+ private static final java.util.UUID EXTERNAL_UPGRADE_REACH_UUID;
+
+ private static final java.util.UUID TACZ_VEST_BULLET_RESISTANCE_UUID;
+
+ private static final net.minecraft.resources.ResourceLocation TACZ_BULLET_RESISTANCE_ID;
+
+ private static boolean proccingExternalAbility;
+
+ private static boolean proccingShieldThorns;
+
+ private static final int ICE_AXE_CLIMB_SOUND_INTERVAL_TICKS;
+
+ private com.ogaba.sa_combat.event.SACombatForgeEvents();
+ Code:
+ 0: aload_0
+ 1: invokespecial #92 // Method java/lang/Object."":()V
+ 4: return
+
+ public static void addTaczVestBulletResistance(net.minecraftforge.event.ItemAttributeModifierEvent);
+ Code:
+ 0: aload_0
+ 1: invokevirtual #103 // Method net/minecraftforge/event/ItemAttributeModifierEvent.getSlotType:()Lnet/minecraft/world/entity/EquipmentSlot;
+ 4: getstatic #109 // Field net/minecraft/world/entity/EquipmentSlot.CHEST:Lnet/minecraft/world/entity/EquipmentSlot;
+ 7: if_acmpne 33
+ 10: aload_0
+ 11: invokevirtual #113 // Method net/minecraftforge/event/ItemAttributeModifierEvent.getItemStack:()Lnet/minecraft/world/item/ItemStack;
+ 14: invokevirtual #119 // Method net/minecraft/world/item/ItemStack.m_41720_:()Lnet/minecraft/world/item/Item;
+ 17: astore_2
+ 18: aload_2
+ 19: instanceof #121 // class com/ogaba/sa_combat/item/TacticalVestItem
+ 22: ifeq 33
+ 25: aload_2
+ 26: checkcast #121 // class com/ogaba/sa_combat/item/TacticalVestItem
+ 29: astore_1
+ 30: goto 34
+ 33: return
+ 34: getstatic #127 // Field net/minecraftforge/registries/ForgeRegistries.ATTRIBUTES:Lnet/minecraftforge/registries/IForgeRegistry;
+ 37: getstatic #129 // Field TACZ_BULLET_RESISTANCE_ID:Lnet/minecraft/resources/ResourceLocation;
+ 40: invokeinterface #135, 2 // InterfaceMethod net/minecraftforge/registries/IForgeRegistry.getValue:(Lnet/minecraft/resources/ResourceLocation;)Ljava/lang/Object;
+ 45: checkcast #137 // class net/minecraft/world/entity/ai/attributes/Attribute
+ 48: astore_2
+ 49: aload_2
+ 50: ifnull 62
+ 53: aload_1
+ 54: invokevirtual #141 // Method com/ogaba/sa_combat/item/TacticalVestItem.getTaczBulletResistance:()D
+ 57: dconst_0
+ 58: dcmpg
+ 59: ifgt 63
+ 62: return
+ 63: aload_0
+ 64: aload_2
+ 65: new #17 // class net/minecraft/world/entity/ai/attributes/AttributeModifier
+ 68: dup
+ 69: getstatic #143 // Field TACZ_VEST_BULLET_RESISTANCE_UUID:Ljava/util/UUID;
+ 72: ldc #145 // String SA Combat TACZ vest bullet resistance
+ 74: aload_1
+ 75: invokevirtual #141 // Method com/ogaba/sa_combat/item/TacticalVestItem.getTaczBulletResistance:()D
+ 78: getstatic #149 // Field net/minecraft/world/entity/ai/attributes/AttributeModifier$Operation.ADDITION:Lnet/minecraft/world/entity/ai/attributes/AttributeModifier$Operation;
+ 81: invokespecial #152 // Method net/minecraft/world/entity/ai/attributes/AttributeModifier."":(Ljava/util/UUID;Ljava/lang/String;DLnet/minecraft/world/entity/ai/attributes/AttributeModifier$Operation;)V
+ 84: invokevirtual #156 // Method net/minecraftforge/event/ItemAttributeModifierEvent.addModifier:(Lnet/minecraft/world/entity/ai/attributes/Attribute;Lnet/minecraft/world/entity/ai/attributes/AttributeModifier;)Z
+ 87: pop
+ 88: return
+
+ public static void triggerC4ByNearbyExplosion(net.minecraftforge.event.level.ExplosionEvent$Detonate);
+ Code:
+ 0: aload_0
+ 1: invokevirtual #168 // Method net/minecraftforge/event/level/ExplosionEvent$Detonate.getLevel:()Lnet/minecraft/world/level/Level;
+ 4: invokevirtual #174 // Method net/minecraft/world/level/Level.m_5776_:()Z
+ 7: ifeq 11
+ 10: return
+ 11: new #176 // class it/unimi/dsi/fastutil/longs/LongOpenHashSet
+ 14: dup
+ 15: invokespecial #177 // Method it/unimi/dsi/fastutil/longs/LongOpenHashSet."":()V
+ 18: astore_1
+ 19: new #176 // class it/unimi/dsi/fastutil/longs/LongOpenHashSet
+ 22: dup
+ 23: invokespecial #177 // Method it/unimi/dsi/fastutil/longs/LongOpenHashSet."":()V
+ 26: astore_2
+ 27: aload_0
+ 28: invokevirtual #181 // Method net/minecraftforge/event/level/ExplosionEvent$Detonate.getAffectedBlocks:()Ljava/util/List;
+ 31: invokeinterface #187, 1 // InterfaceMethod java/util/List.iterator:()Ljava/util/Iterator;
+ 36: astore_3
+ 37: aload_3
+ 38: invokeinterface #192, 1 // InterfaceMethod java/util/Iterator.hasNext:()Z
+ 43: ifeq 199
+ 46: aload_3
+ 47: invokeinterface #196, 1 // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
+ 52: checkcast #198 // class net/minecraft/core/BlockPos
+ 55: astore 4
+ 57: aload 4
+ 59: invokevirtual #202 // Method net/minecraft/core/BlockPos.m_123341_:()I
+ 62: istore 5
+ 64: aload 4
+ 66: invokevirtual #205 // Method net/minecraft/core/BlockPos.m_123342_:()I
+ 69: istore 6
+ 71: aload 4
+ 73: invokevirtual #208 // Method net/minecraft/core/BlockPos.m_123343_:()I
+ 76: istore 7
+ 78: bipush -3
+ 80: istore 8
+ 82: iload 8
+ 84: iconst_3
+ 85: if_icmpgt 196
+ 88: bipush -3
+ 90: istore 9
+ 92: iload 9
+ 94: iconst_3
+ 95: if_icmpgt 190
+ 98: bipush -3
+ 100: istore 10
+ 102: iload 10
+ 104: iconst_3
+ 105: if_icmpgt 184
+ 108: iload 5
+ 110: iload 8
+ 112: iadd
+ 113: iload 6
+ 115: iload 9
+ 117: iadd
+ 118: iload 7
+ 120: iload 10
+ 122: iadd
+ 123: invokestatic #212 // Method net/minecraft/core/BlockPos.m_121882_:(III)J
+ 126: lstore 11
+ 128: aload_1
+ 129: lload 11
+ 131: invokevirtual #216 // Method it/unimi/dsi/fastutil/longs/LongOpenHashSet.add:(J)Z
+ 134: ifne 140
+ 137: goto 178
+ 140: lload 11
+ 142: invokestatic #220 // Method net/minecraft/core/BlockPos.m_122022_:(J)Lnet/minecraft/core/BlockPos;
+ 145: astore 13
+ 147: aload_0
+ 148: invokevirtual #168 // Method net/minecraftforge/event/level/ExplosionEvent$Detonate.getLevel:()Lnet/minecraft/world/level/Level;
+ 151: aload 13
+ 153: invokevirtual #224 // Method net/minecraft/world/level/Level.m_8055_:(Lnet/minecraft/core/BlockPos;)Lnet/minecraft/world/level/block/state/BlockState;
+ 156: getstatic #230 // Field com/ogaba/sa_combat/registry/ModBlocks.C4:Lnet/minecraftforge/registries/RegistryObject;
+ 159: invokevirtual #235 // Method net/minecraftforge/registries/RegistryObject.get:()Ljava/lang/Object;
+ 162: checkcast #237 // class net/minecraft/world/level/block/Block
+ 165: invokevirtual #243 // Method net/minecraft/world/level/block/state/BlockState.m_60713_:(Lnet/minecraft/world/level/block/Block;)Z
+ 168: ifeq 178
+ 171: aload_2
+ 172: lload 11
+ 174: invokevirtual #216 // Method it/unimi/dsi/fastutil/longs/LongOpenHashSet.add:(J)Z
+ 177: pop
+ 178: iinc 10, 1
+ 181: goto 102
+ 184: iinc 9, 1
+ 187: goto 92
+ 190: iinc 8, 1
+ 193: goto 82
+ 196: goto 37
+ 199: aload_2
+ 200: invokevirtual #246 // Method it/unimi/dsi/fastutil/longs/LongOpenHashSet.iterator:()Lit/unimi/dsi/fastutil/longs/LongIterator;
+ 203: astore_3
+ 204: aload_3
+ 205: invokeinterface #192, 1 // InterfaceMethod java/util/Iterator.hasNext:()Z
+ 210: ifeq 243
+ 213: aload_3
+ 214: invokeinterface #196, 1 // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
+ 219: checkcast #248 // class java/lang/Long
+ 222: invokevirtual #252 // Method java/lang/Long.longValue:()J
+ 225: lstore 4
+ 227: aload_0
+ 228: invokevirtual #168 // Method net/minecraftforge/event/level/ExplosionEvent$Detonate.getLevel:()Lnet/minecraft/world/level/Level;
+ 231: lload 4
+ 233: invokestatic #220 // Method net/minecraft/core/BlockPos.m_122022_:(J)Lnet/minecraft/core/BlockPos;
+ 236: aconst_null
+ 237: invokestatic #258 // Method com/ogaba/sa_combat/block/C4Block.explode:(Lnet/minecraft/world/level/Level;Lnet/minecraft/core/BlockPos;Lnet/minecraft/world/entity/Entity;)V
+ 240: goto 204
+ 243: return
+
+ public static void addExternalWeaponUpgradeAttributes(net.minecraftforge.event.ItemAttributeModifierEvent);
+ Code:
+ 0: aload_0
+ 1: invokevirtual #113 // Method net/minecraftforge/event/ItemAttributeModifierEvent.getItemStack:()Lnet/minecraft/world/item/ItemStack;
+ 4: astore_1
+ 5: aload_1
+ 6: invokevirtual #277 // Method net/minecraft/world/item/ItemStack.m_41619_:()Z
+ 9: ifne 22
+ 12: aload_0
+ 13: invokevirtual #103 // Method net/minecraftforge/event/ItemAttributeModifierEvent.getSlotType:()Lnet/minecraft/world/entity/EquipmentSlot;
+ 16: getstatic #280 // Field net/minecraft/world/entity/EquipmentSlot.MAINHAND:Lnet/minecraft/world/entity/EquipmentSlot;
+ 19: if_acmpeq 23
+ 22: return
+ 23: aload_1
+ 24: invokevirtual #119 // Method net/minecraft/world/item/ItemStack.m_41720_:()Lnet/minecraft/world/item/Item;
+ 27: instanceof #282 // class com/ogaba/sa_combat/combat/weapon/BaseMeleeWeapon
+ 30: ifeq 34
+ 33: return
+ 34: aload_1
+ 35: invokestatic #286 // Method com/ogaba/sa_combat/combat/upgrade/WeaponUpgradeData.getDamageBonus:(Lnet/minecraft/world/item/ItemStack;)D
+ 38: aload_1
+ 39: invokestatic #289 // Method com/ogaba/sa_combat/combat/attachment/WeaponAttachmentData.getDamageBonus:(Lnet/minecraft/world/item/ItemStack;)D
+ 42: dadd
+ 43: dstore_2
+ 44: dload_2
+ 45: dconst_0
+ 46: dcmpl
+ 47: ifeq 75
+ 50: aload_0
+ 51: getstatic #294 // Field net/minecraft/world/entity/ai/attributes/Attributes.f_22281_:Lnet/minecraft/world/entity/ai/attributes/Attribute;
+ 54: new #17 // class net/minecraft/world/entity/ai/attributes/AttributeModifier
+ 57: dup
+ 58: getstatic #296 // Field EXTERNAL_UPGRADE_DAMAGE_UUID:Ljava/util/UUID;
+ 61: ldc_w #298 // String SA Combat weapon upgrade damage
+ 64: dload_2
+ 65: getstatic #149 // Field net/minecraft/world/entity/ai/attributes/AttributeModifier$Operation.ADDITION:Lnet/minecraft/world/entity/ai/attributes/AttributeModifier$Operation;
+ 68: invokespecial #152 // Method net/minecraft/world/entity/ai/attributes/AttributeModifier."":(Ljava/util/UUID;Ljava/lang/String;DLnet/minecraft/world/entity/ai/attributes/AttributeModifier$Operation;)V
+ 71: invokevirtual #156 // Method net/minecraftforge/event/ItemAttributeModifierEvent.addModifier:(Lnet/minecraft/world/entity/ai/attributes/Attribute;Lnet/minecraft/world/entity/ai/attributes/AttributeModifier;)Z
+ 74: pop
+ 75: aload_1
+ 76: invokestatic #301 // Method com/ogaba/sa_combat/combat/upgrade/WeaponUpgradeData.getSpeedBonus:(Lnet/minecraft/world/item/ItemStack;)D
+ 79: aload_1
+ 80: invokestatic #302 // Method com/ogaba/sa_combat/combat/attachment/WeaponAttachmentData.getSpeedBonus:(Lnet/minecraft/world/item/ItemStack;)D
+ 83: dadd
+ 84: dstore 4
+ 86: dload 4
+ 88: dconst_0
+ 89: dcmpl
+ 90: ifeq 119
+ 93: aload_0
+ 94: getstatic #305 // Field net/minecraft/world/entity/ai/attributes/Attributes.f_22283_:Lnet/minecraft/world/entity/ai/attributes/Attribute;
+ 97: new #17 // class net/minecraft/world/entity/ai/attributes/AttributeModifier
+ 100: dup
+ 101: getstatic #307 // Field EXTERNAL_UPGRADE_SPEED_UUID:Ljava/util/UUID;
+ 104: ldc_w #309 // String SA Combat weapon upgrade speed
+ 107: dload 4
+ 109: getstatic #149 // Field net/minecraft/world/entity/ai/attributes/AttributeModifier$Operation.ADDITION:Lnet/minecraft/world/entity/ai/attributes/AttributeModifier$Operation;
+ 112: invokespecial #152 // Method net/minecraft/world/entity/ai/attributes/AttributeModifier."":(Ljava/util/UUID;Ljava/lang/String;DLnet/minecraft/world/entity/ai/attributes/AttributeModifier$Operation;)V
+ 115: invokevirtual #156 // Method net/minecraftforge/event/ItemAttributeModifierEvent.addModifier:(Lnet/minecraft/world/entity/ai/attributes/Attribute;Lnet/minecraft/world/entity/ai/attributes/AttributeModifier;)Z
+ 118: pop
+ 119: aload_1
+ 120: invokestatic #312 // Method com/ogaba/sa_combat/combat/upgrade/WeaponUpgradeData.getKnockbackBonus:(Lnet/minecraft/world/item/ItemStack;)D
+ 123: aload_1
+ 124: invokestatic #313 // Method com/ogaba/sa_combat/combat/attachment/WeaponAttachmentData.getKnockbackBonus:(Lnet/minecraft/world/item/ItemStack;)D
+ 127: dadd
+ 128: dstore 6
+ 130: dload 6
+ 132: dconst_0
+ 133: dcmpl
+ 134: ifeq 163
+ 137: aload_0
+ 138: getstatic #316 // Field net/minecraft/world/entity/ai/attributes/Attributes.f_22282_:Lnet/minecraft/world/entity/ai/attributes/Attribute;
+ 141: new #17 // class net/minecraft/world/entity/ai/attributes/AttributeModifier
+ 144: dup
+ 145: getstatic #318 // Field EXTERNAL_UPGRADE_KNOCKBACK_UUID:Ljava/util/UUID;
+ 148: ldc_w #320 // String SA Combat weapon upgrade knockback
+ 151: dload 6
+ 153: getstatic #149 // Field net/minecraft/world/entity/ai/attributes/AttributeModifier$Operation.ADDITION:Lnet/minecraft/world/entity/ai/attributes/AttributeModifier$Operation;
+ 156: invokespecial #152 // Method net/minecraft/world/entity/ai/attributes/AttributeModifier."":(Ljava/util/UUID;Ljava/lang/String;DLnet/minecraft/world/entity/ai/attributes/AttributeModifier$Operation;)V
+ 159: invokevirtual #156 // Method net/minecraftforge/event/ItemAttributeModifierEvent.addModifier:(Lnet/minecraft/world/entity/ai/attributes/Attribute;Lnet/minecraft/world/entity/ai/attributes/AttributeModifier;)Z
+ 162: pop
+ 163: aload_1
+ 164: invokestatic #323 // Method com/ogaba/sa_combat/combat/upgrade/WeaponUpgradeData.getReachBonus:(Lnet/minecraft/world/item/ItemStack;)D
+ 167: aload_1
+ 168: invokestatic #324 // Method com/ogaba/sa_combat/combat/attachment/WeaponAttachmentData.getReachBonus:(Lnet/minecraft/world/item/ItemStack;)D
+ 171: dadd
+ 172: dstore 8
+ 174: dload 8
+ 176: dconst_0
+ 177: dcmpl
+ 178: ifeq 213
+ 181: aload_0
+ 182: getstatic #329 // Field net/minecraftforge/common/ForgeMod.ENTITY_REACH:Lnet/minecraftforge/registries/RegistryObject;
+ 185: invokevirtual #235 // Method net/minecraftforge/registries/RegistryObject.get:()Ljava/lang/Object;
+ 188: checkcast #137 // class net/minecraft/world/entity/ai/attributes/Attribute
+ 191: new #17 // class net/minecraft/world/entity/ai/attributes/AttributeModifier
+ 194: dup
+ 195: getstatic #331 // Field EXTERNAL_UPGRADE_REACH_UUID:Ljava/util/UUID;
+ 198: ldc_w #333 // String SA Combat weapon upgrade reach
+ 201: dload 8
+ 203: getstatic #149 // Field net/minecraft/world/entity/ai/attributes/AttributeModifier$Operation.ADDITION:Lnet/minecraft/world/entity/ai/attributes/AttributeModifier$Operation;
+ 206: invokespecial #152 // Method net/minecraft/world/entity/ai/attributes/AttributeModifier."":(Ljava/util/UUID;Ljava/lang/String;DLnet/minecraft/world/entity/ai/attributes/AttributeModifier$Operation;)V
+ 209: invokevirtual #156 // Method net/minecraftforge/event/ItemAttributeModifierEvent.addModifier:(Lnet/minecraft/world/entity/ai/attributes/Attribute;Lnet/minecraft/world/entity/ai/attributes/AttributeModifier;)Z
+ 212: pop
+ 213: return
+
+ public static void applyWeaponCriticalUpgrade(net.minecraftforge.event.entity.living.LivingHurtEvent);
+ Code:
+ 0: aload_0
+ 1: invokevirtual #348 // Method net/minecraftforge/event/entity/living/LivingHurtEvent.getEntity:()Lnet/minecraft/world/entity/LivingEntity;
+ 4: invokevirtual #353 // Method net/minecraft/world/entity/LivingEntity.m_9236_:()Lnet/minecraft/world/level/Level;
+ 7: invokevirtual #174 // Method net/minecraft/world/level/Level.m_5776_:()Z
+ 10: ifeq 14
+ 13: return
+ 14: aload_0
+ 15: invokevirtual #357 // Method net/minecraftforge/event/entity/living/LivingHurtEvent.getSource:()Lnet/minecraft/world/damagesource/DamageSource;
+ 18: invokevirtual #363 // Method net/minecraft/world/damagesource/DamageSource.m_7639_:()Lnet/minecraft/world/entity/Entity;
+ 21: astore_2
+ 22: aload_2
+ 23: instanceof #350 // class net/minecraft/world/entity/LivingEntity
+ 26: ifeq 37
+ 29: aload_2
+ 30: checkcast #350 // class net/minecraft/world/entity/LivingEntity
+ 33: astore_1
+ 34: goto 38
+ 37: return
+ 38: aload_0
+ 39: invokevirtual #357 // Method net/minecraftforge/event/entity/living/LivingHurtEvent.getSource:()Lnet/minecraft/world/damagesource/DamageSource;
+ 42: invokevirtual #366 // Method net/minecraft/world/damagesource/DamageSource.m_7640_:()Lnet/minecraft/world/entity/Entity;
+ 45: aload_1
+ 46: if_acmpeq 50
+ 49: return
+ 50: aload_1
+ 51: invokevirtual #369 // Method net/minecraft/world/entity/LivingEntity.m_21205_:()Lnet/minecraft/world/item/ItemStack;
+ 54: astore_2
+ 55: aload_2
+ 56: invokevirtual #277 // Method net/minecraft/world/item/ItemStack.m_41619_:()Z
+ 59: ifne 69
+ 62: aload_2
+ 63: invokestatic #375 // Method com/ogaba/sa_combat/combat/weapon/WeaponSlotProfile.isUpgradeableWeapon:(Lnet/minecraft/world/item/ItemStack;)Z
+ 66: ifne 70
+ 69: return
+ 70: dconst_0
+ 71: aload_2
+ 72: invokestatic #378 // Method com/ogaba/sa_combat/combat/upgrade/WeaponUpgradeData.getCriticalChanceBonus:(Lnet/minecraft/world/item/ItemStack;)D
+ 75: invokestatic #384 // Method java/lang/Math.max:(DD)D
+ 78: dstore_3
+ 79: dload_3
+ 80: dconst_0
+ 81: dcmpg
+ 82: ifgt 86
+ 85: return
+ 86: ldc2_w #385 // double 0.95d
+ 89: dload_3
+ 90: invokestatic #389 // Method java/lang/Math.min:(DD)D
+ 93: dstore_3
+ 94: aload_1
+ 95: invokevirtual #393 // Method net/minecraft/world/entity/LivingEntity.m_217043_:()Lnet/minecraft/util/RandomSource;
+ 98: invokeinterface #398, 1 // InterfaceMethod net/minecraft/util/RandomSource.m_188500_:()D
+ 103: dload_3
+ 104: dcmpl
+ 105: iflt 109
+ 108: return
+ 109: dconst_0
+ 110: aload_2
+ 111: invokestatic #401 // Method com/ogaba/sa_combat/combat/upgrade/WeaponUpgradeData.getCriticalDamageBonus:(Lnet/minecraft/world/item/ItemStack;)D
+ 114: invokestatic #384 // Method java/lang/Math.max:(DD)D
+ 117: dstore 5
+ 119: dload 5
+ 121: dconst_0
+ 122: dcmpg
+ 123: ifgt 131
+ 126: ldc2_w #402 // double 0.25d
+ 129: dstore 5
+ 131: aload_0
+ 132: aload_0
+ 133: invokevirtual #407 // Method net/minecraftforge/event/entity/living/LivingHurtEvent.getAmount:()F
+ 136: f2d
+ 137: dconst_1
+ 138: dload 5
+ 140: dadd
+ 141: dmul
+ 142: d2f
+ 143: invokevirtual #411 // Method net/minecraftforge/event/entity/living/LivingHurtEvent.setAmount:(F)V
+ 146: aload_1
+ 147: invokevirtual #353 // Method net/minecraft/world/entity/LivingEntity.m_9236_:()Lnet/minecraft/world/level/Level;
+ 150: aconst_null
+ 151: aload_1
+ 152: invokevirtual #414 // Method net/minecraft/world/entity/LivingEntity.m_20185_:()D
+ 155: aload_1
+ 156: invokevirtual #417 // Method net/minecraft/world/entity/LivingEntity.m_20186_:()D
+ 159: aload_1
+ 160: invokevirtual #420 // Method net/minecraft/world/entity/LivingEntity.m_20189_:()D
+ 163: getstatic #426 // Field net/minecraft/sounds/SoundEvents.f_12313_:Lnet/minecraft/sounds/SoundEvent;
+ 166: getstatic #432 // Field net/minecraft/sounds/SoundSource.PLAYERS:Lnet/minecraft/sounds/SoundSource;
+ 169: ldc_w #433 // float 0.75f
+ 172: ldc_w #434 // float 1.15f
+ 175: invokevirtual #438 // Method net/minecraft/world/level/Level.m_6263_:(Lnet/minecraft/world/entity/player/Player;DDDLnet/minecraft/sounds/SoundEvent;Lnet/minecraft/sounds/SoundSource;FF)V
+ 178: return
+
+ public static void procExternalWeaponAbilities(net.minecraftforge.event.entity.living.LivingHurtEvent);
+ Code:
+ 0: getstatic #446 // Field proccingExternalAbility:Z
+ 3: ifne 19
+ 6: aload_0
+ 7: invokevirtual #348 // Method net/minecraftforge/event/entity/living/LivingHurtEvent.getEntity:()Lnet/minecraft/world/entity/LivingEntity;
+ 10: invokevirtual #353 // Method net/minecraft/world/entity/LivingEntity.m_9236_:()Lnet/minecraft/world/level/Level;
+ 13: invokevirtual #174 // Method net/minecraft/world/level/Level.m_5776_:()Z
+ 16: ifeq 20
+ 19: return
+ 20: aload_0
+ 21: invokevirtual #357 // Method net/minecraftforge/event/entity/living/LivingHurtEvent.getSource:()Lnet/minecraft/world/damagesource/DamageSource;
+ 24: invokevirtual #363 // Method net/minecraft/world/damagesource/DamageSource.m_7639_:()Lnet/minecraft/world/entity/Entity;
+ 27: astore_2
+ 28: aload_2
+ 29: instanceof #350 // class net/minecraft/world/entity/LivingEntity
+ 32: ifeq 43
+ 35: aload_2
+ 36: checkcast #350 // class net/minecraft/world/entity/LivingEntity
+ 39: astore_1
+ 40: goto 44
+ 43: return
+ 44: aload_0
+ 45: invokevirtual #357 // Method net/minecraftforge/event/entity/living/LivingHurtEvent.getSource:()Lnet/minecraft/world/damagesource/DamageSource;
+ 48: invokevirtual #366 // Method net/minecraft/world/damagesource/DamageSource.m_7640_:()Lnet/minecraft/world/entity/Entity;
+ 51: aload_1
+ 52: if_acmpeq 56
+ 55: return
+ 56: aload_1
+ 57: invokevirtual #369 // Method net/minecraft/world/entity/LivingEntity.m_21205_:()Lnet/minecraft/world/item/ItemStack;
+ 60: astore_2
+ 61: aload_2
+ 62: invokevirtual #277 // Method net/minecraft/world/item/ItemStack.m_41619_:()Z
+ 65: ifne 85
+ 68: aload_2
+ 69: invokevirtual #119 // Method net/minecraft/world/item/ItemStack.m_41720_:()Lnet/minecraft/world/item/Item;
+ 72: instanceof #282 // class com/ogaba/sa_combat/combat/weapon/BaseMeleeWeapon
+ 75: ifne 85
+ 78: aload_2
+ 79: invokestatic #375 // Method com/ogaba/sa_combat/combat/weapon/WeaponSlotProfile.isUpgradeableWeapon:(Lnet/minecraft/world/item/ItemStack;)Z
+ 82: ifne 86
+ 85: return
+ 86: new #448 // class java/util/ArrayList
+ 89: dup
+ 90: aload_2
+ 91: invokestatic #452 // Method com/ogaba/sa_combat/combat/weapon/WeaponSlotProfile.baseAbilities:(Lnet/minecraft/world/item/ItemStack;)Ljava/util/List;
+ 94: invokespecial #455 // Method java/util/ArrayList."":(Ljava/util/Collection;)V
+ 97: astore_3
+ 98: aload_2
+ 99: invokestatic #458 // Method com/ogaba/sa_combat/combat/upgrade/WeaponUpgradeData.getAbilityUpgrades:(Lnet/minecraft/world/item/ItemStack;)Ljava/util/List;
+ 102: invokeinterface #187, 1 // InterfaceMethod java/util/List.iterator:()Ljava/util/Iterator;
+ 107: astore 4
+ 109: aload 4
+ 111: invokeinterface #192, 1 // InterfaceMethod java/util/Iterator.hasNext:()Z
+ 116: ifeq 179
+ 119: aload 4
+ 121: invokeinterface #196, 1 // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
+ 126: checkcast #25 // class com/ogaba/sa_combat/combat/upgrade/WeaponUpgradeData$Entry
+ 129: astore 5
+ 131: aload 5
+ 133: invokevirtual #462 // Method com/ogaba/sa_combat/combat/upgrade/WeaponUpgradeData$Entry.upgrade:()Ljava/util/Optional;
+ 136: invokedynamic #481, 0 // InvokeDynamic #0:test:()Ljava/util/function/Predicate;
+ 141: invokevirtual #487 // Method java/util/Optional.filter:(Ljava/util/function/Predicate;)Ljava/util/Optional;
+ 144: aload 5
+ 146: invokedynamic #500, 0 // InvokeDynamic #1:apply:(Lcom/ogaba/sa_combat/combat/upgrade/WeaponUpgradeData$Entry;)Ljava/util/function/Function;
+ 151: invokevirtual #504 // Method java/util/Optional.map:(Ljava/util/function/Function;)Ljava/util/Optional;
+ 154: invokedynamic #511, 0 // InvokeDynamic #2:test:()Ljava/util/function/Predicate;
+ 159: invokevirtual #487 // Method java/util/Optional.filter:(Ljava/util/function/Predicate;)Ljava/util/Optional;
+ 162: aload_3
+ 163: dup
+ 164: invokestatic #516 // Method java/util/Objects.requireNonNull:(Ljava/lang/Object;)Ljava/lang/Object;
+ 167: pop
+ 168: invokedynamic #527, 0 // InvokeDynamic #3:accept:(Ljava/util/List;)Ljava/util/function/Consumer;
+ 173: invokevirtual #531 // Method java/util/Optional.ifPresent:(Ljava/util/function/Consumer;)V
+ 176: goto 109
+ 179: aload_2
+ 180: invokestatic #535 // Method com/ogaba/sa_combat/combat/attachment/WeaponAttachmentData.installedAttachments:(Lnet/minecraft/world/item/ItemStack;)Ljava/util/Map;
+ 183: astore 4
+ 185: aload 4
+ 187: invokeinterface #541, 1 // InterfaceMethod java/util/Map.values:()Ljava/util/Collection;
+ 192: aload_3
+ 193: aload_0
+ 194: aload_1
+ 195: invokedynamic #551, 0 // InvokeDynamic #4:accept:(Ljava/util/List;Lnet/minecraftforge/event/entity/living/LivingHurtEvent;Lnet/minecraft/world/entity/LivingEntity;)Ljava/util/function/Consumer;
+ 200: invokeinterface #556, 2 // InterfaceMethod java/util/Collection.forEach:(Ljava/util/function/Consumer;)V
+ 205: aload 4
+ 207: invokeinterface #559, 1 // InterfaceMethod java/util/Map.isEmpty:()Z
+ 212: ifeq 230
+ 215: aload_2
+ 216: invokestatic #563 // Method com/ogaba/sa_combat/combat/upgrade/WeaponUpgradeData.getModifier:(Lnet/minecraft/world/item/ItemStack;)Ljava/util/Optional;
+ 219: aload_3
+ 220: aload_0
+ 221: aload_1
+ 222: invokedynamic #571, 0 // InvokeDynamic #5:accept:(Ljava/util/List;Lnet/minecraftforge/event/entity/living/LivingHurtEvent;Lnet/minecraft/world/entity/LivingEntity;)Ljava/util/function/Consumer;
+ 227: invokevirtual #531 // Method java/util/Optional.ifPresent:(Ljava/util/function/Consumer;)V
+ 230: aload_3
+ 231: invokestatic #577 // Method com/ogaba/sa_combat/combat/system/AbilityInstance.mergeByType:(Ljava/util/List;)Ljava/util/List;
+ 234: invokeinterface #581, 1 // InterfaceMethod java/util/List.stream:()Ljava/util/stream/Stream;
+ 239: invokedynamic #591, 0 // InvokeDynamic #6:apply:()Ljava/util/function/Function;
+ 244: invokeinterface #596, 2 // InterfaceMethod java/util/stream/Stream.map:(Ljava/util/function/Function;)Ljava/util/stream/Stream;
+ 249: invokeinterface #599, 1 // InterfaceMethod java/util/stream/Stream.toList:()Ljava/util/List;
+ 254: astore 5
+ 256: aload 5
+ 258: invokeinterface #600, 1 // InterfaceMethod java/util/List.isEmpty:()Z
+ 263: ifeq 267
+ 266: return
+ 267: iconst_1
+ 268: putstatic #446 // Field proccingExternalAbility:Z
+ 271: getstatic #604 // Field com/ogaba/sa_combat/event/SACombatForgeEvents$1.$SwitchMap$com$ogaba$sa_combat$combat$weapon$WeaponProcMode:[I
+ 274: aload_2
+ 275: invokestatic #608 // Method com/ogaba/sa_combat/combat/weapon/WeaponSlotProfile.procMode:(Lnet/minecraft/world/item/ItemStack;)Lcom/ogaba/sa_combat/combat/weapon/WeaponProcMode;
+ 278: invokevirtual #613 // Method com/ogaba/sa_combat/combat/weapon/WeaponProcMode.ordinal:()I
+ 281: iaload
+ 282: tableswitch { // 1 to 3
+
+ 1: 308
+
+ 2: 356
+
+ 3: 394
+ default: 444
+ }
+ 308: aload 5
+ 310: invokeinterface #187, 1 // InterfaceMethod java/util/List.iterator:()Ljava/util/Iterator;
+ 315: astore 6
+ 317: aload 6
+ 319: invokeinterface #192, 1 // InterfaceMethod java/util/Iterator.hasNext:()Z
+ 324: ifeq 353
+ 327: aload 6
+ 329: invokeinterface #196, 1 // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
+ 334: checkcast #615 // class com/ogaba/sa_combat/combat/system/WeaponAbility
+ 337: astore 7
+ 339: aload 7
+ 341: aload_0
+ 342: invokevirtual #348 // Method net/minecraftforge/event/entity/living/LivingHurtEvent.getEntity:()Lnet/minecraft/world/entity/LivingEntity;
+ 345: aload_1
+ 346: invokevirtual #619 // Method com/ogaba/sa_combat/combat/system/WeaponAbility.tryProc:(Lnet/minecraft/world/entity/LivingEntity;Lnet/minecraft/world/entity/LivingEntity;)Z
+ 349: pop
+ 350: goto 317
+ 353: goto 444
+ 356: aload 5
+ 358: aload_1
+ 359: invokevirtual #393 // Method net/minecraft/world/entity/LivingEntity.m_217043_:()Lnet/minecraft/util/RandomSource;
+ 362: aload 5
+ 364: invokeinterface #622, 1 // InterfaceMethod java/util/List.size:()I
+ 369: invokeinterface #626, 2 // InterfaceMethod net/minecraft/util/RandomSource.m_188503_:(I)I
+ 374: invokeinterface #629, 2 // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
+ 379: checkcast #615 // class com/ogaba/sa_combat/combat/system/WeaponAbility
+ 382: aload_0
+ 383: invokevirtual #348 // Method net/minecraftforge/event/entity/living/LivingHurtEvent.getEntity:()Lnet/minecraft/world/entity/LivingEntity;
+ 386: aload_1
+ 387: invokevirtual #619 // Method com/ogaba/sa_combat/combat/system/WeaponAbility.tryProc:(Lnet/minecraft/world/entity/LivingEntity;Lnet/minecraft/world/entity/LivingEntity;)Z
+ 390: pop
+ 391: goto 444
+ 394: aload 5
+ 396: invokeinterface #187, 1 // InterfaceMethod java/util/List.iterator:()Ljava/util/Iterator;
+ 401: astore 6
+ 403: aload 6
+ 405: invokeinterface #192, 1 // InterfaceMethod java/util/Iterator.hasNext:()Z
+ 410: ifeq 444
+ 413: aload 6
+ 415: invokeinterface #196, 1 // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
+ 420: checkcast #615 // class com/ogaba/sa_combat/combat/system/WeaponAbility
+ 423: astore 7
+ 425: aload 7
+ 427: aload_0
+ 428: invokevirtual #348 // Method net/minecraftforge/event/entity/living/LivingHurtEvent.getEntity:()Lnet/minecraft/world/entity/LivingEntity;
+ 431: aload_1
+ 432: invokevirtual #619 // Method com/ogaba/sa_combat/combat/system/WeaponAbility.tryProc:(Lnet/minecraft/world/entity/LivingEntity;Lnet/minecraft/world/entity/LivingEntity;)Z
+ 435: ifeq 441
+ 438: goto 444
+ 441: goto 403
+ 444: iconst_0
+ 445: putstatic #446 // Field proccingExternalAbility:Z
+ 448: goto 460
+ 451: astore 8
+ 453: iconst_0
+ 454: putstatic #446 // Field proccingExternalAbility:Z
+ 457: aload 8
+ 459: athrow
+ 460: return
+ Exception table:
+ from to target type
+ 271 444 451 any
+ 451 453 451 any
+
+ public static void cancelShieldMeleeDamage(net.minecraftforge.event.entity.living.LivingHurtEvent);
+ Code:
+ 0: getstatic #645 // Field proccingShieldThorns:Z
+ 3: ifne 19
+ 6: aload_0
+ 7: invokevirtual #348 // Method net/minecraftforge/event/entity/living/LivingHurtEvent.getEntity:()Lnet/minecraft/world/entity/LivingEntity;
+ 10: invokevirtual #353 // Method net/minecraft/world/entity/LivingEntity.m_9236_:()Lnet/minecraft/world/level/Level;
+ 13: invokevirtual #174 // Method net/minecraft/world/level/Level.m_5776_:()Z
+ 16: ifeq 20
+ 19: return
+ 20: aload_0
+ 21: invokevirtual #357 // Method net/minecraftforge/event/entity/living/LivingHurtEvent.getSource:()Lnet/minecraft/world/damagesource/DamageSource;
+ 24: invokevirtual #363 // Method net/minecraft/world/damagesource/DamageSource.m_7639_:()Lnet/minecraft/world/entity/Entity;
+ 27: astore_2
+ 28: aload_2
+ 29: instanceof #350 // class net/minecraft/world/entity/LivingEntity
+ 32: ifeq 43
+ 35: aload_2
+ 36: checkcast #350 // class net/minecraft/world/entity/LivingEntity
+ 39: astore_1
+ 40: goto 44
+ 43: return
+ 44: aload_0
+ 45: invokevirtual #357 // Method net/minecraftforge/event/entity/living/LivingHurtEvent.getSource:()Lnet/minecraft/world/damagesource/DamageSource;
+ 48: invokevirtual #366 // Method net/minecraft/world/damagesource/DamageSource.m_7640_:()Lnet/minecraft/world/entity/Entity;
+ 51: aload_1
+ 52: if_acmpeq 56
+ 55: return
+ 56: aload_1
+ 57: invokevirtual #369 // Method net/minecraft/world/entity/LivingEntity.m_21205_:()Lnet/minecraft/world/item/ItemStack;
+ 60: astore_2
+ 61: aload_2
+ 62: invokevirtual #119 // Method net/minecraft/world/item/ItemStack.m_41720_:()Lnet/minecraft/world/item/Item;
+ 65: instanceof #647 // class com/ogaba/sa_combat/combat/weapon/SAShieldItem
+ 68: ifeq 81
+ 71: aload_0
+ 72: iconst_1
+ 73: invokevirtual #651 // Method net/minecraftforge/event/entity/living/LivingHurtEvent.setCanceled:(Z)V
+ 76: aload_0
+ 77: fconst_0
+ 78: invokevirtual #411 // Method net/minecraftforge/event/entity/living/LivingHurtEvent.setAmount:(F)V
+ 81: return
+
+ public static void applySpikedShieldThorns(net.minecraftforge.event.entity.living.ShieldBlockEvent);
+ Code:
+ 0: aload_0
+ 1: invokevirtual #657 // Method net/minecraftforge/event/entity/living/ShieldBlockEvent.getEntity:()Lnet/minecraft/world/entity/LivingEntity;
+ 4: invokevirtual #353 // Method net/minecraft/world/entity/LivingEntity.m_9236_:()Lnet/minecraft/world/level/Level;
+ 7: invokevirtual #174 // Method net/minecraft/world/level/Level.m_5776_:()Z
+ 10: ifeq 14
+ 13: return
+ 14: aload_0
+ 15: invokevirtual #657 // Method net/minecraftforge/event/entity/living/ShieldBlockEvent.getEntity:()Lnet/minecraft/world/entity/LivingEntity;
+ 18: astore_1
+ 19: aload_0
+ 20: invokevirtual #660 // Method net/minecraftforge/event/entity/living/ShieldBlockEvent.getDamageSource:()Lnet/minecraft/world/damagesource/DamageSource;
+ 23: invokevirtual #363 // Method net/minecraft/world/damagesource/DamageSource.m_7639_:()Lnet/minecraft/world/entity/Entity;
+ 26: astore_2
+ 27: aload_2
+ 28: instanceof #350 // class net/minecraft/world/entity/LivingEntity
+ 31: ifeq 51
+ 34: aload_2
+ 35: checkcast #350 // class net/minecraft/world/entity/LivingEntity
+ 38: astore_3
+ 39: aload_3
+ 40: aload_1
+ 41: if_acmpeq 51
+ 44: aload_3
+ 45: invokevirtual #663 // Method net/minecraft/world/entity/LivingEntity.m_6084_:()Z
+ 48: ifne 52
+ 51: return
+ 52: aload_1
+ 53: invokevirtual #668 // Method net/minecraft/world/entity/LivingEntity.m_21211_:()Lnet/minecraft/world/item/ItemStack;
+ 56: astore 4
+ 58: aload_1
+ 59: aload_3
+ 60: aload 4
+ 62: aload_0
+ 63: invokevirtual #671 // Method net/minecraftforge/event/entity/living/ShieldBlockEvent.getBlockedDamage:()F
+ 66: invokestatic #674 // Method applySpikedShieldThorns:(Lnet/minecraft/world/entity/LivingEntity;Lnet/minecraft/world/entity/LivingEntity;Lnet/minecraft/world/item/ItemStack;F)Z
+ 69: ifne 86
+ 72: aload_1
+ 73: aload_3
+ 74: aload_1
+ 75: invokevirtual #677 // Method net/minecraft/world/entity/LivingEntity.m_21206_:()Lnet/minecraft/world/item/ItemStack;
+ 78: aload_0
+ 79: invokevirtual #671 // Method net/minecraftforge/event/entity/living/ShieldBlockEvent.getBlockedDamage:()F
+ 82: invokestatic #674 // Method applySpikedShieldThorns:(Lnet/minecraft/world/entity/LivingEntity;Lnet/minecraft/world/entity/LivingEntity;Lnet/minecraft/world/item/ItemStack;F)Z
+ 85: pop
+ 86: return
+
+ public static void applySpikedShieldThornsFallback(net.minecraftforge.event.entity.living.LivingHurtEvent);
+ Code:
+ 0: getstatic #645 // Field proccingShieldThorns:Z
+ 3: ifne 28
+ 6: aload_0
+ 7: invokevirtual #348 // Method net/minecraftforge/event/entity/living/LivingHurtEvent.getEntity:()Lnet/minecraft/world/entity/LivingEntity;
+ 10: invokevirtual #353 // Method net/minecraft/world/entity/LivingEntity.m_9236_:()Lnet/minecraft/world/level/Level;
+ 13: invokevirtual #174 // Method net/minecraft/world/level/Level.m_5776_:()Z
+ 16: ifne 28
+ 19: aload_0
+ 20: invokevirtual #407 // Method net/minecraftforge/event/entity/living/LivingHurtEvent.getAmount:()F
+ 23: fconst_0
+ 24: fcmpg
+ 25: ifgt 29
+ 28: return
+ 29: aload_0
+ 30: invokevirtual #348 // Method net/minecraftforge/event/entity/living/LivingHurtEvent.getEntity:()Lnet/minecraft/world/entity/LivingEntity;
+ 33: astore_1
+ 34: aload_1
+ 35: invokevirtual #686 // Method net/minecraft/world/entity/LivingEntity.m_21254_:()Z
+ 38: ifne 42
+ 41: return
+ 42: aload_0
+ 43: invokevirtual #357 // Method net/minecraftforge/event/entity/living/LivingHurtEvent.getSource:()Lnet/minecraft/world/damagesource/DamageSource;
+ 46: invokevirtual #363 // Method net/minecraft/world/damagesource/DamageSource.m_7639_:()Lnet/minecraft/world/entity/Entity;
+ 49: astore_2
+ 50: aload_2
+ 51: instanceof #350 // class net/minecraft/world/entity/LivingEntity
+ 54: ifeq 74
+ 57: aload_2
+ 58: checkcast #350 // class net/minecraft/world/entity/LivingEntity
+ 61: astore_3
+ 62: aload_3
+ 63: aload_1
+ 64: if_acmpeq 74
+ 67: aload_3
+ 68: invokevirtual #663 // Method net/minecraft/world/entity/LivingEntity.m_6084_:()Z
+ 71: ifne 75
+ 74: return
+ 75: aload_1
+ 76: invokevirtual #668 // Method net/minecraft/world/entity/LivingEntity.m_21211_:()Lnet/minecraft/world/item/ItemStack;
+ 79: astore 4
+ 81: aload_1
+ 82: aload_3
+ 83: aload 4
+ 85: aload_0
+ 86: invokevirtual #407 // Method net/minecraftforge/event/entity/living/LivingHurtEvent.getAmount:()F
+ 89: invokestatic #674 // Method applySpikedShieldThorns:(Lnet/minecraft/world/entity/LivingEntity;Lnet/minecraft/world/entity/LivingEntity;Lnet/minecraft/world/item/ItemStack;F)Z
+ 92: ifne 109
+ 95: aload_1
+ 96: aload_3
+ 97: aload_1
+ 98: invokevirtual #677 // Method net/minecraft/world/entity/LivingEntity.m_21206_:()Lnet/minecraft/world/item/ItemStack;
+ 101: aload_0
+ 102: invokevirtual #407 // Method net/minecraftforge/event/entity/living/LivingHurtEvent.getAmount:()F
+ 105: invokestatic #674 // Method applySpikedShieldThorns:(Lnet/minecraft/world/entity/LivingEntity;Lnet/minecraft/world/entity/LivingEntity;Lnet/minecraft/world/item/ItemStack;F)Z
+ 108: pop
+ 109: return
+
+ private static boolean applySpikedShieldThorns(net.minecraft.world.entity.LivingEntity, net.minecraft.world.entity.LivingEntity, net.minecraft.world.item.ItemStack, float);
+ Code:
+ 0: aload_2
+ 1: invokevirtual #277 // Method net/minecraft/world/item/ItemStack.m_41619_:()Z
+ 4: ifne 24
+ 7: aload_2
+ 8: invokevirtual #119 // Method net/minecraft/world/item/ItemStack.m_41720_:()Lnet/minecraft/world/item/Item;
+ 11: instanceof #647 // class com/ogaba/sa_combat/combat/weapon/SAShieldItem
+ 14: ifeq 24
+ 17: aload_2
+ 18: invokestatic #689 // Method hasSpikedShieldUpgrade:(Lnet/minecraft/world/item/ItemStack;)Z
+ 21: ifne 26
+ 24: iconst_0
+ 25: ireturn
+ 26: aload_0
+ 27: invokevirtual #353 // Method net/minecraft/world/entity/LivingEntity.m_9236_:()Lnet/minecraft/world/level/Level;
+ 30: invokevirtual #692 // Method net/minecraft/world/level/Level.m_46467_:()J
+ 33: lstore 4
+ 35: aload_2
+ 36: invokevirtual #696 // Method net/minecraft/world/item/ItemStack.m_41784_:()Lnet/minecraft/nbt/CompoundTag;
+ 39: ldc_w #698 // String SACombatLastShieldThornsTick
+ 42: invokevirtual #704 // Method net/minecraft/nbt/CompoundTag.m_128454_:(Ljava/lang/String;)J
+ 45: lload 4
+ 47: lcmp
+ 48: ifne 53
+ 51: iconst_1
+ 52: ireturn
+ 53: aload_2
+ 54: invokevirtual #696 // Method net/minecraft/world/item/ItemStack.m_41784_:()Lnet/minecraft/nbt/CompoundTag;
+ 57: ldc_w #698 // String SACombatLastShieldThornsTick
+ 60: lload 4
+ 62: invokevirtual #708 // Method net/minecraft/nbt/CompoundTag.m_128356_:(Ljava/lang/String;J)V
+ 65: fconst_1
+ 66: ldc_w #709 // float 4.0f
+ 69: fconst_1
+ 70: fload_3
+ 71: ldc_w #710 // float 0.35f
+ 74: fmul
+ 75: fadd
+ 76: invokestatic #713 // Method java/lang/Math.min:(FF)F
+ 79: invokestatic #715 // Method java/lang/Math.max:(FF)F
+ 82: fstore 6
+ 84: iconst_1
+ 85: putstatic #645 // Field proccingShieldThorns:Z
+ 88: aload_1
+ 89: aload_0
+ 90: invokevirtual #719 // Method net/minecraft/world/entity/LivingEntity.m_269291_:()Lnet/minecraft/world/damagesource/DamageSources;
+ 93: aload_0
+ 94: invokevirtual #725 // Method net/minecraft/world/damagesource/DamageSources.m_269374_:(Lnet/minecraft/world/entity/Entity;)Lnet/minecraft/world/damagesource/DamageSource;
+ 97: fload 6
+ 99: invokevirtual #729 // Method net/minecraft/world/entity/LivingEntity.m_6469_:(Lnet/minecraft/world/damagesource/DamageSource;F)Z
+ 102: pop
+ 103: iconst_0
+ 104: putstatic #645 // Field proccingShieldThorns:Z
+ 107: goto 119
+ 110: astore 7
+ 112: iconst_0
+ 113: putstatic #645 // Field proccingShieldThorns:Z
+ 116: aload 7
+ 118: athrow
+ 119: aload_0
+ 120: invokevirtual #393 // Method net/minecraft/world/entity/LivingEntity.m_217043_:()Lnet/minecraft/util/RandomSource;
+ 123: invokeinterface #732, 1 // InterfaceMethod net/minecraft/util/RandomSource.m_188501_:()F
+ 128: ldc_w #710 // float 0.35f
+ 131: fcmpg
+ 132: ifge 159
+ 135: aload_1
+ 136: new #734 // class net/minecraft/world/effect/MobEffectInstance
+ 139: dup
+ 140: getstatic #739 // Field com/ogaba/sacore/registry/ModEffects.BLEEDING:Lnet/minecraftforge/registries/RegistryObject;
+ 143: invokevirtual #235 // Method net/minecraftforge/registries/RegistryObject.get:()Ljava/lang/Object;
+ 146: checkcast #741 // class net/minecraft/world/effect/MobEffect
+ 149: bipush 100
+ 151: iconst_0
+ 152: invokespecial #744 // Method net/minecraft/world/effect/MobEffectInstance."":(Lnet/minecraft/world/effect/MobEffect;II)V
+ 155: invokevirtual #748 // Method net/minecraft/world/entity/LivingEntity.m_7292_:(Lnet/minecraft/world/effect/MobEffectInstance;)Z
+ 158: pop
+ 159: aload_0
+ 160: instanceof #750 // class net/minecraft/world/entity/player/Player
+ 163: ifeq 183
+ 166: aload_0
+ 167: checkcast #750 // class net/minecraft/world/entity/player/Player
+ 170: astore 7
+ 172: aload 7
+ 174: invokevirtual #754 // Method net/minecraft/world/entity/player/Player.m_150110_:()Lnet/minecraft/world/entity/player/Abilities;
+ 177: getfield #759 // Field net/minecraft/world/entity/player/Abilities.f_35937_:Z
+ 180: ifne 194
+ 183: aload_2
+ 184: iconst_1
+ 185: aload_0
+ 186: invokedynamic #770, 0 // InvokeDynamic #7:accept:()Ljava/util/function/Consumer;
+ 191: invokevirtual #774 // Method net/minecraft/world/item/ItemStack.m_41622_:(ILnet/minecraft/world/entity/LivingEntity;Ljava/util/function/Consumer;)V
+ 194: aload_0
+ 195: invokevirtual #353 // Method net/minecraft/world/entity/LivingEntity.m_9236_:()Lnet/minecraft/world/level/Level;
+ 198: aconst_null
+ 199: aload_0
+ 200: invokevirtual #414 // Method net/minecraft/world/entity/LivingEntity.m_20185_:()D
+ 203: aload_0
+ 204: invokevirtual #417 // Method net/minecraft/world/entity/LivingEntity.m_20186_:()D
+ 207: aload_0
+ 208: invokevirtual #420 // Method net/minecraft/world/entity/LivingEntity.m_20189_:()D
+ 211: getstatic #777 // Field net/minecraft/sounds/SoundEvents.f_12274_:Lnet/minecraft/sounds/SoundEvent;
+ 214: getstatic #432 // Field net/minecraft/sounds/SoundSource.PLAYERS:Lnet/minecraft/sounds/SoundSource;
+ 217: ldc_w #778 // float 0.7f
+ 220: ldc_w #779 // float 1.1f
+ 223: invokevirtual #438 // Method net/minecraft/world/level/Level.m_6263_:(Lnet/minecraft/world/entity/player/Player;DDDLnet/minecraft/sounds/SoundEvent;Lnet/minecraft/sounds/SoundSource;FF)V
+ 226: iconst_1
+ 227: ireturn
+ Exception table:
+ from to target type
+ 88 103 110 any
+ 110 112 110 any
+
+ private static boolean hasSpikedShieldUpgrade(net.minecraft.world.item.ItemStack);
+ Code:
+ 0: aload_0
+ 1: ldc_w #787 // String spiked
+ 4: invokestatic #791 // Method com/ogaba/sa_combat/combat/attachment/WeaponAttachmentData.hasAttachmentPath:(Lnet/minecraft/world/item/ItemStack;Ljava/lang/String;)Z
+ 7: ireturn
+
+ public static void tickBallisticProtection(net.minecraftforge.event.TickEvent$PlayerTickEvent);
+ Code:
+ 0: aload_0
+ 1: getfield #797 // Field net/minecraftforge/event/TickEvent$PlayerTickEvent.phase:Lnet/minecraftforge/event/TickEvent$Phase;
+ 4: getstatic #800 // Field net/minecraftforge/event/TickEvent$Phase.END:Lnet/minecraftforge/event/TickEvent$Phase;
+ 7: if_acmpne 23
+ 10: aload_0
+ 11: getfield #802 // Field net/minecraftforge/event/TickEvent$PlayerTickEvent.player:Lnet/minecraft/world/entity/player/Player;
+ 14: invokevirtual #803 // Method net/minecraft/world/entity/player/Player.m_9236_:()Lnet/minecraft/world/level/Level;
+ 17: invokevirtual #174 // Method net/minecraft/world/level/Level.m_5776_:()Z
+ 20: ifeq 24
+ 23: return
+ 24: aload_0
+ 25: getfield #802 // Field net/minecraftforge/event/TickEvent$PlayerTickEvent.player:Lnet/minecraft/world/entity/player/Player;
+ 28: getfield #806 // Field net/minecraft/world/entity/player/Player.f_19797_:I
+ 31: bipush 20
+ 33: irem
+ 34: ifeq 38
+ 37: return
+ 38: aload_0
+ 39: getfield #802 // Field net/minecraftforge/event/TickEvent$PlayerTickEvent.player:Lnet/minecraft/world/entity/player/Player;
+ 42: invokestatic #811 // Method com/ogaba/sa_combat/combat/armor/BallisticProtection.tickEquippedVests:(Lnet/minecraft/world/entity/LivingEntity;)V
+ 45: aload_0
+ 46: getfield #802 // Field net/minecraftforge/event/TickEvent$PlayerTickEvent.player:Lnet/minecraft/world/entity/player/Player;
+ 49: astore_2
+ 50: aload_2
+ 51: instanceof #813 // class net/minecraft/server/level/ServerPlayer
+ 54: ifeq 66
+ 57: aload_2
+ 58: checkcast #813 // class net/minecraft/server/level/ServerPlayer
+ 61: astore_1
+ 62: aload_1
+ 63: invokestatic #817 // Method com/ogaba/sa_combat/combat/armor/BallisticProtection.syncHud:(Lnet/minecraft/server/level/ServerPlayer;)V
+ 66: return
+
+ public static void consumeBallisticProtectionOnDamage(net.minecraftforge.event.entity.living.LivingHurtEvent);
+ Code:
+ 0: aload_0
+ 1: invokevirtual #348 // Method net/minecraftforge/event/entity/living/LivingHurtEvent.getEntity:()Lnet/minecraft/world/entity/LivingEntity;
+ 4: invokevirtual #353 // Method net/minecraft/world/entity/LivingEntity.m_9236_:()Lnet/minecraft/world/level/Level;
+ 7: invokevirtual #174 // Method net/minecraft/world/level/Level.m_5776_:()Z
+ 10: ifne 22
+ 13: aload_0
+ 14: invokevirtual #407 // Method net/minecraftforge/event/entity/living/LivingHurtEvent.getAmount:()F
+ 17: fconst_0
+ 18: fcmpg
+ 19: ifgt 23
+ 22: return
+ 23: aload_0
+ 24: invokevirtual #348 // Method net/minecraftforge/event/entity/living/LivingHurtEvent.getEntity:()Lnet/minecraft/world/entity/LivingEntity;
+ 27: astore_2
+ 28: aload_2
+ 29: instanceof #813 // class net/minecraft/server/level/ServerPlayer
+ 32: ifeq 47
+ 35: aload_2
+ 36: checkcast #813 // class net/minecraft/server/level/ServerPlayer
+ 39: astore_1
+ 40: aload_0
+ 41: invokestatic #824 // Method isBallisticProjectileDamage:(Lnet/minecraftforge/event/entity/living/LivingHurtEvent;)Z
+ 44: ifne 48
+ 47: return
+ 48: aload_1
+ 49: invokestatic #828 // Method com/ogaba/sa_combat/combat/armor/BallisticProtection.findBestEquippedVest:(Lnet/minecraft/world/entity/LivingEntity;)Ljava/util/Optional;
+ 52: aload_0
+ 53: aload_1
+ 54: invokedynamic #838, 0 // InvokeDynamic #8:accept:(Lnet/minecraftforge/event/entity/living/LivingHurtEvent;Lnet/minecraft/server/level/ServerPlayer;)Ljava/util/function/Consumer;
+ 59: invokevirtual #531 // Method java/util/Optional.ifPresent:(Ljava/util/function/Consumer;)V
+ 62: return
+
+ private static boolean isBallisticProjectileDamage(net.minecraftforge.event.entity.living.LivingHurtEvent);
+ Code:
+ 0: aload_0
+ 1: invokevirtual #357 // Method net/minecraftforge/event/entity/living/LivingHurtEvent.getSource:()Lnet/minecraft/world/damagesource/DamageSource;
+ 4: ifnonnull 9
+ 7: iconst_0
+ 8: ireturn
+ 9: aload_0
+ 10: invokevirtual #357 // Method net/minecraftforge/event/entity/living/LivingHurtEvent.getSource:()Lnet/minecraft/world/damagesource/DamageSource;
+ 13: getstatic #844 // Field net/minecraft/tags/DamageTypeTags.f_268524_:Lnet/minecraft/tags/TagKey;
+ 16: invokevirtual #848 // Method net/minecraft/world/damagesource/DamageSource.m_269533_:(Lnet/minecraft/tags/TagKey;)Z
+ 19: ifeq 24
+ 22: iconst_1
+ 23: ireturn
+ 24: aload_0
+ 25: invokevirtual #357 // Method net/minecraftforge/event/entity/living/LivingHurtEvent.getSource:()Lnet/minecraft/world/damagesource/DamageSource;
+ 28: invokevirtual #366 // Method net/minecraft/world/damagesource/DamageSource.m_7640_:()Lnet/minecraft/world/entity/Entity;
+ 31: astore_1
+ 32: aload_1
+ 33: instanceof #850 // class net/minecraft/world/entity/projectile/Projectile
+ 36: ifeq 47
+ 39: aload_1
+ 40: checkcast #850 // class net/minecraft/world/entity/projectile/Projectile
+ 43: astore_2
+ 44: goto 49
+ 47: iconst_0
+ 48: ireturn
+ 49: iconst_1
+ 50: ireturn
+
+ public static void climbWithDualIceAxes(net.minecraftforge.event.TickEvent$PlayerTickEvent);
+ Code:
+ 0: aload_0
+ 1: getfield #797 // Field net/minecraftforge/event/TickEvent$PlayerTickEvent.phase:Lnet/minecraftforge/event/TickEvent$Phase;
+ 4: getstatic #800 // Field net/minecraftforge/event/TickEvent$Phase.END:Lnet/minecraftforge/event/TickEvent$Phase;
+ 7: if_acmpeq 11
+ 10: return
+ 11: aload_0
+ 12: getfield #802 // Field net/minecraftforge/event/TickEvent$PlayerTickEvent.player:Lnet/minecraft/world/entity/player/Player;
+ 15: astore_1
+ 16: aload_1
+ 17: invokevirtual #857 // Method net/minecraft/world/entity/player/Player.m_5833_:()Z
+ 20: ifne 44
+ 23: aload_1
+ 24: invokevirtual #860 // Method net/minecraft/world/entity/player/Player.m_21255_:()Z
+ 27: ifne 44
+ 30: aload_1
+ 31: invokevirtual #863 // Method net/minecraft/world/entity/player/Player.m_20072_:()Z
+ 34: ifne 44
+ 37: aload_1
+ 38: invokevirtual #866 // Method net/minecraft/world/entity/player/Player.m_20096_:()Z
+ 41: ifeq 45
+ 44: return
+ 45: aload_1
+ 46: invokestatic #870 // Method hasDualIceAxes:(Lnet/minecraft/world/entity/player/Player;)Z
+ 49: ifeq 59
+ 52: aload_1
+ 53: getfield #873 // Field net/minecraft/world/entity/player/Player.f_19862_:Z
+ 56: ifne 60
+ 59: return
+ 60: aload_1
+ 61: invokevirtual #877 // Method net/minecraft/world/entity/player/Player.m_20184_:()Lnet/minecraft/world/phys/Vec3;
+ 64: astore_2
+ 65: aload_1
+ 66: invokevirtual #880 // Method net/minecraft/world/entity/player/Player.m_6144_:()Z
+ 69: istore_3
+ 70: iload_3
+ 71: ifeq 80
+ 74: ldc2_w #881 // double -0.055d
+ 77: goto 83
+ 80: ldc2_w #885 // double 0.125d
+ 83: dstore 4
+ 85: aload_2
+ 86: getfield #889 // Field net/minecraft/world/phys/Vec3.f_82480_:D
+ 89: dload 4
+ 91: dcmpg
+ 92: ifge 122
+ 95: aload_1
+ 96: aload_2
+ 97: getfield #892 // Field net/minecraft/world/phys/Vec3.f_82479_:D
+ 100: ldc2_w #893 // double 0.72d
+ 103: dmul
+ 104: dload 4
+ 106: aload_2
+ 107: getfield #897 // Field net/minecraft/world/phys/Vec3.f_82481_:D
+ 110: ldc2_w #893 // double 0.72d
+ 113: dmul
+ 114: invokevirtual #901 // Method net/minecraft/world/entity/player/Player.m_20334_:(DDD)V
+ 117: aload_1
+ 118: iconst_1
+ 119: putfield #904 // Field net/minecraft/world/entity/player/Player.f_19812_:Z
+ 122: aload_1
+ 123: fconst_0
+ 124: putfield #907 // Field net/minecraft/world/entity/player/Player.f_19789_:F
+ 127: aload_1
+ 128: getfield #806 // Field net/minecraft/world/entity/player/Player.f_19797_:I
+ 131: bipush 10
+ 133: irem
+ 134: ifne 142
+ 137: aload_1
+ 138: iload_3
+ 139: invokestatic #911 // Method playIceAxeClimbSound:(Lnet/minecraft/world/entity/player/Player;Z)V
+ 142: aload_1
+ 143: invokevirtual #803 // Method net/minecraft/world/entity/player/Player.m_9236_:()Lnet/minecraft/world/level/Level;
+ 146: invokevirtual #174 // Method net/minecraft/world/level/Level.m_5776_:()Z
+ 149: ifne 188
+ 152: aload_1
+ 153: invokevirtual #754 // Method net/minecraft/world/entity/player/Player.m_150110_:()Lnet/minecraft/world/entity/player/Abilities;
+ 156: getfield #759 // Field net/minecraft/world/entity/player/Abilities.f_35937_:Z
+ 159: ifne 188
+ 162: aload_1
+ 163: getfield #806 // Field net/minecraft/world/entity/player/Player.f_19797_:I
+ 166: bipush 20
+ 168: irem
+ 169: ifne 188
+ 172: aload_1
+ 173: invokevirtual #912 // Method net/minecraft/world/entity/player/Player.m_21205_:()Lnet/minecraft/world/item/ItemStack;
+ 176: aload_1
+ 177: invokestatic #916 // Method damageIceAxe:(Lnet/minecraft/world/item/ItemStack;Lnet/minecraft/world/entity/player/Player;)V
+ 180: aload_1
+ 181: invokevirtual #917 // Method net/minecraft/world/entity/player/Player.m_21206_:()Lnet/minecraft/world/item/ItemStack;
+ 184: aload_1
+ 185: invokestatic #916 // Method damageIceAxe:(Lnet/minecraft/world/item/ItemStack;Lnet/minecraft/world/entity/player/Player;)V
+ 188: return
+
+ private static void playIceAxeClimbSound(net.minecraft.world.entity.player.Player, boolean);
+ Code:
+ 0: iload_1
+ 1: ifeq 10
+ 4: ldc_w #922 // float 0.95f
+ 7: goto 13
+ 10: ldc_w #923 // float 1.05f
+ 13: fstore_2
+ 14: iload_1
+ 15: ifeq 24
+ 18: ldc_w #924 // float 0.72f
+ 21: goto 27
+ 24: ldc_w #925 // float 1.22f
+ 27: fstore_3
+ 28: aload_0
+ 29: invokevirtual #803 // Method net/minecraft/world/entity/player/Player.m_9236_:()Lnet/minecraft/world/level/Level;
+ 32: invokevirtual #174 // Method net/minecraft/world/level/Level.m_5776_:()Z
+ 35: ifeq 81
+ 38: aload_0
+ 39: invokevirtual #803 // Method net/minecraft/world/entity/player/Player.m_9236_:()Lnet/minecraft/world/level/Level;
+ 42: aload_0
+ 43: invokevirtual #926 // Method net/minecraft/world/entity/player/Player.m_20185_:()D
+ 46: aload_0
+ 47: invokevirtual #927 // Method net/minecraft/world/entity/player/Player.m_20186_:()D
+ 50: aload_0
+ 51: invokevirtual #928 // Method net/minecraft/world/entity/player/Player.m_20189_:()D
+ 54: getstatic #931 // Field net/minecraft/sounds/SoundEvents.f_144108_:Lnet/minecraft/sounds/SoundEvent;
+ 57: getstatic #432 // Field net/minecraft/sounds/SoundSource.PLAYERS:Lnet/minecraft/sounds/SoundSource;
+ 60: fload_2
+ 61: fload_3
+ 62: aload_0
+ 63: invokevirtual #932 // Method net/minecraft/world/entity/player/Player.m_217043_:()Lnet/minecraft/util/RandomSource;
+ 66: invokeinterface #732, 1 // InterfaceMethod net/minecraft/util/RandomSource.m_188501_:()F
+ 71: ldc_w #933 // float 0.1f
+ 74: fmul
+ 75: fadd
+ 76: iconst_0
+ 77: invokevirtual #937 // Method net/minecraft/world/level/Level.m_7785_:(DDDLnet/minecraft/sounds/SoundEvent;Lnet/minecraft/sounds/SoundSource;FFZ)V
+ 80: return
+ 81: aload_0
+ 82: invokevirtual #803 // Method net/minecraft/world/entity/player/Player.m_9236_:()Lnet/minecraft/world/level/Level;
+ 85: aload_0
+ 86: aload_0
+ 87: invokevirtual #926 // Method net/minecraft/world/entity/player/Player.m_20185_:()D
+ 90: aload_0
+ 91: invokevirtual #927 // Method net/minecraft/world/entity/player/Player.m_20186_:()D
+ 94: aload_0
+ 95: invokevirtual #928 // Method net/minecraft/world/entity/player/Player.m_20189_:()D
+ 98: getstatic #931 // Field net/minecraft/sounds/SoundEvents.f_144108_:Lnet/minecraft/sounds/SoundEvent;
+ 101: getstatic #432 // Field net/minecraft/sounds/SoundSource.PLAYERS:Lnet/minecraft/sounds/SoundSource;
+ 104: fload_2
+ 105: ldc_w #938 // float 0.55f
+ 108: fmul
+ 109: fload_3
+ 110: aload_0
+ 111: invokevirtual #932 // Method net/minecraft/world/entity/player/Player.m_217043_:()Lnet/minecraft/util/RandomSource;
+ 114: invokeinterface #732, 1 // InterfaceMethod net/minecraft/util/RandomSource.m_188501_:()F
+ 119: ldc_w #933 // float 0.1f
+ 122: fmul
+ 123: fadd
+ 124: invokevirtual #438 // Method net/minecraft/world/level/Level.m_6263_:(Lnet/minecraft/world/entity/player/Player;DDDLnet/minecraft/sounds/SoundEvent;Lnet/minecraft/sounds/SoundSource;FF)V
+ 127: return
+
+ private static boolean hasDualIceAxes(net.minecraft.world.entity.player.Player);
+ Code:
+ 0: aload_0
+ 1: invokevirtual #912 // Method net/minecraft/world/entity/player/Player.m_21205_:()Lnet/minecraft/world/item/ItemStack;
+ 4: invokestatic #943 // Method isIceAxe:(Lnet/minecraft/world/item/ItemStack;)Z
+ 7: ifeq 24
+ 10: aload_0
+ 11: invokevirtual #917 // Method net/minecraft/world/entity/player/Player.m_21206_:()Lnet/minecraft/world/item/ItemStack;
+ 14: invokestatic #943 // Method isIceAxe:(Lnet/minecraft/world/item/ItemStack;)Z
+ 17: ifeq 24
+ 20: iconst_1
+ 21: goto 25
+ 24: iconst_0
+ 25: ireturn
+
+ private static boolean isIceAxe(net.minecraft.world.item.ItemStack);
+ Code:
+ 0: aload_0
+ 1: invokevirtual #277 // Method net/minecraft/world/item/ItemStack.m_41619_:()Z
+ 4: ifne 27
+ 7: aload_0
+ 8: getstatic #948 // Field com/ogaba/sa_combat/registry/ModItems.ICE_AXE:Lnet/minecraftforge/registries/RegistryObject;
+ 11: invokevirtual #235 // Method net/minecraftforge/registries/RegistryObject.get:()Ljava/lang/Object;
+ 14: checkcast #950 // class net/minecraft/world/item/Item
+ 17: invokevirtual #954 // Method net/minecraft/world/item/ItemStack.m_150930_:(Lnet/minecraft/world/item/Item;)Z
+ 20: ifeq 27
+ 23: iconst_1
+ 24: goto 28
+ 27: iconst_0
+ 28: ireturn
+
+ private static void damageIceAxe(net.minecraft.world.item.ItemStack, net.minecraft.world.entity.player.Player);
+ Code:
+ 0: aload_0
+ 1: invokestatic #943 // Method isIceAxe:(Lnet/minecraft/world/item/ItemStack;)Z
+ 4: ifne 8
+ 7: return
+ 8: aload_0
+ 9: iconst_1
+ 10: aload_1
+ 11: invokedynamic #957, 0 // InvokeDynamic #9:accept:()Ljava/util/function/Consumer;
+ 16: invokevirtual #774 // Method net/minecraft/world/item/ItemStack.m_41622_:(ILnet/minecraft/world/entity/LivingEntity;Ljava/util/function/Consumer;)V
+ 19: return
+
+ public static void onServerTick(net.minecraftforge.event.TickEvent$ServerTickEvent);
+ Code:
+ 0: aload_0
+ 1: getfield #960 // Field net/minecraftforge/event/TickEvent$ServerTickEvent.phase:Lnet/minecraftforge/event/TickEvent$Phase;
+ 4: getstatic #800 // Field net/minecraftforge/event/TickEvent$Phase.END:Lnet/minecraftforge/event/TickEvent$Phase;
+ 7: if_acmpne 17
+ 10: aload_0
+ 11: invokevirtual #964 // Method net/minecraftforge/event/TickEvent$ServerTickEvent.getServer:()Lnet/minecraft/server/MinecraftServer;
+ 14: invokestatic #970 // Method com/ogaba/sa_combat/combat/weapon/ChainsawItem.tickActiveTreeFelling:(Lnet/minecraft/server/MinecraftServer;)V
+ 17: return
+
+ public static void onPlayerLoggedIn(net.minecraftforge.event.entity.player.PlayerEvent$PlayerLoggedInEvent);
+ Code:
+ 0: aload_0
+ 1: invokevirtual #976 // Method net/minecraftforge/event/entity/player/PlayerEvent$PlayerLoggedInEvent.getEntity:()Lnet/minecraft/world/entity/player/Player;
+ 4: astore_2
+ 5: aload_2
+ 6: instanceof #813 // class net/minecraft/server/level/ServerPlayer
+ 9: ifeq 22
+ 12: aload_2
+ 13: checkcast #813 // class net/minecraft/server/level/ServerPlayer
+ 16: astore_1
+ 17: aload_1
+ 18: iconst_1
+ 19: invokestatic #979 // Method com/ogaba/sa_combat/combat/armor/BallisticProtection.syncHud:(Lnet/minecraft/server/level/ServerPlayer;Z)V
+ 22: return
+
+ public static void onPlayerLoggedOut(net.minecraftforge.event.entity.player.PlayerEvent$PlayerLoggedOutEvent);
+ Code:
+ 0: aload_0
+ 1: invokevirtual #983 // Method net/minecraftforge/event/entity/player/PlayerEvent$PlayerLoggedOutEvent.getEntity:()Lnet/minecraft/world/entity/player/Player;
+ 4: invokevirtual #987 // Method net/minecraft/world/entity/player/Player.m_20148_:()Ljava/util/UUID;
+ 7: invokestatic #991 // Method com/ogaba/sa_combat/combat/armor/BallisticProtection.clearHudCache:(Ljava/util/UUID;)V
+ 10: return
+
+ public static void onPlayerClone(net.minecraftforge.event.entity.player.PlayerEvent$Clone);
+ Code:
+ 0: return
+
+ private static boolean shouldBlockOffhandUse(net.minecraft.world.entity.player.Player, net.minecraft.world.InteractionHand);
+ Code:
+ 0: aload_0
+ 1: ifnull 11
+ 4: aload_1
+ 5: getstatic #1003 // Field net/minecraft/world/InteractionHand.OFF_HAND:Lnet/minecraft/world/InteractionHand;
+ 8: if_acmpeq 13
+ 11: iconst_0
+ 12: ireturn
+ 13: aload_0
+ 14: invokevirtual #912 // Method net/minecraft/world/entity/player/Player.m_21205_:()Lnet/minecraft/world/item/ItemStack;
+ 17: invokevirtual #119 // Method net/minecraft/world/item/ItemStack.m_41720_:()Lnet/minecraft/world/item/Item;
+ 20: instanceof #1005 // class com/ogaba/sa_combat/combat/weapon/NailGunItem
+ 23: ifne 39
+ 26: aload_0
+ 27: invokevirtual #917 // Method net/minecraft/world/entity/player/Player.m_21206_:()Lnet/minecraft/world/item/ItemStack;
+ 30: invokevirtual #119 // Method net/minecraft/world/item/ItemStack.m_41720_:()Lnet/minecraft/world/item/Item;
+ 33: instanceof #1005 // class com/ogaba/sa_combat/combat/weapon/NailGunItem
+ 36: ifeq 43
+ 39: iconst_1
+ 40: goto 44
+ 43: iconst_0
+ 44: ireturn
+
+ public static void onNailGunBlockOffhandItem(net.minecraftforge.event.entity.player.PlayerInteractEvent$RightClickItem);
+ Code:
+ 0: aload_0
+ 1: invokevirtual #1009 // Method net/minecraftforge/event/entity/player/PlayerInteractEvent$RightClickItem.getEntity:()Lnet/minecraft/world/entity/player/Player;
+ 4: aload_0
+ 5: invokevirtual #1013 // Method net/minecraftforge/event/entity/player/PlayerInteractEvent$RightClickItem.getHand:()Lnet/minecraft/world/InteractionHand;
+ 8: invokestatic #1015 // Method shouldBlockOffhandUse:(Lnet/minecraft/world/entity/player/Player;Lnet/minecraft/world/InteractionHand;)Z
+ 11: ifeq 19
+ 14: aload_0
+ 15: iconst_1
+ 16: invokevirtual #1016 // Method net/minecraftforge/event/entity/player/PlayerInteractEvent$RightClickItem.setCanceled:(Z)V
+ 19: return
+
+ public static void onNailGunBlockOffhandBlock(net.minecraftforge.event.entity.player.PlayerInteractEvent$RightClickBlock);
+ Code:
+ 0: aload_0
+ 1: invokevirtual #1020 // Method net/minecraftforge/event/entity/player/PlayerInteractEvent$RightClickBlock.getEntity:()Lnet/minecraft/world/entity/player/Player;
+ 4: aload_0
+ 5: invokevirtual #1021 // Method net/minecraftforge/event/entity/player/PlayerInteractEvent$RightClickBlock.getHand:()Lnet/minecraft/world/InteractionHand;
+ 8: invokestatic #1015 // Method shouldBlockOffhandUse:(Lnet/minecraft/world/entity/player/Player;Lnet/minecraft/world/InteractionHand;)Z
+ 11: ifeq 26
+ 14: aload_0
+ 15: iconst_1
+ 16: invokevirtual #1022 // Method net/minecraftforge/event/entity/player/PlayerInteractEvent$RightClickBlock.setCanceled:(Z)V
+ 19: aload_0
+ 20: getstatic #1028 // Field net/minecraft/world/InteractionResult.FAIL:Lnet/minecraft/world/InteractionResult;
+ 23: invokevirtual #1032 // Method net/minecraftforge/event/entity/player/PlayerInteractEvent$RightClickBlock.setCancellationResult:(Lnet/minecraft/world/InteractionResult;)V
+ 26: return
+
+ public static void onNailGunBlockOffhandEntity(net.minecraftforge.event.entity.player.PlayerInteractEvent$EntityInteract);
+ Code:
+ 0: aload_0
+ 1: invokevirtual #1036 // Method net/minecraftforge/event/entity/player/PlayerInteractEvent$EntityInteract.getEntity:()Lnet/minecraft/world/entity/player/Player;
+ 4: aload_0
+ 5: invokevirtual #1037 // Method net/minecraftforge/event/entity/player/PlayerInteractEvent$EntityInteract.getHand:()Lnet/minecraft/world/InteractionHand;
+ 8: invokestatic #1015 // Method shouldBlockOffhandUse:(Lnet/minecraft/world/entity/player/Player;Lnet/minecraft/world/InteractionHand;)Z
+ 11: ifeq 26
+ 14: aload_0
+ 15: iconst_1
+ 16: invokevirtual #1038 // Method net/minecraftforge/event/entity/player/PlayerInteractEvent$EntityInteract.setCanceled:(Z)V
+ 19: aload_0
+ 20: getstatic #1028 // Field net/minecraft/world/InteractionResult.FAIL:Lnet/minecraft/world/InteractionResult;
+ 23: invokevirtual #1039 // Method net/minecraftforge/event/entity/player/PlayerInteractEvent$EntityInteract.setCancellationResult:(Lnet/minecraft/world/InteractionResult;)V
+ 26: return
+
+ private static void lambda$consumeBallisticProtectionOnDamage$5(net.minecraftforge.event.entity.living.LivingHurtEvent, net.minecraft.server.level.ServerPlayer, net.minecraft.world.item.ItemStack);
+ Code:
+ 0: aload_0
+ 1: invokevirtual #407 // Method net/minecraftforge/event/entity/living/LivingHurtEvent.getAmount:()F
+ 4: fstore_3
+ 5: aload_0
+ 6: aload_2
+ 7: fload_3
+ 8: invokestatic #1044 // Method com/ogaba/sa_combat/combat/armor/BallisticProtection.reduceProjectileDamage:(Lnet/minecraft/world/item/ItemStack;F)F
+ 11: invokevirtual #411 // Method net/minecraftforge/event/entity/living/LivingHurtEvent.setAmount:(F)V
+ 14: aload_2
+ 15: fload_3
+ 16: invokestatic #1048 // Method com/ogaba/sa_combat/combat/armor/BallisticProtection.consumeProtection:(Lnet/minecraft/world/item/ItemStack;F)I
+ 19: ifle 26
+ 22: aload_1
+ 23: invokestatic #817 // Method com/ogaba/sa_combat/combat/armor/BallisticProtection.syncHud:(Lnet/minecraft/server/level/ServerPlayer;)V
+ 26: return
+
+ private static void lambda$procExternalWeaponAbilities$4(java.util.List, net.minecraftforge.event.entity.living.LivingHurtEvent, net.minecraft.world.entity.LivingEntity, com.ogaba.sa_combat.combat.modifier.WeaponModifier);
+ Code:
+ 0: aload_3
+ 1: invokevirtual #1055 // Method com/ogaba/sa_combat/combat/modifier/WeaponModifier.createGrantedAbility:()Lcom/ogaba/sa_combat/combat/system/AbilityInstance;
+ 4: astore 4
+ 6: aload 4
+ 8: ifnull 20
+ 11: aload_0
+ 12: aload 4
+ 14: invokeinterface #520, 2 // InterfaceMethod java/util/List.add:(Ljava/lang/Object;)Z
+ 19: pop
+ 20: aload_3
+ 21: aload_1
+ 22: invokevirtual #348 // Method net/minecraftforge/event/entity/living/LivingHurtEvent.getEntity:()Lnet/minecraft/world/entity/LivingEntity;
+ 25: aload_2
+ 26: invokevirtual #1059 // Method com/ogaba/sa_combat/combat/modifier/WeaponModifier.applyOnHitEffects:(Lnet/minecraft/world/entity/LivingEntity;Lnet/minecraft/world/entity/LivingEntity;)V
+ 29: return
+
+ private static void lambda$procExternalWeaponAbilities$3(java.util.List, net.minecraftforge.event.entity.living.LivingHurtEvent, net.minecraft.world.entity.LivingEntity, com.ogaba.sa_combat.combat.attachment.WeaponAttachment);
+ Code:
+ 0: aload_3
+ 1: invokevirtual #1066 // Method com/ogaba/sa_combat/combat/attachment/WeaponAttachment.createGrantedAbility:()Lcom/ogaba/sa_combat/combat/system/AbilityInstance;
+ 4: astore 4
+ 6: aload 4
+ 8: ifnull 20
+ 11: aload_0
+ 12: aload 4
+ 14: invokeinterface #520, 2 // InterfaceMethod java/util/List.add:(Ljava/lang/Object;)Z
+ 19: pop
+ 20: aload_3
+ 21: aload_1
+ 22: invokevirtual #348 // Method net/minecraftforge/event/entity/living/LivingHurtEvent.getEntity:()Lnet/minecraft/world/entity/LivingEntity;
+ 25: aload_2
+ 26: invokevirtual #1067 // Method com/ogaba/sa_combat/combat/attachment/WeaponAttachment.applyOnHitEffects:(Lnet/minecraft/world/entity/LivingEntity;Lnet/minecraft/world/entity/LivingEntity;)V
+ 29: return
+
+ private static boolean lambda$procExternalWeaponAbilities$2(com.ogaba.sa_combat.combat.system.AbilityInstance);
+ Code:
+ 0: aload_0
+ 1: ifnull 8
+ 4: iconst_1
+ 5: goto 9
+ 8: iconst_0
+ 9: ireturn
+
+ private static com.ogaba.sa_combat.combat.system.AbilityInstance lambda$procExternalWeaponAbilities$1(com.ogaba.sa_combat.combat.upgrade.WeaponUpgradeData$Entry, com.ogaba.sa_combat.combat.upgrade.WeaponUpgrade);
+ Code:
+ 0: aload_1
+ 1: aload_0
+ 2: invokevirtual #1072 // Method com/ogaba/sa_combat/combat/upgrade/WeaponUpgradeData$Entry.level:()I
+ 5: invokevirtual #1078 // Method com/ogaba/sa_combat/combat/upgrade/WeaponUpgrade.createAbility:(I)Lcom/ogaba/sa_combat/combat/system/AbilityInstance;
+ 8: areturn
+
+ private static boolean lambda$procExternalWeaponAbilities$0(com.ogaba.sa_combat.combat.upgrade.WeaponUpgrade);
+ Code:
+ 0: aload_0
+ 1: invokevirtual #1083 // Method com/ogaba/sa_combat/combat/upgrade/WeaponUpgrade.category:()Lcom/ogaba/sa_combat/combat/upgrade/WeaponUpgradeCategory;
+ 4: getstatic #1089 // Field com/ogaba/sa_combat/combat/upgrade/WeaponUpgradeCategory.ABILITY:Lcom/ogaba/sa_combat/combat/upgrade/WeaponUpgradeCategory;
+ 7: if_acmpne 14
+ 10: iconst_1
+ 11: goto 15
+ 14: iconst_0
+ 15: ireturn
+
+ static {};
+ Code:
+ 0: ldc_w #1092 // String 13a24b02-d971-4ee7-879c-1c7068a6bb71
+ 3: invokestatic #1098 // Method java/util/UUID.fromString:(Ljava/lang/String;)Ljava/util/UUID;
+ 6: putstatic #296 // Field EXTERNAL_UPGRADE_DAMAGE_UUID:Ljava/util/UUID;
+ 9: ldc_w #1100 // String 457d3b0c-c7b7-43a4-8395-01f82ec1bdb2
+ 12: invokestatic #1098 // Method java/util/UUID.fromString:(Ljava/lang/String;)Ljava/util/UUID;
+ 15: putstatic #307 // Field EXTERNAL_UPGRADE_SPEED_UUID:Ljava/util/UUID;
+ 18: ldc_w #1102 // String df109f67-5b6d-4de4-9a1b-c75443c0f1b2
+ 21: invokestatic #1098 // Method java/util/UUID.fromString:(Ljava/lang/String;)Ljava/util/UUID;
+ 24: putstatic #318 // Field EXTERNAL_UPGRADE_KNOCKBACK_UUID:Ljava/util/UUID;
+ 27: ldc_w #1104 // String 9d46b9e9-46cb-4ab3-b2a0-c0e331cce312
+ 30: invokestatic #1098 // Method java/util/UUID.fromString:(Ljava/lang/String;)Ljava/util/UUID;
+ 33: putstatic #331 // Field EXTERNAL_UPGRADE_REACH_UUID:Ljava/util/UUID;
+ 36: ldc_w #1106 // String 11d92754-4e96-4c9e-9b25-d8945bc43b24
+ 39: invokestatic #1098 // Method java/util/UUID.fromString:(Ljava/lang/String;)Ljava/util/UUID;
+ 42: putstatic #143 // Field TACZ_VEST_BULLET_RESISTANCE_UUID:Ljava/util/UUID;
+ 45: new #1108 // class net/minecraft/resources/ResourceLocation
+ 48: dup
+ 49: ldc_w #1110 // String tacz
+ 52: ldc_w #1112 // String tacz.bullet_resistance
+ 55: invokespecial #1115 // Method net/minecraft/resources/ResourceLocation."":(Ljava/lang/String;Ljava/lang/String;)V
+ 58: putstatic #129 // Field TACZ_BULLET_RESISTANCE_ID:Lnet/minecraft/resources/ResourceLocation;
+ 61: iconst_0
+ 62: putstatic #446 // Field proccingExternalAbility:Z
+ 65: iconst_0
+ 66: putstatic #645 // Field proccingShieldThorns:Z
+ 69: return
+}
diff --git a/_sa_hanhua_out/_tmp/javap_blueprint.txt b/_sa_hanhua_out/_tmp/javap_blueprint.txt
new file mode 100644
index 0000000..0bc0b8f
--- /dev/null
+++ b/_sa_hanhua_out/_tmp/javap_blueprint.txt
@@ -0,0 +1,1465 @@
+==================== com.ogaba.sa_combat.client.tooltip.BlueprintClientTooltipComponent ====================
+Compiled from "BlueprintClientTooltipComponent.java"
+public class com.ogaba.sa_combat.client.tooltip.BlueprintClientTooltipComponent implements net.minecraft.client.gui.screens.inventory.tooltip.ClientTooltipComponent {
+ private static final net.minecraft.resources.ResourceLocation BLUEPRINT_BG;
+
+ private static final int WIDTH;
+
+ private static final int HEIGHT;
+
+ private static final int PADDING;
+
+ private static final int BG_TEXTURE_W;
+
+ private static final int BG_TEXTURE_H;
+
+ private static final int BG_RENDER_W;
+
+ private static final int BG_RENDER_H;
+
+ private final com.ogaba.sa_combat.item.BlueprintTooltipComponent data;
+
+ private net.minecraft.world.item.ItemStack cachedResult;
+
+ private boolean resolved;
+
+ public com.ogaba.sa_combat.client.tooltip.BlueprintClientTooltipComponent(com.ogaba.sa_combat.item.BlueprintTooltipComponent);
+ Code:
+ 0: aload_0
+ 1: invokespecial #47 // Method java/lang/Object."":()V
+ 4: aload_0
+ 5: getstatic #52 // Field net/minecraft/world/item/ItemStack.f_41583_:Lnet/minecraft/world/item/ItemStack;
+ 8: putfield #54 // Field cachedResult:Lnet/minecraft/world/item/ItemStack;
+ 11: aload_0
+ 12: aload_1
+ 13: putfield #56 // Field data:Lcom/ogaba/sa_combat/item/BlueprintTooltipComponent;
+ 16: return
+
+ public int m_142103_();
+ Code:
+ 0: bipush 88
+ 2: ireturn
+
+ public int m_142069_(net.minecraft.client.gui.Font);
+ Code:
+ 0: sipush 250
+ 3: ireturn
+
+ public void m_183452_(net.minecraft.client.gui.Font, int, int, net.minecraft.client.gui.GuiGraphics);
+ Code:
+ 0: aload_0
+ 1: invokevirtual #70 // Method resolveResultStack:()Lnet/minecraft/world/item/ItemStack;
+ 4: astore 5
+ 6: iload_2
+ 7: iconst_4
+ 8: iadd
+ 9: istore 6
+ 11: iload_3
+ 12: bipush 8
+ 14: iadd
+ 15: istore 7
+ 17: aload_0
+ 18: aload 4
+ 20: iload 6
+ 22: iload 7
+ 24: invokevirtual #74 // Method renderBlueprintBackground:(Lnet/minecraft/client/gui/GuiGraphics;II)V
+ 27: aload_0
+ 28: aload 4
+ 30: aload 5
+ 32: iload 6
+ 34: iload 7
+ 36: invokevirtual #78 // Method renderResultItem:(Lnet/minecraft/client/gui/GuiGraphics;Lnet/minecraft/world/item/ItemStack;II)V
+ 39: iload 6
+ 41: bipush 82
+ 43: iadd
+ 44: bipush 9
+ 46: iadd
+ 47: istore 8
+ 49: iload_3
+ 50: bipush 10
+ 52: iadd
+ 53: istore 9
+ 55: sipush 250
+ 58: iload 8
+ 60: iload_2
+ 61: isub
+ 62: isub
+ 63: iconst_4
+ 64: isub
+ 65: iconst_2
+ 66: isub
+ 67: istore 10
+ 69: aload 5
+ 71: invokevirtual #82 // Method net/minecraft/world/item/ItemStack.m_41619_:()Z
+ 74: ifeq 125
+ 77: aload 4
+ 79: aload_1
+ 80: aload_0
+ 81: ldc #84 // String tooltip.sa_combat.blueprint.unknown
+ 83: ldc #86 // String Unknown Unlock
+ 85: invokevirtual #90 // Method tr:(Ljava/lang/String;Ljava/lang/String;)Lnet/minecraft/network/chat/Component;
+ 88: iload 8
+ 90: iload 9
+ 92: ldc #91 // int 15724527
+ 94: iconst_0
+ 95: invokevirtual #97 // Method net/minecraft/client/gui/GuiGraphics.m_280614_:(Lnet/minecraft/client/gui/Font;Lnet/minecraft/network/chat/Component;IIIZ)I
+ 98: pop
+ 99: aload 4
+ 101: aload_1
+ 102: aload_0
+ 103: ldc #99 // String tooltip.sa_combat.blueprint.check_data
+ 105: ldc #101 // String Check blueprint data
+ 107: invokevirtual #90 // Method tr:(Ljava/lang/String;Ljava/lang/String;)Lnet/minecraft/network/chat/Component;
+ 110: iload 8
+ 112: iload 9
+ 114: bipush 12
+ 116: iadd
+ 117: ldc #102 // int 9211020
+ 119: iconst_0
+ 120: invokevirtual #97 // Method net/minecraft/client/gui/GuiGraphics.m_280614_:(Lnet/minecraft/client/gui/Font;Lnet/minecraft/network/chat/Component;IIIZ)I
+ 123: pop
+ 124: return
+ 125: aload_0
+ 126: getfield #56 // Field data:Lcom/ogaba/sa_combat/item/BlueprintTooltipComponent;
+ 129: invokevirtual #110 // Method com/ogaba/sa_combat/item/BlueprintTooltipComponent.rarity:()Ljava/lang/String;
+ 132: invokestatic #114 // Method prettyRarity:(Ljava/lang/String;)Ljava/lang/String;
+ 135: astore 11
+ 137: aload 11
+ 139: invokevirtual #119 // Method java/lang/String.isBlank:()Z
+ 142: ifeq 149
+ 145: iconst_0
+ 146: goto 157
+ 149: aload_1
+ 150: aload 11
+ 152: invokevirtual #123 // Method net/minecraft/client/gui/Font.m_92895_:(Ljava/lang/String;)I
+ 155: iconst_4
+ 156: iadd
+ 157: istore 12
+ 159: aload_1
+ 160: aload 5
+ 162: invokevirtual #127 // Method net/minecraft/world/item/ItemStack.m_41786_:()Lnet/minecraft/network/chat/Component;
+ 165: invokeinterface #132, 1 // InterfaceMethod net/minecraft/network/chat/Component.getString:()Ljava/lang/String;
+ 170: bipush 32
+ 172: iload 10
+ 174: iload 12
+ 176: isub
+ 177: invokestatic #138 // Method java/lang/Math.max:(II)I
+ 180: invokestatic #142 // Method trimToWidth:(Lnet/minecraft/client/gui/Font;Ljava/lang/String;I)Ljava/lang/String;
+ 183: astore 13
+ 185: aload 4
+ 187: aload_1
+ 188: aload 13
+ 190: iload 8
+ 192: iload 9
+ 194: ldc #143 // int 16777215
+ 196: iconst_0
+ 197: invokevirtual #147 // Method net/minecraft/client/gui/GuiGraphics.m_280056_:(Lnet/minecraft/client/gui/Font;Ljava/lang/String;IIIZ)I
+ 200: pop
+ 201: aload 11
+ 203: invokevirtual #119 // Method java/lang/String.isBlank:()Z
+ 206: ifne 243
+ 209: aload 4
+ 211: aload_1
+ 212: aload 11
+ 214: iload 8
+ 216: iload 10
+ 218: iadd
+ 219: aload_1
+ 220: aload 11
+ 222: invokevirtual #123 // Method net/minecraft/client/gui/Font.m_92895_:(Ljava/lang/String;)I
+ 225: isub
+ 226: iload 9
+ 228: aload_0
+ 229: getfield #56 // Field data:Lcom/ogaba/sa_combat/item/BlueprintTooltipComponent;
+ 232: invokevirtual #110 // Method com/ogaba/sa_combat/item/BlueprintTooltipComponent.rarity:()Ljava/lang/String;
+ 235: invokestatic #150 // Method rarityColor:(Ljava/lang/String;)I
+ 238: iconst_0
+ 239: invokevirtual #147 // Method net/minecraft/client/gui/GuiGraphics.m_280056_:(Lnet/minecraft/client/gui/Font;Ljava/lang/String;IIIZ)I
+ 242: pop
+ 243: iinc 9, 12
+ 246: aload 4
+ 248: aload_1
+ 249: aload_0
+ 250: ldc #152 // String tooltip.sa_combat.blueprint.unlock
+ 252: ldc #154 // String Unlock
+ 254: invokevirtual #90 // Method tr:(Ljava/lang/String;Ljava/lang/String;)Lnet/minecraft/network/chat/Component;
+ 257: iload 8
+ 259: iload 9
+ 261: ldc #155 // int 7788287
+ 263: iconst_0
+ 264: invokevirtual #97 // Method net/minecraft/client/gui/GuiGraphics.m_280614_:(Lnet/minecraft/client/gui/Font;Lnet/minecraft/network/chat/Component;IIIZ)I
+ 267: pop
+ 268: iinc 9, 12
+ 271: aload 5
+ 273: invokevirtual #159 // Method net/minecraft/world/item/ItemStack.m_41720_:()Lnet/minecraft/world/item/Item;
+ 276: instanceof #161 // class com/ogaba/sa_combat/combat/weapon/BaseMeleeWeapon
+ 279: ifeq 318
+ 282: aload_0
+ 283: aload_1
+ 284: aload 4
+ 286: aload 5
+ 288: iload 8
+ 290: iload 9
+ 292: iload 10
+ 294: invokevirtual #165 // Method drawCompactWeaponStats:(Lnet/minecraft/client/gui/Font;Lnet/minecraft/client/gui/GuiGraphics;Lnet/minecraft/world/item/ItemStack;III)V
+ 297: iinc 9, 13
+ 300: aload_0
+ 301: aload_1
+ 302: aload 4
+ 304: aload 5
+ 306: iload 8
+ 308: iload 9
+ 310: iload 10
+ 312: invokevirtual #168 // Method drawCompactAbilitySummary:(Lnet/minecraft/client/gui/Font;Lnet/minecraft/client/gui/GuiGraphics;Lnet/minecraft/world/item/ItemStack;III)V
+ 315: goto 340
+ 318: aload 4
+ 320: aload_1
+ 321: aload_0
+ 322: ldc #170 // String tooltip.sa_combat.blueprint.recipe_unlock
+ 324: ldc #172 // String Recipe Unlock
+ 326: invokevirtual #90 // Method tr:(Ljava/lang/String;Ljava/lang/String;)Lnet/minecraft/network/chat/Component;
+ 329: iload 8
+ 331: iload 9
+ 333: ldc #173 // int 12115967
+ 335: iconst_0
+ 336: invokevirtual #97 // Method net/minecraft/client/gui/GuiGraphics.m_280614_:(Lnet/minecraft/client/gui/Font;Lnet/minecraft/network/chat/Component;IIIZ)I
+ 339: pop
+ 340: return
+
+ private net.minecraft.world.item.ItemStack resolveResultStack();
+ Code:
+ 0: aload_0
+ 1: getfield #188 // Field resolved:Z
+ 4: ifeq 12
+ 7: aload_0
+ 8: getfield #54 // Field cachedResult:Lnet/minecraft/world/item/ItemStack;
+ 11: areturn
+ 12: aload_0
+ 13: iconst_1
+ 14: putfield #188 // Field resolved:Z
+ 17: aload_0
+ 18: aload_0
+ 19: getfield #56 // Field data:Lcom/ogaba/sa_combat/item/BlueprintTooltipComponent;
+ 22: invokestatic #194 // Method com/ogaba/sa_combat/client/tooltip/BlueprintPreviewResolverFromData.resolve:(Lcom/ogaba/sa_combat/item/BlueprintTooltipComponent;)Lnet/minecraft/world/item/ItemStack;
+ 25: putfield #54 // Field cachedResult:Lnet/minecraft/world/item/ItemStack;
+ 28: aload_0
+ 29: getfield #54 // Field cachedResult:Lnet/minecraft/world/item/ItemStack;
+ 32: areturn
+
+ private void renderBlueprintBackground(net.minecraft.client.gui.GuiGraphics, int, int);
+ Code:
+ 0: ldc #195 // float 1.28125f
+ 2: fstore 4
+ 4: ldc #196 // float 1.2745098f
+ 6: fstore 5
+ 8: aload_1
+ 9: invokevirtual #200 // Method net/minecraft/client/gui/GuiGraphics.m_280168_:()Lcom/mojang/blaze3d/vertex/PoseStack;
+ 12: invokevirtual #205 // Method com/mojang/blaze3d/vertex/PoseStack.m_85836_:()V
+ 15: aload_1
+ 16: invokevirtual #200 // Method net/minecraft/client/gui/GuiGraphics.m_280168_:()Lcom/mojang/blaze3d/vertex/PoseStack;
+ 19: iload_2
+ 20: i2f
+ 21: iload_3
+ 22: i2f
+ 23: fconst_0
+ 24: invokevirtual #209 // Method com/mojang/blaze3d/vertex/PoseStack.m_252880_:(FFF)V
+ 27: aload_1
+ 28: invokevirtual #200 // Method net/minecraft/client/gui/GuiGraphics.m_280168_:()Lcom/mojang/blaze3d/vertex/PoseStack;
+ 31: fload 4
+ 33: fload 5
+ 35: fconst_1
+ 36: invokevirtual #212 // Method com/mojang/blaze3d/vertex/PoseStack.m_85841_:(FFF)V
+ 39: aload_1
+ 40: getstatic #214 // Field BLUEPRINT_BG:Lnet/minecraft/resources/ResourceLocation;
+ 43: iconst_0
+ 44: iconst_0
+ 45: fconst_0
+ 46: fconst_0
+ 47: bipush 64
+ 49: bipush 51
+ 51: bipush 64
+ 53: bipush 51
+ 55: invokevirtual #218 // Method net/minecraft/client/gui/GuiGraphics.m_280163_:(Lnet/minecraft/resources/ResourceLocation;IIFFIIII)V
+ 58: aload_1
+ 59: invokevirtual #200 // Method net/minecraft/client/gui/GuiGraphics.m_280168_:()Lcom/mojang/blaze3d/vertex/PoseStack;
+ 62: invokevirtual #221 // Method com/mojang/blaze3d/vertex/PoseStack.m_85849_:()V
+ 65: return
+
+ private void renderResultItem(net.minecraft.client.gui.GuiGraphics, net.minecraft.world.item.ItemStack, int, int);
+ Code:
+ 0: aload_2
+ 1: invokevirtual #82 // Method net/minecraft/world/item/ItemStack.m_41619_:()Z
+ 4: ifeq 8
+ 7: return
+ 8: ldc #225 // float 2.85f
+ 10: fstore 5
+ 12: iload_3
+ 13: i2f
+ 14: ldc #226 // float 41.0f
+ 16: fadd
+ 17: ldc #227 // float 22.8f
+ 19: fsub
+ 20: invokestatic #231 // Method java/lang/Math.round:(F)I
+ 23: iconst_2
+ 24: iadd
+ 25: istore 6
+ 27: iload 4
+ 29: i2f
+ 30: ldc #232 // float 32.5f
+ 32: fadd
+ 33: ldc #227 // float 22.8f
+ 35: fsub
+ 36: invokestatic #231 // Method java/lang/Math.round:(F)I
+ 39: iconst_2
+ 40: iadd
+ 41: istore 7
+ 43: aload_1
+ 44: invokevirtual #200 // Method net/minecraft/client/gui/GuiGraphics.m_280168_:()Lcom/mojang/blaze3d/vertex/PoseStack;
+ 47: invokevirtual #205 // Method com/mojang/blaze3d/vertex/PoseStack.m_85836_:()V
+ 50: aload_1
+ 51: invokevirtual #200 // Method net/minecraft/client/gui/GuiGraphics.m_280168_:()Lcom/mojang/blaze3d/vertex/PoseStack;
+ 54: iload 6
+ 56: i2f
+ 57: iload 7
+ 59: i2f
+ 60: ldc #233 // float 120.0f
+ 62: invokevirtual #209 // Method com/mojang/blaze3d/vertex/PoseStack.m_252880_:(FFF)V
+ 65: aload_1
+ 66: invokevirtual #200 // Method net/minecraft/client/gui/GuiGraphics.m_280168_:()Lcom/mojang/blaze3d/vertex/PoseStack;
+ 69: ldc #225 // float 2.85f
+ 71: ldc #225 // float 2.85f
+ 73: fconst_1
+ 74: invokevirtual #212 // Method com/mojang/blaze3d/vertex/PoseStack.m_85841_:(FFF)V
+ 77: aload_1
+ 78: aload_2
+ 79: iconst_0
+ 80: iconst_0
+ 81: invokevirtual #237 // Method net/minecraft/client/gui/GuiGraphics.m_280480_:(Lnet/minecraft/world/item/ItemStack;II)V
+ 84: aload_1
+ 85: invokevirtual #200 // Method net/minecraft/client/gui/GuiGraphics.m_280168_:()Lcom/mojang/blaze3d/vertex/PoseStack;
+ 88: invokevirtual #221 // Method com/mojang/blaze3d/vertex/PoseStack.m_85849_:()V
+ 91: return
+
+ private void drawCompactWeaponStats(net.minecraft.client.gui.Font, net.minecraft.client.gui.GuiGraphics, net.minecraft.world.item.ItemStack, int, int, int);
+ Code:
+ 0: aload_0
+ 1: aload_3
+ 2: getstatic #246 // Field net/minecraft/world/entity/ai/attributes/Attributes.f_22281_:Lnet/minecraft/world/entity/ai/attributes/Attribute;
+ 5: invokevirtual #250 // Method sumAttribute:(Lnet/minecraft/world/item/ItemStack;Lnet/minecraft/world/entity/ai/attributes/Attribute;)D
+ 8: dstore 7
+ 10: ldc2_w #251 // double 4.0d
+ 13: aload_0
+ 14: aload_3
+ 15: getstatic #255 // Field net/minecraft/world/entity/ai/attributes/Attributes.f_22283_:Lnet/minecraft/world/entity/ai/attributes/Attribute;
+ 18: invokevirtual #250 // Method sumAttribute:(Lnet/minecraft/world/item/ItemStack;Lnet/minecraft/world/entity/ai/attributes/Attribute;)D
+ 21: dadd
+ 22: dstore 9
+ 24: ldc2_w #256 // double 2.5d
+ 27: aload_0
+ 28: aload_3
+ 29: invokevirtual #261 // Method sumCombatRangeAttribute:(Lnet/minecraft/world/item/ItemStack;)D
+ 32: dadd
+ 33: dstore 11
+ 35: iload 4
+ 37: istore 13
+ 39: aload_0
+ 40: aload_1
+ 41: aload_2
+ 42: ldc_w #263 // String �˺�
+ 45: dload 7
+ 47: invokestatic #267 // Method formatNumber:(D)Ljava/lang/String;
+ 50: iload 13
+ 52: iload 5
+ 54: ldc_w #268 // int -2598310
+ 57: invokevirtual #272 // Method drawCompactStat:(Lnet/minecraft/client/gui/Font;Lnet/minecraft/client/gui/GuiGraphics;Ljava/lang/String;Ljava/lang/String;III)I
+ 60: istore 13
+ 62: aload_0
+ 63: aload_1
+ 64: aload_2
+ 65: ldc_w #274 // String ����
+ 68: dload 9
+ 70: invokestatic #267 // Method formatNumber:(D)Ljava/lang/String;
+ 73: iload 13
+ 75: bipush 8
+ 77: iadd
+ 78: iload 5
+ 80: sipush -14249
+ 83: invokevirtual #272 // Method drawCompactStat:(Lnet/minecraft/client/gui/Font;Lnet/minecraft/client/gui/GuiGraphics;Ljava/lang/String;Ljava/lang/String;III)I
+ 86: istore 13
+ 88: aload_0
+ 89: aload_1
+ 90: aload_2
+ 91: ldc_w #276 // String ���
+ 94: dload 11
+ 96: invokestatic #267 // Method formatNumber:(D)Ljava/lang/String;
+ 99: iload 13
+ 101: bipush 8
+ 103: iadd
+ 104: iload 5
+ 106: ldc_w #277 // int -10106881
+ 109: invokevirtual #272 // Method drawCompactStat:(Lnet/minecraft/client/gui/Font;Lnet/minecraft/client/gui/GuiGraphics;Ljava/lang/String;Ljava/lang/String;III)I
+ 112: pop
+ 113: return
+
+ private int drawCompactStat(net.minecraft.client.gui.Font, net.minecraft.client.gui.GuiGraphics, java.lang.String, java.lang.String, int, int, int);
+ Code:
+ 0: aload_2
+ 1: aload_1
+ 2: aload_3
+ 3: iload 5
+ 5: iload 6
+ 7: ldc_w #285 // int 11513775
+ 10: iconst_0
+ 11: invokevirtual #147 // Method net/minecraft/client/gui/GuiGraphics.m_280056_:(Lnet/minecraft/client/gui/Font;Ljava/lang/String;IIIZ)I
+ 14: pop
+ 15: iload 5
+ 17: aload_1
+ 18: aload_3
+ 19: invokevirtual #123 // Method net/minecraft/client/gui/Font.m_92895_:(Ljava/lang/String;)I
+ 22: iadd
+ 23: iconst_3
+ 24: iadd
+ 25: istore 8
+ 27: aload_2
+ 28: aload_1
+ 29: aload 4
+ 31: iload 8
+ 33: iload 6
+ 35: ldc #143 // int 16777215
+ 37: iconst_0
+ 38: invokevirtual #147 // Method net/minecraft/client/gui/GuiGraphics.m_280056_:(Lnet/minecraft/client/gui/Font;Ljava/lang/String;IIIZ)I
+ 41: pop
+ 42: iload 8
+ 44: aload_1
+ 45: aload 4
+ 47: invokevirtual #123 // Method net/minecraft/client/gui/Font.m_92895_:(Ljava/lang/String;)I
+ 50: iadd
+ 51: istore 9
+ 53: aload_2
+ 54: iload 5
+ 56: iload 6
+ 58: bipush 9
+ 60: iadd
+ 61: iload 9
+ 63: iload 6
+ 65: bipush 10
+ 67: iadd
+ 68: iload 7
+ 70: invokevirtual #289 // Method net/minecraft/client/gui/GuiGraphics.m_280509_:(IIIII)V
+ 73: iload 9
+ 75: ireturn
+
+ private void drawCompactAbilitySummary(net.minecraft.client.gui.Font, net.minecraft.client.gui.GuiGraphics, net.minecraft.world.item.ItemStack, int, int, int);
+ Code:
+ 0: aload_3
+ 1: invokevirtual #159 // Method net/minecraft/world/item/ItemStack.m_41720_:()Lnet/minecraft/world/item/Item;
+ 4: astore 8
+ 6: aload 8
+ 8: instanceof #161 // class com/ogaba/sa_combat/combat/weapon/BaseMeleeWeapon
+ 11: ifeq 29
+ 14: aload 8
+ 16: checkcast #161 // class com/ogaba/sa_combat/combat/weapon/BaseMeleeWeapon
+ 19: astore 7
+ 21: aload 7
+ 23: invokevirtual #298 // Method com/ogaba/sa_combat/combat/weapon/BaseMeleeWeapon.getDefinition:()Lcom/ogaba/sa_combat/combat/weapon/WeaponDefinition;
+ 26: ifnonnull 30
+ 29: return
+ 30: aload 7
+ 32: invokevirtual #298 // Method com/ogaba/sa_combat/combat/weapon/BaseMeleeWeapon.getDefinition:()Lcom/ogaba/sa_combat/combat/weapon/WeaponDefinition;
+ 35: invokevirtual #304 // Method com/ogaba/sa_combat/combat/weapon/WeaponDefinition.abilities:()Ljava/util/List;
+ 38: astore 8
+ 40: aload 8
+ 42: invokeinterface #309, 1 // InterfaceMethod java/util/List.isEmpty:()Z
+ 47: ifeq 75
+ 50: aload_2
+ 51: aload_1
+ 52: aload_0
+ 53: ldc_w #311 // String tooltip.sa_combat.blueprint.no_abilities
+ 56: ldc_w #313 // String No abilities
+ 59: invokevirtual #90 // Method tr:(Ljava/lang/String;Ljava/lang/String;)Lnet/minecraft/network/chat/Component;
+ 62: iload 4
+ 64: iload 5
+ 66: ldc_w #314 // int 7303023
+ 69: iconst_0
+ 70: invokevirtual #97 // Method net/minecraft/client/gui/GuiGraphics.m_280614_:(Lnet/minecraft/client/gui/Font;Lnet/minecraft/network/chat/Component;IIIZ)I
+ 73: pop
+ 74: return
+ 75: aload_2
+ 76: aload_1
+ 77: aload_0
+ 78: ldc_w #316 // String tooltip.sa_combat.blueprint.on_hit
+ 81: ldc_w #318 // String On Hit
+ 84: invokevirtual #90 // Method tr:(Ljava/lang/String;Ljava/lang/String;)Lnet/minecraft/network/chat/Component;
+ 87: iload 4
+ 89: iload 5
+ 91: ldc_w #319 // int 14271867
+ 94: iconst_0
+ 95: invokevirtual #97 // Method net/minecraft/client/gui/GuiGraphics.m_280614_:(Lnet/minecraft/client/gui/Font;Lnet/minecraft/network/chat/Component;IIIZ)I
+ 98: pop
+ 99: iload 5
+ 101: bipush 11
+ 103: iadd
+ 104: istore 9
+ 106: iconst_2
+ 107: aload 8
+ 109: invokeinterface #322, 1 // InterfaceMethod java/util/List.size:()I
+ 114: invokestatic #325 // Method java/lang/Math.min:(II)I
+ 117: istore 10
+ 119: iconst_0
+ 120: istore 11
+ 122: iload 11
+ 124: iload 10
+ 126: if_icmpge 165
+ 129: aload_0
+ 130: aload_1
+ 131: aload_2
+ 132: aload 8
+ 134: iload 11
+ 136: invokeinterface #329, 2 // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
+ 141: checkcast #331 // class com/ogaba/sa_combat/combat/system/AbilityInstance
+ 144: iload 4
+ 146: iload 9
+ 148: iload 11
+ 150: bipush 10
+ 152: imul
+ 153: iadd
+ 154: iload 6
+ 156: invokevirtual #335 // Method drawAbilityLine:(Lnet/minecraft/client/gui/Font;Lnet/minecraft/client/gui/GuiGraphics;Lcom/ogaba/sa_combat/combat/system/AbilityInstance;III)V
+ 159: iinc 11, 1
+ 162: goto 122
+ 165: aload 8
+ 167: invokeinterface #322, 1 // InterfaceMethod java/util/List.size:()I
+ 172: iload 10
+ 174: if_icmple 228
+ 177: aload 8
+ 179: invokeinterface #322, 1 // InterfaceMethod java/util/List.size:()I
+ 184: iload 10
+ 186: isub
+ 187: invokedynamic #347, 0 // InvokeDynamic #0:makeConcatWithConstants:(I)Ljava/lang/String;
+ 192: astore 11
+ 194: aload_2
+ 195: aload_1
+ 196: aload 11
+ 198: iload 4
+ 200: iload 6
+ 202: iadd
+ 203: aload_1
+ 204: aload 11
+ 206: invokevirtual #123 // Method net/minecraft/client/gui/Font.m_92895_:(Ljava/lang/String;)I
+ 209: isub
+ 210: iload 9
+ 212: iload 10
+ 214: iconst_1
+ 215: isub
+ 216: bipush 10
+ 218: imul
+ 219: iadd
+ 220: ldc_w #348 // int 7829367
+ 223: iconst_0
+ 224: invokevirtual #147 // Method net/minecraft/client/gui/GuiGraphics.m_280056_:(Lnet/minecraft/client/gui/Font;Ljava/lang/String;IIIZ)I
+ 227: pop
+ 228: return
+
+ private void drawAbilityLine(net.minecraft.client.gui.Font, net.minecraft.client.gui.GuiGraphics, com.ogaba.sa_combat.combat.system.AbilityInstance, int, int, int);
+ Code:
+ 0: aload_3
+ 1: invokevirtual #359 // Method com/ogaba/sa_combat/combat/system/AbilityInstance.type:()Lcom/ogaba/sa_combat/combat/system/AbilityType;
+ 4: invokestatic #365 // Method com/ogaba/sa_combat/combat/system/SACombatTextIcons.abilityIcon:(Lcom/ogaba/sa_combat/combat/system/AbilityType;)Lnet/minecraft/network/chat/MutableComponent;
+ 7: astore 7
+ 9: aload_0
+ 10: aload_3
+ 11: invokevirtual #369 // Method abilityDisplayName:(Lcom/ogaba/sa_combat/combat/system/AbilityInstance;)Ljava/lang/String;
+ 14: aload_3
+ 15: invokevirtual #372 // Method com/ogaba/sa_combat/combat/system/AbilityInstance.tier:()I
+ 18: invokestatic #377 // Method com/ogaba/sa_combat/util/TextFormatUtil.tierRoman:(I)Ljava/lang/String;
+ 21: invokedynamic #382, 0 // InvokeDynamic #1:makeConcatWithConstants:(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+ 26: astore 8
+ 28: aload_1
+ 29: aload 8
+ 31: bipush 20
+ 33: iload 6
+ 35: bipush 14
+ 37: isub
+ 38: invokestatic #138 // Method java/lang/Math.max:(II)I
+ 41: invokestatic #142 // Method trimToWidth:(Lnet/minecraft/client/gui/Font;Ljava/lang/String;I)Ljava/lang/String;
+ 44: astore 9
+ 46: aload_2
+ 47: aload_1
+ 48: aload 7
+ 50: iload 4
+ 52: iload 5
+ 54: iconst_m1
+ 55: iconst_0
+ 56: invokevirtual #97 // Method net/minecraft/client/gui/GuiGraphics.m_280614_:(Lnet/minecraft/client/gui/Font;Lnet/minecraft/network/chat/Component;IIIZ)I
+ 59: pop
+ 60: aload_2
+ 61: aload_1
+ 62: aload 9
+ 64: iload 4
+ 66: bipush 13
+ 68: iadd
+ 69: iload 5
+ 71: aload_0
+ 72: aload_3
+ 73: invokevirtual #386 // Method abilityColor:(Lcom/ogaba/sa_combat/combat/system/AbilityInstance;)I
+ 76: iconst_0
+ 77: invokevirtual #147 // Method net/minecraft/client/gui/GuiGraphics.m_280056_:(Lnet/minecraft/client/gui/Font;Ljava/lang/String;IIIZ)I
+ 80: pop
+ 81: return
+
+ private net.minecraft.network.chat.Component tr(java.lang.String, java.lang.String);
+ Code:
+ 0: aload_1
+ 1: invokestatic #396 // InterfaceMethod net/minecraft/network/chat/Component.m_237115_:(Ljava/lang/String;)Lnet/minecraft/network/chat/MutableComponent;
+ 4: astore_3
+ 5: aload_3
+ 6: invokeinterface #132, 1 // InterfaceMethod net/minecraft/network/chat/Component.getString:()Ljava/lang/String;
+ 11: aload_1
+ 12: invokevirtual #400 // Method java/lang/String.equals:(Ljava/lang/Object;)Z
+ 15: ifeq 25
+ 18: aload_2
+ 19: invokestatic #403 // InterfaceMethod net/minecraft/network/chat/Component.m_237113_:(Ljava/lang/String;)Lnet/minecraft/network/chat/MutableComponent;
+ 22: goto 26
+ 25: aload_3
+ 26: areturn
+
+ private java.lang.String abilityDisplayName(com.ogaba.sa_combat.combat.system.AbilityInstance);
+ Code:
+ 0: getstatic #410 // Field com/ogaba/sa_combat/client/tooltip/BlueprintClientTooltipComponent$1.$SwitchMap$com$ogaba$sa_combat$combat$system$AbilityType:[I
+ 3: aload_1
+ 4: invokevirtual #359 // Method com/ogaba/sa_combat/combat/system/AbilityInstance.type:()Lcom/ogaba/sa_combat/combat/system/AbilityType;
+ 7: invokevirtual #415 // Method com/ogaba/sa_combat/combat/system/AbilityType.ordinal:()I
+ 10: iaload
+ 11: tableswitch { // 1 to 4
+
+ 1: 48
+
+ 2: 54
+
+ 3: 60
+
+ 4: 66
+ default: 40
+ }
+ 40: new #417 // class java/lang/IncompatibleClassChangeError
+ 43: dup
+ 44: invokespecial #418 // Method java/lang/IncompatibleClassChangeError."":()V
+ 47: athrow
+ 48: ldc_w #420 // String ��Ѫ
+ 51: goto 69
+ 54: ldc_w #422 // String ���
+ 57: goto 69
+ 60: ldc_w #424 // String ���
+ 63: goto 69
+ 66: ldc_w #426 // String ����
+ 69: areturn
+
+ private int abilityColor(com.ogaba.sa_combat.combat.system.AbilityInstance);
+ Code:
+ 0: getstatic #410 // Field com/ogaba/sa_combat/client/tooltip/BlueprintClientTooltipComponent$1.$SwitchMap$com$ogaba$sa_combat$combat$system$AbilityType:[I
+ 3: aload_1
+ 4: invokevirtual #359 // Method com/ogaba/sa_combat/combat/system/AbilityInstance.type:()Lcom/ogaba/sa_combat/combat/system/AbilityType;
+ 7: invokevirtual #415 // Method com/ogaba/sa_combat/combat/system/AbilityType.ordinal:()I
+ 10: iaload
+ 11: tableswitch { // 1 to 4
+
+ 1: 48
+
+ 2: 54
+
+ 3: 60
+
+ 4: 66
+ default: 40
+ }
+ 40: new #417 // class java/lang/IncompatibleClassChangeError
+ 43: dup
+ 44: invokespecial #418 // Method java/lang/IncompatibleClassChangeError."":()V
+ 47: athrow
+ 48: ldc_w #428 // int -42406
+ 51: goto 69
+ 54: ldc_w #429 // int -11147009
+ 57: goto 69
+ 60: sipush -10934
+ 63: goto 69
+ 66: ldc_w #430 // int -5011201
+ 69: ireturn
+
+ private double sumCombatRangeAttribute(net.minecraft.world.item.ItemStack);
+ Code:
+ 0: getstatic #436 // Field net/minecraftforge/registries/ForgeRegistries.ATTRIBUTES:Lnet/minecraftforge/registries/IForgeRegistry;
+ 3: new #438 // class net/minecraft/resources/ResourceLocation
+ 6: dup
+ 7: ldc_w #440 // String bettercombat
+ 10: ldc_w #442 // String attack_range
+ 13: invokespecial #445 // Method net/minecraft/resources/ResourceLocation."":(Ljava/lang/String;Ljava/lang/String;)V
+ 16: invokeinterface #451, 2 // InterfaceMethod net/minecraftforge/registries/IForgeRegistry.getValue:(Lnet/minecraft/resources/ResourceLocation;)Ljava/lang/Object;
+ 21: checkcast #453 // class net/minecraft/world/entity/ai/attributes/Attribute
+ 24: astore_2
+ 25: aload_2
+ 26: ifnull 36
+ 29: aload_0
+ 30: aload_1
+ 31: aload_2
+ 32: invokevirtual #250 // Method sumAttribute:(Lnet/minecraft/world/item/ItemStack;Lnet/minecraft/world/entity/ai/attributes/Attribute;)D
+ 35: dreturn
+ 36: aload_0
+ 37: aload_1
+ 38: getstatic #459 // Field net/minecraftforge/common/ForgeMod.ENTITY_REACH:Lnet/minecraftforge/registries/RegistryObject;
+ 41: invokevirtual #464 // Method net/minecraftforge/registries/RegistryObject.get:()Ljava/lang/Object;
+ 44: checkcast #453 // class net/minecraft/world/entity/ai/attributes/Attribute
+ 47: invokevirtual #250 // Method sumAttribute:(Lnet/minecraft/world/item/ItemStack;Lnet/minecraft/world/entity/ai/attributes/Attribute;)D
+ 50: dreturn
+
+ private double sumAttribute(net.minecraft.world.item.ItemStack, net.minecraft.world.entity.ai.attributes.Attribute);
+ Code:
+ 0: aload_1
+ 1: getstatic #471 // Field net/minecraft/world/entity/EquipmentSlot.MAINHAND:Lnet/minecraft/world/entity/EquipmentSlot;
+ 4: invokevirtual #475 // Method net/minecraft/world/item/ItemStack.m_41638_:(Lnet/minecraft/world/entity/EquipmentSlot;)Lcom/google/common/collect/Multimap;
+ 7: aload_2
+ 8: invokeinterface #480, 2 // InterfaceMethod com/google/common/collect/Multimap.get:(Ljava/lang/Object;)Ljava/util/Collection;
+ 13: invokeinterface #486, 1 // InterfaceMethod java/util/Collection.stream:()Ljava/util/stream/Stream;
+ 18: invokedynamic #504, 0 // InvokeDynamic #2:test:()Ljava/util/function/Predicate;
+ 23: invokeinterface #510, 2 // InterfaceMethod java/util/stream/Stream.filter:(Ljava/util/function/Predicate;)Ljava/util/stream/Stream;
+ 28: invokedynamic #523, 0 // InvokeDynamic #3:applyAsDouble:()Ljava/util/function/ToDoubleFunction;
+ 33: invokeinterface #527, 2 // InterfaceMethod java/util/stream/Stream.mapToDouble:(Ljava/util/function/ToDoubleFunction;)Ljava/util/stream/DoubleStream;
+ 38: invokeinterface #532, 1 // InterfaceMethod java/util/stream/DoubleStream.sum:()D
+ 43: dreturn
+
+ private static java.lang.String prettyRarity(java.lang.String);
+ Code:
+ 0: aload_0
+ 1: ifnull 11
+ 4: aload_0
+ 5: invokevirtual #119 // Method java/lang/String.isBlank:()Z
+ 8: ifeq 15
+ 11: ldc_w #535 // String
+ 14: areturn
+ 15: aload_0
+ 16: bipush 95
+ 18: bipush 32
+ 20: invokevirtual #539 // Method java/lang/String.replace:(CC)Ljava/lang/String;
+ 23: invokevirtual #542 // Method java/lang/String.trim:()Ljava/lang/String;
+ 26: getstatic #548 // Field java/util/Locale.ROOT:Ljava/util/Locale;
+ 29: invokevirtual #552 // Method java/lang/String.toLowerCase:(Ljava/util/Locale;)Ljava/lang/String;
+ 32: astore_1
+ 33: new #554 // class java/lang/StringBuilder
+ 36: dup
+ 37: invokespecial #555 // Method java/lang/StringBuilder."":()V
+ 40: astore_2
+ 41: aload_1
+ 42: ldc_w #557 // String
+ 45: invokevirtual #561 // Method java/lang/String.split:(Ljava/lang/String;)[Ljava/lang/String;
+ 48: astore_3
+ 49: aload_3
+ 50: arraylength
+ 51: istore 4
+ 53: iconst_0
+ 54: istore 5
+ 56: iload 5
+ 58: iload 4
+ 60: if_icmpge 123
+ 63: aload_3
+ 64: iload 5
+ 66: aaload
+ 67: astore 6
+ 69: aload 6
+ 71: invokevirtual #119 // Method java/lang/String.isBlank:()Z
+ 74: ifeq 80
+ 77: goto 117
+ 80: aload_2
+ 81: invokevirtual #566 // Method java/lang/StringBuilder.length:()I
+ 84: ifle 94
+ 87: aload_2
+ 88: bipush 32
+ 90: invokevirtual #570 // Method java/lang/StringBuilder.append:(C)Ljava/lang/StringBuilder;
+ 93: pop
+ 94: aload_2
+ 95: aload 6
+ 97: iconst_0
+ 98: invokevirtual #574 // Method java/lang/String.charAt:(I)C
+ 101: invokestatic #580 // Method java/lang/Character.toUpperCase:(C)C
+ 104: invokevirtual #570 // Method java/lang/StringBuilder.append:(C)Ljava/lang/StringBuilder;
+ 107: aload 6
+ 109: iconst_1
+ 110: invokevirtual #583 // Method java/lang/String.substring:(I)Ljava/lang/String;
+ 113: invokevirtual #586 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
+ 116: pop
+ 117: iinc 5, 1
+ 120: goto 56
+ 123: aload_2
+ 124: invokevirtual #589 // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
+ 127: areturn
+
+ private static int rarityColor(java.lang.String);
+ Code:
+ 0: aload_0
+ 1: ifnonnull 8
+ 4: ldc_w #594 // int 12434877
+ 7: ireturn
+ 8: aload_0
+ 9: getstatic #548 // Field java/util/Locale.ROOT:Ljava/util/Locale;
+ 12: invokevirtual #552 // Method java/lang/String.toLowerCase:(Ljava/util/Locale;)Ljava/lang/String;
+ 15: astore_1
+ 16: iconst_m1
+ 17: istore_2
+ 18: aload_1
+ 19: invokevirtual #597 // Method java/lang/String.hashCode:()I
+ 22: lookupswitch { // 6
+
+ -2081562821: 140
+
+ -1354814997: 80
+
+ -840528943: 155
+
+ -468311612: 95
+
+ 3119877: 125
+
+ 3493026: 110
+ default: 167
+ }
+ 80: aload_1
+ 81: ldc_w #599 // String ��ͨ
+ 84: invokevirtual #400 // Method java/lang/String.equals:(Ljava/lang/Object;)Z
+ 87: ifeq 167
+ 90: iconst_0
+ 91: istore_2
+ 92: goto 167
+ 95: aload_1
+ 96: ldc_w #601 // String ����
+ 99: invokevirtual #400 // Method java/lang/String.equals:(Ljava/lang/Object;)Z
+ 102: ifeq 167
+ 105: iconst_1
+ 106: istore_2
+ 107: goto 167
+ 110: aload_1
+ 111: ldc_w #603 // String ϡ��
+ 114: invokevirtual #400 // Method java/lang/String.equals:(Ljava/lang/Object;)Z
+ 117: ifeq 167
+ 120: iconst_2
+ 121: istore_2
+ 122: goto 167
+ 125: aload_1
+ 126: ldc_w #605 // String ʷʫ
+ 129: invokevirtual #400 // Method java/lang/String.equals:(Ljava/lang/Object;)Z
+ 132: ifeq 167
+ 135: iconst_3
+ 136: istore_2
+ 137: goto 167
+ 140: aload_1
+ 141: ldc_w #607 // String ��˵
+ 144: invokevirtual #400 // Method java/lang/String.equals:(Ljava/lang/Object;)Z
+ 147: ifeq 167
+ 150: iconst_4
+ 151: istore_2
+ 152: goto 167
+ 155: aload_1
+ 156: ldc_w #609 // String ����
+ 159: invokevirtual #400 // Method java/lang/String.equals:(Ljava/lang/Object;)Z
+ 162: ifeq 167
+ 165: iconst_5
+ 166: istore_2
+ 167: iload_2
+ 168: tableswitch { // 0 to 5
+
+ 0: 208
+
+ 1: 214
+
+ 2: 220
+
+ 3: 226
+
+ 4: 232
+
+ 5: 238
+ default: 244
+ }
+ 208: ldc_w #594 // int 12434877
+ 211: goto 247
+ 214: ldc_w #610 // int 7591543
+ 217: goto 247
+ 220: ldc_w #611 // int 5941247
+ 223: goto 247
+ 226: ldc_w #612 // int 11766015
+ 229: goto 247
+ 232: ldc_w #613 // int 16757051
+ 235: goto 247
+ 238: ldc_w #614 // int 16734962
+ 241: goto 247
+ 244: ldc_w #594 // int 12434877
+ 247: ireturn
+
+ private static java.lang.String formatNumber(double);
+ Code:
+ 0: dload_0
+ 1: dload_0
+ 2: invokestatic #618 // Method java/lang/Math.rint:(D)D
+ 5: dsub
+ 6: invokestatic #621 // Method java/lang/Math.abs:(D)D
+ 9: ldc2_w #622 // double 0.001d
+ 12: dcmpg
+ 13: ifge 25
+ 16: dload_0
+ 17: invokestatic #618 // Method java/lang/Math.rint:(D)D
+ 20: d2i
+ 21: invokestatic #626 // Method java/lang/String.valueOf:(I)Ljava/lang/String;
+ 24: areturn
+ 25: getstatic #548 // Field java/util/Locale.ROOT:Ljava/util/Locale;
+ 28: ldc_w #628 // String %.1f
+ 31: iconst_1
+ 32: anewarray #4 // class java/lang/Object
+ 35: dup
+ 36: iconst_0
+ 37: dload_0
+ 38: invokestatic #633 // Method java/lang/Double.valueOf:(D)Ljava/lang/Double;
+ 41: aastore
+ 42: invokestatic #637 // Method java/lang/String.format:(Ljava/util/Locale;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
+ 45: areturn
+
+ private static java.lang.String trimToWidth(net.minecraft.client.gui.Font, java.lang.String, int);
+ Code:
+ 0: aload_0
+ 1: aload_1
+ 2: invokevirtual #123 // Method net/minecraft/client/gui/Font.m_92895_:(Ljava/lang/String;)I
+ 5: iload_2
+ 6: if_icmpgt 11
+ 9: aload_1
+ 10: areturn
+ 11: ldc_w #639 // String ...
+ 14: astore_3
+ 15: aload_1
+ 16: invokevirtual #640 // Method java/lang/String.length:()I
+ 19: istore 4
+ 21: iload 4
+ 23: ifle 53
+ 26: aload_0
+ 27: aload_1
+ 28: iconst_0
+ 29: iload 4
+ 31: invokevirtual #643 // Method java/lang/String.substring:(II)Ljava/lang/String;
+ 34: aload_3
+ 35: invokedynamic #646, 0 // InvokeDynamic #4:makeConcatWithConstants:(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+ 40: invokevirtual #123 // Method net/minecraft/client/gui/Font.m_92895_:(Ljava/lang/String;)I
+ 43: iload_2
+ 44: if_icmple 53
+ 47: iinc 4, -1
+ 50: goto 21
+ 53: aload_1
+ 54: iconst_0
+ 55: iconst_0
+ 56: iload 4
+ 58: invokestatic #138 // Method java/lang/Math.max:(II)I
+ 61: invokevirtual #643 // Method java/lang/String.substring:(II)Ljava/lang/String;
+ 64: aload_3
+ 65: invokedynamic #646, 0 // InvokeDynamic #4:makeConcatWithConstants:(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+ 70: areturn
+
+ private static boolean lambda$sumAttribute$0(net.minecraft.world.entity.ai.attributes.AttributeModifier);
+ Code:
+ 0: aload_0
+ 1: invokevirtual #653 // Method net/minecraft/world/entity/ai/attributes/AttributeModifier.m_22217_:()Lnet/minecraft/world/entity/ai/attributes/AttributeModifier$Operation;
+ 4: getstatic #657 // Field net/minecraft/world/entity/ai/attributes/AttributeModifier$Operation.ADDITION:Lnet/minecraft/world/entity/ai/attributes/AttributeModifier$Operation;
+ 7: if_acmpne 14
+ 10: iconst_1
+ 11: goto 15
+ 14: iconst_0
+ 15: ireturn
+
+ static {};
+ Code:
+ 0: new #438 // class net/minecraft/resources/ResourceLocation
+ 3: dup
+ 4: ldc_w #662 // String sa_combat
+ 7: ldc_w #664 // String textures/gui/arsenal_table/blueprint_bg.png
+ 10: invokespecial #445 // Method net/minecraft/resources/ResourceLocation."":(Ljava/lang/String;Ljava/lang/String;)V
+ 13: putstatic #214 // Field BLUEPRINT_BG:Lnet/minecraft/resources/ResourceLocation;
+ 16: return
+}
+
+
+==================== com.ogaba.sa_combat.item.BlueprintTooltipComponent ====================
+Compiled from "BlueprintTooltipComponent.java"
+public final class com.ogaba.sa_combat.item.BlueprintTooltipComponent extends java.lang.Record implements net.minecraft.world.inventory.tooltip.TooltipComponent {
+ private final net.minecraft.resources.ResourceLocation blueprintId;
+
+ private final net.minecraft.resources.ResourceLocation unlocks;
+
+ private final java.lang.String rarity;
+
+ public com.ogaba.sa_combat.item.BlueprintTooltipComponent(net.minecraft.resources.ResourceLocation, net.minecraft.resources.ResourceLocation, java.lang.String);
+ Code:
+ 0: aload_0
+ 1: invokespecial #23 // Method java/lang/Record."":()V
+ 4: aload_0
+ 5: aload_1
+ 6: putfield #25 // Field blueprintId:Lnet/minecraft/resources/ResourceLocation;
+ 9: aload_0
+ 10: aload_2
+ 11: putfield #27 // Field unlocks:Lnet/minecraft/resources/ResourceLocation;
+ 14: aload_0
+ 15: aload_3
+ 16: putfield #29 // Field rarity:Ljava/lang/String;
+ 19: return
+
+ public final java.lang.String toString();
+ Code:
+ 0: aload_0
+ 1: invokedynamic #48, 0 // InvokeDynamic #0:toString:(Lcom/ogaba/sa_combat/item/BlueprintTooltipComponent;)Ljava/lang/String;
+ 6: areturn
+
+ public final int hashCode();
+ Code:
+ 0: aload_0
+ 1: invokedynamic #53, 0 // InvokeDynamic #0:hashCode:(Lcom/ogaba/sa_combat/item/BlueprintTooltipComponent;)I
+ 6: ireturn
+
+ public final boolean equals(java.lang.Object);
+ Code:
+ 0: aload_0
+ 1: aload_1
+ 2: invokedynamic #58, 0 // InvokeDynamic #0:equals:(Lcom/ogaba/sa_combat/item/BlueprintTooltipComponent;Ljava/lang/Object;)Z
+ 7: ireturn
+
+ public net.minecraft.resources.ResourceLocation blueprintId();
+ Code:
+ 0: aload_0
+ 1: getfield #25 // Field blueprintId:Lnet/minecraft/resources/ResourceLocation;
+ 4: areturn
+
+ public net.minecraft.resources.ResourceLocation unlocks();
+ Code:
+ 0: aload_0
+ 1: getfield #27 // Field unlocks:Lnet/minecraft/resources/ResourceLocation;
+ 4: areturn
+
+ public java.lang.String rarity();
+ Code:
+ 0: aload_0
+ 1: getfield #29 // Field rarity:Ljava/lang/String;
+ 4: areturn
+}
+
+
+==================== com.ogaba.sa_combat.item.BlueprintItem ====================
+Compiled from "BlueprintItem.java"
+public class com.ogaba.sa_combat.item.BlueprintItem extends net.minecraft.world.item.Item {
+ public static final java.lang.String ROOT;
+
+ public static final java.lang.String ID;
+
+ public static final java.lang.String NAME;
+
+ public static final java.lang.String UNLOCKS;
+
+ public static final java.lang.String RARITY;
+
+ private final net.minecraft.resources.ResourceLocation fixedId;
+
+ private final net.minecraft.resources.ResourceLocation fixedUnlocks;
+
+ private final java.lang.String fixedRarity;
+
+ public com.ogaba.sa_combat.item.BlueprintItem(net.minecraft.world.item.Item$Properties);
+ Code:
+ 0: aload_0
+ 1: aload_1
+ 2: aconst_null
+ 3: aconst_null
+ 4: aconst_null
+ 5: invokespecial #44 // Method "":(Lnet/minecraft/world/item/Item$Properties;Lnet/minecraft/resources/ResourceLocation;Lnet/minecraft/resources/ResourceLocation;Ljava/lang/String;)V
+ 8: return
+
+ public com.ogaba.sa_combat.item.BlueprintItem(net.minecraft.world.item.Item$Properties, net.minecraft.resources.ResourceLocation, net.minecraft.resources.ResourceLocation, java.lang.String);
+ Code:
+ 0: aload_0
+ 1: aload_1
+ 2: invokespecial #50 // Method net/minecraft/world/item/Item."":(Lnet/minecraft/world/item/Item$Properties;)V
+ 5: aload_0
+ 6: aload_2
+ 7: putfield #52 // Field fixedId:Lnet/minecraft/resources/ResourceLocation;
+ 10: aload_0
+ 11: aload_3
+ 12: putfield #54 // Field fixedUnlocks:Lnet/minecraft/resources/ResourceLocation;
+ 15: aload_0
+ 16: aload 4
+ 18: putfield #56 // Field fixedRarity:Ljava/lang/String;
+ 21: return
+
+ public net.minecraft.network.chat.Component m_7626_(net.minecraft.world.item.ItemStack);
+ Code:
+ 0: aload_1
+ 1: invokestatic #62 // Method getBlueprintData:(Lnet/minecraft/world/item/ItemStack;)Lnet/minecraft/nbt/CompoundTag;
+ 4: astore_2
+ 5: aload_2
+ 6: ifnull 28
+ 9: aload_2
+ 10: ldc #28 // String Name
+ 12: invokevirtual #68 // Method net/minecraft/nbt/CompoundTag.m_128441_:(Ljava/lang/String;)Z
+ 15: ifeq 28
+ 18: aload_2
+ 19: ldc #28 // String Name
+ 21: invokevirtual #72 // Method net/minecraft/nbt/CompoundTag.m_128461_:(Ljava/lang/String;)Ljava/lang/String;
+ 24: invokestatic #78 // InterfaceMethod net/minecraft/network/chat/Component.m_237113_:(Ljava/lang/String;)Lnet/minecraft/network/chat/MutableComponent;
+ 27: areturn
+ 28: aload_1
+ 29: invokestatic #82 // Method com/ogaba/sa_combat/blueprint/BlueprintDefinitionRegistry.byItem:(Lnet/minecraft/world/item/ItemStack;)Ljava/util/Optional;
+ 32: aconst_null
+ 33: invokevirtual #88 // Method java/util/Optional.orElse:(Ljava/lang/Object;)Ljava/lang/Object;
+ 36: checkcast #10 // class com/ogaba/sa_combat/blueprint/BlueprintDefinitionRegistry$Definition
+ 39: astore_3
+ 40: aload_3
+ 41: ifnull 62
+ 44: aload_3
+ 45: invokevirtual #92 // Method com/ogaba/sa_combat/blueprint/BlueprintDefinitionRegistry$Definition.name:()Ljava/lang/String;
+ 48: invokevirtual #98 // Method java/lang/String.isBlank:()Z
+ 51: ifne 62
+ 54: aload_3
+ 55: invokevirtual #92 // Method com/ogaba/sa_combat/blueprint/BlueprintDefinitionRegistry$Definition.name:()Ljava/lang/String;
+ 58: invokestatic #78 // InterfaceMethod net/minecraft/network/chat/Component.m_237113_:(Ljava/lang/String;)Lnet/minecraft/network/chat/MutableComponent;
+ 61: areturn
+ 62: aload_1
+ 63: invokestatic #102 // Method getBlueprintId:(Lnet/minecraft/world/item/ItemStack;)Lnet/minecraft/resources/ResourceLocation;
+ 66: astore 4
+ 68: aload 4
+ 70: ifnull 143
+ 73: aload 4
+ 75: invokevirtual #107 // Method net/minecraft/resources/ResourceLocation.m_135827_:()Ljava/lang/String;
+ 78: aload 4
+ 80: invokevirtual #110 // Method net/minecraft/resources/ResourceLocation.m_135815_:()Ljava/lang/String;
+ 83: bipush 47
+ 85: bipush 46
+ 87: invokevirtual #114 // Method java/lang/String.replace:(CC)Ljava/lang/String;
+ 90: invokedynamic #126, 0 // InvokeDynamic #0:makeConcatWithConstants:(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+ 95: invokestatic #129 // InterfaceMethod net/minecraft/network/chat/Component.m_237115_:(Ljava/lang/String;)Lnet/minecraft/network/chat/MutableComponent;
+ 98: astore 5
+ 100: aload 5
+ 102: invokeinterface #132, 1 // InterfaceMethod net/minecraft/network/chat/Component.getString:()Ljava/lang/String;
+ 107: ldc #134 // String blueprint.
+ 109: invokevirtual #137 // Method java/lang/String.startsWith:(Ljava/lang/String;)Z
+ 112: ifeq 128
+ 115: aload 4
+ 117: invokevirtual #110 // Method net/minecraft/resources/ResourceLocation.m_135815_:()Ljava/lang/String;
+ 120: invokestatic #140 // Method prettyName:(Ljava/lang/String;)Ljava/lang/String;
+ 123: invokestatic #78 // InterfaceMethod net/minecraft/network/chat/Component.m_237113_:(Ljava/lang/String;)Lnet/minecraft/network/chat/MutableComponent;
+ 126: astore 5
+ 128: ldc #142 // String item.sa_combat.blueprint.named
+ 130: iconst_1
+ 131: anewarray #144 // class java/lang/Object
+ 134: dup
+ 135: iconst_0
+ 136: aload 5
+ 138: aastore
+ 139: invokestatic #148 // InterfaceMethod net/minecraft/network/chat/Component.m_237110_:(Ljava/lang/String;[Ljava/lang/Object;)Lnet/minecraft/network/chat/MutableComponent;
+ 142: areturn
+ 143: aload_0
+ 144: aload_1
+ 145: invokespecial #150 // Method net/minecraft/world/item/Item.m_7626_:(Lnet/minecraft/world/item/ItemStack;)Lnet/minecraft/network/chat/Component;
+ 148: areturn
+
+ public java.util.Optional m_142422_(net.minecraft.world.item.ItemStack);
+ Code:
+ 0: aload_1
+ 1: invokestatic #102 // Method getBlueprintId:(Lnet/minecraft/world/item/ItemStack;)Lnet/minecraft/resources/ResourceLocation;
+ 4: astore_2
+ 5: aload_1
+ 6: invokestatic #164 // Method getBlueprintUnlocks:(Lnet/minecraft/world/item/ItemStack;)Lnet/minecraft/resources/ResourceLocation;
+ 9: astore_3
+ 10: aload_1
+ 11: invokestatic #168 // Method getBlueprintRarity:(Lnet/minecraft/world/item/ItemStack;)Ljava/lang/String;
+ 14: astore 4
+ 16: aload_2
+ 17: ifnonnull 41
+ 20: aload_3
+ 21: ifnonnull 41
+ 24: aload 4
+ 26: ifnull 37
+ 29: aload 4
+ 31: invokevirtual #98 // Method java/lang/String.isBlank:()Z
+ 34: ifeq 41
+ 37: invokestatic #172 // Method java/util/Optional.empty:()Ljava/util/Optional;
+ 40: areturn
+ 41: new #174 // class com/ogaba/sa_combat/item/BlueprintTooltipComponent
+ 44: dup
+ 45: aload_2
+ 46: aload_3
+ 47: aload 4
+ 49: invokespecial #177 // Method com/ogaba/sa_combat/item/BlueprintTooltipComponent."":(Lnet/minecraft/resources/ResourceLocation;Lnet/minecraft/resources/ResourceLocation;Ljava/lang/String;)V
+ 52: invokestatic #181 // Method java/util/Optional.of:(Ljava/lang/Object;)Ljava/util/Optional;
+ 55: areturn
+
+ public void m_7373_(net.minecraft.world.item.ItemStack, net.minecraft.world.level.Level, java.util.List, net.minecraft.world.item.TooltipFlag);
+ Code:
+ 0: aload_1
+ 1: invokestatic #62 // Method getBlueprintData:(Lnet/minecraft/world/item/ItemStack;)Lnet/minecraft/nbt/CompoundTag;
+ 4: astore 5
+ 6: aload_1
+ 7: invokestatic #102 // Method getBlueprintId:(Lnet/minecraft/world/item/ItemStack;)Lnet/minecraft/resources/ResourceLocation;
+ 10: astore 6
+ 12: aload_1
+ 13: invokestatic #164 // Method getBlueprintUnlocks:(Lnet/minecraft/world/item/ItemStack;)Lnet/minecraft/resources/ResourceLocation;
+ 16: astore 7
+ 18: aload_1
+ 19: invokestatic #168 // Method getBlueprintRarity:(Lnet/minecraft/world/item/ItemStack;)Ljava/lang/String;
+ 22: astore 8
+ 24: aload 5
+ 26: ifnonnull 63
+ 29: aload 6
+ 31: ifnonnull 63
+ 34: aload 7
+ 36: ifnonnull 63
+ 39: aload 8
+ 41: ifnonnull 63
+ 44: aload_3
+ 45: ldc #188 // String tooltip.sa_combat.blueprint.empty
+ 47: invokestatic #129 // InterfaceMethod net/minecraft/network/chat/Component.m_237115_:(Ljava/lang/String;)Lnet/minecraft/network/chat/MutableComponent;
+ 50: getstatic #194 // Field net/minecraft/ChatFormatting.DARK_GRAY:Lnet/minecraft/ChatFormatting;
+ 53: invokevirtual #200 // Method net/minecraft/network/chat/MutableComponent.m_130940_:(Lnet/minecraft/ChatFormatting;)Lnet/minecraft/network/chat/MutableComponent;
+ 56: invokeinterface #206, 2 // InterfaceMethod java/util/List.add:(Ljava/lang/Object;)Z
+ 61: pop
+ 62: return
+ 63: return
+
+ public net.minecraft.resources.ResourceLocation getFixedId();
+ Code:
+ 0: aload_0
+ 1: getfield #52 // Field fixedId:Lnet/minecraft/resources/ResourceLocation;
+ 4: areturn
+
+ public net.minecraft.resources.ResourceLocation getFixedUnlocks();
+ Code:
+ 0: aload_0
+ 1: getfield #54 // Field fixedUnlocks:Lnet/minecraft/resources/ResourceLocation;
+ 4: areturn
+
+ public java.lang.String getFixedRarity();
+ Code:
+ 0: aload_0
+ 1: getfield #56 // Field fixedRarity:Ljava/lang/String;
+ 4: areturn
+
+ private static java.lang.String prettyName(java.lang.String);
+ Code:
+ 0: aload_0
+ 1: ifnonnull 9
+ 4: ldc #225 // String Blueprint
+ 6: goto 27
+ 9: aload_0
+ 10: bipush 47
+ 12: bipush 32
+ 14: invokevirtual #114 // Method java/lang/String.replace:(CC)Ljava/lang/String;
+ 17: bipush 95
+ 19: bipush 32
+ 21: invokevirtual #114 // Method java/lang/String.replace:(CC)Ljava/lang/String;
+ 24: invokevirtual #228 // Method java/lang/String.trim:()Ljava/lang/String;
+ 27: astore_1
+ 28: aload_1
+ 29: invokevirtual #231 // Method java/lang/String.isEmpty:()Z
+ 32: ifeq 38
+ 35: ldc #225 // String Blueprint
+ 37: areturn
+ 38: new #233 // class java/lang/StringBuilder
+ 41: dup
+ 42: invokespecial #236 // Method java/lang/StringBuilder."":()V
+ 45: astore_2
+ 46: aload_1
+ 47: ldc #238 // String
+ 49: invokevirtual #242 // Method java/lang/String.split:(Ljava/lang/String;)[Ljava/lang/String;
+ 52: astore_3
+ 53: aload_3
+ 54: arraylength
+ 55: istore 4
+ 57: iconst_0
+ 58: istore 5
+ 60: iload 5
+ 62: iload 4
+ 64: if_icmpge 127
+ 67: aload_3
+ 68: iload 5
+ 70: aaload
+ 71: astore 6
+ 73: aload 6
+ 75: invokevirtual #98 // Method java/lang/String.isBlank:()Z
+ 78: ifeq 84
+ 81: goto 121
+ 84: aload_2
+ 85: invokevirtual #248 // Method java/lang/StringBuilder.length:()I
+ 88: ifle 98
+ 91: aload_2
+ 92: bipush 32
+ 94: invokevirtual #252 // Method java/lang/StringBuilder.append:(C)Ljava/lang/StringBuilder;
+ 97: pop
+ 98: aload_2
+ 99: aload 6
+ 101: iconst_0
+ 102: invokevirtual #256 // Method java/lang/String.charAt:(I)C
+ 105: invokestatic #262 // Method java/lang/Character.toUpperCase:(C)C
+ 108: invokevirtual #252 // Method java/lang/StringBuilder.append:(C)Ljava/lang/StringBuilder;
+ 111: aload 6
+ 113: iconst_1
+ 114: invokevirtual #266 // Method java/lang/String.substring:(I)Ljava/lang/String;
+ 117: invokevirtual #269 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
+ 120: pop
+ 121: iinc 5, 1
+ 124: goto 60
+ 127: aload_2
+ 128: invokevirtual #272 // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
+ 131: areturn
+
+ public static net.minecraft.resources.ResourceLocation getBlueprintId(net.minecraft.world.item.ItemStack);
+ Code:
+ 0: aload_0
+ 1: invokestatic #62 // Method getBlueprintData:(Lnet/minecraft/world/item/ItemStack;)Lnet/minecraft/nbt/CompoundTag;
+ 4: astore_1
+ 5: aload_1
+ 6: ifnull 34
+ 9: aload_1
+ 10: ldc #25 // String Id
+ 12: invokevirtual #68 // Method net/minecraft/nbt/CompoundTag.m_128441_:(Ljava/lang/String;)Z
+ 15: ifeq 34
+ 18: aload_1
+ 19: ldc #25 // String Id
+ 21: invokevirtual #72 // Method net/minecraft/nbt/CompoundTag.m_128461_:(Ljava/lang/String;)Ljava/lang/String;
+ 24: invokestatic #281 // Method net/minecraft/resources/ResourceLocation.m_135820_:(Ljava/lang/String;)Lnet/minecraft/resources/ResourceLocation;
+ 27: astore_2
+ 28: aload_2
+ 29: ifnull 34
+ 32: aload_2
+ 33: areturn
+ 34: aload_0
+ 35: invokestatic #82 // Method com/ogaba/sa_combat/blueprint/BlueprintDefinitionRegistry.byItem:(Lnet/minecraft/world/item/ItemStack;)Ljava/util/Optional;
+ 38: invokedynamic #299, 0 // InvokeDynamic #1:apply:()Ljava/util/function/Function;
+ 43: invokevirtual #303 // Method java/util/Optional.map:(Ljava/util/function/Function;)Ljava/util/Optional;
+ 46: aconst_null
+ 47: invokevirtual #88 // Method java/util/Optional.orElse:(Ljava/lang/Object;)Ljava/lang/Object;
+ 50: checkcast #104 // class net/minecraft/resources/ResourceLocation
+ 53: astore_2
+ 54: aload_2
+ 55: ifnull 60
+ 58: aload_2
+ 59: areturn
+ 60: aload_0
+ 61: invokevirtual #307 // Method net/minecraft/world/item/ItemStack.m_41720_:()Lnet/minecraft/world/item/Item;
+ 64: astore 4
+ 66: aload 4
+ 68: instanceof #2 // class com/ogaba/sa_combat/item/BlueprintItem
+ 71: ifeq 85
+ 74: aload 4
+ 76: checkcast #2 // class com/ogaba/sa_combat/item/BlueprintItem
+ 79: astore_3
+ 80: aload_3
+ 81: invokevirtual #309 // Method getFixedId:()Lnet/minecraft/resources/ResourceLocation;
+ 84: areturn
+ 85: aconst_null
+ 86: areturn
+
+ public static net.minecraft.resources.ResourceLocation getBlueprintUnlocks(net.minecraft.world.item.ItemStack);
+ Code:
+ 0: aload_0
+ 1: invokestatic #62 // Method getBlueprintData:(Lnet/minecraft/world/item/ItemStack;)Lnet/minecraft/nbt/CompoundTag;
+ 4: astore_1
+ 5: aload_1
+ 6: ifnull 34
+ 9: aload_1
+ 10: ldc #31 // String Unlocks
+ 12: invokevirtual #68 // Method net/minecraft/nbt/CompoundTag.m_128441_:(Ljava/lang/String;)Z
+ 15: ifeq 34
+ 18: aload_1
+ 19: ldc #31 // String Unlocks
+ 21: invokevirtual #72 // Method net/minecraft/nbt/CompoundTag.m_128461_:(Ljava/lang/String;)Ljava/lang/String;
+ 24: invokestatic #281 // Method net/minecraft/resources/ResourceLocation.m_135820_:(Ljava/lang/String;)Lnet/minecraft/resources/ResourceLocation;
+ 27: astore_2
+ 28: aload_2
+ 29: ifnull 34
+ 32: aload_2
+ 33: areturn
+ 34: aload_0
+ 35: invokestatic #82 // Method com/ogaba/sa_combat/blueprint/BlueprintDefinitionRegistry.byItem:(Lnet/minecraft/world/item/ItemStack;)Ljava/util/Optional;
+ 38: invokedynamic #315, 0 // InvokeDynamic #2:apply:()Ljava/util/function/Function;
+ 43: invokevirtual #303 // Method java/util/Optional.map:(Ljava/util/function/Function;)Ljava/util/Optional;
+ 46: aconst_null
+ 47: invokevirtual #88 // Method java/util/Optional.orElse:(Ljava/lang/Object;)Ljava/lang/Object;
+ 50: checkcast #104 // class net/minecraft/resources/ResourceLocation
+ 53: astore_2
+ 54: aload_2
+ 55: ifnull 60
+ 58: aload_2
+ 59: areturn
+ 60: aload_0
+ 61: invokevirtual #307 // Method net/minecraft/world/item/ItemStack.m_41720_:()Lnet/minecraft/world/item/Item;
+ 64: astore 4
+ 66: aload 4
+ 68: instanceof #2 // class com/ogaba/sa_combat/item/BlueprintItem
+ 71: ifeq 85
+ 74: aload 4
+ 76: checkcast #2 // class com/ogaba/sa_combat/item/BlueprintItem
+ 79: astore_3
+ 80: aload_3
+ 81: invokevirtual #317 // Method getFixedUnlocks:()Lnet/minecraft/resources/ResourceLocation;
+ 84: areturn
+ 85: aconst_null
+ 86: areturn
+
+ public static java.lang.String getBlueprintRarity(net.minecraft.world.item.ItemStack);
+ Code:
+ 0: aload_0
+ 1: invokestatic #62 // Method getBlueprintData:(Lnet/minecraft/world/item/ItemStack;)Lnet/minecraft/nbt/CompoundTag;
+ 4: astore_1
+ 5: aload_1
+ 6: ifnull 25
+ 9: aload_1
+ 10: ldc #34 // String Rarity
+ 12: invokevirtual #68 // Method net/minecraft/nbt/CompoundTag.m_128441_:(Ljava/lang/String;)Z
+ 15: ifeq 25
+ 18: aload_1
+ 19: ldc #34 // String Rarity
+ 21: invokevirtual #72 // Method net/minecraft/nbt/CompoundTag.m_128461_:(Ljava/lang/String;)Ljava/lang/String;
+ 24: areturn
+ 25: aload_0
+ 26: invokestatic #82 // Method com/ogaba/sa_combat/blueprint/BlueprintDefinitionRegistry.byItem:(Lnet/minecraft/world/item/ItemStack;)Ljava/util/Optional;
+ 29: invokedynamic #323, 0 // InvokeDynamic #3:apply:()Ljava/util/function/Function;
+ 34: invokevirtual #303 // Method java/util/Optional.map:(Ljava/util/function/Function;)Ljava/util/Optional;
+ 37: ldc_w #325 // String
+ 40: invokevirtual #88 // Method java/util/Optional.orElse:(Ljava/lang/Object;)Ljava/lang/Object;
+ 43: checkcast #94 // class java/lang/String
+ 46: astore_2
+ 47: aload_2
+ 48: invokevirtual #98 // Method java/lang/String.isBlank:()Z
+ 51: ifne 56
+ 54: aload_2
+ 55: areturn
+ 56: aload_0
+ 57: invokevirtual #307 // Method net/minecraft/world/item/ItemStack.m_41720_:()Lnet/minecraft/world/item/Item;
+ 60: astore 4
+ 62: aload 4
+ 64: instanceof #2 // class com/ogaba/sa_combat/item/BlueprintItem
+ 67: ifeq 81
+ 70: aload 4
+ 72: checkcast #2 // class com/ogaba/sa_combat/item/BlueprintItem
+ 75: astore_3
+ 76: aload_3
+ 77: invokevirtual #327 // Method getFixedRarity:()Ljava/lang/String;
+ 80: areturn
+ 81: aconst_null
+ 82: areturn
+
+ public static net.minecraft.nbt.CompoundTag getBlueprintData(net.minecraft.world.item.ItemStack);
+ Code:
+ 0: aload_0
+ 1: invokevirtual #331 // Method net/minecraft/world/item/ItemStack.m_41783_:()Lnet/minecraft/nbt/CompoundTag;
+ 4: astore_1
+ 5: aload_1
+ 6: ifnull 18
+ 9: aload_1
+ 10: ldc #22 // String SACombatBlueprint
+ 12: invokevirtual #68 // Method net/minecraft/nbt/CompoundTag.m_128441_:(Ljava/lang/String;)Z
+ 15: ifne 20
+ 18: aconst_null
+ 19: areturn
+ 20: aload_1
+ 21: ldc #22 // String SACombatBlueprint
+ 23: invokevirtual #335 // Method net/minecraft/nbt/CompoundTag.m_128469_:(Ljava/lang/String;)Lnet/minecraft/nbt/CompoundTag;
+ 26: areturn
+}
diff --git a/_sa_hanhua_out/_tmp/javap_events.txt b/_sa_hanhua_out/_tmp/javap_events.txt
new file mode 100644
index 0000000..759839e
--- /dev/null
+++ b/_sa_hanhua_out/_tmp/javap_events.txt
@@ -0,0 +1,2454 @@
+Compiled from "SACombatClientForgeEvents.java"
+public final class com.ogaba.sa_combat.client.event.SACombatClientForgeEvents {
+ private static final net.minecraft.resources.ResourceLocation BALLISTIC_VEST_BG;
+
+ private static final net.minecraft.resources.ResourceLocation BALLISTIC_VEST_FILL;
+
+ private static final net.minecraft.resources.ResourceLocation GRENADE_FUSE_FRAME;
+
+ private static final net.minecraft.resources.ResourceLocation GRENADE_FUSE_FILL;
+
+ private static final int GRENADE_FUSE_FRAME_WIDTH;
+
+ private static final int GRENADE_FUSE_FRAME_HEIGHT;
+
+ private static final int GRENADE_FUSE_FILL_OFFSET_X;
+
+ private static final int GRENADE_FUSE_FILL_OFFSET_Y;
+
+ private static final int GRENADE_FUSE_FILL_WIDTH;
+
+ private static final int GRENADE_FUSE_FILL_HEIGHT;
+
+ private static final int GRENADE_FUSE_CROSSHAIR_OFFSET_Y;
+
+ private static final net.minecraft.resources.ResourceLocation VANILLA_SPYGLASS_SCOPE;
+
+ private static float tacticalScopeProgress;
+
+ private static java.lang.reflect.Method renderSpyglassOverlayMethod;
+
+ private static final float SCOPE_OPEN_SMOOTH;
+
+ private static final float SCOPE_CLOSE_SMOOTH;
+
+ private static final int BALLISTIC_ICON_W;
+
+ private static final int BALLISTIC_ICON_H;
+
+ private static final int BALLISTIC_RENDER_W;
+
+ private static final int BALLISTIC_RENDER_H;
+
+ private static final int BALLISTIC_MARGIN_LEFT;
+
+ private static final int BALLISTIC_MARGIN_BOTTOM;
+
+ private static final net.minecraft.resources.ResourceLocation NAIL_ITEM_ID;
+
+ private static final int AMMO_ICON_SIZE;
+
+ private static final int AMMO_MARGIN_RIGHT;
+
+ private static final int AMMO_MARGIN_BOTTOM;
+
+ private static final int AMMO_ICON_GAP;
+
+ private static boolean nailGunTriggerWasDown;
+
+ private static float nailGunAutoFireAccumulator;
+
+ private static long thirdPersonNailGunStackId;
+
+ private static boolean thirdPersonNailGunReloadWasActive;
+
+ private static int cachedInventoryPlayerId;
+
+ private static int cachedInventoryTick;
+
+ private static int cachedNailReserve;
+
+ private static int cachedTacticalBoltReserve;
+
+ private static int cachedImprovisedBoltReserve;
+
+ private static boolean nailIconResolved;
+
+ private static net.minecraft.world.item.ItemStack cachedNailIcon;
+
+ private static net.minecraft.world.item.ItemStack cachedTacticalBoltIcon;
+
+ private static net.minecraft.world.item.ItemStack cachedImprovisedBoltIcon;
+
+ private static boolean crossbowCycleWasDown;
+
+ private com.ogaba.sa_combat.client.event.SACombatClientForgeEvents();
+ Code:
+ 0: aload_0
+ 1: invokespecial #133 // Method java/lang/Object."":()V
+ 4: return
+
+ public static void onRenderHand(net.minecraftforge.client.event.RenderHandEvent);
+ Code:
+ 0: invokestatic #144 // Method net/minecraft/client/Minecraft.m_91087_:()Lnet/minecraft/client/Minecraft;
+ 3: astore_1
+ 4: aload_1
+ 5: getfield #148 // Field net/minecraft/client/Minecraft.f_91074_:Lnet/minecraft/client/player/LocalPlayer;
+ 8: astore_2
+ 9: aload_2
+ 10: ifnonnull 14
+ 13: return
+ 14: aload_2
+ 15: invokevirtual #154 // Method net/minecraft/world/entity/player/Player.m_21205_:()Lnet/minecraft/world/item/ItemStack;
+ 18: astore_3
+ 19: aload_2
+ 20: invokevirtual #157 // Method net/minecraft/world/entity/player/Player.m_21206_:()Lnet/minecraft/world/item/ItemStack;
+ 23: astore 4
+ 25: aload_3
+ 26: invokevirtual #163 // Method net/minecraft/world/item/ItemStack.m_41720_:()Lnet/minecraft/world/item/Item;
+ 29: instanceof #165 // class com/ogaba/sa_combat/item/SpecialGrenadeItem
+ 32: istore 5
+ 34: aload 4
+ 36: invokevirtual #163 // Method net/minecraft/world/item/ItemStack.m_41720_:()Lnet/minecraft/world/item/Item;
+ 39: instanceof #165 // class com/ogaba/sa_combat/item/SpecialGrenadeItem
+ 42: istore 6
+ 44: aload_3
+ 45: invokevirtual #163 // Method net/minecraft/world/item/ItemStack.m_41720_:()Lnet/minecraft/world/item/Item;
+ 48: instanceof #167 // class com/ogaba/sa_combat/combat/weapon/NailGunItem
+ 51: istore 7
+ 53: aload 4
+ 55: invokevirtual #163 // Method net/minecraft/world/item/ItemStack.m_41720_:()Lnet/minecraft/world/item/Item;
+ 58: instanceof #167 // class com/ogaba/sa_combat/combat/weapon/NailGunItem
+ 61: istore 8
+ 63: iload 5
+ 65: ifne 84
+ 68: iload 6
+ 70: ifne 84
+ 73: iload 7
+ 75: ifne 84
+ 78: iload 8
+ 80: ifne 84
+ 83: return
+ 84: aload_0
+ 85: invokevirtual #173 // Method net/minecraftforge/client/event/RenderHandEvent.getHand:()Lnet/minecraft/world/InteractionHand;
+ 88: getstatic #179 // Field net/minecraft/world/InteractionHand.MAIN_HAND:Lnet/minecraft/world/InteractionHand;
+ 91: if_acmpne 128
+ 94: iload 5
+ 96: ifeq 109
+ 99: aload_0
+ 100: aload_2
+ 101: ldc #180 // float 0.35f
+ 103: invokestatic #184 // Method applyRetainedVanillaViewBob:(Lnet/minecraftforge/client/event/RenderHandEvent;Lnet/minecraft/world/entity/player/Player;F)V
+ 106: goto 128
+ 109: iload 7
+ 111: ifeq 128
+ 114: fconst_1
+ 115: invokestatic #190 // Method com/ogaba/sa_combat/client/render/NailGunAimClient.getProgress:()F
+ 118: fsub
+ 119: fstore 9
+ 121: aload_0
+ 122: aload_2
+ 123: fload 9
+ 125: invokestatic #184 // Method applyRetainedVanillaViewBob:(Lnet/minecraftforge/client/event/RenderHandEvent;Lnet/minecraft/world/entity/player/Player;F)V
+ 128: aload_0
+ 129: invokevirtual #173 // Method net/minecraftforge/client/event/RenderHandEvent.getHand:()Lnet/minecraft/world/InteractionHand;
+ 132: getstatic #193 // Field net/minecraft/world/InteractionHand.OFF_HAND:Lnet/minecraft/world/InteractionHand;
+ 135: if_acmpne 143
+ 138: aload_0
+ 139: iconst_1
+ 140: invokevirtual #197 // Method net/minecraftforge/client/event/RenderHandEvent.setCanceled:(Z)V
+ 143: return
+
+ private static void applyRetainedVanillaViewBob(net.minecraftforge.client.event.RenderHandEvent, net.minecraft.world.entity.player.Player, float);
+ Code:
+ 0: invokestatic #144 // Method net/minecraft/client/Minecraft.m_91087_:()Lnet/minecraft/client/Minecraft;
+ 3: astore_3
+ 4: aload_3
+ 5: getfield #214 // Field net/minecraft/client/Minecraft.f_91066_:Lnet/minecraft/client/Options;
+ 8: invokevirtual #220 // Method net/minecraft/client/Options.m_231830_:()Lnet/minecraft/client/OptionInstance;
+ 11: invokevirtual #226 // Method net/minecraft/client/OptionInstance.m_231551_:()Ljava/lang/Object;
+ 14: checkcast #228 // class java/lang/Boolean
+ 17: invokevirtual #232 // Method java/lang/Boolean.booleanValue:()Z
+ 20: ifne 24
+ 23: return
+ 24: fload_2
+ 25: fconst_0
+ 26: fconst_1
+ 27: invokestatic #238 // Method net/minecraft/util/Mth.m_14036_:(FFF)F
+ 30: fstore_2
+ 31: aload_0
+ 32: invokevirtual #241 // Method net/minecraftforge/client/event/RenderHandEvent.getPartialTick:()F
+ 35: fstore 4
+ 37: aload_1
+ 38: getfield #244 // Field net/minecraft/world/entity/player/Player.f_19787_:F
+ 41: aload_1
+ 42: getfield #247 // Field net/minecraft/world/entity/player/Player.f_19867_:F
+ 45: fsub
+ 46: fstore 5
+ 48: aload_1
+ 49: getfield #244 // Field net/minecraft/world/entity/player/Player.f_19787_:F
+ 52: fload 5
+ 54: fload 4
+ 56: fmul
+ 57: fadd
+ 58: fneg
+ 59: fstore 6
+ 61: fload 4
+ 63: aload_1
+ 64: getfield #250 // Field net/minecraft/world/entity/player/Player.f_36099_:F
+ 67: aload_1
+ 68: getfield #253 // Field net/minecraft/world/entity/player/Player.f_36100_:F
+ 71: invokestatic #256 // Method net/minecraft/util/Mth.m_14179_:(FFF)F
+ 74: fstore 7
+ 76: fload 6
+ 78: ldc_w #257 // float 3.1415927f
+ 81: fmul
+ 82: invokestatic #261 // Method net/minecraft/util/Mth.m_14031_:(F)F
+ 85: fload 7
+ 87: fmul
+ 88: ldc_w #262 // float 0.5f
+ 91: fmul
+ 92: fstore 8
+ 94: fload 6
+ 96: ldc_w #257 // float 3.1415927f
+ 99: fmul
+ 100: invokestatic #265 // Method net/minecraft/util/Mth.m_14089_:(F)F
+ 103: fload 7
+ 105: fmul
+ 106: invokestatic #270 // Method java/lang/Math.abs:(F)F
+ 109: fneg
+ 110: fstore 9
+ 112: fload 6
+ 114: ldc_w #257 // float 3.1415927f
+ 117: fmul
+ 118: invokestatic #261 // Method net/minecraft/util/Mth.m_14031_:(F)F
+ 121: fload 7
+ 123: fmul
+ 124: ldc_w #271 // float 3.0f
+ 127: fmul
+ 128: fstore 10
+ 130: fload 6
+ 132: ldc_w #257 // float 3.1415927f
+ 135: fmul
+ 136: ldc_w #272 // float 0.2f
+ 139: fsub
+ 140: invokestatic #265 // Method net/minecraft/util/Mth.m_14089_:(F)F
+ 143: fload 7
+ 145: fmul
+ 146: invokestatic #270 // Method java/lang/Math.abs:(F)F
+ 149: ldc_w #273 // float 5.0f
+ 152: fmul
+ 153: fstore 11
+ 155: aload_0
+ 156: invokevirtual #277 // Method net/minecraftforge/client/event/RenderHandEvent.getPoseStack:()Lcom/mojang/blaze3d/vertex/PoseStack;
+ 159: astore 12
+ 161: aload 12
+ 163: getstatic #283 // Field com/mojang/math/Axis.f_252529_:Lcom/mojang/math/Axis;
+ 166: fload 11
+ 168: fneg
+ 169: invokeinterface #287, 2 // InterfaceMethod com/mojang/math/Axis.m_252977_:(F)Lorg/joml/Quaternionf;
+ 174: invokevirtual #293 // Method com/mojang/blaze3d/vertex/PoseStack.m_252781_:(Lorg/joml/Quaternionf;)V
+ 177: aload 12
+ 179: getstatic #296 // Field com/mojang/math/Axis.f_252403_:Lcom/mojang/math/Axis;
+ 182: fload 10
+ 184: fneg
+ 185: invokeinterface #287, 2 // InterfaceMethod com/mojang/math/Axis.m_252977_:(F)Lorg/joml/Quaternionf;
+ 190: invokevirtual #293 // Method com/mojang/blaze3d/vertex/PoseStack.m_252781_:(Lorg/joml/Quaternionf;)V
+ 193: aload 12
+ 195: fload 8
+ 197: fneg
+ 198: f2d
+ 199: fload 9
+ 201: fneg
+ 202: f2d
+ 203: dconst_0
+ 204: invokevirtual #300 // Method com/mojang/blaze3d/vertex/PoseStack.m_85837_:(DDD)V
+ 207: aload 12
+ 209: fload 8
+ 211: fload_2
+ 212: fmul
+ 213: f2d
+ 214: fload 9
+ 216: fload_2
+ 217: fmul
+ 218: f2d
+ 219: dconst_0
+ 220: invokevirtual #300 // Method com/mojang/blaze3d/vertex/PoseStack.m_85837_:(DDD)V
+ 223: aload 12
+ 225: getstatic #296 // Field com/mojang/math/Axis.f_252403_:Lcom/mojang/math/Axis;
+ 228: fload 10
+ 230: fload_2
+ 231: fmul
+ 232: invokeinterface #287, 2 // InterfaceMethod com/mojang/math/Axis.m_252977_:(F)Lorg/joml/Quaternionf;
+ 237: invokevirtual #293 // Method com/mojang/blaze3d/vertex/PoseStack.m_252781_:(Lorg/joml/Quaternionf;)V
+ 240: aload 12
+ 242: getstatic #283 // Field com/mojang/math/Axis.f_252529_:Lcom/mojang/math/Axis;
+ 245: fload 11
+ 247: fload_2
+ 248: fmul
+ 249: invokeinterface #287, 2 // InterfaceMethod com/mojang/math/Axis.m_252977_:(F)Lorg/joml/Quaternionf;
+ 254: invokevirtual #293 // Method com/mojang/blaze3d/vertex/PoseStack.m_252781_:(Lorg/joml/Quaternionf;)V
+ 257: return
+
+ public static void onClientTick(net.minecraftforge.event.TickEvent$ClientTickEvent);
+ Code:
+ 0: aload_0
+ 1: getfield #317 // Field net/minecraftforge/event/TickEvent$ClientTickEvent.phase:Lnet/minecraftforge/event/TickEvent$Phase;
+ 4: getstatic #320 // Field net/minecraftforge/event/TickEvent$Phase.END:Lnet/minecraftforge/event/TickEvent$Phase;
+ 7: if_acmpne 28
+ 10: invokestatic #325 // Method com/ogaba/sa_combat/client/sound/ChainsawSoundManager.tick:()V
+ 13: invokestatic #326 // Method com/ogaba/sa_combat/client/render/NailGunAimClient.tick:()V
+ 16: invokestatic #329 // Method tickNailGunThirdPersonSounds:()V
+ 19: invokestatic #332 // Method tickNailGunTrigger:()V
+ 22: invokestatic #335 // Method tickNailGunReloadKey:()V
+ 25: invokestatic #338 // Method tickCrossbowAmmoCycle:()V
+ 28: return
+
+ public static void onRenderPlayerPre(net.minecraftforge.client.event.RenderPlayerEvent$Pre);
+ Code:
+ 0: invokestatic #144 // Method net/minecraft/client/Minecraft.m_91087_:()Lnet/minecraft/client/Minecraft;
+ 3: getfield #148 // Field net/minecraft/client/Minecraft.f_91074_:Lnet/minecraft/client/player/LocalPlayer;
+ 6: astore_1
+ 7: aload_1
+ 8: ifnull 19
+ 11: aload_0
+ 12: invokevirtual #345 // Method net/minecraftforge/client/event/RenderPlayerEvent$Pre.getEntity:()Lnet/minecraft/world/entity/player/Player;
+ 15: aload_1
+ 16: if_acmpeq 20
+ 19: return
+ 20: aload_1
+ 21: invokevirtual #348 // Method net/minecraft/client/player/AbstractClientPlayer.m_21205_:()Lnet/minecraft/world/item/ItemStack;
+ 24: astore_2
+ 25: aload_2
+ 26: invokevirtual #163 // Method net/minecraft/world/item/ItemStack.m_41720_:()Lnet/minecraft/world/item/Item;
+ 29: instanceof #167 // class com/ogaba/sa_combat/combat/weapon/NailGunItem
+ 32: ifne 36
+ 35: return
+ 36: invokestatic #190 // Method com/ogaba/sa_combat/client/render/NailGunAimClient.getProgress:()F
+ 39: ldc_w #349 // float 0.01f
+ 42: fcmpl
+ 43: ifgt 53
+ 46: aload_1
+ 47: invokevirtual #352 // Method net/minecraft/client/player/AbstractClientPlayer.m_6117_:()Z
+ 50: ifeq 57
+ 53: iconst_1
+ 54: goto 58
+ 57: iconst_0
+ 58: istore_3
+ 59: iload_3
+ 60: ifne 64
+ 63: return
+ 64: aload_0
+ 65: invokevirtual #356 // Method net/minecraftforge/client/event/RenderPlayerEvent$Pre.getRenderer:()Lnet/minecraft/client/renderer/entity/player/PlayerRenderer;
+ 68: invokevirtual #362 // Method net/minecraft/client/renderer/entity/player/PlayerRenderer.m_7200_:()Lnet/minecraft/client/model/EntityModel;
+ 71: checkcast #364 // class net/minecraft/client/model/PlayerModel
+ 74: astore 4
+ 76: aload_1
+ 77: invokevirtual #368 // Method net/minecraft/client/player/AbstractClientPlayer.m_5737_:()Lnet/minecraft/world/entity/HumanoidArm;
+ 80: astore 5
+ 82: aload 5
+ 84: getstatic #374 // Field net/minecraft/world/entity/HumanoidArm.RIGHT:Lnet/minecraft/world/entity/HumanoidArm;
+ 87: if_acmpne 109
+ 90: aload 4
+ 92: getstatic #380 // Field com/ogaba/sa_combat/client/SACombatArmPoses.NAIL_GUN_AIM:Lnet/minecraft/client/model/HumanoidModel$ArmPose;
+ 95: putfield #383 // Field net/minecraft/client/model/PlayerModel.f_102816_:Lnet/minecraft/client/model/HumanoidModel$ArmPose;
+ 98: aload 4
+ 100: getstatic #386 // Field net/minecraft/client/model/HumanoidModel$ArmPose.ITEM:Lnet/minecraft/client/model/HumanoidModel$ArmPose;
+ 103: putfield #389 // Field net/minecraft/client/model/PlayerModel.f_102815_:Lnet/minecraft/client/model/HumanoidModel$ArmPose;
+ 106: goto 125
+ 109: aload 4
+ 111: getstatic #380 // Field com/ogaba/sa_combat/client/SACombatArmPoses.NAIL_GUN_AIM:Lnet/minecraft/client/model/HumanoidModel$ArmPose;
+ 114: putfield #389 // Field net/minecraft/client/model/PlayerModel.f_102815_:Lnet/minecraft/client/model/HumanoidModel$ArmPose;
+ 117: aload 4
+ 119: getstatic #386 // Field net/minecraft/client/model/HumanoidModel$ArmPose.ITEM:Lnet/minecraft/client/model/HumanoidModel$ArmPose;
+ 122: putfield #383 // Field net/minecraft/client/model/PlayerModel.f_102816_:Lnet/minecraft/client/model/HumanoidModel$ArmPose;
+ 125: return
+
+ public static void onNailGunAimMovement(net.minecraftforge.client.event.MovementInputUpdateEvent);
+ Code:
+ 0: aload_0
+ 1: invokevirtual #403 // Method net/minecraftforge/client/event/MovementInputUpdateEvent.getEntity:()Lnet/minecraft/world/entity/player/Player;
+ 4: astore_1
+ 5: aload_1
+ 6: invokevirtual #154 // Method net/minecraft/world/entity/player/Player.m_21205_:()Lnet/minecraft/world/item/ItemStack;
+ 9: invokevirtual #163 // Method net/minecraft/world/item/ItemStack.m_41720_:()Lnet/minecraft/world/item/Item;
+ 12: instanceof #167 // class com/ogaba/sa_combat/combat/weapon/NailGunItem
+ 15: ifne 19
+ 18: return
+ 19: invokestatic #190 // Method com/ogaba/sa_combat/client/render/NailGunAimClient.getProgress:()F
+ 22: fstore_2
+ 23: fload_2
+ 24: ldc_w #349 // float 0.01f
+ 27: fcmpg
+ 28: ifgt 32
+ 31: return
+ 32: invokestatic #406 // Method com/ogaba/sa_combat/client/render/NailGunAimClient.getMovementMultiplier:()F
+ 35: fstore_3
+ 36: aload_0
+ 37: invokevirtual #410 // Method net/minecraftforge/client/event/MovementInputUpdateEvent.getInput:()Lnet/minecraft/client/player/Input;
+ 40: dup
+ 41: getfield #415 // Field net/minecraft/client/player/Input.f_108566_:F
+ 44: fload_3
+ 45: fmul
+ 46: putfield #415 // Field net/minecraft/client/player/Input.f_108566_:F
+ 49: aload_0
+ 50: invokevirtual #410 // Method net/minecraftforge/client/event/MovementInputUpdateEvent.getInput:()Lnet/minecraft/client/player/Input;
+ 53: dup
+ 54: getfield #418 // Field net/minecraft/client/player/Input.f_108567_:F
+ 57: fload_3
+ 58: fmul
+ 59: putfield #418 // Field net/minecraft/client/player/Input.f_108567_:F
+ 62: fload_2
+ 63: ldc_w #419 // float 0.05f
+ 66: fcmpl
+ 67: ifle 82
+ 70: aload_1
+ 71: invokevirtual #422 // Method net/minecraft/world/entity/player/Player.m_20142_:()Z
+ 74: ifeq 82
+ 77: aload_1
+ 78: iconst_0
+ 79: invokevirtual #425 // Method net/minecraft/world/entity/player/Player.m_6858_:(Z)V
+ 82: return
+
+ private static void tickCrossbowAmmoCycle();
+ Code:
+ 0: invokestatic #144 // Method net/minecraft/client/Minecraft.m_91087_:()Lnet/minecraft/client/Minecraft;
+ 3: astore_0
+ 4: aload_0
+ 5: getfield #148 // Field net/minecraft/client/Minecraft.f_91074_:Lnet/minecraft/client/player/LocalPlayer;
+ 8: astore_1
+ 9: aload_1
+ 10: ifnull 20
+ 13: aload_0
+ 14: getfield #432 // Field net/minecraft/client/Minecraft.f_91080_:Lnet/minecraft/client/gui/screens/Screen;
+ 17: ifnull 25
+ 20: iconst_0
+ 21: putstatic #434 // Field crossbowCycleWasDown:Z
+ 24: return
+ 25: aload_1
+ 26: invokevirtual #154 // Method net/minecraft/world/entity/player/Player.m_21205_:()Lnet/minecraft/world/item/ItemStack;
+ 29: invokevirtual #163 // Method net/minecraft/world/item/ItemStack.m_41720_:()Lnet/minecraft/world/item/Item;
+ 32: instanceof #46 // class com/ogaba/sa_combat/combat/weapon/TacticalCrossbowItem
+ 35: ifne 51
+ 38: aload_1
+ 39: invokevirtual #157 // Method net/minecraft/world/entity/player/Player.m_21206_:()Lnet/minecraft/world/item/ItemStack;
+ 42: invokevirtual #163 // Method net/minecraft/world/item/ItemStack.m_41720_:()Lnet/minecraft/world/item/Item;
+ 45: instanceof #46 // class com/ogaba/sa_combat/combat/weapon/TacticalCrossbowItem
+ 48: ifeq 55
+ 51: iconst_1
+ 52: goto 56
+ 55: iconst_0
+ 56: istore_2
+ 57: iload_2
+ 58: ifne 66
+ 61: iconst_0
+ 62: putstatic #434 // Field crossbowCycleWasDown:Z
+ 65: return
+ 66: aload_0
+ 67: getfield #214 // Field net/minecraft/client/Minecraft.f_91066_:Lnet/minecraft/client/Options;
+ 70: getfield #438 // Field net/minecraft/client/Options.f_92096_:Lnet/minecraft/client/KeyMapping;
+ 73: invokevirtual #443 // Method net/minecraft/client/KeyMapping.m_90857_:()Z
+ 76: ifeq 90
+ 79: aload_1
+ 80: invokevirtual #446 // Method net/minecraft/world/entity/player/Player.m_6144_:()Z
+ 83: ifeq 90
+ 86: iconst_1
+ 87: goto 91
+ 90: iconst_0
+ 91: istore_3
+ 92: getstatic #434 // Field crossbowCycleWasDown:Z
+ 95: istore 4
+ 97: iload_3
+ 98: putstatic #434 // Field crossbowCycleWasDown:Z
+ 101: iload_3
+ 102: ifeq 123
+ 105: iload 4
+ 107: ifne 123
+ 110: getstatic #452 // Field com/ogaba/sa_combat/network/ModMessages.INSTANCE:Lnet/minecraftforge/network/simple/SimpleChannel;
+ 113: new #454 // class com/ogaba/sa_combat/network/packet/CycleBoltTypeC2SPacket
+ 116: dup
+ 117: invokespecial #455 // Method com/ogaba/sa_combat/network/packet/CycleBoltTypeC2SPacket."":()V
+ 120: invokevirtual #461 // Method net/minecraftforge/network/simple/SimpleChannel.sendToServer:(Ljava/lang/Object;)V
+ 123: return
+
+ public static void onNailGunInteractionKey(net.minecraftforge.client.event.InputEvent$InteractionKeyMappingTriggered);
+ Code:
+ 0: invokestatic #144 // Method net/minecraft/client/Minecraft.m_91087_:()Lnet/minecraft/client/Minecraft;
+ 3: astore_1
+ 4: aload_1
+ 5: getfield #148 // Field net/minecraft/client/Minecraft.f_91074_:Lnet/minecraft/client/player/LocalPlayer;
+ 8: astore_2
+ 9: aload_2
+ 10: ifnull 33
+ 13: aload_1
+ 14: getfield #432 // Field net/minecraft/client/Minecraft.f_91080_:Lnet/minecraft/client/gui/screens/Screen;
+ 17: ifnonnull 33
+ 20: aload_2
+ 21: invokevirtual #154 // Method net/minecraft/world/entity/player/Player.m_21205_:()Lnet/minecraft/world/item/ItemStack;
+ 24: invokevirtual #163 // Method net/minecraft/world/item/ItemStack.m_41720_:()Lnet/minecraft/world/item/Item;
+ 27: instanceof #167 // class com/ogaba/sa_combat/combat/weapon/NailGunItem
+ 30: ifne 34
+ 33: return
+ 34: aload_0
+ 35: invokevirtual #472 // Method net/minecraftforge/client/event/InputEvent$InteractionKeyMappingTriggered.isAttack:()Z
+ 38: ifne 48
+ 41: aload_0
+ 42: invokevirtual #475 // Method net/minecraftforge/client/event/InputEvent$InteractionKeyMappingTriggered.isUseItem:()Z
+ 45: ifeq 58
+ 48: aload_0
+ 49: iconst_0
+ 50: invokevirtual #478 // Method net/minecraftforge/client/event/InputEvent$InteractionKeyMappingTriggered.setSwingHand:(Z)V
+ 53: aload_0
+ 54: iconst_1
+ 55: invokevirtual #479 // Method net/minecraftforge/client/event/InputEvent$InteractionKeyMappingTriggered.setCanceled:(Z)V
+ 58: return
+
+ private static void tickNailGunThirdPersonSounds();
+ Code:
+ 0: invokestatic #144 // Method net/minecraft/client/Minecraft.m_91087_:()Lnet/minecraft/client/Minecraft;
+ 3: astore_0
+ 4: aload_0
+ 5: getfield #148 // Field net/minecraft/client/Minecraft.f_91074_:Lnet/minecraft/client/player/LocalPlayer;
+ 8: astore_1
+ 9: aload_1
+ 10: ifnull 33
+ 13: aload_0
+ 14: getfield #432 // Field net/minecraft/client/Minecraft.f_91080_:Lnet/minecraft/client/gui/screens/Screen;
+ 17: ifnonnull 33
+ 20: aload_0
+ 21: getfield #214 // Field net/minecraft/client/Minecraft.f_91066_:Lnet/minecraft/client/Options;
+ 24: invokevirtual #484 // Method net/minecraft/client/Options.m_92176_:()Lnet/minecraft/client/CameraType;
+ 27: invokevirtual #489 // Method net/minecraft/client/CameraType.m_90612_:()Z
+ 30: ifeq 44
+ 33: ldc2_w #490 // long -9223372036854775808l
+ 36: putstatic #493 // Field thirdPersonNailGunStackId:J
+ 39: iconst_0
+ 40: putstatic #495 // Field thirdPersonNailGunReloadWasActive:Z
+ 43: return
+ 44: aload_1
+ 45: invokevirtual #154 // Method net/minecraft/world/entity/player/Player.m_21205_:()Lnet/minecraft/world/item/ItemStack;
+ 48: astore_2
+ 49: aload_2
+ 50: invokevirtual #163 // Method net/minecraft/world/item/ItemStack.m_41720_:()Lnet/minecraft/world/item/Item;
+ 53: instanceof #167 // class com/ogaba/sa_combat/combat/weapon/NailGunItem
+ 56: ifne 70
+ 59: ldc2_w #490 // long -9223372036854775808l
+ 62: putstatic #493 // Field thirdPersonNailGunStackId:J
+ 65: iconst_0
+ 66: putstatic #495 // Field thirdPersonNailGunReloadWasActive:Z
+ 69: return
+ 70: aload_2
+ 71: invokestatic #501 // InterfaceMethod software/bernie/geckolib/animatable/GeoItem.getId:(Lnet/minecraft/world/item/ItemStack;)J
+ 74: lstore_3
+ 75: getstatic #493 // Field thirdPersonNailGunStackId:J
+ 78: lload_3
+ 79: lcmp
+ 80: ifeq 125
+ 83: lload_3
+ 84: putstatic #493 // Field thirdPersonNailGunStackId:J
+ 87: iconst_0
+ 88: putstatic #495 // Field thirdPersonNailGunReloadWasActive:Z
+ 91: aload_1
+ 92: invokevirtual #505 // Method net/minecraft/world/entity/player/Player.m_9236_:()Lnet/minecraft/world/level/Level;
+ 95: aload_1
+ 96: invokevirtual #509 // Method net/minecraft/world/entity/player/Player.m_20185_:()D
+ 99: aload_1
+ 100: invokevirtual #512 // Method net/minecraft/world/entity/player/Player.m_20186_:()D
+ 103: aload_1
+ 104: invokevirtual #515 // Method net/minecraft/world/entity/player/Player.m_20189_:()D
+ 107: getstatic #521 // Field com/ogaba/sa_combat/registry/ModSounds.NAIL_GUN_DRAW:Lnet/minecraftforge/registries/RegistryObject;
+ 110: invokevirtual #526 // Method net/minecraftforge/registries/RegistryObject.get:()Ljava/lang/Object;
+ 113: checkcast #528 // class net/minecraft/sounds/SoundEvent
+ 116: getstatic #534 // Field net/minecraft/sounds/SoundSource.PLAYERS:Lnet/minecraft/sounds/SoundSource;
+ 119: fconst_1
+ 120: fconst_1
+ 121: iconst_0
+ 122: invokevirtual #540 // Method net/minecraft/world/level/Level.m_7785_:(DDDLnet/minecraft/sounds/SoundEvent;Lnet/minecraft/sounds/SoundSource;FFZ)V
+ 125: aload_2
+ 126: invokestatic #544 // Method com/ogaba/sa_combat/combat/weapon/NailGunItem.isReloading:(Lnet/minecraft/world/item/ItemStack;)Z
+ 129: ifne 139
+ 132: aload_2
+ 133: invokestatic #547 // Method com/ogaba/sa_combat/combat/weapon/NailGunItem.isClientReloadAnimationActive:(Lnet/minecraft/world/item/ItemStack;)Z
+ 136: ifeq 143
+ 139: iconst_1
+ 140: goto 144
+ 143: iconst_0
+ 144: istore 5
+ 146: iload 5
+ 148: ifeq 191
+ 151: getstatic #495 // Field thirdPersonNailGunReloadWasActive:Z
+ 154: ifne 191
+ 157: aload_1
+ 158: invokevirtual #505 // Method net/minecraft/world/entity/player/Player.m_9236_:()Lnet/minecraft/world/level/Level;
+ 161: aload_1
+ 162: invokevirtual #509 // Method net/minecraft/world/entity/player/Player.m_20185_:()D
+ 165: aload_1
+ 166: invokevirtual #512 // Method net/minecraft/world/entity/player/Player.m_20186_:()D
+ 169: aload_1
+ 170: invokevirtual #515 // Method net/minecraft/world/entity/player/Player.m_20189_:()D
+ 173: getstatic #550 // Field com/ogaba/sa_combat/registry/ModSounds.NAIL_GUN_RELOAD:Lnet/minecraftforge/registries/RegistryObject;
+ 176: invokevirtual #526 // Method net/minecraftforge/registries/RegistryObject.get:()Ljava/lang/Object;
+ 179: checkcast #528 // class net/minecraft/sounds/SoundEvent
+ 182: getstatic #534 // Field net/minecraft/sounds/SoundSource.PLAYERS:Lnet/minecraft/sounds/SoundSource;
+ 185: fconst_1
+ 186: fconst_1
+ 187: iconst_0
+ 188: invokevirtual #540 // Method net/minecraft/world/level/Level.m_7785_:(DDDLnet/minecraft/sounds/SoundEvent;Lnet/minecraft/sounds/SoundSource;FFZ)V
+ 191: iload 5
+ 193: putstatic #495 // Field thirdPersonNailGunReloadWasActive:Z
+ 196: return
+
+ private static void tickNailGunTrigger();
+ Code:
+ 0: invokestatic #144 // Method net/minecraft/client/Minecraft.m_91087_:()Lnet/minecraft/client/Minecraft;
+ 3: astore_0
+ 4: aload_0
+ 5: getfield #148 // Field net/minecraft/client/Minecraft.f_91074_:Lnet/minecraft/client/player/LocalPlayer;
+ 8: astore_1
+ 9: aload_1
+ 10: ifnull 20
+ 13: aload_0
+ 14: getfield #432 // Field net/minecraft/client/Minecraft.f_91080_:Lnet/minecraft/client/gui/screens/Screen;
+ 17: ifnull 29
+ 20: iconst_0
+ 21: putstatic #555 // Field nailGunTriggerWasDown:Z
+ 24: fconst_0
+ 25: putstatic #557 // Field nailGunAutoFireAccumulator:F
+ 28: return
+ 29: aload_1
+ 30: invokestatic #561 // Method resolveNailGunHand:(Lnet/minecraft/world/entity/player/Player;)Lnet/minecraft/world/InteractionHand;
+ 33: astore_2
+ 34: aload_2
+ 35: ifnonnull 47
+ 38: iconst_0
+ 39: putstatic #555 // Field nailGunTriggerWasDown:Z
+ 42: fconst_0
+ 43: putstatic #557 // Field nailGunAutoFireAccumulator:F
+ 46: return
+ 47: aload_1
+ 48: aload_2
+ 49: invokevirtual #565 // Method net/minecraft/world/entity/player/Player.m_21120_:(Lnet/minecraft/world/InteractionHand;)Lnet/minecraft/world/item/ItemStack;
+ 52: astore_3
+ 53: aload_0
+ 54: getfield #214 // Field net/minecraft/client/Minecraft.f_91066_:Lnet/minecraft/client/Options;
+ 57: getfield #438 // Field net/minecraft/client/Options.f_92096_:Lnet/minecraft/client/KeyMapping;
+ 60: invokevirtual #443 // Method net/minecraft/client/KeyMapping.m_90857_:()Z
+ 63: istore 4
+ 65: getstatic #555 // Field nailGunTriggerWasDown:Z
+ 68: istore 5
+ 70: iload 4
+ 72: putstatic #555 // Field nailGunTriggerWasDown:Z
+ 75: iload 4
+ 77: ifeq 101
+ 80: aload_3
+ 81: invokestatic #544 // Method com/ogaba/sa_combat/combat/weapon/NailGunItem.isReloading:(Lnet/minecraft/world/item/ItemStack;)Z
+ 84: ifne 101
+ 87: aload_3
+ 88: invokestatic #547 // Method com/ogaba/sa_combat/combat/weapon/NailGunItem.isClientReloadAnimationActive:(Lnet/minecraft/world/item/ItemStack;)Z
+ 91: ifne 101
+ 94: aload_1
+ 95: invokevirtual #422 // Method net/minecraft/world/entity/player/Player.m_20142_:()Z
+ 98: ifeq 106
+ 101: fconst_0
+ 102: putstatic #557 // Field nailGunAutoFireAccumulator:F
+ 105: return
+ 106: iload 5
+ 108: ifne 121
+ 111: iconst_1
+ 112: istore 6
+ 114: fconst_0
+ 115: putstatic #557 // Field nailGunAutoFireAccumulator:F
+ 118: goto 159
+ 121: getstatic #557 // Field nailGunAutoFireAccumulator:F
+ 124: ldc_w #566 // float 0.6f
+ 127: fadd
+ 128: putstatic #557 // Field nailGunAutoFireAccumulator:F
+ 131: getstatic #557 // Field nailGunAutoFireAccumulator:F
+ 134: fconst_1
+ 135: fcmpl
+ 136: iflt 143
+ 139: iconst_1
+ 140: goto 144
+ 143: iconst_0
+ 144: istore 6
+ 146: iload 6
+ 148: ifeq 159
+ 151: getstatic #557 // Field nailGunAutoFireAccumulator:F
+ 154: fconst_1
+ 155: fsub
+ 156: putstatic #557 // Field nailGunAutoFireAccumulator:F
+ 159: iload 6
+ 161: ifeq 171
+ 164: aload_3
+ 165: invokestatic #570 // Method com/ogaba/sa_combat/combat/weapon/NailGunItem.getMagazine:(Lnet/minecraft/world/item/ItemStack;)I
+ 168: ifgt 172
+ 171: return
+ 172: aload_3
+ 173: invokevirtual #163 // Method net/minecraft/world/item/ItemStack.m_41720_:()Lnet/minecraft/world/item/Item;
+ 176: checkcast #167 // class com/ogaba/sa_combat/combat/weapon/NailGunItem
+ 179: aload_1
+ 180: invokevirtual #505 // Method net/minecraft/world/entity/player/Player.m_9236_:()Lnet/minecraft/world/level/Level;
+ 183: aload_1
+ 184: aload_3
+ 185: aload_2
+ 186: invokevirtual #574 // Method com/ogaba/sa_combat/combat/weapon/NailGunItem.fire:(Lnet/minecraft/world/level/Level;Lnet/minecraft/world/entity/player/Player;Lnet/minecraft/world/item/ItemStack;Lnet/minecraft/world/InteractionHand;)V
+ 189: aload_1
+ 190: invokevirtual #505 // Method net/minecraft/world/entity/player/Player.m_9236_:()Lnet/minecraft/world/level/Level;
+ 193: aload_1
+ 194: aload_3
+ 195: invokestatic #578 // Method com/ogaba/sa_combat/combat/weapon/NailGunItem.playLocalShotSound:(Lnet/minecraft/world/level/Level;Lnet/minecraft/world/entity/player/Player;Lnet/minecraft/world/item/ItemStack;)V
+ 198: getstatic #452 // Field com/ogaba/sa_combat/network/ModMessages.INSTANCE:Lnet/minecraftforge/network/simple/SimpleChannel;
+ 201: new #580 // class com/ogaba/sa_combat/network/packet/FireNailGunC2SPacket
+ 204: dup
+ 205: aload_2
+ 206: invokestatic #190 // Method com/ogaba/sa_combat/client/render/NailGunAimClient.getProgress:()F
+ 209: invokespecial #583 // Method com/ogaba/sa_combat/network/packet/FireNailGunC2SPacket."":(Lnet/minecraft/world/InteractionHand;F)V
+ 212: invokevirtual #461 // Method net/minecraftforge/network/simple/SimpleChannel.sendToServer:(Ljava/lang/Object;)V
+ 215: return
+
+ private static void tickNailGunReloadKey();
+ Code:
+ 0: invokestatic #144 // Method net/minecraft/client/Minecraft.m_91087_:()Lnet/minecraft/client/Minecraft;
+ 3: astore_0
+ 4: getstatic #590 // Field com/ogaba/sa_combat/client/ModKeyBindings.RELOAD_NAIL_GUN:Lnet/minecraft/client/KeyMapping;
+ 7: invokevirtual #593 // Method net/minecraft/client/KeyMapping.m_90859_:()Z
+ 10: ifeq 150
+ 13: aload_0
+ 14: getfield #148 // Field net/minecraft/client/Minecraft.f_91074_:Lnet/minecraft/client/player/LocalPlayer;
+ 17: astore_1
+ 18: aload_1
+ 19: ifnonnull 26
+ 22: aconst_null
+ 23: goto 30
+ 26: aload_1
+ 27: invokestatic #561 // Method resolveNailGunHand:(Lnet/minecraft/world/entity/player/Player;)Lnet/minecraft/world/InteractionHand;
+ 30: astore_2
+ 31: aload_1
+ 32: ifnull 4
+ 35: aload_2
+ 36: ifnonnull 42
+ 39: goto 4
+ 42: aload_1
+ 43: aload_2
+ 44: invokevirtual #565 // Method net/minecraft/world/entity/player/Player.m_21120_:(Lnet/minecraft/world/InteractionHand;)Lnet/minecraft/world/item/ItemStack;
+ 47: astore_3
+ 48: aload_3
+ 49: invokevirtual #163 // Method net/minecraft/world/item/ItemStack.m_41720_:()Lnet/minecraft/world/item/Item;
+ 52: instanceof #167 // class com/ogaba/sa_combat/combat/weapon/NailGunItem
+ 55: ifne 61
+ 58: goto 4
+ 61: aload_1
+ 62: invokevirtual #597 // Method net/minecraft/world/entity/player/Player.m_150110_:()Lnet/minecraft/world/entity/player/Abilities;
+ 65: getfield #602 // Field net/minecraft/world/entity/player/Abilities.f_35937_:Z
+ 68: ifne 78
+ 71: aload_1
+ 72: invokestatic #606 // Method com/ogaba/sa_combat/combat/weapon/NailGunItem.countReserveAmmo:(Lnet/minecraft/world/entity/player/Player;)I
+ 75: ifle 82
+ 78: iconst_1
+ 79: goto 83
+ 82: iconst_0
+ 83: istore 4
+ 85: aload_3
+ 86: invokestatic #544 // Method com/ogaba/sa_combat/combat/weapon/NailGunItem.isReloading:(Lnet/minecraft/world/item/ItemStack;)Z
+ 89: ifne 119
+ 92: aload_3
+ 93: invokestatic #547 // Method com/ogaba/sa_combat/combat/weapon/NailGunItem.isClientReloadAnimationActive:(Lnet/minecraft/world/item/ItemStack;)Z
+ 96: ifne 119
+ 99: aload_3
+ 100: invokestatic #570 // Method com/ogaba/sa_combat/combat/weapon/NailGunItem.getMagazine:(Lnet/minecraft/world/item/ItemStack;)I
+ 103: aload_3
+ 104: invokestatic #609 // Method com/ogaba/sa_combat/combat/weapon/NailGunItem.magazineCapacity:(Lnet/minecraft/world/item/ItemStack;)I
+ 107: if_icmpge 119
+ 110: iload 4
+ 112: ifeq 119
+ 115: iconst_1
+ 116: goto 120
+ 119: iconst_0
+ 120: istore 5
+ 122: iload 5
+ 124: ifne 130
+ 127: goto 4
+ 130: aload_3
+ 131: invokestatic #613 // Method com/ogaba/sa_combat/combat/weapon/NailGunItem.markClientReloadAnimation:(Lnet/minecraft/world/item/ItemStack;)V
+ 134: getstatic #452 // Field com/ogaba/sa_combat/network/ModMessages.INSTANCE:Lnet/minecraftforge/network/simple/SimpleChannel;
+ 137: new #615 // class com/ogaba/sa_combat/network/packet/ReloadNailGunC2SPacket
+ 140: dup
+ 141: invokespecial #616 // Method com/ogaba/sa_combat/network/packet/ReloadNailGunC2SPacket."":()V
+ 144: invokevirtual #461 // Method net/minecraftforge/network/simple/SimpleChannel.sendToServer:(Ljava/lang/Object;)V
+ 147: goto 4
+ 150: return
+
+ private static net.minecraft.world.InteractionHand resolveNailGunHand(net.minecraft.world.entity.player.Player);
+ Code:
+ 0: aload_0
+ 1: invokevirtual #154 // Method net/minecraft/world/entity/player/Player.m_21205_:()Lnet/minecraft/world/item/ItemStack;
+ 4: invokevirtual #163 // Method net/minecraft/world/item/ItemStack.m_41720_:()Lnet/minecraft/world/item/Item;
+ 7: instanceof #167 // class com/ogaba/sa_combat/combat/weapon/NailGunItem
+ 10: ifeq 17
+ 13: getstatic #179 // Field net/minecraft/world/InteractionHand.MAIN_HAND:Lnet/minecraft/world/InteractionHand;
+ 16: areturn
+ 17: aconst_null
+ 18: areturn
+
+ public static void onItemTooltip(net.minecraftforge.event.entity.player.ItemTooltipEvent);
+ Code:
+ 0: aload_0
+ 1: invokevirtual #626 // Method net/minecraftforge/event/entity/player/ItemTooltipEvent.getItemStack:()Lnet/minecraft/world/item/ItemStack;
+ 4: astore_1
+ 5: aload_1
+ 6: invokevirtual #629 // Method net/minecraft/world/item/ItemStack.m_41619_:()Z
+ 9: ifne 19
+ 12: aload_1
+ 13: invokestatic #634 // Method com/ogaba/sa_combat/combat/weapon/WeaponSlotProfile.isUpgradeableWeapon:(Lnet/minecraft/world/item/ItemStack;)Z
+ 16: ifne 20
+ 19: return
+ 20: aload_1
+ 21: invokevirtual #163 // Method net/minecraft/world/item/ItemStack.m_41720_:()Lnet/minecraft/world/item/Item;
+ 24: instanceof #636 // class com/ogaba/sa_combat/combat/weapon/BaseMeleeWeapon
+ 27: istore_2
+ 28: iload_2
+ 29: ifne 70
+ 32: aload_1
+ 33: invokestatic #641 // Method com/ogaba/sa_combat/combat/attachment/WeaponAttachmentData.hasAnyAttachment:(Lnet/minecraft/world/item/ItemStack;)Z
+ 36: ifne 70
+ 39: aload_1
+ 40: invokestatic #646 // Method com/ogaba/sa_combat/combat/upgrade/WeaponUpgradeData.hasModifier:(Lnet/minecraft/world/item/ItemStack;)Z
+ 43: ifne 70
+ 46: aload_1
+ 47: invokestatic #650 // Method com/ogaba/sa_combat/combat/upgrade/WeaponUpgradeData.getAttributeUpgrades:(Lnet/minecraft/world/item/ItemStack;)Ljava/util/List;
+ 50: invokeinterface #655, 1 // InterfaceMethod java/util/List.isEmpty:()Z
+ 55: ifeq 70
+ 58: aload_1
+ 59: invokestatic #658 // Method com/ogaba/sa_combat/combat/upgrade/WeaponUpgradeData.getAbilityUpgrades:(Lnet/minecraft/world/item/ItemStack;)Ljava/util/List;
+ 62: invokeinterface #655, 1 // InterfaceMethod java/util/List.isEmpty:()Z
+ 67: ifne 74
+ 70: iconst_1
+ 71: goto 75
+ 74: iconst_0
+ 75: istore_3
+ 76: iload_3
+ 77: ifne 81
+ 80: return
+ 81: aload_0
+ 82: invokevirtual #662 // Method net/minecraftforge/event/entity/player/ItemTooltipEvent.getToolTip:()Ljava/util/List;
+ 85: invokestatic #666 // Method removeAttributeLinesBeforeMainHandHeader:(Ljava/util/List;)V
+ 88: aload_0
+ 89: aload_1
+ 90: invokestatic #670 // Method replaceMainHandAttributeTooltip:(Lnet/minecraftforge/event/entity/player/ItemTooltipEvent;Lnet/minecraft/world/item/ItemStack;)V
+ 93: iload_2
+ 94: ifne 132
+ 97: aload_1
+ 98: invokestatic #675 // Method com/ogaba/sa_combat/combat/weapon/WeaponTooltipHelper.buildExternalTooltip:(Lnet/minecraft/world/item/ItemStack;)Ljava/util/List;
+ 101: astore 4
+ 103: aload 4
+ 105: invokeinterface #655, 1 // InterfaceMethod java/util/List.isEmpty:()Z
+ 110: ifne 132
+ 113: aload_0
+ 114: invokevirtual #662 // Method net/minecraftforge/event/entity/player/ItemTooltipEvent.getToolTip:()Ljava/util/List;
+ 117: aload_0
+ 118: invokevirtual #662 // Method net/minecraftforge/event/entity/player/ItemTooltipEvent.getToolTip:()Ljava/util/List;
+ 121: invokestatic #679 // Method findVanillaAttributeInsertIndex:(Ljava/util/List;)I
+ 124: aload 4
+ 126: invokeinterface #683, 3 // InterfaceMethod java/util/List.addAll:(ILjava/util/Collection;)Z
+ 131: pop
+ 132: aload_0
+ 133: invokevirtual #662 // Method net/minecraftforge/event/entity/player/ItemTooltipEvent.getToolTip:()Ljava/util/List;
+ 136: invokestatic #666 // Method removeAttributeLinesBeforeMainHandHeader:(Ljava/util/List;)V
+ 139: return
+
+ private static void removeAttributeLinesBeforeMainHandHeader(java.util.List);
+ Code:
+ 0: aload_0
+ 1: invokestatic #693 // Method findMainHandHeaderIndex:(Ljava/util/List;)I
+ 4: istore_1
+ 5: iload_1
+ 6: ifge 10
+ 9: return
+ 10: iload_1
+ 11: iconst_1
+ 12: isub
+ 13: istore_2
+ 14: iload_2
+ 15: iconst_1
+ 16: if_icmplt 137
+ 19: aload_0
+ 20: iload_2
+ 21: invokeinterface #696, 2 // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
+ 26: checkcast #698 // class net/minecraft/network/chat/Component
+ 29: invokeinterface #702, 1 // InterfaceMethod net/minecraft/network/chat/Component.getString:()Ljava/lang/String;
+ 34: astore_3
+ 35: aload_3
+ 36: invokestatic #706 // Method isMainHandAttributeLine:(Ljava/lang/String;)Z
+ 39: ifeq 131
+ 42: aload_0
+ 43: iload_2
+ 44: invokeinterface #709, 2 // InterfaceMethod java/util/List.remove:(I)Ljava/lang/Object;
+ 49: pop
+ 50: iload_2
+ 51: aload_0
+ 52: invokeinterface #713, 1 // InterfaceMethod java/util/List.size:()I
+ 57: if_icmpge 92
+ 60: aload_0
+ 61: iload_2
+ 62: invokeinterface #696, 2 // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
+ 67: checkcast #698 // class net/minecraft/network/chat/Component
+ 70: invokeinterface #702, 1 // InterfaceMethod net/minecraft/network/chat/Component.getString:()Ljava/lang/String;
+ 75: invokevirtual #718 // Method java/lang/String.isBlank:()Z
+ 78: ifeq 92
+ 81: aload_0
+ 82: iload_2
+ 83: invokeinterface #709, 2 // InterfaceMethod java/util/List.remove:(I)Ljava/lang/Object;
+ 88: pop
+ 89: goto 131
+ 92: iload_2
+ 93: iconst_1
+ 94: isub
+ 95: ifle 131
+ 98: aload_0
+ 99: iload_2
+ 100: iconst_1
+ 101: isub
+ 102: invokeinterface #696, 2 // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
+ 107: checkcast #698 // class net/minecraft/network/chat/Component
+ 110: invokeinterface #702, 1 // InterfaceMethod net/minecraft/network/chat/Component.getString:()Ljava/lang/String;
+ 115: invokevirtual #718 // Method java/lang/String.isBlank:()Z
+ 118: ifeq 131
+ 121: aload_0
+ 122: iload_2
+ 123: iconst_1
+ 124: isub
+ 125: invokeinterface #709, 2 // InterfaceMethod java/util/List.remove:(I)Ljava/lang/Object;
+ 130: pop
+ 131: iinc 2, -1
+ 134: goto 14
+ 137: return
+
+ private static void replaceMainHandAttributeTooltip(net.minecraftforge.event.entity.player.ItemTooltipEvent, net.minecraft.world.item.ItemStack);
+ Code:
+ 0: aload_0
+ 1: invokevirtual #662 // Method net/minecraftforge/event/entity/player/ItemTooltipEvent.getToolTip:()Ljava/util/List;
+ 4: astore_2
+ 5: aload_2
+ 6: invokestatic #693 // Method findMainHandHeaderIndex:(Ljava/util/List;)I
+ 9: istore_3
+ 10: iload_3
+ 11: ifge 15
+ 14: return
+ 15: iload_3
+ 16: iconst_1
+ 17: iadd
+ 18: istore 4
+ 20: iload 4
+ 22: aload_2
+ 23: invokeinterface #713, 1 // InterfaceMethod java/util/List.size:()I
+ 28: if_icmpge 55
+ 31: aload_2
+ 32: iload 4
+ 34: invokeinterface #696, 2 // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
+ 39: checkcast #698 // class net/minecraft/network/chat/Component
+ 42: aload_1
+ 43: invokestatic #727 // Method isTooltipTechnicalTail:(Lnet/minecraft/network/chat/Component;Lnet/minecraft/world/item/ItemStack;)Z
+ 46: ifne 55
+ 49: iinc 4, 1
+ 52: goto 20
+ 55: aload_2
+ 56: iload_3
+ 57: iload 4
+ 59: invokeinterface #731, 3 // InterfaceMethod java/util/List.subList:(II)Ljava/util/List;
+ 64: invokeinterface #734, 1 // InterfaceMethod java/util/List.clear:()V
+ 69: aload_2
+ 70: iload_3
+ 71: aload_1
+ 72: invokestatic #737 // Method buildUnifiedMainHandAttributeTooltip:(Lnet/minecraft/world/item/ItemStack;)Ljava/util/List;
+ 75: invokeinterface #683, 3 // InterfaceMethod java/util/List.addAll:(ILjava/util/Collection;)Z
+ 80: pop
+ 81: return
+
+ private static boolean isTooltipTechnicalTail(net.minecraft.network.chat.Component, net.minecraft.world.item.ItemStack);
+ Code:
+ 0: aload_0
+ 1: ifnonnull 6
+ 4: iconst_0
+ 5: ireturn
+ 6: aload_0
+ 7: invokeinterface #702, 1 // InterfaceMethod net/minecraft/network/chat/Component.getString:()Ljava/lang/String;
+ 12: invokevirtual #741 // Method java/lang/String.trim:()Ljava/lang/String;
+ 15: astore_2
+ 16: aload_2
+ 17: invokevirtual #742 // Method java/lang/String.isEmpty:()Z
+ 20: ifeq 25
+ 23: iconst_0
+ 24: ireturn
+ 25: aload_1
+ 26: invokevirtual #745 // Method net/minecraft/world/item/ItemStack.m_41763_:()Z
+ 29: ifeq 93
+ 32: aload_1
+ 33: invokevirtual #748 // Method net/minecraft/world/item/ItemStack.m_41768_:()Z
+ 36: ifeq 93
+ 39: ldc_w #750 // String item.durability
+ 42: iconst_2
+ 43: anewarray #4 // class java/lang/Object
+ 46: dup
+ 47: iconst_0
+ 48: aload_1
+ 49: invokevirtual #753 // Method net/minecraft/world/item/ItemStack.m_41776_:()I
+ 52: aload_1
+ 53: invokevirtual #756 // Method net/minecraft/world/item/ItemStack.m_41773_:()I
+ 56: isub
+ 57: invokestatic #762 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
+ 60: aastore
+ 61: dup
+ 62: iconst_1
+ 63: aload_1
+ 64: invokevirtual #753 // Method net/minecraft/world/item/ItemStack.m_41776_:()I
+ 67: invokestatic #762 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
+ 70: aastore
+ 71: invokestatic #766 // InterfaceMethod net/minecraft/network/chat/Component.m_237110_:(Ljava/lang/String;[Ljava/lang/Object;)Lnet/minecraft/network/chat/MutableComponent;
+ 74: astore_3
+ 75: aload_2
+ 76: aload_3
+ 77: invokeinterface #702, 1 // InterfaceMethod net/minecraft/network/chat/Component.getString:()Ljava/lang/String;
+ 82: invokevirtual #741 // Method java/lang/String.trim:()Ljava/lang/String;
+ 85: invokevirtual #770 // Method java/lang/String.equals:(Ljava/lang/Object;)Z
+ 88: ifeq 93
+ 91: iconst_1
+ 92: ireturn
+ 93: aload_2
+ 94: getstatic #776 // Field java/util/Locale.ROOT:Ljava/util/Locale;
+ 97: invokevirtual #780 // Method java/lang/String.toLowerCase:(Ljava/util/Locale;)Ljava/lang/String;
+ 100: astore_3
+ 101: aload_3
+ 102: ldc_w #782 // String nbt
+ 105: invokevirtual #785 // Method java/lang/String.startsWith:(Ljava/lang/String;)Z
+ 108: ifeq 113
+ 111: iconst_1
+ 112: ireturn
+ 113: aload_3
+ 114: ldc_w #787 // String [a-z0-9_.-]+:[a-z0-9_./-]+
+ 117: invokevirtual #790 // Method java/lang/String.matches:(Ljava/lang/String;)Z
+ 120: ireturn
+
+ private static java.util.List buildUnifiedMainHandAttributeTooltip(net.minecraft.world.item.ItemStack);
+ Code:
+ 0: new #797 // class java/util/ArrayList
+ 3: dup
+ 4: invokespecial #798 // Method java/util/ArrayList."":()V
+ 7: astore_1
+ 8: aload_1
+ 9: ldc_w #800 // String item.modifiers.mainhand
+ 12: invokestatic #804 // InterfaceMethod net/minecraft/network/chat/Component.m_237115_:(Ljava/lang/String;)Lnet/minecraft/network/chat/MutableComponent;
+ 15: getstatic #810 // Field net/minecraft/ChatFormatting.GRAY:Lnet/minecraft/ChatFormatting;
+ 18: invokevirtual #816 // Method net/minecraft/network/chat/MutableComponent.m_130940_:(Lnet/minecraft/ChatFormatting;)Lnet/minecraft/network/chat/MutableComponent;
+ 21: invokeinterface #819, 2 // InterfaceMethod java/util/List.add:(Ljava/lang/Object;)Z
+ 26: pop
+ 27: aload_0
+ 28: invokestatic #823 // Method totalAttackDamage:(Lnet/minecraft/world/item/ItemStack;)D
+ 31: dstore_2
+ 32: dload_2
+ 33: dconst_0
+ 34: dcmpl
+ 35: ifle 63
+ 38: aload_1
+ 39: dload_2
+ 40: invokestatic #827 // Method fmtAttribute:(D)Ljava/lang/String;
+ 43: invokedynamic #839, 0 // InvokeDynamic #0:makeConcatWithConstants:(Ljava/lang/String;)Ljava/lang/String;
+ 48: invokestatic #842 // InterfaceMethod net/minecraft/network/chat/Component.m_237113_:(Ljava/lang/String;)Lnet/minecraft/network/chat/MutableComponent;
+ 51: getstatic #845 // Field net/minecraft/ChatFormatting.DARK_GREEN:Lnet/minecraft/ChatFormatting;
+ 54: invokevirtual #816 // Method net/minecraft/network/chat/MutableComponent.m_130940_:(Lnet/minecraft/ChatFormatting;)Lnet/minecraft/network/chat/MutableComponent;
+ 57: invokeinterface #819, 2 // InterfaceMethod java/util/List.add:(Ljava/lang/Object;)Z
+ 62: pop
+ 63: aload_0
+ 64: invokestatic #848 // Method totalAttackSpeed:(Lnet/minecraft/world/item/ItemStack;)D
+ 67: dstore 4
+ 69: aload_1
+ 70: dload 4
+ 72: invokestatic #827 // Method fmtAttribute:(D)Ljava/lang/String;
+ 75: invokedynamic #851, 0 // InvokeDynamic #1:makeConcatWithConstants:(Ljava/lang/String;)Ljava/lang/String;
+ 80: invokestatic #842 // InterfaceMethod net/minecraft/network/chat/Component.m_237113_:(Ljava/lang/String;)Lnet/minecraft/network/chat/MutableComponent;
+ 83: getstatic #845 // Field net/minecraft/ChatFormatting.DARK_GREEN:Lnet/minecraft/ChatFormatting;
+ 86: invokevirtual #816 // Method net/minecraft/network/chat/MutableComponent.m_130940_:(Lnet/minecraft/ChatFormatting;)Lnet/minecraft/network/chat/MutableComponent;
+ 89: invokeinterface #819, 2 // InterfaceMethod java/util/List.add:(Ljava/lang/Object;)Z
+ 94: pop
+ 95: aload_0
+ 96: invokestatic #854 // Method totalAttackKnockback:(Lnet/minecraft/world/item/ItemStack;)D
+ 99: dstore 6
+ 101: dload 6
+ 103: invokestatic #857 // Method java/lang/Math.abs:(D)D
+ 106: ldc2_w #858 // double 0.001d
+ 109: dcmpl
+ 110: ifle 139
+ 113: aload_1
+ 114: dload 6
+ 116: invokestatic #827 // Method fmtAttribute:(D)Ljava/lang/String;
+ 119: invokedynamic #862, 0 // InvokeDynamic #2:makeConcatWithConstants:(Ljava/lang/String;)Ljava/lang/String;
+ 124: invokestatic #842 // InterfaceMethod net/minecraft/network/chat/Component.m_237113_:(Ljava/lang/String;)Lnet/minecraft/network/chat/MutableComponent;
+ 127: getstatic #845 // Field net/minecraft/ChatFormatting.DARK_GREEN:Lnet/minecraft/ChatFormatting;
+ 130: invokevirtual #816 // Method net/minecraft/network/chat/MutableComponent.m_130940_:(Lnet/minecraft/ChatFormatting;)Lnet/minecraft/network/chat/MutableComponent;
+ 133: invokeinterface #819, 2 // InterfaceMethod java/util/List.add:(Ljava/lang/Object;)Z
+ 138: pop
+ 139: aload_0
+ 140: invokestatic #865 // Method totalAttackReach:(Lnet/minecraft/world/item/ItemStack;)D
+ 143: dstore 8
+ 145: aload_1
+ 146: dload 8
+ 148: invokestatic #827 // Method fmtAttribute:(D)Ljava/lang/String;
+ 151: invokedynamic #868, 0 // InvokeDynamic #3:makeConcatWithConstants:(Ljava/lang/String;)Ljava/lang/String;
+ 156: invokestatic #842 // InterfaceMethod net/minecraft/network/chat/Component.m_237113_:(Ljava/lang/String;)Lnet/minecraft/network/chat/MutableComponent;
+ 159: getstatic #845 // Field net/minecraft/ChatFormatting.DARK_GREEN:Lnet/minecraft/ChatFormatting;
+ 162: invokevirtual #816 // Method net/minecraft/network/chat/MutableComponent.m_130940_:(Lnet/minecraft/ChatFormatting;)Lnet/minecraft/network/chat/MutableComponent;
+ 165: invokeinterface #819, 2 // InterfaceMethod java/util/List.add:(Ljava/lang/Object;)Z
+ 170: pop
+ 171: aload_1
+ 172: areturn
+
+ private static boolean isMainHandAttributeLine(java.lang.String);
+ Code:
+ 0: aload_0
+ 1: ifnull 11
+ 4: aload_0
+ 5: invokevirtual #718 // Method java/lang/String.isBlank:()Z
+ 8: ifeq 13
+ 11: iconst_0
+ 12: ireturn
+ 13: aload_0
+ 14: getstatic #776 // Field java/util/Locale.ROOT:Ljava/util/Locale;
+ 17: invokevirtual #780 // Method java/lang/String.toLowerCase:(Ljava/util/Locale;)Ljava/lang/String;
+ 20: astore_1
+ 21: aload_1
+ 22: ldc_w #876 // String attack damage
+ 25: invokevirtual #880 // Method java/lang/String.contains:(Ljava/lang/CharSequence;)Z
+ 28: ifne 121
+ 31: aload_1
+ 32: ldc_w #882 // String attack speed
+ 35: invokevirtual #880 // Method java/lang/String.contains:(Ljava/lang/CharSequence;)Z
+ 38: ifne 121
+ 41: aload_1
+ 42: ldc_w #884 // String attack range
+ 45: invokevirtual #880 // Method java/lang/String.contains:(Ljava/lang/CharSequence;)Z
+ 48: ifne 121
+ 51: aload_1
+ 52: ldc_w #886 // String entity reach
+ 55: invokevirtual #880 // Method java/lang/String.contains:(Ljava/lang/CharSequence;)Z
+ 58: ifne 121
+ 61: aload_1
+ 62: ldc_w #888 // String attack knockback
+ 65: invokevirtual #880 // Method java/lang/String.contains:(Ljava/lang/CharSequence;)Z
+ 68: ifne 121
+ 71: aload_1
+ 72: ldc_w #890 // String dano de ataque
+ 75: invokevirtual #880 // Method java/lang/String.contains:(Ljava/lang/CharSequence;)Z
+ 78: ifne 121
+ 81: aload_1
+ 82: ldc_w #892 // String velocidade de ataque
+ 85: invokevirtual #880 // Method java/lang/String.contains:(Ljava/lang/CharSequence;)Z
+ 88: ifne 121
+ 91: aload_1
+ 92: ldc_w #894 // String alcance de ataque
+ 95: invokevirtual #880 // Method java/lang/String.contains:(Ljava/lang/CharSequence;)Z
+ 98: ifne 121
+ 101: aload_1
+ 102: ldc_w #896 // String repuls
+ 105: invokevirtual #880 // Method java/lang/String.contains:(Ljava/lang/CharSequence;)Z
+ 108: ifne 121
+ 111: aload_1
+ 112: ldc_w #897 // String knockback
+ 115: invokevirtual #880 // Method java/lang/String.contains:(Ljava/lang/CharSequence;)Z
+ 118: ifeq 125
+ 121: iconst_1
+ 122: goto 126
+ 125: iconst_0
+ 126: ireturn
+
+ private static int findMainHandHeaderIndex(java.util.List);
+ Code:
+ 0: iconst_1
+ 1: istore_1
+ 2: iload_1
+ 3: aload_0
+ 4: invokeinterface #713, 1 // InterfaceMethod java/util/List.size:()I
+ 9: if_icmpge 49
+ 12: aload_0
+ 13: iload_1
+ 14: invokeinterface #696, 2 // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
+ 19: checkcast #698 // class net/minecraft/network/chat/Component
+ 22: invokeinterface #702, 1 // InterfaceMethod net/minecraft/network/chat/Component.getString:()Ljava/lang/String;
+ 27: getstatic #776 // Field java/util/Locale.ROOT:Ljava/util/Locale;
+ 30: invokevirtual #780 // Method java/lang/String.toLowerCase:(Ljava/util/Locale;)Ljava/lang/String;
+ 33: astore_2
+ 34: aload_2
+ 35: invokestatic #902 // Method isMainHandHeader:(Ljava/lang/String;)Z
+ 38: ifeq 43
+ 41: iload_1
+ 42: ireturn
+ 43: iinc 1, 1
+ 46: goto 2
+ 49: iconst_m1
+ 50: ireturn
+
+ private static boolean isMainHandHeader(java.lang.String);
+ Code:
+ 0: aload_0
+ 1: ldc_w #904 // String when in main hand
+ 4: invokevirtual #880 // Method java/lang/String.contains:(Ljava/lang/CharSequence;)Z
+ 7: ifne 40
+ 10: aload_0
+ 11: ldc_w #906 // String main hand
+ 14: invokevirtual #880 // Method java/lang/String.contains:(Ljava/lang/CharSequence;)Z
+ 17: ifne 40
+ 20: aload_0
+ 21: ldc_w #908 // String m?o principal
+ 24: invokevirtual #880 // Method java/lang/String.contains:(Ljava/lang/CharSequence;)Z
+ 27: ifne 40
+ 30: aload_0
+ 31: ldc_w #910 // String mao principal
+ 34: invokevirtual #880 // Method java/lang/String.contains:(Ljava/lang/CharSequence;)Z
+ 37: ifeq 44
+ 40: iconst_1
+ 41: goto 45
+ 44: iconst_0
+ 45: ireturn
+
+ private static double totalAttackDamage(net.minecraft.world.item.ItemStack);
+ Code:
+ 0: dconst_0
+ 1: dstore_1
+ 2: aload_0
+ 3: getstatic #916 // Field net/minecraft/world/entity/EquipmentSlot.MAINHAND:Lnet/minecraft/world/entity/EquipmentSlot;
+ 6: invokevirtual #920 // Method net/minecraft/world/item/ItemStack.m_41638_:(Lnet/minecraft/world/entity/EquipmentSlot;)Lcom/google/common/collect/Multimap;
+ 9: getstatic #926 // Field net/minecraft/world/entity/ai/attributes/Attributes.f_22281_:Lnet/minecraft/world/entity/ai/attributes/Attribute;
+ 12: invokeinterface #931, 2 // InterfaceMethod com/google/common/collect/Multimap.get:(Ljava/lang/Object;)Ljava/util/Collection;
+ 17: invokeinterface #937, 1 // InterfaceMethod java/util/Collection.iterator:()Ljava/util/Iterator;
+ 22: astore_3
+ 23: aload_3
+ 24: invokeinterface #942, 1 // InterfaceMethod java/util/Iterator.hasNext:()Z
+ 29: ifeq 54
+ 32: aload_3
+ 33: invokeinterface #945, 1 // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
+ 38: checkcast #947 // class net/minecraft/world/entity/ai/attributes/AttributeModifier
+ 41: astore 4
+ 43: dload_1
+ 44: aload 4
+ 46: invokevirtual #950 // Method net/minecraft/world/entity/ai/attributes/AttributeModifier.m_22218_:()D
+ 49: dadd
+ 50: dstore_1
+ 51: goto 23
+ 54: dload_1
+ 55: dconst_0
+ 56: dcmpl
+ 57: ifle 66
+ 60: dload_1
+ 61: dconst_1
+ 62: dadd
+ 63: goto 67
+ 66: dconst_0
+ 67: dreturn
+
+ private static double totalAttackSpeed(net.minecraft.world.item.ItemStack);
+ Code:
+ 0: ldc2_w #954 // double 4.0d
+ 3: dstore_1
+ 4: aload_0
+ 5: getstatic #916 // Field net/minecraft/world/entity/EquipmentSlot.MAINHAND:Lnet/minecraft/world/entity/EquipmentSlot;
+ 8: invokevirtual #920 // Method net/minecraft/world/item/ItemStack.m_41638_:(Lnet/minecraft/world/entity/EquipmentSlot;)Lcom/google/common/collect/Multimap;
+ 11: getstatic #958 // Field net/minecraft/world/entity/ai/attributes/Attributes.f_22283_:Lnet/minecraft/world/entity/ai/attributes/Attribute;
+ 14: invokeinterface #931, 2 // InterfaceMethod com/google/common/collect/Multimap.get:(Ljava/lang/Object;)Ljava/util/Collection;
+ 19: invokeinterface #937, 1 // InterfaceMethod java/util/Collection.iterator:()Ljava/util/Iterator;
+ 24: astore_3
+ 25: aload_3
+ 26: invokeinterface #942, 1 // InterfaceMethod java/util/Iterator.hasNext:()Z
+ 31: ifeq 56
+ 34: aload_3
+ 35: invokeinterface #945, 1 // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
+ 40: checkcast #947 // class net/minecraft/world/entity/ai/attributes/AttributeModifier
+ 43: astore 4
+ 45: dload_1
+ 46: aload 4
+ 48: invokevirtual #950 // Method net/minecraft/world/entity/ai/attributes/AttributeModifier.m_22218_:()D
+ 51: dadd
+ 52: dstore_1
+ 53: goto 25
+ 56: dload_1
+ 57: dreturn
+
+ private static double totalAttackKnockback(net.minecraft.world.item.ItemStack);
+ Code:
+ 0: dconst_0
+ 1: dstore_1
+ 2: aload_0
+ 3: getstatic #916 // Field net/minecraft/world/entity/EquipmentSlot.MAINHAND:Lnet/minecraft/world/entity/EquipmentSlot;
+ 6: invokevirtual #920 // Method net/minecraft/world/item/ItemStack.m_41638_:(Lnet/minecraft/world/entity/EquipmentSlot;)Lcom/google/common/collect/Multimap;
+ 9: getstatic #961 // Field net/minecraft/world/entity/ai/attributes/Attributes.f_22282_:Lnet/minecraft/world/entity/ai/attributes/Attribute;
+ 12: invokeinterface #931, 2 // InterfaceMethod com/google/common/collect/Multimap.get:(Ljava/lang/Object;)Ljava/util/Collection;
+ 17: invokeinterface #937, 1 // InterfaceMethod java/util/Collection.iterator:()Ljava/util/Iterator;
+ 22: astore_3
+ 23: aload_3
+ 24: invokeinterface #942, 1 // InterfaceMethod java/util/Iterator.hasNext:()Z
+ 29: ifeq 54
+ 32: aload_3
+ 33: invokeinterface #945, 1 // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
+ 38: checkcast #947 // class net/minecraft/world/entity/ai/attributes/AttributeModifier
+ 41: astore 4
+ 43: dload_1
+ 44: aload 4
+ 46: invokevirtual #950 // Method net/minecraft/world/entity/ai/attributes/AttributeModifier.m_22218_:()D
+ 49: dadd
+ 50: dstore_1
+ 51: goto 23
+ 54: dload_1
+ 55: dreturn
+
+ private static double totalAttackReach(net.minecraft.world.item.ItemStack);
+ Code:
+ 0: ldc2_w #962 // double 2.5d
+ 3: dstore_1
+ 4: aload_0
+ 5: getstatic #916 // Field net/minecraft/world/entity/EquipmentSlot.MAINHAND:Lnet/minecraft/world/entity/EquipmentSlot;
+ 8: invokevirtual #920 // Method net/minecraft/world/item/ItemStack.m_41638_:(Lnet/minecraft/world/entity/EquipmentSlot;)Lcom/google/common/collect/Multimap;
+ 11: getstatic #968 // Field net/minecraftforge/common/ForgeMod.ENTITY_REACH:Lnet/minecraftforge/registries/RegistryObject;
+ 14: invokevirtual #526 // Method net/minecraftforge/registries/RegistryObject.get:()Ljava/lang/Object;
+ 17: checkcast #970 // class net/minecraft/world/entity/ai/attributes/Attribute
+ 20: invokeinterface #931, 2 // InterfaceMethod com/google/common/collect/Multimap.get:(Ljava/lang/Object;)Ljava/util/Collection;
+ 25: invokeinterface #937, 1 // InterfaceMethod java/util/Collection.iterator:()Ljava/util/Iterator;
+ 30: astore_3
+ 31: aload_3
+ 32: invokeinterface #942, 1 // InterfaceMethod java/util/Iterator.hasNext:()Z
+ 37: ifeq 62
+ 40: aload_3
+ 41: invokeinterface #945, 1 // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
+ 46: checkcast #947 // class net/minecraft/world/entity/ai/attributes/AttributeModifier
+ 49: astore 4
+ 51: dload_1
+ 52: aload 4
+ 54: invokevirtual #950 // Method net/minecraft/world/entity/ai/attributes/AttributeModifier.m_22218_:()D
+ 57: dadd
+ 58: dstore_1
+ 59: goto 31
+ 62: dload_1
+ 63: dreturn
+
+ private static java.lang.String fmtAttribute(double);
+ Code:
+ 0: dload_0
+ 1: dload_0
+ 2: invokestatic #973 // Method java/lang/Math.rint:(D)D
+ 5: dsub
+ 6: invokestatic #857 // Method java/lang/Math.abs:(D)D
+ 9: ldc2_w #858 // double 0.001d
+ 12: dcmpg
+ 13: ifge 25
+ 16: dload_0
+ 17: invokestatic #973 // Method java/lang/Math.rint:(D)D
+ 20: d2i
+ 21: invokestatic #976 // Method java/lang/String.valueOf:(I)Ljava/lang/String;
+ 24: areturn
+ 25: getstatic #776 // Field java/util/Locale.ROOT:Ljava/util/Locale;
+ 28: ldc_w #978 // String %.2f
+ 31: iconst_1
+ 32: anewarray #4 // class java/lang/Object
+ 35: dup
+ 36: iconst_0
+ 37: dload_0
+ 38: invokestatic #983 // Method java/lang/Double.valueOf:(D)Ljava/lang/Double;
+ 41: aastore
+ 42: invokestatic #987 // Method java/lang/String.format:(Ljava/util/Locale;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
+ 45: astore_2
+ 46: aload_2
+ 47: ldc_w #989 // String 0
+ 50: invokevirtual #992 // Method java/lang/String.endsWith:(Ljava/lang/String;)Z
+ 53: ifeq 71
+ 56: aload_2
+ 57: iconst_0
+ 58: aload_2
+ 59: invokevirtual #995 // Method java/lang/String.length:()I
+ 62: iconst_1
+ 63: isub
+ 64: invokevirtual #999 // Method java/lang/String.substring:(II)Ljava/lang/String;
+ 67: astore_2
+ 68: goto 46
+ 71: aload_2
+ 72: ldc_w #1001 // String .
+ 75: invokevirtual #992 // Method java/lang/String.endsWith:(Ljava/lang/String;)Z
+ 78: ifeq 93
+ 81: aload_2
+ 82: iconst_0
+ 83: aload_2
+ 84: invokevirtual #995 // Method java/lang/String.length:()I
+ 87: iconst_1
+ 88: isub
+ 89: invokevirtual #999 // Method java/lang/String.substring:(II)Ljava/lang/String;
+ 92: astore_2
+ 93: aload_2
+ 94: areturn
+
+ private static int findVanillaAttributeInsertIndex(java.util.List);
+ Code:
+ 0: iconst_1
+ 1: istore_1
+ 2: iload_1
+ 3: aload_0
+ 4: invokeinterface #713, 1 // InterfaceMethod java/util/List.size:()I
+ 9: if_icmpge 81
+ 12: aload_0
+ 13: iload_1
+ 14: invokeinterface #696, 2 // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
+ 19: checkcast #698 // class net/minecraft/network/chat/Component
+ 22: invokeinterface #702, 1 // InterfaceMethod net/minecraft/network/chat/Component.getString:()Ljava/lang/String;
+ 27: getstatic #776 // Field java/util/Locale.ROOT:Ljava/util/Locale;
+ 30: invokevirtual #780 // Method java/lang/String.toLowerCase:(Ljava/util/Locale;)Ljava/lang/String;
+ 33: astore_2
+ 34: aload_2
+ 35: invokestatic #902 // Method isMainHandHeader:(Ljava/lang/String;)Z
+ 38: ifeq 75
+ 41: iload_1
+ 42: iconst_1
+ 43: if_icmple 73
+ 46: aload_0
+ 47: iload_1
+ 48: iconst_1
+ 49: isub
+ 50: invokeinterface #696, 2 // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
+ 55: checkcast #698 // class net/minecraft/network/chat/Component
+ 58: invokeinterface #702, 1 // InterfaceMethod net/minecraft/network/chat/Component.getString:()Ljava/lang/String;
+ 63: invokevirtual #742 // Method java/lang/String.isEmpty:()Z
+ 66: ifeq 73
+ 69: iload_1
+ 70: iconst_1
+ 71: isub
+ 72: ireturn
+ 73: iload_1
+ 74: ireturn
+ 75: iinc 1, 1
+ 78: goto 2
+ 81: aload_0
+ 82: invokeinterface #713, 1 // InterfaceMethod java/util/List.size:()I
+ 87: ireturn
+
+ public static void onRenderGuiOverlay(net.minecraftforge.client.event.RenderGuiOverlayEvent$Post);
+ Code:
+ 0: aload_0
+ 1: invokevirtual #1007 // Method net/minecraftforge/client/event/RenderGuiOverlayEvent$Post.getOverlay:()Lnet/minecraftforge/client/gui/overlay/NamedGuiOverlay;
+ 4: invokevirtual #1013 // Method net/minecraftforge/client/gui/overlay/NamedGuiOverlay.id:()Lnet/minecraft/resources/ResourceLocation;
+ 7: getstatic #1019 // Field net/minecraftforge/client/gui/overlay/VanillaGuiOverlay.HOTBAR:Lnet/minecraftforge/client/gui/overlay/VanillaGuiOverlay;
+ 10: invokevirtual #1020 // Method net/minecraftforge/client/gui/overlay/VanillaGuiOverlay.id:()Lnet/minecraft/resources/ResourceLocation;
+ 13: invokevirtual #1023 // Method net/minecraft/resources/ResourceLocation.equals:(Ljava/lang/Object;)Z
+ 16: ifne 20
+ 19: return
+ 20: invokestatic #144 // Method net/minecraft/client/Minecraft.m_91087_:()Lnet/minecraft/client/Minecraft;
+ 23: astore_1
+ 24: aload_1
+ 25: getfield #148 // Field net/minecraft/client/Minecraft.f_91074_:Lnet/minecraft/client/player/LocalPlayer;
+ 28: ifnull 41
+ 31: aload_1
+ 32: getfield #214 // Field net/minecraft/client/Minecraft.f_91066_:Lnet/minecraft/client/Options;
+ 35: getfield #1026 // Field net/minecraft/client/Options.f_92062_:Z
+ 38: ifeq 42
+ 41: return
+ 42: aload_0
+ 43: invokevirtual #1030 // Method net/minecraftforge/client/event/RenderGuiOverlayEvent$Post.getGuiGraphics:()Lnet/minecraft/client/gui/GuiGraphics;
+ 46: astore_2
+ 47: aload_2
+ 48: invokestatic #1034 // Method renderBallisticVestHud:(Lnet/minecraft/client/gui/GuiGraphics;)V
+ 51: aload_2
+ 52: aload_1
+ 53: invokestatic #1038 // Method renderGrenadeFuseHud:(Lnet/minecraft/client/gui/GuiGraphics;Lnet/minecraft/client/Minecraft;)V
+ 56: aload_2
+ 57: aload_1
+ 58: invokestatic #1041 // Method renderNailGunAmmoHud:(Lnet/minecraft/client/gui/GuiGraphics;Lnet/minecraft/client/Minecraft;)V
+ 61: aload_2
+ 62: aload_1
+ 63: invokestatic #1044 // Method renderCrossbowAmmoHud:(Lnet/minecraft/client/gui/GuiGraphics;Lnet/minecraft/client/Minecraft;)V
+ 66: aload_1
+ 67: getfield #148 // Field net/minecraft/client/Minecraft.f_91074_:Lnet/minecraft/client/player/LocalPlayer;
+ 70: invokevirtual #1049 // Method net/minecraft/client/player/LocalPlayer.m_150108_:()Z
+ 73: ifne 100
+ 76: getstatic #1051 // Field tacticalScopeProgress:F
+ 79: ldc_w #349 // float 0.01f
+ 82: fcmpl
+ 83: ifgt 96
+ 86: aload_1
+ 87: getfield #148 // Field net/minecraft/client/Minecraft.f_91074_:Lnet/minecraft/client/player/LocalPlayer;
+ 90: invokestatic #1057 // Method com/ogaba/sa_combat/client/scope/TacticalCrossbowScopeClient.isScopingWithScopedCrossbow:(Lnet/minecraft/client/player/LocalPlayer;)Z
+ 93: ifeq 100
+ 96: aload_2
+ 97: invokestatic #1062 // Method renderRealSpyglassOverlay:(Lnet/minecraft/client/gui/GuiGraphics;)V
+ 100: return
+
+ private static void renderGrenadeFuseHud(net.minecraft.client.gui.GuiGraphics, net.minecraft.client.Minecraft);
+ Code:
+ 0: aload_1
+ 1: getfield #148 // Field net/minecraft/client/Minecraft.f_91074_:Lnet/minecraft/client/player/LocalPlayer;
+ 4: astore_2
+ 5: aload_2
+ 6: ifnull 26
+ 9: aload_2
+ 10: invokevirtual #1066 // Method net/minecraft/world/entity/player/Player.m_6117_:()Z
+ 13: ifeq 26
+ 16: aload_2
+ 17: invokevirtual #1069 // Method net/minecraft/world/entity/player/Player.m_7655_:()Lnet/minecraft/world/InteractionHand;
+ 20: getstatic #179 // Field net/minecraft/world/InteractionHand.MAIN_HAND:Lnet/minecraft/world/InteractionHand;
+ 23: if_acmpeq 27
+ 26: return
+ 27: aload_2
+ 28: invokevirtual #154 // Method net/minecraft/world/entity/player/Player.m_21205_:()Lnet/minecraft/world/item/ItemStack;
+ 31: astore_3
+ 32: aload_3
+ 33: invokevirtual #163 // Method net/minecraft/world/item/ItemStack.m_41720_:()Lnet/minecraft/world/item/Item;
+ 36: astore 5
+ 38: aload 5
+ 40: instanceof #165 // class com/ogaba/sa_combat/item/SpecialGrenadeItem
+ 43: ifeq 68
+ 46: aload 5
+ 48: checkcast #165 // class com/ogaba/sa_combat/item/SpecialGrenadeItem
+ 51: astore 4
+ 53: aload 4
+ 55: invokevirtual #1072 // Method com/ogaba/sa_combat/item/SpecialGrenadeItem.hasCookableFuse:()Z
+ 58: ifeq 68
+ 61: aload_3
+ 62: invokestatic #1075 // Method com/ogaba/sa_combat/item/SpecialGrenadeItem.isArmed:(Lnet/minecraft/world/item/ItemStack;)Z
+ 65: ifne 69
+ 68: return
+ 69: aload_3
+ 70: invokestatic #1079 // Method com/ogaba/sa_combat/item/SpecialGrenadeItem.getFuseTimerProgress:(Lnet/minecraft/world/item/ItemStack;)F
+ 73: fstore 5
+ 75: ldc_w #1080 // float 55.0f
+ 78: fload 5
+ 80: fmul
+ 81: invokestatic #1084 // Method net/minecraft/util/Mth.m_14143_:(F)I
+ 84: iconst_0
+ 85: bipush 55
+ 87: invokestatic #1088 // Method net/minecraft/util/Mth.m_14045_:(III)I
+ 90: istore 6
+ 92: aload_0
+ 93: invokevirtual #1091 // Method net/minecraft/client/gui/GuiGraphics.m_280182_:()I
+ 96: bipush 64
+ 98: isub
+ 99: iconst_2
+ 100: idiv
+ 101: istore 7
+ 103: aload_0
+ 104: invokevirtual #1094 // Method net/minecraft/client/gui/GuiGraphics.m_280206_:()I
+ 107: iconst_2
+ 108: idiv
+ 109: bipush 27
+ 111: iadd
+ 112: istore 8
+ 114: invokestatic #1099 // Method com/mojang/blaze3d/systems/RenderSystem.enableBlend:()V
+ 117: invokestatic #1102 // Method com/mojang/blaze3d/systems/RenderSystem.defaultBlendFunc:()V
+ 120: iload 6
+ 122: ifle 151
+ 125: aload_0
+ 126: getstatic #1104 // Field GRENADE_FUSE_FILL:Lnet/minecraft/resources/ResourceLocation;
+ 129: iload 7
+ 131: iconst_5
+ 132: iadd
+ 133: iload 8
+ 135: iconst_2
+ 136: iadd
+ 137: ldc_w #273 // float 5.0f
+ 140: fconst_2
+ 141: iload 6
+ 143: iconst_4
+ 144: bipush 64
+ 146: bipush 10
+ 148: invokevirtual #1108 // Method net/minecraft/client/gui/GuiGraphics.m_280163_:(Lnet/minecraft/resources/ResourceLocation;IIFFIIII)V
+ 151: aload_0
+ 152: getstatic #1110 // Field GRENADE_FUSE_FRAME:Lnet/minecraft/resources/ResourceLocation;
+ 155: iload 7
+ 157: iload 8
+ 159: fconst_0
+ 160: fconst_0
+ 161: bipush 64
+ 163: bipush 10
+ 165: bipush 64
+ 167: bipush 10
+ 169: invokevirtual #1108 // Method net/minecraft/client/gui/GuiGraphics.m_280163_:(Lnet/minecraft/resources/ResourceLocation;IIFFIIII)V
+ 172: invokestatic #1113 // Method com/mojang/blaze3d/systems/RenderSystem.disableBlend:()V
+ 175: return
+
+ private static void renderBallisticVestHud(net.minecraft.client.gui.GuiGraphics);
+ Code:
+ 0: invokestatic #1124 // Method com/ogaba/sa_combat/client/armor/ClientBallisticProtectionData.shouldRender:()Z
+ 3: ifne 7
+ 6: return
+ 7: iconst_1
+ 8: invokestatic #1127 // Method com/ogaba/sa_combat/client/armor/ClientBallisticProtectionData.getMaxProtection:()I
+ 11: invokestatic #1131 // Method java/lang/Math.max:(II)I
+ 14: istore_1
+ 15: invokestatic #1134 // Method com/ogaba/sa_combat/client/armor/ClientBallisticProtectionData.getProtection:()I
+ 18: iconst_0
+ 19: iload_1
+ 20: invokestatic #1088 // Method net/minecraft/util/Mth.m_14045_:(III)I
+ 23: istore_2
+ 24: iload_2
+ 25: i2f
+ 26: iload_1
+ 27: i2f
+ 28: fdiv
+ 29: fconst_0
+ 30: fconst_1
+ 31: invokestatic #238 // Method net/minecraft/util/Mth.m_14036_:(FFF)F
+ 34: fstore_3
+ 35: fload_3
+ 36: ldc_w #1135 // float 16.0f
+ 39: fmul
+ 40: invokestatic #1138 // Method net/minecraft/util/Mth.m_14167_:(F)I
+ 43: istore 4
+ 45: iload 4
+ 47: iconst_0
+ 48: bipush 16
+ 50: invokestatic #1088 // Method net/minecraft/util/Mth.m_14045_:(III)I
+ 53: istore 4
+ 55: bipush 20
+ 57: istore 5
+ 59: aload_0
+ 60: invokevirtual #1094 // Method net/minecraft/client/gui/GuiGraphics.m_280206_:()I
+ 63: bipush 30
+ 65: isub
+ 66: bipush 20
+ 68: isub
+ 69: istore 6
+ 71: ldc_w #1139 // float 1.875f
+ 74: fstore 7
+ 76: ldc_w #1139 // float 1.875f
+ 79: fstore 8
+ 81: aload_0
+ 82: invokevirtual #1142 // Method net/minecraft/client/gui/GuiGraphics.m_280168_:()Lcom/mojang/blaze3d/vertex/PoseStack;
+ 85: invokevirtual #1145 // Method com/mojang/blaze3d/vertex/PoseStack.m_85836_:()V
+ 88: aload_0
+ 89: invokevirtual #1142 // Method net/minecraft/client/gui/GuiGraphics.m_280168_:()Lcom/mojang/blaze3d/vertex/PoseStack;
+ 92: iload 5
+ 94: i2f
+ 95: iload 6
+ 97: i2f
+ 98: fconst_0
+ 99: invokevirtual #1149 // Method com/mojang/blaze3d/vertex/PoseStack.m_252880_:(FFF)V
+ 102: aload_0
+ 103: invokevirtual #1142 // Method net/minecraft/client/gui/GuiGraphics.m_280168_:()Lcom/mojang/blaze3d/vertex/PoseStack;
+ 106: fload 7
+ 108: fload 8
+ 110: fconst_1
+ 111: invokevirtual #1152 // Method com/mojang/blaze3d/vertex/PoseStack.m_85841_:(FFF)V
+ 114: aload_0
+ 115: getstatic #1154 // Field BALLISTIC_VEST_BG:Lnet/minecraft/resources/ResourceLocation;
+ 118: iconst_0
+ 119: iconst_0
+ 120: fconst_0
+ 121: fconst_0
+ 122: bipush 16
+ 124: bipush 16
+ 126: bipush 16
+ 128: bipush 16
+ 130: invokevirtual #1108 // Method net/minecraft/client/gui/GuiGraphics.m_280163_:(Lnet/minecraft/resources/ResourceLocation;IIFFIIII)V
+ 133: iload 4
+ 135: ifle 167
+ 138: bipush 16
+ 140: iload 4
+ 142: isub
+ 143: istore 9
+ 145: aload_0
+ 146: getstatic #1156 // Field BALLISTIC_VEST_FILL:Lnet/minecraft/resources/ResourceLocation;
+ 149: iconst_0
+ 150: iload 9
+ 152: fconst_0
+ 153: iload 9
+ 155: i2f
+ 156: bipush 16
+ 158: iload 4
+ 160: bipush 16
+ 162: bipush 16
+ 164: invokevirtual #1108 // Method net/minecraft/client/gui/GuiGraphics.m_280163_:(Lnet/minecraft/resources/ResourceLocation;IIFFIIII)V
+ 167: aload_0
+ 168: invokevirtual #1142 // Method net/minecraft/client/gui/GuiGraphics.m_280168_:()Lcom/mojang/blaze3d/vertex/PoseStack;
+ 171: invokevirtual #1159 // Method com/mojang/blaze3d/vertex/PoseStack.m_85849_:()V
+ 174: return
+
+ private static void renderNailGunAmmoHud(net.minecraft.client.gui.GuiGraphics, net.minecraft.client.Minecraft);
+ Code:
+ 0: aload_1
+ 1: getfield #148 // Field net/minecraft/client/Minecraft.f_91074_:Lnet/minecraft/client/player/LocalPlayer;
+ 4: ifnonnull 8
+ 7: return
+ 8: aload_1
+ 9: getfield #148 // Field net/minecraft/client/Minecraft.f_91074_:Lnet/minecraft/client/player/LocalPlayer;
+ 12: invokevirtual #1168 // Method net/minecraft/client/player/LocalPlayer.m_21205_:()Lnet/minecraft/world/item/ItemStack;
+ 15: astore_2
+ 16: aload_2
+ 17: invokevirtual #163 // Method net/minecraft/world/item/ItemStack.m_41720_:()Lnet/minecraft/world/item/Item;
+ 20: instanceof #167 // class com/ogaba/sa_combat/combat/weapon/NailGunItem
+ 23: ifne 27
+ 26: return
+ 27: aload_2
+ 28: invokestatic #570 // Method com/ogaba/sa_combat/combat/weapon/NailGunItem.getMagazine:(Lnet/minecraft/world/item/ItemStack;)I
+ 31: istore_3
+ 32: aload_1
+ 33: getfield #148 // Field net/minecraft/client/Minecraft.f_91074_:Lnet/minecraft/client/player/LocalPlayer;
+ 36: invokestatic #1172 // Method refreshInventoryHudCache:(Lnet/minecraft/world/entity/player/Player;)V
+ 39: getstatic #1174 // Field cachedNailReserve:I
+ 42: istore 4
+ 44: aload_0
+ 45: aload_1
+ 46: invokestatic #1177 // Method nailIconStack:()Lnet/minecraft/world/item/ItemStack;
+ 49: iload_3
+ 50: invokestatic #976 // Method java/lang/String.valueOf:(I)Ljava/lang/String;
+ 53: iload 4
+ 55: invokedynamic #1181, 0 // InvokeDynamic #4:makeConcatWithConstants:(I)Ljava/lang/String;
+ 60: iload_3
+ 61: ifgt 68
+ 64: iconst_1
+ 65: goto 69
+ 68: iconst_0
+ 69: aload_2
+ 70: invokestatic #544 // Method com/ogaba/sa_combat/combat/weapon/NailGunItem.isReloading:(Lnet/minecraft/world/item/ItemStack;)Z
+ 73: ifne 83
+ 76: aload_2
+ 77: invokestatic #547 // Method com/ogaba/sa_combat/combat/weapon/NailGunItem.isClientReloadAnimationActive:(Lnet/minecraft/world/item/ItemStack;)Z
+ 80: ifeq 87
+ 83: iconst_1
+ 84: goto 88
+ 87: iconst_0
+ 88: invokestatic #1185 // Method renderAmmoHud:(Lnet/minecraft/client/gui/GuiGraphics;Lnet/minecraft/client/Minecraft;Lnet/minecraft/world/item/ItemStack;Ljava/lang/String;Ljava/lang/String;ZZ)V
+ 91: return
+
+ private static void renderCrossbowAmmoHud(net.minecraft.client.gui.GuiGraphics, net.minecraft.client.Minecraft);
+ Code:
+ 0: aload_1
+ 1: getfield #148 // Field net/minecraft/client/Minecraft.f_91074_:Lnet/minecraft/client/player/LocalPlayer;
+ 4: ifnonnull 8
+ 7: return
+ 8: aload_1
+ 9: getfield #148 // Field net/minecraft/client/Minecraft.f_91074_:Lnet/minecraft/client/player/LocalPlayer;
+ 12: invokevirtual #1168 // Method net/minecraft/client/player/LocalPlayer.m_21205_:()Lnet/minecraft/world/item/ItemStack;
+ 15: astore_2
+ 16: aload_2
+ 17: invokevirtual #163 // Method net/minecraft/world/item/ItemStack.m_41720_:()Lnet/minecraft/world/item/Item;
+ 20: instanceof #46 // class com/ogaba/sa_combat/combat/weapon/TacticalCrossbowItem
+ 23: ifne 45
+ 26: aload_1
+ 27: getfield #148 // Field net/minecraft/client/Minecraft.f_91074_:Lnet/minecraft/client/player/LocalPlayer;
+ 30: invokevirtual #1188 // Method net/minecraft/client/player/LocalPlayer.m_21206_:()Lnet/minecraft/world/item/ItemStack;
+ 33: astore_2
+ 34: aload_2
+ 35: invokevirtual #163 // Method net/minecraft/world/item/ItemStack.m_41720_:()Lnet/minecraft/world/item/Item;
+ 38: instanceof #46 // class com/ogaba/sa_combat/combat/weapon/TacticalCrossbowItem
+ 41: ifne 45
+ 44: return
+ 45: aload_2
+ 46: invokestatic #1192 // Method com/ogaba/sa_combat/combat/weapon/TacticalCrossbowItem.getSelectedBoltType:(Lnet/minecraft/world/item/ItemStack;)Lcom/ogaba/sa_combat/combat/weapon/TacticalCrossbowItem$BoltType;
+ 49: astore_3
+ 50: aload_3
+ 51: getstatic #1196 // Field com/ogaba/sa_combat/combat/weapon/TacticalCrossbowItem$BoltType.IMPROVISED:Lcom/ogaba/sa_combat/combat/weapon/TacticalCrossbowItem$BoltType;
+ 54: if_acmpne 63
+ 57: invokestatic #1199 // Method improvisedBoltIconStack:()Lnet/minecraft/world/item/ItemStack;
+ 60: goto 66
+ 63: invokestatic #1202 // Method tacticalBoltIconStack:()Lnet/minecraft/world/item/ItemStack;
+ 66: astore 4
+ 68: aload_1
+ 69: getfield #148 // Field net/minecraft/client/Minecraft.f_91074_:Lnet/minecraft/client/player/LocalPlayer;
+ 72: invokestatic #1172 // Method refreshInventoryHudCache:(Lnet/minecraft/world/entity/player/Player;)V
+ 75: aload_3
+ 76: getstatic #1196 // Field com/ogaba/sa_combat/combat/weapon/TacticalCrossbowItem$BoltType.IMPROVISED:Lcom/ogaba/sa_combat/combat/weapon/TacticalCrossbowItem$BoltType;
+ 79: if_acmpne 88
+ 82: getstatic #1204 // Field cachedImprovisedBoltReserve:I
+ 85: goto 91
+ 88: getstatic #1206 // Field cachedTacticalBoltReserve:I
+ 91: istore 5
+ 93: aload_2
+ 94: invokestatic #1209 // Method com/ogaba/sa_combat/combat/weapon/TacticalCrossbowItem.isLoaded:(Lnet/minecraft/world/item/ItemStack;)Z
+ 97: istore 6
+ 99: aload_2
+ 100: invokestatic #1212 // Method com/ogaba/sa_combat/combat/weapon/TacticalCrossbowItem.isLoading:(Lnet/minecraft/world/item/ItemStack;)Z
+ 103: ifeq 117
+ 106: aload_2
+ 107: invokestatic #1215 // Method com/ogaba/sa_combat/combat/weapon/TacticalCrossbowItem.hasAutoMechanism:(Lnet/minecraft/world/item/ItemStack;)Z
+ 110: ifne 117
+ 113: iconst_1
+ 114: goto 118
+ 117: iconst_0
+ 118: istore 7
+ 120: aload_0
+ 121: aload_1
+ 122: aload 4
+ 124: iload 6
+ 126: ifeq 135
+ 129: ldc_w #1217 // String 1
+ 132: goto 138
+ 135: ldc_w #989 // String 0
+ 138: iload 5
+ 140: invokedynamic #1181, 0 // InvokeDynamic #4:makeConcatWithConstants:(I)Ljava/lang/String;
+ 145: iload 6
+ 147: ifne 159
+ 150: iload 5
+ 152: ifgt 159
+ 155: iconst_1
+ 156: goto 160
+ 159: iconst_0
+ 160: iload 7
+ 162: invokestatic #1185 // Method renderAmmoHud:(Lnet/minecraft/client/gui/GuiGraphics;Lnet/minecraft/client/Minecraft;Lnet/minecraft/world/item/ItemStack;Ljava/lang/String;Ljava/lang/String;ZZ)V
+ 165: return
+
+ private static void refreshInventoryHudCache(net.minecraft.world.entity.player.Player);
+ Code:
+ 0: aload_0
+ 1: ifnull 24
+ 4: getstatic #1223 // Field cachedInventoryPlayerId:I
+ 7: aload_0
+ 8: invokevirtual #1226 // Method net/minecraft/world/entity/player/Player.m_19879_:()I
+ 11: if_icmpne 25
+ 14: getstatic #1228 // Field cachedInventoryTick:I
+ 17: aload_0
+ 18: getfield #1231 // Field net/minecraft/world/entity/player/Player.f_19797_:I
+ 21: if_icmpne 25
+ 24: return
+ 25: aload_0
+ 26: invokevirtual #1226 // Method net/minecraft/world/entity/player/Player.m_19879_:()I
+ 29: putstatic #1223 // Field cachedInventoryPlayerId:I
+ 32: aload_0
+ 33: getfield #1231 // Field net/minecraft/world/entity/player/Player.f_19797_:I
+ 36: putstatic #1228 // Field cachedInventoryTick:I
+ 39: iconst_0
+ 40: putstatic #1174 // Field cachedNailReserve:I
+ 43: iconst_0
+ 44: putstatic #1206 // Field cachedTacticalBoltReserve:I
+ 47: iconst_0
+ 48: putstatic #1204 // Field cachedImprovisedBoltReserve:I
+ 51: aload_0
+ 52: invokevirtual #1235 // Method net/minecraft/world/entity/player/Player.m_150109_:()Lnet/minecraft/world/entity/player/Inventory;
+ 55: getfield #1241 // Field net/minecraft/world/entity/player/Inventory.f_35974_:Lnet/minecraft/core/NonNullList;
+ 58: invokevirtual #1244 // Method net/minecraft/core/NonNullList.iterator:()Ljava/util/Iterator;
+ 61: astore_1
+ 62: aload_1
+ 63: invokeinterface #942, 1 // InterfaceMethod java/util/Iterator.hasNext:()Z
+ 68: ifeq 186
+ 71: aload_1
+ 72: invokeinterface #945, 1 // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
+ 77: checkcast #159 // class net/minecraft/world/item/ItemStack
+ 80: astore_2
+ 81: aload_2
+ 82: invokevirtual #629 // Method net/minecraft/world/item/ItemStack.m_41619_:()Z
+ 85: ifeq 91
+ 88: goto 62
+ 91: getstatic #1246 // Field NAIL_ITEM_ID:Lnet/minecraft/resources/ResourceLocation;
+ 94: getstatic #1252 // Field net/minecraftforge/registries/ForgeRegistries.ITEMS:Lnet/minecraftforge/registries/IForgeRegistry;
+ 97: aload_2
+ 98: invokevirtual #163 // Method net/minecraft/world/item/ItemStack.m_41720_:()Lnet/minecraft/world/item/Item;
+ 101: invokeinterface #1258, 2 // InterfaceMethod net/minecraftforge/registries/IForgeRegistry.getKey:(Ljava/lang/Object;)Lnet/minecraft/resources/ResourceLocation;
+ 106: invokevirtual #1023 // Method net/minecraft/resources/ResourceLocation.equals:(Ljava/lang/Object;)Z
+ 109: ifeq 126
+ 112: getstatic #1174 // Field cachedNailReserve:I
+ 115: aload_2
+ 116: invokevirtual #1261 // Method net/minecraft/world/item/ItemStack.m_41613_:()I
+ 119: iadd
+ 120: putstatic #1174 // Field cachedNailReserve:I
+ 123: goto 183
+ 126: aload_2
+ 127: getstatic #1266 // Field com/ogaba/sa_combat/registry/ModItems.TACTICAL_BOLT:Lnet/minecraftforge/registries/RegistryObject;
+ 130: invokevirtual #526 // Method net/minecraftforge/registries/RegistryObject.get:()Ljava/lang/Object;
+ 133: checkcast #1268 // class net/minecraft/world/item/Item
+ 136: invokevirtual #1272 // Method net/minecraft/world/item/ItemStack.m_150930_:(Lnet/minecraft/world/item/Item;)Z
+ 139: ifeq 156
+ 142: getstatic #1206 // Field cachedTacticalBoltReserve:I
+ 145: aload_2
+ 146: invokevirtual #1261 // Method net/minecraft/world/item/ItemStack.m_41613_:()I
+ 149: iadd
+ 150: putstatic #1206 // Field cachedTacticalBoltReserve:I
+ 153: goto 183
+ 156: aload_2
+ 157: getstatic #1275 // Field com/ogaba/sa_combat/registry/ModItems.IMPROVISED_BOLT:Lnet/minecraftforge/registries/RegistryObject;
+ 160: invokevirtual #526 // Method net/minecraftforge/registries/RegistryObject.get:()Ljava/lang/Object;
+ 163: checkcast #1268 // class net/minecraft/world/item/Item
+ 166: invokevirtual #1272 // Method net/minecraft/world/item/ItemStack.m_150930_:(Lnet/minecraft/world/item/Item;)Z
+ 169: ifeq 183
+ 172: getstatic #1204 // Field cachedImprovisedBoltReserve:I
+ 175: aload_2
+ 176: invokevirtual #1261 // Method net/minecraft/world/item/ItemStack.m_41613_:()I
+ 179: iadd
+ 180: putstatic #1204 // Field cachedImprovisedBoltReserve:I
+ 183: goto 62
+ 186: return
+
+ private static void renderAmmoHud(net.minecraft.client.gui.GuiGraphics, net.minecraft.client.Minecraft, net.minecraft.world.item.ItemStack, java.lang.String, java.lang.String, boolean, boolean);
+ Code:
+ 0: ldc_w #1276 // float 1.4f
+ 3: fstore 7
+ 5: ldc_w #1277 // float 1.8f
+ 8: fstore 8
+ 10: ldc_w #1278 // float 1.2f
+ 13: fstore 9
+ 15: ldc_w #1135 // float 16.0f
+ 18: fload 7
+ 20: fmul
+ 21: invokestatic #1281 // Method java/lang/Math.round:(F)I
+ 24: istore 10
+ 26: aload_1
+ 27: getfield #1285 // Field net/minecraft/client/Minecraft.f_91062_:Lnet/minecraft/client/gui/Font;
+ 30: aload_3
+ 31: invokevirtual #1291 // Method net/minecraft/client/gui/Font.m_92895_:(Ljava/lang/String;)I
+ 34: i2f
+ 35: fload 8
+ 37: fmul
+ 38: invokestatic #1281 // Method java/lang/Math.round:(F)I
+ 41: istore 11
+ 43: aload_1
+ 44: getfield #1285 // Field net/minecraft/client/Minecraft.f_91062_:Lnet/minecraft/client/gui/Font;
+ 47: aload 4
+ 49: invokevirtual #1291 // Method net/minecraft/client/gui/Font.m_92895_:(Ljava/lang/String;)I
+ 52: i2f
+ 53: fload 9
+ 55: fmul
+ 56: invokestatic #1281 // Method java/lang/Math.round:(F)I
+ 59: istore 12
+ 61: iload 10
+ 63: bipush 8
+ 65: iadd
+ 66: iload 11
+ 68: iadd
+ 69: iconst_3
+ 70: iadd
+ 71: iload 12
+ 73: iadd
+ 74: istore 13
+ 76: iload 10
+ 78: aload_1
+ 79: getfield #1285 // Field net/minecraft/client/Minecraft.f_91062_:Lnet/minecraft/client/gui/Font;
+ 82: invokestatic #1297 // Method java/util/Objects.requireNonNull:(Ljava/lang/Object;)Ljava/lang/Object;
+ 85: pop
+ 86: ldc_w #1298 // float 9.0f
+ 89: fload 8
+ 91: fmul
+ 92: invokestatic #1281 // Method java/lang/Math.round:(F)I
+ 95: invokestatic #1131 // Method java/lang/Math.max:(II)I
+ 98: istore 14
+ 100: aload_0
+ 101: invokevirtual #1091 // Method net/minecraft/client/gui/GuiGraphics.m_280182_:()I
+ 104: bipush 16
+ 106: isub
+ 107: iload 13
+ 109: isub
+ 110: istore 15
+ 112: aload_0
+ 113: invokevirtual #1094 // Method net/minecraft/client/gui/GuiGraphics.m_280206_:()I
+ 116: bipush 16
+ 118: isub
+ 119: iload 14
+ 121: isub
+ 122: istore 16
+ 124: iload 6
+ 126: ifeq 189
+ 129: ldc_w #1300 // String Reloading...
+ 132: astore 17
+ 134: aload_0
+ 135: invokevirtual #1091 // Method net/minecraft/client/gui/GuiGraphics.m_280182_:()I
+ 138: bipush 16
+ 140: isub
+ 141: aload_1
+ 142: getfield #1285 // Field net/minecraft/client/Minecraft.f_91062_:Lnet/minecraft/client/gui/Font;
+ 145: aload 17
+ 147: invokevirtual #1291 // Method net/minecraft/client/gui/Font.m_92895_:(Ljava/lang/String;)I
+ 150: isub
+ 151: istore 18
+ 153: iload 16
+ 155: aload_1
+ 156: getfield #1285 // Field net/minecraft/client/Minecraft.f_91062_:Lnet/minecraft/client/gui/Font;
+ 159: invokestatic #1297 // Method java/util/Objects.requireNonNull:(Ljava/lang/Object;)Ljava/lang/Object;
+ 162: pop
+ 163: bipush 9
+ 165: isub
+ 166: iconst_3
+ 167: isub
+ 168: istore 19
+ 170: aload_0
+ 171: aload_1
+ 172: getfield #1285 // Field net/minecraft/client/Minecraft.f_91062_:Lnet/minecraft/client/gui/Font;
+ 175: aload 17
+ 177: iload 18
+ 179: iload 19
+ 181: ldc_w #1301 // int 16765517
+ 184: iconst_1
+ 185: invokevirtual #1305 // Method net/minecraft/client/gui/GuiGraphics.m_280056_:(Lnet/minecraft/client/gui/Font;Ljava/lang/String;IIIZ)I
+ 188: pop
+ 189: iload 15
+ 191: istore 17
+ 193: iload 16
+ 195: iload 14
+ 197: iload 10
+ 199: isub
+ 200: iconst_2
+ 201: idiv
+ 202: iadd
+ 203: istore 18
+ 205: aload_2
+ 206: invokevirtual #629 // Method net/minecraft/world/item/ItemStack.m_41619_:()Z
+ 209: ifne 259
+ 212: aload_0
+ 213: invokevirtual #1142 // Method net/minecraft/client/gui/GuiGraphics.m_280168_:()Lcom/mojang/blaze3d/vertex/PoseStack;
+ 216: invokevirtual #1145 // Method com/mojang/blaze3d/vertex/PoseStack.m_85836_:()V
+ 219: aload_0
+ 220: invokevirtual #1142 // Method net/minecraft/client/gui/GuiGraphics.m_280168_:()Lcom/mojang/blaze3d/vertex/PoseStack;
+ 223: iload 17
+ 225: i2f
+ 226: iload 18
+ 228: i2f
+ 229: fconst_0
+ 230: invokevirtual #1149 // Method com/mojang/blaze3d/vertex/PoseStack.m_252880_:(FFF)V
+ 233: aload_0
+ 234: invokevirtual #1142 // Method net/minecraft/client/gui/GuiGraphics.m_280168_:()Lcom/mojang/blaze3d/vertex/PoseStack;
+ 237: fload 7
+ 239: fload 7
+ 241: fconst_1
+ 242: invokevirtual #1152 // Method com/mojang/blaze3d/vertex/PoseStack.m_85841_:(FFF)V
+ 245: aload_0
+ 246: aload_2
+ 247: iconst_0
+ 248: iconst_0
+ 249: invokevirtual #1309 // Method net/minecraft/client/gui/GuiGraphics.m_280480_:(Lnet/minecraft/world/item/ItemStack;II)V
+ 252: aload_0
+ 253: invokevirtual #1142 // Method net/minecraft/client/gui/GuiGraphics.m_280168_:()Lcom/mojang/blaze3d/vertex/PoseStack;
+ 256: invokevirtual #1159 // Method com/mojang/blaze3d/vertex/PoseStack.m_85849_:()V
+ 259: iload 17
+ 261: iload 10
+ 263: iadd
+ 264: bipush 8
+ 266: iadd
+ 267: istore 19
+ 269: iload 5
+ 271: ifeq 280
+ 274: ldc_w #1310 // int 16733525
+ 277: goto 283
+ 280: ldc_w #1311 // int 16777215
+ 283: istore 20
+ 285: aload_0
+ 286: invokevirtual #1142 // Method net/minecraft/client/gui/GuiGraphics.m_280168_:()Lcom/mojang/blaze3d/vertex/PoseStack;
+ 289: invokevirtual #1145 // Method com/mojang/blaze3d/vertex/PoseStack.m_85836_:()V
+ 292: aload_0
+ 293: invokevirtual #1142 // Method net/minecraft/client/gui/GuiGraphics.m_280168_:()Lcom/mojang/blaze3d/vertex/PoseStack;
+ 296: iload 19
+ 298: i2f
+ 299: iload 16
+ 301: i2f
+ 302: iload 14
+ 304: aload_1
+ 305: getfield #1285 // Field net/minecraft/client/Minecraft.f_91062_:Lnet/minecraft/client/gui/Font;
+ 308: invokestatic #1297 // Method java/util/Objects.requireNonNull:(Ljava/lang/Object;)Ljava/lang/Object;
+ 311: pop
+ 312: ldc_w #1298 // float 9.0f
+ 315: fload 8
+ 317: fmul
+ 318: invokestatic #1281 // Method java/lang/Math.round:(F)I
+ 321: isub
+ 322: i2f
+ 323: fconst_2
+ 324: fdiv
+ 325: fadd
+ 326: fconst_0
+ 327: invokevirtual #1149 // Method com/mojang/blaze3d/vertex/PoseStack.m_252880_:(FFF)V
+ 330: aload_0
+ 331: invokevirtual #1142 // Method net/minecraft/client/gui/GuiGraphics.m_280168_:()Lcom/mojang/blaze3d/vertex/PoseStack;
+ 334: fload 8
+ 336: fload 8
+ 338: fconst_1
+ 339: invokevirtual #1152 // Method com/mojang/blaze3d/vertex/PoseStack.m_85841_:(FFF)V
+ 342: aload_0
+ 343: aload_1
+ 344: getfield #1285 // Field net/minecraft/client/Minecraft.f_91062_:Lnet/minecraft/client/gui/Font;
+ 347: aload_3
+ 348: iconst_0
+ 349: iconst_0
+ 350: iload 20
+ 352: iconst_1
+ 353: invokevirtual #1305 // Method net/minecraft/client/gui/GuiGraphics.m_280056_:(Lnet/minecraft/client/gui/Font;Ljava/lang/String;IIIZ)I
+ 356: pop
+ 357: aload_0
+ 358: invokevirtual #1142 // Method net/minecraft/client/gui/GuiGraphics.m_280168_:()Lcom/mojang/blaze3d/vertex/PoseStack;
+ 361: invokevirtual #1159 // Method com/mojang/blaze3d/vertex/PoseStack.m_85849_:()V
+ 364: aload_0
+ 365: invokevirtual #1142 // Method net/minecraft/client/gui/GuiGraphics.m_280168_:()Lcom/mojang/blaze3d/vertex/PoseStack;
+ 368: invokevirtual #1145 // Method com/mojang/blaze3d/vertex/PoseStack.m_85836_:()V
+ 371: aload_0
+ 372: invokevirtual #1142 // Method net/minecraft/client/gui/GuiGraphics.m_280168_:()Lcom/mojang/blaze3d/vertex/PoseStack;
+ 375: iload 19
+ 377: iload 11
+ 379: iadd
+ 380: iconst_3
+ 381: iadd
+ 382: i2f
+ 383: iload 16
+ 385: i2f
+ 386: iload 14
+ 388: aload_1
+ 389: getfield #1285 // Field net/minecraft/client/Minecraft.f_91062_:Lnet/minecraft/client/gui/Font;
+ 392: invokestatic #1297 // Method java/util/Objects.requireNonNull:(Ljava/lang/Object;)Ljava/lang/Object;
+ 395: pop
+ 396: ldc_w #1298 // float 9.0f
+ 399: fload 9
+ 401: fmul
+ 402: invokestatic #1281 // Method java/lang/Math.round:(F)I
+ 405: isub
+ 406: i2f
+ 407: fconst_2
+ 408: fdiv
+ 409: fadd
+ 410: fconst_0
+ 411: invokevirtual #1149 // Method com/mojang/blaze3d/vertex/PoseStack.m_252880_:(FFF)V
+ 414: aload_0
+ 415: invokevirtual #1142 // Method net/minecraft/client/gui/GuiGraphics.m_280168_:()Lcom/mojang/blaze3d/vertex/PoseStack;
+ 418: fload 9
+ 420: fload 9
+ 422: fconst_1
+ 423: invokevirtual #1152 // Method com/mojang/blaze3d/vertex/PoseStack.m_85841_:(FFF)V
+ 426: aload_0
+ 427: aload_1
+ 428: getfield #1285 // Field net/minecraft/client/Minecraft.f_91062_:Lnet/minecraft/client/gui/Font;
+ 431: aload 4
+ 433: iconst_0
+ 434: iconst_0
+ 435: ldc_w #1312 // int 11184810
+ 438: iconst_1
+ 439: invokevirtual #1305 // Method net/minecraft/client/gui/GuiGraphics.m_280056_:(Lnet/minecraft/client/gui/Font;Ljava/lang/String;IIIZ)I
+ 442: pop
+ 443: aload_0
+ 444: invokevirtual #1142 // Method net/minecraft/client/gui/GuiGraphics.m_280168_:()Lcom/mojang/blaze3d/vertex/PoseStack;
+ 447: invokevirtual #1159 // Method com/mojang/blaze3d/vertex/PoseStack.m_85849_:()V
+ 450: return
+
+ private static net.minecraft.world.item.ItemStack nailIconStack();
+ Code:
+ 0: getstatic #1335 // Field nailIconResolved:Z
+ 3: ifne 46
+ 6: iconst_1
+ 7: putstatic #1335 // Field nailIconResolved:Z
+ 10: getstatic #1252 // Field net/minecraftforge/registries/ForgeRegistries.ITEMS:Lnet/minecraftforge/registries/IForgeRegistry;
+ 13: getstatic #1246 // Field NAIL_ITEM_ID:Lnet/minecraft/resources/ResourceLocation;
+ 16: invokeinterface #1339, 2 // InterfaceMethod net/minecraftforge/registries/IForgeRegistry.getValue:(Lnet/minecraft/resources/ResourceLocation;)Ljava/lang/Object;
+ 21: checkcast #1268 // class net/minecraft/world/item/Item
+ 24: astore_0
+ 25: aload_0
+ 26: ifnonnull 35
+ 29: getstatic #1342 // Field net/minecraft/world/item/ItemStack.f_41583_:Lnet/minecraft/world/item/ItemStack;
+ 32: goto 43
+ 35: new #159 // class net/minecraft/world/item/ItemStack
+ 38: dup
+ 39: aload_0
+ 40: invokespecial #1345 // Method net/minecraft/world/item/ItemStack."":(Lnet/minecraft/world/level/ItemLike;)V
+ 43: putstatic #1347 // Field cachedNailIcon:Lnet/minecraft/world/item/ItemStack;
+ 46: getstatic #1347 // Field cachedNailIcon:Lnet/minecraft/world/item/ItemStack;
+ 49: areturn
+
+ private static net.minecraft.world.item.ItemStack tacticalBoltIconStack();
+ Code:
+ 0: getstatic #1351 // Field cachedTacticalBoltIcon:Lnet/minecraft/world/item/ItemStack;
+ 3: invokevirtual #629 // Method net/minecraft/world/item/ItemStack.m_41619_:()Z
+ 6: ifeq 28
+ 9: new #159 // class net/minecraft/world/item/ItemStack
+ 12: dup
+ 13: getstatic #1266 // Field com/ogaba/sa_combat/registry/ModItems.TACTICAL_BOLT:Lnet/minecraftforge/registries/RegistryObject;
+ 16: invokevirtual #526 // Method net/minecraftforge/registries/RegistryObject.get:()Ljava/lang/Object;
+ 19: checkcast #1353 // class net/minecraft/world/level/ItemLike
+ 22: invokespecial #1345 // Method net/minecraft/world/item/ItemStack."":(Lnet/minecraft/world/level/ItemLike;)V
+ 25: putstatic #1351 // Field cachedTacticalBoltIcon:Lnet/minecraft/world/item/ItemStack;
+ 28: getstatic #1351 // Field cachedTacticalBoltIcon:Lnet/minecraft/world/item/ItemStack;
+ 31: areturn
+
+ private static net.minecraft.world.item.ItemStack improvisedBoltIconStack();
+ Code:
+ 0: getstatic #1355 // Field cachedImprovisedBoltIcon:Lnet/minecraft/world/item/ItemStack;
+ 3: invokevirtual #629 // Method net/minecraft/world/item/ItemStack.m_41619_:()Z
+ 6: ifeq 28
+ 9: new #159 // class net/minecraft/world/item/ItemStack
+ 12: dup
+ 13: getstatic #1275 // Field com/ogaba/sa_combat/registry/ModItems.IMPROVISED_BOLT:Lnet/minecraftforge/registries/RegistryObject;
+ 16: invokevirtual #526 // Method net/minecraftforge/registries/RegistryObject.get:()Ljava/lang/Object;
+ 19: checkcast #1353 // class net/minecraft/world/level/ItemLike
+ 22: invokespecial #1345 // Method net/minecraft/world/item/ItemStack."":(Lnet/minecraft/world/level/ItemLike;)V
+ 25: putstatic #1355 // Field cachedImprovisedBoltIcon:Lnet/minecraft/world/item/ItemStack;
+ 28: getstatic #1355 // Field cachedImprovisedBoltIcon:Lnet/minecraft/world/item/ItemStack;
+ 31: areturn
+
+ private static void renderRealSpyglassOverlay(net.minecraft.client.gui.GuiGraphics);
+ Code:
+ 0: invokestatic #144 // Method net/minecraft/client/Minecraft.m_91087_:()Lnet/minecraft/client/Minecraft;
+ 3: astore_1
+ 4: invokestatic #1362 // Method vanillaSpyglassScopeScale:()F
+ 7: fstore_2
+ 8: getstatic #1364 // Field renderSpyglassOverlayMethod:Ljava/lang/reflect/Method;
+ 11: ifnonnull 53
+ 14: aload_1
+ 15: getfield #1368 // Field net/minecraft/client/Minecraft.f_91065_:Lnet/minecraft/client/gui/Gui;
+ 18: invokevirtual #1372 // Method java/lang/Object.getClass:()Ljava/lang/Class;
+ 21: ldc_w #1374 // String renderSpyglassOverlay
+ 24: iconst_2
+ 25: anewarray #1376 // class java/lang/Class
+ 28: dup
+ 29: iconst_0
+ 30: ldc_w #1059 // class net/minecraft/client/gui/GuiGraphics
+ 33: aastore
+ 34: dup
+ 35: iconst_1
+ 36: getstatic #1382 // Field java/lang/Float.TYPE:Ljava/lang/Class;
+ 39: aastore
+ 40: invokevirtual #1386 // Method java/lang/Class.getDeclaredMethod:(Ljava/lang/String;[Ljava/lang/Class;)Ljava/lang/reflect/Method;
+ 43: putstatic #1364 // Field renderSpyglassOverlayMethod:Ljava/lang/reflect/Method;
+ 46: getstatic #1364 // Field renderSpyglassOverlayMethod:Ljava/lang/reflect/Method;
+ 49: iconst_1
+ 50: invokevirtual #1391 // Method java/lang/reflect/Method.setAccessible:(Z)V
+ 53: getstatic #1364 // Field renderSpyglassOverlayMethod:Ljava/lang/reflect/Method;
+ 56: aload_1
+ 57: getfield #1368 // Field net/minecraft/client/Minecraft.f_91065_:Lnet/minecraft/client/gui/Gui;
+ 60: iconst_2
+ 61: anewarray #4 // class java/lang/Object
+ 64: dup
+ 65: iconst_0
+ 66: aload_0
+ 67: aastore
+ 68: dup
+ 69: iconst_1
+ 70: fload_2
+ 71: invokestatic #1394 // Method java/lang/Float.valueOf:(F)Ljava/lang/Float;
+ 74: aastore
+ 75: invokevirtual #1398 // Method java/lang/reflect/Method.invoke:(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;
+ 78: pop
+ 79: return
+ 80: astore_3
+ 81: aload_0
+ 82: fload_2
+ 83: invokestatic #1404 // Method renderVanillaSpyglassOverlayFallback:(Lnet/minecraft/client/gui/GuiGraphics;F)V
+ 86: return
+ Exception table:
+ from to target type
+ 8 79 80 Class java/lang/ReflectiveOperationException
+ 8 79 80 Class java/lang/RuntimeException
+
+ private static float vanillaSpyglassScopeScale();
+ Code:
+ 0: invokestatic #1410 // Method easedScopeProgress:()F
+ 3: ldc_w #262 // float 0.5f
+ 6: ldc_w #1411 // float 1.125f
+ 9: invokestatic #256 // Method net/minecraft/util/Mth.m_14179_:(FFF)F
+ 12: freturn
+
+ private static float easedScopeProgress();
+ Code:
+ 0: getstatic #1051 // Field tacticalScopeProgress:F
+ 3: fconst_0
+ 4: fconst_1
+ 5: invokestatic #238 // Method net/minecraft/util/Mth.m_14036_:(FFF)F
+ 8: fstore_0
+ 9: fload_0
+ 10: fload_0
+ 11: fmul
+ 12: ldc_w #271 // float 3.0f
+ 15: fconst_2
+ 16: fload_0
+ 17: fmul
+ 18: fsub
+ 19: fmul
+ 20: freturn
+
+ private static void renderVanillaSpyglassOverlayFallback(net.minecraft.client.gui.GuiGraphics, float);
+ Code:
+ 0: aload_0
+ 1: invokevirtual #1091 // Method net/minecraft/client/gui/GuiGraphics.m_280182_:()I
+ 4: istore_2
+ 5: aload_0
+ 6: invokevirtual #1094 // Method net/minecraft/client/gui/GuiGraphics.m_280206_:()I
+ 9: istore_3
+ 10: iload_2
+ 11: ifle 18
+ 14: iload_3
+ 15: ifgt 19
+ 18: return
+ 19: iload_2
+ 20: iload_3
+ 21: invokestatic #1414 // Method java/lang/Math.min:(II)I
+ 24: i2f
+ 25: fstore 4
+ 27: iload_2
+ 28: i2f
+ 29: fload 4
+ 31: fdiv
+ 32: iload_3
+ 33: i2f
+ 34: fload 4
+ 36: fdiv
+ 37: invokestatic #1417 // Method java/lang/Math.min:(FF)F
+ 40: fload_1
+ 41: fmul
+ 42: fstore 5
+ 44: fload 4
+ 46: fload 5
+ 48: fmul
+ 49: invokestatic #1084 // Method net/minecraft/util/Mth.m_14143_:(F)I
+ 52: istore 6
+ 54: fload 4
+ 56: fload 5
+ 58: fmul
+ 59: invokestatic #1084 // Method net/minecraft/util/Mth.m_14143_:(F)I
+ 62: istore 7
+ 64: iload_2
+ 65: iload 6
+ 67: isub
+ 68: iconst_2
+ 69: idiv
+ 70: istore 8
+ 72: iload_3
+ 73: iload 7
+ 75: isub
+ 76: iconst_2
+ 77: idiv
+ 78: istore 9
+ 80: iload 8
+ 82: iload 6
+ 84: iadd
+ 85: istore 10
+ 87: iload 9
+ 89: iload 7
+ 91: iadd
+ 92: istore 11
+ 94: invokestatic #1420 // Method com/mojang/blaze3d/systems/RenderSystem.disableDepthTest:()V
+ 97: iconst_0
+ 98: invokestatic #1423 // Method com/mojang/blaze3d/systems/RenderSystem.depthMask:(Z)V
+ 101: invokestatic #1099 // Method com/mojang/blaze3d/systems/RenderSystem.enableBlend:()V
+ 104: invokestatic #1102 // Method com/mojang/blaze3d/systems/RenderSystem.defaultBlendFunc:()V
+ 107: aload_0
+ 108: getstatic #1425 // Field VANILLA_SPYGLASS_SCOPE:Lnet/minecraft/resources/ResourceLocation;
+ 111: iload 8
+ 113: iload 9
+ 115: bipush -90
+ 117: fconst_0
+ 118: fconst_0
+ 119: iload 6
+ 121: iload 7
+ 123: iload 6
+ 125: iload 7
+ 127: invokevirtual #1429 // Method net/minecraft/client/gui/GuiGraphics.m_280398_:(Lnet/minecraft/resources/ResourceLocation;IIIFFIIII)V
+ 130: aload_0
+ 131: invokestatic #1435 // Method net/minecraft/client/renderer/RenderType.m_286086_:()Lnet/minecraft/client/renderer/RenderType;
+ 134: iconst_0
+ 135: iload 11
+ 137: iload_2
+ 138: iload_3
+ 139: bipush -90
+ 141: ldc_w #1436 // int -16777216
+ 144: invokevirtual #1440 // Method net/minecraft/client/gui/GuiGraphics.m_285795_:(Lnet/minecraft/client/renderer/RenderType;IIIIII)V
+ 147: aload_0
+ 148: invokestatic #1435 // Method net/minecraft/client/renderer/RenderType.m_286086_:()Lnet/minecraft/client/renderer/RenderType;
+ 151: iconst_0
+ 152: iconst_0
+ 153: iload_2
+ 154: iload 9
+ 156: bipush -90
+ 158: ldc_w #1436 // int -16777216
+ 161: invokevirtual #1440 // Method net/minecraft/client/gui/GuiGraphics.m_285795_:(Lnet/minecraft/client/renderer/RenderType;IIIIII)V
+ 164: aload_0
+ 165: invokestatic #1435 // Method net/minecraft/client/renderer/RenderType.m_286086_:()Lnet/minecraft/client/renderer/RenderType;
+ 168: iconst_0
+ 169: iload 9
+ 171: iload 8
+ 173: iload 11
+ 175: bipush -90
+ 177: ldc_w #1436 // int -16777216
+ 180: invokevirtual #1440 // Method net/minecraft/client/gui/GuiGraphics.m_285795_:(Lnet/minecraft/client/renderer/RenderType;IIIIII)V
+ 183: aload_0
+ 184: invokestatic #1435 // Method net/minecraft/client/renderer/RenderType.m_286086_:()Lnet/minecraft/client/renderer/RenderType;
+ 187: iload 10
+ 189: iload 9
+ 191: iload_2
+ 192: iload 11
+ 194: bipush -90
+ 196: ldc_w #1436 // int -16777216
+ 199: invokevirtual #1440 // Method net/minecraft/client/gui/GuiGraphics.m_285795_:(Lnet/minecraft/client/renderer/RenderType;IIIIII)V
+ 202: iconst_1
+ 203: invokestatic #1423 // Method com/mojang/blaze3d/systems/RenderSystem.depthMask:(Z)V
+ 206: invokestatic #1102 // Method com/mojang/blaze3d/systems/RenderSystem.defaultBlendFunc:()V
+ 209: invokestatic #1443 // Method com/mojang/blaze3d/systems/RenderSystem.enableDepthTest:()V
+ 212: return
+
+ public static void onClientLoggingIn(net.minecraftforge.client.event.ClientPlayerNetworkEvent$LoggingIn);
+ Code:
+ 0: invokestatic #1457 // Method resetClientSessionState:()V
+ 3: return
+
+ public static void onClientLoggingOut(net.minecraftforge.client.event.ClientPlayerNetworkEvent$LoggingOut);
+ Code:
+ 0: invokestatic #1457 // Method resetClientSessionState:()V
+ 3: return
+
+ private static void resetClientSessionState();
+ Code:
+ 0: iconst_0
+ 1: iconst_0
+ 2: invokestatic #1465 // Method com/ogaba/sa_combat/client/armor/ClientBallisticProtectionData.set:(II)V
+ 5: fconst_0
+ 6: putstatic #1051 // Field tacticalScopeProgress:F
+ 9: aconst_null
+ 10: putstatic #1364 // Field renderSpyglassOverlayMethod:Ljava/lang/reflect/Method;
+ 13: iconst_0
+ 14: putstatic #555 // Field nailGunTriggerWasDown:Z
+ 17: fconst_0
+ 18: putstatic #557 // Field nailGunAutoFireAccumulator:F
+ 21: ldc2_w #490 // long -9223372036854775808l
+ 24: putstatic #493 // Field thirdPersonNailGunStackId:J
+ 27: iconst_0
+ 28: putstatic #495 // Field thirdPersonNailGunReloadWasActive:Z
+ 31: iconst_0
+ 32: putstatic #434 // Field crossbowCycleWasDown:Z
+ 35: ldc_w #1466 // int -2147483648
+ 38: putstatic #1223 // Field cachedInventoryPlayerId:I
+ 41: ldc_w #1466 // int -2147483648
+ 44: putstatic #1228 // Field cachedInventoryTick:I
+ 47: invokestatic #1469 // Method com/ogaba/sa_combat/item/SpecialGrenadeItem.clearClientAnimationState:()V
+ 50: invokestatic #1470 // Method com/ogaba/sa_combat/combat/weapon/NailGunItem.clearClientAnimationState:()V
+ 53: invokestatic #1473 // Method com/ogaba/sa_combat/client/render/NailGunAimClient.reset:()V
+ 56: invokestatic #1478 // Method com/ogaba/sa_combat/client/render/NailGunCameraAnimation.resetImmediately:()V
+ 59: invokestatic #1481 // Method com/ogaba/sa_combat/client/effect/NailHoleManager.clear:()V
+ 62: invokestatic #1484 // Method com/ogaba/sa_combat/client/sound/ChainsawSoundManager.stop:()V
+ 65: return
+
+ private static net.minecraft.resources.ResourceLocation rl(java.lang.String);
+ Code:
+ 0: new #1022 // class net/minecraft/resources/ResourceLocation
+ 3: dup
+ 4: ldc_w #1487 // String sa_combat
+ 7: aload_0
+ 8: invokespecial #1490 // Method net/minecraft/resources/ResourceLocation."":(Ljava/lang/String;Ljava/lang/String;)V
+ 11: areturn
+
+ static {};
+ Code:
+ 0: ldc_w #1494 // String textures/gui/hud/ballistic_vest_bg.png
+ 3: invokestatic #1496 // Method rl:(Ljava/lang/String;)Lnet/minecraft/resources/ResourceLocation;
+ 6: putstatic #1154 // Field BALLISTIC_VEST_BG:Lnet/minecraft/resources/ResourceLocation;
+ 9: ldc_w #1498 // String textures/gui/hud/ballistic_vest_fill.png
+ 12: invokestatic #1496 // Method rl:(Ljava/lang/String;)Lnet/minecraft/resources/ResourceLocation;
+ 15: putstatic #1156 // Field BALLISTIC_VEST_FILL:Lnet/minecraft/resources/ResourceLocation;
+ 18: ldc_w #1500 // String textures/gui/hud/grenade_fuse_frame.png
+ 21: invokestatic #1496 // Method rl:(Ljava/lang/String;)Lnet/minecraft/resources/ResourceLocation;
+ 24: putstatic #1110 // Field GRENADE_FUSE_FRAME:Lnet/minecraft/resources/ResourceLocation;
+ 27: ldc_w #1502 // String textures/gui/hud/compound_bow_power_fill.png
+ 30: invokestatic #1496 // Method rl:(Ljava/lang/String;)Lnet/minecraft/resources/ResourceLocation;
+ 33: putstatic #1104 // Field GRENADE_FUSE_FILL:Lnet/minecraft/resources/ResourceLocation;
+ 36: new #1022 // class net/minecraft/resources/ResourceLocation
+ 39: dup
+ 40: ldc_w #1503 // String minecraft
+ 43: ldc_w #1505 // String textures/misc/spyglass_scope.png
+ 46: invokespecial #1490 // Method net/minecraft/resources/ResourceLocation."":(Ljava/lang/String;Ljava/lang/String;)V
+ 49: putstatic #1425 // Field VANILLA_SPYGLASS_SCOPE:Lnet/minecraft/resources/ResourceLocation;
+ 52: new #1022 // class net/minecraft/resources/ResourceLocation
+ 55: dup
+ 56: ldc_w #1507 // String sa_core
+ 59: ldc_w #1509 // String nails
+ 62: invokespecial #1490 // Method net/minecraft/resources/ResourceLocation."":(Ljava/lang/String;Ljava/lang/String;)V
+ 65: putstatic #1246 // Field NAIL_ITEM_ID:Lnet/minecraft/resources/ResourceLocation;
+ 68: ldc2_w #490 // long -9223372036854775808l
+ 71: putstatic #493 // Field thirdPersonNailGunStackId:J
+ 74: ldc_w #1466 // int -2147483648
+ 77: putstatic #1223 // Field cachedInventoryPlayerId:I
+ 80: ldc_w #1466 // int -2147483648
+ 83: putstatic #1228 // Field cachedInventoryTick:I
+ 86: getstatic #1342 // Field net/minecraft/world/item/ItemStack.f_41583_:Lnet/minecraft/world/item/ItemStack;
+ 89: putstatic #1347 // Field cachedNailIcon:Lnet/minecraft/world/item/ItemStack;
+ 92: getstatic #1342 // Field net/minecraft/world/item/ItemStack.f_41583_:Lnet/minecraft/world/item/ItemStack;
+ 95: putstatic #1351 // Field cachedTacticalBoltIcon:Lnet/minecraft/world/item/ItemStack;
+ 98: getstatic #1342 // Field net/minecraft/world/item/ItemStack.f_41583_:Lnet/minecraft/world/item/ItemStack;
+ 101: putstatic #1355 // Field cachedImprovisedBoltIcon:Lnet/minecraft/world/item/ItemStack;
+ 104: return
+}
diff --git a/_sa_hanhua_out/_tmp/javap_full.py b/_sa_hanhua_out/_tmp/javap_full.py
new file mode 100644
index 0000000..7831cee
--- /dev/null
+++ b/_sa_hanhua_out/_tmp/javap_full.py
@@ -0,0 +1,38 @@
+import zipfile, os, subprocess, shutil
+
+jar = r'e:\MCStudioDownload\work\3027246179@qq.com\Cpp\AddOn\309c2d420bc84ee986db9cdd070ff02a\_sa_hanhua_out\sa_essentials-forge-1.20.1-1.0.0.jar'
+out = r'e:\MCStudioDownload\work\3027246179@qq.com\Cpp\AddOn\309c2d420bc84ee986db9cdd070ff02a\_sa_hanhua_out\_tmp\classes'
+
+targets = [
+ 'com/ogaba/sa_combat/client/tooltip/BlueprintClientTooltipComponent.class',
+ 'com/ogaba/sa_combat/item/BlueprintTooltipComponent.class',
+ 'com/ogaba/sa_combat/item/BlueprintItem.class',
+]
+
+javap = r'D:\我的世界\bin\javap.EXE'
+if not os.path.exists(javap):
+ javap = shutil.which('javap')
+
+report = []
+for t in targets:
+ cname = t[:-6].replace('/', '.')
+ r = subprocess.run([javap, '-c', '-p', '-classpath', out, cname], capture_output=True, text=True, encoding='utf-8', errors='replace')
+ text = r.stdout if r.returncode == 0 else r.stderr
+ report.append('='*20 + ' ' + cname + ' ' + '='*20 + '\n' + text)
+
+full = '\n\n'.join(report)
+with open(r'e:\MCStudioDownload\work\3027246179@qq.com\Cpp\AddOn\309c2d420bc84ee986db9cdd070ff02a\_sa_hanhua_out\_tmp\javap_blueprint.txt', 'w', encoding='utf-8') as f:
+ f.write(full)
+print('written, total len:', len(full))
+
+# 关键搜索:getDisplayName / Survivors / displayName / 所有字符串常量
+import re
+print('\n--- getDisplayName / mod 相关调用 ---')
+for line in full.splitlines():
+ if 'getDisplayName' in line or 'DisplayName' in line or 'Survivors' in line or 'getModId' in line or 'mods.toml' in line:
+ print(line)
+print('\n--- 所有 String 常量 ---')
+for line in full.splitlines():
+ m = re.search(r'String ([^\s]*(?:blueprint|mod|Mod)[^\s]*)', line)
+ if m:
+ print(line.strip())
diff --git a/_sa_hanhua_out/_tmp/javap_reload.py b/_sa_hanhua_out/_tmp/javap_reload.py
new file mode 100644
index 0000000..f60d0c8
--- /dev/null
+++ b/_sa_hanhua_out/_tmp/javap_reload.py
@@ -0,0 +1,44 @@
+import zipfile, os, subprocess, shutil
+
+jar = r'e:\MCStudioDownload\work\3027246179@qq.com\Cpp\AddOn\309c2d420bc84ee986db9cdd070ff02a\_sa_hanhua_out\sa_essentials-forge-1.20.1-1.0.0.jar'
+out = r'e:\MCStudioDownload\work\3027246179@qq.com\Cpp\AddOn\309c2d420bc84ee986db9cdd070ff02a\_sa_hanhua_out\_tmp\classes'
+
+targets = [
+ 'com/ogaba/sa_combat/client/event/SACombatClientForgeEvents.class',
+ 'com/ogaba/sa_combat/client/model/SAWeaponGeoModel.class',
+ 'com/ogaba/sa_combat/client/render/NailGunAimClient.class',
+ 'com/ogaba/sa_combat/combat/weapon/NailGunItem.class',
+ 'com/ogaba/sa_combat/network/packet/FireNailGunC2SPacket.class',
+]
+
+with zipfile.ZipFile(jar) as z:
+ for t in targets:
+ p = os.path.join(out, t.replace('/', os.sep))
+ os.makedirs(os.path.dirname(p), exist_ok=True)
+ with open(p, 'wb') as f:
+ f.write(z.read(t))
+ print('extracted:', t)
+
+javap = r'D:\我的世界\bin\javap.EXE'
+if not os.path.exists(javap):
+ javap = shutil.which('javap')
+
+report = []
+for t in targets:
+ cname = t[:-6].replace('/', '.')
+ r = subprocess.run([javap, '-c', '-p', '-classpath', out, cname], capture_output=True, text=True, encoding='utf-8', errors='replace')
+ text = r.stdout if r.returncode == 0 else r.stderr
+ report.append('='*20 + ' ' + cname + ' ' + '='*20 + '\n' + text)
+
+full = '\n\n'.join(report)
+with open(r'e:\MCStudioDownload\work\3027246179@qq.com\Cpp\AddOn\309c2d420bc84ee986db9cdd070ff02a\_sa_hanhua_out\_tmp\javap_reload.txt', 'w', encoding='utf-8') as f:
+ f.write(full)
+print('written len:', len(full))
+
+# 输出 Reloading 相关上下文
+lines = full.splitlines()
+for i, line in enumerate(lines):
+ if 'Reload' in line or 'reload' in line.lower():
+ # 打印该行及其后几行(字符串常量会出现在 ldc 之后)
+ print('\n'.join(lines[max(0,i-1):i+6]))
+ print('...')
diff --git a/_sa_hanhua_out/_tmp/javap_reload.txt b/_sa_hanhua_out/_tmp/javap_reload.txt
new file mode 100644
index 0000000..b0a9686
--- /dev/null
+++ b/_sa_hanhua_out/_tmp/javap_reload.txt
@@ -0,0 +1,6339 @@
+==================== com.ogaba.sa_combat.client.event.SACombatClientForgeEvents ====================
+Compiled from "SACombatClientForgeEvents.java"
+public final class com.ogaba.sa_combat.client.event.SACombatClientForgeEvents {
+ private static final net.minecraft.resources.ResourceLocation BALLISTIC_VEST_BG;
+
+ private static final net.minecraft.resources.ResourceLocation BALLISTIC_VEST_FILL;
+
+ private static final net.minecraft.resources.ResourceLocation GRENADE_FUSE_FRAME;
+
+ private static final net.minecraft.resources.ResourceLocation GRENADE_FUSE_FILL;
+
+ private static final int GRENADE_FUSE_FRAME_WIDTH;
+
+ private static final int GRENADE_FUSE_FRAME_HEIGHT;
+
+ private static final int GRENADE_FUSE_FILL_OFFSET_X;
+
+ private static final int GRENADE_FUSE_FILL_OFFSET_Y;
+
+ private static final int GRENADE_FUSE_FILL_WIDTH;
+
+ private static final int GRENADE_FUSE_FILL_HEIGHT;
+
+ private static final int GRENADE_FUSE_CROSSHAIR_OFFSET_Y;
+
+ private static final net.minecraft.resources.ResourceLocation VANILLA_SPYGLASS_SCOPE;
+
+ private static float tacticalScopeProgress;
+
+ private static java.lang.reflect.Method renderSpyglassOverlayMethod;
+
+ private static final float SCOPE_OPEN_SMOOTH;
+
+ private static final float SCOPE_CLOSE_SMOOTH;
+
+ private static final int BALLISTIC_ICON_W;
+
+ private static final int BALLISTIC_ICON_H;
+
+ private static final int BALLISTIC_RENDER_W;
+
+ private static final int BALLISTIC_RENDER_H;
+
+ private static final int BALLISTIC_MARGIN_LEFT;
+
+ private static final int BALLISTIC_MARGIN_BOTTOM;
+
+ private static final net.minecraft.resources.ResourceLocation NAIL_ITEM_ID;
+
+ private static final int AMMO_ICON_SIZE;
+
+ private static final int AMMO_MARGIN_RIGHT;
+
+ private static final int AMMO_MARGIN_BOTTOM;
+
+ private static final int AMMO_ICON_GAP;
+
+ private static boolean nailGunTriggerWasDown;
+
+ private static float nailGunAutoFireAccumulator;
+
+ private static long thirdPersonNailGunStackId;
+
+ private static boolean thirdPersonNailGunReloadWasActive;
+
+ private static int cachedInventoryPlayerId;
+
+ private static int cachedInventoryTick;
+
+ private static int cachedNailReserve;
+
+ private static int cachedTacticalBoltReserve;
+
+ private static int cachedImprovisedBoltReserve;
+
+ private static boolean nailIconResolved;
+
+ private static net.minecraft.world.item.ItemStack cachedNailIcon;
+
+ private static net.minecraft.world.item.ItemStack cachedTacticalBoltIcon;
+
+ private static net.minecraft.world.item.ItemStack cachedImprovisedBoltIcon;
+
+ private static boolean crossbowCycleWasDown;
+
+ private com.ogaba.sa_combat.client.event.SACombatClientForgeEvents();
+ Code:
+ 0: aload_0
+ 1: invokespecial #133 // Method java/lang/Object."":()V
+ 4: return
+
+ public static void onRenderHand(net.minecraftforge.client.event.RenderHandEvent);
+ Code:
+ 0: invokestatic #144 // Method net/minecraft/client/Minecraft.m_91087_:()Lnet/minecraft/client/Minecraft;
+ 3: astore_1
+ 4: aload_1
+ 5: getfield #148 // Field net/minecraft/client/Minecraft.f_91074_:Lnet/minecraft/client/player/LocalPlayer;
+ 8: astore_2
+ 9: aload_2
+ 10: ifnonnull 14
+ 13: return
+ 14: aload_2
+ 15: invokevirtual #154 // Method net/minecraft/world/entity/player/Player.m_21205_:()Lnet/minecraft/world/item/ItemStack;
+ 18: astore_3
+ 19: aload_2
+ 20: invokevirtual #157 // Method net/minecraft/world/entity/player/Player.m_21206_:()Lnet/minecraft/world/item/ItemStack;
+ 23: astore 4
+ 25: aload_3
+ 26: invokevirtual #163 // Method net/minecraft/world/item/ItemStack.m_41720_:()Lnet/minecraft/world/item/Item;
+ 29: instanceof #165 // class com/ogaba/sa_combat/item/SpecialGrenadeItem
+ 32: istore 5
+ 34: aload 4
+ 36: invokevirtual #163 // Method net/minecraft/world/item/ItemStack.m_41720_:()Lnet/minecraft/world/item/Item;
+ 39: instanceof #165 // class com/ogaba/sa_combat/item/SpecialGrenadeItem
+ 42: istore 6
+ 44: aload_3
+ 45: invokevirtual #163 // Method net/minecraft/world/item/ItemStack.m_41720_:()Lnet/minecraft/world/item/Item;
+ 48: instanceof #167 // class com/ogaba/sa_combat/combat/weapon/NailGunItem
+ 51: istore 7
+ 53: aload 4
+ 55: invokevirtual #163 // Method net/minecraft/world/item/ItemStack.m_41720_:()Lnet/minecraft/world/item/Item;
+ 58: instanceof #167 // class com/ogaba/sa_combat/combat/weapon/NailGunItem
+ 61: istore 8
+ 63: iload 5
+ 65: ifne 84
+ 68: iload 6
+ 70: ifne 84
+ 73: iload 7
+ 75: ifne 84
+ 78: iload 8
+ 80: ifne 84
+ 83: return
+ 84: aload_0
+ 85: invokevirtual #173 // Method net/minecraftforge/client/event/RenderHandEvent.getHand:()Lnet/minecraft/world/InteractionHand;
+ 88: getstatic #179 // Field net/minecraft/world/InteractionHand.MAIN_HAND:Lnet/minecraft/world/InteractionHand;
+ 91: if_acmpne 128
+ 94: iload 5
+ 96: ifeq 109
+ 99: aload_0
+ 100: aload_2
+ 101: ldc #180 // float 0.35f
+ 103: invokestatic #184 // Method applyRetainedVanillaViewBob:(Lnet/minecraftforge/client/event/RenderHandEvent;Lnet/minecraft/world/entity/player/Player;F)V
+ 106: goto 128
+ 109: iload 7
+ 111: ifeq 128
+ 114: fconst_1
+ 115: invokestatic #190 // Method com/ogaba/sa_combat/client/render/NailGunAimClient.getProgress:()F
+ 118: fsub
+ 119: fstore 9
+ 121: aload_0
+ 122: aload_2
+ 123: fload 9
+ 125: invokestatic #184 // Method applyRetainedVanillaViewBob:(Lnet/minecraftforge/client/event/RenderHandEvent;Lnet/minecraft/world/entity/player/Player;F)V
+ 128: aload_0
+ 129: invokevirtual #173 // Method net/minecraftforge/client/event/RenderHandEvent.getHand:()Lnet/minecraft/world/InteractionHand;
+ 132: getstatic #193 // Field net/minecraft/world/InteractionHand.OFF_HAND:Lnet/minecraft/world/InteractionHand;
+ 135: if_acmpne 143
+ 138: aload_0
+ 139: iconst_1
+ 140: invokevirtual #197 // Method net/minecraftforge/client/event/RenderHandEvent.setCanceled:(Z)V
+ 143: return
+
+ private static void applyRetainedVanillaViewBob(net.minecraftforge.client.event.RenderHandEvent, net.minecraft.world.entity.player.Player, float);
+ Code:
+ 0: invokestatic #144 // Method net/minecraft/client/Minecraft.m_91087_:()Lnet/minecraft/client/Minecraft;
+ 3: astore_3
+ 4: aload_3
+ 5: getfield #214 // Field net/minecraft/client/Minecraft.f_91066_:Lnet/minecraft/client/Options;
+ 8: invokevirtual #220 // Method net/minecraft/client/Options.m_231830_:()Lnet/minecraft/client/OptionInstance;
+ 11: invokevirtual #226 // Method net/minecraft/client/OptionInstance.m_231551_:()Ljava/lang/Object;
+ 14: checkcast #228 // class java/lang/Boolean
+ 17: invokevirtual #232 // Method java/lang/Boolean.booleanValue:()Z
+ 20: ifne 24
+ 23: return
+ 24: fload_2
+ 25: fconst_0
+ 26: fconst_1
+ 27: invokestatic #238 // Method net/minecraft/util/Mth.m_14036_:(FFF)F
+ 30: fstore_2
+ 31: aload_0
+ 32: invokevirtual #241 // Method net/minecraftforge/client/event/RenderHandEvent.getPartialTick:()F
+ 35: fstore 4
+ 37: aload_1
+ 38: getfield #244 // Field net/minecraft/world/entity/player/Player.f_19787_:F
+ 41: aload_1
+ 42: getfield #247 // Field net/minecraft/world/entity/player/Player.f_19867_:F
+ 45: fsub
+ 46: fstore 5
+ 48: aload_1
+ 49: getfield #244 // Field net/minecraft/world/entity/player/Player.f_19787_:F
+ 52: fload 5
+ 54: fload 4
+ 56: fmul
+ 57: fadd
+ 58: fneg
+ 59: fstore 6
+ 61: fload 4
+ 63: aload_1
+ 64: getfield #250 // Field net/minecraft/world/entity/player/Player.f_36099_:F
+ 67: aload_1
+ 68: getfield #253 // Field net/minecraft/world/entity/player/Player.f_36100_:F
+ 71: invokestatic #256 // Method net/minecraft/util/Mth.m_14179_:(FFF)F
+ 74: fstore 7
+ 76: fload 6
+ 78: ldc_w #257 // float 3.1415927f
+ 81: fmul
+ 82: invokestatic #261 // Method net/minecraft/util/Mth.m_14031_:(F)F
+ 85: fload 7
+ 87: fmul
+ 88: ldc_w #262 // float 0.5f
+ 91: fmul
+ 92: fstore 8
+ 94: fload 6
+ 96: ldc_w #257 // float 3.1415927f
+ 99: fmul
+ 100: invokestatic #265 // Method net/minecraft/util/Mth.m_14089_:(F)F
+ 103: fload 7
+ 105: fmul
+ 106: invokestatic #270 // Method java/lang/Math.abs:(F)F
+ 109: fneg
+ 110: fstore 9
+ 112: fload 6
+ 114: ldc_w #257 // float 3.1415927f
+ 117: fmul
+ 118: invokestatic #261 // Method net/minecraft/util/Mth.m_14031_:(F)F
+ 121: fload 7
+ 123: fmul
+ 124: ldc_w #271 // float 3.0f
+ 127: fmul
+ 128: fstore 10
+ 130: fload 6
+ 132: ldc_w #257 // float 3.1415927f
+ 135: fmul
+ 136: ldc_w #272 // float 0.2f
+ 139: fsub
+ 140: invokestatic #265 // Method net/minecraft/util/Mth.m_14089_:(F)F
+ 143: fload 7
+ 145: fmul
+ 146: invokestatic #270 // Method java/lang/Math.abs:(F)F
+ 149: ldc_w #273 // float 5.0f
+ 152: fmul
+ 153: fstore 11
+ 155: aload_0
+ 156: invokevirtual #277 // Method net/minecraftforge/client/event/RenderHandEvent.getPoseStack:()Lcom/mojang/blaze3d/vertex/PoseStack;
+ 159: astore 12
+ 161: aload 12
+ 163: getstatic #283 // Field com/mojang/math/Axis.f_252529_:Lcom/mojang/math/Axis;
+ 166: fload 11
+ 168: fneg
+ 169: invokeinterface #287, 2 // InterfaceMethod com/mojang/math/Axis.m_252977_:(F)Lorg/joml/Quaternionf;
+ 174: invokevirtual #293 // Method com/mojang/blaze3d/vertex/PoseStack.m_252781_:(Lorg/joml/Quaternionf;)V
+ 177: aload 12
+ 179: getstatic #296 // Field com/mojang/math/Axis.f_252403_:Lcom/mojang/math/Axis;
+ 182: fload 10
+ 184: fneg
+ 185: invokeinterface #287, 2 // InterfaceMethod com/mojang/math/Axis.m_252977_:(F)Lorg/joml/Quaternionf;
+ 190: invokevirtual #293 // Method com/mojang/blaze3d/vertex/PoseStack.m_252781_:(Lorg/joml/Quaternionf;)V
+ 193: aload 12
+ 195: fload 8
+ 197: fneg
+ 198: f2d
+ 199: fload 9
+ 201: fneg
+ 202: f2d
+ 203: dconst_0
+ 204: invokevirtual #300 // Method com/mojang/blaze3d/vertex/PoseStack.m_85837_:(DDD)V
+ 207: aload 12
+ 209: fload 8
+ 211: fload_2
+ 212: fmul
+ 213: f2d
+ 214: fload 9
+ 216: fload_2
+ 217: fmul
+ 218: f2d
+ 219: dconst_0
+ 220: invokevirtual #300 // Method com/mojang/blaze3d/vertex/PoseStack.m_85837_:(DDD)V
+ 223: aload 12
+ 225: getstatic #296 // Field com/mojang/math/Axis.f_252403_:Lcom/mojang/math/Axis;
+ 228: fload 10
+ 230: fload_2
+ 231: fmul
+ 232: invokeinterface #287, 2 // InterfaceMethod com/mojang/math/Axis.m_252977_:(F)Lorg/joml/Quaternionf;
+ 237: invokevirtual #293 // Method com/mojang/blaze3d/vertex/PoseStack.m_252781_:(Lorg/joml/Quaternionf;)V
+ 240: aload 12
+ 242: getstatic #283 // Field com/mojang/math/Axis.f_252529_:Lcom/mojang/math/Axis;
+ 245: fload 11
+ 247: fload_2
+ 248: fmul
+ 249: invokeinterface #287, 2 // InterfaceMethod com/mojang/math/Axis.m_252977_:(F)Lorg/joml/Quaternionf;
+ 254: invokevirtual #293 // Method com/mojang/blaze3d/vertex/PoseStack.m_252781_:(Lorg/joml/Quaternionf;)V
+ 257: return
+
+ public static void onClientTick(net.minecraftforge.event.TickEvent$ClientTickEvent);
+ Code:
+ 0: aload_0
+ 1: getfield #317 // Field net/minecraftforge/event/TickEvent$ClientTickEvent.phase:Lnet/minecraftforge/event/TickEvent$Phase;
+ 4: getstatic #320 // Field net/minecraftforge/event/TickEvent$Phase.END:Lnet/minecraftforge/event/TickEvent$Phase;
+ 7: if_acmpne 28
+ 10: invokestatic #325 // Method com/ogaba/sa_combat/client/sound/ChainsawSoundManager.tick:()V
+ 13: invokestatic #326 // Method com/ogaba/sa_combat/client/render/NailGunAimClient.tick:()V
+ 16: invokestatic #329 // Method tickNailGunThirdPersonSounds:()V
+ 19: invokestatic #332 // Method tickNailGunTrigger:()V
+ 22: invokestatic #335 // Method tickNailGunReloadKey:()V
+ 25: invokestatic #338 // Method tickCrossbowAmmoCycle:()V
+ 28: return
+
+ public static void onRenderPlayerPre(net.minecraftforge.client.event.RenderPlayerEvent$Pre);
+ Code:
+ 0: invokestatic #144 // Method net/minecraft/client/Minecraft.m_91087_:()Lnet/minecraft/client/Minecraft;
+ 3: getfield #148 // Field net/minecraft/client/Minecraft.f_91074_:Lnet/minecraft/client/player/LocalPlayer;
+ 6: astore_1
+ 7: aload_1
+ 8: ifnull 19
+ 11: aload_0
+ 12: invokevirtual #345 // Method net/minecraftforge/client/event/RenderPlayerEvent$Pre.getEntity:()Lnet/minecraft/world/entity/player/Player;
+ 15: aload_1
+ 16: if_acmpeq 20
+ 19: return
+ 20: aload_1
+ 21: invokevirtual #348 // Method net/minecraft/client/player/AbstractClientPlayer.m_21205_:()Lnet/minecraft/world/item/ItemStack;
+ 24: astore_2
+ 25: aload_2
+ 26: invokevirtual #163 // Method net/minecraft/world/item/ItemStack.m_41720_:()Lnet/minecraft/world/item/Item;
+ 29: instanceof #167 // class com/ogaba/sa_combat/combat/weapon/NailGunItem
+ 32: ifne 36
+ 35: return
+ 36: invokestatic #190 // Method com/ogaba/sa_combat/client/render/NailGunAimClient.getProgress:()F
+ 39: ldc_w #349 // float 0.01f
+ 42: fcmpl
+ 43: ifgt 53
+ 46: aload_1
+ 47: invokevirtual #352 // Method net/minecraft/client/player/AbstractClientPlayer.m_6117_:()Z
+ 50: ifeq 57
+ 53: iconst_1
+ 54: goto 58
+ 57: iconst_0
+ 58: istore_3
+ 59: iload_3
+ 60: ifne 64
+ 63: return
+ 64: aload_0
+ 65: invokevirtual #356 // Method net/minecraftforge/client/event/RenderPlayerEvent$Pre.getRenderer:()Lnet/minecraft/client/renderer/entity/player/PlayerRenderer;
+ 68: invokevirtual #362 // Method net/minecraft/client/renderer/entity/player/PlayerRenderer.m_7200_:()Lnet/minecraft/client/model/EntityModel;
+ 71: checkcast #364 // class net/minecraft/client/model/PlayerModel
+ 74: astore 4
+ 76: aload_1
+ 77: invokevirtual #368 // Method net/minecraft/client/player/AbstractClientPlayer.m_5737_:()Lnet/minecraft/world/entity/HumanoidArm;
+ 80: astore 5
+ 82: aload 5
+ 84: getstatic #374 // Field net/minecraft/world/entity/HumanoidArm.RIGHT:Lnet/minecraft/world/entity/HumanoidArm;
+ 87: if_acmpne 109
+ 90: aload 4
+ 92: getstatic #380 // Field com/ogaba/sa_combat/client/SACombatArmPoses.NAIL_GUN_AIM:Lnet/minecraft/client/model/HumanoidModel$ArmPose;
+ 95: putfield #383 // Field net/minecraft/client/model/PlayerModel.f_102816_:Lnet/minecraft/client/model/HumanoidModel$ArmPose;
+ 98: aload 4
+ 100: getstatic #386 // Field net/minecraft/client/model/HumanoidModel$ArmPose.ITEM:Lnet/minecraft/client/model/HumanoidModel$ArmPose;
+ 103: putfield #389 // Field net/minecraft/client/model/PlayerModel.f_102815_:Lnet/minecraft/client/model/HumanoidModel$ArmPose;
+ 106: goto 125
+ 109: aload 4
+ 111: getstatic #380 // Field com/ogaba/sa_combat/client/SACombatArmPoses.NAIL_GUN_AIM:Lnet/minecraft/client/model/HumanoidModel$ArmPose;
+ 114: putfield #389 // Field net/minecraft/client/model/PlayerModel.f_102815_:Lnet/minecraft/client/model/HumanoidModel$ArmPose;
+ 117: aload 4
+ 119: getstatic #386 // Field net/minecraft/client/model/HumanoidModel$ArmPose.ITEM:Lnet/minecraft/client/model/HumanoidModel$ArmPose;
+ 122: putfield #383 // Field net/minecraft/client/model/PlayerModel.f_102816_:Lnet/minecraft/client/model/HumanoidModel$ArmPose;
+ 125: return
+
+ public static void onNailGunAimMovement(net.minecraftforge.client.event.MovementInputUpdateEvent);
+ Code:
+ 0: aload_0
+ 1: invokevirtual #403 // Method net/minecraftforge/client/event/MovementInputUpdateEvent.getEntity:()Lnet/minecraft/world/entity/player/Player;
+ 4: astore_1
+ 5: aload_1
+ 6: invokevirtual #154 // Method net/minecraft/world/entity/player/Player.m_21205_:()Lnet/minecraft/world/item/ItemStack;
+ 9: invokevirtual #163 // Method net/minecraft/world/item/ItemStack.m_41720_:()Lnet/minecraft/world/item/Item;
+ 12: instanceof #167 // class com/ogaba/sa_combat/combat/weapon/NailGunItem
+ 15: ifne 19
+ 18: return
+ 19: invokestatic #190 // Method com/ogaba/sa_combat/client/render/NailGunAimClient.getProgress:()F
+ 22: fstore_2
+ 23: fload_2
+ 24: ldc_w #349 // float 0.01f
+ 27: fcmpg
+ 28: ifgt 32
+ 31: return
+ 32: invokestatic #406 // Method com/ogaba/sa_combat/client/render/NailGunAimClient.getMovementMultiplier:()F
+ 35: fstore_3
+ 36: aload_0
+ 37: invokevirtual #410 // Method net/minecraftforge/client/event/MovementInputUpdateEvent.getInput:()Lnet/minecraft/client/player/Input;
+ 40: dup
+ 41: getfield #415 // Field net/minecraft/client/player/Input.f_108566_:F
+ 44: fload_3
+ 45: fmul
+ 46: putfield #415 // Field net/minecraft/client/player/Input.f_108566_:F
+ 49: aload_0
+ 50: invokevirtual #410 // Method net/minecraftforge/client/event/MovementInputUpdateEvent.getInput:()Lnet/minecraft/client/player/Input;
+ 53: dup
+ 54: getfield #418 // Field net/minecraft/client/player/Input.f_108567_:F
+ 57: fload_3
+ 58: fmul
+ 59: putfield #418 // Field net/minecraft/client/player/Input.f_108567_:F
+ 62: fload_2
+ 63: ldc_w #419 // float 0.05f
+ 66: fcmpl
+ 67: ifle 82
+ 70: aload_1
+ 71: invokevirtual #422 // Method net/minecraft/world/entity/player/Player.m_20142_:()Z
+ 74: ifeq 82
+ 77: aload_1
+ 78: iconst_0
+ 79: invokevirtual #425 // Method net/minecraft/world/entity/player/Player.m_6858_:(Z)V
+ 82: return
+
+ private static void tickCrossbowAmmoCycle();
+ Code:
+ 0: invokestatic #144 // Method net/minecraft/client/Minecraft.m_91087_:()Lnet/minecraft/client/Minecraft;
+ 3: astore_0
+ 4: aload_0
+ 5: getfield #148 // Field net/minecraft/client/Minecraft.f_91074_:Lnet/minecraft/client/player/LocalPlayer;
+ 8: astore_1
+ 9: aload_1
+ 10: ifnull 20
+ 13: aload_0
+ 14: getfield #432 // Field net/minecraft/client/Minecraft.f_91080_:Lnet/minecraft/client/gui/screens/Screen;
+ 17: ifnull 25
+ 20: iconst_0
+ 21: putstatic #434 // Field crossbowCycleWasDown:Z
+ 24: return
+ 25: aload_1
+ 26: invokevirtual #154 // Method net/minecraft/world/entity/player/Player.m_21205_:()Lnet/minecraft/world/item/ItemStack;
+ 29: invokevirtual #163 // Method net/minecraft/world/item/ItemStack.m_41720_:()Lnet/minecraft/world/item/Item;
+ 32: instanceof #46 // class com/ogaba/sa_combat/combat/weapon/TacticalCrossbowItem
+ 35: ifne 51
+ 38: aload_1
+ 39: invokevirtual #157 // Method net/minecraft/world/entity/player/Player.m_21206_:()Lnet/minecraft/world/item/ItemStack;
+ 42: invokevirtual #163 // Method net/minecraft/world/item/ItemStack.m_41720_:()Lnet/minecraft/world/item/Item;
+ 45: instanceof #46 // class com/ogaba/sa_combat/combat/weapon/TacticalCrossbowItem
+ 48: ifeq 55
+ 51: iconst_1
+ 52: goto 56
+ 55: iconst_0
+ 56: istore_2
+ 57: iload_2
+ 58: ifne 66
+ 61: iconst_0
+ 62: putstatic #434 // Field crossbowCycleWasDown:Z
+ 65: return
+ 66: aload_0
+ 67: getfield #214 // Field net/minecraft/client/Minecraft.f_91066_:Lnet/minecraft/client/Options;
+ 70: getfield #438 // Field net/minecraft/client/Options.f_92096_:Lnet/minecraft/client/KeyMapping;
+ 73: invokevirtual #443 // Method net/minecraft/client/KeyMapping.m_90857_:()Z
+ 76: ifeq 90
+ 79: aload_1
+ 80: invokevirtual #446 // Method net/minecraft/world/entity/player/Player.m_6144_:()Z
+ 83: ifeq 90
+ 86: iconst_1
+ 87: goto 91
+ 90: iconst_0
+ 91: istore_3
+ 92: getstatic #434 // Field crossbowCycleWasDown:Z
+ 95: istore 4
+ 97: iload_3
+ 98: putstatic #434 // Field crossbowCycleWasDown:Z
+ 101: iload_3
+ 102: ifeq 123
+ 105: iload 4
+ 107: ifne 123
+ 110: getstatic #452 // Field com/ogaba/sa_combat/network/ModMessages.INSTANCE:Lnet/minecraftforge/network/simple/SimpleChannel;
+ 113: new #454 // class com/ogaba/sa_combat/network/packet/CycleBoltTypeC2SPacket
+ 116: dup
+ 117: invokespecial #455 // Method com/ogaba/sa_combat/network/packet/CycleBoltTypeC2SPacket."":()V
+ 120: invokevirtual #461 // Method net/minecraftforge/network/simple/SimpleChannel.sendToServer:(Ljava/lang/Object;)V
+ 123: return
+
+ public static void onNailGunInteractionKey(net.minecraftforge.client.event.InputEvent$InteractionKeyMappingTriggered);
+ Code:
+ 0: invokestatic #144 // Method net/minecraft/client/Minecraft.m_91087_:()Lnet/minecraft/client/Minecraft;
+ 3: astore_1
+ 4: aload_1
+ 5: getfield #148 // Field net/minecraft/client/Minecraft.f_91074_:Lnet/minecraft/client/player/LocalPlayer;
+ 8: astore_2
+ 9: aload_2
+ 10: ifnull 33
+ 13: aload_1
+ 14: getfield #432 // Field net/minecraft/client/Minecraft.f_91080_:Lnet/minecraft/client/gui/screens/Screen;
+ 17: ifnonnull 33
+ 20: aload_2
+ 21: invokevirtual #154 // Method net/minecraft/world/entity/player/Player.m_21205_:()Lnet/minecraft/world/item/ItemStack;
+ 24: invokevirtual #163 // Method net/minecraft/world/item/ItemStack.m_41720_:()Lnet/minecraft/world/item/Item;
+ 27: instanceof #167 // class com/ogaba/sa_combat/combat/weapon/NailGunItem
+ 30: ifne 34
+ 33: return
+ 34: aload_0
+ 35: invokevirtual #472 // Method net/minecraftforge/client/event/InputEvent$InteractionKeyMappingTriggered.isAttack:()Z
+ 38: ifne 48
+ 41: aload_0
+ 42: invokevirtual #475 // Method net/minecraftforge/client/event/InputEvent$InteractionKeyMappingTriggered.isUseItem:()Z
+ 45: ifeq 58
+ 48: aload_0
+ 49: iconst_0
+ 50: invokevirtual #478 // Method net/minecraftforge/client/event/InputEvent$InteractionKeyMappingTriggered.setSwingHand:(Z)V
+ 53: aload_0
+ 54: iconst_1
+ 55: invokevirtual #479 // Method net/minecraftforge/client/event/InputEvent$InteractionKeyMappingTriggered.setCanceled:(Z)V
+ 58: return
+
+ private static void tickNailGunThirdPersonSounds();
+ Code:
+ 0: invokestatic #144 // Method net/minecraft/client/Minecraft.m_91087_:()Lnet/minecraft/client/Minecraft;
+ 3: astore_0
+ 4: aload_0
+ 5: getfield #148 // Field net/minecraft/client/Minecraft.f_91074_:Lnet/minecraft/client/player/LocalPlayer;
+ 8: astore_1
+ 9: aload_1
+ 10: ifnull 33
+ 13: aload_0
+ 14: getfield #432 // Field net/minecraft/client/Minecraft.f_91080_:Lnet/minecraft/client/gui/screens/Screen;
+ 17: ifnonnull 33
+ 20: aload_0
+ 21: getfield #214 // Field net/minecraft/client/Minecraft.f_91066_:Lnet/minecraft/client/Options;
+ 24: invokevirtual #484 // Method net/minecraft/client/Options.m_92176_:()Lnet/minecraft/client/CameraType;
+ 27: invokevirtual #489 // Method net/minecraft/client/CameraType.m_90612_:()Z
+ 30: ifeq 44
+ 33: ldc2_w #490 // long -9223372036854775808l
+ 36: putstatic #493 // Field thirdPersonNailGunStackId:J
+ 39: iconst_0
+ 40: putstatic #495 // Field thirdPersonNailGunReloadWasActive:Z
+ 43: return
+ 44: aload_1
+ 45: invokevirtual #154 // Method net/minecraft/world/entity/player/Player.m_21205_:()Lnet/minecraft/world/item/ItemStack;
+ 48: astore_2
+ 49: aload_2
+ 50: invokevirtual #163 // Method net/minecraft/world/item/ItemStack.m_41720_:()Lnet/minecraft/world/item/Item;
+ 53: instanceof #167 // class com/ogaba/sa_combat/combat/weapon/NailGunItem
+ 56: ifne 70
+ 59: ldc2_w #490 // long -9223372036854775808l
+ 62: putstatic #493 // Field thirdPersonNailGunStackId:J
+ 65: iconst_0
+ 66: putstatic #495 // Field thirdPersonNailGunReloadWasActive:Z
+ 69: return
+ 70: aload_2
+ 71: invokestatic #501 // InterfaceMethod software/bernie/geckolib/animatable/GeoItem.getId:(Lnet/minecraft/world/item/ItemStack;)J
+ 74: lstore_3
+ 75: getstatic #493 // Field thirdPersonNailGunStackId:J
+ 78: lload_3
+ 79: lcmp
+ 80: ifeq 125
+ 83: lload_3
+ 84: putstatic #493 // Field thirdPersonNailGunStackId:J
+ 87: iconst_0
+ 88: putstatic #495 // Field thirdPersonNailGunReloadWasActive:Z
+ 91: aload_1
+ 92: invokevirtual #505 // Method net/minecraft/world/entity/player/Player.m_9236_:()Lnet/minecraft/world/level/Level;
+ 95: aload_1
+ 96: invokevirtual #509 // Method net/minecraft/world/entity/player/Player.m_20185_:()D
+ 99: aload_1
+ 100: invokevirtual #512 // Method net/minecraft/world/entity/player/Player.m_20186_:()D
+ 103: aload_1
+ 104: invokevirtual #515 // Method net/minecraft/world/entity/player/Player.m_20189_:()D
+ 107: getstatic #521 // Field com/ogaba/sa_combat/registry/ModSounds.NAIL_GUN_DRAW:Lnet/minecraftforge/registries/RegistryObject;
+ 110: invokevirtual #526 // Method net/minecraftforge/registries/RegistryObject.get:()Ljava/lang/Object;
+ 113: checkcast #528 // class net/minecraft/sounds/SoundEvent
+ 116: getstatic #534 // Field net/minecraft/sounds/SoundSource.PLAYERS:Lnet/minecraft/sounds/SoundSource;
+ 119: fconst_1
+ 120: fconst_1
+ 121: iconst_0
+ 122: invokevirtual #540 // Method net/minecraft/world/level/Level.m_7785_:(DDDLnet/minecraft/sounds/SoundEvent;Lnet/minecraft/sounds/SoundSource;FFZ)V
+ 125: aload_2
+ 126: invokestatic #544 // Method com/ogaba/sa_combat/combat/weapon/NailGunItem.isReloading:(Lnet/minecraft/world/item/ItemStack;)Z
+ 129: ifne 139
+ 132: aload_2
+ 133: invokestatic #547 // Method com/ogaba/sa_combat/combat/weapon/NailGunItem.isClientReloadAnimationActive:(Lnet/minecraft/world/item/ItemStack;)Z
+ 136: ifeq 143
+ 139: iconst_1
+ 140: goto 144
+ 143: iconst_0
+ 144: istore 5
+ 146: iload 5
+ 148: ifeq 191
+ 151: getstatic #495 // Field thirdPersonNailGunReloadWasActive:Z
+ 154: ifne 191
+ 157: aload_1
+ 158: invokevirtual #505 // Method net/minecraft/world/entity/player/Player.m_9236_:()Lnet/minecraft/world/level/Level;
+ 161: aload_1
+ 162: invokevirtual #509 // Method net/minecraft/world/entity/player/Player.m_20185_:()D
+ 165: aload_1
+ 166: invokevirtual #512 // Method net/minecraft/world/entity/player/Player.m_20186_:()D
+ 169: aload_1
+ 170: invokevirtual #515 // Method net/minecraft/world/entity/player/Player.m_20189_:()D
+ 173: getstatic #550 // Field com/ogaba/sa_combat/registry/ModSounds.NAIL_GUN_RELOAD:Lnet/minecraftforge/registries/RegistryObject;
+ 176: invokevirtual #526 // Method net/minecraftforge/registries/RegistryObject.get:()Ljava/lang/Object;
+ 179: checkcast #528 // class net/minecraft/sounds/SoundEvent
+ 182: getstatic #534 // Field net/minecraft/sounds/SoundSource.PLAYERS:Lnet/minecraft/sounds/SoundSource;
+ 185: fconst_1
+ 186: fconst_1
+ 187: iconst_0
+ 188: invokevirtual #540 // Method net/minecraft/world/level/Level.m_7785_:(DDDLnet/minecraft/sounds/SoundEvent;Lnet/minecraft/sounds/SoundSource;FFZ)V
+ 191: iload 5
+ 193: putstatic #495 // Field thirdPersonNailGunReloadWasActive:Z
+ 196: return
+
+ private static void tickNailGunTrigger();
+ Code:
+ 0: invokestatic #144 // Method net/minecraft/client/Minecraft.m_91087_:()Lnet/minecraft/client/Minecraft;
+ 3: astore_0
+ 4: aload_0
+ 5: getfield #148 // Field net/minecraft/client/Minecraft.f_91074_:Lnet/minecraft/client/player/LocalPlayer;
+ 8: astore_1
+ 9: aload_1
+ 10: ifnull 20
+ 13: aload_0
+ 14: getfield #432 // Field net/minecraft/client/Minecraft.f_91080_:Lnet/minecraft/client/gui/screens/Screen;
+ 17: ifnull 29
+ 20: iconst_0
+ 21: putstatic #555 // Field nailGunTriggerWasDown:Z
+ 24: fconst_0
+ 25: putstatic #557 // Field nailGunAutoFireAccumulator:F
+ 28: return
+ 29: aload_1
+ 30: invokestatic #561 // Method resolveNailGunHand:(Lnet/minecraft/world/entity/player/Player;)Lnet/minecraft/world/InteractionHand;
+ 33: astore_2
+ 34: aload_2
+ 35: ifnonnull 47
+ 38: iconst_0
+ 39: putstatic #555 // Field nailGunTriggerWasDown:Z
+ 42: fconst_0
+ 43: putstatic #557 // Field nailGunAutoFireAccumulator:F
+ 46: return
+ 47: aload_1
+ 48: aload_2
+ 49: invokevirtual #565 // Method net/minecraft/world/entity/player/Player.m_21120_:(Lnet/minecraft/world/InteractionHand;)Lnet/minecraft/world/item/ItemStack;
+ 52: astore_3
+ 53: aload_0
+ 54: getfield #214 // Field net/minecraft/client/Minecraft.f_91066_:Lnet/minecraft/client/Options;
+ 57: getfield #438 // Field net/minecraft/client/Options.f_92096_:Lnet/minecraft/client/KeyMapping;
+ 60: invokevirtual #443 // Method net/minecraft/client/KeyMapping.m_90857_:()Z
+ 63: istore 4
+ 65: getstatic #555 // Field nailGunTriggerWasDown:Z
+ 68: istore 5
+ 70: iload 4
+ 72: putstatic #555 // Field nailGunTriggerWasDown:Z
+ 75: iload 4
+ 77: ifeq 101
+ 80: aload_3
+ 81: invokestatic #544 // Method com/ogaba/sa_combat/combat/weapon/NailGunItem.isReloading:(Lnet/minecraft/world/item/ItemStack;)Z
+ 84: ifne 101
+ 87: aload_3
+ 88: invokestatic #547 // Method com/ogaba/sa_combat/combat/weapon/NailGunItem.isClientReloadAnimationActive:(Lnet/minecraft/world/item/ItemStack;)Z
+ 91: ifne 101
+ 94: aload_1
+ 95: invokevirtual #422 // Method net/minecraft/world/entity/player/Player.m_20142_:()Z
+ 98: ifeq 106
+ 101: fconst_0
+ 102: putstatic #557 // Field nailGunAutoFireAccumulator:F
+ 105: return
+ 106: iload 5
+ 108: ifne 121
+ 111: iconst_1
+ 112: istore 6
+ 114: fconst_0
+ 115: putstatic #557 // Field nailGunAutoFireAccumulator:F
+ 118: goto 159
+ 121: getstatic #557 // Field nailGunAutoFireAccumulator:F
+ 124: ldc_w #566 // float 0.6f
+ 127: fadd
+ 128: putstatic #557 // Field nailGunAutoFireAccumulator:F
+ 131: getstatic #557 // Field nailGunAutoFireAccumulator:F
+ 134: fconst_1
+ 135: fcmpl
+ 136: iflt 143
+ 139: iconst_1
+ 140: goto 144
+ 143: iconst_0
+ 144: istore 6
+ 146: iload 6
+ 148: ifeq 159
+ 151: getstatic #557 // Field nailGunAutoFireAccumulator:F
+ 154: fconst_1
+ 155: fsub
+ 156: putstatic #557 // Field nailGunAutoFireAccumulator:F
+ 159: iload 6
+ 161: ifeq 171
+ 164: aload_3
+ 165: invokestatic #570 // Method com/ogaba/sa_combat/combat/weapon/NailGunItem.getMagazine:(Lnet/minecraft/world/item/ItemStack;)I
+ 168: ifgt 172
+ 171: return
+ 172: aload_3
+ 173: invokevirtual #163 // Method net/minecraft/world/item/ItemStack.m_41720_:()Lnet/minecraft/world/item/Item;
+ 176: checkcast #167 // class com/ogaba/sa_combat/combat/weapon/NailGunItem
+ 179: aload_1
+ 180: invokevirtual #505 // Method net/minecraft/world/entity/player/Player.m_9236_:()Lnet/minecraft/world/level/Level;
+ 183: aload_1
+ 184: aload_3
+ 185: aload_2
+ 186: invokevirtual #574 // Method com/ogaba/sa_combat/combat/weapon/NailGunItem.fire:(Lnet/minecraft/world/level/Level;Lnet/minecraft/world/entity/player/Player;Lnet/minecraft/world/item/ItemStack;Lnet/minecraft/world/InteractionHand;)V
+ 189: aload_1
+ 190: invokevirtual #505 // Method net/minecraft/world/entity/player/Player.m_9236_:()Lnet/minecraft/world/level/Level;
+ 193: aload_1
+ 194: aload_3
+ 195: invokestatic #578 // Method com/ogaba/sa_combat/combat/weapon/NailGunItem.playLocalShotSound:(Lnet/minecraft/world/level/Level;Lnet/minecraft/world/entity/player/Player;Lnet/minecraft/world/item/ItemStack;)V
+ 198: getstatic #452 // Field com/ogaba/sa_combat/network/ModMessages.INSTANCE:Lnet/minecraftforge/network/simple/SimpleChannel;
+ 201: new #580 // class com/ogaba/sa_combat/network/packet/FireNailGunC2SPacket
+ 204: dup
+ 205: aload_2
+ 206: invokestatic #190 // Method com/ogaba/sa_combat/client/render/NailGunAimClient.getProgress:()F
+ 209: invokespecial #583 // Method com/ogaba/sa_combat/network/packet/FireNailGunC2SPacket."":(Lnet/minecraft/world/InteractionHand;F)V
+ 212: invokevirtual #461 // Method net/minecraftforge/network/simple/SimpleChannel.sendToServer:(Ljava/lang/Object;)V
+ 215: return
+
+ private static void tickNailGunReloadKey();
+ Code:
+ 0: invokestatic #144 // Method net/minecraft/client/Minecraft.m_91087_:()Lnet/minecraft/client/Minecraft;
+ 3: astore_0
+ 4: getstatic #590 // Field com/ogaba/sa_combat/client/ModKeyBindings.RELOAD_NAIL_GUN:Lnet/minecraft/client/KeyMapping;
+ 7: invokevirtual #593 // Method net/minecraft/client/KeyMapping.m_90859_:()Z
+ 10: ifeq 150
+ 13: aload_0
+ 14: getfield #148 // Field net/minecraft/client/Minecraft.f_91074_:Lnet/minecraft/client/player/LocalPlayer;
+ 17: astore_1
+ 18: aload_1
+ 19: ifnonnull 26
+ 22: aconst_null
+ 23: goto 30
+ 26: aload_1
+ 27: invokestatic #561 // Method resolveNailGunHand:(Lnet/minecraft/world/entity/player/Player;)Lnet/minecraft/world/InteractionHand;
+ 30: astore_2
+ 31: aload_1
+ 32: ifnull 4
+ 35: aload_2
+ 36: ifnonnull 42
+ 39: goto 4
+ 42: aload_1
+ 43: aload_2
+ 44: invokevirtual #565 // Method net/minecraft/world/entity/player/Player.m_21120_:(Lnet/minecraft/world/InteractionHand;)Lnet/minecraft/world/item/ItemStack;
+ 47: astore_3
+ 48: aload_3
+ 49: invokevirtual #163 // Method net/minecraft/world/item/ItemStack.m_41720_:()Lnet/minecraft/world/item/Item;
+ 52: instanceof #167 // class com/ogaba/sa_combat/combat/weapon/NailGunItem
+ 55: ifne 61
+ 58: goto 4
+ 61: aload_1
+ 62: invokevirtual #597 // Method net/minecraft/world/entity/player/Player.m_150110_:()Lnet/minecraft/world/entity/player/Abilities;
+ 65: getfield #602 // Field net/minecraft/world/entity/player/Abilities.f_35937_:Z
+ 68: ifne 78
+ 71: aload_1
+ 72: invokestatic #606 // Method com/ogaba/sa_combat/combat/weapon/NailGunItem.countReserveAmmo:(Lnet/minecraft/world/entity/player/Player;)I
+ 75: ifle 82
+ 78: iconst_1
+ 79: goto 83
+ 82: iconst_0
+ 83: istore 4
+ 85: aload_3
+ 86: invokestatic #544 // Method com/ogaba/sa_combat/combat/weapon/NailGunItem.isReloading:(Lnet/minecraft/world/item/ItemStack;)Z
+ 89: ifne 119
+ 92: aload_3
+ 93: invokestatic #547 // Method com/ogaba/sa_combat/combat/weapon/NailGunItem.isClientReloadAnimationActive:(Lnet/minecraft/world/item/ItemStack;)Z
+ 96: ifne 119
+ 99: aload_3
+ 100: invokestatic #570 // Method com/ogaba/sa_combat/combat/weapon/NailGunItem.getMagazine:(Lnet/minecraft/world/item/ItemStack;)I
+ 103: aload_3
+ 104: invokestatic #609 // Method com/ogaba/sa_combat/combat/weapon/NailGunItem.magazineCapacity:(Lnet/minecraft/world/item/ItemStack;)I
+ 107: if_icmpge 119
+ 110: iload 4
+ 112: ifeq 119
+ 115: iconst_1
+ 116: goto 120
+ 119: iconst_0
+ 120: istore 5
+ 122: iload 5
+ 124: ifne 130
+ 127: goto 4
+ 130: aload_3
+ 131: invokestatic #613 // Method com/ogaba/sa_combat/combat/weapon/NailGunItem.markClientReloadAnimation:(Lnet/minecraft/world/item/ItemStack;)V
+ 134: getstatic #452 // Field com/ogaba/sa_combat/network/ModMessages.INSTANCE:Lnet/minecraftforge/network/simple/SimpleChannel;
+ 137: new #615 // class com/ogaba/sa_combat/network/packet/ReloadNailGunC2SPacket
+ 140: dup
+ 141: invokespecial #616 // Method com/ogaba/sa_combat/network/packet/ReloadNailGunC2SPacket."":()V
+ 144: invokevirtual #461 // Method net/minecraftforge/network/simple/SimpleChannel.sendToServer:(Ljava/lang/Object;)V
+ 147: goto 4
+ 150: return
+
+ private static net.minecraft.world.InteractionHand resolveNailGunHand(net.minecraft.world.entity.player.Player);
+ Code:
+ 0: aload_0
+ 1: invokevirtual #154 // Method net/minecraft/world/entity/player/Player.m_21205_:()Lnet/minecraft/world/item/ItemStack;
+ 4: invokevirtual #163 // Method net/minecraft/world/item/ItemStack.m_41720_:()Lnet/minecraft/world/item/Item;
+ 7: instanceof #167 // class com/ogaba/sa_combat/combat/weapon/NailGunItem
+ 10: ifeq 17
+ 13: getstatic #179 // Field net/minecraft/world/InteractionHand.MAIN_HAND:Lnet/minecraft/world/InteractionHand;
+ 16: areturn
+ 17: aconst_null
+ 18: areturn
+
+ public static void onItemTooltip(net.minecraftforge.event.entity.player.ItemTooltipEvent);
+ Code:
+ 0: aload_0
+ 1: invokevirtual #626 // Method net/minecraftforge/event/entity/player/ItemTooltipEvent.getItemStack:()Lnet/minecraft/world/item/ItemStack;
+ 4: astore_1
+ 5: aload_1
+ 6: invokevirtual #629 // Method net/minecraft/world/item/ItemStack.m_41619_:()Z
+ 9: ifne 19
+ 12: aload_1
+ 13: invokestatic #634 // Method com/ogaba/sa_combat/combat/weapon/WeaponSlotProfile.isUpgradeableWeapon:(Lnet/minecraft/world/item/ItemStack;)Z
+ 16: ifne 20
+ 19: return
+ 20: aload_1
+ 21: invokevirtual #163 // Method net/minecraft/world/item/ItemStack.m_41720_:()Lnet/minecraft/world/item/Item;
+ 24: instanceof #636 // class com/ogaba/sa_combat/combat/weapon/BaseMeleeWeapon
+ 27: istore_2
+ 28: iload_2
+ 29: ifne 70
+ 32: aload_1
+ 33: invokestatic #641 // Method com/ogaba/sa_combat/combat/attachment/WeaponAttachmentData.hasAnyAttachment:(Lnet/minecraft/world/item/ItemStack;)Z
+ 36: ifne 70
+ 39: aload_1
+ 40: invokestatic #646 // Method com/ogaba/sa_combat/combat/upgrade/WeaponUpgradeData.hasModifier:(Lnet/minecraft/world/item/ItemStack;)Z
+ 43: ifne 70
+ 46: aload_1
+ 47: invokestatic #650 // Method com/ogaba/sa_combat/combat/upgrade/WeaponUpgradeData.getAttributeUpgrades:(Lnet/minecraft/world/item/ItemStack;)Ljava/util/List;
+ 50: invokeinterface #655, 1 // InterfaceMethod java/util/List.isEmpty:()Z
+ 55: ifeq 70
+ 58: aload_1
+ 59: invokestatic #658 // Method com/ogaba/sa_combat/combat/upgrade/WeaponUpgradeData.getAbilityUpgrades:(Lnet/minecraft/world/item/ItemStack;)Ljava/util/List;
+ 62: invokeinterface #655, 1 // InterfaceMethod java/util/List.isEmpty:()Z
+ 67: ifne 74
+ 70: iconst_1
+ 71: goto 75
+ 74: iconst_0
+ 75: istore_3
+ 76: iload_3
+ 77: ifne 81
+ 80: return
+ 81: aload_0
+ 82: invokevirtual #662 // Method net/minecraftforge/event/entity/player/ItemTooltipEvent.getToolTip:()Ljava/util/List;
+ 85: invokestatic #666 // Method removeAttributeLinesBeforeMainHandHeader:(Ljava/util/List;)V
+ 88: aload_0
+ 89: aload_1
+ 90: invokestatic #670 // Method replaceMainHandAttributeTooltip:(Lnet/minecraftforge/event/entity/player/ItemTooltipEvent;Lnet/minecraft/world/item/ItemStack;)V
+ 93: iload_2
+ 94: ifne 132
+ 97: aload_1
+ 98: invokestatic #675 // Method com/ogaba/sa_combat/combat/weapon/WeaponTooltipHelper.buildExternalTooltip:(Lnet/minecraft/world/item/ItemStack;)Ljava/util/List;
+ 101: astore 4
+ 103: aload 4
+ 105: invokeinterface #655, 1 // InterfaceMethod java/util/List.isEmpty:()Z
+ 110: ifne 132
+ 113: aload_0
+ 114: invokevirtual #662 // Method net/minecraftforge/event/entity/player/ItemTooltipEvent.getToolTip:()Ljava/util/List;
+ 117: aload_0
+ 118: invokevirtual #662 // Method net/minecraftforge/event/entity/player/ItemTooltipEvent.getToolTip:()Ljava/util/List;
+ 121: invokestatic #679 // Method findVanillaAttributeInsertIndex:(Ljava/util/List;)I
+ 124: aload 4
+ 126: invokeinterface #683, 3 // InterfaceMethod java/util/List.addAll:(ILjava/util/Collection;)Z
+ 131: pop
+ 132: aload_0
+ 133: invokevirtual #662 // Method net/minecraftforge/event/entity/player/ItemTooltipEvent.getToolTip:()Ljava/util/List;
+ 136: invokestatic #666 // Method removeAttributeLinesBeforeMainHandHeader:(Ljava/util/List;)V
+ 139: return
+
+ private static void removeAttributeLinesBeforeMainHandHeader(java.util.List);
+ Code:
+ 0: aload_0
+ 1: invokestatic #693 // Method findMainHandHeaderIndex:(Ljava/util/List;)I
+ 4: istore_1
+ 5: iload_1
+ 6: ifge 10
+ 9: return
+ 10: iload_1
+ 11: iconst_1
+ 12: isub
+ 13: istore_2
+ 14: iload_2
+ 15: iconst_1
+ 16: if_icmplt 137
+ 19: aload_0
+ 20: iload_2
+ 21: invokeinterface #696, 2 // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
+ 26: checkcast #698 // class net/minecraft/network/chat/Component
+ 29: invokeinterface #702, 1 // InterfaceMethod net/minecraft/network/chat/Component.getString:()Ljava/lang/String;
+ 34: astore_3
+ 35: aload_3
+ 36: invokestatic #706 // Method isMainHandAttributeLine:(Ljava/lang/String;)Z
+ 39: ifeq 131
+ 42: aload_0
+ 43: iload_2
+ 44: invokeinterface #709, 2 // InterfaceMethod java/util/List.remove:(I)Ljava/lang/Object;
+ 49: pop
+ 50: iload_2
+ 51: aload_0
+ 52: invokeinterface #713, 1 // InterfaceMethod java/util/List.size:()I
+ 57: if_icmpge 92
+ 60: aload_0
+ 61: iload_2
+ 62: invokeinterface #696, 2 // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
+ 67: checkcast #698 // class net/minecraft/network/chat/Component
+ 70: invokeinterface #702, 1 // InterfaceMethod net/minecraft/network/chat/Component.getString:()Ljava/lang/String;
+ 75: invokevirtual #718 // Method java/lang/String.isBlank:()Z
+ 78: ifeq 92
+ 81: aload_0
+ 82: iload_2
+ 83: invokeinterface #709, 2 // InterfaceMethod java/util/List.remove:(I)Ljava/lang/Object;
+ 88: pop
+ 89: goto 131
+ 92: iload_2
+ 93: iconst_1
+ 94: isub
+ 95: ifle 131
+ 98: aload_0
+ 99: iload_2
+ 100: iconst_1
+ 101: isub
+ 102: invokeinterface #696, 2 // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
+ 107: checkcast #698 // class net/minecraft/network/chat/Component
+ 110: invokeinterface #702, 1 // InterfaceMethod net/minecraft/network/chat/Component.getString:()Ljava/lang/String;
+ 115: invokevirtual #718 // Method java/lang/String.isBlank:()Z
+ 118: ifeq 131
+ 121: aload_0
+ 122: iload_2
+ 123: iconst_1
+ 124: isub
+ 125: invokeinterface #709, 2 // InterfaceMethod java/util/List.remove:(I)Ljava/lang/Object;
+ 130: pop
+ 131: iinc 2, -1
+ 134: goto 14
+ 137: return
+
+ private static void replaceMainHandAttributeTooltip(net.minecraftforge.event.entity.player.ItemTooltipEvent, net.minecraft.world.item.ItemStack);
+ Code:
+ 0: aload_0
+ 1: invokevirtual #662 // Method net/minecraftforge/event/entity/player/ItemTooltipEvent.getToolTip:()Ljava/util/List;
+ 4: astore_2
+ 5: aload_2
+ 6: invokestatic #693 // Method findMainHandHeaderIndex:(Ljava/util/List;)I
+ 9: istore_3
+ 10: iload_3
+ 11: ifge 15
+ 14: return
+ 15: iload_3
+ 16: iconst_1
+ 17: iadd
+ 18: istore 4
+ 20: iload 4
+ 22: aload_2
+ 23: invokeinterface #713, 1 // InterfaceMethod java/util/List.size:()I
+ 28: if_icmpge 55
+ 31: aload_2
+ 32: iload 4
+ 34: invokeinterface #696, 2 // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
+ 39: checkcast #698 // class net/minecraft/network/chat/Component
+ 42: aload_1
+ 43: invokestatic #727 // Method isTooltipTechnicalTail:(Lnet/minecraft/network/chat/Component;Lnet/minecraft/world/item/ItemStack;)Z
+ 46: ifne 55
+ 49: iinc 4, 1
+ 52: goto 20
+ 55: aload_2
+ 56: iload_3
+ 57: iload 4
+ 59: invokeinterface #731, 3 // InterfaceMethod java/util/List.subList:(II)Ljava/util/List;
+ 64: invokeinterface #734, 1 // InterfaceMethod java/util/List.clear:()V
+ 69: aload_2
+ 70: iload_3
+ 71: aload_1
+ 72: invokestatic #737 // Method buildUnifiedMainHandAttributeTooltip:(Lnet/minecraft/world/item/ItemStack;)Ljava/util/List;
+ 75: invokeinterface #683, 3 // InterfaceMethod java/util/List.addAll:(ILjava/util/Collection;)Z
+ 80: pop
+ 81: return
+
+ private static boolean isTooltipTechnicalTail(net.minecraft.network.chat.Component, net.minecraft.world.item.ItemStack);
+ Code:
+ 0: aload_0
+ 1: ifnonnull 6
+ 4: iconst_0
+ 5: ireturn
+ 6: aload_0
+ 7: invokeinterface #702, 1 // InterfaceMethod net/minecraft/network/chat/Component.getString:()Ljava/lang/String;
+ 12: invokevirtual #741 // Method java/lang/String.trim:()Ljava/lang/String;
+ 15: astore_2
+ 16: aload_2
+ 17: invokevirtual #742 // Method java/lang/String.isEmpty:()Z
+ 20: ifeq 25
+ 23: iconst_0
+ 24: ireturn
+ 25: aload_1
+ 26: invokevirtual #745 // Method net/minecraft/world/item/ItemStack.m_41763_:()Z
+ 29: ifeq 93
+ 32: aload_1
+ 33: invokevirtual #748 // Method net/minecraft/world/item/ItemStack.m_41768_:()Z
+ 36: ifeq 93
+ 39: ldc_w #750 // String item.durability
+ 42: iconst_2
+ 43: anewarray #4 // class java/lang/Object
+ 46: dup
+ 47: iconst_0
+ 48: aload_1
+ 49: invokevirtual #753 // Method net/minecraft/world/item/ItemStack.m_41776_:()I
+ 52: aload_1
+ 53: invokevirtual #756 // Method net/minecraft/world/item/ItemStack.m_41773_:()I
+ 56: isub
+ 57: invokestatic #762 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
+ 60: aastore
+ 61: dup
+ 62: iconst_1
+ 63: aload_1
+ 64: invokevirtual #753 // Method net/minecraft/world/item/ItemStack.m_41776_:()I
+ 67: invokestatic #762 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
+ 70: aastore
+ 71: invokestatic #766 // InterfaceMethod net/minecraft/network/chat/Component.m_237110_:(Ljava/lang/String;[Ljava/lang/Object;)Lnet/minecraft/network/chat/MutableComponent;
+ 74: astore_3
+ 75: aload_2
+ 76: aload_3
+ 77: invokeinterface #702, 1 // InterfaceMethod net/minecraft/network/chat/Component.getString:()Ljava/lang/String;
+ 82: invokevirtual #741 // Method java/lang/String.trim:()Ljava/lang/String;
+ 85: invokevirtual #770 // Method java/lang/String.equals:(Ljava/lang/Object;)Z
+ 88: ifeq 93
+ 91: iconst_1
+ 92: ireturn
+ 93: aload_2
+ 94: getstatic #776 // Field java/util/Locale.ROOT:Ljava/util/Locale;
+ 97: invokevirtual #780 // Method java/lang/String.toLowerCase:(Ljava/util/Locale;)Ljava/lang/String;
+ 100: astore_3
+ 101: aload_3
+ 102: ldc_w #782 // String nbt
+ 105: invokevirtual #785 // Method java/lang/String.startsWith:(Ljava/lang/String;)Z
+ 108: ifeq 113
+ 111: iconst_1
+ 112: ireturn
+ 113: aload_3
+ 114: ldc_w #787 // String [a-z0-9_.-]+:[a-z0-9_./-]+
+ 117: invokevirtual #790 // Method java/lang/String.matches:(Ljava/lang/String;)Z
+ 120: ireturn
+
+ private static java.util.List buildUnifiedMainHandAttributeTooltip(net.minecraft.world.item.ItemStack);
+ Code:
+ 0: new #797 // class java/util/ArrayList
+ 3: dup
+ 4: invokespecial #798 // Method java/util/ArrayList."":()V
+ 7: astore_1
+ 8: aload_1
+ 9: ldc_w #800 // String item.modifiers.mainhand
+ 12: invokestatic #804 // InterfaceMethod net/minecraft/network/chat/Component.m_237115_:(Ljava/lang/String;)Lnet/minecraft/network/chat/MutableComponent;
+ 15: getstatic #810 // Field net/minecraft/ChatFormatting.GRAY:Lnet/minecraft/ChatFormatting;
+ 18: invokevirtual #816 // Method net/minecraft/network/chat/MutableComponent.m_130940_:(Lnet/minecraft/ChatFormatting;)Lnet/minecraft/network/chat/MutableComponent;
+ 21: invokeinterface #819, 2 // InterfaceMethod java/util/List.add:(Ljava/lang/Object;)Z
+ 26: pop
+ 27: aload_0
+ 28: invokestatic #823 // Method totalAttackDamage:(Lnet/minecraft/world/item/ItemStack;)D
+ 31: dstore_2
+ 32: dload_2
+ 33: dconst_0
+ 34: dcmpl
+ 35: ifle 63
+ 38: aload_1
+ 39: dload_2
+ 40: invokestatic #827 // Method fmtAttribute:(D)Ljava/lang/String;
+ 43: invokedynamic #839, 0 // InvokeDynamic #0:makeConcatWithConstants:(Ljava/lang/String;)Ljava/lang/String;
+ 48: invokestatic #842 // InterfaceMethod net/minecraft/network/chat/Component.m_237113_:(Ljava/lang/String;)Lnet/minecraft/network/chat/MutableComponent;
+ 51: getstatic #845 // Field net/minecraft/ChatFormatting.DARK_GREEN:Lnet/minecraft/ChatFormatting;
+ 54: invokevirtual #816 // Method net/minecraft/network/chat/MutableComponent.m_130940_:(Lnet/minecraft/ChatFormatting;)Lnet/minecraft/network/chat/MutableComponent;
+ 57: invokeinterface #819, 2 // InterfaceMethod java/util/List.add:(Ljava/lang/Object;)Z
+ 62: pop
+ 63: aload_0
+ 64: invokestatic #848 // Method totalAttackSpeed:(Lnet/minecraft/world/item/ItemStack;)D
+ 67: dstore 4
+ 69: aload_1
+ 70: dload 4
+ 72: invokestatic #827 // Method fmtAttribute:(D)Ljava/lang/String;
+ 75: invokedynamic #851, 0 // InvokeDynamic #1:makeConcatWithConstants:(Ljava/lang/String;)Ljava/lang/String;
+ 80: invokestatic #842 // InterfaceMethod net/minecraft/network/chat/Component.m_237113_:(Ljava/lang/String;)Lnet/minecraft/network/chat/MutableComponent;
+ 83: getstatic #845 // Field net/minecraft/ChatFormatting.DARK_GREEN:Lnet/minecraft/ChatFormatting;
+ 86: invokevirtual #816 // Method net/minecraft/network/chat/MutableComponent.m_130940_:(Lnet/minecraft/ChatFormatting;)Lnet/minecraft/network/chat/MutableComponent;
+ 89: invokeinterface #819, 2 // InterfaceMethod java/util/List.add:(Ljava/lang/Object;)Z
+ 94: pop
+ 95: aload_0
+ 96: invokestatic #854 // Method totalAttackKnockback:(Lnet/minecraft/world/item/ItemStack;)D
+ 99: dstore 6
+ 101: dload 6
+ 103: invokestatic #857 // Method java/lang/Math.abs:(D)D
+ 106: ldc2_w #858 // double 0.001d
+ 109: dcmpl
+ 110: ifle 139
+ 113: aload_1
+ 114: dload 6
+ 116: invokestatic #827 // Method fmtAttribute:(D)Ljava/lang/String;
+ 119: invokedynamic #862, 0 // InvokeDynamic #2:makeConcatWithConstants:(Ljava/lang/String;)Ljava/lang/String;
+ 124: invokestatic #842 // InterfaceMethod net/minecraft/network/chat/Component.m_237113_:(Ljava/lang/String;)Lnet/minecraft/network/chat/MutableComponent;
+ 127: getstatic #845 // Field net/minecraft/ChatFormatting.DARK_GREEN:Lnet/minecraft/ChatFormatting;
+ 130: invokevirtual #816 // Method net/minecraft/network/chat/MutableComponent.m_130940_:(Lnet/minecraft/ChatFormatting;)Lnet/minecraft/network/chat/MutableComponent;
+ 133: invokeinterface #819, 2 // InterfaceMethod java/util/List.add:(Ljava/lang/Object;)Z
+ 138: pop
+ 139: aload_0
+ 140: invokestatic #865 // Method totalAttackReach:(Lnet/minecraft/world/item/ItemStack;)D
+ 143: dstore 8
+ 145: aload_1
+ 146: dload 8
+ 148: invokestatic #827 // Method fmtAttribute:(D)Ljava/lang/String;
+ 151: invokedynamic #868, 0 // InvokeDynamic #3:makeConcatWithConstants:(Ljava/lang/String;)Ljava/lang/String;
+ 156: invokestatic #842 // InterfaceMethod net/minecraft/network/chat/Component.m_237113_:(Ljava/lang/String;)Lnet/minecraft/network/chat/MutableComponent;
+ 159: getstatic #845 // Field net/minecraft/ChatFormatting.DARK_GREEN:Lnet/minecraft/ChatFormatting;
+ 162: invokevirtual #816 // Method net/minecraft/network/chat/MutableComponent.m_130940_:(Lnet/minecraft/ChatFormatting;)Lnet/minecraft/network/chat/MutableComponent;
+ 165: invokeinterface #819, 2 // InterfaceMethod java/util/List.add:(Ljava/lang/Object;)Z
+ 170: pop
+ 171: aload_1
+ 172: areturn
+
+ private static boolean isMainHandAttributeLine(java.lang.String);
+ Code:
+ 0: aload_0
+ 1: ifnull 11
+ 4: aload_0
+ 5: invokevirtual #718 // Method java/lang/String.isBlank:()Z
+ 8: ifeq 13
+ 11: iconst_0
+ 12: ireturn
+ 13: aload_0
+ 14: getstatic #776 // Field java/util/Locale.ROOT:Ljava/util/Locale;
+ 17: invokevirtual #780 // Method java/lang/String.toLowerCase:(Ljava/util/Locale;)Ljava/lang/String;
+ 20: astore_1
+ 21: aload_1
+ 22: ldc_w #876 // String attack damage
+ 25: invokevirtual #880 // Method java/lang/String.contains:(Ljava/lang/CharSequence;)Z
+ 28: ifne 121
+ 31: aload_1
+ 32: ldc_w #882 // String attack speed
+ 35: invokevirtual #880 // Method java/lang/String.contains:(Ljava/lang/CharSequence;)Z
+ 38: ifne 121
+ 41: aload_1
+ 42: ldc_w #884 // String attack range
+ 45: invokevirtual #880 // Method java/lang/String.contains:(Ljava/lang/CharSequence;)Z
+ 48: ifne 121
+ 51: aload_1
+ 52: ldc_w #886 // String entity reach
+ 55: invokevirtual #880 // Method java/lang/String.contains:(Ljava/lang/CharSequence;)Z
+ 58: ifne 121
+ 61: aload_1
+ 62: ldc_w #888 // String attack knockback
+ 65: invokevirtual #880 // Method java/lang/String.contains:(Ljava/lang/CharSequence;)Z
+ 68: ifne 121
+ 71: aload_1
+ 72: ldc_w #890 // String dano de ataque
+ 75: invokevirtual #880 // Method java/lang/String.contains:(Ljava/lang/CharSequence;)Z
+ 78: ifne 121
+ 81: aload_1
+ 82: ldc_w #892 // String velocidade de ataque
+ 85: invokevirtual #880 // Method java/lang/String.contains:(Ljava/lang/CharSequence;)Z
+ 88: ifne 121
+ 91: aload_1
+ 92: ldc_w #894 // String alcance de ataque
+ 95: invokevirtual #880 // Method java/lang/String.contains:(Ljava/lang/CharSequence;)Z
+ 98: ifne 121
+ 101: aload_1
+ 102: ldc_w #896 // String repuls
+ 105: invokevirtual #880 // Method java/lang/String.contains:(Ljava/lang/CharSequence;)Z
+ 108: ifne 121
+ 111: aload_1
+ 112: ldc_w #897 // String knockback
+ 115: invokevirtual #880 // Method java/lang/String.contains:(Ljava/lang/CharSequence;)Z
+ 118: ifeq 125
+ 121: iconst_1
+ 122: goto 126
+ 125: iconst_0
+ 126: ireturn
+
+ private static int findMainHandHeaderIndex(java.util.List);
+ Code:
+ 0: iconst_1
+ 1: istore_1
+ 2: iload_1
+ 3: aload_0
+ 4: invokeinterface #713, 1 // InterfaceMethod java/util/List.size:()I
+ 9: if_icmpge 49
+ 12: aload_0
+ 13: iload_1
+ 14: invokeinterface #696, 2 // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
+ 19: checkcast #698 // class net/minecraft/network/chat/Component
+ 22: invokeinterface #702, 1 // InterfaceMethod net/minecraft/network/chat/Component.getString:()Ljava/lang/String;
+ 27: getstatic #776 // Field java/util/Locale.ROOT:Ljava/util/Locale;
+ 30: invokevirtual #780 // Method java/lang/String.toLowerCase:(Ljava/util/Locale;)Ljava/lang/String;
+ 33: astore_2
+ 34: aload_2
+ 35: invokestatic #902 // Method isMainHandHeader:(Ljava/lang/String;)Z
+ 38: ifeq 43
+ 41: iload_1
+ 42: ireturn
+ 43: iinc 1, 1
+ 46: goto 2
+ 49: iconst_m1
+ 50: ireturn
+
+ private static boolean isMainHandHeader(java.lang.String);
+ Code:
+ 0: aload_0
+ 1: ldc_w #904 // String when in main hand
+ 4: invokevirtual #880 // Method java/lang/String.contains:(Ljava/lang/CharSequence;)Z
+ 7: ifne 40
+ 10: aload_0
+ 11: ldc_w #906 // String main hand
+ 14: invokevirtual #880 // Method java/lang/String.contains:(Ljava/lang/CharSequence;)Z
+ 17: ifne 40
+ 20: aload_0
+ 21: ldc_w #908 // String m?o principal
+ 24: invokevirtual #880 // Method java/lang/String.contains:(Ljava/lang/CharSequence;)Z
+ 27: ifne 40
+ 30: aload_0
+ 31: ldc_w #910 // String mao principal
+ 34: invokevirtual #880 // Method java/lang/String.contains:(Ljava/lang/CharSequence;)Z
+ 37: ifeq 44
+ 40: iconst_1
+ 41: goto 45
+ 44: iconst_0
+ 45: ireturn
+
+ private static double totalAttackDamage(net.minecraft.world.item.ItemStack);
+ Code:
+ 0: dconst_0
+ 1: dstore_1
+ 2: aload_0
+ 3: getstatic #916 // Field net/minecraft/world/entity/EquipmentSlot.MAINHAND:Lnet/minecraft/world/entity/EquipmentSlot;
+ 6: invokevirtual #920 // Method net/minecraft/world/item/ItemStack.m_41638_:(Lnet/minecraft/world/entity/EquipmentSlot;)Lcom/google/common/collect/Multimap;
+ 9: getstatic #926 // Field net/minecraft/world/entity/ai/attributes/Attributes.f_22281_:Lnet/minecraft/world/entity/ai/attributes/Attribute;
+ 12: invokeinterface #931, 2 // InterfaceMethod com/google/common/collect/Multimap.get:(Ljava/lang/Object;)Ljava/util/Collection;
+ 17: invokeinterface #937, 1 // InterfaceMethod java/util/Collection.iterator:()Ljava/util/Iterator;
+ 22: astore_3
+ 23: aload_3
+ 24: invokeinterface #942, 1 // InterfaceMethod java/util/Iterator.hasNext:()Z
+ 29: ifeq 54
+ 32: aload_3
+ 33: invokeinterface #945, 1 // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
+ 38: checkcast #947 // class net/minecraft/world/entity/ai/attributes/AttributeModifier
+ 41: astore 4
+ 43: dload_1
+ 44: aload 4
+ 46: invokevirtual #950 // Method net/minecraft/world/entity/ai/attributes/AttributeModifier.m_22218_:()D
+ 49: dadd
+ 50: dstore_1
+ 51: goto 23
+ 54: dload_1
+ 55: dconst_0
+ 56: dcmpl
+ 57: ifle 66
+ 60: dload_1
+ 61: dconst_1
+ 62: dadd
+ 63: goto 67
+ 66: dconst_0
+ 67: dreturn
+
+ private static double totalAttackSpeed(net.minecraft.world.item.ItemStack);
+ Code:
+ 0: ldc2_w #954 // double 4.0d
+ 3: dstore_1
+ 4: aload_0
+ 5: getstatic #916 // Field net/minecraft/world/entity/EquipmentSlot.MAINHAND:Lnet/minecraft/world/entity/EquipmentSlot;
+ 8: invokevirtual #920 // Method net/minecraft/world/item/ItemStack.m_41638_:(Lnet/minecraft/world/entity/EquipmentSlot;)Lcom/google/common/collect/Multimap;
+ 11: getstatic #958 // Field net/minecraft/world/entity/ai/attributes/Attributes.f_22283_:Lnet/minecraft/world/entity/ai/attributes/Attribute;
+ 14: invokeinterface #931, 2 // InterfaceMethod com/google/common/collect/Multimap.get:(Ljava/lang/Object;)Ljava/util/Collection;
+ 19: invokeinterface #937, 1 // InterfaceMethod java/util/Collection.iterator:()Ljava/util/Iterator;
+ 24: astore_3
+ 25: aload_3
+ 26: invokeinterface #942, 1 // InterfaceMethod java/util/Iterator.hasNext:()Z
+ 31: ifeq 56
+ 34: aload_3
+ 35: invokeinterface #945, 1 // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
+ 40: checkcast #947 // class net/minecraft/world/entity/ai/attributes/AttributeModifier
+ 43: astore 4
+ 45: dload_1
+ 46: aload 4
+ 48: invokevirtual #950 // Method net/minecraft/world/entity/ai/attributes/AttributeModifier.m_22218_:()D
+ 51: dadd
+ 52: dstore_1
+ 53: goto 25
+ 56: dload_1
+ 57: dreturn
+
+ private static double totalAttackKnockback(net.minecraft.world.item.ItemStack);
+ Code:
+ 0: dconst_0
+ 1: dstore_1
+ 2: aload_0
+ 3: getstatic #916 // Field net/minecraft/world/entity/EquipmentSlot.MAINHAND:Lnet/minecraft/world/entity/EquipmentSlot;
+ 6: invokevirtual #920 // Method net/minecraft/world/item/ItemStack.m_41638_:(Lnet/minecraft/world/entity/EquipmentSlot;)Lcom/google/common/collect/Multimap;
+ 9: getstatic #961 // Field net/minecraft/world/entity/ai/attributes/Attributes.f_22282_:Lnet/minecraft/world/entity/ai/attributes/Attribute;
+ 12: invokeinterface #931, 2 // InterfaceMethod com/google/common/collect/Multimap.get:(Ljava/lang/Object;)Ljava/util/Collection;
+ 17: invokeinterface #937, 1 // InterfaceMethod java/util/Collection.iterator:()Ljava/util/Iterator;
+ 22: astore_3
+ 23: aload_3
+ 24: invokeinterface #942, 1 // InterfaceMethod java/util/Iterator.hasNext:()Z
+ 29: ifeq 54
+ 32: aload_3
+ 33: invokeinterface #945, 1 // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
+ 38: checkcast #947 // class net/minecraft/world/entity/ai/attributes/AttributeModifier
+ 41: astore 4
+ 43: dload_1
+ 44: aload 4
+ 46: invokevirtual #950 // Method net/minecraft/world/entity/ai/attributes/AttributeModifier.m_22218_:()D
+ 49: dadd
+ 50: dstore_1
+ 51: goto 23
+ 54: dload_1
+ 55: dreturn
+
+ private static double totalAttackReach(net.minecraft.world.item.ItemStack);
+ Code:
+ 0: ldc2_w #962 // double 2.5d
+ 3: dstore_1
+ 4: aload_0
+ 5: getstatic #916 // Field net/minecraft/world/entity/EquipmentSlot.MAINHAND:Lnet/minecraft/world/entity/EquipmentSlot;
+ 8: invokevirtual #920 // Method net/minecraft/world/item/ItemStack.m_41638_:(Lnet/minecraft/world/entity/EquipmentSlot;)Lcom/google/common/collect/Multimap;
+ 11: getstatic #968 // Field net/minecraftforge/common/ForgeMod.ENTITY_REACH:Lnet/minecraftforge/registries/RegistryObject;
+ 14: invokevirtual #526 // Method net/minecraftforge/registries/RegistryObject.get:()Ljava/lang/Object;
+ 17: checkcast #970 // class net/minecraft/world/entity/ai/attributes/Attribute
+ 20: invokeinterface #931, 2 // InterfaceMethod com/google/common/collect/Multimap.get:(Ljava/lang/Object;)Ljava/util/Collection;
+ 25: invokeinterface #937, 1 // InterfaceMethod java/util/Collection.iterator:()Ljava/util/Iterator;
+ 30: astore_3
+ 31: aload_3
+ 32: invokeinterface #942, 1 // InterfaceMethod java/util/Iterator.hasNext:()Z
+ 37: ifeq 62
+ 40: aload_3
+ 41: invokeinterface #945, 1 // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
+ 46: checkcast #947 // class net/minecraft/world/entity/ai/attributes/AttributeModifier
+ 49: astore 4
+ 51: dload_1
+ 52: aload 4
+ 54: invokevirtual #950 // Method net/minecraft/world/entity/ai/attributes/AttributeModifier.m_22218_:()D
+ 57: dadd
+ 58: dstore_1
+ 59: goto 31
+ 62: dload_1
+ 63: dreturn
+
+ private static java.lang.String fmtAttribute(double);
+ Code:
+ 0: dload_0
+ 1: dload_0
+ 2: invokestatic #973 // Method java/lang/Math.rint:(D)D
+ 5: dsub
+ 6: invokestatic #857 // Method java/lang/Math.abs:(D)D
+ 9: ldc2_w #858 // double 0.001d
+ 12: dcmpg
+ 13: ifge 25
+ 16: dload_0
+ 17: invokestatic #973 // Method java/lang/Math.rint:(D)D
+ 20: d2i
+ 21: invokestatic #976 // Method java/lang/String.valueOf:(I)Ljava/lang/String;
+ 24: areturn
+ 25: getstatic #776 // Field java/util/Locale.ROOT:Ljava/util/Locale;
+ 28: ldc_w #978 // String %.2f
+ 31: iconst_1
+ 32: anewarray #4 // class java/lang/Object
+ 35: dup
+ 36: iconst_0
+ 37: dload_0
+ 38: invokestatic #983 // Method java/lang/Double.valueOf:(D)Ljava/lang/Double;
+ 41: aastore
+ 42: invokestatic #987 // Method java/lang/String.format:(Ljava/util/Locale;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
+ 45: astore_2
+ 46: aload_2
+ 47: ldc_w #989 // String 0
+ 50: invokevirtual #992 // Method java/lang/String.endsWith:(Ljava/lang/String;)Z
+ 53: ifeq 71
+ 56: aload_2
+ 57: iconst_0
+ 58: aload_2
+ 59: invokevirtual #995 // Method java/lang/String.length:()I
+ 62: iconst_1
+ 63: isub
+ 64: invokevirtual #999 // Method java/lang/String.substring:(II)Ljava/lang/String;
+ 67: astore_2
+ 68: goto 46
+ 71: aload_2
+ 72: ldc_w #1001 // String .
+ 75: invokevirtual #992 // Method java/lang/String.endsWith:(Ljava/lang/String;)Z
+ 78: ifeq 93
+ 81: aload_2
+ 82: iconst_0
+ 83: aload_2
+ 84: invokevirtual #995 // Method java/lang/String.length:()I
+ 87: iconst_1
+ 88: isub
+ 89: invokevirtual #999 // Method java/lang/String.substring:(II)Ljava/lang/String;
+ 92: astore_2
+ 93: aload_2
+ 94: areturn
+
+ private static int findVanillaAttributeInsertIndex(java.util.List);
+ Code:
+ 0: iconst_1
+ 1: istore_1
+ 2: iload_1
+ 3: aload_0
+ 4: invokeinterface #713, 1 // InterfaceMethod java/util/List.size:()I
+ 9: if_icmpge 81
+ 12: aload_0
+ 13: iload_1
+ 14: invokeinterface #696, 2 // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
+ 19: checkcast #698 // class net/minecraft/network/chat/Component
+ 22: invokeinterface #702, 1 // InterfaceMethod net/minecraft/network/chat/Component.getString:()Ljava/lang/String;
+ 27: getstatic #776 // Field java/util/Locale.ROOT:Ljava/util/Locale;
+ 30: invokevirtual #780 // Method java/lang/String.toLowerCase:(Ljava/util/Locale;)Ljava/lang/String;
+ 33: astore_2
+ 34: aload_2
+ 35: invokestatic #902 // Method isMainHandHeader:(Ljava/lang/String;)Z
+ 38: ifeq 75
+ 41: iload_1
+ 42: iconst_1
+ 43: if_icmple 73
+ 46: aload_0
+ 47: iload_1
+ 48: iconst_1
+ 49: isub
+ 50: invokeinterface #696, 2 // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
+ 55: checkcast #698 // class net/minecraft/network/chat/Component
+ 58: invokeinterface #702, 1 // InterfaceMethod net/minecraft/network/chat/Component.getString:()Ljava/lang/String;
+ 63: invokevirtual #742 // Method java/lang/String.isEmpty:()Z
+ 66: ifeq 73
+ 69: iload_1
+ 70: iconst_1
+ 71: isub
+ 72: ireturn
+ 73: iload_1
+ 74: ireturn
+ 75: iinc 1, 1
+ 78: goto 2
+ 81: aload_0
+ 82: invokeinterface #713, 1 // InterfaceMethod java/util/List.size:()I
+ 87: ireturn
+
+ public static void onRenderGuiOverlay(net.minecraftforge.client.event.RenderGuiOverlayEvent$Post);
+ Code:
+ 0: aload_0
+ 1: invokevirtual #1007 // Method net/minecraftforge/client/event/RenderGuiOverlayEvent$Post.getOverlay:()Lnet/minecraftforge/client/gui/overlay/NamedGuiOverlay;
+ 4: invokevirtual #1013 // Method net/minecraftforge/client/gui/overlay/NamedGuiOverlay.id:()Lnet/minecraft/resources/ResourceLocation;
+ 7: getstatic #1019 // Field net/minecraftforge/client/gui/overlay/VanillaGuiOverlay.HOTBAR:Lnet/minecraftforge/client/gui/overlay/VanillaGuiOverlay;
+ 10: invokevirtual #1020 // Method net/minecraftforge/client/gui/overlay/VanillaGuiOverlay.id:()Lnet/minecraft/resources/ResourceLocation;
+ 13: invokevirtual #1023 // Method net/minecraft/resources/ResourceLocation.equals:(Ljava/lang/Object;)Z
+ 16: ifne 20
+ 19: return
+ 20: invokestatic #144 // Method net/minecraft/client/Minecraft.m_91087_:()Lnet/minecraft/client/Minecraft;
+ 23: astore_1
+ 24: aload_1
+ 25: getfield #148 // Field net/minecraft/client/Minecraft.f_91074_:Lnet/minecraft/client/player/LocalPlayer;
+ 28: ifnull 41
+ 31: aload_1
+ 32: getfield #214 // Field net/minecraft/client/Minecraft.f_91066_:Lnet/minecraft/client/Options;
+ 35: getfield #1026 // Field net/minecraft/client/Options.f_92062_:Z
+ 38: ifeq 42
+ 41: return
+ 42: aload_0
+ 43: invokevirtual #1030 // Method net/minecraftforge/client/event/RenderGuiOverlayEvent$Post.getGuiGraphics:()Lnet/minecraft/client/gui/GuiGraphics;
+ 46: astore_2
+ 47: aload_2
+ 48: invokestatic #1034 // Method renderBallisticVestHud:(Lnet/minecraft/client/gui/GuiGraphics;)V
+ 51: aload_2
+ 52: aload_1
+ 53: invokestatic #1038 // Method renderGrenadeFuseHud:(Lnet/minecraft/client/gui/GuiGraphics;Lnet/minecraft/client/Minecraft;)V
+ 56: aload_2
+ 57: aload_1
+ 58: invokestatic #1041 // Method renderNailGunAmmoHud:(Lnet/minecraft/client/gui/GuiGraphics;Lnet/minecraft/client/Minecraft;)V
+ 61: aload_2
+ 62: aload_1
+ 63: invokestatic #1044 // Method renderCrossbowAmmoHud:(Lnet/minecraft/client/gui/GuiGraphics;Lnet/minecraft/client/Minecraft;)V
+ 66: aload_1
+ 67: getfield #148 // Field net/minecraft/client/Minecraft.f_91074_:Lnet/minecraft/client/player/LocalPlayer;
+ 70: invokevirtual #1049 // Method net/minecraft/client/player/LocalPlayer.m_150108_:()Z
+ 73: ifne 100
+ 76: getstatic #1051 // Field tacticalScopeProgress:F
+ 79: ldc_w #349 // float 0.01f
+ 82: fcmpl
+ 83: ifgt 96
+ 86: aload_1
+ 87: getfield #148 // Field net/minecraft/client/Minecraft.f_91074_:Lnet/minecraft/client/player/LocalPlayer;
+ 90: invokestatic #1057 // Method com/ogaba/sa_combat/client/scope/TacticalCrossbowScopeClient.isScopingWithScopedCrossbow:(Lnet/minecraft/client/player/LocalPlayer;)Z
+ 93: ifeq 100
+ 96: aload_2
+ 97: invokestatic #1062 // Method renderRealSpyglassOverlay:(Lnet/minecraft/client/gui/GuiGraphics;)V
+ 100: return
+
+ private static void renderGrenadeFuseHud(net.minecraft.client.gui.GuiGraphics, net.minecraft.client.Minecraft);
+ Code:
+ 0: aload_1
+ 1: getfield #148 // Field net/minecraft/client/Minecraft.f_91074_:Lnet/minecraft/client/player/LocalPlayer;
+ 4: astore_2
+ 5: aload_2
+ 6: ifnull 26
+ 9: aload_2
+ 10: invokevirtual #1066 // Method net/minecraft/world/entity/player/Player.m_6117_:()Z
+ 13: ifeq 26
+ 16: aload_2
+ 17: invokevirtual #1069 // Method net/minecraft/world/entity/player/Player.m_7655_:()Lnet/minecraft/world/InteractionHand;
+ 20: getstatic #179 // Field net/minecraft/world/InteractionHand.MAIN_HAND:Lnet/minecraft/world/InteractionHand;
+ 23: if_acmpeq 27
+ 26: return
+ 27: aload_2
+ 28: invokevirtual #154 // Method net/minecraft/world/entity/player/Player.m_21205_:()Lnet/minecraft/world/item/ItemStack;
+ 31: astore_3
+ 32: aload_3
+ 33: invokevirtual #163 // Method net/minecraft/world/item/ItemStack.m_41720_:()Lnet/minecraft/world/item/Item;
+ 36: astore 5
+ 38: aload 5
+ 40: instanceof #165 // class com/ogaba/sa_combat/item/SpecialGrenadeItem
+ 43: ifeq 68
+ 46: aload 5
+ 48: checkcast #165 // class com/ogaba/sa_combat/item/SpecialGrenadeItem
+ 51: astore 4
+ 53: aload 4
+ 55: invokevirtual #1072 // Method com/ogaba/sa_combat/item/SpecialGrenadeItem.hasCookableFuse:()Z
+ 58: ifeq 68
+ 61: aload_3
+ 62: invokestatic #1075 // Method com/ogaba/sa_combat/item/SpecialGrenadeItem.isArmed:(Lnet/minecraft/world/item/ItemStack;)Z
+ 65: ifne 69
+ 68: return
+ 69: aload_3
+ 70: invokestatic #1079 // Method com/ogaba/sa_combat/item/SpecialGrenadeItem.getFuseTimerProgress:(Lnet/minecraft/world/item/ItemStack;)F
+ 73: fstore 5
+ 75: ldc_w #1080 // float 55.0f
+ 78: fload 5
+ 80: fmul
+ 81: invokestatic #1084 // Method net/minecraft/util/Mth.m_14143_:(F)I
+ 84: iconst_0
+ 85: bipush 55
+ 87: invokestatic #1088 // Method net/minecraft/util/Mth.m_14045_:(III)I
+ 90: istore 6
+ 92: aload_0
+ 93: invokevirtual #1091 // Method net/minecraft/client/gui/GuiGraphics.m_280182_:()I
+ 96: bipush 64
+ 98: isub
+ 99: iconst_2
+ 100: idiv
+ 101: istore 7
+ 103: aload_0
+ 104: invokevirtual #1094 // Method net/minecraft/client/gui/GuiGraphics.m_280206_:()I
+ 107: iconst_2
+ 108: idiv
+ 109: bipush 27
+ 111: iadd
+ 112: istore 8
+ 114: invokestatic #1099 // Method com/mojang/blaze3d/systems/RenderSystem.enableBlend:()V
+ 117: invokestatic #1102 // Method com/mojang/blaze3d/systems/RenderSystem.defaultBlendFunc:()V
+ 120: iload 6
+ 122: ifle 151
+ 125: aload_0
+ 126: getstatic #1104 // Field GRENADE_FUSE_FILL:Lnet/minecraft/resources/ResourceLocation;
+ 129: iload 7
+ 131: iconst_5
+ 132: iadd
+ 133: iload 8
+ 135: iconst_2
+ 136: iadd
+ 137: ldc_w #273 // float 5.0f
+ 140: fconst_2
+ 141: iload 6
+ 143: iconst_4
+ 144: bipush 64
+ 146: bipush 10
+ 148: invokevirtual #1108 // Method net/minecraft/client/gui/GuiGraphics.m_280163_:(Lnet/minecraft/resources/ResourceLocation;IIFFIIII)V
+ 151: aload_0
+ 152: getstatic #1110 // Field GRENADE_FUSE_FRAME:Lnet/minecraft/resources/ResourceLocation;
+ 155: iload 7
+ 157: iload 8
+ 159: fconst_0
+ 160: fconst_0
+ 161: bipush 64
+ 163: bipush 10
+ 165: bipush 64
+ 167: bipush 10
+ 169: invokevirtual #1108 // Method net/minecraft/client/gui/GuiGraphics.m_280163_:(Lnet/minecraft/resources/ResourceLocation;IIFFIIII)V
+ 172: invokestatic #1113 // Method com/mojang/blaze3d/systems/RenderSystem.disableBlend:()V
+ 175: return
+
+ private static void renderBallisticVestHud(net.minecraft.client.gui.GuiGraphics);
+ Code:
+ 0: invokestatic #1124 // Method com/ogaba/sa_combat/client/armor/ClientBallisticProtectionData.shouldRender:()Z
+ 3: ifne 7
+ 6: return
+ 7: iconst_1
+ 8: invokestatic #1127 // Method com/ogaba/sa_combat/client/armor/ClientBallisticProtectionData.getMaxProtection:()I
+ 11: invokestatic #1131 // Method java/lang/Math.max:(II)I
+ 14: istore_1
+ 15: invokestatic #1134 // Method com/ogaba/sa_combat/client/armor/ClientBallisticProtectionData.getProtection:()I
+ 18: iconst_0
+ 19: iload_1
+ 20: invokestatic #1088 // Method net/minecraft/util/Mth.m_14045_:(III)I
+ 23: istore_2
+ 24: iload_2
+ 25: i2f
+ 26: iload_1
+ 27: i2f
+ 28: fdiv
+ 29: fconst_0
+ 30: fconst_1
+ 31: invokestatic #238 // Method net/minecraft/util/Mth.m_14036_:(FFF)F
+ 34: fstore_3
+ 35: fload_3
+ 36: ldc_w #1135 // float 16.0f
+ 39: fmul
+ 40: invokestatic #1138 // Method net/minecraft/util/Mth.m_14167_:(F)I
+ 43: istore 4
+ 45: iload 4
+ 47: iconst_0
+ 48: bipush 16
+ 50: invokestatic #1088 // Method net/minecraft/util/Mth.m_14045_:(III)I
+ 53: istore 4
+ 55: bipush 20
+ 57: istore 5
+ 59: aload_0
+ 60: invokevirtual #1094 // Method net/minecraft/client/gui/GuiGraphics.m_280206_:()I
+ 63: bipush 30
+ 65: isub
+ 66: bipush 20
+ 68: isub
+ 69: istore 6
+ 71: ldc_w #1139 // float 1.875f
+ 74: fstore 7
+ 76: ldc_w #1139 // float 1.875f
+ 79: fstore 8
+ 81: aload_0
+ 82: invokevirtual #1142 // Method net/minecraft/client/gui/GuiGraphics.m_280168_:()Lcom/mojang/blaze3d/vertex/PoseStack;
+ 85: invokevirtual #1145 // Method com/mojang/blaze3d/vertex/PoseStack.m_85836_:()V
+ 88: aload_0
+ 89: invokevirtual #1142 // Method net/minecraft/client/gui/GuiGraphics.m_280168_:()Lcom/mojang/blaze3d/vertex/PoseStack;
+ 92: iload 5
+ 94: i2f
+ 95: iload 6
+ 97: i2f
+ 98: fconst_0
+ 99: invokevirtual #1149 // Method com/mojang/blaze3d/vertex/PoseStack.m_252880_:(FFF)V
+ 102: aload_0
+ 103: invokevirtual #1142 // Method net/minecraft/client/gui/GuiGraphics.m_280168_:()Lcom/mojang/blaze3d/vertex/PoseStack;
+ 106: fload 7
+ 108: fload 8
+ 110: fconst_1
+ 111: invokevirtual #1152 // Method com/mojang/blaze3d/vertex/PoseStack.m_85841_:(FFF)V
+ 114: aload_0
+ 115: getstatic #1154 // Field BALLISTIC_VEST_BG:Lnet/minecraft/resources/ResourceLocation;
+ 118: iconst_0
+ 119: iconst_0
+ 120: fconst_0
+ 121: fconst_0
+ 122: bipush 16
+ 124: bipush 16
+ 126: bipush 16
+ 128: bipush 16
+ 130: invokevirtual #1108 // Method net/minecraft/client/gui/GuiGraphics.m_280163_:(Lnet/minecraft/resources/ResourceLocation;IIFFIIII)V
+ 133: iload 4
+ 135: ifle 167
+ 138: bipush 16
+ 140: iload 4
+ 142: isub
+ 143: istore 9
+ 145: aload_0
+ 146: getstatic #1156 // Field BALLISTIC_VEST_FILL:Lnet/minecraft/resources/ResourceLocation;
+ 149: iconst_0
+ 150: iload 9
+ 152: fconst_0
+ 153: iload 9
+ 155: i2f
+ 156: bipush 16
+ 158: iload 4
+ 160: bipush 16
+ 162: bipush 16
+ 164: invokevirtual #1108 // Method net/minecraft/client/gui/GuiGraphics.m_280163_:(Lnet/minecraft/resources/ResourceLocation;IIFFIIII)V
+ 167: aload_0
+ 168: invokevirtual #1142 // Method net/minecraft/client/gui/GuiGraphics.m_280168_:()Lcom/mojang/blaze3d/vertex/PoseStack;
+ 171: invokevirtual #1159 // Method com/mojang/blaze3d/vertex/PoseStack.m_85849_:()V
+ 174: return
+
+ private static void renderNailGunAmmoHud(net.minecraft.client.gui.GuiGraphics, net.minecraft.client.Minecraft);
+ Code:
+ 0: aload_1
+ 1: getfield #148 // Field net/minecraft/client/Minecraft.f_91074_:Lnet/minecraft/client/player/LocalPlayer;
+ 4: ifnonnull 8
+ 7: return
+ 8: aload_1
+ 9: getfield #148 // Field net/minecraft/client/Minecraft.f_91074_:Lnet/minecraft/client/player/LocalPlayer;
+ 12: invokevirtual #1168 // Method net/minecraft/client/player/LocalPlayer.m_21205_:()Lnet/minecraft/world/item/ItemStack;
+ 15: astore_2
+ 16: aload_2
+ 17: invokevirtual #163 // Method net/minecraft/world/item/ItemStack.m_41720_:()Lnet/minecraft/world/item/Item;
+ 20: instanceof #167 // class com/ogaba/sa_combat/combat/weapon/NailGunItem
+ 23: ifne 27
+ 26: return
+ 27: aload_2
+ 28: invokestatic #570 // Method com/ogaba/sa_combat/combat/weapon/NailGunItem.getMagazine:(Lnet/minecraft/world/item/ItemStack;)I
+ 31: istore_3
+ 32: aload_1
+ 33: getfield #148 // Field net/minecraft/client/Minecraft.f_91074_:Lnet/minecraft/client/player/LocalPlayer;
+ 36: invokestatic #1172 // Method refreshInventoryHudCache:(Lnet/minecraft/world/entity/player/Player;)V
+ 39: getstatic #1174 // Field cachedNailReserve:I
+ 42: istore 4
+ 44: aload_0
+ 45: aload_1
+ 46: invokestatic #1177 // Method nailIconStack:()Lnet/minecraft/world/item/ItemStack;
+ 49: iload_3
+ 50: invokestatic #976 // Method java/lang/String.valueOf:(I)Ljava/lang/String;
+ 53: iload 4
+ 55: invokedynamic #1181, 0 // InvokeDynamic #4:makeConcatWithConstants:(I)Ljava/lang/String;
+ 60: iload_3
+ 61: ifgt 68
+ 64: iconst_1
+ 65: goto 69
+ 68: iconst_0
+ 69: aload_2
+ 70: invokestatic #544 // Method com/ogaba/sa_combat/combat/weapon/NailGunItem.isReloading:(Lnet/minecraft/world/item/ItemStack;)Z
+ 73: ifne 83
+ 76: aload_2
+ 77: invokestatic #547 // Method com/ogaba/sa_combat/combat/weapon/NailGunItem.isClientReloadAnimationActive:(Lnet/minecraft/world/item/ItemStack;)Z
+ 80: ifeq 87
+ 83: iconst_1
+ 84: goto 88
+ 87: iconst_0
+ 88: invokestatic #1185 // Method renderAmmoHud:(Lnet/minecraft/client/gui/GuiGraphics;Lnet/minecraft/client/Minecraft;Lnet/minecraft/world/item/ItemStack;Ljava/lang/String;Ljava/lang/String;ZZ)V
+ 91: return
+
+ private static void renderCrossbowAmmoHud(net.minecraft.client.gui.GuiGraphics, net.minecraft.client.Minecraft);
+ Code:
+ 0: aload_1
+ 1: getfield #148 // Field net/minecraft/client/Minecraft.f_91074_:Lnet/minecraft/client/player/LocalPlayer;
+ 4: ifnonnull 8
+ 7: return
+ 8: aload_1
+ 9: getfield #148 // Field net/minecraft/client/Minecraft.f_91074_:Lnet/minecraft/client/player/LocalPlayer;
+ 12: invokevirtual #1168 // Method net/minecraft/client/player/LocalPlayer.m_21205_:()Lnet/minecraft/world/item/ItemStack;
+ 15: astore_2
+ 16: aload_2
+ 17: invokevirtual #163 // Method net/minecraft/world/item/ItemStack.m_41720_:()Lnet/minecraft/world/item/Item;
+ 20: instanceof #46 // class com/ogaba/sa_combat/combat/weapon/TacticalCrossbowItem
+ 23: ifne 45
+ 26: aload_1
+ 27: getfield #148 // Field net/minecraft/client/Minecraft.f_91074_:Lnet/minecraft/client/player/LocalPlayer;
+ 30: invokevirtual #1188 // Method net/minecraft/client/player/LocalPlayer.m_21206_:()Lnet/minecraft/world/item/ItemStack;
+ 33: astore_2
+ 34: aload_2
+ 35: invokevirtual #163 // Method net/minecraft/world/item/ItemStack.m_41720_:()Lnet/minecraft/world/item/Item;
+ 38: instanceof #46 // class com/ogaba/sa_combat/combat/weapon/TacticalCrossbowItem
+ 41: ifne 45
+ 44: return
+ 45: aload_2
+ 46: invokestatic #1192 // Method com/ogaba/sa_combat/combat/weapon/TacticalCrossbowItem.getSelectedBoltType:(Lnet/minecraft/world/item/ItemStack;)Lcom/ogaba/sa_combat/combat/weapon/TacticalCrossbowItem$BoltType;
+ 49: astore_3
+ 50: aload_3
+ 51: getstatic #1196 // Field com/ogaba/sa_combat/combat/weapon/TacticalCrossbowItem$BoltType.IMPROVISED:Lcom/ogaba/sa_combat/combat/weapon/TacticalCrossbowItem$BoltType;
+ 54: if_acmpne 63
+ 57: invokestatic #1199 // Method improvisedBoltIconStack:()Lnet/minecraft/world/item/ItemStack;
+ 60: goto 66
+ 63: invokestatic #1202 // Method tacticalBoltIconStack:()Lnet/minecraft/world/item/ItemStack;
+ 66: astore 4
+ 68: aload_1
+ 69: getfield #148 // Field net/minecraft/client/Minecraft.f_91074_:Lnet/minecraft/client/player/LocalPlayer;
+ 72: invokestatic #1172 // Method refreshInventoryHudCache:(Lnet/minecraft/world/entity/player/Player;)V
+ 75: aload_3
+ 76: getstatic #1196 // Field com/ogaba/sa_combat/combat/weapon/TacticalCrossbowItem$BoltType.IMPROVISED:Lcom/ogaba/sa_combat/combat/weapon/TacticalCrossbowItem$BoltType;
+ 79: if_acmpne 88
+ 82: getstatic #1204 // Field cachedImprovisedBoltReserve:I
+ 85: goto 91
+ 88: getstatic #1206 // Field cachedTacticalBoltReserve:I
+ 91: istore 5
+ 93: aload_2
+ 94: invokestatic #1209 // Method com/ogaba/sa_combat/combat/weapon/TacticalCrossbowItem.isLoaded:(Lnet/minecraft/world/item/ItemStack;)Z
+ 97: istore 6
+ 99: aload_2
+ 100: invokestatic #1212 // Method com/ogaba/sa_combat/combat/weapon/TacticalCrossbowItem.isLoading:(Lnet/minecraft/world/item/ItemStack;)Z
+ 103: ifeq 117
+ 106: aload_2
+ 107: invokestatic #1215 // Method com/ogaba/sa_combat/combat/weapon/TacticalCrossbowItem.hasAutoMechanism:(Lnet/minecraft/world/item/ItemStack;)Z
+ 110: ifne 117
+ 113: iconst_1
+ 114: goto 118
+ 117: iconst_0
+ 118: istore 7
+ 120: aload_0
+ 121: aload_1
+ 122: aload 4
+ 124: iload 6
+ 126: ifeq 135
+ 129: ldc_w #1217 // String 1
+ 132: goto 138
+ 135: ldc_w #989 // String 0
+ 138: iload 5
+ 140: invokedynamic #1181, 0 // InvokeDynamic #4:makeConcatWithConstants:(I)Ljava/lang/String;
+ 145: iload 6
+ 147: ifne 159
+ 150: iload 5
+ 152: ifgt 159
+ 155: iconst_1
+ 156: goto 160
+ 159: iconst_0
+ 160: iload 7
+ 162: invokestatic #1185 // Method renderAmmoHud:(Lnet/minecraft/client/gui/GuiGraphics;Lnet/minecraft/client/Minecraft;Lnet/minecraft/world/item/ItemStack;Ljava/lang/String;Ljava/lang/String;ZZ)V
+ 165: return
+
+ private static void refreshInventoryHudCache(net.minecraft.world.entity.player.Player);
+ Code:
+ 0: aload_0
+ 1: ifnull 24
+ 4: getstatic #1223 // Field cachedInventoryPlayerId:I
+ 7: aload_0
+ 8: invokevirtual #1226 // Method net/minecraft/world/entity/player/Player.m_19879_:()I
+ 11: if_icmpne 25
+ 14: getstatic #1228 // Field cachedInventoryTick:I
+ 17: aload_0
+ 18: getfield #1231 // Field net/minecraft/world/entity/player/Player.f_19797_:I
+ 21: if_icmpne 25
+ 24: return
+ 25: aload_0
+ 26: invokevirtual #1226 // Method net/minecraft/world/entity/player/Player.m_19879_:()I
+ 29: putstatic #1223 // Field cachedInventoryPlayerId:I
+ 32: aload_0
+ 33: getfield #1231 // Field net/minecraft/world/entity/player/Player.f_19797_:I
+ 36: putstatic #1228 // Field cachedInventoryTick:I
+ 39: iconst_0
+ 40: putstatic #1174 // Field cachedNailReserve:I
+ 43: iconst_0
+ 44: putstatic #1206 // Field cachedTacticalBoltReserve:I
+ 47: iconst_0
+ 48: putstatic #1204 // Field cachedImprovisedBoltReserve:I
+ 51: aload_0
+ 52: invokevirtual #1235 // Method net/minecraft/world/entity/player/Player.m_150109_:()Lnet/minecraft/world/entity/player/Inventory;
+ 55: getfield #1241 // Field net/minecraft/world/entity/player/Inventory.f_35974_:Lnet/minecraft/core/NonNullList;
+ 58: invokevirtual #1244 // Method net/minecraft/core/NonNullList.iterator:()Ljava/util/Iterator;
+ 61: astore_1
+ 62: aload_1
+ 63: invokeinterface #942, 1 // InterfaceMethod java/util/Iterator.hasNext:()Z
+ 68: ifeq 186
+ 71: aload_1
+ 72: invokeinterface #945, 1 // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
+ 77: checkcast #159 // class net/minecraft/world/item/ItemStack
+ 80: astore_2
+ 81: aload_2
+ 82: invokevirtual #629 // Method net/minecraft/world/item/ItemStack.m_41619_:()Z
+ 85: ifeq 91
+ 88: goto 62
+ 91: getstatic #1246 // Field NAIL_ITEM_ID:Lnet/minecraft/resources/ResourceLocation;
+ 94: getstatic #1252 // Field net/minecraftforge/registries/ForgeRegistries.ITEMS:Lnet/minecraftforge/registries/IForgeRegistry;
+ 97: aload_2
+ 98: invokevirtual #163 // Method net/minecraft/world/item/ItemStack.m_41720_:()Lnet/minecraft/world/item/Item;
+ 101: invokeinterface #1258, 2 // InterfaceMethod net/minecraftforge/registries/IForgeRegistry.getKey:(Ljava/lang/Object;)Lnet/minecraft/resources/ResourceLocation;
+ 106: invokevirtual #1023 // Method net/minecraft/resources/ResourceLocation.equals:(Ljava/lang/Object;)Z
+ 109: ifeq 126
+ 112: getstatic #1174 // Field cachedNailReserve:I
+ 115: aload_2
+ 116: invokevirtual #1261 // Method net/minecraft/world/item/ItemStack.m_41613_:()I
+ 119: iadd
+ 120: putstatic #1174 // Field cachedNailReserve:I
+ 123: goto 183
+ 126: aload_2
+ 127: getstatic #1266 // Field com/ogaba/sa_combat/registry/ModItems.TACTICAL_BOLT:Lnet/minecraftforge/registries/RegistryObject;
+ 130: invokevirtual #526 // Method net/minecraftforge/registries/RegistryObject.get:()Ljava/lang/Object;
+ 133: checkcast #1268 // class net/minecraft/world/item/Item
+ 136: invokevirtual #1272 // Method net/minecraft/world/item/ItemStack.m_150930_:(Lnet/minecraft/world/item/Item;)Z
+ 139: ifeq 156
+ 142: getstatic #1206 // Field cachedTacticalBoltReserve:I
+ 145: aload_2
+ 146: invokevirtual #1261 // Method net/minecraft/world/item/ItemStack.m_41613_:()I
+ 149: iadd
+ 150: putstatic #1206 // Field cachedTacticalBoltReserve:I
+ 153: goto 183
+ 156: aload_2
+ 157: getstatic #1275 // Field com/ogaba/sa_combat/registry/ModItems.IMPROVISED_BOLT:Lnet/minecraftforge/registries/RegistryObject;
+ 160: invokevirtual #526 // Method net/minecraftforge/registries/RegistryObject.get:()Ljava/lang/Object;
+ 163: checkcast #1268 // class net/minecraft/world/item/Item
+ 166: invokevirtual #1272 // Method net/minecraft/world/item/ItemStack.m_150930_:(Lnet/minecraft/world/item/Item;)Z
+ 169: ifeq 183
+ 172: getstatic #1204 // Field cachedImprovisedBoltReserve:I
+ 175: aload_2
+ 176: invokevirtual #1261 // Method net/minecraft/world/item/ItemStack.m_41613_:()I
+ 179: iadd
+ 180: putstatic #1204 // Field cachedImprovisedBoltReserve:I
+ 183: goto 62
+ 186: return
+
+ private static void renderAmmoHud(net.minecraft.client.gui.GuiGraphics, net.minecraft.client.Minecraft, net.minecraft.world.item.ItemStack, java.lang.String, java.lang.String, boolean, boolean);
+ Code:
+ 0: ldc_w #1276 // float 1.4f
+ 3: fstore 7
+ 5: ldc_w #1277 // float 1.8f
+ 8: fstore 8
+ 10: ldc_w #1278 // float 1.2f
+ 13: fstore 9
+ 15: ldc_w #1135 // float 16.0f
+ 18: fload 7
+ 20: fmul
+ 21: invokestatic #1281 // Method java/lang/Math.round:(F)I
+ 24: istore 10
+ 26: aload_1
+ 27: getfield #1285 // Field net/minecraft/client/Minecraft.f_91062_:Lnet/minecraft/client/gui/Font;
+ 30: aload_3
+ 31: invokevirtual #1291 // Method net/minecraft/client/gui/Font.m_92895_:(Ljava/lang/String;)I
+ 34: i2f
+ 35: fload 8
+ 37: fmul
+ 38: invokestatic #1281 // Method java/lang/Math.round:(F)I
+ 41: istore 11
+ 43: aload_1
+ 44: getfield #1285 // Field net/minecraft/client/Minecraft.f_91062_:Lnet/minecraft/client/gui/Font;
+ 47: aload 4
+ 49: invokevirtual #1291 // Method net/minecraft/client/gui/Font.m_92895_:(Ljava/lang/String;)I
+ 52: i2f
+ 53: fload 9
+ 55: fmul
+ 56: invokestatic #1281 // Method java/lang/Math.round:(F)I
+ 59: istore 12
+ 61: iload 10
+ 63: bipush 8
+ 65: iadd
+ 66: iload 11
+ 68: iadd
+ 69: iconst_3
+ 70: iadd
+ 71: iload 12
+ 73: iadd
+ 74: istore 13
+ 76: iload 10
+ 78: aload_1
+ 79: getfield #1285 // Field net/minecraft/client/Minecraft.f_91062_:Lnet/minecraft/client/gui/Font;
+ 82: invokestatic #1297 // Method java/util/Objects.requireNonNull:(Ljava/lang/Object;)Ljava/lang/Object;
+ 85: pop
+ 86: ldc_w #1298 // float 9.0f
+ 89: fload 8
+ 91: fmul
+ 92: invokestatic #1281 // Method java/lang/Math.round:(F)I
+ 95: invokestatic #1131 // Method java/lang/Math.max:(II)I
+ 98: istore 14
+ 100: aload_0
+ 101: invokevirtual #1091 // Method net/minecraft/client/gui/GuiGraphics.m_280182_:()I
+ 104: bipush 16
+ 106: isub
+ 107: iload 13
+ 109: isub
+ 110: istore 15
+ 112: aload_0
+ 113: invokevirtual #1094 // Method net/minecraft/client/gui/GuiGraphics.m_280206_:()I
+ 116: bipush 16
+ 118: isub
+ 119: iload 14
+ 121: isub
+ 122: istore 16
+ 124: iload 6
+ 126: ifeq 189
+ 129: ldc_w #1300 // String Reloading...
+ 132: astore 17
+ 134: aload_0
+ 135: invokevirtual #1091 // Method net/minecraft/client/gui/GuiGraphics.m_280182_:()I
+ 138: bipush 16
+ 140: isub
+ 141: aload_1
+ 142: getfield #1285 // Field net/minecraft/client/Minecraft.f_91062_:Lnet/minecraft/client/gui/Font;
+ 145: aload 17
+ 147: invokevirtual #1291 // Method net/minecraft/client/gui/Font.m_92895_:(Ljava/lang/String;)I
+ 150: isub
+ 151: istore 18
+ 153: iload 16
+ 155: aload_1
+ 156: getfield #1285 // Field net/minecraft/client/Minecraft.f_91062_:Lnet/minecraft/client/gui/Font;
+ 159: invokestatic #1297 // Method java/util/Objects.requireNonNull:(Ljava/lang/Object;)Ljava/lang/Object;
+ 162: pop
+ 163: bipush 9
+ 165: isub
+ 166: iconst_3
+ 167: isub
+ 168: istore 19
+ 170: aload_0
+ 171: aload_1
+ 172: getfield #1285 // Field net/minecraft/client/Minecraft.f_91062_:Lnet/minecraft/client/gui/Font;
+ 175: aload 17
+ 177: iload 18
+ 179: iload 19
+ 181: ldc_w #1301 // int 16765517
+ 184: iconst_1
+ 185: invokevirtual #1305 // Method net/minecraft/client/gui/GuiGraphics.m_280056_:(Lnet/minecraft/client/gui/Font;Ljava/lang/String;IIIZ)I
+ 188: pop
+ 189: iload 15
+ 191: istore 17
+ 193: iload 16
+ 195: iload 14
+ 197: iload 10
+ 199: isub
+ 200: iconst_2
+ 201: idiv
+ 202: iadd
+ 203: istore 18
+ 205: aload_2
+ 206: invokevirtual #629 // Method net/minecraft/world/item/ItemStack.m_41619_:()Z
+ 209: ifne 259
+ 212: aload_0
+ 213: invokevirtual #1142 // Method net/minecraft/client/gui/GuiGraphics.m_280168_:()Lcom/mojang/blaze3d/vertex/PoseStack;
+ 216: invokevirtual #1145 // Method com/mojang/blaze3d/vertex/PoseStack.m_85836_:()V
+ 219: aload_0
+ 220: invokevirtual #1142 // Method net/minecraft/client/gui/GuiGraphics.m_280168_:()Lcom/mojang/blaze3d/vertex/PoseStack;
+ 223: iload 17
+ 225: i2f
+ 226: iload 18
+ 228: i2f
+ 229: fconst_0
+ 230: invokevirtual #1149 // Method com/mojang/blaze3d/vertex/PoseStack.m_252880_:(FFF)V
+ 233: aload_0
+ 234: invokevirtual #1142 // Method net/minecraft/client/gui/GuiGraphics.m_280168_:()Lcom/mojang/blaze3d/vertex/PoseStack;
+ 237: fload 7
+ 239: fload 7
+ 241: fconst_1
+ 242: invokevirtual #1152 // Method com/mojang/blaze3d/vertex/PoseStack.m_85841_:(FFF)V
+ 245: aload_0
+ 246: aload_2
+ 247: iconst_0
+ 248: iconst_0
+ 249: invokevirtual #1309 // Method net/minecraft/client/gui/GuiGraphics.m_280480_:(Lnet/minecraft/world/item/ItemStack;II)V
+ 252: aload_0
+ 253: invokevirtual #1142 // Method net/minecraft/client/gui/GuiGraphics.m_280168_:()Lcom/mojang/blaze3d/vertex/PoseStack;
+ 256: invokevirtual #1159 // Method com/mojang/blaze3d/vertex/PoseStack.m_85849_:()V
+ 259: iload 17
+ 261: iload 10
+ 263: iadd
+ 264: bipush 8
+ 266: iadd
+ 267: istore 19
+ 269: iload 5
+ 271: ifeq 280
+ 274: ldc_w #1310 // int 16733525
+ 277: goto 283
+ 280: ldc_w #1311 // int 16777215
+ 283: istore 20
+ 285: aload_0
+ 286: invokevirtual #1142 // Method net/minecraft/client/gui/GuiGraphics.m_280168_:()Lcom/mojang/blaze3d/vertex/PoseStack;
+ 289: invokevirtual #1145 // Method com/mojang/blaze3d/vertex/PoseStack.m_85836_:()V
+ 292: aload_0
+ 293: invokevirtual #1142 // Method net/minecraft/client/gui/GuiGraphics.m_280168_:()Lcom/mojang/blaze3d/vertex/PoseStack;
+ 296: iload 19
+ 298: i2f
+ 299: iload 16
+ 301: i2f
+ 302: iload 14
+ 304: aload_1
+ 305: getfield #1285 // Field net/minecraft/client/Minecraft.f_91062_:Lnet/minecraft/client/gui/Font;
+ 308: invokestatic #1297 // Method java/util/Objects.requireNonNull:(Ljava/lang/Object;)Ljava/lang/Object;
+ 311: pop
+ 312: ldc_w #1298 // float 9.0f
+ 315: fload 8
+ 317: fmul
+ 318: invokestatic #1281 // Method java/lang/Math.round:(F)I
+ 321: isub
+ 322: i2f
+ 323: fconst_2
+ 324: fdiv
+ 325: fadd
+ 326: fconst_0
+ 327: invokevirtual #1149 // Method com/mojang/blaze3d/vertex/PoseStack.m_252880_:(FFF)V
+ 330: aload_0
+ 331: invokevirtual #1142 // Method net/minecraft/client/gui/GuiGraphics.m_280168_:()Lcom/mojang/blaze3d/vertex/PoseStack;
+ 334: fload 8
+ 336: fload 8
+ 338: fconst_1
+ 339: invokevirtual #1152 // Method com/mojang/blaze3d/vertex/PoseStack.m_85841_:(FFF)V
+ 342: aload_0
+ 343: aload_1
+ 344: getfield #1285 // Field net/minecraft/client/Minecraft.f_91062_:Lnet/minecraft/client/gui/Font;
+ 347: aload_3
+ 348: iconst_0
+ 349: iconst_0
+ 350: iload 20
+ 352: iconst_1
+ 353: invokevirtual #1305 // Method net/minecraft/client/gui/GuiGraphics.m_280056_:(Lnet/minecraft/client/gui/Font;Ljava/lang/String;IIIZ)I
+ 356: pop
+ 357: aload_0
+ 358: invokevirtual #1142 // Method net/minecraft/client/gui/GuiGraphics.m_280168_:()Lcom/mojang/blaze3d/vertex/PoseStack;
+ 361: invokevirtual #1159 // Method com/mojang/blaze3d/vertex/PoseStack.m_85849_:()V
+ 364: aload_0
+ 365: invokevirtual #1142 // Method net/minecraft/client/gui/GuiGraphics.m_280168_:()Lcom/mojang/blaze3d/vertex/PoseStack;
+ 368: invokevirtual #1145 // Method com/mojang/blaze3d/vertex/PoseStack.m_85836_:()V
+ 371: aload_0
+ 372: invokevirtual #1142 // Method net/minecraft/client/gui/GuiGraphics.m_280168_:()Lcom/mojang/blaze3d/vertex/PoseStack;
+ 375: iload 19
+ 377: iload 11
+ 379: iadd
+ 380: iconst_3
+ 381: iadd
+ 382: i2f
+ 383: iload 16
+ 385: i2f
+ 386: iload 14
+ 388: aload_1
+ 389: getfield #1285 // Field net/minecraft/client/Minecraft.f_91062_:Lnet/minecraft/client/gui/Font;
+ 392: invokestatic #1297 // Method java/util/Objects.requireNonNull:(Ljava/lang/Object;)Ljava/lang/Object;
+ 395: pop
+ 396: ldc_w #1298 // float 9.0f
+ 399: fload 9
+ 401: fmul
+ 402: invokestatic #1281 // Method java/lang/Math.round:(F)I
+ 405: isub
+ 406: i2f
+ 407: fconst_2
+ 408: fdiv
+ 409: fadd
+ 410: fconst_0
+ 411: invokevirtual #1149 // Method com/mojang/blaze3d/vertex/PoseStack.m_252880_:(FFF)V
+ 414: aload_0
+ 415: invokevirtual #1142 // Method net/minecraft/client/gui/GuiGraphics.m_280168_:()Lcom/mojang/blaze3d/vertex/PoseStack;
+ 418: fload 9
+ 420: fload 9
+ 422: fconst_1
+ 423: invokevirtual #1152 // Method com/mojang/blaze3d/vertex/PoseStack.m_85841_:(FFF)V
+ 426: aload_0
+ 427: aload_1
+ 428: getfield #1285 // Field net/minecraft/client/Minecraft.f_91062_:Lnet/minecraft/client/gui/Font;
+ 431: aload 4
+ 433: iconst_0
+ 434: iconst_0
+ 435: ldc_w #1312 // int 11184810
+ 438: iconst_1
+ 439: invokevirtual #1305 // Method net/minecraft/client/gui/GuiGraphics.m_280056_:(Lnet/minecraft/client/gui/Font;Ljava/lang/String;IIIZ)I
+ 442: pop
+ 443: aload_0
+ 444: invokevirtual #1142 // Method net/minecraft/client/gui/GuiGraphics.m_280168_:()Lcom/mojang/blaze3d/vertex/PoseStack;
+ 447: invokevirtual #1159 // Method com/mojang/blaze3d/vertex/PoseStack.m_85849_:()V
+ 450: return
+
+ private static net.minecraft.world.item.ItemStack nailIconStack();
+ Code:
+ 0: getstatic #1335 // Field nailIconResolved:Z
+ 3: ifne 46
+ 6: iconst_1
+ 7: putstatic #1335 // Field nailIconResolved:Z
+ 10: getstatic #1252 // Field net/minecraftforge/registries/ForgeRegistries.ITEMS:Lnet/minecraftforge/registries/IForgeRegistry;
+ 13: getstatic #1246 // Field NAIL_ITEM_ID:Lnet/minecraft/resources/ResourceLocation;
+ 16: invokeinterface #1339, 2 // InterfaceMethod net/minecraftforge/registries/IForgeRegistry.getValue:(Lnet/minecraft/resources/ResourceLocation;)Ljava/lang/Object;
+ 21: checkcast #1268 // class net/minecraft/world/item/Item
+ 24: astore_0
+ 25: aload_0
+ 26: ifnonnull 35
+ 29: getstatic #1342 // Field net/minecraft/world/item/ItemStack.f_41583_:Lnet/minecraft/world/item/ItemStack;
+ 32: goto 43
+ 35: new #159 // class net/minecraft/world/item/ItemStack
+ 38: dup
+ 39: aload_0
+ 40: invokespecial #1345 // Method net/minecraft/world/item/ItemStack."":(Lnet/minecraft/world/level/ItemLike;)V
+ 43: putstatic #1347 // Field cachedNailIcon:Lnet/minecraft/world/item/ItemStack;
+ 46: getstatic #1347 // Field cachedNailIcon:Lnet/minecraft/world/item/ItemStack;
+ 49: areturn
+
+ private static net.minecraft.world.item.ItemStack tacticalBoltIconStack();
+ Code:
+ 0: getstatic #1351 // Field cachedTacticalBoltIcon:Lnet/minecraft/world/item/ItemStack;
+ 3: invokevirtual #629 // Method net/minecraft/world/item/ItemStack.m_41619_:()Z
+ 6: ifeq 28
+ 9: new #159 // class net/minecraft/world/item/ItemStack
+ 12: dup
+ 13: getstatic #1266 // Field com/ogaba/sa_combat/registry/ModItems.TACTICAL_BOLT:Lnet/minecraftforge/registries/RegistryObject;
+ 16: invokevirtual #526 // Method net/minecraftforge/registries/RegistryObject.get:()Ljava/lang/Object;
+ 19: checkcast #1353 // class net/minecraft/world/level/ItemLike
+ 22: invokespecial #1345 // Method net/minecraft/world/item/ItemStack."":(Lnet/minecraft/world/level/ItemLike;)V
+ 25: putstatic #1351 // Field cachedTacticalBoltIcon:Lnet/minecraft/world/item/ItemStack;
+ 28: getstatic #1351 // Field cachedTacticalBoltIcon:Lnet/minecraft/world/item/ItemStack;
+ 31: areturn
+
+ private static net.minecraft.world.item.ItemStack improvisedBoltIconStack();
+ Code:
+ 0: getstatic #1355 // Field cachedImprovisedBoltIcon:Lnet/minecraft/world/item/ItemStack;
+ 3: invokevirtual #629 // Method net/minecraft/world/item/ItemStack.m_41619_:()Z
+ 6: ifeq 28
+ 9: new #159 // class net/minecraft/world/item/ItemStack
+ 12: dup
+ 13: getstatic #1275 // Field com/ogaba/sa_combat/registry/ModItems.IMPROVISED_BOLT:Lnet/minecraftforge/registries/RegistryObject;
+ 16: invokevirtual #526 // Method net/minecraftforge/registries/RegistryObject.get:()Ljava/lang/Object;
+ 19: checkcast #1353 // class net/minecraft/world/level/ItemLike
+ 22: invokespecial #1345 // Method net/minecraft/world/item/ItemStack."":(Lnet/minecraft/world/level/ItemLike;)V
+ 25: putstatic #1355 // Field cachedImprovisedBoltIcon:Lnet/minecraft/world/item/ItemStack;
+ 28: getstatic #1355 // Field cachedImprovisedBoltIcon:Lnet/minecraft/world/item/ItemStack;
+ 31: areturn
+
+ private static void renderRealSpyglassOverlay(net.minecraft.client.gui.GuiGraphics);
+ Code:
+ 0: invokestatic #144 // Method net/minecraft/client/Minecraft.m_91087_:()Lnet/minecraft/client/Minecraft;
+ 3: astore_1
+ 4: invokestatic #1362 // Method vanillaSpyglassScopeScale:()F
+ 7: fstore_2
+ 8: getstatic #1364 // Field renderSpyglassOverlayMethod:Ljava/lang/reflect/Method;
+ 11: ifnonnull 53
+ 14: aload_1
+ 15: getfield #1368 // Field net/minecraft/client/Minecraft.f_91065_:Lnet/minecraft/client/gui/Gui;
+ 18: invokevirtual #1372 // Method java/lang/Object.getClass:()Ljava/lang/Class;
+ 21: ldc_w #1374 // String renderSpyglassOverlay
+ 24: iconst_2
+ 25: anewarray #1376 // class java/lang/Class
+ 28: dup
+ 29: iconst_0
+ 30: ldc_w #1059 // class net/minecraft/client/gui/GuiGraphics
+ 33: aastore
+ 34: dup
+ 35: iconst_1
+ 36: getstatic #1382 // Field java/lang/Float.TYPE:Ljava/lang/Class;
+ 39: aastore
+ 40: invokevirtual #1386 // Method java/lang/Class.getDeclaredMethod:(Ljava/lang/String;[Ljava/lang/Class;)Ljava/lang/reflect/Method;
+ 43: putstatic #1364 // Field renderSpyglassOverlayMethod:Ljava/lang/reflect/Method;
+ 46: getstatic #1364 // Field renderSpyglassOverlayMethod:Ljava/lang/reflect/Method;
+ 49: iconst_1
+ 50: invokevirtual #1391 // Method java/lang/reflect/Method.setAccessible:(Z)V
+ 53: getstatic #1364 // Field renderSpyglassOverlayMethod:Ljava/lang/reflect/Method;
+ 56: aload_1
+ 57: getfield #1368 // Field net/minecraft/client/Minecraft.f_91065_:Lnet/minecraft/client/gui/Gui;
+ 60: iconst_2
+ 61: anewarray #4 // class java/lang/Object
+ 64: dup
+ 65: iconst_0
+ 66: aload_0
+ 67: aastore
+ 68: dup
+ 69: iconst_1
+ 70: fload_2
+ 71: invokestatic #1394 // Method java/lang/Float.valueOf:(F)Ljava/lang/Float;
+ 74: aastore
+ 75: invokevirtual #1398 // Method java/lang/reflect/Method.invoke:(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;
+ 78: pop
+ 79: return
+ 80: astore_3
+ 81: aload_0
+ 82: fload_2
+ 83: invokestatic #1404 // Method renderVanillaSpyglassOverlayFallback:(Lnet/minecraft/client/gui/GuiGraphics;F)V
+ 86: return
+ Exception table:
+ from to target type
+ 8 79 80 Class java/lang/ReflectiveOperationException
+ 8 79 80 Class java/lang/RuntimeException
+
+ private static float vanillaSpyglassScopeScale();
+ Code:
+ 0: invokestatic #1410 // Method easedScopeProgress:()F
+ 3: ldc_w #262 // float 0.5f
+ 6: ldc_w #1411 // float 1.125f
+ 9: invokestatic #256 // Method net/minecraft/util/Mth.m_14179_:(FFF)F
+ 12: freturn
+
+ private static float easedScopeProgress();
+ Code:
+ 0: getstatic #1051 // Field tacticalScopeProgress:F
+ 3: fconst_0
+ 4: fconst_1
+ 5: invokestatic #238 // Method net/minecraft/util/Mth.m_14036_:(FFF)F
+ 8: fstore_0
+ 9: fload_0
+ 10: fload_0
+ 11: fmul
+ 12: ldc_w #271 // float 3.0f
+ 15: fconst_2
+ 16: fload_0
+ 17: fmul
+ 18: fsub
+ 19: fmul
+ 20: freturn
+
+ private static void renderVanillaSpyglassOverlayFallback(net.minecraft.client.gui.GuiGraphics, float);
+ Code:
+ 0: aload_0
+ 1: invokevirtual #1091 // Method net/minecraft/client/gui/GuiGraphics.m_280182_:()I
+ 4: istore_2
+ 5: aload_0
+ 6: invokevirtual #1094 // Method net/minecraft/client/gui/GuiGraphics.m_280206_:()I
+ 9: istore_3
+ 10: iload_2
+ 11: ifle 18
+ 14: iload_3
+ 15: ifgt 19
+ 18: return
+ 19: iload_2
+ 20: iload_3
+ 21: invokestatic #1414 // Method java/lang/Math.min:(II)I
+ 24: i2f
+ 25: fstore 4
+ 27: iload_2
+ 28: i2f
+ 29: fload 4
+ 31: fdiv
+ 32: iload_3
+ 33: i2f
+ 34: fload 4
+ 36: fdiv
+ 37: invokestatic #1417 // Method java/lang/Math.min:(FF)F
+ 40: fload_1
+ 41: fmul
+ 42: fstore 5
+ 44: fload 4
+ 46: fload 5
+ 48: fmul
+ 49: invokestatic #1084 // Method net/minecraft/util/Mth.m_14143_:(F)I
+ 52: istore 6
+ 54: fload 4
+ 56: fload 5
+ 58: fmul
+ 59: invokestatic #1084 // Method net/minecraft/util/Mth.m_14143_:(F)I
+ 62: istore 7
+ 64: iload_2
+ 65: iload 6
+ 67: isub
+ 68: iconst_2
+ 69: idiv
+ 70: istore 8
+ 72: iload_3
+ 73: iload 7
+ 75: isub
+ 76: iconst_2
+ 77: idiv
+ 78: istore 9
+ 80: iload 8
+ 82: iload 6
+ 84: iadd
+ 85: istore 10
+ 87: iload 9
+ 89: iload 7
+ 91: iadd
+ 92: istore 11
+ 94: invokestatic #1420 // Method com/mojang/blaze3d/systems/RenderSystem.disableDepthTest:()V
+ 97: iconst_0
+ 98: invokestatic #1423 // Method com/mojang/blaze3d/systems/RenderSystem.depthMask:(Z)V
+ 101: invokestatic #1099 // Method com/mojang/blaze3d/systems/RenderSystem.enableBlend:()V
+ 104: invokestatic #1102 // Method com/mojang/blaze3d/systems/RenderSystem.defaultBlendFunc:()V
+ 107: aload_0
+ 108: getstatic #1425 // Field VANILLA_SPYGLASS_SCOPE:Lnet/minecraft/resources/ResourceLocation;
+ 111: iload 8
+ 113: iload 9
+ 115: bipush -90
+ 117: fconst_0
+ 118: fconst_0
+ 119: iload 6
+ 121: iload 7
+ 123: iload 6
+ 125: iload 7
+ 127: invokevirtual #1429 // Method net/minecraft/client/gui/GuiGraphics.m_280398_:(Lnet/minecraft/resources/ResourceLocation;IIIFFIIII)V
+ 130: aload_0
+ 131: invokestatic #1435 // Method net/minecraft/client/renderer/RenderType.m_286086_:()Lnet/minecraft/client/renderer/RenderType;
+ 134: iconst_0
+ 135: iload 11
+ 137: iload_2
+ 138: iload_3
+ 139: bipush -90
+ 141: ldc_w #1436 // int -16777216
+ 144: invokevirtual #1440 // Method net/minecraft/client/gui/GuiGraphics.m_285795_:(Lnet/minecraft/client/renderer/RenderType;IIIIII)V
+ 147: aload_0
+ 148: invokestatic #1435 // Method net/minecraft/client/renderer/RenderType.m_286086_:()Lnet/minecraft/client/renderer/RenderType;
+ 151: iconst_0
+ 152: iconst_0
+ 153: iload_2
+ 154: iload 9
+ 156: bipush -90
+ 158: ldc_w #1436 // int -16777216
+ 161: invokevirtual #1440 // Method net/minecraft/client/gui/GuiGraphics.m_285795_:(Lnet/minecraft/client/renderer/RenderType;IIIIII)V
+ 164: aload_0
+ 165: invokestatic #1435 // Method net/minecraft/client/renderer/RenderType.m_286086_:()Lnet/minecraft/client/renderer/RenderType;
+ 168: iconst_0
+ 169: iload 9
+ 171: iload 8
+ 173: iload 11
+ 175: bipush -90
+ 177: ldc_w #1436 // int -16777216
+ 180: invokevirtual #1440 // Method net/minecraft/client/gui/GuiGraphics.m_285795_:(Lnet/minecraft/client/renderer/RenderType;IIIIII)V
+ 183: aload_0
+ 184: invokestatic #1435 // Method net/minecraft/client/renderer/RenderType.m_286086_:()Lnet/minecraft/client/renderer/RenderType;
+ 187: iload 10
+ 189: iload 9
+ 191: iload_2
+ 192: iload 11
+ 194: bipush -90
+ 196: ldc_w #1436 // int -16777216
+ 199: invokevirtual #1440 // Method net/minecraft/client/gui/GuiGraphics.m_285795_:(Lnet/minecraft/client/renderer/RenderType;IIIIII)V
+ 202: iconst_1
+ 203: invokestatic #1423 // Method com/mojang/blaze3d/systems/RenderSystem.depthMask:(Z)V
+ 206: invokestatic #1102 // Method com/mojang/blaze3d/systems/RenderSystem.defaultBlendFunc:()V
+ 209: invokestatic #1443 // Method com/mojang/blaze3d/systems/RenderSystem.enableDepthTest:()V
+ 212: return
+
+ public static void onClientLoggingIn(net.minecraftforge.client.event.ClientPlayerNetworkEvent$LoggingIn);
+ Code:
+ 0: invokestatic #1457 // Method resetClientSessionState:()V
+ 3: return
+
+ public static void onClientLoggingOut(net.minecraftforge.client.event.ClientPlayerNetworkEvent$LoggingOut);
+ Code:
+ 0: invokestatic #1457 // Method resetClientSessionState:()V
+ 3: return
+
+ private static void resetClientSessionState();
+ Code:
+ 0: iconst_0
+ 1: iconst_0
+ 2: invokestatic #1465 // Method com/ogaba/sa_combat/client/armor/ClientBallisticProtectionData.set:(II)V
+ 5: fconst_0
+ 6: putstatic #1051 // Field tacticalScopeProgress:F
+ 9: aconst_null
+ 10: putstatic #1364 // Field renderSpyglassOverlayMethod:Ljava/lang/reflect/Method;
+ 13: iconst_0
+ 14: putstatic #555 // Field nailGunTriggerWasDown:Z
+ 17: fconst_0
+ 18: putstatic #557 // Field nailGunAutoFireAccumulator:F
+ 21: ldc2_w #490 // long -9223372036854775808l
+ 24: putstatic #493 // Field thirdPersonNailGunStackId:J
+ 27: iconst_0
+ 28: putstatic #495 // Field thirdPersonNailGunReloadWasActive:Z
+ 31: iconst_0
+ 32: putstatic #434 // Field crossbowCycleWasDown:Z
+ 35: ldc_w #1466 // int -2147483648
+ 38: putstatic #1223 // Field cachedInventoryPlayerId:I
+ 41: ldc_w #1466 // int -2147483648
+ 44: putstatic #1228 // Field cachedInventoryTick:I
+ 47: invokestatic #1469 // Method com/ogaba/sa_combat/item/SpecialGrenadeItem.clearClientAnimationState:()V
+ 50: invokestatic #1470 // Method com/ogaba/sa_combat/combat/weapon/NailGunItem.clearClientAnimationState:()V
+ 53: invokestatic #1473 // Method com/ogaba/sa_combat/client/render/NailGunAimClient.reset:()V
+ 56: invokestatic #1478 // Method com/ogaba/sa_combat/client/render/NailGunCameraAnimation.resetImmediately:()V
+ 59: invokestatic #1481 // Method com/ogaba/sa_combat/client/effect/NailHoleManager.clear:()V
+ 62: invokestatic #1484 // Method com/ogaba/sa_combat/client/sound/ChainsawSoundManager.stop:()V
+ 65: return
+
+ private static net.minecraft.resources.ResourceLocation rl(java.lang.String);
+ Code:
+ 0: new #1022 // class net/minecraft/resources/ResourceLocation
+ 3: dup
+ 4: ldc_w #1487 // String sa_combat
+ 7: aload_0
+ 8: invokespecial #1490 // Method net/minecraft/resources/ResourceLocation."":(Ljava/lang/String;Ljava/lang/String;)V
+ 11: areturn
+
+ static {};
+ Code:
+ 0: ldc_w #1494 // String textures/gui/hud/ballistic_vest_bg.png
+ 3: invokestatic #1496 // Method rl:(Ljava/lang/String;)Lnet/minecraft/resources/ResourceLocation;
+ 6: putstatic #1154 // Field BALLISTIC_VEST_BG:Lnet/minecraft/resources/ResourceLocation;
+ 9: ldc_w #1498 // String textures/gui/hud/ballistic_vest_fill.png
+ 12: invokestatic #1496 // Method rl:(Ljava/lang/String;)Lnet/minecraft/resources/ResourceLocation;
+ 15: putstatic #1156 // Field BALLISTIC_VEST_FILL:Lnet/minecraft/resources/ResourceLocation;
+ 18: ldc_w #1500 // String textures/gui/hud/grenade_fuse_frame.png
+ 21: invokestatic #1496 // Method rl:(Ljava/lang/String;)Lnet/minecraft/resources/ResourceLocation;
+ 24: putstatic #1110 // Field GRENADE_FUSE_FRAME:Lnet/minecraft/resources/ResourceLocation;
+ 27: ldc_w #1502 // String textures/gui/hud/compound_bow_power_fill.png
+ 30: invokestatic #1496 // Method rl:(Ljava/lang/String;)Lnet/minecraft/resources/ResourceLocation;
+ 33: putstatic #1104 // Field GRENADE_FUSE_FILL:Lnet/minecraft/resources/ResourceLocation;
+ 36: new #1022 // class net/minecraft/resources/ResourceLocation
+ 39: dup
+ 40: ldc_w #1503 // String minecraft
+ 43: ldc_w #1505 // String textures/misc/spyglass_scope.png
+ 46: invokespecial #1490 // Method net/minecraft/resources/ResourceLocation."":(Ljava/lang/String;Ljava/lang/String;)V
+ 49: putstatic #1425 // Field VANILLA_SPYGLASS_SCOPE:Lnet/minecraft/resources/ResourceLocation;
+ 52: new #1022 // class net/minecraft/resources/ResourceLocation
+ 55: dup
+ 56: ldc_w #1507 // String sa_core
+ 59: ldc_w #1509 // String nails
+ 62: invokespecial #1490 // Method net/minecraft/resources/ResourceLocation."":(Ljava/lang/String;Ljava/lang/String;)V
+ 65: putstatic #1246 // Field NAIL_ITEM_ID:Lnet/minecraft/resources/ResourceLocation;
+ 68: ldc2_w #490 // long -9223372036854775808l
+ 71: putstatic #493 // Field thirdPersonNailGunStackId:J
+ 74: ldc_w #1466 // int -2147483648
+ 77: putstatic #1223 // Field cachedInventoryPlayerId:I
+ 80: ldc_w #1466 // int -2147483648
+ 83: putstatic #1228 // Field cachedInventoryTick:I
+ 86: getstatic #1342 // Field net/minecraft/world/item/ItemStack.f_41583_:Lnet/minecraft/world/item/ItemStack;
+ 89: putstatic #1347 // Field cachedNailIcon:Lnet/minecraft/world/item/ItemStack;
+ 92: getstatic #1342 // Field net/minecraft/world/item/ItemStack.f_41583_:Lnet/minecraft/world/item/ItemStack;
+ 95: putstatic #1351 // Field cachedTacticalBoltIcon:Lnet/minecraft/world/item/ItemStack;
+ 98: getstatic #1342 // Field net/minecraft/world/item/ItemStack.f_41583_:Lnet/minecraft/world/item/ItemStack;
+ 101: putstatic #1355 // Field cachedImprovisedBoltIcon:Lnet/minecraft/world/item/ItemStack;
+ 104: return
+}
+
+
+==================== com.ogaba.sa_combat.client.model.SAWeaponGeoModel ====================
+Compiled from "SAWeaponGeoModel.java"
+public class com.ogaba.sa_combat.client.model.SAWeaponGeoModel extends software.bernie.geckolib.model.GeoModel {
+ private static final java.util.Map RESOURCE_EXISTS_CACHE;
+
+ private static final java.util.Map> ATTACHMENT_BONE_CANDIDATES_CACHE;
+
+ private static final java.util.Map ITEM_PATH_CACHE;
+
+ private static final java.util.Map MODEL_RESOURCE_CACHE;
+
+ private static final java.util.Map TEXTURE_RESOURCE_CACHE;
+
+ private static final java.util.Map ANIMATION_RESOURCE_CACHE;
+
+ private net.minecraft.world.item.ItemStack currentRenderStack;
+
+ private static final java.util.List ELECTRIC_FX_BONES;
+
+ private static final int ELECTRIC_FX_FRAME_TIME_TICKS;
+
+ private static final java.util.List CROSSBOW_PROJECTILE_BONES;
+
+ private static volatile int dynamicBoneCacheGeneration;
+
+ private int observedDynamicBoneCacheGeneration;
+
+ private final java.util.Map> supportedAttachmentBonesByModel;
+
+ private final java.util.Map> supportedElectricFxBonesByModel;
+
+ private boolean electricAttachmentInstalled;
+
+ private final com.ogaba.sa_combat.combat.attachment.WeaponAttachmentData$AttachmentVisitor attachmentVisualVisitor;
+
+ public com.ogaba.sa_combat.client.model.SAWeaponGeoModel();
+ Code:
+ 0: aload_0
+ 1: invokespecial #49 // Method software/bernie/geckolib/model/GeoModel."":()V
+ 4: aload_0
+ 5: getstatic #54 // Field net/minecraft/world/item/ItemStack.f_41583_:Lnet/minecraft/world/item/ItemStack;
+ 8: putfield #56 // Field currentRenderStack:Lnet/minecraft/world/item/ItemStack;
+ 11: aload_0
+ 12: getstatic #58 // Field dynamicBoneCacheGeneration:I
+ 15: putfield #60 // Field observedDynamicBoneCacheGeneration:I
+ 18: aload_0
+ 19: new #62 // class java/util/HashMap
+ 22: dup
+ 23: invokespecial #63 // Method java/util/HashMap."":()V
+ 26: putfield #65 // Field supportedAttachmentBonesByModel:Ljava/util/Map;
+ 29: aload_0
+ 30: new #62 // class java/util/HashMap
+ 33: dup
+ 34: invokespecial #63 // Method java/util/HashMap."":()V
+ 37: putfield #67 // Field supportedElectricFxBonesByModel:Ljava/util/Map;
+ 40: aload_0
+ 41: aload_0
+ 42: invokedynamic #84, 0 // InvokeDynamic #0:accept:(Lcom/ogaba/sa_combat/client/model/SAWeaponGeoModel;)Lcom/ogaba/sa_combat/combat/attachment/WeaponAttachmentData$AttachmentVisitor;
+ 47: putfield #86 // Field attachmentVisualVisitor:Lcom/ogaba/sa_combat/combat/attachment/WeaponAttachmentData$AttachmentVisitor;
+ 50: return
+
+ public void setCurrentRenderStack(net.minecraft.world.item.ItemStack);
+ Code:
+ 0: aload_0
+ 1: aload_1
+ 2: ifnonnull 11
+ 5: getstatic #54 // Field net/minecraft/world/item/ItemStack.f_41583_:Lnet/minecraft/world/item/ItemStack;
+ 8: goto 12
+ 11: aload_1
+ 12: putfield #56 // Field currentRenderStack:Lnet/minecraft/world/item/ItemStack;
+ 15: return
+
+ public void clearCurrentRenderStack();
+ Code:
+ 0: aload_0
+ 1: getstatic #54 // Field net/minecraft/world/item/ItemStack.f_41583_:Lnet/minecraft/world/item/ItemStack;
+ 4: putfield #56 // Field currentRenderStack:Lnet/minecraft/world/item/ItemStack;
+ 7: return
+
+ public net.minecraft.resources.ResourceLocation getModelResource(com.ogaba.sa_combat.combat.weapon.SAWeaponItem);
+ Code:
+ 0: aload_1
+ 1: invokestatic #98 // Method itemPath:(Lcom/ogaba/sa_combat/combat/weapon/SAWeaponItem;)Ljava/lang/String;
+ 4: astore_2
+ 5: getstatic #100 // Field MODEL_RESOURCE_CACHE:Ljava/util/Map;
+ 8: aload_2
+ 9: invokedynamic #112, 0 // InvokeDynamic #1:apply:()Ljava/util/function/Function;
+ 14: invokeinterface #118, 3 // InterfaceMethod java/util/Map.computeIfAbsent:(Ljava/lang/Object;Ljava/util/function/Function;)Ljava/lang/Object;
+ 19: checkcast #120 // class net/minecraft/resources/ResourceLocation
+ 22: areturn
+
+ public net.minecraft.resources.ResourceLocation getTextureResource(com.ogaba.sa_combat.combat.weapon.SAWeaponItem);
+ Code:
+ 0: aload_1
+ 1: invokestatic #98 // Method itemPath:(Lcom/ogaba/sa_combat/combat/weapon/SAWeaponItem;)Ljava/lang/String;
+ 4: astore_2
+ 5: ldc #127 // String baseball_bat
+ 7: aload_2
+ 8: invokevirtual #133 // Method java/lang/String.equals:(Ljava/lang/Object;)Z
+ 11: ifeq 74
+ 14: getstatic #135 // Field TEXTURE_RESOURCE_CACHE:Ljava/util/Map;
+ 17: aload_2
+ 18: invokeinterface #138, 2 // InterfaceMethod java/util/Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
+ 23: checkcast #120 // class net/minecraft/resources/ResourceLocation
+ 26: astore_3
+ 27: aload_3
+ 28: ifnull 33
+ 31: aload_3
+ 32: areturn
+ 33: ldc #140 // String textures/item/weapons/baseball_bat_modular.png
+ 35: iconst_3
+ 36: anewarray #129 // class java/lang/String
+ 39: dup
+ 40: iconst_0
+ 41: ldc #142 // String textures/item/baseball_bat_modular.png
+ 43: aastore
+ 44: dup
+ 45: iconst_1
+ 46: ldc #144 // String textures/item/weapons/baseball_bat.png
+ 48: aastore
+ 49: dup
+ 50: iconst_2
+ 51: ldc #146 // String textures/item/baseball_bat.png
+ 53: aastore
+ 54: invokestatic #150 // Method firstExisting:(Ljava/lang/String;[Ljava/lang/String;)Lnet/minecraft/resources/ResourceLocation;
+ 57: astore 4
+ 59: getstatic #135 // Field TEXTURE_RESOURCE_CACHE:Ljava/util/Map;
+ 62: aload_2
+ 63: aload 4
+ 65: invokeinterface #154, 3 // InterfaceMethod java/util/Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+ 70: pop
+ 71: aload 4
+ 73: areturn
+ 74: ldc #156 // String aluminum_baseball_bat
+ 76: aload_2
+ 77: invokevirtual #133 // Method java/lang/String.equals:(Ljava/lang/Object;)Z
+ 80: ifeq 143
+ 83: getstatic #135 // Field TEXTURE_RESOURCE_CACHE:Ljava/util/Map;
+ 86: aload_2
+ 87: invokeinterface #138, 2 // InterfaceMethod java/util/Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
+ 92: checkcast #120 // class net/minecraft/resources/ResourceLocation
+ 95: astore_3
+ 96: aload_3
+ 97: ifnull 102
+ 100: aload_3
+ 101: areturn
+ 102: ldc #158 // String textures/item/weapons/aluminum_baseball_bat_modular.png
+ 104: iconst_3
+ 105: anewarray #129 // class java/lang/String
+ 108: dup
+ 109: iconst_0
+ 110: ldc #160 // String textures/item/aluminum_baseball_bat_modular.png
+ 112: aastore
+ 113: dup
+ 114: iconst_1
+ 115: ldc #162 // String textures/item/weapons/aluminum_baseball_bat.png
+ 117: aastore
+ 118: dup
+ 119: iconst_2
+ 120: ldc #164 // String textures/item/aluminum_baseball_bat.png
+ 122: aastore
+ 123: invokestatic #150 // Method firstExisting:(Ljava/lang/String;[Ljava/lang/String;)Lnet/minecraft/resources/ResourceLocation;
+ 126: astore 4
+ 128: getstatic #135 // Field TEXTURE_RESOURCE_CACHE:Ljava/util/Map;
+ 131: aload_2
+ 132: aload 4
+ 134: invokeinterface #154, 3 // InterfaceMethod java/util/Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+ 139: pop
+ 140: aload 4
+ 142: areturn
+ 143: ldc #166 // String chainsaw
+ 145: aload_2
+ 146: invokevirtual #133 // Method java/lang/String.equals:(Ljava/lang/Object;)Z
+ 149: ifeq 295
+ 152: aload_0
+ 153: getfield #56 // Field currentRenderStack:Lnet/minecraft/world/item/ItemStack;
+ 156: invokestatic #172 // Method com/ogaba/sa_combat/combat/weapon/ChainsawItem.isRunning:(Lnet/minecraft/world/item/ItemStack;)Z
+ 159: ifeq 174
+ 162: aload_0
+ 163: invokevirtual #176 // Method chainsawTextureFrame:()I
+ 166: iconst_1
+ 167: if_icmpne 174
+ 170: iconst_1
+ 171: goto 175
+ 174: iconst_0
+ 175: istore 5
+ 177: iload 5
+ 179: ifeq 187
+ 182: ldc #178 // String chainsaw#frame1
+ 184: goto 189
+ 187: ldc #180 // String chainsaw#frame0
+ 189: astore 6
+ 191: getstatic #135 // Field TEXTURE_RESOURCE_CACHE:Ljava/util/Map;
+ 194: aload 6
+ 196: invokeinterface #138, 2 // InterfaceMethod java/util/Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
+ 201: checkcast #120 // class net/minecraft/resources/ResourceLocation
+ 204: astore_3
+ 205: aload_3
+ 206: ifnull 211
+ 209: aload_3
+ 210: areturn
+ 211: iload 5
+ 213: ifeq 253
+ 216: ldc #184 // String textures/item/weapons/chainsaw1.png
+ 218: iconst_5
+ 219: anewarray #129 // class java/lang/String
+ 222: dup
+ 223: iconst_0
+ 224: ldc #186 // String textures/item/chainsaw1.png
+ 226: aastore
+ 227: dup
+ 228: iconst_1
+ 229: ldc #188 // String textures/item/weapons/chainsaw.png
+ 231: aastore
+ 232: dup
+ 233: iconst_2
+ 234: ldc #190 // String textures/item/chainsaw.png
+ 236: aastore
+ 237: dup
+ 238: iconst_3
+ 239: ldc #192 // String textures/item/weapons/chainsaw0.png
+ 241: aastore
+ 242: dup
+ 243: iconst_4
+ 244: ldc #194 // String textures/item/chainsaw0.png
+ 246: aastore
+ 247: invokestatic #150 // Method firstExisting:(Ljava/lang/String;[Ljava/lang/String;)Lnet/minecraft/resources/ResourceLocation;
+ 250: goto 277
+ 253: ldc #188 // String textures/item/weapons/chainsaw.png
+ 255: iconst_3
+ 256: anewarray #129 // class java/lang/String
+ 259: dup
+ 260: iconst_0
+ 261: ldc #190 // String textures/item/chainsaw.png
+ 263: aastore
+ 264: dup
+ 265: iconst_1
+ 266: ldc #192 // String textures/item/weapons/chainsaw0.png
+ 268: aastore
+ 269: dup
+ 270: iconst_2
+ 271: ldc #194 // String textures/item/chainsaw0.png
+ 273: aastore
+ 274: invokestatic #150 // Method firstExisting:(Ljava/lang/String;[Ljava/lang/String;)Lnet/minecraft/resources/ResourceLocation;
+ 277: astore 4
+ 279: getstatic #135 // Field TEXTURE_RESOURCE_CACHE:Ljava/util/Map;
+ 282: aload 6
+ 284: aload 4
+ 286: invokeinterface #154, 3 // InterfaceMethod java/util/Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+ 291: pop
+ 292: aload 4
+ 294: areturn
+ 295: ldc #196 // String chainsaw_sword
+ 297: aload_2
+ 298: invokevirtual #133 // Method java/lang/String.equals:(Ljava/lang/Object;)Z
+ 301: ifeq 447
+ 304: aload_0
+ 305: invokevirtual #176 // Method chainsawTextureFrame:()I
+ 308: iconst_1
+ 309: if_icmpne 316
+ 312: iconst_1
+ 313: goto 317
+ 316: iconst_0
+ 317: istore 5
+ 319: iload 5
+ 321: ifeq 329
+ 324: ldc #198 // String chainsaw_sword#frame1
+ 326: goto 331
+ 329: ldc #200 // String chainsaw_sword#frame0
+ 331: astore 6
+ 333: getstatic #135 // Field TEXTURE_RESOURCE_CACHE:Ljava/util/Map;
+ 336: aload 6
+ 338: invokeinterface #138, 2 // InterfaceMethod java/util/Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
+ 343: checkcast #120 // class net/minecraft/resources/ResourceLocation
+ 346: astore_3
+ 347: aload_3
+ 348: ifnull 353
+ 351: aload_3
+ 352: areturn
+ 353: iload 5
+ 355: ifeq 395
+ 358: ldc #202 // String textures/item/weapons/chainsaw_sword1.png
+ 360: iconst_5
+ 361: anewarray #129 // class java/lang/String
+ 364: dup
+ 365: iconst_0
+ 366: ldc #204 // String textures/item/chainsaw_sword1.png
+ 368: aastore
+ 369: dup
+ 370: iconst_1
+ 371: ldc #206 // String textures/item/weapons/chainsaw_sword.png
+ 373: aastore
+ 374: dup
+ 375: iconst_2
+ 376: ldc #208 // String textures/item/chainsaw_sword.png
+ 378: aastore
+ 379: dup
+ 380: iconst_3
+ 381: ldc #210 // String textures/item/weapons/chainsaw_sword0.png
+ 383: aastore
+ 384: dup
+ 385: iconst_4
+ 386: ldc #212 // String textures/item/chainsaw_sword0.png
+ 388: aastore
+ 389: invokestatic #150 // Method firstExisting:(Ljava/lang/String;[Ljava/lang/String;)Lnet/minecraft/resources/ResourceLocation;
+ 392: goto 429
+ 395: ldc #206 // String textures/item/weapons/chainsaw_sword.png
+ 397: iconst_5
+ 398: anewarray #129 // class java/lang/String
+ 401: dup
+ 402: iconst_0
+ 403: ldc #208 // String textures/item/chainsaw_sword.png
+ 405: aastore
+ 406: dup
+ 407: iconst_1
+ 408: ldc #210 // String textures/item/weapons/chainsaw_sword0.png
+ 410: aastore
+ 411: dup
+ 412: iconst_2
+ 413: ldc #212 // String textures/item/chainsaw_sword0.png
+ 415: aastore
+ 416: dup
+ 417: iconst_3
+ 418: ldc #202 // String textures/item/weapons/chainsaw_sword1.png
+ 420: aastore
+ 421: dup
+ 422: iconst_4
+ 423: ldc #204 // String textures/item/chainsaw_sword1.png
+ 425: aastore
+ 426: invokestatic #150 // Method firstExisting:(Ljava/lang/String;[Ljava/lang/String;)Lnet/minecraft/resources/ResourceLocation;
+ 429: astore 4
+ 431: getstatic #135 // Field TEXTURE_RESOURCE_CACHE:Ljava/util/Map;
+ 434: aload 6
+ 436: aload 4
+ 438: invokeinterface #154, 3 // InterfaceMethod java/util/Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+ 443: pop
+ 444: aload 4
+ 446: areturn
+ 447: getstatic #135 // Field TEXTURE_RESOURCE_CACHE:Ljava/util/Map;
+ 450: aload_2
+ 451: invokeinterface #138, 2 // InterfaceMethod java/util/Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
+ 456: checkcast #120 // class net/minecraft/resources/ResourceLocation
+ 459: astore_3
+ 460: aload_3
+ 461: ifnull 466
+ 464: aload_3
+ 465: areturn
+ 466: aload_2
+ 467: invokestatic #216 // Method isShieldPath:(Ljava/lang/String;)Z
+ 470: ifeq 509
+ 473: aload_2
+ 474: invokedynamic #228, 0 // InvokeDynamic #2:makeConcatWithConstants:(Ljava/lang/String;)Ljava/lang/String;
+ 479: iconst_2
+ 480: anewarray #129 // class java/lang/String
+ 483: dup
+ 484: iconst_0
+ 485: aload_2
+ 486: invokedynamic #231, 0 // InvokeDynamic #3:makeConcatWithConstants:(Ljava/lang/String;)Ljava/lang/String;
+ 491: aastore
+ 492: dup
+ 493: iconst_1
+ 494: aload_2
+ 495: invokedynamic #234, 0 // InvokeDynamic #4:makeConcatWithConstants:(Ljava/lang/String;)Ljava/lang/String;
+ 500: aastore
+ 501: invokestatic #150 // Method firstExisting:(Ljava/lang/String;[Ljava/lang/String;)Lnet/minecraft/resources/ResourceLocation;
+ 504: astore 4
+ 506: goto 533
+ 509: aload_2
+ 510: invokedynamic #231, 0 // InvokeDynamic #3:makeConcatWithConstants:(Ljava/lang/String;)Ljava/lang/String;
+ 515: iconst_1
+ 516: anewarray #129 // class java/lang/String
+ 519: dup
+ 520: iconst_0
+ 521: aload_2
+ 522: invokedynamic #234, 0 // InvokeDynamic #4:makeConcatWithConstants:(Ljava/lang/String;)Ljava/lang/String;
+ 527: aastore
+ 528: invokestatic #150 // Method firstExisting:(Ljava/lang/String;[Ljava/lang/String;)Lnet/minecraft/resources/ResourceLocation;
+ 531: astore 4
+ 533: getstatic #135 // Field TEXTURE_RESOURCE_CACHE:Ljava/util/Map;
+ 536: aload_2
+ 537: aload 4
+ 539: invokeinterface #154, 3 // InterfaceMethod java/util/Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+ 544: pop
+ 545: aload 4
+ 547: areturn
+
+ public net.minecraft.resources.ResourceLocation getAnimationResource(com.ogaba.sa_combat.combat.weapon.SAWeaponItem);
+ Code:
+ 0: aload_1
+ 1: invokestatic #98 // Method itemPath:(Lcom/ogaba/sa_combat/combat/weapon/SAWeaponItem;)Ljava/lang/String;
+ 4: astore_2
+ 5: getstatic #242 // Field ANIMATION_RESOURCE_CACHE:Ljava/util/Map;
+ 8: aload_2
+ 9: invokedynamic #247, 0 // InvokeDynamic #5:apply:()Ljava/util/function/Function;
+ 14: invokeinterface #118, 3 // InterfaceMethod java/util/Map.computeIfAbsent:(Ljava/lang/Object;Ljava/util/function/Function;)Ljava/lang/Object;
+ 19: checkcast #120 // class net/minecraft/resources/ResourceLocation
+ 22: areturn
+
+ public void setCustomAnimations(com.ogaba.sa_combat.combat.weapon.SAWeaponItem, long, software.bernie.geckolib.core.animation.AnimationState);
+ Code:
+ 0: aload_0
+ 1: aload_1
+ 2: lload_2
+ 3: aload 4
+ 5: invokespecial #253 // Method software/bernie/geckolib/model/GeoModel.setCustomAnimations:(Lsoftware/bernie/geckolib/core/animatable/GeoAnimatable;JLsoftware/bernie/geckolib/core/animation/AnimationState;)V
+ 8: aload_1
+ 9: invokestatic #98 // Method itemPath:(Lcom/ogaba/sa_combat/combat/weapon/SAWeaponItem;)Ljava/lang/String;
+ 12: astore 5
+ 14: aload_0
+ 15: aload 5
+ 17: invokevirtual #257 // Method prepareDynamicBoneState:(Ljava/lang/String;)V
+ 20: aload_0
+ 21: aload_1
+ 22: invokevirtual #261 // Method hideCrossbowProjectileVisual:(Lcom/ogaba/sa_combat/combat/weapon/SAWeaponItem;)V
+ 25: aload 4
+ 27: getstatic #267 // Field software/bernie/geckolib/constant/DataTickets.ITEMSTACK:Lsoftware/bernie/geckolib/core/object/DataTicket;
+ 30: invokevirtual #273 // Method software/bernie/geckolib/core/animation/AnimationState.getData:(Lsoftware/bernie/geckolib/core/object/DataTicket;)Ljava/lang/Object;
+ 33: checkcast #51 // class net/minecraft/world/item/ItemStack
+ 36: astore 6
+ 38: aload 6
+ 40: ifnull 51
+ 43: aload 6
+ 45: invokevirtual #277 // Method net/minecraft/world/item/ItemStack.m_41619_:()Z
+ 48: ifeq 52
+ 51: return
+ 52: aload 4
+ 54: getstatic #280 // Field software/bernie/geckolib/constant/DataTickets.ITEM_RENDER_PERSPECTIVE:Lsoftware/bernie/geckolib/core/object/DataTicket;
+ 57: invokevirtual #273 // Method software/bernie/geckolib/core/animation/AnimationState.getData:(Lsoftware/bernie/geckolib/core/object/DataTicket;)Ljava/lang/Object;
+ 60: checkcast #282 // class net/minecraft/world/item/ItemDisplayContext
+ 63: astore 7
+ 65: aload_0
+ 66: aload_1
+ 67: invokevirtual #286 // Method isCrossbow:(Lcom/ogaba/sa_combat/combat/weapon/SAWeaponItem;)Z
+ 70: ifeq 89
+ 73: aload_0
+ 74: aload 7
+ 76: invokevirtual #290 // Method isHandRender:(Lnet/minecraft/world/item/ItemDisplayContext;)Z
+ 79: ifne 89
+ 82: aload_0
+ 83: invokevirtual #293 // Method resetCrossbowNonHandPose:()V
+ 86: goto 96
+ 89: aload_0
+ 90: aload_1
+ 91: aload 6
+ 93: invokevirtual #297 // Method applyCrossbowLoadedVisual:(Lcom/ogaba/sa_combat/combat/weapon/SAWeaponItem;Lnet/minecraft/world/item/ItemStack;)V
+ 96: aload_0
+ 97: iconst_0
+ 98: putfield #299 // Field electricAttachmentInstalled:Z
+ 101: aload 6
+ 103: aload_0
+ 104: getfield #86 // Field attachmentVisualVisitor:Lcom/ogaba/sa_combat/combat/attachment/WeaponAttachmentData$AttachmentVisitor;
+ 107: invokestatic #303 // Method com/ogaba/sa_combat/combat/attachment/WeaponAttachmentData.visitInstalledAttachments:(Lnet/minecraft/world/item/ItemStack;Lcom/ogaba/sa_combat/combat/attachment/WeaponAttachmentData$AttachmentVisitor;)I
+ 110: pop
+ 111: aload_0
+ 112: getfield #299 // Field electricAttachmentInstalled:Z
+ 115: ifeq 124
+ 118: aload_0
+ 119: aload 5
+ 121: invokevirtual #306 // Method showElectricFxFrame:(Ljava/lang/String;)V
+ 124: aload_0
+ 125: aload_1
+ 126: aload 6
+ 128: invokevirtual #309 // Method applyNailGunMagazineVisual:(Lcom/ogaba/sa_combat/combat/weapon/SAWeaponItem;Lnet/minecraft/world/item/ItemStack;)V
+ 131: aload_0
+ 132: aload_1
+ 133: aload 7
+ 135: invokevirtual #313 // Method applyCompoundBowPerspectivePose:(Lcom/ogaba/sa_combat/combat/weapon/SAWeaponItem;Lnet/minecraft/world/item/ItemDisplayContext;)V
+ 138: aload_0
+ 139: aload_1
+ 140: aload 6
+ 142: invokevirtual #316 // Method applyCompoundBowArrowVisual:(Lcom/ogaba/sa_combat/combat/weapon/SAWeaponItem;Lnet/minecraft/world/item/ItemStack;)V
+ 145: return
+
+ private void applyCompoundBowPerspectivePose(com.ogaba.sa_combat.combat.weapon.SAWeaponItem, net.minecraft.world.item.ItemDisplayContext);
+ Code:
+ 0: aload_1
+ 1: instanceof #326 // class com/ogaba/sa_combat/combat/weapon/CompoundBowItem
+ 4: ifne 8
+ 7: return
+ 8: aload_2
+ 9: getstatic #329 // Field net/minecraft/world/item/ItemDisplayContext.FIRST_PERSON_LEFT_HAND:Lnet/minecraft/world/item/ItemDisplayContext;
+ 12: if_acmpeq 22
+ 15: aload_2
+ 16: getstatic #332 // Field net/minecraft/world/item/ItemDisplayContext.FIRST_PERSON_RIGHT_HAND:Lnet/minecraft/world/item/ItemDisplayContext;
+ 19: if_acmpne 26
+ 22: iconst_1
+ 23: goto 27
+ 26: iconst_0
+ 27: istore_3
+ 28: iload_3
+ 29: ifeq 147
+ 32: aload_0
+ 33: invokevirtual #336 // Method getAnimationProcessor:()Lsoftware/bernie/geckolib/core/animation/AnimationProcessor;
+ 36: ldc_w #338 // String refit
+ 39: invokevirtual #344 // Method software/bernie/geckolib/core/animation/AnimationProcessor.getBone:(Ljava/lang/String;)Lsoftware/bernie/geckolib/core/animatable/model/CoreGeoBone;
+ 42: astore 4
+ 44: aload 4
+ 46: ifnull 146
+ 49: invokestatic #350 // Method com/ogaba/sa_combat/client/render/CompoundBowClient.getAimProgress:()F
+ 52: fstore 5
+ 54: fload 5
+ 56: fconst_0
+ 57: fconst_0
+ 58: invokestatic #356 // Method net/minecraft/util/Mth.m_14179_:(FFF)F
+ 61: fstore 6
+ 63: fload 5
+ 65: fconst_0
+ 66: fconst_0
+ 67: invokestatic #356 // Method net/minecraft/util/Mth.m_14179_:(FFF)F
+ 70: fstore 7
+ 72: fload 5
+ 74: fconst_0
+ 75: ldc_w #357 // float 72.5f
+ 78: invokestatic #356 // Method net/minecraft/util/Mth.m_14179_:(FFF)F
+ 81: fstore 8
+ 83: aload 4
+ 85: aload 4
+ 87: invokeinterface #362, 1 // InterfaceMethod software/bernie/geckolib/core/animatable/model/CoreGeoBone.getRotX:()F
+ 92: fload 6
+ 94: ldc_w #363 // float 0.017453292f
+ 97: fmul
+ 98: fadd
+ 99: invokeinterface #367, 2 // InterfaceMethod software/bernie/geckolib/core/animatable/model/CoreGeoBone.setRotX:(F)V
+ 104: aload 4
+ 106: aload 4
+ 108: invokeinterface #370, 1 // InterfaceMethod software/bernie/geckolib/core/animatable/model/CoreGeoBone.getRotY:()F
+ 113: fload 7
+ 115: ldc_w #363 // float 0.017453292f
+ 118: fmul
+ 119: fadd
+ 120: invokeinterface #373, 2 // InterfaceMethod software/bernie/geckolib/core/animatable/model/CoreGeoBone.setRotY:(F)V
+ 125: aload 4
+ 127: aload 4
+ 129: invokeinterface #376, 1 // InterfaceMethod software/bernie/geckolib/core/animatable/model/CoreGeoBone.getRotZ:()F
+ 134: fload 8
+ 136: ldc_w #363 // float 0.017453292f
+ 139: fmul
+ 140: fadd
+ 141: invokeinterface #379, 2 // InterfaceMethod software/bernie/geckolib/core/animatable/model/CoreGeoBone.setRotZ:(F)V
+ 146: return
+ 147: aload_0
+ 148: invokevirtual #382 // Method resetCompoundBowExternalPose:()V
+ 151: return
+
+ private void resetCompoundBowExternalPose();
+ Code:
+ 0: bipush 16
+ 2: anewarray #129 // class java/lang/String
+ 5: dup
+ 6: iconst_0
+ 7: ldc_w #338 // String refit
+ 10: aastore
+ 11: dup
+ 12: iconst_1
+ 13: ldc_w #391 // String weapon
+ 16: aastore
+ 17: dup
+ 18: iconst_2
+ 19: ldc_w #393 // String right_hand
+ 22: aastore
+ 23: dup
+ 24: iconst_3
+ 25: ldc_w #395 // String left_hand
+ 28: aastore
+ 29: dup
+ 30: iconst_4
+ 31: ldc_w #397 // String base
+ 34: aastore
+ 35: dup
+ 36: iconst_5
+ 37: ldc_w #399 // String down
+ 40: aastore
+ 41: dup
+ 42: bipush 6
+ 44: ldc_w #401 // String circ
+ 47: aastore
+ 48: dup
+ 49: bipush 7
+ 51: ldc_w #403 // String up
+ 54: aastore
+ 55: dup
+ 56: bipush 8
+ 58: ldc_w #405 // String circ2
+ 61: aastore
+ 62: dup
+ 63: bipush 9
+ 65: ldc_w #407 // String string
+ 68: aastore
+ 69: dup
+ 70: bipush 10
+ 72: ldc_w #409 // String up_string
+ 75: aastore
+ 76: dup
+ 77: bipush 11
+ 79: ldc_w #411 // String down_string
+ 82: aastore
+ 83: dup
+ 84: bipush 12
+ 86: ldc_w #413 // String arrow_bolt
+ 89: aastore
+ 90: dup
+ 91: bipush 13
+ 93: ldc_w #415 // String arrow_Improvised
+ 96: aastore
+ 97: dup
+ 98: bipush 14
+ 100: ldc_w #417 // String camera
+ 103: aastore
+ 104: dup
+ 105: bipush 15
+ 107: ldc_w #419 // String idle_view
+ 110: aastore
+ 111: astore_1
+ 112: aload_1
+ 113: astore_2
+ 114: aload_2
+ 115: arraylength
+ 116: istore_3
+ 117: iconst_0
+ 118: istore 4
+ 120: iload 4
+ 122: iload_3
+ 123: if_icmpge 153
+ 126: aload_2
+ 127: iload 4
+ 129: aaload
+ 130: astore 5
+ 132: aload_0
+ 133: aload 5
+ 135: invokevirtual #424 // Method resetBonePose:(Ljava/lang/String;)V
+ 138: aload_0
+ 139: aload 5
+ 141: fconst_1
+ 142: fconst_1
+ 143: fconst_1
+ 144: invokevirtual #428 // Method setBoneScale:(Ljava/lang/String;FFF)V
+ 147: iinc 4, 1
+ 150: goto 120
+ 153: return
+
+ private void applyCompoundBowArrowVisual(com.ogaba.sa_combat.combat.weapon.SAWeaponItem, net.minecraft.world.item.ItemStack);
+ Code:
+ 0: aload_1
+ 1: instanceof #326 // class com/ogaba/sa_combat/combat/weapon/CompoundBowItem
+ 4: ifne 8
+ 7: return
+ 8: aload_2
+ 9: invokestatic #433 // Method com/ogaba/sa_combat/combat/weapon/CompoundBowItem.isClientImprovisedBolt:(Lnet/minecraft/world/item/ItemStack;)Z
+ 12: istore_3
+ 13: aload_0
+ 14: ldc_w #413 // String arrow_bolt
+ 17: iload_3
+ 18: invokevirtual #437 // Method setBoneHidden:(Ljava/lang/String;Z)V
+ 21: aload_0
+ 22: ldc_w #415 // String arrow_Improvised
+ 25: iload_3
+ 26: ifne 33
+ 29: iconst_1
+ 30: goto 34
+ 33: iconst_0
+ 34: invokevirtual #437 // Method setBoneHidden:(Ljava/lang/String;Z)V
+ 37: return
+
+ private void applyNailGunMagazineVisual(com.ogaba.sa_combat.combat.weapon.SAWeaponItem, net.minecraft.world.item.ItemStack);
+ Code:
+ 0: aload_1
+ 1: instanceof #440 // class com/ogaba/sa_combat/combat/weapon/NailGunItem
+ 4: ifne 8
+ 7: return
+ 8: aload_2
+ 9: invokestatic #443 // Method com/ogaba/sa_combat/combat/weapon/NailGunItem.hasExtendedMag:(Lnet/minecraft/world/item/ItemStack;)Z
+ 12: istore_3
+ 13: aload_2
+ 14: invokestatic #446 // Method com/ogaba/sa_combat/combat/weapon/NailGunItem.isReloading:(Lnet/minecraft/world/item/ItemStack;)Z
+ 17: ifne 27
+ 20: aload_2
+ 21: invokestatic #449 // Method com/ogaba/sa_combat/combat/weapon/NailGunItem.isClientReloadAnimationActive:(Lnet/minecraft/world/item/ItemStack;)Z
+ 24: ifeq 31
+ 27: iconst_1
+ 28: goto 32
+ 31: iconst_0
+ 32: istore 4
+ 34: aload_0
+ 35: ldc_w #451 // String normal_mag
+ 38: iload_3
+ 39: invokevirtual #437 // Method setBoneHidden:(Ljava/lang/String;Z)V
+ 42: aload_0
+ 43: ldc_w #453 // String attach_extended_mag
+ 46: iload_3
+ 47: ifne 54
+ 50: iconst_1
+ 51: goto 55
+ 54: iconst_0
+ 55: invokevirtual #437 // Method setBoneHidden:(Ljava/lang/String;Z)V
+ 58: aload_0
+ 59: ldc_w #455 // String reload_normal_mag
+ 62: iload 4
+ 64: ifeq 71
+ 67: iload_3
+ 68: ifeq 75
+ 71: iconst_1
+ 72: goto 76
+ 75: iconst_0
+ 76: invokevirtual #437 // Method setBoneHidden:(Ljava/lang/String;Z)V
+ 79: aload_0
+ 80: ldc_w #457 // String reload_extended_mag
+ 83: iload 4
+ 85: ifeq 92
+ 88: iload_3
+ 89: ifne 96
+ 92: iconst_1
+ 93: goto 97
+ 96: iconst_0
+ 97: invokevirtual #437 // Method setBoneHidden:(Ljava/lang/String;Z)V
+ 100: return
+
+ private static boolean isShieldPath(java.lang.String);
+ Code:
+ 0: ldc_w #461 // String scrap_shield
+ 3: aload_0
+ 4: invokevirtual #133 // Method java/lang/String.equals:(Ljava/lang/Object;)Z
+ 7: ifne 50
+ 10: ldc_w #463 // String trash_lid_shield
+ 13: aload_0
+ 14: invokevirtual #133 // Method java/lang/String.equals:(Ljava/lang/Object;)Z
+ 17: ifne 50
+ 20: ldc_w #465 // String police_shield
+ 23: aload_0
+ 24: invokevirtual #133 // Method java/lang/String.equals:(Ljava/lang/Object;)Z
+ 27: ifne 50
+ 30: ldc_w #467 // String stop_sign_shield
+ 33: aload_0
+ 34: invokevirtual #133 // Method java/lang/String.equals:(Ljava/lang/Object;)Z
+ 37: ifne 50
+ 40: ldc_w #469 // String manhole_shield
+ 43: aload_0
+ 44: invokevirtual #133 // Method java/lang/String.equals:(Ljava/lang/Object;)Z
+ 47: ifeq 54
+ 50: iconst_1
+ 51: goto 55
+ 54: iconst_0
+ 55: ireturn
+
+ private boolean isCrossbow(com.ogaba.sa_combat.combat.weapon.SAWeaponItem);
+ Code:
+ 0: aload_1
+ 1: instanceof #471 // class com/ogaba/sa_combat/combat/weapon/TacticalCrossbowItem
+ 4: ireturn
+
+ private boolean isHandRender(net.minecraft.world.item.ItemDisplayContext);
+ Code:
+ 0: aload_1
+ 1: getstatic #329 // Field net/minecraft/world/item/ItemDisplayContext.FIRST_PERSON_LEFT_HAND:Lnet/minecraft/world/item/ItemDisplayContext;
+ 4: if_acmpeq 28
+ 7: aload_1
+ 8: getstatic #332 // Field net/minecraft/world/item/ItemDisplayContext.FIRST_PERSON_RIGHT_HAND:Lnet/minecraft/world/item/ItemDisplayContext;
+ 11: if_acmpeq 28
+ 14: aload_1
+ 15: getstatic #474 // Field net/minecraft/world/item/ItemDisplayContext.THIRD_PERSON_LEFT_HAND:Lnet/minecraft/world/item/ItemDisplayContext;
+ 18: if_acmpeq 28
+ 21: aload_1
+ 22: getstatic #477 // Field net/minecraft/world/item/ItemDisplayContext.THIRD_PERSON_RIGHT_HAND:Lnet/minecraft/world/item/ItemDisplayContext;
+ 25: if_acmpne 32
+ 28: iconst_1
+ 29: goto 33
+ 32: iconst_0
+ 33: ireturn
+
+ private void resetCrossbowNonHandPose();
+ Code:
+ 0: aload_0
+ 1: ldc_w #480 // String main
+ 4: invokevirtual #424 // Method resetBonePose:(Ljava/lang/String;)V
+ 7: aload_0
+ 8: ldc_w #482 // String right_string
+ 11: invokevirtual #424 // Method resetBonePose:(Ljava/lang/String;)V
+ 14: aload_0
+ 15: ldc_w #484 // String left_string
+ 18: invokevirtual #424 // Method resetBonePose:(Ljava/lang/String;)V
+ 21: aload_0
+ 22: ldc_w #486 // String left
+ 25: invokevirtual #424 // Method resetBonePose:(Ljava/lang/String;)V
+ 28: aload_0
+ 29: ldc_w #488 // String right
+ 32: invokevirtual #424 // Method resetBonePose:(Ljava/lang/String;)V
+ 35: aload_0
+ 36: ldc_w #407 // String string
+ 39: invokevirtual #424 // Method resetBonePose:(Ljava/lang/String;)V
+ 42: aload_0
+ 43: ldc_w #490 // String left_gear
+ 46: invokevirtual #424 // Method resetBonePose:(Ljava/lang/String;)V
+ 49: aload_0
+ 50: ldc_w #492 // String right_gear
+ 53: invokevirtual #424 // Method resetBonePose:(Ljava/lang/String;)V
+ 56: aload_0
+ 57: ldc_w #494 // String front_right
+ 60: invokevirtual #424 // Method resetBonePose:(Ljava/lang/String;)V
+ 63: aload_0
+ 64: ldc_w #496 // String front_left
+ 67: invokevirtual #424 // Method resetBonePose:(Ljava/lang/String;)V
+ 70: aload_0
+ 71: invokevirtual #500 // Method crossbowProjectileBones:()Ljava/util/List;
+ 74: invokeinterface #506, 1 // InterfaceMethod java/util/List.iterator:()Ljava/util/Iterator;
+ 79: astore_1
+ 80: aload_1
+ 81: invokeinterface #511, 1 // InterfaceMethod java/util/Iterator.hasNext:()Z
+ 86: ifeq 121
+ 89: aload_1
+ 90: invokeinterface #515, 1 // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
+ 95: checkcast #129 // class java/lang/String
+ 98: astore_2
+ 99: aload_0
+ 100: aload_2
+ 101: invokevirtual #424 // Method resetBonePose:(Ljava/lang/String;)V
+ 104: aload_0
+ 105: aload_2
+ 106: fconst_1
+ 107: fconst_1
+ 108: fconst_1
+ 109: invokevirtual #428 // Method setBoneScale:(Ljava/lang/String;FFF)V
+ 112: aload_0
+ 113: aload_2
+ 114: iconst_1
+ 115: invokevirtual #437 // Method setBoneHidden:(Ljava/lang/String;Z)V
+ 118: goto 80
+ 121: return
+
+ private void resetBonePose(java.lang.String);
+ Code:
+ 0: aload_0
+ 1: aload_1
+ 2: fconst_0
+ 3: fconst_0
+ 4: fconst_0
+ 5: fconst_0
+ 6: fconst_0
+ 7: fconst_0
+ 8: invokevirtual #520 // Method setBonePose:(Ljava/lang/String;FFFFFF)V
+ 11: return
+
+ private void setBonePose(java.lang.String, float, float, float, float, float, float);
+ Code:
+ 0: aload_0
+ 1: invokevirtual #336 // Method getAnimationProcessor:()Lsoftware/bernie/geckolib/core/animation/AnimationProcessor;
+ 4: aload_1
+ 5: invokevirtual #344 // Method software/bernie/geckolib/core/animation/AnimationProcessor.getBone:(Ljava/lang/String;)Lsoftware/bernie/geckolib/core/animatable/model/CoreGeoBone;
+ 8: astore 8
+ 10: aload 8
+ 12: ifnull 79
+ 15: aload 8
+ 17: aload_0
+ 18: fload_2
+ 19: invokevirtual #524 // Method degreesToRadians:(F)F
+ 22: invokeinterface #367, 2 // InterfaceMethod software/bernie/geckolib/core/animatable/model/CoreGeoBone.setRotX:(F)V
+ 27: aload 8
+ 29: aload_0
+ 30: fload_3
+ 31: invokevirtual #524 // Method degreesToRadians:(F)F
+ 34: invokeinterface #373, 2 // InterfaceMethod software/bernie/geckolib/core/animatable/model/CoreGeoBone.setRotY:(F)V
+ 39: aload 8
+ 41: aload_0
+ 42: fload 4
+ 44: invokevirtual #524 // Method degreesToRadians:(F)F
+ 47: invokeinterface #379, 2 // InterfaceMethod software/bernie/geckolib/core/animatable/model/CoreGeoBone.setRotZ:(F)V
+ 52: aload 8
+ 54: fload 5
+ 56: invokeinterface #527, 2 // InterfaceMethod software/bernie/geckolib/core/animatable/model/CoreGeoBone.setPosX:(F)V
+ 61: aload 8
+ 63: fload 6
+ 65: invokeinterface #530, 2 // InterfaceMethod software/bernie/geckolib/core/animatable/model/CoreGeoBone.setPosY:(F)V
+ 70: aload 8
+ 72: fload 7
+ 74: invokeinterface #533, 2 // InterfaceMethod software/bernie/geckolib/core/animatable/model/CoreGeoBone.setPosZ:(F)V
+ 79: return
+
+ private void setBoneScale(java.lang.String, float, float, float);
+ Code:
+ 0: aload_0
+ 1: invokevirtual #336 // Method getAnimationProcessor:()Lsoftware/bernie/geckolib/core/animation/AnimationProcessor;
+ 4: aload_1
+ 5: invokevirtual #344 // Method software/bernie/geckolib/core/animation/AnimationProcessor.getBone:(Ljava/lang/String;)Lsoftware/bernie/geckolib/core/animatable/model/CoreGeoBone;
+ 8: astore 5
+ 10: aload 5
+ 12: ifnull 40
+ 15: aload 5
+ 17: fload_2
+ 18: invokeinterface #542, 2 // InterfaceMethod software/bernie/geckolib/core/animatable/model/CoreGeoBone.setScaleX:(F)V
+ 23: aload 5
+ 25: fload_3
+ 26: invokeinterface #545, 2 // InterfaceMethod software/bernie/geckolib/core/animatable/model/CoreGeoBone.setScaleY:(F)V
+ 31: aload 5
+ 33: fload 4
+ 35: invokeinterface #548, 2 // InterfaceMethod software/bernie/geckolib/core/animatable/model/CoreGeoBone.setScaleZ:(F)V
+ 40: return
+
+ private float degreesToRadians(float);
+ Code:
+ 0: fload_1
+ 1: ldc_w #363 // float 0.017453292f
+ 4: fmul
+ 5: freturn
+
+ private void hideCrossbowProjectileVisual(com.ogaba.sa_combat.combat.weapon.SAWeaponItem);
+ Code:
+ 0: aload_0
+ 1: aload_1
+ 2: invokevirtual #286 // Method isCrossbow:(Lcom/ogaba/sa_combat/combat/weapon/SAWeaponItem;)Z
+ 5: ifne 9
+ 8: return
+ 9: aload_0
+ 10: invokevirtual #500 // Method crossbowProjectileBones:()Ljava/util/List;
+ 13: invokeinterface #506, 1 // InterfaceMethod java/util/List.iterator:()Ljava/util/Iterator;
+ 18: astore_2
+ 19: aload_2
+ 20: invokeinterface #511, 1 // InterfaceMethod java/util/Iterator.hasNext:()Z
+ 25: ifeq 47
+ 28: aload_2
+ 29: invokeinterface #515, 1 // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
+ 34: checkcast #129 // class java/lang/String
+ 37: astore_3
+ 38: aload_0
+ 39: aload_3
+ 40: iconst_1
+ 41: invokevirtual #437 // Method setBoneHidden:(Ljava/lang/String;Z)V
+ 44: goto 19
+ 47: return
+
+ private void applyCrossbowLoadedVisual(com.ogaba.sa_combat.combat.weapon.SAWeaponItem, net.minecraft.world.item.ItemStack);
+ Code:
+ 0: aload_0
+ 1: aload_1
+ 2: invokevirtual #286 // Method isCrossbow:(Lcom/ogaba/sa_combat/combat/weapon/SAWeaponItem;)Z
+ 5: ifne 9
+ 8: return
+ 9: aload_2
+ 10: invokestatic #555 // Method com/ogaba/sa_combat/combat/weapon/TacticalCrossbowItem.isLoaded:(Lnet/minecraft/world/item/ItemStack;)Z
+ 13: ifne 23
+ 16: aload_2
+ 17: invokestatic #558 // Method com/ogaba/sa_combat/combat/weapon/TacticalCrossbowItem.isLoading:(Lnet/minecraft/world/item/ItemStack;)Z
+ 20: ifeq 27
+ 23: iconst_1
+ 24: goto 28
+ 27: iconst_0
+ 28: istore_3
+ 29: iload_3
+ 30: ifne 34
+ 33: return
+ 34: aload_2
+ 35: invokestatic #561 // Method com/ogaba/sa_combat/combat/weapon/TacticalCrossbowItem.isImprovisedBoltLoaded:(Lnet/minecraft/world/item/ItemStack;)Z
+ 38: istore 4
+ 40: iload 4
+ 42: ifeq 62
+ 45: aload_0
+ 46: ldc_w #415 // String arrow_Improvised
+ 49: ldc_w #563 // String arrow_improvised
+ 52: ldc_w #565 // String improvised_arrow
+ 55: invokevirtual #569 // Method showFirstExistingBone:(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Z
+ 58: ifeq 79
+ 61: return
+ 62: aload_0
+ 63: ldc_w #413 // String arrow_bolt
+ 66: ldc_w #571 // String tactical_arrow
+ 69: ldc_w #573 // String bolt
+ 72: invokevirtual #569 // Method showFirstExistingBone:(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Z
+ 75: ifeq 79
+ 78: return
+ 79: aload_0
+ 80: ldc_w #575 // String arrow
+ 83: invokevirtual #577 // Method showFirstExistingBone:(Ljava/lang/String;)Z
+ 86: pop
+ 87: return
+
+ private java.util.List crossbowProjectileBones();
+ Code:
+ 0: getstatic #582 // Field CROSSBOW_PROJECTILE_BONES:Ljava/util/List;
+ 3: areturn
+
+ private boolean showFirstExistingBone(java.lang.String);
+ Code:
+ 0: aload_0
+ 1: aload_1
+ 2: invokevirtual #585 // Method hasBone:(Ljava/lang/String;)Z
+ 5: ifne 10
+ 8: iconst_0
+ 9: ireturn
+ 10: aload_0
+ 11: aload_1
+ 12: iconst_0
+ 13: invokevirtual #437 // Method setBoneHidden:(Ljava/lang/String;Z)V
+ 16: iconst_1
+ 17: ireturn
+
+ private boolean showFirstExistingBone(java.lang.String, java.lang.String, java.lang.String);
+ Code:
+ 0: aload_0
+ 1: aload_1
+ 2: invokevirtual #577 // Method showFirstExistingBone:(Ljava/lang/String;)Z
+ 5: ifeq 10
+ 8: iconst_1
+ 9: ireturn
+ 10: aload_0
+ 11: aload_2
+ 12: invokevirtual #577 // Method showFirstExistingBone:(Ljava/lang/String;)Z
+ 15: ifeq 20
+ 18: iconst_1
+ 19: ireturn
+ 20: aload_0
+ 21: aload_3
+ 22: invokevirtual #577 // Method showFirstExistingBone:(Ljava/lang/String;)Z
+ 25: ireturn
+
+ private void prepareDynamicBoneState(java.lang.String);
+ Code:
+ 0: aload_0
+ 1: invokevirtual #592 // Method refreshDynamicBoneCachesAfterReload:()V
+ 4: aload_0
+ 5: aload_1
+ 6: invokevirtual #596 // Method supportedAttachmentBones:(Ljava/lang/String;)Ljava/util/List;
+ 9: invokeinterface #506, 1 // InterfaceMethod java/util/List.iterator:()Ljava/util/Iterator;
+ 14: astore_2
+ 15: aload_2
+ 16: invokeinterface #511, 1 // InterfaceMethod java/util/Iterator.hasNext:()Z
+ 21: ifeq 43
+ 24: aload_2
+ 25: invokeinterface #515, 1 // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
+ 30: checkcast #129 // class java/lang/String
+ 33: astore_3
+ 34: aload_0
+ 35: aload_3
+ 36: iconst_1
+ 37: invokevirtual #437 // Method setBoneHidden:(Ljava/lang/String;Z)V
+ 40: goto 15
+ 43: aload_0
+ 44: aload_1
+ 45: invokevirtual #599 // Method supportedElectricFxBones:(Ljava/lang/String;)Ljava/util/List;
+ 48: invokeinterface #506, 1 // InterfaceMethod java/util/List.iterator:()Ljava/util/Iterator;
+ 53: astore_2
+ 54: aload_2
+ 55: invokeinterface #511, 1 // InterfaceMethod java/util/Iterator.hasNext:()Z
+ 60: ifeq 82
+ 63: aload_2
+ 64: invokeinterface #515, 1 // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
+ 69: checkcast #129 // class java/lang/String
+ 72: astore_3
+ 73: aload_0
+ 74: aload_3
+ 75: iconst_1
+ 76: invokevirtual #437 // Method setBoneHidden:(Ljava/lang/String;Z)V
+ 79: goto 54
+ 82: return
+
+ private void refreshDynamicBoneCachesAfterReload();
+ Code:
+ 0: getstatic #58 // Field dynamicBoneCacheGeneration:I
+ 3: istore_1
+ 4: aload_0
+ 5: getfield #60 // Field observedDynamicBoneCacheGeneration:I
+ 8: iload_1
+ 9: if_icmpne 13
+ 12: return
+ 13: aload_0
+ 14: getfield #65 // Field supportedAttachmentBonesByModel:Ljava/util/Map;
+ 17: invokeinterface #602, 1 // InterfaceMethod java/util/Map.clear:()V
+ 22: aload_0
+ 23: getfield #67 // Field supportedElectricFxBonesByModel:Ljava/util/Map;
+ 26: invokeinterface #602, 1 // InterfaceMethod java/util/Map.clear:()V
+ 31: aload_0
+ 32: iload_1
+ 33: putfield #60 // Field observedDynamicBoneCacheGeneration:I
+ 36: return
+
+ private java.util.List supportedAttachmentBones(java.lang.String);
+ Code:
+ 0: aload_0
+ 1: getfield #65 // Field supportedAttachmentBonesByModel:Ljava/util/Map;
+ 4: aload_1
+ 5: aload_0
+ 6: invokedynamic #612, 0 // InvokeDynamic #6:apply:(Lcom/ogaba/sa_combat/client/model/SAWeaponGeoModel;)Ljava/util/function/Function;
+ 11: invokeinterface #118, 3 // InterfaceMethod java/util/Map.computeIfAbsent:(Ljava/lang/Object;Ljava/util/function/Function;)Ljava/lang/Object;
+ 16: checkcast #502 // class java/util/List
+ 19: areturn
+
+ private java.util.List supportedElectricFxBones(java.lang.String);
+ Code:
+ 0: aload_0
+ 1: getfield #67 // Field supportedElectricFxBonesByModel:Ljava/util/Map;
+ 4: aload_1
+ 5: aload_0
+ 6: invokedynamic #617, 0 // InvokeDynamic #7:apply:(Lcom/ogaba/sa_combat/client/model/SAWeaponGeoModel;)Ljava/util/function/Function;
+ 11: invokeinterface #118, 3 // InterfaceMethod java/util/Map.computeIfAbsent:(Ljava/lang/Object;Ljava/util/function/Function;)Ljava/lang/Object;
+ 16: checkcast #502 // class java/util/List
+ 19: areturn
+
+ private void applyAttachmentVisual(com.ogaba.sa_combat.combat.attachment.AttachmentSlot, com.ogaba.sa_combat.combat.attachment.WeaponAttachment);
+ Code:
+ 0: aload_2
+ 1: ifnull 21
+ 4: aload_2
+ 5: invokevirtual #623 // Method com/ogaba/sa_combat/combat/attachment/WeaponAttachment.visualBoneName:()Ljava/lang/String;
+ 8: ifnull 21
+ 11: aload_2
+ 12: invokevirtual #623 // Method com/ogaba/sa_combat/combat/attachment/WeaponAttachment.visualBoneName:()Ljava/lang/String;
+ 15: invokevirtual #626 // Method java/lang/String.isBlank:()Z
+ 18: ifeq 22
+ 21: return
+ 22: aload_0
+ 23: aload_2
+ 24: invokevirtual #630 // Method resolveAttachmentBone:(Lcom/ogaba/sa_combat/combat/attachment/WeaponAttachment;)Ljava/lang/String;
+ 27: astore_3
+ 28: aload_0
+ 29: aload_3
+ 30: iconst_0
+ 31: invokevirtual #437 // Method setBoneHidden:(Ljava/lang/String;Z)V
+ 34: ldc_w #632 // String attach_core_electric
+ 37: aload_3
+ 38: invokevirtual #133 // Method java/lang/String.equals:(Ljava/lang/Object;)Z
+ 41: ifne 60
+ 44: ldc_w #634 // String electric_kit
+ 47: aload_2
+ 48: invokevirtual #638 // Method com/ogaba/sa_combat/combat/attachment/WeaponAttachment.id:()Lnet/minecraft/resources/ResourceLocation;
+ 51: invokevirtual #641 // Method net/minecraft/resources/ResourceLocation.m_135815_:()Ljava/lang/String;
+ 54: invokevirtual #133 // Method java/lang/String.equals:(Ljava/lang/Object;)Z
+ 57: ifeq 65
+ 60: aload_0
+ 61: iconst_1
+ 62: putfield #299 // Field electricAttachmentInstalled:Z
+ 65: return
+
+ private java.lang.String resolveAttachmentBone(com.ogaba.sa_combat.combat.attachment.WeaponAttachment);
+ Code:
+ 0: aload_0
+ 1: aload_1
+ 2: invokevirtual #649 // Method attachmentBoneCandidates:(Lcom/ogaba/sa_combat/combat/attachment/WeaponAttachment;)Ljava/util/List;
+ 5: invokeinterface #506, 1 // InterfaceMethod java/util/List.iterator:()Ljava/util/Iterator;
+ 10: astore_2
+ 11: aload_2
+ 12: invokeinterface #511, 1 // InterfaceMethod java/util/Iterator.hasNext:()Z
+ 17: ifeq 43
+ 20: aload_2
+ 21: invokeinterface #515, 1 // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
+ 26: checkcast #129 // class java/lang/String
+ 29: astore_3
+ 30: aload_0
+ 31: aload_3
+ 32: invokevirtual #585 // Method hasBone:(Ljava/lang/String;)Z
+ 35: ifeq 40
+ 38: aload_3
+ 39: areturn
+ 40: goto 11
+ 43: aload_1
+ 44: invokevirtual #623 // Method com/ogaba/sa_combat/combat/attachment/WeaponAttachment.visualBoneName:()Ljava/lang/String;
+ 47: areturn
+
+ private java.util.List attachmentBoneCandidates(com.ogaba.sa_combat.combat.attachment.WeaponAttachment);
+ Code:
+ 0: getstatic #652 // Field ATTACHMENT_BONE_CANDIDATES_CACHE:Ljava/util/Map;
+ 3: aload_1
+ 4: invokevirtual #638 // Method com/ogaba/sa_combat/combat/attachment/WeaponAttachment.id:()Lnet/minecraft/resources/ResourceLocation;
+ 7: invokeinterface #138, 2 // InterfaceMethod java/util/Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
+ 12: checkcast #502 // class java/util/List
+ 15: astore_2
+ 16: aload_2
+ 17: ifnull 22
+ 20: aload_2
+ 21: areturn
+ 22: aload_0
+ 23: aload_1
+ 24: invokevirtual #655 // Method computeAttachmentBoneCandidates:(Lcom/ogaba/sa_combat/combat/attachment/WeaponAttachment;)Ljava/util/List;
+ 27: astore_3
+ 28: getstatic #652 // Field ATTACHMENT_BONE_CANDIDATES_CACHE:Ljava/util/Map;
+ 31: aload_1
+ 32: invokevirtual #638 // Method com/ogaba/sa_combat/combat/attachment/WeaponAttachment.id:()Lnet/minecraft/resources/ResourceLocation;
+ 35: aload_3
+ 36: invokeinterface #154, 3 // InterfaceMethod java/util/Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+ 41: pop
+ 42: aload_3
+ 43: areturn
+
+ private java.util.List computeAttachmentBoneCandidates(com.ogaba.sa_combat.combat.attachment.WeaponAttachment);
+ Code:
+ 0: aload_1
+ 1: invokevirtual #623 // Method com/ogaba/sa_combat/combat/attachment/WeaponAttachment.visualBoneName:()Ljava/lang/String;
+ 4: astore_2
+ 5: aload_1
+ 6: invokevirtual #638 // Method com/ogaba/sa_combat/combat/attachment/WeaponAttachment.id:()Lnet/minecraft/resources/ResourceLocation;
+ 9: invokevirtual #641 // Method net/minecraft/resources/ResourceLocation.m_135815_:()Ljava/lang/String;
+ 12: astore_3
+ 13: aload_3
+ 14: invokedynamic #659, 0 // InvokeDynamic #8:makeConcatWithConstants:(Ljava/lang/String;)Ljava/lang/String;
+ 19: astore 4
+ 21: ldc_w #661 // String spyglass
+ 24: aload_3
+ 25: invokevirtual #133 // Method java/lang/String.equals:(Ljava/lang/Object;)Z
+ 28: ifeq 80
+ 31: iconst_4
+ 32: anewarray #129 // class java/lang/String
+ 35: dup
+ 36: iconst_0
+ 37: aload_2
+ 38: aastore
+ 39: dup
+ 40: iconst_1
+ 41: ldc_w #663 // String attach_sight
+ 44: aastore
+ 45: dup
+ 46: iconst_2
+ 47: aload 4
+ 49: aastore
+ 50: dup
+ 51: iconst_3
+ 52: ldc_w #661 // String spyglass
+ 55: aastore
+ 56: invokestatic #669 // InterfaceMethod java/util/stream/Stream.of:([Ljava/lang/Object;)Ljava/util/stream/Stream;
+ 59: invokedynamic #679, 0 // InvokeDynamic #9:test:()Ljava/util/function/Predicate;
+ 64: invokeinterface #683, 2 // InterfaceMethod java/util/stream/Stream.filter:(Ljava/util/function/Predicate;)Ljava/util/stream/Stream;
+ 69: invokeinterface #687, 1 // InterfaceMethod java/util/stream/Stream.distinct:()Ljava/util/stream/Stream;
+ 74: invokeinterface #690, 1 // InterfaceMethod java/util/stream/Stream.toList:()Ljava/util/List;
+ 79: areturn
+ 80: ldc_w #692 // String spiked
+ 83: aload_3
+ 84: invokevirtual #133 // Method java/lang/String.equals:(Ljava/lang/Object;)Z
+ 87: ifeq 139
+ 90: iconst_4
+ 91: anewarray #129 // class java/lang/String
+ 94: dup
+ 95: iconst_0
+ 96: aload_2
+ 97: aastore
+ 98: dup
+ 99: iconst_1
+ 100: ldc_w #694 // String attach_spike
+ 103: aastore
+ 104: dup
+ 105: iconst_2
+ 106: aload 4
+ 108: aastore
+ 109: dup
+ 110: iconst_3
+ 111: ldc_w #692 // String spiked
+ 114: aastore
+ 115: invokestatic #669 // InterfaceMethod java/util/stream/Stream.of:([Ljava/lang/Object;)Ljava/util/stream/Stream;
+ 118: invokedynamic #699, 0 // InvokeDynamic #10:test:()Ljava/util/function/Predicate;
+ 123: invokeinterface #683, 2 // InterfaceMethod java/util/stream/Stream.filter:(Ljava/util/function/Predicate;)Ljava/util/stream/Stream;
+ 128: invokeinterface #687, 1 // InterfaceMethod java/util/stream/Stream.distinct:()Ljava/util/stream/Stream;
+ 133: invokeinterface #690, 1 // InterfaceMethod java/util/stream/Stream.toList:()Ljava/util/List;
+ 138: areturn
+ 139: iconst_2
+ 140: anewarray #129 // class java/lang/String
+ 143: dup
+ 144: iconst_0
+ 145: aload_2
+ 146: aastore
+ 147: dup
+ 148: iconst_1
+ 149: aload 4
+ 151: aastore
+ 152: invokestatic #669 // InterfaceMethod java/util/stream/Stream.of:([Ljava/lang/Object;)Ljava/util/stream/Stream;
+ 155: invokedynamic #704, 0 // InvokeDynamic #11:test:()Ljava/util/function/Predicate;
+ 160: invokeinterface #683, 2 // InterfaceMethod java/util/stream/Stream.filter:(Ljava/util/function/Predicate;)Ljava/util/stream/Stream;
+ 165: invokeinterface #687, 1 // InterfaceMethod java/util/stream/Stream.distinct:()Ljava/util/stream/Stream;
+ 170: invokeinterface #690, 1 // InterfaceMethod java/util/stream/Stream.toList:()Ljava/util/List;
+ 175: areturn
+
+ private void showElectricFxFrame(java.lang.String);
+ Code:
+ 0: aload_0
+ 1: aload_1
+ 2: invokevirtual #599 // Method supportedElectricFxBones:(Ljava/lang/String;)Ljava/util/List;
+ 5: astore_2
+ 6: aload_2
+ 7: invokeinterface #709, 1 // InterfaceMethod java/util/List.isEmpty:()Z
+ 12: ifeq 16
+ 15: return
+ 16: invokestatic #715 // Method net/minecraft/client/Minecraft.m_91087_:()Lnet/minecraft/client/Minecraft;
+ 19: getfield #719 // Field net/minecraft/client/Minecraft.f_91073_:Lnet/minecraft/client/multiplayer/ClientLevel;
+ 22: ifnull 37
+ 25: invokestatic #715 // Method net/minecraft/client/Minecraft.m_91087_:()Lnet/minecraft/client/Minecraft;
+ 28: getfield #719 // Field net/minecraft/client/Minecraft.f_91073_:Lnet/minecraft/client/multiplayer/ClientLevel;
+ 31: invokevirtual #725 // Method net/minecraft/client/multiplayer/ClientLevel.m_46467_:()J
+ 34: goto 44
+ 37: invokestatic #730 // Method net/minecraft/Util.m_137550_:()J
+ 40: ldc2_w #731 // long 50l
+ 43: ldiv
+ 44: lstore_3
+ 45: lload_3
+ 46: ldc2_w #733 // long 3l
+ 49: ldiv
+ 50: aload_2
+ 51: invokeinterface #737, 1 // InterfaceMethod java/util/List.size:()I
+ 56: i2l
+ 57: lrem
+ 58: l2i
+ 59: istore 5
+ 61: aload_0
+ 62: aload_2
+ 63: iload 5
+ 65: invokeinterface #740, 2 // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
+ 70: checkcast #129 // class java/lang/String
+ 73: iconst_0
+ 74: invokevirtual #437 // Method setBoneHidden:(Ljava/lang/String;Z)V
+ 77: return
+
+ private int chainsawTextureFrame();
+ Code:
+ 0: invokestatic #715 // Method net/minecraft/client/Minecraft.m_91087_:()Lnet/minecraft/client/Minecraft;
+ 3: getfield #719 // Field net/minecraft/client/Minecraft.f_91073_:Lnet/minecraft/client/multiplayer/ClientLevel;
+ 6: ifnull 21
+ 9: invokestatic #715 // Method net/minecraft/client/Minecraft.m_91087_:()Lnet/minecraft/client/Minecraft;
+ 12: getfield #719 // Field net/minecraft/client/Minecraft.f_91073_:Lnet/minecraft/client/multiplayer/ClientLevel;
+ 15: invokevirtual #725 // Method net/minecraft/client/multiplayer/ClientLevel.m_46467_:()J
+ 18: goto 28
+ 21: invokestatic #730 // Method net/minecraft/Util.m_137550_:()J
+ 24: ldc2_w #731 // long 50l
+ 27: ldiv
+ 28: lstore_1
+ 29: lload_1
+ 30: ldc2_w #744 // long 2l
+ 33: ldiv
+ 34: lconst_1
+ 35: land
+ 36: l2i
+ 37: ireturn
+
+ private boolean hasBone(java.lang.String);
+ Code:
+ 0: aload_0
+ 1: invokevirtual #336 // Method getAnimationProcessor:()Lsoftware/bernie/geckolib/core/animation/AnimationProcessor;
+ 4: aload_1
+ 5: invokevirtual #344 // Method software/bernie/geckolib/core/animation/AnimationProcessor.getBone:(Ljava/lang/String;)Lsoftware/bernie/geckolib/core/animatable/model/CoreGeoBone;
+ 8: ifnull 15
+ 11: iconst_1
+ 12: goto 16
+ 15: iconst_0
+ 16: ireturn
+
+ private void setBoneHidden(java.lang.String, boolean);
+ Code:
+ 0: aload_0
+ 1: invokevirtual #336 // Method getAnimationProcessor:()Lsoftware/bernie/geckolib/core/animation/AnimationProcessor;
+ 4: aload_1
+ 5: invokevirtual #344 // Method software/bernie/geckolib/core/animation/AnimationProcessor.getBone:(Ljava/lang/String;)Lsoftware/bernie/geckolib/core/animatable/model/CoreGeoBone;
+ 8: astore_3
+ 9: aload_3
+ 10: ifnull 20
+ 13: aload_3
+ 14: iload_2
+ 15: invokeinterface #749, 2 // InterfaceMethod software/bernie/geckolib/core/animatable/model/CoreGeoBone.setHidden:(Z)V
+ 20: return
+
+ private static net.minecraft.resources.ResourceLocation firstExisting(java.lang.String, java.lang.String...);
+ Code:
+ 0: new #120 // class net/minecraft/resources/ResourceLocation
+ 3: dup
+ 4: ldc_w #752 // String sa_combat
+ 7: aload_0
+ 8: invokespecial #755 // Method net/minecraft/resources/ResourceLocation."":(Ljava/lang/String;Ljava/lang/String;)V
+ 11: astore_2
+ 12: aload_2
+ 13: invokestatic #759 // Method textureExists:(Lnet/minecraft/resources/ResourceLocation;)Z
+ 16: ifeq 21
+ 19: aload_2
+ 20: areturn
+ 21: aload_1
+ 22: astore_3
+ 23: aload_3
+ 24: arraylength
+ 25: istore 4
+ 27: iconst_0
+ 28: istore 5
+ 30: iload 5
+ 32: iload 4
+ 34: if_icmpge 74
+ 37: aload_3
+ 38: iload 5
+ 40: aaload
+ 41: astore 6
+ 43: new #120 // class net/minecraft/resources/ResourceLocation
+ 46: dup
+ 47: ldc_w #752 // String sa_combat
+ 50: aload 6
+ 52: invokespecial #755 // Method net/minecraft/resources/ResourceLocation."":(Ljava/lang/String;Ljava/lang/String;)V
+ 55: astore 7
+ 57: aload 7
+ 59: invokestatic #759 // Method textureExists:(Lnet/minecraft/resources/ResourceLocation;)Z
+ 62: ifeq 68
+ 65: aload 7
+ 67: areturn
+ 68: iinc 5, 1
+ 71: goto 30
+ 74: aload_2
+ 75: areturn
+
+ private static boolean textureExists(net.minecraft.resources.ResourceLocation);
+ Code:
+ 0: aload_0
+ 1: invokestatic #765 // Method resourceExists:(Lnet/minecraft/resources/ResourceLocation;)Z
+ 4: ireturn
+
+ private static boolean resourceExists(net.minecraft.resources.ResourceLocation);
+ Code:
+ 0: getstatic #770 // Field RESOURCE_EXISTS_CACHE:Ljava/util/Map;
+ 3: aload_0
+ 4: invokeinterface #138, 2 // InterfaceMethod java/util/Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
+ 9: checkcast #772 // class java/lang/Boolean
+ 12: astore_1
+ 13: aload_1
+ 14: ifnull 22
+ 17: aload_1
+ 18: invokevirtual #775 // Method java/lang/Boolean.booleanValue:()Z
+ 21: ireturn
+ 22: invokestatic #715 // Method net/minecraft/client/Minecraft.m_91087_:()Lnet/minecraft/client/Minecraft;
+ 25: invokevirtual #779 // Method net/minecraft/client/Minecraft.m_91098_:()Lnet/minecraft/server/packs/resources/ResourceManager;
+ 28: aload_0
+ 29: invokeinterface #785, 2 // InterfaceMethod net/minecraft/server/packs/resources/ResourceManager.m_213713_:(Lnet/minecraft/resources/ResourceLocation;)Ljava/util/Optional;
+ 34: invokevirtual #790 // Method java/util/Optional.isPresent:()Z
+ 37: istore_2
+ 38: goto 44
+ 41: astore_3
+ 42: iconst_0
+ 43: istore_2
+ 44: getstatic #770 // Field RESOURCE_EXISTS_CACHE:Ljava/util/Map;
+ 47: aload_0
+ 48: iload_2
+ 49: invokestatic #794 // Method java/lang/Boolean.valueOf:(Z)Ljava/lang/Boolean;
+ 52: invokeinterface #154, 3 // InterfaceMethod java/util/Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+ 57: pop
+ 58: iload_2
+ 59: ireturn
+ Exception table:
+ from to target type
+ 22 38 41 Class java/lang/Exception
+
+ public static void clearResourceExistenceCache();
+ Code:
+ 0: getstatic #770 // Field RESOURCE_EXISTS_CACHE:Ljava/util/Map;
+ 3: invokeinterface #602, 1 // InterfaceMethod java/util/Map.clear:()V
+ 8: getstatic #135 // Field TEXTURE_RESOURCE_CACHE:Ljava/util/Map;
+ 11: invokeinterface #602, 1 // InterfaceMethod java/util/Map.clear:()V
+ 16: getstatic #242 // Field ANIMATION_RESOURCE_CACHE:Ljava/util/Map;
+ 19: invokeinterface #602, 1 // InterfaceMethod java/util/Map.clear:()V
+ 24: getstatic #652 // Field ATTACHMENT_BONE_CANDIDATES_CACHE:Ljava/util/Map;
+ 27: invokeinterface #602, 1 // InterfaceMethod java/util/Map.clear:()V
+ 32: getstatic #58 // Field dynamicBoneCacheGeneration:I
+ 35: iconst_1
+ 36: iadd
+ 37: putstatic #58 // Field dynamicBoneCacheGeneration:I
+ 40: return
+
+ private static java.lang.String itemPath(com.ogaba.sa_combat.combat.weapon.SAWeaponItem);
+ Code:
+ 0: getstatic #802 // Field ITEM_PATH_CACHE:Ljava/util/Map;
+ 3: aload_0
+ 4: invokedynamic #808, 0 // InvokeDynamic #12:apply:()Ljava/util/function/Function;
+ 9: invokeinterface #118, 3 // InterfaceMethod java/util/Map.computeIfAbsent:(Ljava/lang/Object;Ljava/util/function/Function;)Ljava/lang/Object;
+ 14: checkcast #129 // class java/lang/String
+ 17: areturn
+
+ public net.minecraft.resources.ResourceLocation getAnimationResource(software.bernie.geckolib.core.animatable.GeoAnimatable);
+ Code:
+ 0: aload_0
+ 1: aload_1
+ 2: checkcast #182 // class com/ogaba/sa_combat/combat/weapon/SAWeaponItem
+ 5: invokevirtual #812 // Method getAnimationResource:(Lcom/ogaba/sa_combat/combat/weapon/SAWeaponItem;)Lnet/minecraft/resources/ResourceLocation;
+ 8: areturn
+
+ public net.minecraft.resources.ResourceLocation getTextureResource(software.bernie.geckolib.core.animatable.GeoAnimatable);
+ Code:
+ 0: aload_0
+ 1: aload_1
+ 2: checkcast #182 // class com/ogaba/sa_combat/combat/weapon/SAWeaponItem
+ 5: invokevirtual #814 // Method getTextureResource:(Lcom/ogaba/sa_combat/combat/weapon/SAWeaponItem;)Lnet/minecraft/resources/ResourceLocation;
+ 8: areturn
+
+ public net.minecraft.resources.ResourceLocation getModelResource(software.bernie.geckolib.core.animatable.GeoAnimatable);
+ Code:
+ 0: aload_0
+ 1: aload_1
+ 2: checkcast #182 // class com/ogaba/sa_combat/combat/weapon/SAWeaponItem
+ 5: invokevirtual #816 // Method getModelResource:(Lcom/ogaba/sa_combat/combat/weapon/SAWeaponItem;)Lnet/minecraft/resources/ResourceLocation;
+ 8: areturn
+
+ public void setCustomAnimations(software.bernie.geckolib.core.animatable.GeoAnimatable, long, software.bernie.geckolib.core.animation.AnimationState);
+ Code:
+ 0: aload_0
+ 1: aload_1
+ 2: checkcast #182 // class com/ogaba/sa_combat/combat/weapon/SAWeaponItem
+ 5: lload_2
+ 6: aload 4
+ 8: invokevirtual #818 // Method setCustomAnimations:(Lcom/ogaba/sa_combat/combat/weapon/SAWeaponItem;JLsoftware/bernie/geckolib/core/animation/AnimationState;)V
+ 11: return
+
+ private static java.lang.String lambda$itemPath$7(com.ogaba.sa_combat.combat.weapon.SAWeaponItem);
+ Code:
+ 0: getstatic #824 // Field net/minecraft/core/registries/BuiltInRegistries.f_257033_:Lnet/minecraft/core/DefaultedRegistry;
+ 3: aload_0
+ 4: invokeinterface #830, 2 // InterfaceMethod net/minecraft/core/DefaultedRegistry.m_7981_:(Ljava/lang/Object;)Lnet/minecraft/resources/ResourceLocation;
+ 9: astore_1
+ 10: aload_1
+ 11: ifnonnull 19
+ 14: ldc #127 // String baseball_bat
+ 16: goto 23
+ 19: aload_1
+ 20: invokevirtual #641 // Method net/minecraft/resources/ResourceLocation.m_135815_:()Ljava/lang/String;
+ 23: areturn
+
+ private static boolean lambda$computeAttachmentBoneCandidates$6(java.lang.String);
+ Code:
+ 0: aload_0
+ 1: ifnull 15
+ 4: aload_0
+ 5: invokevirtual #626 // Method java/lang/String.isBlank:()Z
+ 8: ifne 15
+ 11: iconst_1
+ 12: goto 16
+ 15: iconst_0
+ 16: ireturn
+
+ private static boolean lambda$computeAttachmentBoneCandidates$5(java.lang.String);
+ Code:
+ 0: aload_0
+ 1: ifnull 15
+ 4: aload_0
+ 5: invokevirtual #626 // Method java/lang/String.isBlank:()Z
+ 8: ifne 15
+ 11: iconst_1
+ 12: goto 16
+ 15: iconst_0
+ 16: ireturn
+
+ private static boolean lambda$computeAttachmentBoneCandidates$4(java.lang.String);
+ Code:
+ 0: aload_0
+ 1: ifnull 15
+ 4: aload_0
+ 5: invokevirtual #626 // Method java/lang/String.isBlank:()Z
+ 8: ifne 15
+ 11: iconst_1
+ 12: goto 16
+ 15: iconst_0
+ 16: ireturn
+
+ private java.util.List lambda$supportedElectricFxBones$3(java.lang.String);
+ Code:
+ 0: new #835 // class java/util/ArrayList
+ 3: dup
+ 4: getstatic #837 // Field ELECTRIC_FX_BONES:Ljava/util/List;
+ 7: invokeinterface #737, 1 // InterfaceMethod java/util/List.size:()I
+ 12: invokespecial #840 // Method java/util/ArrayList."":(I)V
+ 15: astore_2
+ 16: getstatic #837 // Field ELECTRIC_FX_BONES:Ljava/util/List;
+ 19: invokeinterface #506, 1 // InterfaceMethod java/util/List.iterator:()Ljava/util/Iterator;
+ 24: astore_3
+ 25: aload_3
+ 26: invokeinterface #511, 1 // InterfaceMethod java/util/Iterator.hasNext:()Z
+ 31: ifeq 66
+ 34: aload_3
+ 35: invokeinterface #515, 1 // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
+ 40: checkcast #129 // class java/lang/String
+ 43: astore 4
+ 45: aload_0
+ 46: aload 4
+ 48: invokevirtual #585 // Method hasBone:(Ljava/lang/String;)Z
+ 51: ifeq 63
+ 54: aload_2
+ 55: aload 4
+ 57: invokeinterface #843, 2 // InterfaceMethod java/util/List.add:(Ljava/lang/Object;)Z
+ 62: pop
+ 63: goto 25
+ 66: aload_2
+ 67: invokestatic #847 // InterfaceMethod java/util/List.copyOf:(Ljava/util/Collection;)Ljava/util/List;
+ 70: areturn
+
+ private java.util.List lambda$supportedAttachmentBones$2(java.lang.String);
+ Code:
+ 0: new #850 // class java/util/LinkedHashSet
+ 3: dup
+ 4: invokespecial #851 // Method java/util/LinkedHashSet."":()V
+ 7: astore_2
+ 8: invokestatic #857 // Method com/ogaba/sa_combat/combat/attachment/WeaponAttachmentRegistry.values:()Ljava/util/Collection;
+ 11: invokeinterface #860, 1 // InterfaceMethod java/util/Collection.iterator:()Ljava/util/Iterator;
+ 16: astore_3
+ 17: aload_3
+ 18: invokeinterface #511, 1 // InterfaceMethod java/util/Iterator.hasNext:()Z
+ 23: ifeq 104
+ 26: aload_3
+ 27: invokeinterface #515, 1 // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
+ 32: checkcast #619 // class com/ogaba/sa_combat/combat/attachment/WeaponAttachment
+ 35: astore 4
+ 37: aload 4
+ 39: ifnonnull 45
+ 42: goto 17
+ 45: aload_0
+ 46: aload 4
+ 48: invokevirtual #649 // Method attachmentBoneCandidates:(Lcom/ogaba/sa_combat/combat/attachment/WeaponAttachment;)Ljava/util/List;
+ 51: invokeinterface #506, 1 // InterfaceMethod java/util/List.iterator:()Ljava/util/Iterator;
+ 56: astore 5
+ 58: aload 5
+ 60: invokeinterface #511, 1 // InterfaceMethod java/util/Iterator.hasNext:()Z
+ 65: ifeq 101
+ 68: aload 5
+ 70: invokeinterface #515, 1 // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
+ 75: checkcast #129 // class java/lang/String
+ 78: astore 6
+ 80: aload_0
+ 81: aload 6
+ 83: invokevirtual #585 // Method hasBone:(Ljava/lang/String;)Z
+ 86: ifeq 98
+ 89: aload_2
+ 90: aload 6
+ 92: invokeinterface #863, 2 // InterfaceMethod java/util/Set.add:(Ljava/lang/Object;)Z
+ 97: pop
+ 98: goto 58
+ 101: goto 17
+ 104: aload_2
+ 105: invokestatic #847 // InterfaceMethod java/util/List.copyOf:(Ljava/util/Collection;)Ljava/util/List;
+ 108: areturn
+
+ private static net.minecraft.resources.ResourceLocation lambda$getAnimationResource$1(java.lang.String);
+ Code:
+ 0: new #120 // class net/minecraft/resources/ResourceLocation
+ 3: dup
+ 4: ldc_w #752 // String sa_combat
+ 7: aload_0
+ 8: invokedynamic #868, 0 // InvokeDynamic #13:makeConcatWithConstants:(Ljava/lang/String;)Ljava/lang/String;
+ 13: invokespecial #755 // Method net/minecraft/resources/ResourceLocation."":(Ljava/lang/String;Ljava/lang/String;)V
+ 16: astore_1
+ 17: aload_1
+ 18: invokestatic #765 // Method resourceExists:(Lnet/minecraft/resources/ResourceLocation;)Z
+ 21: ifeq 26
+ 24: aload_1
+ 25: areturn
+ 26: aload_0
+ 27: invokestatic #216 // Method isShieldPath:(Ljava/lang/String;)Z
+ 30: ifeq 56
+ 33: new #120 // class net/minecraft/resources/ResourceLocation
+ 36: dup
+ 37: ldc_w #752 // String sa_combat
+ 40: ldc_w #870 // String animations/item/shield.animation.json
+ 43: invokespecial #755 // Method net/minecraft/resources/ResourceLocation."":(Ljava/lang/String;Ljava/lang/String;)V
+ 46: astore_2
+ 47: aload_2
+ 48: invokestatic #765 // Method resourceExists:(Lnet/minecraft/resources/ResourceLocation;)Z
+ 51: ifeq 56
+ 54: aload_2
+ 55: areturn
+ 56: new #120 // class net/minecraft/resources/ResourceLocation
+ 59: dup
+ 60: ldc_w #752 // String sa_combat
+ 63: ldc_w #872 // String animations/item/empty.animation.json
+ 66: invokespecial #755 // Method net/minecraft/resources/ResourceLocation."":(Ljava/lang/String;Ljava/lang/String;)V
+ 69: areturn
+
+ private static net.minecraft.resources.ResourceLocation lambda$getModelResource$0(java.lang.String);
+ Code:
+ 0: new #120 // class net/minecraft/resources/ResourceLocation
+ 3: dup
+ 4: ldc_w #752 // String sa_combat
+ 7: aload_0
+ 8: invokedynamic #877, 0 // InvokeDynamic #14:makeConcatWithConstants:(Ljava/lang/String;)Ljava/lang/String;
+ 13: invokespecial #755 // Method net/minecraft/resources/ResourceLocation."":(Ljava/lang/String;Ljava/lang/String;)V
+ 16: areturn
+
+ static {};
+ Code:
+ 0: new #880 // class java/util/concurrent/ConcurrentHashMap
+ 3: dup
+ 4: invokespecial #881 // Method java/util/concurrent/ConcurrentHashMap."":()V
+ 7: putstatic #770 // Field RESOURCE_EXISTS_CACHE:Ljava/util/Map;
+ 10: new #880 // class java/util/concurrent/ConcurrentHashMap
+ 13: dup
+ 14: invokespecial #881 // Method java/util/concurrent/ConcurrentHashMap."":()V
+ 17: putstatic #652 // Field ATTACHMENT_BONE_CANDIDATES_CACHE:Ljava/util/Map;
+ 20: new #880 // class java/util/concurrent/ConcurrentHashMap
+ 23: dup
+ 24: invokespecial #881 // Method java/util/concurrent/ConcurrentHashMap."":()V
+ 27: putstatic #802 // Field ITEM_PATH_CACHE:Ljava/util/Map;
+ 30: new #880 // class java/util/concurrent/ConcurrentHashMap
+ 33: dup
+ 34: invokespecial #881 // Method java/util/concurrent/ConcurrentHashMap."":()V
+ 37: putstatic #100 // Field MODEL_RESOURCE_CACHE:Ljava/util/Map;
+ 40: new #880 // class java/util/concurrent/ConcurrentHashMap
+ 43: dup
+ 44: invokespecial #881 // Method java/util/concurrent/ConcurrentHashMap."":()V
+ 47: putstatic #135 // Field TEXTURE_RESOURCE_CACHE:Ljava/util/Map;
+ 50: new #880 // class java/util/concurrent/ConcurrentHashMap
+ 53: dup
+ 54: invokespecial #881 // Method java/util/concurrent/ConcurrentHashMap."":()V
+ 57: putstatic #242 // Field ANIMATION_RESOURCE_CACHE:Ljava/util/Map;
+ 60: bipush 16
+ 62: anewarray #129 // class java/lang/String
+ 65: dup
+ 66: iconst_0
+ 67: ldc_w #883 // String attach_core_electric_fx_0
+ 70: aastore
+ 71: dup
+ 72: iconst_1
+ 73: ldc_w #885 // String attach_core_electric_fx_1
+ 76: aastore
+ 77: dup
+ 78: iconst_2
+ 79: ldc_w #887 // String attach_core_electric_fx_2
+ 82: aastore
+ 83: dup
+ 84: iconst_3
+ 85: ldc_w #889 // String attach_core_electric_fx_3
+ 88: aastore
+ 89: dup
+ 90: iconst_4
+ 91: ldc_w #891 // String attach_core_electric_fx_4
+ 94: aastore
+ 95: dup
+ 96: iconst_5
+ 97: ldc_w #893 // String attach_core_electric_fx_5
+ 100: aastore
+ 101: dup
+ 102: bipush 6
+ 104: ldc_w #895 // String attach_core_electric_fx_6
+ 107: aastore
+ 108: dup
+ 109: bipush 7
+ 111: ldc_w #897 // String attach_core_electric_fx_7
+ 114: aastore
+ 115: dup
+ 116: bipush 8
+ 118: ldc_w #899 // String electric_fx_0
+ 121: aastore
+ 122: dup
+ 123: bipush 9
+ 125: ldc_w #901 // String electric_fx_1
+ 128: aastore
+ 129: dup
+ 130: bipush 10
+ 132: ldc_w #903 // String electric_fx_2
+ 135: aastore
+ 136: dup
+ 137: bipush 11
+ 139: ldc_w #905 // String electric_fx_3
+ 142: aastore
+ 143: dup
+ 144: bipush 12
+ 146: ldc_w #907 // String electric_fx_4
+ 149: aastore
+ 150: dup
+ 151: bipush 13
+ 153: ldc_w #909 // String electric_fx_5
+ 156: aastore
+ 157: dup
+ 158: bipush 14
+ 160: ldc_w #911 // String electric_fx_6
+ 163: aastore
+ 164: dup
+ 165: bipush 15
+ 167: ldc_w #913 // String electric_fx_7
+ 170: aastore
+ 171: invokestatic #916 // InterfaceMethod java/util/List.of:([Ljava/lang/Object;)Ljava/util/List;
+ 174: putstatic #837 // Field ELECTRIC_FX_BONES:Ljava/util/List;
+ 177: ldc_w #575 // String arrow
+ 180: ldc_w #413 // String arrow_bolt
+ 183: ldc_w #415 // String arrow_Improvised
+ 186: ldc_w #563 // String arrow_improvised
+ 189: ldc_w #571 // String tactical_arrow
+ 192: ldc_w #565 // String improvised_arrow
+ 195: ldc_w #573 // String bolt
+ 198: invokestatic #919 // InterfaceMethod java/util/List.of:(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/List;
+ 201: putstatic #582 // Field CROSSBOW_PROJECTILE_BONES:Ljava/util/List;
+ 204: return
+}
+
+
+==================== com.ogaba.sa_combat.client.render.NailGunAimClient ====================
+Compiled from "NailGunAimClient.java"
+public final class com.ogaba.sa_combat.client.render.NailGunAimClient {
+ private static final float OPEN_RESPONSE_PER_SECOND;
+
+ private static final float CLOSE_RESPONSE_PER_SECOND;
+
+ private static final float AIM_MOVEMENT_MULTIPLIER;
+
+ private static float progress;
+
+ private static long lastUpdateNanos;
+
+ private com.ogaba.sa_combat.client.render.NailGunAimClient();
+ Code:
+ 0: aload_0
+ 1: invokespecial #19 // Method java/lang/Object."":()V
+ 4: return
+
+ public static void tick();
+ Code:
+ 0: invokestatic #28 // Method net/minecraft/client/Minecraft.m_91087_:()Lnet/minecraft/client/Minecraft;
+ 3: astore_0
+ 4: invokestatic #34 // Method java/lang/System.nanoTime:()J
+ 7: lstore_1
+ 8: getstatic #36 // Field lastUpdateNanos:J
+ 11: lconst_0
+ 12: lcmp
+ 13: ifne 22
+ 16: ldc #37 // float 0.05f
+ 18: fstore_3
+ 19: goto 38
+ 22: lload_1
+ 23: getstatic #36 // Field lastUpdateNanos:J
+ 26: lsub
+ 27: l2f
+ 28: ldc #38 // float 1.0E9f
+ 30: fdiv
+ 31: fconst_0
+ 32: ldc #39 // float 0.1f
+ 34: invokestatic #45 // Method net/minecraft/util/Mth.m_14036_:(FFF)F
+ 37: fstore_3
+ 38: lload_1
+ 39: putstatic #36 // Field lastUpdateNanos:J
+ 42: aload_0
+ 43: invokestatic #49 // Method shouldAim:(Lnet/minecraft/client/Minecraft;)Z
+ 46: ifeq 53
+ 49: fconst_1
+ 50: goto 54
+ 53: fconst_0
+ 54: fstore 4
+ 56: fload 4
+ 58: getstatic #51 // Field progress:F
+ 61: fcmpl
+ 62: ifle 70
+ 65: ldc #8 // float 18.0f
+ 67: goto 72
+ 70: ldc #10 // float 22.0f
+ 72: fstore 5
+ 74: fconst_1
+ 75: fload 5
+ 77: fneg
+ 78: fload_3
+ 79: fmul
+ 80: f2d
+ 81: invokestatic #57 // Method java/lang/Math.exp:(D)D
+ 84: d2f
+ 85: fsub
+ 86: fstore 6
+ 88: fload 6
+ 90: getstatic #51 // Field progress:F
+ 93: fload 4
+ 95: invokestatic #60 // Method net/minecraft/util/Mth.m_14179_:(FFF)F
+ 98: putstatic #51 // Field progress:F
+ 101: getstatic #51 // Field progress:F
+ 104: ldc #61 // float 5.0E-4f
+ 106: fcmpg
+ 107: ifge 124
+ 110: fload 4
+ 112: fconst_0
+ 113: fcmpl
+ 114: ifne 124
+ 117: fconst_0
+ 118: putstatic #51 // Field progress:F
+ 121: goto 144
+ 124: getstatic #51 // Field progress:F
+ 127: ldc #62 // float 0.9995f
+ 129: fcmpl
+ 130: ifle 144
+ 133: fload 4
+ 135: fconst_1
+ 136: fcmpl
+ 137: ifne 144
+ 140: fconst_1
+ 141: putstatic #51 // Field progress:F
+ 144: return
+
+ private static boolean shouldAim(net.minecraft.client.Minecraft);
+ Code:
+ 0: aload_0
+ 1: getfield #73 // Field net/minecraft/client/Minecraft.f_91074_:Lnet/minecraft/client/player/LocalPlayer;
+ 4: astore_1
+ 5: aload_1
+ 6: ifnull 42
+ 9: aload_0
+ 10: getfield #77 // Field net/minecraft/client/Minecraft.f_91080_:Lnet/minecraft/client/gui/screens/Screen;
+ 13: ifnonnull 42
+ 16: aload_0
+ 17: getfield #81 // Field net/minecraft/client/Minecraft.f_91066_:Lnet/minecraft/client/Options;
+ 20: invokevirtual #87 // Method net/minecraft/client/Options.m_92176_:()Lnet/minecraft/client/CameraType;
+ 23: invokevirtual #93 // Method net/minecraft/client/CameraType.m_90612_:()Z
+ 26: ifeq 42
+ 29: aload_0
+ 30: getfield #81 // Field net/minecraft/client/Minecraft.f_91066_:Lnet/minecraft/client/Options;
+ 33: getfield #97 // Field net/minecraft/client/Options.f_92095_:Lnet/minecraft/client/KeyMapping;
+ 36: invokevirtual #102 // Method net/minecraft/client/KeyMapping.m_90857_:()Z
+ 39: ifne 44
+ 42: iconst_0
+ 43: ireturn
+ 44: aload_1
+ 45: invokevirtual #108 // Method net/minecraft/world/entity/player/Player.m_21205_:()Lnet/minecraft/world/item/ItemStack;
+ 48: astore_2
+ 49: aload_2
+ 50: invokevirtual #114 // Method net/minecraft/world/item/ItemStack.m_41720_:()Lnet/minecraft/world/item/Item;
+ 53: instanceof #116 // class com/ogaba/sa_combat/combat/weapon/NailGunItem
+ 56: ifeq 77
+ 59: aload_2
+ 60: invokestatic #120 // Method com/ogaba/sa_combat/combat/weapon/NailGunItem.isReloading:(Lnet/minecraft/world/item/ItemStack;)Z
+ 63: ifne 77
+ 66: aload_2
+ 67: invokestatic #123 // Method com/ogaba/sa_combat/combat/weapon/NailGunItem.isClientReloadAnimationActive:(Lnet/minecraft/world/item/ItemStack;)Z
+ 70: ifne 77
+ 73: iconst_1
+ 74: goto 78
+ 77: iconst_0
+ 78: ireturn
+
+ public static float getProgress();
+ Code:
+ 0: getstatic #51 // Field progress:F
+ 3: fconst_0
+ 4: fconst_1
+ 5: invokestatic #45 // Method net/minecraft/util/Mth.m_14036_:(FFF)F
+ 8: fstore_0
+ 9: fload_0
+ 10: fload_0
+ 11: fmul
+ 12: ldc #130 // float 3.0f
+ 14: fconst_2
+ 15: fload_0
+ 16: fmul
+ 17: fsub
+ 18: fmul
+ 19: freturn
+
+ public static boolean isAiming(net.minecraft.world.entity.player.Player);
+ Code:
+ 0: aload_0
+ 1: ifnull 30
+ 4: aload_0
+ 5: invokevirtual #108 // Method net/minecraft/world/entity/player/Player.m_21205_:()Lnet/minecraft/world/item/ItemStack;
+ 8: invokevirtual #114 // Method net/minecraft/world/item/ItemStack.m_41720_:()Lnet/minecraft/world/item/Item;
+ 11: instanceof #116 // class com/ogaba/sa_combat/combat/weapon/NailGunItem
+ 14: ifeq 30
+ 17: invokestatic #135 // Method getProgress:()F
+ 20: ldc #136 // float 0.01f
+ 22: fcmpl
+ 23: ifle 30
+ 26: iconst_1
+ 27: goto 31
+ 30: iconst_0
+ 31: ireturn
+
+ public static float getMovementMultiplier();
+ Code:
+ 0: invokestatic #135 // Method getProgress:()F
+ 3: fconst_1
+ 4: ldc #12 // float 0.58f
+ 6: invokestatic #60 // Method net/minecraft/util/Mth.m_14179_:(FFF)F
+ 9: freturn
+
+ public static void reset();
+ Code:
+ 0: fconst_0
+ 1: putstatic #51 // Field progress:F
+ 4: lconst_0
+ 5: putstatic #36 // Field lastUpdateNanos:J
+ 8: return
+}
+
+
+==================== com.ogaba.sa_combat.combat.weapon.NailGunItem ====================
+Compiled from "NailGunItem.java"
+public class com.ogaba.sa_combat.combat.weapon.NailGunItem extends com.ogaba.sa_combat.combat.weapon.SAWeaponItem {
+ private static final java.lang.String NBT_MAGAZINE;
+
+ private static final java.lang.String NBT_RELOADING;
+
+ private static final java.lang.String NBT_RELOAD_TARGET;
+
+ private static final java.lang.String NBT_RELOAD_END_TICK;
+
+ private static final java.lang.String NBT_SERVER_NEXT_FIRE_SCALED;
+
+ private static final int BASE_MAGAZINE_CAPACITY;
+
+ private static final int EXTENDED_MAGAZINE_CAPACITY;
+
+ public static final int RELOAD_TICKS;
+
+ public static final float AUTO_FIRE_RATE_PER_SECOND;
+
+ private static final long SHOOT_ANIM_DURATION_MS;
+
+ private static final float BASE_INACCURACY;
+
+ private static final float STOCK_INACCURACY;
+
+ private static final float BASE_VOLUME;
+
+ private static final float SILENCED_VOLUME;
+
+ private static final float BASE_PITCH_MIN;
+
+ private static final float BASE_PITCH_MAX;
+
+ private static final float SILENCED_PITCH_MIN;
+
+ private static final float SILENCED_PITCH_MAX;
+
+ private static final float NAIL_VELOCITY;
+
+ private static final float SILENCED_NAIL_VELOCITY;
+
+ private static final double MUZZLE_FORWARD_HIP;
+
+ private static final double MUZZLE_FORWARD_AIM;
+
+ private static final double MUZZLE_RIGHT_HIP;
+
+ private static final double MUZZLE_DOWN_HIP;
+
+ private static final double MUZZLE_DOWN_AIM;
+
+ private static final double MUZZLE_STRAFE_COMPENSATION;
+
+ private static final double MUZZLE_STRAFE_COMPENSATION_LIMIT;
+
+ private static final double AIM_CONVERGENCE_DISTANCE;
+
+ private static final net.minecraft.resources.ResourceLocation NAIL_ITEM_ID;
+
+ private static final software.bernie.geckolib.core.animation.RawAnimation ANIM_IDLE;
+
+ private static final software.bernie.geckolib.core.animation.RawAnimation ANIM_DRAW;
+
+ private static final software.bernie.geckolib.core.animation.RawAnimation ANIM_SHOOT;
+
+ private static final software.bernie.geckolib.core.animation.RawAnimation ANIM_RELOAD;
+
+ private static final java.util.Map CLIENT_SHOOT_ANIM_START;
+
+ private static final java.util.Map CLIENT_LAST_HANDLED_SHOT;
+
+ private static final java.util.Map CLIENT_LAST_HAND_RENDER;
+
+ private static final java.util.Map CLIENT_DRAW_ANIM_START;
+
+ private static final java.util.Map CLIENT_LAST_HANDLED_DRAW;
+
+ private static final java.util.Map CLIENT_RELOAD_ANIM_START;
+
+ private static final java.util.Map CLIENT_LAST_HANDLED_RELOAD;
+
+ private static final long DRAW_ANIM_DURATION_MS;
+
+ private static final long DRAW_REARM_GAP_MS;
+
+ private static int reloadTicksForStack(net.minecraft.world.item.ItemStack);
+ Code:
+ 0: aload_0
+ 1: invokestatic #131 // Method com/ogaba/sa_combat/combat/upgrade/WeaponUpgradeData.getSpeedBonus:(Lnet/minecraft/world/item/ItemStack;)D
+ 4: aload_0
+ 5: invokestatic #134 // Method com/ogaba/sa_combat/combat/attachment/WeaponAttachmentData.getSpeedBonus:(Lnet/minecraft/world/item/ItemStack;)D
+ 8: dadd
+ 9: dstore_1
+ 10: dload_1
+ 11: ldc2_w #135 // double 0.1d
+ 14: ddiv
+ 15: invokestatic #142 // Method java/lang/Math.round:(D)J
+ 18: l2i
+ 19: istore_3
+ 20: iload_3
+ 21: iconst_4
+ 22: imul
+ 23: istore 4
+ 25: bipush 15
+ 27: bipush 37
+ 29: iload 4
+ 31: isub
+ 32: invokestatic #146 // Method java/lang/Math.max:(II)I
+ 35: ireturn
+
+ public com.ogaba.sa_combat.combat.weapon.NailGunItem(com.ogaba.sa_combat.combat.weapon.WeaponDefinition);
+ Code:
+ 0: aload_0
+ 1: aload_1
+ 2: invokespecial #155 // Method com/ogaba/sa_combat/combat/weapon/SAWeaponItem."":(Lcom/ogaba/sa_combat/combat/weapon/WeaponDefinition;)V
+ 5: return
+
+ public net.minecraft.world.item.UseAnim m_6164_(net.minecraft.world.item.ItemStack);
+ Code:
+ 0: getstatic #167 // Field net/minecraft/world/item/UseAnim.NONE:Lnet/minecraft/world/item/UseAnim;
+ 3: areturn
+
+ public boolean shouldCauseReequipAnimation(net.minecraft.world.item.ItemStack, net.minecraft.world.item.ItemStack, boolean);
+ Code:
+ 0: iload_3
+ 1: ifeq 6
+ 4: iconst_1
+ 5: ireturn
+ 6: aload_1
+ 7: invokevirtual #175 // Method net/minecraft/world/item/ItemStack.m_41619_:()Z
+ 10: ifne 20
+ 13: aload_2
+ 14: invokevirtual #175 // Method net/minecraft/world/item/ItemStack.m_41619_:()Z
+ 17: ifeq 37
+ 20: aload_1
+ 21: invokevirtual #175 // Method net/minecraft/world/item/ItemStack.m_41619_:()Z
+ 24: aload_2
+ 25: invokevirtual #175 // Method net/minecraft/world/item/ItemStack.m_41619_:()Z
+ 28: if_icmpeq 35
+ 31: iconst_1
+ 32: goto 36
+ 35: iconst_0
+ 36: ireturn
+ 37: aload_1
+ 38: invokevirtual #179 // Method net/minecraft/world/item/ItemStack.m_41720_:()Lnet/minecraft/world/item/Item;
+ 41: aload_2
+ 42: invokevirtual #179 // Method net/minecraft/world/item/ItemStack.m_41720_:()Lnet/minecraft/world/item/Item;
+ 45: if_acmpeq 52
+ 48: iconst_1
+ 49: goto 53
+ 52: iconst_0
+ 53: ireturn
+
+ public boolean shouldCauseBlockBreakReset(net.minecraft.world.item.ItemStack, net.minecraft.world.item.ItemStack);
+ Code:
+ 0: aload_1
+ 1: invokevirtual #179 // Method net/minecraft/world/item/ItemStack.m_41720_:()Lnet/minecraft/world/item/Item;
+ 4: aload_2
+ 5: invokevirtual #179 // Method net/minecraft/world/item/ItemStack.m_41720_:()Lnet/minecraft/world/item/Item;
+ 8: if_acmpeq 15
+ 11: iconst_1
+ 12: goto 16
+ 15: iconst_0
+ 16: ireturn
+
+ public com.google.common.collect.Multimap m_7167_(net.minecraft.world.entity.EquipmentSlot);
+ Code:
+ 0: invokestatic #194 // Method com/google/common/collect/ImmutableMultimap.of:()Lcom/google/common/collect/ImmutableMultimap;
+ 3: areturn
+
+ public com.google.common.collect.Multimap getAttributeModifiers(net.minecraft.world.entity.EquipmentSlot, net.minecraft.world.item.ItemStack);
+ Code:
+ 0: invokestatic #194 // Method com/google/common/collect/ImmutableMultimap.of:()Lcom/google/common/collect/ImmutableMultimap;
+ 3: areturn
+
+ public boolean m_7579_(net.minecraft.world.item.ItemStack, net.minecraft.world.entity.LivingEntity, net.minecraft.world.entity.LivingEntity);
+ Code:
+ 0: iconst_0
+ 1: ireturn
+
+ public net.minecraft.world.InteractionResultHolder m_7203_(net.minecraft.world.level.Level, net.minecraft.world.entity.player.Player, net.minecraft.world.InteractionHand);
+ Code:
+ 0: aload_2
+ 1: aload_3
+ 2: invokevirtual #213 // Method net/minecraft/world/entity/player/Player.m_21120_:(Lnet/minecraft/world/InteractionHand;)Lnet/minecraft/world/item/ItemStack;
+ 5: invokestatic #219 // Method net/minecraft/world/InteractionResultHolder.m_19100_:(Ljava/lang/Object;)Lnet/minecraft/world/InteractionResultHolder;
+ 8: areturn
+
+ public void m_6883_(net.minecraft.world.item.ItemStack, net.minecraft.world.level.Level, net.minecraft.world.entity.Entity, int, boolean);
+ Code:
+ 0: aload_0
+ 1: aload_1
+ 2: aload_2
+ 3: aload_3
+ 4: iload 4
+ 6: iload 5
+ 8: invokespecial #229 // Method com/ogaba/sa_combat/combat/weapon/SAWeaponItem.m_6883_:(Lnet/minecraft/world/item/ItemStack;Lnet/minecraft/world/level/Level;Lnet/minecraft/world/entity/Entity;IZ)V
+ 11: aload_2
+ 12: instanceof #231 // class net/minecraft/server/level/ServerLevel
+ 15: ifeq 31
+ 18: aload_2
+ 19: checkcast #231 // class net/minecraft/server/level/ServerLevel
+ 22: astore 6
+ 24: aload_1
+ 25: aload 6
+ 27: invokestatic #237 // InterfaceMethod software/bernie/geckolib/animatable/GeoItem.getOrAssignId:(Lnet/minecraft/world/item/ItemStack;Lnet/minecraft/server/level/ServerLevel;)J
+ 30: pop2
+ 31: aload_2
+ 32: invokevirtual #242 // Method net/minecraft/world/level/Level.m_5776_:()Z
+ 35: ifne 61
+ 38: aload_1
+ 39: invokestatic #246 // Method isReloading:(Lnet/minecraft/world/item/ItemStack;)Z
+ 42: ifeq 61
+ 45: aload_3
+ 46: instanceof #209 // class net/minecraft/world/entity/player/Player
+ 49: ifeq 61
+ 52: aload_3
+ 53: checkcast #209 // class net/minecraft/world/entity/player/Player
+ 56: astore 6
+ 58: goto 62
+ 61: return
+ 62: iload 5
+ 64: ifne 78
+ 67: aload_1
+ 68: iconst_0
+ 69: invokestatic #250 // Method setReloading:(Lnet/minecraft/world/item/ItemStack;Z)V
+ 72: aload_1
+ 73: iconst_0
+ 74: invokestatic #254 // Method setReloadTarget:(Lnet/minecraft/world/item/ItemStack;I)V
+ 77: return
+ 78: aload 6
+ 80: invokevirtual #257 // Method net/minecraft/world/entity/player/Player.m_20142_:()Z
+ 83: ifeq 92
+ 86: aload 6
+ 88: iconst_0
+ 89: invokevirtual #261 // Method net/minecraft/world/entity/player/Player.m_6858_:(Z)V
+ 92: aload_2
+ 93: invokevirtual #265 // Method net/minecraft/world/level/Level.m_46467_:()J
+ 96: aload_1
+ 97: invokestatic #269 // Method getReloadEndTick:(Lnet/minecraft/world/item/ItemStack;)J
+ 100: lcmp
+ 101: ifge 105
+ 104: return
+ 105: aload_1
+ 106: invokestatic #272 // Method getReloadTarget:(Lnet/minecraft/world/item/ItemStack;)I
+ 109: istore 7
+ 111: aload 6
+ 113: invokevirtual #276 // Method net/minecraft/world/entity/player/Player.m_150110_:()Lnet/minecraft/world/entity/player/Abilities;
+ 116: getfield #281 // Field net/minecraft/world/entity/player/Abilities.f_35937_:Z
+ 119: istore 8
+ 121: iload 8
+ 123: ifne 138
+ 126: iload 7
+ 128: ifle 138
+ 131: aload 6
+ 133: iload 7
+ 135: invokestatic #285 // Method consumeReserveAmmo:(Lnet/minecraft/world/entity/player/Player;I)V
+ 138: aload_1
+ 139: aload_1
+ 140: invokestatic #288 // Method magazineCapacity:(Lnet/minecraft/world/item/ItemStack;)I
+ 143: aload_1
+ 144: invokestatic #291 // Method getMagazine:(Lnet/minecraft/world/item/ItemStack;)I
+ 147: iload 7
+ 149: iadd
+ 150: invokestatic #294 // Method java/lang/Math.min:(II)I
+ 153: invokestatic #297 // Method setMagazine:(Lnet/minecraft/world/item/ItemStack;I)V
+ 156: aload_1
+ 157: iconst_0
+ 158: invokestatic #250 // Method setReloading:(Lnet/minecraft/world/item/ItemStack;Z)V
+ 161: aload_1
+ 162: iconst_0
+ 163: invokestatic #254 // Method setReloadTarget:(Lnet/minecraft/world/item/ItemStack;I)V
+ 166: return
+
+ public boolean attemptReload(net.minecraft.world.level.Level, net.minecraft.world.entity.player.Player, net.minecraft.world.item.ItemStack);
+ Code:
+ 0: aload_3
+ 1: invokestatic #246 // Method isReloading:(Lnet/minecraft/world/item/ItemStack;)Z
+ 4: ifeq 9
+ 7: iconst_0
+ 8: ireturn
+ 9: aload_3
+ 10: invokestatic #291 // Method getMagazine:(Lnet/minecraft/world/item/ItemStack;)I
+ 13: istore 4
+ 15: aload_3
+ 16: invokestatic #288 // Method magazineCapacity:(Lnet/minecraft/world/item/ItemStack;)I
+ 19: istore 5
+ 21: iload 4
+ 23: iload 5
+ 25: if_icmplt 30
+ 28: iconst_0
+ 29: ireturn
+ 30: aload_2
+ 31: invokevirtual #276 // Method net/minecraft/world/entity/player/Player.m_150110_:()Lnet/minecraft/world/entity/player/Abilities;
+ 34: getfield #281 // Field net/minecraft/world/entity/player/Abilities.f_35937_:Z
+ 37: istore 6
+ 39: aload_2
+ 40: invokestatic #311 // Method countReserveAmmo:(Lnet/minecraft/world/entity/player/Player;)I
+ 43: istore 7
+ 45: iload 7
+ 47: ifgt 57
+ 50: iload 6
+ 52: ifne 57
+ 55: iconst_0
+ 56: ireturn
+ 57: aload_2
+ 58: invokevirtual #257 // Method net/minecraft/world/entity/player/Player.m_20142_:()Z
+ 61: ifeq 69
+ 64: aload_2
+ 65: iconst_0
+ 66: invokevirtual #261 // Method net/minecraft/world/entity/player/Player.m_6858_:(Z)V
+ 69: iload 6
+ 71: ifeq 82
+ 74: iload 5
+ 76: iload 4
+ 78: isub
+ 79: goto 92
+ 82: iload 5
+ 84: iload 4
+ 86: isub
+ 87: iload 7
+ 89: invokestatic #294 // Method java/lang/Math.min:(II)I
+ 92: istore 8
+ 94: aload_3
+ 95: iconst_1
+ 96: invokestatic #250 // Method setReloading:(Lnet/minecraft/world/item/ItemStack;Z)V
+ 99: aload_3
+ 100: iload 8
+ 102: invokestatic #254 // Method setReloadTarget:(Lnet/minecraft/world/item/ItemStack;I)V
+ 105: aload_3
+ 106: aload_1
+ 107: invokevirtual #265 // Method net/minecraft/world/level/Level.m_46467_:()J
+ 110: aload_3
+ 111: invokestatic #313 // Method reloadTicksForStack:(Lnet/minecraft/world/item/ItemStack;)I
+ 114: i2l
+ 115: ladd
+ 116: invokestatic #317 // Method setReloadEndTick:(Lnet/minecraft/world/item/ItemStack;J)V
+ 119: iconst_1
+ 120: ireturn
+
+ public void fire(net.minecraft.world.level.Level, net.minecraft.world.entity.player.Player, net.minecraft.world.item.ItemStack, net.minecraft.world.InteractionHand);
+ Code:
+ 0: aload_0
+ 1: aload_1
+ 2: aload_2
+ 3: aload_3
+ 4: aload 4
+ 6: fconst_0
+ 7: invokevirtual #325 // Method fire:(Lnet/minecraft/world/level/Level;Lnet/minecraft/world/entity/player/Player;Lnet/minecraft/world/item/ItemStack;Lnet/minecraft/world/InteractionHand;F)V
+ 10: return
+
+ public void fire(net.minecraft.world.level.Level, net.minecraft.world.entity.player.Player, net.minecraft.world.item.ItemStack, net.minecraft.world.InteractionHand, float);
+ Code:
+ 0: aload_1
+ 1: invokevirtual #242 // Method net/minecraft/world/level/Level.m_5776_:()Z
+ 4: ifeq 12
+ 7: aload_3
+ 8: invokestatic #329 // Method markShootAnimation:(Lnet/minecraft/world/item/ItemStack;)V
+ 11: return
+ 12: aload_0
+ 13: aload_1
+ 14: aload_2
+ 15: aload_3
+ 16: invokevirtual #333 // Method createNail:(Lnet/minecraft/world/level/Level;Lnet/minecraft/world/entity/player/Player;Lnet/minecraft/world/item/ItemStack;)Lcom/ogaba/sa_combat/entity/projectile/NailEntity;
+ 19: astore 6
+ 21: fload 5
+ 23: invokestatic #339 // Method java/lang/Float.isFinite:(F)Z
+ 26: ifeq 39
+ 29: fload 5
+ 31: fconst_0
+ 32: fconst_1
+ 33: invokestatic #345 // Method net/minecraft/util/Mth.m_14036_:(FFF)F
+ 36: goto 40
+ 39: fconst_0
+ 40: fstore 7
+ 42: aload_2
+ 43: aload 4
+ 45: fload 7
+ 47: invokestatic #351 // Method muzzlePosition:(Lnet/minecraft/world/entity/player/Player;Lnet/minecraft/world/InteractionHand;F)Lnet/minecraft/world/phys/Vec3;
+ 50: astore 8
+ 52: aload_2
+ 53: aload 8
+ 55: invokestatic #355 // Method nailAimDirection:(Lnet/minecraft/world/entity/player/Player;Lnet/minecraft/world/phys/Vec3;)Lnet/minecraft/world/phys/Vec3;
+ 58: astore 9
+ 60: aload 6
+ 62: aload 8
+ 64: getfield #360 // Field net/minecraft/world/phys/Vec3.f_82479_:D
+ 67: aload 8
+ 69: getfield #363 // Field net/minecraft/world/phys/Vec3.f_82480_:D
+ 72: aload 8
+ 74: getfield #366 // Field net/minecraft/world/phys/Vec3.f_82481_:D
+ 77: invokevirtual #370 // Method com/ogaba/sa_combat/entity/projectile/NailEntity.m_6034_:(DDD)V
+ 80: aload_3
+ 81: invokestatic #373 // Method hasSilencer:(Lnet/minecraft/world/item/ItemStack;)Z
+ 84: istore 10
+ 86: aload_3
+ 87: invokestatic #377 // Method projectileVelocity:(Lnet/minecraft/world/item/ItemStack;)F
+ 90: fstore 11
+ 92: aload 6
+ 94: aload 9
+ 96: getfield #360 // Field net/minecraft/world/phys/Vec3.f_82479_:D
+ 99: aload 9
+ 101: getfield #363 // Field net/minecraft/world/phys/Vec3.f_82480_:D
+ 104: aload 9
+ 106: getfield #366 // Field net/minecraft/world/phys/Vec3.f_82481_:D
+ 109: fload 11
+ 111: aload_3
+ 112: invokestatic #380 // Method projectileInaccuracy:(Lnet/minecraft/world/item/ItemStack;)F
+ 115: invokevirtual #384 // Method com/ogaba/sa_combat/entity/projectile/NailEntity.m_6686_:(DDDFF)V
+ 118: aload_1
+ 119: aload 6
+ 121: invokevirtual #388 // Method net/minecraft/world/level/Level.m_7967_:(Lnet/minecraft/world/entity/Entity;)Z
+ 124: pop
+ 125: aload_3
+ 126: iconst_0
+ 127: aload_3
+ 128: invokestatic #291 // Method getMagazine:(Lnet/minecraft/world/item/ItemStack;)I
+ 131: iconst_1
+ 132: isub
+ 133: invokestatic #146 // Method java/lang/Math.max:(II)I
+ 136: invokestatic #297 // Method setMagazine:(Lnet/minecraft/world/item/ItemStack;I)V
+ 139: aload_3
+ 140: iconst_1
+ 141: aload_2
+ 142: invokedynamic #410, 0 // InvokeDynamic #0:accept:()Ljava/util/function/Consumer;
+ 147: invokevirtual #414 // Method net/minecraft/world/item/ItemStack.m_41622_:(ILnet/minecraft/world/entity/LivingEntity;Ljava/util/function/Consumer;)V
+ 150: aload_2
+ 151: getstatic #420 // Field net/minecraft/stats/Stats.f_12982_:Lnet/minecraft/stats/StatType;
+ 154: aload_0
+ 155: invokevirtual #426 // Method net/minecraft/stats/StatType.m_12902_:(Ljava/lang/Object;)Lnet/minecraft/stats/Stat;
+ 158: invokevirtual #430 // Method net/minecraft/world/entity/player/Player.m_36246_:(Lnet/minecraft/stats/Stat;)V
+ 161: iload 10
+ 163: ifeq 171
+ 166: ldc #65 // float 0.75f
+ 168: goto 172
+ 171: fconst_2
+ 172: fstore 12
+ 174: iload 10
+ 176: ifeq 198
+ 179: ldc #71 // float 1.08f
+ 181: aload_1
+ 182: getfield #436 // Field net/minecraft/world/level/Level.f_46441_:Lnet/minecraft/util/RandomSource;
+ 185: invokeinterface #442, 1 // InterfaceMethod net/minecraft/util/RandomSource.m_188501_:()F
+ 190: ldc_w #443 // float 0.099999905f
+ 193: fmul
+ 194: fadd
+ 195: goto 214
+ 198: ldc #67 // float 0.94f
+ 200: aload_1
+ 201: getfield #436 // Field net/minecraft/world/level/Level.f_46441_:Lnet/minecraft/util/RandomSource;
+ 204: invokeinterface #442, 1 // InterfaceMethod net/minecraft/util/RandomSource.m_188501_:()F
+ 209: ldc_w #444 // float 0.119999945f
+ 212: fmul
+ 213: fadd
+ 214: fstore 13
+ 216: aload_1
+ 217: aload_2
+ 218: aload_2
+ 219: invokevirtual #448 // Method net/minecraft/world/entity/player/Player.m_20185_:()D
+ 222: aload_2
+ 223: invokevirtual #451 // Method net/minecraft/world/entity/player/Player.m_20186_:()D
+ 226: aload_2
+ 227: invokevirtual #454 // Method net/minecraft/world/entity/player/Player.m_20189_:()D
+ 230: getstatic #460 // Field com/ogaba/sa_combat/registry/ModSounds.NAIL_GUN_SHOOT:Lnet/minecraftforge/registries/RegistryObject;
+ 233: invokevirtual #466 // Method net/minecraftforge/registries/RegistryObject.get:()Ljava/lang/Object;
+ 236: checkcast #468 // class net/minecraft/sounds/SoundEvent
+ 239: getstatic #474 // Field net/minecraft/sounds/SoundSource.PLAYERS:Lnet/minecraft/sounds/SoundSource;
+ 242: fload 12
+ 244: fload 13
+ 246: invokevirtual #478 // Method net/minecraft/world/level/Level.m_6263_:(Lnet/minecraft/world/entity/player/Player;DDDLnet/minecraft/sounds/SoundEvent;Lnet/minecraft/sounds/SoundSource;FF)V
+ 249: return
+
+ public static void playLocalShotSound(net.minecraft.world.level.Level, net.minecraft.world.entity.player.Player, net.minecraft.world.item.ItemStack);
+ Code:
+ 0: aload_0
+ 1: ifnull 19
+ 4: aload_1
+ 5: ifnull 19
+ 8: aload_2
+ 9: ifnull 19
+ 12: aload_2
+ 13: invokevirtual #175 // Method net/minecraft/world/item/ItemStack.m_41619_:()Z
+ 16: ifeq 20
+ 19: return
+ 20: aload_2
+ 21: invokestatic #373 // Method hasSilencer:(Lnet/minecraft/world/item/ItemStack;)Z
+ 24: istore_3
+ 25: iload_3
+ 26: ifeq 34
+ 29: ldc #65 // float 0.75f
+ 31: goto 35
+ 34: fconst_2
+ 35: fstore 4
+ 37: iload_3
+ 38: ifeq 60
+ 41: ldc #71 // float 1.08f
+ 43: aload_0
+ 44: getfield #436 // Field net/minecraft/world/level/Level.f_46441_:Lnet/minecraft/util/RandomSource;
+ 47: invokeinterface #442, 1 // InterfaceMethod net/minecraft/util/RandomSource.m_188501_:()F
+ 52: ldc_w #443 // float 0.099999905f
+ 55: fmul
+ 56: fadd
+ 57: goto 76
+ 60: ldc #67 // float 0.94f
+ 62: aload_0
+ 63: getfield #436 // Field net/minecraft/world/level/Level.f_46441_:Lnet/minecraft/util/RandomSource;
+ 66: invokeinterface #442, 1 // InterfaceMethod net/minecraft/util/RandomSource.m_188501_:()F
+ 71: ldc_w #444 // float 0.119999945f
+ 74: fmul
+ 75: fadd
+ 76: fstore 5
+ 78: aload_0
+ 79: aload_1
+ 80: invokevirtual #448 // Method net/minecraft/world/entity/player/Player.m_20185_:()D
+ 83: aload_1
+ 84: invokevirtual #451 // Method net/minecraft/world/entity/player/Player.m_20186_:()D
+ 87: aload_1
+ 88: invokevirtual #454 // Method net/minecraft/world/entity/player/Player.m_20189_:()D
+ 91: getstatic #460 // Field com/ogaba/sa_combat/registry/ModSounds.NAIL_GUN_SHOOT:Lnet/minecraftforge/registries/RegistryObject;
+ 94: invokevirtual #466 // Method net/minecraftforge/registries/RegistryObject.get:()Ljava/lang/Object;
+ 97: checkcast #468 // class net/minecraft/sounds/SoundEvent
+ 100: getstatic #474 // Field net/minecraft/sounds/SoundSource.PLAYERS:Lnet/minecraft/sounds/SoundSource;
+ 103: fload 4
+ 105: fload 5
+ 107: iconst_0
+ 108: invokevirtual #495 // Method net/minecraft/world/level/Level.m_7785_:(DDDLnet/minecraft/sounds/SoundEvent;Lnet/minecraft/sounds/SoundSource;FFZ)V
+ 111: return
+
+ public static net.minecraft.world.phys.Vec3 muzzlePosition(net.minecraft.world.entity.player.Player, net.minecraft.world.InteractionHand);
+ Code:
+ 0: aload_0
+ 1: aload_1
+ 2: fconst_0
+ 3: invokestatic #351 // Method muzzlePosition:(Lnet/minecraft/world/entity/player/Player;Lnet/minecraft/world/InteractionHand;F)Lnet/minecraft/world/phys/Vec3;
+ 6: areturn
+
+ public static net.minecraft.world.phys.Vec3 muzzlePosition(net.minecraft.world.entity.player.Player, net.minecraft.world.InteractionHand, float);
+ Code:
+ 0: fload_2
+ 1: fconst_0
+ 2: fconst_1
+ 3: invokestatic #345 // Method net/minecraft/util/Mth.m_14036_:(FFF)F
+ 6: fstore_3
+ 7: aload_0
+ 8: invokevirtual #500 // Method net/minecraft/world/entity/player/Player.m_146892_:()Lnet/minecraft/world/phys/Vec3;
+ 11: astore 4
+ 13: aload_0
+ 14: invokevirtual #503 // Method net/minecraft/world/entity/player/Player.m_146909_:()F
+ 17: aload_0
+ 18: invokevirtual #506 // Method net/minecraft/world/entity/player/Player.m_146908_:()F
+ 21: invokestatic #510 // Method net/minecraft/world/phys/Vec3.m_82498_:(FF)Lnet/minecraft/world/phys/Vec3;
+ 24: astore 5
+ 26: aload_0
+ 27: invokevirtual #506 // Method net/minecraft/world/entity/player/Player.m_146908_:()F
+ 30: ldc_w #511 // float 0.017453292f
+ 33: fmul
+ 34: fstore 6
+ 36: new #357 // class net/minecraft/world/phys/Vec3
+ 39: dup
+ 40: fload 6
+ 42: invokestatic #515 // Method net/minecraft/util/Mth.m_14089_:(F)F
+ 45: fneg
+ 46: f2d
+ 47: dconst_0
+ 48: fload 6
+ 50: invokestatic #518 // Method net/minecraft/util/Mth.m_14031_:(F)F
+ 53: fneg
+ 54: f2d
+ 55: invokespecial #520 // Method net/minecraft/world/phys/Vec3."":(DDD)V
+ 58: astore 7
+ 60: aload_1
+ 61: getstatic #523 // Field net/minecraft/world/InteractionHand.OFF_HAND:Lnet/minecraft/world/InteractionHand;
+ 64: if_acmpne 73
+ 67: ldc2_w #524 // double -1.0d
+ 70: goto 74
+ 73: dconst_1
+ 74: dstore 8
+ 76: fload_3
+ 77: f2d
+ 78: ldc2_w #79 // double 1.16d
+ 81: ldc2_w #82 // double 1.3d
+ 84: invokestatic #529 // Method net/minecraft/util/Mth.m_14139_:(DDD)D
+ 87: dstore 10
+ 89: fload_3
+ 90: f2d
+ 91: ldc2_w #85 // double 0.24d
+ 94: dconst_0
+ 95: invokestatic #529 // Method net/minecraft/util/Mth.m_14139_:(DDD)D
+ 98: dload 8
+ 100: dmul
+ 101: dstore 12
+ 103: fload_3
+ 104: f2d
+ 105: ldc2_w #88 // double 0.2d
+ 108: ldc2_w #91 // double 0.11d
+ 111: invokestatic #529 // Method net/minecraft/util/Mth.m_14139_:(DDD)D
+ 114: dstore 14
+ 116: aload_0
+ 117: invokevirtual #532 // Method net/minecraft/world/entity/player/Player.m_20184_:()Lnet/minecraft/world/phys/Vec3;
+ 120: astore 16
+ 122: aload 16
+ 124: aload 7
+ 126: invokevirtual #536 // Method net/minecraft/world/phys/Vec3.m_82526_:(Lnet/minecraft/world/phys/Vec3;)D
+ 129: dstore 17
+ 131: dload 17
+ 133: dneg
+ 134: ldc2_w #94 // double 0.55d
+ 137: dmul
+ 138: ldc2_w #537 // double -0.075d
+ 141: ldc2_w #97 // double 0.075d
+ 144: invokestatic #541 // Method net/minecraft/util/Mth.m_14008_:(DDD)D
+ 147: dconst_1
+ 148: fload_3
+ 149: f2d
+ 150: dsub
+ 151: dmul
+ 152: dstore 19
+ 154: dload 12
+ 156: dload 19
+ 158: dadd
+ 159: dstore 12
+ 161: aload 4
+ 163: aload 5
+ 165: dload 10
+ 167: invokevirtual #545 // Method net/minecraft/world/phys/Vec3.m_82490_:(D)Lnet/minecraft/world/phys/Vec3;
+ 170: invokevirtual #549 // Method net/minecraft/world/phys/Vec3.m_82549_:(Lnet/minecraft/world/phys/Vec3;)Lnet/minecraft/world/phys/Vec3;
+ 173: aload 7
+ 175: dload 12
+ 177: invokevirtual #545 // Method net/minecraft/world/phys/Vec3.m_82490_:(D)Lnet/minecraft/world/phys/Vec3;
+ 180: invokevirtual #549 // Method net/minecraft/world/phys/Vec3.m_82549_:(Lnet/minecraft/world/phys/Vec3;)Lnet/minecraft/world/phys/Vec3;
+ 183: dconst_0
+ 184: dload 14
+ 186: dneg
+ 187: dconst_0
+ 188: invokevirtual #553 // Method net/minecraft/world/phys/Vec3.m_82520_:(DDD)Lnet/minecraft/world/phys/Vec3;
+ 191: areturn
+
+ private static net.minecraft.world.phys.Vec3 nailAimDirection(net.minecraft.world.entity.player.Player, net.minecraft.world.phys.Vec3);
+ Code:
+ 0: aload_0
+ 1: invokevirtual #503 // Method net/minecraft/world/entity/player/Player.m_146909_:()F
+ 4: aload_0
+ 5: invokevirtual #506 // Method net/minecraft/world/entity/player/Player.m_146908_:()F
+ 8: invokestatic #510 // Method net/minecraft/world/phys/Vec3.m_82498_:(FF)Lnet/minecraft/world/phys/Vec3;
+ 11: astore_2
+ 12: aload_0
+ 13: invokevirtual #500 // Method net/minecraft/world/entity/player/Player.m_146892_:()Lnet/minecraft/world/phys/Vec3;
+ 16: aload_2
+ 17: ldc2_w #100 // double 12.0d
+ 20: invokevirtual #545 // Method net/minecraft/world/phys/Vec3.m_82490_:(D)Lnet/minecraft/world/phys/Vec3;
+ 23: invokevirtual #549 // Method net/minecraft/world/phys/Vec3.m_82549_:(Lnet/minecraft/world/phys/Vec3;)Lnet/minecraft/world/phys/Vec3;
+ 26: astore_3
+ 27: aload_3
+ 28: aload_1
+ 29: invokevirtual #568 // Method net/minecraft/world/phys/Vec3.m_82546_:(Lnet/minecraft/world/phys/Vec3;)Lnet/minecraft/world/phys/Vec3;
+ 32: invokevirtual #571 // Method net/minecraft/world/phys/Vec3.m_82541_:()Lnet/minecraft/world/phys/Vec3;
+ 35: areturn
+
+ private com.ogaba.sa_combat.entity.projectile.NailEntity createNail(net.minecraft.world.level.Level, net.minecraft.world.entity.player.Player, net.minecraft.world.item.ItemStack);
+ Code:
+ 0: new #347 // class com/ogaba/sa_combat/entity/projectile/NailEntity
+ 3: dup
+ 4: aload_1
+ 5: aload_2
+ 6: invokespecial #575 // Method com/ogaba/sa_combat/entity/projectile/NailEntity."":(Lnet/minecraft/world/level/Level;Lnet/minecraft/world/entity/LivingEntity;)V
+ 9: astore 4
+ 11: aload_0
+ 12: invokevirtual #578 // Method definitionDamage:()D
+ 15: aload_3
+ 16: invokestatic #581 // Method com/ogaba/sa_combat/combat/upgrade/WeaponUpgradeData.getDamageBonus:(Lnet/minecraft/world/item/ItemStack;)D
+ 19: dadd
+ 20: aload_3
+ 21: invokestatic #582 // Method com/ogaba/sa_combat/combat/attachment/WeaponAttachmentData.getDamageBonus:(Lnet/minecraft/world/item/ItemStack;)D
+ 24: dadd
+ 25: dstore 5
+ 27: ldc2_w #583 // double 0.95d
+ 30: dconst_0
+ 31: aload_3
+ 32: invokestatic #587 // Method com/ogaba/sa_combat/combat/upgrade/WeaponUpgradeData.getCriticalChanceBonus:(Lnet/minecraft/world/item/ItemStack;)D
+ 35: invokestatic #590 // Method java/lang/Math.max:(DD)D
+ 38: invokestatic #592 // Method java/lang/Math.min:(DD)D
+ 41: dstore 7
+ 43: dload 7
+ 45: dconst_0
+ 46: dcmpl
+ 47: ifle 80
+ 50: aload_1
+ 51: getfield #436 // Field net/minecraft/world/level/Level.f_46441_:Lnet/minecraft/util/RandomSource;
+ 54: invokeinterface #595, 1 // InterfaceMethod net/minecraft/util/RandomSource.m_188500_:()D
+ 59: dload 7
+ 61: dcmpg
+ 62: ifge 80
+ 65: dload 5
+ 67: dconst_1
+ 68: dconst_0
+ 69: aload_3
+ 70: invokestatic #598 // Method com/ogaba/sa_combat/combat/upgrade/WeaponUpgradeData.getCriticalDamageBonus:(Lnet/minecraft/world/item/ItemStack;)D
+ 73: invokestatic #590 // Method java/lang/Math.max:(DD)D
+ 76: dadd
+ 77: dmul
+ 78: dstore 5
+ 80: dconst_1
+ 81: dload 5
+ 83: invokestatic #590 // Method java/lang/Math.max:(DD)D
+ 86: dstore 9
+ 88: aload 4
+ 90: dload 9
+ 92: ldc2_w #599 // double 0.05d
+ 95: aload_3
+ 96: invokestatic #377 // Method projectileVelocity:(Lnet/minecraft/world/item/ItemStack;)F
+ 99: f2d
+ 100: invokestatic #590 // Method java/lang/Math.max:(DD)D
+ 103: ddiv
+ 104: invokevirtual #604 // Method com/ogaba/sa_combat/entity/projectile/NailEntity.m_36781_:(D)V
+ 107: aload_2
+ 108: invokevirtual #276 // Method net/minecraft/world/entity/player/Player.m_150110_:()Lnet/minecraft/world/entity/player/Abilities;
+ 111: getfield #281 // Field net/minecraft/world/entity/player/Abilities.f_35937_:Z
+ 114: ifeq 125
+ 117: aload 4
+ 119: getstatic #608 // Field net/minecraft/world/entity/projectile/AbstractArrow$Pickup.CREATIVE_ONLY:Lnet/minecraft/world/entity/projectile/AbstractArrow$Pickup;
+ 122: putfield #611 // Field com/ogaba/sa_combat/entity/projectile/NailEntity.f_36705_:Lnet/minecraft/world/entity/projectile/AbstractArrow$Pickup;
+ 125: aload 4
+ 127: areturn
+
+ private double definitionDamage();
+ Code:
+ 0: aload_0
+ 1: invokevirtual #619 // Method getDefinition:()Lcom/ogaba/sa_combat/combat/weapon/WeaponDefinition;
+ 4: astore_1
+ 5: aload_1
+ 6: ifnonnull 13
+ 9: dconst_1
+ 10: goto 22
+ 13: dconst_1
+ 14: aload_1
+ 15: invokevirtual #625 // Method com/ogaba/sa_combat/combat/weapon/WeaponDefinition.attackDamage:()I
+ 18: i2d
+ 19: invokestatic #590 // Method java/lang/Math.max:(DD)D
+ 22: dreturn
+
+ private static float projectileVelocity(net.minecraft.world.item.ItemStack);
+ Code:
+ 0: aload_0
+ 1: invokestatic #628 // Method com/ogaba/sa_combat/combat/upgrade/WeaponUpgradeData.getReachBonus:(Lnet/minecraft/world/item/ItemStack;)D
+ 4: aload_0
+ 5: invokestatic #629 // Method com/ogaba/sa_combat/combat/attachment/WeaponAttachmentData.getReachBonus:(Lnet/minecraft/world/item/ItemStack;)D
+ 8: dadd
+ 9: dstore_1
+ 10: aload_0
+ 11: invokestatic #373 // Method hasSilencer:(Lnet/minecraft/world/item/ItemStack;)Z
+ 14: ifeq 23
+ 17: ldc2_w #630 // double 2.299999952316284d
+ 20: goto 26
+ 23: ldc2_w #632 // double 2.0d
+ 26: dstore_3
+ 27: ldc2_w #634 // double 3.2d
+ 30: dload_3
+ 31: dload_1
+ 32: ldc2_w #636 // double 1.1d
+ 35: dmul
+ 36: dadd
+ 37: invokestatic #592 // Method java/lang/Math.min:(DD)D
+ 40: d2f
+ 41: freturn
+
+ private static float projectileInaccuracy(net.minecraft.world.item.ItemStack);
+ Code:
+ 0: aload_0
+ 1: invokestatic #642 // Method hasStock:(Lnet/minecraft/world/item/ItemStack;)Z
+ 4: ifeq 11
+ 7: fconst_2
+ 8: goto 13
+ 11: ldc #60 // float 8.5f
+ 13: freturn
+
+ public static boolean hasStock(net.minecraft.world.item.ItemStack);
+ Code:
+ 0: aload_0
+ 1: getstatic #648 // Field com/ogaba/sa_combat/combat/attachment/AttachmentSlot.STOCK:Lcom/ogaba/sa_combat/combat/attachment/AttachmentSlot;
+ 4: invokestatic #652 // Method com/ogaba/sa_combat/combat/attachment/WeaponAttachmentData.hasAttachmentInSlot:(Lnet/minecraft/world/item/ItemStack;Lcom/ogaba/sa_combat/combat/attachment/AttachmentSlot;)Z
+ 7: ireturn
+
+ public static boolean hasSilencer(net.minecraft.world.item.ItemStack);
+ Code:
+ 0: aload_0
+ 1: getstatic #655 // Field com/ogaba/sa_combat/combat/attachment/AttachmentSlot.SILENCER:Lcom/ogaba/sa_combat/combat/attachment/AttachmentSlot;
+ 4: invokestatic #652 // Method com/ogaba/sa_combat/combat/attachment/WeaponAttachmentData.hasAttachmentInSlot:(Lnet/minecraft/world/item/ItemStack;Lcom/ogaba/sa_combat/combat/attachment/AttachmentSlot;)Z
+ 7: ireturn
+
+ public static boolean hasExtendedMag(net.minecraft.world.item.ItemStack);
+ Code:
+ 0: aload_0
+ 1: getstatic #659 // Field com/ogaba/sa_combat/combat/attachment/AttachmentSlot.MAGAZINE:Lcom/ogaba/sa_combat/combat/attachment/AttachmentSlot;
+ 4: invokestatic #652 // Method com/ogaba/sa_combat/combat/attachment/WeaponAttachmentData.hasAttachmentInSlot:(Lnet/minecraft/world/item/ItemStack;Lcom/ogaba/sa_combat/combat/attachment/AttachmentSlot;)Z
+ 7: ireturn
+
+ public static int magazineCapacity(net.minecraft.world.item.ItemStack);
+ Code:
+ 0: aload_0
+ 1: invokestatic #661 // Method hasExtendedMag:(Lnet/minecraft/world/item/ItemStack;)Z
+ 4: ifeq 12
+ 7: bipush 32
+ 9: goto 14
+ 12: bipush 16
+ 14: ireturn
+
+ public static boolean consumeServerFirePermit(net.minecraft.world.item.ItemStack, long);
+ Code:
+ 0: aload_0
+ 1: invokevirtual #175 // Method net/minecraft/world/item/ItemStack.m_41619_:()Z
+ 4: ifeq 9
+ 7: iconst_0
+ 8: ireturn
+ 9: ldc2_w #664 // long 3l
+ 12: lstore_3
+ 13: ldc2_w #666 // long 5l
+ 16: lstore 5
+ 18: lload_1
+ 19: ldc2_w #664 // long 3l
+ 22: lmul
+ 23: lstore 7
+ 25: aload_0
+ 26: invokevirtual #671 // Method net/minecraft/world/item/ItemStack.m_41784_:()Lnet/minecraft/nbt/CompoundTag;
+ 29: astore 9
+ 31: aload 9
+ 33: ldc #44 // String SACombatNailGunServerNextFireScaled
+ 35: invokevirtual #677 // Method net/minecraft/nbt/CompoundTag.m_128441_:(Ljava/lang/String;)Z
+ 38: ifne 56
+ 41: aload 9
+ 43: ldc #44 // String SACombatNailGunServerNextFireScaled
+ 45: lload 7
+ 47: ldc2_w #666 // long 5l
+ 50: ladd
+ 51: invokevirtual #681 // Method net/minecraft/nbt/CompoundTag.m_128356_:(Ljava/lang/String;J)V
+ 54: iconst_1
+ 55: ireturn
+ 56: aload 9
+ 58: ldc #44 // String SACombatNailGunServerNextFireScaled
+ 60: invokevirtual #685 // Method net/minecraft/nbt/CompoundTag.m_128454_:(Ljava/lang/String;)J
+ 63: lstore 10
+ 65: lload 10
+ 67: lload 7
+ 69: lsub
+ 70: ldc2_w #686 // long 60l
+ 73: lcmp
+ 74: ifle 92
+ 77: aload 9
+ 79: ldc #44 // String SACombatNailGunServerNextFireScaled
+ 81: lload 7
+ 83: ldc2_w #666 // long 5l
+ 86: ladd
+ 87: invokevirtual #681 // Method net/minecraft/nbt/CompoundTag.m_128356_:(Ljava/lang/String;J)V
+ 90: iconst_1
+ 91: ireturn
+ 92: lload 7
+ 94: lload 10
+ 96: lcmp
+ 97: ifge 102
+ 100: iconst_0
+ 101: ireturn
+ 102: lload 7
+ 104: lload 10
+ 106: lsub
+ 107: lstore 12
+ 109: lload 12
+ 111: ldc2_w #666 // long 5l
+ 114: lcmp
+ 115: iflt 127
+ 118: lload 7
+ 120: ldc2_w #666 // long 5l
+ 123: ladd
+ 124: goto 133
+ 127: lload 10
+ 129: ldc2_w #666 // long 5l
+ 132: ladd
+ 133: lstore 14
+ 135: aload 9
+ 137: ldc #44 // String SACombatNailGunServerNextFireScaled
+ 139: lload 14
+ 141: invokevirtual #681 // Method net/minecraft/nbt/CompoundTag.m_128356_:(Ljava/lang/String;J)V
+ 144: iconst_1
+ 145: ireturn
+
+ public static int getMagazine(net.minecraft.world.item.ItemStack);
+ Code:
+ 0: aload_0
+ 1: invokevirtual #175 // Method net/minecraft/world/item/ItemStack.m_41619_:()Z
+ 4: ifne 14
+ 7: aload_0
+ 8: invokevirtual #699 // Method net/minecraft/world/item/ItemStack.m_41783_:()Lnet/minecraft/nbt/CompoundTag;
+ 11: ifnonnull 16
+ 14: iconst_0
+ 15: ireturn
+ 16: aload_0
+ 17: invokevirtual #699 // Method net/minecraft/world/item/ItemStack.m_41783_:()Lnet/minecraft/nbt/CompoundTag;
+ 20: ldc #32 // String SACombatNailGunMagazine
+ 22: invokevirtual #703 // Method net/minecraft/nbt/CompoundTag.m_128451_:(Ljava/lang/String;)I
+ 25: ireturn
+
+ public static void setMagazine(net.minecraft.world.item.ItemStack, int);
+ Code:
+ 0: aload_0
+ 1: invokevirtual #175 // Method net/minecraft/world/item/ItemStack.m_41619_:()Z
+ 4: ifeq 8
+ 7: return
+ 8: aload_0
+ 9: invokevirtual #671 // Method net/minecraft/world/item/ItemStack.m_41784_:()Lnet/minecraft/nbt/CompoundTag;
+ 12: ldc #32 // String SACombatNailGunMagazine
+ 14: iconst_0
+ 15: iload_1
+ 16: invokestatic #146 // Method java/lang/Math.max:(II)I
+ 19: invokevirtual #707 // Method net/minecraft/nbt/CompoundTag.m_128405_:(Ljava/lang/String;I)V
+ 22: return
+
+ public static boolean isReloading(net.minecraft.world.item.ItemStack);
+ Code:
+ 0: aload_0
+ 1: invokevirtual #175 // Method net/minecraft/world/item/ItemStack.m_41619_:()Z
+ 4: ifne 30
+ 7: aload_0
+ 8: invokevirtual #699 // Method net/minecraft/world/item/ItemStack.m_41783_:()Lnet/minecraft/nbt/CompoundTag;
+ 11: ifnull 30
+ 14: aload_0
+ 15: invokevirtual #699 // Method net/minecraft/world/item/ItemStack.m_41783_:()Lnet/minecraft/nbt/CompoundTag;
+ 18: ldc #35 // String SACombatNailGunReloading
+ 20: invokevirtual #711 // Method net/minecraft/nbt/CompoundTag.m_128471_:(Ljava/lang/String;)Z
+ 23: ifeq 30
+ 26: iconst_1
+ 27: goto 31
+ 30: iconst_0
+ 31: ireturn
+
+ private static void setReloading(net.minecraft.world.item.ItemStack, boolean);
+ Code:
+ 0: aload_0
+ 1: invokevirtual #175 // Method net/minecraft/world/item/ItemStack.m_41619_:()Z
+ 4: ifeq 8
+ 7: return
+ 8: iload_1
+ 9: ifeq 25
+ 12: aload_0
+ 13: invokevirtual #671 // Method net/minecraft/world/item/ItemStack.m_41784_:()Lnet/minecraft/nbt/CompoundTag;
+ 16: ldc #35 // String SACombatNailGunReloading
+ 18: iconst_1
+ 19: invokevirtual #715 // Method net/minecraft/nbt/CompoundTag.m_128379_:(Ljava/lang/String;Z)V
+ 22: goto 41
+ 25: aload_0
+ 26: invokevirtual #699 // Method net/minecraft/world/item/ItemStack.m_41783_:()Lnet/minecraft/nbt/CompoundTag;
+ 29: ifnull 41
+ 32: aload_0
+ 33: invokevirtual #699 // Method net/minecraft/world/item/ItemStack.m_41783_:()Lnet/minecraft/nbt/CompoundTag;
+ 36: ldc #35 // String SACombatNailGunReloading
+ 38: invokevirtual #719 // Method net/minecraft/nbt/CompoundTag.m_128473_:(Ljava/lang/String;)V
+ 41: return
+
+ private static int getReloadTarget(net.minecraft.world.item.ItemStack);
+ Code:
+ 0: aload_0
+ 1: invokevirtual #175 // Method net/minecraft/world/item/ItemStack.m_41619_:()Z
+ 4: ifne 14
+ 7: aload_0
+ 8: invokevirtual #699 // Method net/minecraft/world/item/ItemStack.m_41783_:()Lnet/minecraft/nbt/CompoundTag;
+ 11: ifnonnull 18
+ 14: iconst_0
+ 15: goto 27
+ 18: aload_0
+ 19: invokevirtual #699 // Method net/minecraft/world/item/ItemStack.m_41783_:()Lnet/minecraft/nbt/CompoundTag;
+ 22: ldc #38 // String SACombatNailGunReloadTarget
+ 24: invokevirtual #703 // Method net/minecraft/nbt/CompoundTag.m_128451_:(Ljava/lang/String;)I
+ 27: ireturn
+
+ private static void setReloadTarget(net.minecraft.world.item.ItemStack, int);
+ Code:
+ 0: aload_0
+ 1: invokevirtual #175 // Method net/minecraft/world/item/ItemStack.m_41619_:()Z
+ 4: ifeq 8
+ 7: return
+ 8: iload_1
+ 9: ifgt 31
+ 12: aload_0
+ 13: invokevirtual #699 // Method net/minecraft/world/item/ItemStack.m_41783_:()Lnet/minecraft/nbt/CompoundTag;
+ 16: ifnull 41
+ 19: aload_0
+ 20: invokevirtual #699 // Method net/minecraft/world/item/ItemStack.m_41783_:()Lnet/minecraft/nbt/CompoundTag;
+ 23: ldc #38 // String SACombatNailGunReloadTarget
+ 25: invokevirtual #719 // Method net/minecraft/nbt/CompoundTag.m_128473_:(Ljava/lang/String;)V
+ 28: goto 41
+ 31: aload_0
+ 32: invokevirtual #671 // Method net/minecraft/world/item/ItemStack.m_41784_:()Lnet/minecraft/nbt/CompoundTag;
+ 35: ldc #38 // String SACombatNailGunReloadTarget
+ 37: iload_1
+ 38: invokevirtual #707 // Method net/minecraft/nbt/CompoundTag.m_128405_:(Ljava/lang/String;I)V
+ 41: return
+
+ private static long getReloadEndTick(net.minecraft.world.item.ItemStack);
+ Code:
+ 0: aload_0
+ 1: invokevirtual #175 // Method net/minecraft/world/item/ItemStack.m_41619_:()Z
+ 4: ifne 14
+ 7: aload_0
+ 8: invokevirtual #699 // Method net/minecraft/world/item/ItemStack.m_41783_:()Lnet/minecraft/nbt/CompoundTag;
+ 11: ifnonnull 18
+ 14: lconst_0
+ 15: goto 27
+ 18: aload_0
+ 19: invokevirtual #699 // Method net/minecraft/world/item/ItemStack.m_41783_:()Lnet/minecraft/nbt/CompoundTag;
+ 22: ldc #41 // String SACombatNailGunReloadEndTick
+ 24: invokevirtual #685 // Method net/minecraft/nbt/CompoundTag.m_128454_:(Ljava/lang/String;)J
+ 27: lreturn
+
+ private static void setReloadEndTick(net.minecraft.world.item.ItemStack, long);
+ Code:
+ 0: aload_0
+ 1: invokevirtual #175 // Method net/minecraft/world/item/ItemStack.m_41619_:()Z
+ 4: ifne 17
+ 7: aload_0
+ 8: invokevirtual #671 // Method net/minecraft/world/item/ItemStack.m_41784_:()Lnet/minecraft/nbt/CompoundTag;
+ 11: ldc #41 // String SACombatNailGunReloadEndTick
+ 13: lload_1
+ 14: invokevirtual #681 // Method net/minecraft/nbt/CompoundTag.m_128356_:(Ljava/lang/String;J)V
+ 17: return
+
+ private static void markShootAnimation(net.minecraft.world.item.ItemStack);
+ Code:
+ 0: aload_0
+ 1: invokevirtual #175 // Method net/minecraft/world/item/ItemStack.m_41619_:()Z
+ 4: ifne 57
+ 7: aload_0
+ 8: invokestatic #724 // InterfaceMethod software/bernie/geckolib/animatable/GeoItem.getId:(Lnet/minecraft/world/item/ItemStack;)J
+ 11: lstore_1
+ 12: getstatic #726 // Field CLIENT_SHOOT_ANIM_START:Ljava/util/Map;
+ 15: lload_1
+ 16: invokestatic #732 // Method java/lang/Long.valueOf:(J)Ljava/lang/Long;
+ 19: invokestatic #737 // Method net/minecraft/Util.m_137550_:()J
+ 22: invokestatic #732 // Method java/lang/Long.valueOf:(J)Ljava/lang/Long;
+ 25: invokeinterface #743, 3 // InterfaceMethod java/util/Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+ 30: pop
+ 31: getstatic #745 // Field CLIENT_DRAW_ANIM_START:Ljava/util/Map;
+ 34: lload_1
+ 35: invokestatic #732 // Method java/lang/Long.valueOf:(J)Ljava/lang/Long;
+ 38: invokeinterface #749, 2 // InterfaceMethod java/util/Map.remove:(Ljava/lang/Object;)Ljava/lang/Object;
+ 43: pop
+ 44: getstatic #751 // Field CLIENT_LAST_HANDLED_DRAW:Ljava/util/Map;
+ 47: lload_1
+ 48: invokestatic #732 // Method java/lang/Long.valueOf:(J)Ljava/lang/Long;
+ 51: invokeinterface #749, 2 // InterfaceMethod java/util/Map.remove:(Ljava/lang/Object;)Ljava/lang/Object;
+ 56: pop
+ 57: return
+
+ public static void markClientReloadAnimation(net.minecraft.world.item.ItemStack);
+ Code:
+ 0: aload_0
+ 1: ifnull 11
+ 4: aload_0
+ 5: invokevirtual #175 // Method net/minecraft/world/item/ItemStack.m_41619_:()Z
+ 8: ifeq 12
+ 11: return
+ 12: aload_0
+ 13: invokestatic #724 // InterfaceMethod software/bernie/geckolib/animatable/GeoItem.getId:(Lnet/minecraft/world/item/ItemStack;)J
+ 16: lstore_1
+ 17: getstatic #755 // Field CLIENT_RELOAD_ANIM_START:Ljava/util/Map;
+ 20: lload_1
+ 21: invokestatic #732 // Method java/lang/Long.valueOf:(J)Ljava/lang/Long;
+ 24: invokestatic #737 // Method net/minecraft/Util.m_137550_:()J
+ 27: invokestatic #732 // Method java/lang/Long.valueOf:(J)Ljava/lang/Long;
+ 30: invokeinterface #743, 3 // InterfaceMethod java/util/Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+ 35: pop
+ 36: getstatic #757 // Field CLIENT_LAST_HANDLED_RELOAD:Ljava/util/Map;
+ 39: lload_1
+ 40: invokestatic #732 // Method java/lang/Long.valueOf:(J)Ljava/lang/Long;
+ 43: invokeinterface #749, 2 // InterfaceMethod java/util/Map.remove:(Ljava/lang/Object;)Ljava/lang/Object;
+ 48: pop
+ 49: getstatic #745 // Field CLIENT_DRAW_ANIM_START:Ljava/util/Map;
+ 52: lload_1
+ 53: invokestatic #732 // Method java/lang/Long.valueOf:(J)Ljava/lang/Long;
+ 56: invokeinterface #749, 2 // InterfaceMethod java/util/Map.remove:(Ljava/lang/Object;)Ljava/lang/Object;
+ 61: pop
+ 62: getstatic #751 // Field CLIENT_LAST_HANDLED_DRAW:Ljava/util/Map;
+ 65: lload_1
+ 66: invokestatic #732 // Method java/lang/Long.valueOf:(J)Ljava/lang/Long;
+ 69: invokeinterface #749, 2 // InterfaceMethod java/util/Map.remove:(Ljava/lang/Object;)Ljava/lang/Object;
+ 74: pop
+ 75: getstatic #726 // Field CLIENT_SHOOT_ANIM_START:Ljava/util/Map;
+ 78: lload_1
+ 79: invokestatic #732 // Method java/lang/Long.valueOf:(J)Ljava/lang/Long;
+ 82: invokeinterface #749, 2 // InterfaceMethod java/util/Map.remove:(Ljava/lang/Object;)Ljava/lang/Object;
+ 87: pop
+ 88: getstatic #759 // Field CLIENT_LAST_HANDLED_SHOT:Ljava/util/Map;
+ 91: lload_1
+ 92: invokestatic #732 // Method java/lang/Long.valueOf:(J)Ljava/lang/Long;
+ 95: invokeinterface #749, 2 // InterfaceMethod java/util/Map.remove:(Ljava/lang/Object;)Ljava/lang/Object;
+ 100: pop
+ 101: return
+
+ public static boolean isClientReloadAnimationActive(net.minecraft.world.item.ItemStack);
+ Code:
+ 0: aload_0
+ 1: ifnull 11
+ 4: aload_0
+ 5: invokevirtual #175 // Method net/minecraft/world/item/ItemStack.m_41619_:()Z
+ 8: ifeq 13
+ 11: iconst_0
+ 12: ireturn
+ 13: aload_0
+ 14: invokestatic #724 // InterfaceMethod software/bernie/geckolib/animatable/GeoItem.getId:(Lnet/minecraft/world/item/ItemStack;)J
+ 17: lstore_1
+ 18: getstatic #755 // Field CLIENT_RELOAD_ANIM_START:Ljava/util/Map;
+ 21: lload_1
+ 22: invokestatic #732 // Method java/lang/Long.valueOf:(J)Ljava/lang/Long;
+ 25: invokeinterface #762, 2 // InterfaceMethod java/util/Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
+ 30: checkcast #728 // class java/lang/Long
+ 33: astore_3
+ 34: aload_3
+ 35: ifnonnull 40
+ 38: iconst_0
+ 39: ireturn
+ 40: aload_0
+ 41: invokestatic #313 // Method reloadTicksForStack:(Lnet/minecraft/world/item/ItemStack;)I
+ 44: i2l
+ 45: ldc2_w #763 // long 50l
+ 48: lmul
+ 49: ldc2_w #765 // long 100l
+ 52: ladd
+ 53: lstore 4
+ 55: invokestatic #737 // Method net/minecraft/Util.m_137550_:()J
+ 58: aload_3
+ 59: invokevirtual #769 // Method java/lang/Long.longValue:()J
+ 62: lsub
+ 63: lload 4
+ 65: lcmp
+ 66: iflt 84
+ 69: getstatic #755 // Field CLIENT_RELOAD_ANIM_START:Ljava/util/Map;
+ 72: lload_1
+ 73: invokestatic #732 // Method java/lang/Long.valueOf:(J)Ljava/lang/Long;
+ 76: invokeinterface #749, 2 // InterfaceMethod java/util/Map.remove:(Ljava/lang/Object;)Ljava/lang/Object;
+ 81: pop
+ 82: iconst_0
+ 83: ireturn
+ 84: iconst_1
+ 85: ireturn
+
+ private static boolean isDrawAnimationActive(net.minecraft.world.item.ItemStack, long);
+ Code:
+ 0: aload_0
+ 1: invokestatic #724 // InterfaceMethod software/bernie/geckolib/animatable/GeoItem.getId:(Lnet/minecraft/world/item/ItemStack;)J
+ 4: lstore_3
+ 5: getstatic #745 // Field CLIENT_DRAW_ANIM_START:Ljava/util/Map;
+ 8: lload_3
+ 9: invokestatic #732 // Method java/lang/Long.valueOf:(J)Ljava/lang/Long;
+ 12: invokeinterface #762, 2 // InterfaceMethod java/util/Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
+ 17: checkcast #728 // class java/lang/Long
+ 20: astore 5
+ 22: aload 5
+ 24: ifnonnull 29
+ 27: iconst_0
+ 28: ireturn
+ 29: lload_1
+ 30: aload 5
+ 32: invokevirtual #769 // Method java/lang/Long.longValue:()J
+ 35: lsub
+ 36: ldc2_w #119 // long 925l
+ 39: lcmp
+ 40: iflt 71
+ 43: getstatic #745 // Field CLIENT_DRAW_ANIM_START:Ljava/util/Map;
+ 46: lload_3
+ 47: invokestatic #732 // Method java/lang/Long.valueOf:(J)Ljava/lang/Long;
+ 50: invokeinterface #749, 2 // InterfaceMethod java/util/Map.remove:(Ljava/lang/Object;)Ljava/lang/Object;
+ 55: pop
+ 56: getstatic #751 // Field CLIENT_LAST_HANDLED_DRAW:Ljava/util/Map;
+ 59: lload_3
+ 60: invokestatic #732 // Method java/lang/Long.valueOf:(J)Ljava/lang/Long;
+ 63: invokeinterface #749, 2 // InterfaceMethod java/util/Map.remove:(Ljava/lang/Object;)Ljava/lang/Object;
+ 68: pop
+ 69: iconst_0
+ 70: ireturn
+ 71: iconst_1
+ 72: ireturn
+
+ private static void resetForNewStart(long, java.util.Map, java.util.Map, software.bernie.geckolib.core.animation.AnimationController);
+ Code:
+ 0: aload_2
+ 1: lload_0
+ 2: invokestatic #732 // Method java/lang/Long.valueOf:(J)Ljava/lang/Long;
+ 5: invokeinterface #762, 2 // InterfaceMethod java/util/Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
+ 10: checkcast #728 // class java/lang/Long
+ 13: astore 5
+ 15: aload 5
+ 17: ifnull 56
+ 20: aload 5
+ 22: aload_3
+ 23: lload_0
+ 24: invokestatic #732 // Method java/lang/Long.valueOf:(J)Ljava/lang/Long;
+ 27: invokeinterface #762, 2 // InterfaceMethod java/util/Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
+ 32: invokevirtual #781 // Method java/lang/Long.equals:(Ljava/lang/Object;)Z
+ 35: ifne 56
+ 38: aload 4
+ 40: invokevirtual #785 // Method software/bernie/geckolib/core/animation/AnimationController.forceAnimationReset:()V
+ 43: aload_3
+ 44: lload_0
+ 45: invokestatic #732 // Method java/lang/Long.valueOf:(J)Ljava/lang/Long;
+ 48: aload 5
+ 50: invokeinterface #743, 3 // InterfaceMethod java/util/Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+ 55: pop
+ 56: return
+
+ private static boolean isShootAnimationActive(net.minecraft.world.item.ItemStack);
+ Code:
+ 0: aload_0
+ 1: invokevirtual #175 // Method net/minecraft/world/item/ItemStack.m_41619_:()Z
+ 4: ifeq 9
+ 7: iconst_0
+ 8: ireturn
+ 9: getstatic #726 // Field CLIENT_SHOOT_ANIM_START:Ljava/util/Map;
+ 12: aload_0
+ 13: invokestatic #724 // InterfaceMethod software/bernie/geckolib/animatable/GeoItem.getId:(Lnet/minecraft/world/item/ItemStack;)J
+ 16: invokestatic #732 // Method java/lang/Long.valueOf:(J)Ljava/lang/Long;
+ 19: invokeinterface #762, 2 // InterfaceMethod java/util/Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
+ 24: checkcast #728 // class java/lang/Long
+ 27: astore_1
+ 28: aload_1
+ 29: ifnonnull 34
+ 32: iconst_0
+ 33: ireturn
+ 34: invokestatic #737 // Method net/minecraft/Util.m_137550_:()J
+ 37: aload_1
+ 38: invokevirtual #769 // Method java/lang/Long.longValue:()J
+ 41: lsub
+ 42: lstore_2
+ 43: lload_2
+ 44: ldc2_w #57 // long 390l
+ 47: lcmp
+ 48: iflt 87
+ 51: aload_0
+ 52: invokestatic #724 // InterfaceMethod software/bernie/geckolib/animatable/GeoItem.getId:(Lnet/minecraft/world/item/ItemStack;)J
+ 55: lstore 4
+ 57: getstatic #726 // Field CLIENT_SHOOT_ANIM_START:Ljava/util/Map;
+ 60: lload 4
+ 62: invokestatic #732 // Method java/lang/Long.valueOf:(J)Ljava/lang/Long;
+ 65: invokeinterface #749, 2 // InterfaceMethod java/util/Map.remove:(Ljava/lang/Object;)Ljava/lang/Object;
+ 70: pop
+ 71: getstatic #759 // Field CLIENT_LAST_HANDLED_SHOT:Ljava/util/Map;
+ 74: lload 4
+ 76: invokestatic #732 // Method java/lang/Long.valueOf:(J)Ljava/lang/Long;
+ 79: invokeinterface #749, 2 // InterfaceMethod java/util/Map.remove:(Ljava/lang/Object;)Ljava/lang/Object;
+ 84: pop
+ 85: iconst_0
+ 86: ireturn
+ 87: lload_2
+ 88: lconst_0
+ 89: lcmp
+ 90: iflt 97
+ 93: iconst_1
+ 94: goto 98
+ 97: iconst_0
+ 98: ireturn
+
+ public static void clearClientAnimationState();
+ Code:
+ 0: getstatic #726 // Field CLIENT_SHOOT_ANIM_START:Ljava/util/Map;
+ 3: invokeinterface #797, 1 // InterfaceMethod java/util/Map.clear:()V
+ 8: getstatic #759 // Field CLIENT_LAST_HANDLED_SHOT:Ljava/util/Map;
+ 11: invokeinterface #797, 1 // InterfaceMethod java/util/Map.clear:()V
+ 16: getstatic #799 // Field CLIENT_LAST_HAND_RENDER:Ljava/util/Map;
+ 19: invokeinterface #797, 1 // InterfaceMethod java/util/Map.clear:()V
+ 24: getstatic #745 // Field CLIENT_DRAW_ANIM_START:Ljava/util/Map;
+ 27: invokeinterface #797, 1 // InterfaceMethod java/util/Map.clear:()V
+ 32: getstatic #751 // Field CLIENT_LAST_HANDLED_DRAW:Ljava/util/Map;
+ 35: invokeinterface #797, 1 // InterfaceMethod java/util/Map.clear:()V
+ 40: getstatic #755 // Field CLIENT_RELOAD_ANIM_START:Ljava/util/Map;
+ 43: invokeinterface #797, 1 // InterfaceMethod java/util/Map.clear:()V
+ 48: getstatic #757 // Field CLIENT_LAST_HANDLED_RELOAD:Ljava/util/Map;
+ 51: invokeinterface #797, 1 // InterfaceMethod java/util/Map.clear:()V
+ 56: return
+
+ private static boolean isNailAmmo(net.minecraft.world.item.ItemStack);
+ Code:
+ 0: aload_0
+ 1: invokevirtual #175 // Method net/minecraft/world/item/ItemStack.m_41619_:()Z
+ 4: ifeq 9
+ 7: iconst_0
+ 8: ireturn
+ 9: getstatic #806 // Field net/minecraftforge/registries/ForgeRegistries.ITEMS:Lnet/minecraftforge/registries/IForgeRegistry;
+ 12: aload_0
+ 13: invokevirtual #179 // Method net/minecraft/world/item/ItemStack.m_41720_:()Lnet/minecraft/world/item/Item;
+ 16: invokeinterface #812, 2 // InterfaceMethod net/minecraftforge/registries/IForgeRegistry.getKey:(Ljava/lang/Object;)Lnet/minecraft/resources/ResourceLocation;
+ 21: astore_1
+ 22: getstatic #814 // Field NAIL_ITEM_ID:Lnet/minecraft/resources/ResourceLocation;
+ 25: aload_1
+ 26: invokevirtual #817 // Method net/minecraft/resources/ResourceLocation.equals:(Ljava/lang/Object;)Z
+ 29: ireturn
+
+ public static int countReserveAmmo(net.minecraft.world.entity.player.Player);
+ Code:
+ 0: iconst_0
+ 1: istore_1
+ 2: aload_0
+ 3: invokevirtual #821 // Method net/minecraft/world/entity/player/Player.m_150109_:()Lnet/minecraft/world/entity/player/Inventory;
+ 6: getfield #827 // Field net/minecraft/world/entity/player/Inventory.f_35974_:Lnet/minecraft/core/NonNullList;
+ 9: invokevirtual #833 // Method net/minecraft/core/NonNullList.iterator:()Ljava/util/Iterator;
+ 12: astore_2
+ 13: aload_2
+ 14: invokeinterface #838, 1 // InterfaceMethod java/util/Iterator.hasNext:()Z
+ 19: ifeq 49
+ 22: aload_2
+ 23: invokeinterface #841, 1 // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
+ 28: checkcast #171 // class net/minecraft/world/item/ItemStack
+ 31: astore_3
+ 32: aload_3
+ 33: invokestatic #843 // Method isNailAmmo:(Lnet/minecraft/world/item/ItemStack;)Z
+ 36: ifeq 46
+ 39: iload_1
+ 40: aload_3
+ 41: invokevirtual #846 // Method net/minecraft/world/item/ItemStack.m_41613_:()I
+ 44: iadd
+ 45: istore_1
+ 46: goto 13
+ 49: iload_1
+ 50: ireturn
+
+ private static void consumeReserveAmmo(net.minecraft.world.entity.player.Player, int);
+ Code:
+ 0: iload_1
+ 1: istore_2
+ 2: aload_0
+ 3: invokevirtual #821 // Method net/minecraft/world/entity/player/Player.m_150109_:()Lnet/minecraft/world/entity/player/Inventory;
+ 6: getfield #827 // Field net/minecraft/world/entity/player/Inventory.f_35974_:Lnet/minecraft/core/NonNullList;
+ 9: invokevirtual #833 // Method net/minecraft/core/NonNullList.iterator:()Ljava/util/Iterator;
+ 12: astore_3
+ 13: aload_3
+ 14: invokeinterface #838, 1 // InterfaceMethod java/util/Iterator.hasNext:()Z
+ 19: ifeq 77
+ 22: aload_3
+ 23: invokeinterface #841, 1 // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
+ 28: checkcast #171 // class net/minecraft/world/item/ItemStack
+ 31: astore 4
+ 33: iload_2
+ 34: ifgt 40
+ 37: goto 77
+ 40: aload 4
+ 42: invokestatic #843 // Method isNailAmmo:(Lnet/minecraft/world/item/ItemStack;)Z
+ 45: ifne 51
+ 48: goto 13
+ 51: iload_2
+ 52: aload 4
+ 54: invokevirtual #846 // Method net/minecraft/world/item/ItemStack.m_41613_:()I
+ 57: invokestatic #294 // Method java/lang/Math.min:(II)I
+ 60: istore 5
+ 62: aload 4
+ 64: iload 5
+ 66: invokevirtual #851 // Method net/minecraft/world/item/ItemStack.m_41774_:(I)V
+ 69: iload_2
+ 70: iload 5
+ 72: isub
+ 73: istore_2
+ 74: goto 13
+ 77: return
+
+ public void registerControllers(software.bernie.geckolib.core.animation.AnimatableManager$ControllerRegistrar);
+ Code:
+ 0: aload_1
+ 1: iconst_1
+ 2: anewarray #14 // class software/bernie/geckolib/core/animation/AnimationController
+ 5: dup
+ 6: iconst_0
+ 7: new #14 // class software/bernie/geckolib/core/animation/AnimationController
+ 10: dup
+ 11: aload_0
+ 12: ldc_w #857 // String nail_gun
+ 15: iconst_0
+ 16: invokedynamic #867, 0 // InvokeDynamic #1:handle:()Lsoftware/bernie/geckolib/core/animation/AnimationController$AnimationStateHandler;
+ 21: invokespecial #870 // Method software/bernie/geckolib/core/animation/AnimationController."":(Lsoftware/bernie/geckolib/core/animatable/GeoAnimatable;Ljava/lang/String;ILsoftware/bernie/geckolib/core/animation/AnimationController$AnimationStateHandler;)V
+ 24: invokedynamic #879, 0 // InvokeDynamic #2:handle:()Lsoftware/bernie/geckolib/core/animation/AnimationController$SoundKeyframeHandler;
+ 29: invokevirtual #883 // Method software/bernie/geckolib/core/animation/AnimationController.setSoundKeyframeHandler:(Lsoftware/bernie/geckolib/core/animation/AnimationController$SoundKeyframeHandler;)Lsoftware/bernie/geckolib/core/animation/AnimationController;
+ 32: aastore
+ 33: invokevirtual #887 // Method software/bernie/geckolib/core/animation/AnimatableManager$ControllerRegistrar.add:([Lsoftware/bernie/geckolib/core/animation/AnimationController;)Lsoftware/bernie/geckolib/core/animation/AnimatableManager$ControllerRegistrar;
+ 36: pop
+ 37: return
+
+ private static net.minecraft.sounds.SoundEvent nailGunKeyframeSound(java.lang.String);
+ Code:
+ 0: aload_0
+ 1: ifnonnull 6
+ 4: aconst_null
+ 5: areturn
+ 6: aload_0
+ 7: astore_1
+ 8: iconst_m1
+ 9: istore_2
+ 10: aload_1
+ 11: invokevirtual #897 // Method java/lang/String.hashCode:()I
+ 14: lookupswitch { // 6
+
+ -1641162943: 87
+
+ 663556368: 102
+
+ 663556369: 117
+
+ 663556370: 132
+
+ 663556371: 147
+
+ 1186712812: 72
+ default: 159
+ }
+ 72: aload_1
+ 73: ldc_w #899 // String nail_gun_draw
+ 76: invokevirtual #900 // Method java/lang/String.equals:(Ljava/lang/Object;)Z
+ 79: ifeq 159
+ 82: iconst_0
+ 83: istore_2
+ 84: goto 159
+ 87: aload_1
+ 88: ldc_w #902 // String nail_gun_reload
+ 91: invokevirtual #900 // Method java/lang/String.equals:(Ljava/lang/Object;)Z
+ 94: ifeq 159
+ 97: iconst_1
+ 98: istore_2
+ 99: goto 159
+ 102: aload_1
+ 103: ldc_w #904 // String nail_gun_reload1
+ 106: invokevirtual #900 // Method java/lang/String.equals:(Ljava/lang/Object;)Z
+ 109: ifeq 159
+ 112: iconst_2
+ 113: istore_2
+ 114: goto 159
+ 117: aload_1
+ 118: ldc_w #906 // String nail_gun_reload2
+ 121: invokevirtual #900 // Method java/lang/String.equals:(Ljava/lang/Object;)Z
+ 124: ifeq 159
+ 127: iconst_3
+ 128: istore_2
+ 129: goto 159
+ 132: aload_1
+ 133: ldc_w #908 // String nail_gun_reload3
+ 136: invokevirtual #900 // Method java/lang/String.equals:(Ljava/lang/Object;)Z
+ 139: ifeq 159
+ 142: iconst_4
+ 143: istore_2
+ 144: goto 159
+ 147: aload_1
+ 148: ldc_w #910 // String nail_gun_reload4
+ 151: invokevirtual #900 // Method java/lang/String.equals:(Ljava/lang/Object;)Z
+ 154: ifeq 159
+ 157: iconst_5
+ 158: istore_2
+ 159: iload_2
+ 160: tableswitch { // 0 to 5
+
+ 0: 200
+
+ 1: 212
+
+ 2: 224
+
+ 3: 236
+
+ 4: 248
+
+ 5: 260
+ default: 272
+ }
+ 200: getstatic #913 // Field com/ogaba/sa_combat/registry/ModSounds.NAIL_GUN_DRAW:Lnet/minecraftforge/registries/RegistryObject;
+ 203: invokevirtual #466 // Method net/minecraftforge/registries/RegistryObject.get:()Ljava/lang/Object;
+ 206: checkcast #468 // class net/minecraft/sounds/SoundEvent
+ 209: goto 273
+ 212: getstatic #916 // Field com/ogaba/sa_combat/registry/ModSounds.NAIL_GUN_RELOAD:Lnet/minecraftforge/registries/RegistryObject;
+ 215: invokevirtual #466 // Method net/minecraftforge/registries/RegistryObject.get:()Ljava/lang/Object;
+ 218: checkcast #468 // class net/minecraft/sounds/SoundEvent
+ 221: goto 273
+ 224: getstatic #919 // Field com/ogaba/sa_combat/registry/ModSounds.NAIL_GUN_RELOAD1:Lnet/minecraftforge/registries/RegistryObject;
+ 227: invokevirtual #466 // Method net/minecraftforge/registries/RegistryObject.get:()Ljava/lang/Object;
+ 230: checkcast #468 // class net/minecraft/sounds/SoundEvent
+ 233: goto 273
+ 236: getstatic #922 // Field com/ogaba/sa_combat/registry/ModSounds.NAIL_GUN_RELOAD2:Lnet/minecraftforge/registries/RegistryObject;
+ 239: invokevirtual #466 // Method net/minecraftforge/registries/RegistryObject.get:()Ljava/lang/Object;
+ 242: checkcast #468 // class net/minecraft/sounds/SoundEvent
+ 245: goto 273
+ 248: getstatic #925 // Field com/ogaba/sa_combat/registry/ModSounds.NAIL_GUN_RELOAD3:Lnet/minecraftforge/registries/RegistryObject;
+ 251: invokevirtual #466 // Method net/minecraftforge/registries/RegistryObject.get:()Ljava/lang/Object;
+ 254: checkcast #468 // class net/minecraft/sounds/SoundEvent
+ 257: goto 273
+ 260: getstatic #928 // Field com/ogaba/sa_combat/registry/ModSounds.NAIL_GUN_RELOAD4:Lnet/minecraftforge/registries/RegistryObject;
+ 263: invokevirtual #466 // Method net/minecraftforge/registries/RegistryObject.get:()Ljava/lang/Object;
+ 266: checkcast #468 // class net/minecraft/sounds/SoundEvent
+ 269: goto 273
+ 272: aconst_null
+ 273: areturn
+
+ private static boolean isHandRender(net.minecraft.world.item.ItemDisplayContext);
+ Code:
+ 0: aload_0
+ 1: getstatic #937 // Field net/minecraft/world/item/ItemDisplayContext.FIRST_PERSON_LEFT_HAND:Lnet/minecraft/world/item/ItemDisplayContext;
+ 4: if_acmpeq 14
+ 7: aload_0
+ 8: getstatic #940 // Field net/minecraft/world/item/ItemDisplayContext.FIRST_PERSON_RIGHT_HAND:Lnet/minecraft/world/item/ItemDisplayContext;
+ 11: if_acmpne 18
+ 14: iconst_1
+ 15: goto 19
+ 18: iconst_0
+ 19: ireturn
+
+ private static void lambda$registerControllers$1(software.bernie.geckolib.core.keyframe.event.SoundKeyframeEvent);
+ Code:
+ 0: invokestatic #947 // Method software/bernie/geckolib/util/ClientUtils.getClientPlayer:()Lnet/minecraft/world/entity/player/Player;
+ 3: astore_1
+ 4: aload_1
+ 5: ifnonnull 9
+ 8: return
+ 9: aload_0
+ 10: invokevirtual #953 // Method software/bernie/geckolib/core/keyframe/event/SoundKeyframeEvent.getKeyframeData:()Lsoftware/bernie/geckolib/core/keyframe/event/data/SoundKeyframeData;
+ 13: invokevirtual #959 // Method software/bernie/geckolib/core/keyframe/event/data/SoundKeyframeData.getSound:()Ljava/lang/String;
+ 16: invokestatic #961 // Method nailGunKeyframeSound:(Ljava/lang/String;)Lnet/minecraft/sounds/SoundEvent;
+ 19: astore_2
+ 20: aload_2
+ 21: ifnull 50
+ 24: aload_1
+ 25: invokevirtual #965 // Method net/minecraft/world/entity/player/Player.m_9236_:()Lnet/minecraft/world/level/Level;
+ 28: aload_1
+ 29: invokevirtual #448 // Method net/minecraft/world/entity/player/Player.m_20185_:()D
+ 32: aload_1
+ 33: invokevirtual #451 // Method net/minecraft/world/entity/player/Player.m_20186_:()D
+ 36: aload_1
+ 37: invokevirtual #454 // Method net/minecraft/world/entity/player/Player.m_20189_:()D
+ 40: aload_2
+ 41: getstatic #474 // Field net/minecraft/sounds/SoundSource.PLAYERS:Lnet/minecraft/sounds/SoundSource;
+ 44: fconst_1
+ 45: fconst_1
+ 46: iconst_0
+ 47: invokevirtual #495 // Method net/minecraft/world/level/Level.m_7785_:(DDDLnet/minecraft/sounds/SoundEvent;Lnet/minecraft/sounds/SoundSource;FFZ)V
+ 50: return
+
+ private static software.bernie.geckolib.core.object.PlayState lambda$registerControllers$0(software.bernie.geckolib.core.animation.AnimationState);
+ Code:
+ 0: aload_0
+ 1: getstatic #975 // Field software/bernie/geckolib/constant/DataTickets.ITEMSTACK:Lsoftware/bernie/geckolib/core/object/DataTicket;
+ 4: invokevirtual #981 // Method software/bernie/geckolib/core/animation/AnimationState.getData:(Lsoftware/bernie/geckolib/core/object/DataTicket;)Ljava/lang/Object;
+ 7: checkcast #171 // class net/minecraft/world/item/ItemStack
+ 10: astore_1
+ 11: aload_1
+ 12: ifnull 22
+ 15: aload_1
+ 16: invokevirtual #175 // Method net/minecraft/world/item/ItemStack.m_41619_:()Z
+ 19: ifeq 26
+ 22: getstatic #987 // Field software/bernie/geckolib/core/object/PlayState.STOP:Lsoftware/bernie/geckolib/core/object/PlayState;
+ 25: areturn
+ 26: aload_0
+ 27: getstatic #990 // Field software/bernie/geckolib/constant/DataTickets.ITEM_RENDER_PERSPECTIVE:Lsoftware/bernie/geckolib/core/object/DataTicket;
+ 30: invokevirtual #981 // Method software/bernie/geckolib/core/animation/AnimationState.getData:(Lsoftware/bernie/geckolib/core/object/DataTicket;)Ljava/lang/Object;
+ 33: checkcast #933 // class net/minecraft/world/item/ItemDisplayContext
+ 36: astore_2
+ 37: aload_2
+ 38: invokestatic #992 // Method isHandRender:(Lnet/minecraft/world/item/ItemDisplayContext;)Z
+ 41: istore_3
+ 42: aload_1
+ 43: invokestatic #724 // InterfaceMethod software/bernie/geckolib/animatable/GeoItem.getId:(Lnet/minecraft/world/item/ItemStack;)J
+ 46: lstore 4
+ 48: invokestatic #737 // Method net/minecraft/Util.m_137550_:()J
+ 51: lstore 6
+ 53: iload_3
+ 54: ifne 80
+ 57: aload_0
+ 58: invokevirtual #996 // Method software/bernie/geckolib/core/animation/AnimationState.getController:()Lsoftware/bernie/geckolib/core/animation/AnimationController;
+ 61: dconst_1
+ 62: invokevirtual #1000 // Method software/bernie/geckolib/core/animation/AnimationController.setAnimationSpeed:(D)Lsoftware/bernie/geckolib/core/animation/AnimationController;
+ 65: pop
+ 66: aload_0
+ 67: invokevirtual #996 // Method software/bernie/geckolib/core/animation/AnimationState.getController:()Lsoftware/bernie/geckolib/core/animation/AnimationController;
+ 70: getstatic #1002 // Field ANIM_IDLE:Lsoftware/bernie/geckolib/core/animation/RawAnimation;
+ 73: invokevirtual #1006 // Method software/bernie/geckolib/core/animation/AnimationController.setAnimation:(Lsoftware/bernie/geckolib/core/animation/RawAnimation;)V
+ 76: getstatic #1009 // Field software/bernie/geckolib/core/object/PlayState.CONTINUE:Lsoftware/bernie/geckolib/core/object/PlayState;
+ 79: areturn
+ 80: getstatic #799 // Field CLIENT_LAST_HAND_RENDER:Ljava/util/Map;
+ 83: lload 4
+ 85: invokestatic #732 // Method java/lang/Long.valueOf:(J)Ljava/lang/Long;
+ 88: lload 6
+ 90: invokestatic #732 // Method java/lang/Long.valueOf:(J)Ljava/lang/Long;
+ 93: invokeinterface #743, 3 // InterfaceMethod java/util/Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+ 98: checkcast #728 // class java/lang/Long
+ 101: astore 8
+ 103: aload 8
+ 105: ifnull 123
+ 108: lload 6
+ 110: aload 8
+ 112: invokevirtual #769 // Method java/lang/Long.longValue:()J
+ 115: lsub
+ 116: ldc2_w #122 // long 700l
+ 119: lcmp
+ 120: ifle 156
+ 123: getstatic #745 // Field CLIENT_DRAW_ANIM_START:Ljava/util/Map;
+ 126: lload 4
+ 128: invokestatic #732 // Method java/lang/Long.valueOf:(J)Ljava/lang/Long;
+ 131: lload 6
+ 133: invokestatic #732 // Method java/lang/Long.valueOf:(J)Ljava/lang/Long;
+ 136: invokeinterface #743, 3 // InterfaceMethod java/util/Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+ 141: pop
+ 142: getstatic #751 // Field CLIENT_LAST_HANDLED_DRAW:Ljava/util/Map;
+ 145: lload 4
+ 147: invokestatic #732 // Method java/lang/Long.valueOf:(J)Ljava/lang/Long;
+ 150: invokeinterface #749, 2 // InterfaceMethod java/util/Map.remove:(Ljava/lang/Object;)Ljava/lang/Object;
+ 155: pop
+ 156: aload_1
+ 157: invokestatic #246 // Method isReloading:(Lnet/minecraft/world/item/ItemStack;)Z
+ 160: istore 9
+ 162: aload_1
+ 163: invokestatic #1011 // Method isClientReloadAnimationActive:(Lnet/minecraft/world/item/ItemStack;)Z
+ 166: istore 10
+ 168: iload 9
+ 170: ifeq 216
+ 173: iload 10
+ 175: ifne 216
+ 178: getstatic #757 // Field CLIENT_LAST_HANDLED_RELOAD:Ljava/util/Map;
+ 181: lload 4
+ 183: invokestatic #732 // Method java/lang/Long.valueOf:(J)Ljava/lang/Long;
+ 186: invokeinterface #1014, 2 // InterfaceMethod java/util/Map.containsKey:(Ljava/lang/Object;)Z
+ 191: ifne 216
+ 194: getstatic #755 // Field CLIENT_RELOAD_ANIM_START:Ljava/util/Map;
+ 197: lload 4
+ 199: invokestatic #732 // Method java/lang/Long.valueOf:(J)Ljava/lang/Long;
+ 202: lload 6
+ 204: invokestatic #732 // Method java/lang/Long.valueOf:(J)Ljava/lang/Long;
+ 207: invokeinterface #1017, 3 // InterfaceMethod java/util/Map.putIfAbsent:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+ 212: pop
+ 213: iconst_1
+ 214: istore 10
+ 216: iload 9
+ 218: ifne 226
+ 221: iload 10
+ 223: ifeq 280
+ 226: lload 4
+ 228: getstatic #755 // Field CLIENT_RELOAD_ANIM_START:Ljava/util/Map;
+ 231: getstatic #757 // Field CLIENT_LAST_HANDLED_RELOAD:Ljava/util/Map;
+ 234: aload_0
+ 235: invokevirtual #996 // Method software/bernie/geckolib/core/animation/AnimationState.getController:()Lsoftware/bernie/geckolib/core/animation/AnimationController;
+ 238: invokestatic #1019 // Method resetForNewStart:(JLjava/util/Map;Ljava/util/Map;Lsoftware/bernie/geckolib/core/animation/AnimationController;)V
+ 241: ldc2_w #1020 // double 37.0d
+ 244: iconst_1
+ 245: aload_1
+ 246: invokestatic #313 // Method reloadTicksForStack:(Lnet/minecraft/world/item/ItemStack;)I
+ 249: invokestatic #146 // Method java/lang/Math.max:(II)I
+ 252: i2d
+ 253: ddiv
+ 254: dstore 11
+ 256: aload_0
+ 257: invokevirtual #996 // Method software/bernie/geckolib/core/animation/AnimationState.getController:()Lsoftware/bernie/geckolib/core/animation/AnimationController;
+ 260: dload 11
+ 262: invokevirtual #1000 // Method software/bernie/geckolib/core/animation/AnimationController.setAnimationSpeed:(D)Lsoftware/bernie/geckolib/core/animation/AnimationController;
+ 265: pop
+ 266: aload_0
+ 267: invokevirtual #996 // Method software/bernie/geckolib/core/animation/AnimationState.getController:()Lsoftware/bernie/geckolib/core/animation/AnimationController;
+ 270: getstatic #1023 // Field ANIM_RELOAD:Lsoftware/bernie/geckolib/core/animation/RawAnimation;
+ 273: invokevirtual #1006 // Method software/bernie/geckolib/core/animation/AnimationController.setAnimation:(Lsoftware/bernie/geckolib/core/animation/RawAnimation;)V
+ 276: getstatic #1009 // Field software/bernie/geckolib/core/object/PlayState.CONTINUE:Lsoftware/bernie/geckolib/core/object/PlayState;
+ 279: areturn
+ 280: aload_1
+ 281: invokestatic #1025 // Method isShootAnimationActive:(Lnet/minecraft/world/item/ItemStack;)Z
+ 284: ifeq 377
+ 287: getstatic #726 // Field CLIENT_SHOOT_ANIM_START:Ljava/util/Map;
+ 290: lload 4
+ 292: invokestatic #732 // Method java/lang/Long.valueOf:(J)Ljava/lang/Long;
+ 295: invokeinterface #762, 2 // InterfaceMethod java/util/Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
+ 300: checkcast #728 // class java/lang/Long
+ 303: astore 11
+ 305: aload 11
+ 307: ifnull 354
+ 310: aload 11
+ 312: getstatic #759 // Field CLIENT_LAST_HANDLED_SHOT:Ljava/util/Map;
+ 315: lload 4
+ 317: invokestatic #732 // Method java/lang/Long.valueOf:(J)Ljava/lang/Long;
+ 320: invokeinterface #762, 2 // InterfaceMethod java/util/Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
+ 325: invokevirtual #781 // Method java/lang/Long.equals:(Ljava/lang/Object;)Z
+ 328: ifne 354
+ 331: aload_0
+ 332: invokevirtual #996 // Method software/bernie/geckolib/core/animation/AnimationState.getController:()Lsoftware/bernie/geckolib/core/animation/AnimationController;
+ 335: invokevirtual #785 // Method software/bernie/geckolib/core/animation/AnimationController.forceAnimationReset:()V
+ 338: getstatic #759 // Field CLIENT_LAST_HANDLED_SHOT:Ljava/util/Map;
+ 341: lload 4
+ 343: invokestatic #732 // Method java/lang/Long.valueOf:(J)Ljava/lang/Long;
+ 346: aload 11
+ 348: invokeinterface #743, 3 // InterfaceMethod java/util/Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+ 353: pop
+ 354: aload_0
+ 355: invokevirtual #996 // Method software/bernie/geckolib/core/animation/AnimationState.getController:()Lsoftware/bernie/geckolib/core/animation/AnimationController;
+ 358: dconst_1
+ 359: invokevirtual #1000 // Method software/bernie/geckolib/core/animation/AnimationController.setAnimationSpeed:(D)Lsoftware/bernie/geckolib/core/animation/AnimationController;
+ 362: pop
+ 363: aload_0
+ 364: invokevirtual #996 // Method software/bernie/geckolib/core/animation/AnimationState.getController:()Lsoftware/bernie/geckolib/core/animation/AnimationController;
+ 367: getstatic #1027 // Field ANIM_SHOOT:Lsoftware/bernie/geckolib/core/animation/RawAnimation;
+ 370: invokevirtual #1006 // Method software/bernie/geckolib/core/animation/AnimationController.setAnimation:(Lsoftware/bernie/geckolib/core/animation/RawAnimation;)V
+ 373: getstatic #1009 // Field software/bernie/geckolib/core/object/PlayState.CONTINUE:Lsoftware/bernie/geckolib/core/object/PlayState;
+ 376: areturn
+ 377: aload_1
+ 378: lload 6
+ 380: invokestatic #1029 // Method isDrawAnimationActive:(Lnet/minecraft/world/item/ItemStack;J)Z
+ 383: ifeq 424
+ 386: lload 4
+ 388: getstatic #745 // Field CLIENT_DRAW_ANIM_START:Ljava/util/Map;
+ 391: getstatic #751 // Field CLIENT_LAST_HANDLED_DRAW:Ljava/util/Map;
+ 394: aload_0
+ 395: invokevirtual #996 // Method software/bernie/geckolib/core/animation/AnimationState.getController:()Lsoftware/bernie/geckolib/core/animation/AnimationController;
+ 398: invokestatic #1019 // Method resetForNewStart:(JLjava/util/Map;Ljava/util/Map;Lsoftware/bernie/geckolib/core/animation/AnimationController;)V
+ 401: aload_0
+ 402: invokevirtual #996 // Method software/bernie/geckolib/core/animation/AnimationState.getController:()Lsoftware/bernie/geckolib/core/animation/AnimationController;
+ 405: dconst_1
+ 406: invokevirtual #1000 // Method software/bernie/geckolib/core/animation/AnimationController.setAnimationSpeed:(D)Lsoftware/bernie/geckolib/core/animation/AnimationController;
+ 409: pop
+ 410: aload_0
+ 411: invokevirtual #996 // Method software/bernie/geckolib/core/animation/AnimationState.getController:()Lsoftware/bernie/geckolib/core/animation/AnimationController;
+ 414: getstatic #1031 // Field ANIM_DRAW:Lsoftware/bernie/geckolib/core/animation/RawAnimation;
+ 417: invokevirtual #1006 // Method software/bernie/geckolib/core/animation/AnimationController.setAnimation:(Lsoftware/bernie/geckolib/core/animation/RawAnimation;)V
+ 420: getstatic #1009 // Field software/bernie/geckolib/core/object/PlayState.CONTINUE:Lsoftware/bernie/geckolib/core/object/PlayState;
+ 423: areturn
+ 424: aload_0
+ 425: invokevirtual #996 // Method software/bernie/geckolib/core/animation/AnimationState.getController:()Lsoftware/bernie/geckolib/core/animation/AnimationController;
+ 428: dconst_1
+ 429: invokevirtual #1000 // Method software/bernie/geckolib/core/animation/AnimationController.setAnimationSpeed:(D)Lsoftware/bernie/geckolib/core/animation/AnimationController;
+ 432: pop
+ 433: aload_0
+ 434: invokevirtual #996 // Method software/bernie/geckolib/core/animation/AnimationState.getController:()Lsoftware/bernie/geckolib/core/animation/AnimationController;
+ 437: getstatic #1002 // Field ANIM_IDLE:Lsoftware/bernie/geckolib/core/animation/RawAnimation;
+ 440: invokevirtual #1006 // Method software/bernie/geckolib/core/animation/AnimationController.setAnimation:(Lsoftware/bernie/geckolib/core/animation/RawAnimation;)V
+ 443: getstatic #1009 // Field software/bernie/geckolib/core/object/PlayState.CONTINUE:Lsoftware/bernie/geckolib/core/object/PlayState;
+ 446: areturn
+
+ static {};
+ Code:
+ 0: new #816 // class net/minecraft/resources/ResourceLocation
+ 3: dup
+ 4: ldc_w #1044 // String sa_core
+ 7: ldc_w #1046 // String nails
+ 10: invokespecial #1049 // Method net/minecraft/resources/ResourceLocation."":(Ljava/lang/String;Ljava/lang/String;)V
+ 13: putstatic #814 // Field NAIL_ITEM_ID:Lnet/minecraft/resources/ResourceLocation;
+ 16: invokestatic #1055 // Method software/bernie/geckolib/core/animation/RawAnimation.begin:()Lsoftware/bernie/geckolib/core/animation/RawAnimation;
+ 19: ldc_w #1057 // String idle
+ 22: invokevirtual #1061 // Method software/bernie/geckolib/core/animation/RawAnimation.thenLoop:(Ljava/lang/String;)Lsoftware/bernie/geckolib/core/animation/RawAnimation;
+ 25: putstatic #1002 // Field ANIM_IDLE:Lsoftware/bernie/geckolib/core/animation/RawAnimation;
+ 28: invokestatic #1055 // Method software/bernie/geckolib/core/animation/RawAnimation.begin:()Lsoftware/bernie/geckolib/core/animation/RawAnimation;
+ 31: ldc_w #1063 // String draw
+ 34: invokevirtual #1066 // Method software/bernie/geckolib/core/animation/RawAnimation.thenPlayAndHold:(Ljava/lang/String;)Lsoftware/bernie/geckolib/core/animation/RawAnimation;
+ 37: putstatic #1031 // Field ANIM_DRAW:Lsoftware/bernie/geckolib/core/animation/RawAnimation;
+ 40: invokestatic #1055 // Method software/bernie/geckolib/core/animation/RawAnimation.begin:()Lsoftware/bernie/geckolib/core/animation/RawAnimation;
+ 43: ldc_w #1068 // String shoot_normal
+ 46: invokevirtual #1066 // Method software/bernie/geckolib/core/animation/RawAnimation.thenPlayAndHold:(Ljava/lang/String;)Lsoftware/bernie/geckolib/core/animation/RawAnimation;
+ 49: putstatic #1027 // Field ANIM_SHOOT:Lsoftware/bernie/geckolib/core/animation/RawAnimation;
+ 52: invokestatic #1055 // Method software/bernie/geckolib/core/animation/RawAnimation.begin:()Lsoftware/bernie/geckolib/core/animation/RawAnimation;
+ 55: ldc_w #1070 // String reload
+ 58: invokevirtual #1066 // Method software/bernie/geckolib/core/animation/RawAnimation.thenPlayAndHold:(Ljava/lang/String;)Lsoftware/bernie/geckolib/core/animation/RawAnimation;
+ 61: putstatic #1023 // Field ANIM_RELOAD:Lsoftware/bernie/geckolib/core/animation/RawAnimation;
+ 64: new #1072 // class java/util/concurrent/ConcurrentHashMap
+ 67: dup
+ 68: invokespecial #1074 // Method java/util/concurrent/ConcurrentHashMap."":()V
+ 71: putstatic #726 // Field CLIENT_SHOOT_ANIM_START:Ljava/util/Map;
+ 74: new #1072 // class java/util/concurrent/ConcurrentHashMap
+ 77: dup
+ 78: invokespecial #1074 // Method java/util/concurrent/ConcurrentHashMap."":()V
+ 81: putstatic #759 // Field CLIENT_LAST_HANDLED_SHOT:Ljava/util/Map;
+ 84: new #1072 // class java/util/concurrent/ConcurrentHashMap
+ 87: dup
+ 88: invokespecial #1074 // Method java/util/concurrent/ConcurrentHashMap."":()V
+ 91: putstatic #799 // Field CLIENT_LAST_HAND_RENDER:Ljava/util/Map;
+ 94: new #1072 // class java/util/concurrent/ConcurrentHashMap
+ 97: dup
+ 98: invokespecial #1074 // Method java/util/concurrent/ConcurrentHashMap."":()V
+ 101: putstatic #745 // Field CLIENT_DRAW_ANIM_START:Ljava/util/Map;
+ 104: new #1072 // class java/util/concurrent/ConcurrentHashMap
+ 107: dup
+ 108: invokespecial #1074 // Method java/util/concurrent/ConcurrentHashMap."":()V
+ 111: putstatic #751 // Field CLIENT_LAST_HANDLED_DRAW:Ljava/util/Map;
+ 114: new #1072 // class java/util/concurrent/ConcurrentHashMap
+ 117: dup
+ 118: invokespecial #1074 // Method java/util/concurrent/ConcurrentHashMap."":()V
+ 121: putstatic #755 // Field CLIENT_RELOAD_ANIM_START:Ljava/util/Map;
+ 124: new #1072 // class java/util/concurrent/ConcurrentHashMap
+ 127: dup
+ 128: invokespecial #1074 // Method java/util/concurrent/ConcurrentHashMap."":()V
+ 131: putstatic #757 // Field CLIENT_LAST_HANDLED_RELOAD:Ljava/util/Map;
+ 134: return
+}
+
+
+==================== com.ogaba.sa_combat.network.packet.FireNailGunC2SPacket ====================
+Compiled from "FireNailGunC2SPacket.java"
+public class com.ogaba.sa_combat.network.packet.FireNailGunC2SPacket {
+ private final net.minecraft.world.InteractionHand hand;
+
+ private final float aimProgress;
+
+ public com.ogaba.sa_combat.network.packet.FireNailGunC2SPacket(net.minecraft.world.InteractionHand);
+ Code:
+ 0: aload_0
+ 1: aload_1
+ 2: fconst_0
+ 3: invokespecial #24 // Method "":(Lnet/minecraft/world/InteractionHand;F)V
+ 6: return
+
+ public com.ogaba.sa_combat.network.packet.FireNailGunC2SPacket(net.minecraft.world.InteractionHand, float);
+ Code:
+ 0: aload_0
+ 1: invokespecial #29 // Method java/lang/Object."":()V
+ 4: aload_0
+ 5: aload_1
+ 6: putfield #31 // Field hand:Lnet/minecraft/world/InteractionHand;
+ 9: aload_0
+ 10: fload_2
+ 11: putfield #33 // Field aimProgress:F
+ 14: return
+
+ public static void encode(com.ogaba.sa_combat.network.packet.FireNailGunC2SPacket, net.minecraft.network.FriendlyByteBuf);
+ Code:
+ 0: aload_1
+ 1: aload_0
+ 2: getfield #31 // Field hand:Lnet/minecraft/world/InteractionHand;
+ 5: invokevirtual #41 // Method net/minecraft/network/FriendlyByteBuf.m_130068_:(Ljava/lang/Enum;)Lnet/minecraft/network/FriendlyByteBuf;
+ 8: pop
+ 9: aload_1
+ 10: aload_0
+ 11: getfield #33 // Field aimProgress:F
+ 14: invokevirtual #45 // Method net/minecraft/network/FriendlyByteBuf.writeFloat:(F)Lio/netty/buffer/ByteBuf;
+ 17: pop
+ 18: return
+
+ public static com.ogaba.sa_combat.network.packet.FireNailGunC2SPacket decode(net.minecraft.network.FriendlyByteBuf);
+ Code:
+ 0: new #2 // class com/ogaba/sa_combat/network/packet/FireNailGunC2SPacket
+ 3: dup
+ 4: aload_0
+ 5: ldc #52 // class net/minecraft/world/InteractionHand
+ 7: invokevirtual #56 // Method net/minecraft/network/FriendlyByteBuf.m_130066_:(Ljava/lang/Class;)Ljava/lang/Enum;
+ 10: checkcast #52 // class net/minecraft/world/InteractionHand
+ 13: aload_0
+ 14: invokevirtual #60 // Method net/minecraft/network/FriendlyByteBuf.readFloat:()F
+ 17: invokespecial #24 // Method "":(Lnet/minecraft/world/InteractionHand;F)V
+ 20: areturn
+
+ public static void handle(com.ogaba.sa_combat.network.packet.FireNailGunC2SPacket, java.util.function.Supplier);
+ Code:
+ 0: aload_1
+ 1: invokeinterface #69, 1 // InterfaceMethod java/util/function/Supplier.get:()Ljava/lang/Object;
+ 6: checkcast #7 // class net/minecraftforge/network/NetworkEvent$Context
+ 9: astore_2
+ 10: aload_2
+ 11: aload_2
+ 12: aload_0
+ 13: invokedynamic #86, 0 // InvokeDynamic #0:run:(Lnet/minecraftforge/network/NetworkEvent$Context;Lcom/ogaba/sa_combat/network/packet/FireNailGunC2SPacket;)Ljava/lang/Runnable;
+ 18: invokevirtual #90 // Method net/minecraftforge/network/NetworkEvent$Context.enqueueWork:(Ljava/lang/Runnable;)Ljava/util/concurrent/CompletableFuture;
+ 21: pop
+ 22: aload_2
+ 23: iconst_1
+ 24: invokevirtual #94 // Method net/minecraftforge/network/NetworkEvent$Context.setPacketHandled:(Z)V
+ 27: return
+
+ private static void lambda$handle$0(net.minecraftforge.network.NetworkEvent$Context, com.ogaba.sa_combat.network.packet.FireNailGunC2SPacket);
+ Code:
+ 0: aload_0
+ 1: invokevirtual #103 // Method net/minecraftforge/network/NetworkEvent$Context.getSender:()Lnet/minecraft/server/level/ServerPlayer;
+ 4: astore_2
+ 5: aload_2
+ 6: ifnonnull 10
+ 9: return
+ 10: aload_1
+ 11: getfield #31 // Field hand:Lnet/minecraft/world/InteractionHand;
+ 14: getstatic #108 // Field net/minecraft/world/InteractionHand.MAIN_HAND:Lnet/minecraft/world/InteractionHand;
+ 17: if_acmpeq 21
+ 20: return
+ 21: aload_2
+ 22: aload_1
+ 23: getfield #31 // Field hand:Lnet/minecraft/world/InteractionHand;
+ 26: invokevirtual #112 // Method net/minecraft/server/level/ServerPlayer.m_21120_:(Lnet/minecraft/world/InteractionHand;)Lnet/minecraft/world/item/ItemStack;
+ 29: astore_3
+ 30: aload_3
+ 31: invokevirtual #118 // Method net/minecraft/world/item/ItemStack.m_41720_:()Lnet/minecraft/world/item/Item;
+ 34: astore 5
+ 36: aload 5
+ 38: instanceof #120 // class com/ogaba/sa_combat/combat/weapon/NailGunItem
+ 41: ifeq 54
+ 44: aload 5
+ 46: checkcast #120 // class com/ogaba/sa_combat/combat/weapon/NailGunItem
+ 49: astore 4
+ 51: goto 55
+ 54: return
+ 55: aload_3
+ 56: invokestatic #124 // Method com/ogaba/sa_combat/combat/weapon/NailGunItem.isReloading:(Lnet/minecraft/world/item/ItemStack;)Z
+ 59: ifne 76
+ 62: aload_2
+ 63: invokevirtual #128 // Method net/minecraft/server/level/ServerPlayer.m_20142_:()Z
+ 66: ifne 76
+ 69: aload_3
+ 70: invokestatic #132 // Method com/ogaba/sa_combat/combat/weapon/NailGunItem.getMagazine:(Lnet/minecraft/world/item/ItemStack;)I
+ 73: ifgt 77
+ 76: return
+ 77: aload_2
+ 78: invokevirtual #136 // Method net/minecraft/server/level/ServerPlayer.m_36335_:()Lnet/minecraft/world/item/ItemCooldowns;
+ 81: aload 4
+ 83: invokevirtual #142 // Method net/minecraft/world/item/ItemCooldowns.m_41519_:(Lnet/minecraft/world/item/Item;)Z
+ 86: ifne 103
+ 89: aload_3
+ 90: aload_2
+ 91: invokevirtual #146 // Method net/minecraft/server/level/ServerPlayer.m_9236_:()Lnet/minecraft/world/level/Level;
+ 94: invokevirtual #152 // Method net/minecraft/world/level/Level.m_46467_:()J
+ 97: invokestatic #156 // Method com/ogaba/sa_combat/combat/weapon/NailGunItem.consumeServerFirePermit:(Lnet/minecraft/world/item/ItemStack;J)Z
+ 100: ifne 104
+ 103: return
+ 104: aload 4
+ 106: aload_2
+ 107: invokevirtual #146 // Method net/minecraft/server/level/ServerPlayer.m_9236_:()Lnet/minecraft/world/level/Level;
+ 110: aload_2
+ 111: aload_3
+ 112: aload_1
+ 113: getfield #31 // Field hand:Lnet/minecraft/world/InteractionHand;
+ 116: aload_1
+ 117: getfield #33 // Field aimProgress:F
+ 120: invokevirtual #160 // Method com/ogaba/sa_combat/combat/weapon/NailGunItem.fire:(Lnet/minecraft/world/level/Level;Lnet/minecraft/world/entity/player/Player;Lnet/minecraft/world/item/ItemStack;Lnet/minecraft/world/InteractionHand;F)V
+ 123: aload_2
+ 124: invokevirtual #136 // Method net/minecraft/server/level/ServerPlayer.m_36335_:()Lnet/minecraft/world/item/ItemCooldowns;
+ 127: aload 4
+ 129: iconst_1
+ 130: invokevirtual #164 // Method net/minecraft/world/item/ItemCooldowns.m_41524_:(Lnet/minecraft/world/item/Item;I)V
+ 133: return
+}
diff --git a/_sa_hanhua_out/_tmp/jianbing_gen.jpg b/_sa_hanhua_out/_tmp/jianbing_gen.jpg
new file mode 100644
index 0000000..3377809
Binary files /dev/null and b/_sa_hanhua_out/_tmp/jianbing_gen.jpg differ
diff --git a/_sa_hanhua_out/_tmp/list_strings_events.py b/_sa_hanhua_out/_tmp/list_strings_events.py
new file mode 100644
index 0000000..52c2bc4
--- /dev/null
+++ b/_sa_hanhua_out/_tmp/list_strings_events.py
@@ -0,0 +1,26 @@
+import zipfile, os, subprocess, re
+
+jar = r'e:\MCStudioDownload\work\3027246179@qq.com\Cpp\AddOn\309c2d420bc84ee986db9cdd070ff02a\_sa_hanhua_out\sa_essentials-forge-1.20.1-1.0.0.jar'
+out = r'e:\MCStudioDownload\work\3027246179@qq.com\Cpp\AddOn\309c2d420bc84ee986db9cdd070ff02a\_sa_hanhua_out\_tmp\classes'
+
+t = 'com/ogaba/sa_combat/client/event/SACombatClientForgeEvents.class'
+p = os.path.join(out, t.replace('/', os.sep))
+os.makedirs(os.path.dirname(p), exist_ok=True)
+with zipfile.ZipFile(jar) as z:
+ with open(p, 'wb') as f:
+ f.write(z.read(t))
+
+javap = r'D:\我的世界\bin\javap.EXE'
+cname = t[:-6].replace('/', '.')
+r = subprocess.run([javap, '-c', '-p', '-classpath', out, cname], capture_output=True, text=True, encoding='utf-8', errors='replace')
+text = r.stdout if r.returncode == 0 else r.stderr
+with open(r'e:\MCStudioDownload\work\3027246179@qq.com\Cpp\AddOn\309c2d420bc84ee986db9cdd070ff02a\_sa_hanhua_out\_tmp\javap_events.txt', 'w', encoding='utf-8') as f:
+ f.write(text)
+print('len:', len(text))
+
+# 提取所有 String 常量(含上下文:前一行的方法归属很难,只列常量本身 + ldc 所在行)
+print('\n===== 所有 String 常量 =====')
+for line in text.splitlines():
+ m = re.search(r'(?:ldc|ldc_w)\s+#\d+\s+// String (.+)', line.strip())
+ if m:
+ print(' ', m.group(1))
diff --git a/_sa_hanhua_out/_tmp/make_jianbing.py b/_sa_hanhua_out/_tmp/make_jianbing.py
new file mode 100644
index 0000000..7d1e0a2
--- /dev/null
+++ b/_sa_hanhua_out/_tmp/make_jianbing.py
@@ -0,0 +1,17 @@
+# -*- coding: utf-8 -*-
+from PIL import Image
+src = r"e:\MCStudioDownload\work\3027246179@qq.com\Cpp\AddOn\309c2d420bc84ee986db9cdd070ff02a\_sa_hanhua_out\_tmp\jianbing_gen.jpg"
+dst = r"e:\MCStudioDownload\work\3027246179@qq.com\Cpp\AddOn\309c2d420bc84ee986db9cdd070ff02a\resource_pack_t7eJjrxY\textures\items\jianbing.png"
+im = Image.open(src).convert("RGBA")
+# 生成图为 JPG,无透明通道;先裁切到主体并缩放到16x16等比例,再把背景置为透明
+# 直接等比缩放整图到16x16(原图为方形,保持比例不变形)
+resized = im.resize((16, 16), Image.LANCZOS)
+# 对接近白色的背景擦除为透明(JPG无alpha)
+pix = resized.load()
+for y in range(16):
+ for x in range(16):
+ r, g, b, a = pix[x, y]
+ if r > 245 and g > 240 and b > 230:
+ pix[x, y] = (r, g, b, 0)
+resized.save(dst)
+print("saved", resized.size)
\ No newline at end of file
diff --git a/_sa_hanhua_out/_tmp/probe_attach.py b/_sa_hanhua_out/_tmp/probe_attach.py
new file mode 100644
index 0000000..24510e6
--- /dev/null
+++ b/_sa_hanhua_out/_tmp/probe_attach.py
@@ -0,0 +1,8 @@
+# -*- coding: utf-8 -*-
+import struct
+src = r"c:\Users\30272\.trae-cn\attachments\6abd5dab88c975032f77b873\45664c29-17cf-4473-8de0-b4f99b618bb9_8d157aea-2a26-4cb5-8f07-a59b4c212fa5_Jianbing.png"
+with open(src, "rb") as f:
+ head = f.read(16)
+print("magic hex:", head[:16].hex())
+print("signature:", head[:8])
+# PNG: 89504e470d0a1a0a WEBP: 52494646....57454250 JPEG: ffd8ff GIF: 47494638
\ No newline at end of file
diff --git a/_sa_hanhua_out/_tmp/read_blueprint.py b/_sa_hanhua_out/_tmp/read_blueprint.py
new file mode 100644
index 0000000..f0b978d
--- /dev/null
+++ b/_sa_hanhua_out/_tmp/read_blueprint.py
@@ -0,0 +1,8 @@
+import zipfile, json
+
+f = r'e:\MCStudioDownload\work\3027246179@qq.com\Cpp\AddOn\309c2d420bc84ee986db9cdd070ff02a\_sa_hanhua_out\sa_essentials-forge-1.20.1-1.0.0.jar'
+z = zipfile.ZipFile(f)
+for n in ['data/sa_combat/sa_combat/blueprints/chainsaw_sword.json',
+ 'data/sa_combat/sa_combat/blueprints/brutalizer.json']:
+ print('===', n)
+ print(z.read(n).decode('utf-8'))
diff --git a/_sa_hanhua_out/_tmp/read_modstoml.py b/_sa_hanhua_out/_tmp/read_modstoml.py
new file mode 100644
index 0000000..4307795
--- /dev/null
+++ b/_sa_hanhua_out/_tmp/read_modstoml.py
@@ -0,0 +1,20 @@
+import zipfile
+
+base = r'e:\MCStudioDownload\work\3027246179@qq.com\Cpp\AddOn\309c2d420bc84ee986db9cdd070ff02a\_sa_hanhua_out'
+jars = {
+ 'essentials': base + r'\sa_essentials-forge-1.20.1-1.0.0.jar',
+ 'lib': base + r'\sa_lib-forge-1.20.1-1.0.1.jar',
+ 'decor': base + r'\sa_decor-forge-1.20.1-1.0.3.jar',
+}
+
+for name, jar in jars.items():
+ print('='*30, name, '='*30)
+ with zipfile.ZipFile(jar) as z:
+ if 'META-INF/mods.toml' in z.namelist():
+ print(z.read('META-INF/mods.toml').decode('utf-8'))
+ else:
+ for n in z.namelist():
+ if n.endswith('mods.toml'):
+ print('found:', n)
+ print(z.read(n).decode('utf-8'))
+ print()
diff --git a/_sa_hanhua_out/_tmp/scan_blueprint.py b/_sa_hanhua_out/_tmp/scan_blueprint.py
new file mode 100644
index 0000000..f2136a3
--- /dev/null
+++ b/_sa_hanhua_out/_tmp/scan_blueprint.py
@@ -0,0 +1,13 @@
+import zipfile
+
+f = r'e:\MCStudioDownload\work\3027246179@qq.com\Cpp\AddOn\309c2d420bc84ee986db9cdd070ff02a\_sa_hanhua_out\sa_essentials-forge-1.20.1-1.0.0.jar'
+z = zipfile.ZipFile(f)
+print('=== jar 顶层条目(data/ 相关) ===')
+for n in z.namelist():
+ if n.startswith('data/') and (n.endswith('.json')):
+ print(' ', n)
+print()
+print('=== Blueprint 相关类 ===')
+for n in z.namelist():
+ if n.endswith('.class') and 'blueprint' in n.lower():
+ print(' ', n)
diff --git a/_sa_hanhua_out/_tmp/scan_english_phrases.py b/_sa_hanhua_out/_tmp/scan_english_phrases.py
new file mode 100644
index 0000000..307b0f5
--- /dev/null
+++ b/_sa_hanhua_out/_tmp/scan_english_phrases.py
@@ -0,0 +1,30 @@
+import zipfile, re
+
+base = r'e:\MCStudioDownload\work\3027246179@qq.com\Cpp\AddOn\309c2d420bc84ee986db9cdd070ff02a\_sa_hanhua_out'
+jar = base + r'\sa_essentials-forge-1.20.1-1.0.0.jar'
+
+# 从 class 字节中提取含空格的英文短语(连续 ASCII 段内,含空格、多为字符串字面量而非标识符)
+pat = re.compile(rb'[A-Za-z][A-Za-z ]{7,}')
+results = {}
+with zipfile.ZipFile(jar) as z:
+ for n in z.namelist():
+ if not n.endswith('.class'):
+ continue
+ try:
+ b = z.read(n)
+ except Exception:
+ continue
+ # 只取 ASCII 区段(去掉高位字节,避免误连)
+ ascii_blob = bytes(c if 32 <= c < 127 else 0x20 for c in b)
+ for m in pat.finditer(ascii_blob):
+ s = m.group().decode('ascii')
+ if ' ' not in s:
+ continue
+ s = s.strip()
+ if len(s) < 8:
+ continue
+ results.setdefault(s, []).append(n)
+
+print('找到含空格的英文短语 %d 个(去重):' % len(results))
+for s in sorted(results):
+ print(' %-50s %s' % (s, results[s][0]))
diff --git a/_sa_hanhua_out/_tmp/scan_keys.py b/_sa_hanhua_out/_tmp/scan_keys.py
new file mode 100644
index 0000000..f779d98
--- /dev/null
+++ b/_sa_hanhua_out/_tmp/scan_keys.py
@@ -0,0 +1,30 @@
+import zipfile, json, re
+
+f = r'e:\MCStudioDownload\work\3027246179@qq.com\Cpp\AddOn\309c2d420bc84ee986db9cdd070ff02a\_sa_hanhua_out\sa_essentials-forge-1.20.1-1.0.0.jar'
+z = zipfile.ZipFile(f)
+en = json.loads(z.read('assets/sa_combat/lang/en_us.json').decode('utf-8'))
+zh = json.loads(z.read('assets/sa_combat/lang/zh_cn.json').decode('utf-8'))
+
+print('=== en_us 中所有 blueprint.* key(及其zh值) ===')
+for k, v in en.items():
+ if 'blueprint' in k:
+ print(f' {k} = {v!r} | zh: {zh.get(k, "<缺失>")!r}')
+
+print()
+print('=== 运行时 class 引用的 lang key(sa_combat namespace) ===')
+pat = re.compile(rb'(?:tooltip|gui|container|block|item|creativetab|key|menu|entity|description)\.[a-z0-9_]+\.[a-z0-9_.]+')
+refs = {}
+for n in z.namelist():
+ if n.endswith('.class') and 'datagen' not in n:
+ data = z.read(n)
+ for m in pat.findall(data):
+ try:
+ s = m.decode()
+ except:
+ continue
+ if s.startswith('tooltip.') or s.startswith('gui.') or s.startswith('creativetab.') or s.startswith('key.') or s.startswith('menu.'):
+ refs.setdefault(s, set()).add(n)
+for k in sorted(refs):
+ print(f' {k}')
+ for c in sorted(refs[k]):
+ print(f' <- {c}')
diff --git a/_sa_hanhua_out/_tmp/scan_reload.py b/_sa_hanhua_out/_tmp/scan_reload.py
new file mode 100644
index 0000000..1b9c93d
--- /dev/null
+++ b/_sa_hanhua_out/_tmp/scan_reload.py
@@ -0,0 +1,32 @@
+import zipfile, re
+
+base = r'e:\MCStudioDownload\work\3027246179@qq.com\Cpp\AddOn\309c2d420bc84ee986db9cdd070ff02a\_sa_hanhua_out'
+jars = {
+ 'essentials': base + r'\sa_essentials-forge-1.20.1-1.0.0.jar',
+ 'lib': base + r'\sa_lib-forge-1.20.1-1.0.1.jar',
+ 'decor': base + r'\sa_decor-forge-1.20.1-1.0.3.jar',
+}
+
+pat = re.compile(r"Reloading", re.IGNORECASE)
+for name, jar in jars.items():
+ hits = []
+ with zipfile.ZipFile(jar) as z:
+ for n in z.namelist():
+ if n.endswith('/') or n.endswith('.png') or n.endswith('.jpg') or n.endswith('.ogg'):
+ continue
+ try:
+ b = z.read(n)
+ except Exception:
+ continue
+ if n.endswith('.class'):
+ s = ''.join(chr(c) for c in b if 32 <= c < 127 or c in (9, 10, 13))
+ else:
+ try:
+ s = b.decode('utf-8', errors='ignore')
+ except Exception:
+ continue
+ if pat.search(s):
+ hits.append(n)
+ print(f'[{name}] Reloading 命中: {len(hits)}')
+ for h in hits:
+ print(' ', h)
diff --git a/_sa_hanhua_out/_tmp/scan_render_consts.py b/_sa_hanhua_out/_tmp/scan_render_consts.py
new file mode 100644
index 0000000..daa1139
--- /dev/null
+++ b/_sa_hanhua_out/_tmp/scan_render_consts.py
@@ -0,0 +1,48 @@
+import zipfile, os, subprocess, re, shutil
+
+jar = r'e:\MCStudioDownload\work\3027246179@qq.com\Cpp\AddOn\309c2d420bc84ee986db9cdd070ff02a\_sa_hanhua_out\sa_essentials-forge-1.20.1-1.0.0.jar'
+out = r'e:\MCStudioDownload\work\3027246179@qq.com\Cpp\AddOn\309c2d420bc84ee986db9cdd070ff02a\_sa_hanhua_out\_tmp\classes'
+
+# 候选:所有渲染/HUD/overlay 类
+cands = []
+with zipfile.ZipFile(jar) as z:
+ for n in z.namelist():
+ if n.endswith('.class') and ('/render/' in n or '/renderer/' in n or '/event/' in n or '/tooltip/' in n or 'Overlay' in n or 'Hud' in n or 'HUD' in n or 'Gui' in n):
+ cands.append(n)
+
+javap = r'D:\我的世界\bin\javap.EXE'
+if not os.path.exists(javap):
+ javap = shutil.which('javap')
+
+const_pat = re.compile(r'(?:ldc|ldc_w)\s+#\d+\s+// String (.+)')
+skip = {'minecraft','sa_combat','sa_core','sa_survival','sa_decor','nails','textures/'}
+report = []
+for t in sorted(cands):
+ p = os.path.join(out, t.replace('/', os.sep))
+ os.makedirs(os.path.dirname(p), exist_ok=True)
+ with zipfile.ZipFile(jar) as z:
+ try:
+ with open(p, 'wb') as f:
+ f.write(z.read(t))
+ except KeyError:
+ continue
+ cname = t[:-6].replace('/', '.')
+ r = subprocess.run([javap, '-c', '-p', '-classpath', out, cname], capture_output=True, text=True, encoding='utf-8', errors='replace')
+ text = r.stdout if r.returncode == 0 else r.stderr
+ consts = [m.group(1) for m in const_pat.finditer(text)]
+ # 过滤明显非显示文本
+ interesting = []
+ for s in consts:
+ if s in skip or s.startswith('textures/'):
+ continue
+ if s.isdigit() or (len(s) < 4):
+ continue
+ interesting.append(s)
+ if interesting:
+ report.append('== %s ==' % cname)
+ for s in interesting:
+ report.append(' ' + s)
+
+with open(r'e:\MCStudioDownload\work\3027246179@qq.com\Cpp\AddOn\309c2d420bc84ee986db9cdd070ff02a\_sa_hanhua_out\_tmp\consts_render.txt', 'w', encoding='utf-8') as f:
+ f.write('\n'.join(report))
+print('\n'.join(report[:400]))
diff --git a/_sa_hanhua_out/_tmp/split_food_tab.py b/_sa_hanhua_out/_tmp/split_food_tab.py
new file mode 100644
index 0000000..d3ee3d6
--- /dev/null
+++ b/_sa_hanhua_out/_tmp/split_food_tab.py
@@ -0,0 +1,55 @@
+# -*- coding: utf-8 -*-
+"""把 44 个食物物品分到独立分页 dn_sa_food(食物),材料保留 dn_sa"""
+import os, json, csv
+
+BASE = r'e:\MCStudioDownload\work\3027246179@qq.com\Cpp\AddOn\309c2d420bc84ee986db9cdd070ff02a'
+DROP = {'box_of_nails', 'box_of_paperclips', 'box_of_screws', 'gunpowder_bottle', 'rope',
+ 'water_bottle', 'water_bottle2', 'blank', 'empty_glass_bottle', 'falsh_lights',
+ 'cellphone', 'jerry_can', 'dirty_water_bottle'}
+
+# 材料集合(63)
+mats = set()
+with open(os.path.join(BASE, '_sa_materials.csv'), encoding='utf-8-sig') as f:
+ for row in csv.reader(f):
+ if row and row[1].endswith('.png') and row[0].isdigit() and row[1][:-4] not in DROP:
+ mats.add(row[1][:-4])
+
+BEHDIR = os.path.join(BASE, 'behavior_pack_kcH4M5u0/netease_items_beh')
+food_count, mat_count = 0, 0
+for fn in sorted(os.listdir(BEHDIR)):
+ if not fn.endswith('.json'):
+ continue
+ name = fn[len('dn_sa_'):-5]
+ p = os.path.join(BEHDIR, fn)
+ d = json.load(open(p, encoding='utf-8'))
+ if name in mats:
+ mat_count += 1 # 材料,保持 dn_sa
+ else:
+ d['minecraft:item']['description']['category'] = 'dn_sa_food'
+ json.dump(d, open(p, 'w', encoding='utf-8'), ensure_ascii=False, indent=4)
+ food_count += 1
+print('食物 category 改为 dn_sa_food:', food_count, '| 材料保持 dn_sa:', mat_count)
+
+# tab.json 添加食物分页
+TP = os.path.join(BASE, 'behavior_pack_kcH4M5u0/netease_tab/tab.json')
+t = json.load(open(TP, encoding='utf-8'))
+t['category'].append({
+ 'name': 'dn_sa_food',
+ 'labelText': 'dn_sa:tab_food',
+ 'icon': 'textures/items/burger'
+})
+json.dump(t, open(TP, 'w', encoding='utf-8'), ensure_ascii=False, indent=4)
+print('tab.json 分页数:', len(t['category']))
+
+# lang 添加分页标题
+LP = os.path.join(BASE, 'resource_pack_t7eJjrxY/texts/zh_CN.lang')
+lang = open(LP, encoding='utf-8').read()
+if 'dn_sa:tab_food=' not in lang:
+ open(LP, 'a', encoding='utf-8').write('\ndn_sa:tab_food=食物\n')
+ print('lang 添加: dn_sa:tab_food=食物')
+else:
+ print('lang 已有 tab_food')
+
+# 验证
+beh = [f for f in os.listdir(BEHDIR) if f.endswith('.json')]
+print('beh json 总数:', len(beh))
diff --git a/_sa_hanhua_out/_tmp/sync_names.py b/_sa_hanhua_out/_tmp/sync_names.py
new file mode 100644
index 0000000..2e699fb
--- /dev/null
+++ b/_sa_hanhua_out/_tmp/sync_names.py
@@ -0,0 +1,61 @@
+# -*- coding: utf-8 -*-
+"""对比 Java 模组 sa_core 汉化,统一网易版 66 个材料的中文名"""
+import zipfile, json, os, csv
+
+BASE = r'e:\MCStudioDownload\work\3027246179@qq.com\Cpp\AddOn\309c2d420bc84ee986db9cdd070ff02a'
+DROP = {'box_of_nails', 'box_of_paperclips', 'box_of_screws', 'gunpowder_bottle', 'rope',
+ 'water_bottle', 'water_bottle2', 'blank', 'empty_glass_bottle', 'falsh_lights'}
+
+# 1) Java 版 sa_core 汉化物品名映射
+z = zipfile.ZipFile(os.path.join(BASE, '_sa_hanhua_out', 'sa_lib-forge-1.20.1-1.0.1.jar'))
+zh = json.loads(z.read('assets/sa_core/lang/zh_cn.json'))
+z.close()
+jnames = {}
+for k, v in zh.items():
+ # 格式: item.sa_core.(无 .name 后缀)
+ if k.startswith('item.sa_core.') and '.' not in k[len('item.sa_core.'):]:
+ jnames[k[len('item.sa_core.'):]] = v
+print('Java 版物品名条目:', len(jnames))
+
+# 2) 66 个材料
+mats = []
+with open(os.path.join(BASE, '_sa_materials.csv'), encoding='utf-8-sig') as f:
+ for row in csv.reader(f):
+ if row and row[1].endswith('.png') and row[0].isdigit() and row[1][:-4] not in DROP:
+ mats.append(row[1][:-4])
+print('网易版材料数:', len(mats))
+
+# 3) 对比 lang
+LP = os.path.join(BASE, 'resource_pack_t7eJjrxY/texts/zh_CN.lang')
+lang = open(LP, encoding='utf-8').read()
+replaced, no_java, same = [], [], []
+lines = lang.splitlines()
+new_lines = []
+for l in lines:
+ hit = None
+ for m in mats:
+ prefix = 'item.dn_sa:%s.name=' % m
+ if l.startswith(prefix):
+ hit = (m, l[len(prefix):])
+ break
+ if hit:
+ m, cur = hit
+ if m in jnames:
+ jv = jnames[m]
+ if jv != cur:
+ new_lines.append('%s%s' % (prefix, jv))
+ replaced.append((m, cur, jv))
+ else:
+ new_lines.append(l)
+ same.append((m, jv))
+ else:
+ new_lines.append(l)
+ no_java.append((m, cur))
+ else:
+ new_lines.append(l)
+open(LP, 'w', encoding='utf-8').write('\n'.join(new_lines) + ('\n' if new_lines else ''))
+print('已替换(与Java版不一致):', len(replaced))
+for m, c, j in replaced: print(' 改:', m, '| 原:', c, '->', j)
+print('一致未改:', len(same))
+print('Java版无此名称(保留网易名):', len(no_java))
+for m, c in no_java: print(' 保留:', m, '=', c)
diff --git a/_sa_hanhua_out/_tmp/verify_matchbox.py b/_sa_hanhua_out/_tmp/verify_matchbox.py
new file mode 100644
index 0000000..3b9aa6b
--- /dev/null
+++ b/_sa_hanhua_out/_tmp/verify_matchbox.py
@@ -0,0 +1,22 @@
+# -*- coding: utf-8 -*-
+import json, py_compile, os
+
+base = r"e:\MCStudioDownload\work\3027246179@qq.com\Cpp\AddOn\309c2d420bc84ee986db9cdd070ff02a\behavior_pack_kcH4M5u0"
+
+# 1. JSON 语法检查
+for jf in [
+ os.path.join(base, "netease_items_beh", "dn_sa_matchbox.json"),
+ os.path.join(base, "manifest.json"),
+]:
+ with open(jf, "r", encoding="utf-8") as f:
+ data = json.load(f)
+ print("JSON OK:", os.path.basename(jf), "->", data)
+
+# 2. Python 脚本语法检查(py_compile,本机为 Python3,语法为 py2/py3 兼容)
+for pf in ["scripts/__init__.py", "scripts/modMain.py", "scripts/matchboxServer.py"]:
+ p = os.path.join(base, pf)
+ try:
+ py_compile.compile(p, doraise=True)
+ print("PY OK:", pf)
+ except py_compile.PyCompileError as e:
+ print("PY ERROR:", pf, e)
diff --git a/_sa_hanhua_out/_tmp/verify_xlsx.py b/_sa_hanhua_out/_tmp/verify_xlsx.py
new file mode 100644
index 0000000..9341715
--- /dev/null
+++ b/_sa_hanhua_out/_tmp/verify_xlsx.py
@@ -0,0 +1,10 @@
+import openpyxl, os
+base = r"e:\MCStudioDownload\work\3027246179@qq.com\Cpp\AddOn\309c2d420bc84ee986db9cdd070ff02a"
+wb = openpyxl.load_workbook(os.path.join(base, "幸存者军火库食物表.xlsx"))
+ws = wb["全食物数据表"]
+ids = ["taco","taco_rotten","coxinha","rotten_coxinha","coxinha_dough","raw_coxinha",
+ "pastel_dough","raw_cheese_pastel","raw_meat_pastel","raw_wind_pastel",
+ "meat_pastel","wind_pastel","pacoquita"]
+for r in range(3, ws.max_row + 1):
+ if ws.cell(row=r, column=2).value in ids:
+ print(ws.cell(row=r, column=2).value, "->", ws.cell(row=r, column=3).value)
diff --git a/_sa_hanhua_out/craft_button.png b/_sa_hanhua_out/craft_button.png
new file mode 100644
index 0000000..2decc65
Binary files /dev/null and b/_sa_hanhua_out/craft_button.png differ
diff --git a/_sa_hanhua_out/sa_decor-forge-1.20.1-1.0.3.jar b/_sa_hanhua_out/sa_decor-forge-1.20.1-1.0.3.jar
new file mode 100644
index 0000000..dcdbe51
Binary files /dev/null and b/_sa_hanhua_out/sa_decor-forge-1.20.1-1.0.3.jar differ
diff --git a/_sa_hanhua_out/sa_essentials-forge-1.20.1-1.0.0.jar b/_sa_hanhua_out/sa_essentials-forge-1.20.1-1.0.0.jar
new file mode 100644
index 0000000..ad0c609
Binary files /dev/null and b/_sa_hanhua_out/sa_essentials-forge-1.20.1-1.0.0.jar differ
diff --git a/_sa_hanhua_out/sa_essentials-forge-1.20.1-1.0.0.jar.bak_24x13 b/_sa_hanhua_out/sa_essentials-forge-1.20.1-1.0.0.jar.bak_24x13
new file mode 100644
index 0000000..bb82e10
Binary files /dev/null and b/_sa_hanhua_out/sa_essentials-forge-1.20.1-1.0.0.jar.bak_24x13 differ
diff --git a/_sa_hanhua_out/sa_essentials-forge-1.20.1-1.0.0.jar.bak_40x22 b/_sa_hanhua_out/sa_essentials-forge-1.20.1-1.0.0.jar.bak_40x22
new file mode 100644
index 0000000..2c041cd
Binary files /dev/null and b/_sa_hanhua_out/sa_essentials-forge-1.20.1-1.0.0.jar.bak_40x22 differ
diff --git a/_sa_hanhua_out/sa_essentials-forge-1.20.1-1.0.0.jar.bak_60x33 b/_sa_hanhua_out/sa_essentials-forge-1.20.1-1.0.0.jar.bak_60x33
new file mode 100644
index 0000000..4b4c29d
Binary files /dev/null and b/_sa_hanhua_out/sa_essentials-forge-1.20.1-1.0.0.jar.bak_60x33 differ
diff --git a/_sa_hanhua_out/sa_essentials-forge-1.20.1-1.0.0.jar.bak_nametabs b/_sa_hanhua_out/sa_essentials-forge-1.20.1-1.0.0.jar.bak_nametabs
new file mode 100644
index 0000000..bf45f72
Binary files /dev/null and b/_sa_hanhua_out/sa_essentials-forge-1.20.1-1.0.0.jar.bak_nametabs differ
diff --git a/_sa_hanhua_out/sa_lib-forge-1.20.1-1.0.1.jar b/_sa_hanhua_out/sa_lib-forge-1.20.1-1.0.1.jar
new file mode 100644
index 0000000..4897732
Binary files /dev/null and b/_sa_hanhua_out/sa_lib-forge-1.20.1-1.0.1.jar differ
diff --git a/_sa_material_textures/adhesive_tape.png b/_sa_material_textures/adhesive_tape.png
new file mode 100644
index 0000000..17e3b30
Binary files /dev/null and b/_sa_material_textures/adhesive_tape.png differ
diff --git a/_sa_material_textures/alcohol.png b/_sa_material_textures/alcohol.png
new file mode 100644
index 0000000..b0ae3d0
Binary files /dev/null and b/_sa_material_textures/alcohol.png differ
diff --git a/_sa_material_textures/antiseptic.png b/_sa_material_textures/antiseptic.png
new file mode 100644
index 0000000..7a17c72
Binary files /dev/null and b/_sa_material_textures/antiseptic.png differ
diff --git a/_sa_material_textures/ashen_steel_ingot.png b/_sa_material_textures/ashen_steel_ingot.png
new file mode 100644
index 0000000..4c32d25
Binary files /dev/null and b/_sa_material_textures/ashen_steel_ingot.png differ
diff --git a/_sa_material_textures/ashen_steel_mixture.png b/_sa_material_textures/ashen_steel_mixture.png
new file mode 100644
index 0000000..bc29313
Binary files /dev/null and b/_sa_material_textures/ashen_steel_mixture.png differ
diff --git a/_sa_material_textures/ashen_steel_nugget.png b/_sa_material_textures/ashen_steel_nugget.png
new file mode 100644
index 0000000..2784f4d
Binary files /dev/null and b/_sa_material_textures/ashen_steel_nugget.png differ
diff --git a/_sa_material_textures/ashen_steel_rod.png b/_sa_material_textures/ashen_steel_rod.png
new file mode 100644
index 0000000..01f79d9
Binary files /dev/null and b/_sa_material_textures/ashen_steel_rod.png differ
diff --git a/_sa_material_textures/battery.png b/_sa_material_textures/battery.png
new file mode 100644
index 0000000..bd7c039
Binary files /dev/null and b/_sa_material_textures/battery.png differ
diff --git a/_sa_material_textures/blank.png b/_sa_material_textures/blank.png
new file mode 100644
index 0000000..33bfeab
Binary files /dev/null and b/_sa_material_textures/blank.png differ
diff --git a/_sa_material_textures/box_of_nails.png b/_sa_material_textures/box_of_nails.png
new file mode 100644
index 0000000..78d6572
Binary files /dev/null and b/_sa_material_textures/box_of_nails.png differ
diff --git a/_sa_material_textures/box_of_paperclips.png b/_sa_material_textures/box_of_paperclips.png
new file mode 100644
index 0000000..990c274
Binary files /dev/null and b/_sa_material_textures/box_of_paperclips.png differ
diff --git a/_sa_material_textures/box_of_screws.png b/_sa_material_textures/box_of_screws.png
new file mode 100644
index 0000000..66b3194
Binary files /dev/null and b/_sa_material_textures/box_of_screws.png differ
diff --git a/_sa_material_textures/camera.png b/_sa_material_textures/camera.png
new file mode 100644
index 0000000..c27ed29
Binary files /dev/null and b/_sa_material_textures/camera.png differ
diff --git a/_sa_material_textures/cardboard.png b/_sa_material_textures/cardboard.png
new file mode 100644
index 0000000..a2988c7
Binary files /dev/null and b/_sa_material_textures/cardboard.png differ
diff --git a/_sa_material_textures/cellphone.png b/_sa_material_textures/cellphone.png
new file mode 100644
index 0000000..74722d0
Binary files /dev/null and b/_sa_material_textures/cellphone.png differ
diff --git a/_sa_material_textures/charcoal_dust.png b/_sa_material_textures/charcoal_dust.png
new file mode 100644
index 0000000..fac44fc
Binary files /dev/null and b/_sa_material_textures/charcoal_dust.png differ
diff --git a/_sa_material_textures/classic_watch.png b/_sa_material_textures/classic_watch.png
new file mode 100644
index 0000000..f3b77e0
Binary files /dev/null and b/_sa_material_textures/classic_watch.png differ
diff --git a/_sa_material_textures/cleaning_liquid.png b/_sa_material_textures/cleaning_liquid.png
new file mode 100644
index 0000000..b237842
Binary files /dev/null and b/_sa_material_textures/cleaning_liquid.png differ
diff --git a/_sa_material_textures/cloth.png b/_sa_material_textures/cloth.png
new file mode 100644
index 0000000..ee47482
Binary files /dev/null and b/_sa_material_textures/cloth.png differ
diff --git a/_sa_material_textures/copper_wire.png b/_sa_material_textures/copper_wire.png
new file mode 100644
index 0000000..86bb5af
Binary files /dev/null and b/_sa_material_textures/copper_wire.png differ
diff --git a/_sa_material_textures/dented_can.png b/_sa_material_textures/dented_can.png
new file mode 100644
index 0000000..c8b872d
Binary files /dev/null and b/_sa_material_textures/dented_can.png differ
diff --git a/_sa_material_textures/diamond_nugget.png b/_sa_material_textures/diamond_nugget.png
new file mode 100644
index 0000000..eb3ad82
Binary files /dev/null and b/_sa_material_textures/diamond_nugget.png differ
diff --git a/_sa_material_textures/dirty_rags.png b/_sa_material_textures/dirty_rags.png
new file mode 100644
index 0000000..8454764
Binary files /dev/null and b/_sa_material_textures/dirty_rags.png differ
diff --git a/_sa_material_textures/dirty_water_bottle.png b/_sa_material_textures/dirty_water_bottle.png
new file mode 100644
index 0000000..9181767
Binary files /dev/null and b/_sa_material_textures/dirty_water_bottle.png differ
diff --git a/_sa_material_textures/dish_towel.png b/_sa_material_textures/dish_towel.png
new file mode 100644
index 0000000..7b1d20c
Binary files /dev/null and b/_sa_material_textures/dish_towel.png differ
diff --git a/_sa_material_textures/duct_tape.png b/_sa_material_textures/duct_tape.png
new file mode 100644
index 0000000..d0bc505
Binary files /dev/null and b/_sa_material_textures/duct_tape.png differ
diff --git a/_sa_material_textures/electric_scrap.png b/_sa_material_textures/electric_scrap.png
new file mode 100644
index 0000000..1ccdff5
Binary files /dev/null and b/_sa_material_textures/electric_scrap.png differ
diff --git a/_sa_material_textures/empty_can.png b/_sa_material_textures/empty_can.png
new file mode 100644
index 0000000..82df584
Binary files /dev/null and b/_sa_material_textures/empty_can.png differ
diff --git a/_sa_material_textures/empty_glass_bottle.png b/_sa_material_textures/empty_glass_bottle.png
new file mode 100644
index 0000000..537b840
Binary files /dev/null and b/_sa_material_textures/empty_glass_bottle.png differ
diff --git a/_sa_material_textures/fabric_patch.png b/_sa_material_textures/fabric_patch.png
new file mode 100644
index 0000000..977d4c6
Binary files /dev/null and b/_sa_material_textures/fabric_patch.png differ
diff --git a/_sa_material_textures/falsh_lights.png b/_sa_material_textures/falsh_lights.png
new file mode 100644
index 0000000..175d9ef
Binary files /dev/null and b/_sa_material_textures/falsh_lights.png differ
diff --git a/_sa_material_textures/fermented_mash.png b/_sa_material_textures/fermented_mash.png
new file mode 100644
index 0000000..bb32e11
Binary files /dev/null and b/_sa_material_textures/fermented_mash.png differ
diff --git a/_sa_material_textures/fiber_fabric.png b/_sa_material_textures/fiber_fabric.png
new file mode 100644
index 0000000..7727c68
Binary files /dev/null and b/_sa_material_textures/fiber_fabric.png differ
diff --git a/_sa_material_textures/gasoline_bucket.png b/_sa_material_textures/gasoline_bucket.png
new file mode 100644
index 0000000..137beff
Binary files /dev/null and b/_sa_material_textures/gasoline_bucket.png differ
diff --git a/_sa_material_textures/generator_manual.png b/_sa_material_textures/generator_manual.png
new file mode 100644
index 0000000..3e2d1ad
Binary files /dev/null and b/_sa_material_textures/generator_manual.png differ
diff --git a/_sa_material_textures/glue.png b/_sa_material_textures/glue.png
new file mode 100644
index 0000000..a59e127
Binary files /dev/null and b/_sa_material_textures/glue.png differ
diff --git a/_sa_material_textures/gunpowder_bottle.png b/_sa_material_textures/gunpowder_bottle.png
new file mode 100644
index 0000000..a03ec8d
Binary files /dev/null and b/_sa_material_textures/gunpowder_bottle.png differ
diff --git a/_sa_material_textures/hair_gel.png b/_sa_material_textures/hair_gel.png
new file mode 100644
index 0000000..bddd9e4
Binary files /dev/null and b/_sa_material_textures/hair_gel.png differ
diff --git a/_sa_material_textures/insulated_copper_wire.png b/_sa_material_textures/insulated_copper_wire.png
new file mode 100644
index 0000000..11d3645
Binary files /dev/null and b/_sa_material_textures/insulated_copper_wire.png differ
diff --git a/_sa_material_textures/jerry_can.png b/_sa_material_textures/jerry_can.png
new file mode 100644
index 0000000..89dcfb8
Binary files /dev/null and b/_sa_material_textures/jerry_can.png differ
diff --git a/_sa_material_textures/kevlar.png b/_sa_material_textures/kevlar.png
new file mode 100644
index 0000000..3f7decc
Binary files /dev/null and b/_sa_material_textures/kevlar.png differ
diff --git a/_sa_material_textures/kevlar_thread.png b/_sa_material_textures/kevlar_thread.png
new file mode 100644
index 0000000..6e60c3d
Binary files /dev/null and b/_sa_material_textures/kevlar_thread.png differ
diff --git a/_sa_material_textures/leather_strip.png b/_sa_material_textures/leather_strip.png
new file mode 100644
index 0000000..859d31b
Binary files /dev/null and b/_sa_material_textures/leather_strip.png differ
diff --git a/_sa_material_textures/lunch_bag.png b/_sa_material_textures/lunch_bag.png
new file mode 100644
index 0000000..4aba5d9
Binary files /dev/null and b/_sa_material_textures/lunch_bag.png differ
diff --git a/_sa_material_textures/matchbox.png b/_sa_material_textures/matchbox.png
new file mode 100644
index 0000000..730be99
Binary files /dev/null and b/_sa_material_textures/matchbox.png differ
diff --git a/_sa_material_textures/medical_adhesive.png b/_sa_material_textures/medical_adhesive.png
new file mode 100644
index 0000000..9f515e3
Binary files /dev/null and b/_sa_material_textures/medical_adhesive.png differ
diff --git a/_sa_material_textures/metal_pipe.png b/_sa_material_textures/metal_pipe.png
new file mode 100644
index 0000000..2c9e6e1
Binary files /dev/null and b/_sa_material_textures/metal_pipe.png differ
diff --git a/_sa_material_textures/metal_scrap.png b/_sa_material_textures/metal_scrap.png
new file mode 100644
index 0000000..d6f5841
Binary files /dev/null and b/_sa_material_textures/metal_scrap.png differ
diff --git a/_sa_material_textures/metal_sheet.png b/_sa_material_textures/metal_sheet.png
new file mode 100644
index 0000000..4aec7ab
Binary files /dev/null and b/_sa_material_textures/metal_sheet.png differ
diff --git a/_sa_material_textures/money.png b/_sa_material_textures/money.png
new file mode 100644
index 0000000..a2f5d10
Binary files /dev/null and b/_sa_material_textures/money.png differ
diff --git a/_sa_material_textures/money_bundle.png b/_sa_material_textures/money_bundle.png
new file mode 100644
index 0000000..5402052
Binary files /dev/null and b/_sa_material_textures/money_bundle.png differ
diff --git a/_sa_material_textures/nails.png b/_sa_material_textures/nails.png
new file mode 100644
index 0000000..6d59224
Binary files /dev/null and b/_sa_material_textures/nails.png differ
diff --git a/_sa_material_textures/netherite_nugget.png b/_sa_material_textures/netherite_nugget.png
new file mode 100644
index 0000000..38ac617
Binary files /dev/null and b/_sa_material_textures/netherite_nugget.png differ
diff --git a/_sa_material_textures/paperclip.png b/_sa_material_textures/paperclip.png
new file mode 100644
index 0000000..509c3df
Binary files /dev/null and b/_sa_material_textures/paperclip.png differ
diff --git a/_sa_material_textures/plastic.png b/_sa_material_textures/plastic.png
new file mode 100644
index 0000000..4b20862
Binary files /dev/null and b/_sa_material_textures/plastic.png differ
diff --git a/_sa_material_textures/plastic_bag.png b/_sa_material_textures/plastic_bag.png
new file mode 100644
index 0000000..0e88d5e
Binary files /dev/null and b/_sa_material_textures/plastic_bag.png differ
diff --git a/_sa_material_textures/plastic_plate.png b/_sa_material_textures/plastic_plate.png
new file mode 100644
index 0000000..96298e0
Binary files /dev/null and b/_sa_material_textures/plastic_plate.png differ
diff --git a/_sa_material_textures/polyester.png b/_sa_material_textures/polyester.png
new file mode 100644
index 0000000..1b44810
Binary files /dev/null and b/_sa_material_textures/polyester.png differ
diff --git a/_sa_material_textures/polyester_thread.png b/_sa_material_textures/polyester_thread.png
new file mode 100644
index 0000000..a2d4849
Binary files /dev/null and b/_sa_material_textures/polyester_thread.png differ
diff --git a/_sa_material_textures/rags.png b/_sa_material_textures/rags.png
new file mode 100644
index 0000000..39cdedf
Binary files /dev/null and b/_sa_material_textures/rags.png differ
diff --git a/_sa_material_textures/rope.png b/_sa_material_textures/rope.png
new file mode 100644
index 0000000..93e2de4
Binary files /dev/null and b/_sa_material_textures/rope.png differ
diff --git a/_sa_material_textures/rubber.png b/_sa_material_textures/rubber.png
new file mode 100644
index 0000000..90de6cf
Binary files /dev/null and b/_sa_material_textures/rubber.png differ
diff --git a/_sa_material_textures/rubbing_alcohol.png b/_sa_material_textures/rubbing_alcohol.png
new file mode 100644
index 0000000..2bb78df
Binary files /dev/null and b/_sa_material_textures/rubbing_alcohol.png differ
diff --git a/_sa_material_textures/saw_blade.png b/_sa_material_textures/saw_blade.png
new file mode 100644
index 0000000..f4062f0
Binary files /dev/null and b/_sa_material_textures/saw_blade.png differ
diff --git a/_sa_material_textures/scrap_nugget.png b/_sa_material_textures/scrap_nugget.png
new file mode 100644
index 0000000..bf652ae
Binary files /dev/null and b/_sa_material_textures/scrap_nugget.png differ
diff --git a/_sa_material_textures/scrap_wood.png b/_sa_material_textures/scrap_wood.png
new file mode 100644
index 0000000..6001e30
Binary files /dev/null and b/_sa_material_textures/scrap_wood.png differ
diff --git a/_sa_material_textures/screws.png b/_sa_material_textures/screws.png
new file mode 100644
index 0000000..e130455
Binary files /dev/null and b/_sa_material_textures/screws.png differ
diff --git a/_sa_material_textures/small_metal_sheet.png b/_sa_material_textures/small_metal_sheet.png
new file mode 100644
index 0000000..ddc4948
Binary files /dev/null and b/_sa_material_textures/small_metal_sheet.png differ
diff --git a/_sa_material_textures/sterilized_rags.png b/_sa_material_textures/sterilized_rags.png
new file mode 100644
index 0000000..877fd79
Binary files /dev/null and b/_sa_material_textures/sterilized_rags.png differ
diff --git a/_sa_material_textures/sulfur.png b/_sa_material_textures/sulfur.png
new file mode 100644
index 0000000..e40cf5e
Binary files /dev/null and b/_sa_material_textures/sulfur.png differ
diff --git a/_sa_material_textures/sulfur_dust.png b/_sa_material_textures/sulfur_dust.png
new file mode 100644
index 0000000..640f769
Binary files /dev/null and b/_sa_material_textures/sulfur_dust.png differ
diff --git a/_sa_material_textures/thread.png b/_sa_material_textures/thread.png
new file mode 100644
index 0000000..7d060d4
Binary files /dev/null and b/_sa_material_textures/thread.png differ
diff --git a/_sa_material_textures/tin_can.png b/_sa_material_textures/tin_can.png
new file mode 100644
index 0000000..96c6363
Binary files /dev/null and b/_sa_material_textures/tin_can.png differ
diff --git a/_sa_material_textures/water_bottle.png b/_sa_material_textures/water_bottle.png
new file mode 100644
index 0000000..037be93
Binary files /dev/null and b/_sa_material_textures/water_bottle.png differ
diff --git a/_sa_material_textures/water_bottle2.png b/_sa_material_textures/water_bottle2.png
new file mode 100644
index 0000000..f1a4c2d
Binary files /dev/null and b/_sa_material_textures/water_bottle2.png differ
diff --git a/_sa_material_textures/wire.png b/_sa_material_textures/wire.png
new file mode 100644
index 0000000..f1dc05a
Binary files /dev/null and b/_sa_material_textures/wire.png differ
diff --git a/_sa_materials.csv b/_sa_materials.csv
new file mode 100644
index 0000000..c2a6870
--- /dev/null
+++ b/_sa_materials.csv
@@ -0,0 +1,77 @@
+序号,贴图文件,物品ID,中文名,英文名,jar内路径
+1,adhesive_tape.png,item.sa_core.adhesive_tape,胶带,Adhesive Tape,assets/sa_core/textures/item/adhesive_tape.png
+2,alcohol.png,item.sa_core.alcohol,酒精,Alcohol,assets/sa_core/textures/item/alcohol.png
+3,antiseptic.png,item.sa_core.antiseptic,消毒剂,Antiseptic,assets/sa_core/textures/item/antiseptic.png
+4,ashen_steel_ingot.png,item.sa_core.ashen_steel_ingot,灰烬钢锭,Ashen Steel Ingot,assets/sa_core/textures/item/ashen_steel_ingot.png
+5,ashen_steel_mixture.png,item.sa_core.ashen_steel_mixture,灰烬钢混合物,Ashen Steel Mixture,assets/sa_core/textures/item/ashen_steel_mixture.png
+6,ashen_steel_nugget.png,item.sa_core.ashen_steel_nugget,灰烬钢粒,Ashen Steel Nugget,assets/sa_core/textures/item/ashen_steel_nugget.png
+7,ashen_steel_rod.png,item.sa_core.ashen_steel_rod,灰烬钢棒,Ashen Steel Rod,assets/sa_core/textures/item/ashen_steel_rod.png
+8,battery.png,item.sa_core.battery,电池,Battery,assets/sa_core/textures/item/battery.png
+9,blank.png,item.sa_core.blank,,,assets/sa_core/textures/item/blank.png
+10,box_of_nails.png,item.sa_core.box_of_nails,一盒钉子,Box of Nails,assets/sa_core/textures/item/box_of_nails.png
+11,box_of_paperclips.png,item.sa_core.box_of_paperclips,一盒回形针,Box of Paperclips,assets/sa_core/textures/item/box_of_paperclips.png
+12,box_of_screws.png,item.sa_core.box_of_screws,一盒螺丝,Box of Screws,assets/sa_core/textures/item/box_of_screws.png
+13,camera.png,item.sa_core.camera,相机,Camera,assets/sa_core/textures/item/camera.png
+14,cardboard.png,item.sa_core.cardboard,纸板,Cardboard,assets/sa_core/textures/item/cardboard.png
+15,cellphone.png,item.sa_core.cellphone,手机,Cellphone,assets/sa_core/textures/item/cellphone.png
+16,charcoal_dust.png,item.sa_core.charcoal_dust,木炭粉,Charcoal Dust,assets/sa_core/textures/item/charcoal_dust.png
+17,classic_watch.png,item.sa_core.classic_watch,经典手表,Classic Watch,assets/sa_core/textures/item/classic_watch.png
+18,cleaning_liquid.png,item.sa_core.cleaning_liquid,清洁液,Cleaning Liquid,assets/sa_core/textures/item/cleaning_liquid.png
+19,cloth.png,item.sa_core.cloth,布料,Cloth,assets/sa_core/textures/item/cloth.png
+20,copper_wire.png,item.sa_core.copper_wire,铜线,Copper Wire,assets/sa_core/textures/item/copper_wire.png
+21,dented_can.png,item.sa_core.dented_can,凹陷的罐子,Dented Can,assets/sa_core/textures/item/dented_can.png
+22,diamond_nugget.png,item.sa_core.diamond_nugget,钻石粒,Diamond Nugget,assets/sa_core/textures/item/diamond_nugget.png
+23,dirty_rags.png,item.sa_core.dirty_rags,脏抹布,Dirty Rags,assets/sa_core/textures/item/dirty_rags.png
+24,dirty_water_bottle.png,item.sa_core.dirty_water_bottle,脏水瓶,Dirty Water Bottle,assets/sa_core/textures/item/dirty_water_bottle.png
+25,dish_towel.png,item.sa_core.dish_towel,洗碗巾,Dish Towel,assets/sa_core/textures/item/dish_towel.png
+26,duct_tape.png,item.sa_core.duct_tape,管道胶带,Duct Tape,assets/sa_core/textures/item/duct_tape.png
+27,electric_scrap.png,item.sa_core.electric_scrap,电子废料,Electric Scrap,assets/sa_core/textures/item/electric_scrap.png
+28,empty_can.png,item.sa_core.empty_can,空罐子,Empty Can,assets/sa_core/textures/item/empty_can.png
+29,empty_glass_bottle.png,item.sa_core.empty_glass_bottle,空玻璃瓶,Empty Glass Bottle,assets/sa_core/textures/item/empty_glass_bottle.png
+30,fabric_patch.png,item.sa_core.fabric_patch,布料补丁,Fabric Patch,assets/sa_core/textures/item/fabric_patch.png
+31,falsh_lights.png,item.sa_core.falsh_lights,,,assets/sa_core/textures/item/falsh_lights.png
+32,fermented_mash.png,item.sa_core.fermented_mash,发酵糊,Fermented Mash,assets/sa_core/textures/item/fermented_mash.png
+33,fiber_fabric.png,item.sa_core.fiber_fabric,纤维织物,Fiber Fabric,assets/sa_core/textures/item/fiber_fabric.png
+34,gasoline_bucket.png,item.sa_core.gasoline_bucket,汽油桶,Gasoline Bucket,assets/sa_core/textures/item/gasoline_bucket.png
+35,generator_manual.png,item.sa_core.generator_manual,发电机手册,Generator Manual,assets/sa_core/textures/item/generator_manual.png
+36,glue.png,item.sa_core.glue,胶水,Glue,assets/sa_core/textures/item/glue.png
+37,gunpowder_bottle.png,item.sa_core.gunpowder_bottle,火药瓶,Gunpowder Bottle,assets/sa_core/textures/item/gunpowder_bottle.png
+38,hair_gel.png,item.sa_core.hair_gel,发胶,Hair Gel,assets/sa_core/textures/item/hair_gel.png
+39,insulated_copper_wire.png,item.sa_core.insulated_copper_wire,绝缘铜缆,Insulated Copper Cable,assets/sa_core/textures/item/insulated_copper_wire.png
+40,jerry_can.png,item.sa_core.jerry_can,油桶,Jerry Can,assets/sa_core/textures/item/jerry_can.png
+41,kevlar.png,item.sa_core.kevlar,凯夫拉纤维,Kevlar,assets/sa_core/textures/item/kevlar.png
+42,kevlar_thread.png,item.sa_core.kevlar_thread,凯夫拉线,Kevlar Thread,assets/sa_core/textures/item/kevlar_thread.png
+43,leather_strip.png,item.sa_core.leather_strip,皮革条,Leather Strip,assets/sa_core/textures/item/leather_strip.png
+44,lunch_bag.png,item.sa_core.lunch_bag,午餐袋,Lunch Bag,assets/sa_core/textures/item/lunch_bag.png
+45,matchbox.png,item.sa_core.matchbox,火柴盒,Matchbox,assets/sa_core/textures/item/matchbox.png
+46,medical_adhesive.png,item.sa_core.medical_adhesive,医用胶,Medical Adhesive,assets/sa_core/textures/item/medical_adhesive.png
+47,metal_pipe.png,item.sa_core.metal_pipe,金属管,Metal Pipe,assets/sa_core/textures/item/metal_pipe.png
+48,metal_scrap.png,item.sa_core.metal_scrap,金属废料,Metal Scrap,assets/sa_core/textures/item/metal_scrap.png
+49,metal_sheet.png,item.sa_core.metal_sheet,金属板,Metal Sheet,assets/sa_core/textures/item/metal_sheet.png
+50,money.png,item.sa_core.money,钞票,Money,assets/sa_core/textures/item/money.png
+51,money_bundle.png,item.sa_core.money_bundle,一捆钞票,Money Bundle,assets/sa_core/textures/item/money_bundle.png
+52,nails.png,item.sa_core.nails,钉子,Nails,assets/sa_core/textures/item/nails.png
+53,netherite_nugget.png,item.sa_core.netherite_nugget,下界合金粒,Netherite Nugget,assets/sa_core/textures/item/netherite_nugget.png
+54,paperclip.png,item.sa_core.paperclip,回形针,Paperclip,assets/sa_core/textures/item/paperclip.png
+55,plastic.png,item.sa_core.plastic,塑料,Plastic,assets/sa_core/textures/item/plastic.png
+56,plastic_bag.png,item.sa_core.plastic_bag,塑料袋,Plastic Bag,assets/sa_core/textures/item/plastic_bag.png
+57,plastic_plate.png,item.sa_core.plastic_plate,塑料盘,Plastic Plate,assets/sa_core/textures/item/plastic_plate.png
+58,polyester.png,item.sa_core.polyester,涤纶,Polyester,assets/sa_core/textures/item/polyester.png
+59,polyester_thread.png,item.sa_core.polyester_thread,涤纶线,Polyester Thread,assets/sa_core/textures/item/polyester_thread.png
+60,rags.png,item.sa_core.rags,抹布,Rags,assets/sa_core/textures/item/rags.png
+61,rope.png,item.sa_core.rope,绳索,Rope,assets/sa_core/textures/item/rope.png
+62,rubber.png,item.sa_core.rubber,橡胶,Rubber,assets/sa_core/textures/item/rubber.png
+63,rubbing_alcohol.png,item.sa_core.rubbing_alcohol,外用酒精,Rubbing Alcohol,assets/sa_core/textures/item/rubbing_alcohol.png
+64,saw_blade.png,item.sa_core.saw_blade,锯片,Saw Blade,assets/sa_core/textures/item/saw_blade.png
+65,scrap_nugget.png,item.sa_core.scrap_nugget,废料粒,Scrap Nugget,assets/sa_core/textures/item/scrap_nugget.png
+66,scrap_wood.png,item.sa_core.scrap_wood,废木料,Scrap Wood,assets/sa_core/textures/item/scrap_wood.png
+67,screws.png,item.sa_core.screws,螺丝,Screws,assets/sa_core/textures/item/screws.png
+68,small_metal_sheet.png,item.sa_core.small_metal_sheet,小金属板,Small Metal Sheet,assets/sa_core/textures/item/small_metal_sheet.png
+69,sterilized_rags.png,item.sa_core.sterilized_rags,消毒抹布,Sterilized Rags,assets/sa_core/textures/item/sterilized_rags.png
+70,sulfur.png,item.sa_core.sulfur,硫磺,Sulfur,assets/sa_core/textures/item/sulfur.png
+71,sulfur_dust.png,item.sa_core.sulfur_dust,硫磺粉,Sulfur Dust,assets/sa_core/textures/item/sulfur_dust.png
+72,thread.png,item.sa_core.thread,线,Thread,assets/sa_core/textures/item/thread.png
+73,tin_can.png,item.sa_core.tin_can,锡罐,Tin Can,assets/sa_core/textures/item/tin_can.png
+74,water_bottle.png,item.sa_core.water_bottle,水瓶,Water Bottle,assets/sa_core/textures/item/water_bottle.png
+75,water_bottle2.png,item.sa_core.water_bottle2,,,assets/sa_core/textures/item/water_bottle2.png
+76,wire.png,item.sa_core.wire,电线,Wire,assets/sa_core/textures/item/wire.png
diff --git a/_sa_materials.md b/_sa_materials.md
new file mode 100644
index 0000000..41c484c
--- /dev/null
+++ b/_sa_materials.md
@@ -0,0 +1,80 @@
+# 幸存者军火库 材料清单(sa_core)
+
+| 序号 | 贴图文件 | 物品ID | 中文名 | 英文名 | jar内路径 |
+|---|---|---|---|---|---|
+| 1 | adhesive_tape.png | item.sa_core.adhesive_tape | 胶带 | Adhesive Tape | assets/sa_core/textures/item/adhesive_tape.png |
+| 2 | alcohol.png | item.sa_core.alcohol | 酒精 | Alcohol | assets/sa_core/textures/item/alcohol.png |
+| 3 | antiseptic.png | item.sa_core.antiseptic | 消毒剂 | Antiseptic | assets/sa_core/textures/item/antiseptic.png |
+| 4 | ashen_steel_ingot.png | item.sa_core.ashen_steel_ingot | 灰烬钢锭 | Ashen Steel Ingot | assets/sa_core/textures/item/ashen_steel_ingot.png |
+| 5 | ashen_steel_mixture.png | item.sa_core.ashen_steel_mixture | 灰烬钢混合物 | Ashen Steel Mixture | assets/sa_core/textures/item/ashen_steel_mixture.png |
+| 6 | ashen_steel_nugget.png | item.sa_core.ashen_steel_nugget | 灰烬钢粒 | Ashen Steel Nugget | assets/sa_core/textures/item/ashen_steel_nugget.png |
+| 7 | ashen_steel_rod.png | item.sa_core.ashen_steel_rod | 灰烬钢棒 | Ashen Steel Rod | assets/sa_core/textures/item/ashen_steel_rod.png |
+| 8 | battery.png | item.sa_core.battery | 电池 | Battery | assets/sa_core/textures/item/battery.png |
+| 9 | blank.png | item.sa_core.blank | | | assets/sa_core/textures/item/blank.png |
+| 10 | box_of_nails.png | item.sa_core.box_of_nails | 一盒钉子 | Box of Nails | assets/sa_core/textures/item/box_of_nails.png |
+| 11 | box_of_paperclips.png | item.sa_core.box_of_paperclips | 一盒回形针 | Box of Paperclips | assets/sa_core/textures/item/box_of_paperclips.png |
+| 12 | box_of_screws.png | item.sa_core.box_of_screws | 一盒螺丝 | Box of Screws | assets/sa_core/textures/item/box_of_screws.png |
+| 13 | camera.png | item.sa_core.camera | 相机 | Camera | assets/sa_core/textures/item/camera.png |
+| 14 | cardboard.png | item.sa_core.cardboard | 纸板 | Cardboard | assets/sa_core/textures/item/cardboard.png |
+| 15 | cellphone.png | item.sa_core.cellphone | 手机 | Cellphone | assets/sa_core/textures/item/cellphone.png |
+| 16 | charcoal_dust.png | item.sa_core.charcoal_dust | 木炭粉 | Charcoal Dust | assets/sa_core/textures/item/charcoal_dust.png |
+| 17 | classic_watch.png | item.sa_core.classic_watch | 经典手表 | Classic Watch | assets/sa_core/textures/item/classic_watch.png |
+| 18 | cleaning_liquid.png | item.sa_core.cleaning_liquid | 清洁液 | Cleaning Liquid | assets/sa_core/textures/item/cleaning_liquid.png |
+| 19 | cloth.png | item.sa_core.cloth | 布料 | Cloth | assets/sa_core/textures/item/cloth.png |
+| 20 | copper_wire.png | item.sa_core.copper_wire | 铜线 | Copper Wire | assets/sa_core/textures/item/copper_wire.png |
+| 21 | dented_can.png | item.sa_core.dented_can | 凹陷的罐子 | Dented Can | assets/sa_core/textures/item/dented_can.png |
+| 22 | diamond_nugget.png | item.sa_core.diamond_nugget | 钻石粒 | Diamond Nugget | assets/sa_core/textures/item/diamond_nugget.png |
+| 23 | dirty_rags.png | item.sa_core.dirty_rags | 脏抹布 | Dirty Rags | assets/sa_core/textures/item/dirty_rags.png |
+| 24 | dirty_water_bottle.png | item.sa_core.dirty_water_bottle | 脏水瓶 | Dirty Water Bottle | assets/sa_core/textures/item/dirty_water_bottle.png |
+| 25 | dish_towel.png | item.sa_core.dish_towel | 洗碗巾 | Dish Towel | assets/sa_core/textures/item/dish_towel.png |
+| 26 | duct_tape.png | item.sa_core.duct_tape | 管道胶带 | Duct Tape | assets/sa_core/textures/item/duct_tape.png |
+| 27 | electric_scrap.png | item.sa_core.electric_scrap | 电子废料 | Electric Scrap | assets/sa_core/textures/item/electric_scrap.png |
+| 28 | empty_can.png | item.sa_core.empty_can | 空罐子 | Empty Can | assets/sa_core/textures/item/empty_can.png |
+| 29 | empty_glass_bottle.png | item.sa_core.empty_glass_bottle | 空玻璃瓶 | Empty Glass Bottle | assets/sa_core/textures/item/empty_glass_bottle.png |
+| 30 | fabric_patch.png | item.sa_core.fabric_patch | 布料补丁 | Fabric Patch | assets/sa_core/textures/item/fabric_patch.png |
+| 31 | falsh_lights.png | item.sa_core.falsh_lights | | | assets/sa_core/textures/item/falsh_lights.png |
+| 32 | fermented_mash.png | item.sa_core.fermented_mash | 发酵糊 | Fermented Mash | assets/sa_core/textures/item/fermented_mash.png |
+| 33 | fiber_fabric.png | item.sa_core.fiber_fabric | 纤维织物 | Fiber Fabric | assets/sa_core/textures/item/fiber_fabric.png |
+| 34 | gasoline_bucket.png | item.sa_core.gasoline_bucket | 汽油桶 | Gasoline Bucket | assets/sa_core/textures/item/gasoline_bucket.png |
+| 35 | generator_manual.png | item.sa_core.generator_manual | 发电机手册 | Generator Manual | assets/sa_core/textures/item/generator_manual.png |
+| 36 | glue.png | item.sa_core.glue | 胶水 | Glue | assets/sa_core/textures/item/glue.png |
+| 37 | gunpowder_bottle.png | item.sa_core.gunpowder_bottle | 火药瓶 | Gunpowder Bottle | assets/sa_core/textures/item/gunpowder_bottle.png |
+| 38 | hair_gel.png | item.sa_core.hair_gel | 发胶 | Hair Gel | assets/sa_core/textures/item/hair_gel.png |
+| 39 | insulated_copper_wire.png | item.sa_core.insulated_copper_wire | 绝缘铜缆 | Insulated Copper Cable | assets/sa_core/textures/item/insulated_copper_wire.png |
+| 40 | jerry_can.png | item.sa_core.jerry_can | 油桶 | Jerry Can | assets/sa_core/textures/item/jerry_can.png |
+| 41 | kevlar.png | item.sa_core.kevlar | 凯夫拉纤维 | Kevlar | assets/sa_core/textures/item/kevlar.png |
+| 42 | kevlar_thread.png | item.sa_core.kevlar_thread | 凯夫拉线 | Kevlar Thread | assets/sa_core/textures/item/kevlar_thread.png |
+| 43 | leather_strip.png | item.sa_core.leather_strip | 皮革条 | Leather Strip | assets/sa_core/textures/item/leather_strip.png |
+| 44 | lunch_bag.png | item.sa_core.lunch_bag | 午餐袋 | Lunch Bag | assets/sa_core/textures/item/lunch_bag.png |
+| 45 | matchbox.png | item.sa_core.matchbox | 火柴盒 | Matchbox | assets/sa_core/textures/item/matchbox.png |
+| 46 | medical_adhesive.png | item.sa_core.medical_adhesive | 医用胶 | Medical Adhesive | assets/sa_core/textures/item/medical_adhesive.png |
+| 47 | metal_pipe.png | item.sa_core.metal_pipe | 金属管 | Metal Pipe | assets/sa_core/textures/item/metal_pipe.png |
+| 48 | metal_scrap.png | item.sa_core.metal_scrap | 金属废料 | Metal Scrap | assets/sa_core/textures/item/metal_scrap.png |
+| 49 | metal_sheet.png | item.sa_core.metal_sheet | 金属板 | Metal Sheet | assets/sa_core/textures/item/metal_sheet.png |
+| 50 | money.png | item.sa_core.money | 钞票 | Money | assets/sa_core/textures/item/money.png |
+| 51 | money_bundle.png | item.sa_core.money_bundle | 一捆钞票 | Money Bundle | assets/sa_core/textures/item/money_bundle.png |
+| 52 | nails.png | item.sa_core.nails | 钉子 | Nails | assets/sa_core/textures/item/nails.png |
+| 53 | netherite_nugget.png | item.sa_core.netherite_nugget | 下界合金粒 | Netherite Nugget | assets/sa_core/textures/item/netherite_nugget.png |
+| 54 | paperclip.png | item.sa_core.paperclip | 回形针 | Paperclip | assets/sa_core/textures/item/paperclip.png |
+| 55 | plastic.png | item.sa_core.plastic | 塑料 | Plastic | assets/sa_core/textures/item/plastic.png |
+| 56 | plastic_bag.png | item.sa_core.plastic_bag | 塑料袋 | Plastic Bag | assets/sa_core/textures/item/plastic_bag.png |
+| 57 | plastic_plate.png | item.sa_core.plastic_plate | 塑料盘 | Plastic Plate | assets/sa_core/textures/item/plastic_plate.png |
+| 58 | polyester.png | item.sa_core.polyester | 涤纶 | Polyester | assets/sa_core/textures/item/polyester.png |
+| 59 | polyester_thread.png | item.sa_core.polyester_thread | 涤纶线 | Polyester Thread | assets/sa_core/textures/item/polyester_thread.png |
+| 60 | rags.png | item.sa_core.rags | 抹布 | Rags | assets/sa_core/textures/item/rags.png |
+| 61 | rope.png | item.sa_core.rope | 绳索 | Rope | assets/sa_core/textures/item/rope.png |
+| 62 | rubber.png | item.sa_core.rubber | 橡胶 | Rubber | assets/sa_core/textures/item/rubber.png |
+| 63 | rubbing_alcohol.png | item.sa_core.rubbing_alcohol | 外用酒精 | Rubbing Alcohol | assets/sa_core/textures/item/rubbing_alcohol.png |
+| 64 | saw_blade.png | item.sa_core.saw_blade | 锯片 | Saw Blade | assets/sa_core/textures/item/saw_blade.png |
+| 65 | scrap_nugget.png | item.sa_core.scrap_nugget | 废料粒 | Scrap Nugget | assets/sa_core/textures/item/scrap_nugget.png |
+| 66 | scrap_wood.png | item.sa_core.scrap_wood | 废木料 | Scrap Wood | assets/sa_core/textures/item/scrap_wood.png |
+| 67 | screws.png | item.sa_core.screws | 螺丝 | Screws | assets/sa_core/textures/item/screws.png |
+| 68 | small_metal_sheet.png | item.sa_core.small_metal_sheet | 小金属板 | Small Metal Sheet | assets/sa_core/textures/item/small_metal_sheet.png |
+| 69 | sterilized_rags.png | item.sa_core.sterilized_rags | 消毒抹布 | Sterilized Rags | assets/sa_core/textures/item/sterilized_rags.png |
+| 70 | sulfur.png | item.sa_core.sulfur | 硫磺 | Sulfur | assets/sa_core/textures/item/sulfur.png |
+| 71 | sulfur_dust.png | item.sa_core.sulfur_dust | 硫磺粉 | Sulfur Dust | assets/sa_core/textures/item/sulfur_dust.png |
+| 72 | thread.png | item.sa_core.thread | 线 | Thread | assets/sa_core/textures/item/thread.png |
+| 73 | tin_can.png | item.sa_core.tin_can | 锡罐 | Tin Can | assets/sa_core/textures/item/tin_can.png |
+| 74 | water_bottle.png | item.sa_core.water_bottle | 水瓶 | Water Bottle | assets/sa_core/textures/item/water_bottle.png |
+| 75 | water_bottle2.png | item.sa_core.water_bottle2 | | | assets/sa_core/textures/item/water_bottle2.png |
+| 76 | wire.png | item.sa_core.wire | 电线 | Wire | assets/sa_core/textures/item/wire.png |
\ No newline at end of file
diff --git a/behavior_pack_kcH4M5u0/manifest.json b/behavior_pack_kcH4M5u0/manifest.json
new file mode 100644
index 0000000..ffaff09
--- /dev/null
+++ b/behavior_pack_kcH4M5u0/manifest.json
@@ -0,0 +1,29 @@
+{
+ "format_version": 2,
+ "header": {
+ "description": "",
+ "min_engine_version": [
+ 1,
+ 18,
+ 0
+ ],
+ "name": "behavior_pack",
+ "uuid": "0237fab9-2af6-43e6-9c46-257a1801d90b",
+ "version": [
+ 0,
+ 0,
+ 1
+ ]
+ },
+ "modules": [
+ {
+ "type": "data",
+ "uuid": "574dd82c-83e8-48b6-a63f-43717893939c",
+ "version": [
+ 0,
+ 0,
+ 1
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/behavior_pack_kcH4M5u0/netease_blocks/generator.json b/behavior_pack_kcH4M5u0/netease_blocks/generator.json
new file mode 100644
index 0000000..f1ea502
--- /dev/null
+++ b/behavior_pack_kcH4M5u0/netease_blocks/generator.json
@@ -0,0 +1,39 @@
+{
+ "format_version": "1.10.0",
+ "minecraft:block": {
+ "description": {
+ "identifier": "dn_sa:generator",
+ "register_to_creative_menu": true,
+ "is_experimental": false,
+ "category": "dn_sa"
+ },
+ "components": {
+ "netease:block_entity": {
+ "tick": false,
+ "movable": false
+ },
+ "netease:solid": {
+ "value": true
+ },
+ "netease:face_directional": {
+ "type": "direction"
+ },
+ "minecraft:destroy_time": {
+ "value": 1.5
+ },
+ "minecraft:block_light_absorption": {
+ "value": 0
+ },
+ "netease:aabb": {
+ "collision": {
+ "min": [0.0, 0.0, 0.0],
+ "max": [1.0, 1.0, 1.0]
+ },
+ "clip": {
+ "min": [0.0, 0.0, 0.0],
+ "max": [1.0, 1.0, 1.0]
+ }
+ }
+ }
+ }
+}
diff --git a/behavior_pack_kcH4M5u0/netease_blocks/salvage_bin.json b/behavior_pack_kcH4M5u0/netease_blocks/salvage_bin.json
new file mode 100644
index 0000000..3d695d7
--- /dev/null
+++ b/behavior_pack_kcH4M5u0/netease_blocks/salvage_bin.json
@@ -0,0 +1,39 @@
+{
+ "format_version": "1.10.0",
+ "minecraft:block": {
+ "description": {
+ "identifier": "dn_sa:salvage_bin",
+ "register_to_creative_menu": true,
+ "is_experimental": false,
+ "category": "dn_sa"
+ },
+ "components": {
+ "netease:block_entity": {
+ "tick": false,
+ "movable": false
+ },
+ "netease:solid": {
+ "value": true
+ },
+ "netease:face_directional": {
+ "type": "direction"
+ },
+ "minecraft:destroy_time": {
+ "value": 1.5
+ },
+ "minecraft:block_light_absorption": {
+ "value": 0
+ },
+ "netease:aabb": {
+ "collision": {
+ "min": [0.0, 0.0, 0.0],
+ "max": [1.0, 1.0, 1.0]
+ },
+ "clip": {
+ "min": [0.0, 0.0, 0.0],
+ "max": [1.0, 1.0, 1.0]
+ }
+ }
+ }
+ }
+}
diff --git a/behavior_pack_kcH4M5u0/netease_group/group_config.json b/behavior_pack_kcH4M5u0/netease_group/group_config.json
new file mode 100644
index 0000000..9e9f0fe
--- /dev/null
+++ b/behavior_pack_kcH4M5u0/netease_group/group_config.json
@@ -0,0 +1,18 @@
+{
+ "groups": [
+ {
+ "group_name": "itemGroup.name.dn_sa_generator",
+ "icon": "dn_sa:generator",
+ "list": [
+ "dn_sa:generator"
+ ]
+ },
+ {
+ "group_name": "itemGroup.name.dn_sa_salvage_bin",
+ "icon": "dn_sa:salvage_bin",
+ "list": [
+ "dn_sa:salvage_bin"
+ ]
+ }
+ ]
+}
diff --git a/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_adhesive_tape.json b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_adhesive_tape.json
new file mode 100644
index 0000000..ca7dc49
--- /dev/null
+++ b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_adhesive_tape.json
@@ -0,0 +1,15 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:max_stack_size": 64,
+ "netease:customtips": {
+ "value": "修复与组装的粘合材料。"
+ }
+ },
+ "description": {
+ "category": "dn_sa",
+ "identifier": "dn_sa:adhesive_tape"
+ }
+ }
+}
\ No newline at end of file
diff --git a/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_alcohol.json b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_alcohol.json
new file mode 100644
index 0000000..f75833c
--- /dev/null
+++ b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_alcohol.json
@@ -0,0 +1,35 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:max_stack_size": 64,
+ "netease:customtips": {
+ "value": "装有液体的容器。"
+ },
+ "minecraft:use_duration": 32,
+ "minecraft:food": {
+ "nutrition": 2,
+ "saturation_modifier": "low",
+ "can_always_eat": true,
+ "effects": [
+ {
+ "name": "poison",
+ "chance": 1.0,
+ "duration": 10,
+ "amplifier": 1
+ },
+ {
+ "name": "nausea",
+ "chance": 1.0,
+ "duration": 15,
+ "amplifier": 0
+ }
+ ]
+ }
+ },
+ "description": {
+ "category": "dn_sa",
+ "identifier": "dn_sa:alcohol"
+ }
+ }
+}
\ No newline at end of file
diff --git a/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_antiseptic.json b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_antiseptic.json
new file mode 100644
index 0000000..615d584
--- /dev/null
+++ b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_antiseptic.json
@@ -0,0 +1,15 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:max_stack_size": 64,
+ "netease:customtips": {
+ "value": "合成与回收材料。"
+ }
+ },
+ "description": {
+ "category": "dn_sa",
+ "identifier": "dn_sa:antiseptic"
+ }
+ }
+}
\ No newline at end of file
diff --git a/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_apple_juice_box.json b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_apple_juice_box.json
new file mode 100644
index 0000000..715d9a2
--- /dev/null
+++ b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_apple_juice_box.json
@@ -0,0 +1,19 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:max_stack_size": 64,
+ "minecraft:use_duration": 40,
+ "minecraft:food": {
+ "nutrition": 3,
+ "saturation_modifier": "low",
+ "can_always_eat": true,
+ "using_converts_to": "dn_sa:empty_juice_box"
+ }
+ },
+ "description": {
+ "category": "dn_sa_food",
+ "identifier": "dn_sa:apple_juice_box"
+ }
+ }
+}
\ No newline at end of file
diff --git a/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_ashen_steel_ingot.json b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_ashen_steel_ingot.json
new file mode 100644
index 0000000..853fca3
--- /dev/null
+++ b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_ashen_steel_ingot.json
@@ -0,0 +1,15 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:max_stack_size": 64,
+ "netease:customtips": {
+ "value": "用于锻造与回收的金属材料。"
+ }
+ },
+ "description": {
+ "category": "dn_sa",
+ "identifier": "dn_sa:ashen_steel_ingot"
+ }
+ }
+}
\ No newline at end of file
diff --git a/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_ashen_steel_mixture.json b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_ashen_steel_mixture.json
new file mode 100644
index 0000000..f896711
--- /dev/null
+++ b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_ashen_steel_mixture.json
@@ -0,0 +1,15 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:max_stack_size": 64,
+ "netease:customtips": {
+ "value": "用于锻造与回收的金属材料。"
+ }
+ },
+ "description": {
+ "category": "dn_sa",
+ "identifier": "dn_sa:ashen_steel_mixture"
+ }
+ }
+}
\ No newline at end of file
diff --git a/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_ashen_steel_nugget.json b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_ashen_steel_nugget.json
new file mode 100644
index 0000000..f76a1c6
--- /dev/null
+++ b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_ashen_steel_nugget.json
@@ -0,0 +1,15 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:max_stack_size": 64,
+ "netease:customtips": {
+ "value": "用于锻造与回收的金属材料。"
+ }
+ },
+ "description": {
+ "category": "dn_sa",
+ "identifier": "dn_sa:ashen_steel_nugget"
+ }
+ }
+}
\ No newline at end of file
diff --git a/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_ashen_steel_rod.json b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_ashen_steel_rod.json
new file mode 100644
index 0000000..c36d81e
--- /dev/null
+++ b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_ashen_steel_rod.json
@@ -0,0 +1,15 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:max_stack_size": 64,
+ "netease:customtips": {
+ "value": "用于锻造与回收的金属材料。"
+ }
+ },
+ "description": {
+ "category": "dn_sa",
+ "identifier": "dn_sa:ashen_steel_rod"
+ }
+ }
+}
\ No newline at end of file
diff --git a/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_battery.json b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_battery.json
new file mode 100644
index 0000000..d0b636d
--- /dev/null
+++ b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_battery.json
@@ -0,0 +1,15 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:max_stack_size": 64,
+ "netease:customtips": {
+ "value": "可拆解的电子元件。"
+ }
+ },
+ "description": {
+ "category": "dn_sa",
+ "identifier": "dn_sa:battery"
+ }
+ }
+}
\ No newline at end of file
diff --git a/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_berry_juice_box.json b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_berry_juice_box.json
new file mode 100644
index 0000000..0ba9c1d
--- /dev/null
+++ b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_berry_juice_box.json
@@ -0,0 +1,19 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:max_stack_size": 64,
+ "minecraft:use_duration": 40,
+ "minecraft:food": {
+ "nutrition": 3,
+ "saturation_modifier": "low",
+ "can_always_eat": true,
+ "using_converts_to": "dn_sa:empty_juice_box"
+ }
+ },
+ "description": {
+ "category": "dn_sa_food",
+ "identifier": "dn_sa:berry_juice_box"
+ }
+ }
+}
\ No newline at end of file
diff --git a/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_big_burger.json b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_big_burger.json
new file mode 100644
index 0000000..98203d3
--- /dev/null
+++ b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_big_burger.json
@@ -0,0 +1,17 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:max_stack_size": 64,
+ "minecraft:use_duration": 32,
+ "minecraft:food": {
+ "nutrition": 10,
+ "saturation_modifier": "good"
+ }
+ },
+ "description": {
+ "category": "dn_sa_food",
+ "identifier": "dn_sa:big_burger"
+ }
+ }
+}
\ No newline at end of file
diff --git a/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_big_burger_rotten.json b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_big_burger_rotten.json
new file mode 100644
index 0000000..b5b882c
--- /dev/null
+++ b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_big_burger_rotten.json
@@ -0,0 +1,31 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:max_stack_size": 64,
+ "minecraft:use_duration": 32,
+ "minecraft:food": {
+ "nutrition": 4,
+ "saturation_modifier": "low",
+ "effects": [
+ {
+ "name": "hunger",
+ "duration": 300,
+ "amplifier": 0,
+ "chance": 0.85
+ },
+ {
+ "name": "nausea",
+ "duration": 120,
+ "amplifier": 0,
+ "chance": 0.2
+ }
+ ]
+ }
+ },
+ "description": {
+ "category": "dn_sa_food",
+ "identifier": "dn_sa:big_burger_rotten"
+ }
+ }
+}
\ No newline at end of file
diff --git a/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_biscuit.json b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_biscuit.json
new file mode 100644
index 0000000..ec41cca
--- /dev/null
+++ b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_biscuit.json
@@ -0,0 +1,17 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:max_stack_size": 64,
+ "minecraft:use_duration": 32,
+ "minecraft:food": {
+ "nutrition": 3,
+ "saturation_modifier": "low"
+ }
+ },
+ "description": {
+ "category": "dn_sa_food",
+ "identifier": "dn_sa:biscuit"
+ }
+ }
+}
\ No newline at end of file
diff --git a/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_biscuit_rotten.json b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_biscuit_rotten.json
new file mode 100644
index 0000000..0f587a5
--- /dev/null
+++ b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_biscuit_rotten.json
@@ -0,0 +1,31 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:max_stack_size": 64,
+ "minecraft:use_duration": 32,
+ "minecraft:food": {
+ "nutrition": 1,
+ "saturation_modifier": "poor",
+ "effects": [
+ {
+ "name": "hunger",
+ "duration": 300,
+ "amplifier": 0,
+ "chance": 0.85
+ },
+ {
+ "name": "nausea",
+ "duration": 120,
+ "amplifier": 0,
+ "chance": 0.2
+ }
+ ]
+ }
+ },
+ "description": {
+ "category": "dn_sa_food",
+ "identifier": "dn_sa:biscuit_rotten"
+ }
+ }
+}
\ No newline at end of file
diff --git a/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_brigadeiro.json b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_brigadeiro.json
new file mode 100644
index 0000000..d45a71c
--- /dev/null
+++ b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_brigadeiro.json
@@ -0,0 +1,17 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:max_stack_size": 64,
+ "minecraft:use_duration": 32,
+ "minecraft:food": {
+ "nutrition": 3,
+ "saturation_modifier": "low"
+ }
+ },
+ "description": {
+ "category": "dn_sa_food",
+ "identifier": "dn_sa:brigadeiro"
+ }
+ }
+}
\ No newline at end of file
diff --git a/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_burger.json b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_burger.json
new file mode 100644
index 0000000..41c9529
--- /dev/null
+++ b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_burger.json
@@ -0,0 +1,17 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:max_stack_size": 64,
+ "minecraft:use_duration": 32,
+ "minecraft:food": {
+ "nutrition": 7,
+ "saturation_modifier": "normal"
+ }
+ },
+ "description": {
+ "category": "dn_sa_food",
+ "identifier": "dn_sa:burger"
+ }
+ }
+}
\ No newline at end of file
diff --git a/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_burger_rotten.json b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_burger_rotten.json
new file mode 100644
index 0000000..a004020
--- /dev/null
+++ b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_burger_rotten.json
@@ -0,0 +1,31 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:max_stack_size": 64,
+ "minecraft:use_duration": 32,
+ "minecraft:food": {
+ "nutrition": 3,
+ "saturation_modifier": "poor",
+ "effects": [
+ {
+ "name": "hunger",
+ "duration": 300,
+ "amplifier": 0,
+ "chance": 0.85
+ },
+ {
+ "name": "nausea",
+ "duration": 120,
+ "amplifier": 0,
+ "chance": 0.2
+ }
+ ]
+ }
+ },
+ "description": {
+ "category": "dn_sa_food",
+ "identifier": "dn_sa:burger_rotten"
+ }
+ }
+}
\ No newline at end of file
diff --git a/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_burrito.json b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_burrito.json
new file mode 100644
index 0000000..1ec8eee
--- /dev/null
+++ b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_burrito.json
@@ -0,0 +1,17 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:max_stack_size": 64,
+ "minecraft:use_duration": 32,
+ "minecraft:food": {
+ "nutrition": 6,
+ "saturation_modifier": "normal"
+ }
+ },
+ "description": {
+ "category": "dn_sa_food",
+ "identifier": "dn_sa:burrito"
+ }
+ }
+}
\ No newline at end of file
diff --git a/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_burrito_rotten.json b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_burrito_rotten.json
new file mode 100644
index 0000000..2b75c22
--- /dev/null
+++ b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_burrito_rotten.json
@@ -0,0 +1,31 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:max_stack_size": 64,
+ "minecraft:use_duration": 32,
+ "minecraft:food": {
+ "nutrition": 3,
+ "saturation_modifier": "poor",
+ "effects": [
+ {
+ "name": "hunger",
+ "duration": 300,
+ "amplifier": 0,
+ "chance": 0.85
+ },
+ {
+ "name": "nausea",
+ "duration": 120,
+ "amplifier": 0,
+ "chance": 0.2
+ }
+ ]
+ }
+ },
+ "description": {
+ "category": "dn_sa_food",
+ "identifier": "dn_sa:burrito_rotten"
+ }
+ }
+}
\ No newline at end of file
diff --git a/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_butter.json b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_butter.json
new file mode 100644
index 0000000..0125af0
--- /dev/null
+++ b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_butter.json
@@ -0,0 +1,17 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:max_stack_size": 64,
+ "minecraft:use_duration": 32,
+ "minecraft:food": {
+ "nutrition": 1,
+ "saturation_modifier": "poor"
+ }
+ },
+ "description": {
+ "category": "dn_sa_food",
+ "identifier": "dn_sa:butter"
+ }
+ }
+}
\ No newline at end of file
diff --git a/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_camera.json b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_camera.json
new file mode 100644
index 0000000..90d6724
--- /dev/null
+++ b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_camera.json
@@ -0,0 +1,15 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:max_stack_size": 64,
+ "netease:customtips": {
+ "value": "可拆解的电子元件。"
+ }
+ },
+ "description": {
+ "category": "dn_sa",
+ "identifier": "dn_sa:camera"
+ }
+ }
+}
\ No newline at end of file
diff --git a/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_candys.json b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_candys.json
new file mode 100644
index 0000000..08df48b
--- /dev/null
+++ b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_candys.json
@@ -0,0 +1,17 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:max_stack_size": 64,
+ "minecraft:use_duration": 32,
+ "minecraft:food": {
+ "nutrition": 2,
+ "saturation_modifier": "poor"
+ }
+ },
+ "description": {
+ "category": "dn_sa_food",
+ "identifier": "dn_sa:candys"
+ }
+ }
+}
\ No newline at end of file
diff --git a/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_cardboard.json b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_cardboard.json
new file mode 100644
index 0000000..6f38d5a
--- /dev/null
+++ b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_cardboard.json
@@ -0,0 +1,15 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:max_stack_size": 64,
+ "netease:customtips": {
+ "value": "可用于制作物品的塑料材料。"
+ }
+ },
+ "description": {
+ "category": "dn_sa",
+ "identifier": "dn_sa:cardboard"
+ }
+ }
+}
\ No newline at end of file
diff --git a/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_cereal_fruit_loops_flakes.json b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_cereal_fruit_loops_flakes.json
new file mode 100644
index 0000000..8183df6
--- /dev/null
+++ b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_cereal_fruit_loops_flakes.json
@@ -0,0 +1,17 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:max_stack_size": 64,
+ "minecraft:use_duration": 32,
+ "minecraft:food": {
+ "nutrition": 1,
+ "saturation_modifier": "poor"
+ }
+ },
+ "description": {
+ "category": "dn_sa_food",
+ "identifier": "dn_sa:cereal_fruit_loops_flakes"
+ }
+ }
+}
\ No newline at end of file
diff --git a/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_cereal_kelloggys_flakes.json b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_cereal_kelloggys_flakes.json
new file mode 100644
index 0000000..1877723
--- /dev/null
+++ b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_cereal_kelloggys_flakes.json
@@ -0,0 +1,17 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:max_stack_size": 64,
+ "minecraft:use_duration": 32,
+ "minecraft:food": {
+ "nutrition": 1,
+ "saturation_modifier": "poor"
+ }
+ },
+ "description": {
+ "category": "dn_sa_food",
+ "identifier": "dn_sa:cereal_kelloggys_flakes"
+ }
+ }
+}
\ No newline at end of file
diff --git a/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_charcoal_dust.json b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_charcoal_dust.json
new file mode 100644
index 0000000..515ee2c
--- /dev/null
+++ b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_charcoal_dust.json
@@ -0,0 +1,15 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:max_stack_size": 64,
+ "netease:customtips": {
+ "value": "可用于制作的化学材料。"
+ }
+ },
+ "description": {
+ "category": "dn_sa",
+ "identifier": "dn_sa:charcoal_dust"
+ }
+ }
+}
\ No newline at end of file
diff --git a/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_cheese.json b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_cheese.json
new file mode 100644
index 0000000..ad96fd9
--- /dev/null
+++ b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_cheese.json
@@ -0,0 +1,17 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:max_stack_size": 64,
+ "minecraft:use_duration": 32,
+ "minecraft:food": {
+ "nutrition": 3,
+ "saturation_modifier": "low"
+ }
+ },
+ "description": {
+ "category": "dn_sa_food",
+ "identifier": "dn_sa:cheese"
+ }
+ }
+}
\ No newline at end of file
diff --git a/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_cheese_bread.json b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_cheese_bread.json
new file mode 100644
index 0000000..05d6679
--- /dev/null
+++ b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_cheese_bread.json
@@ -0,0 +1,17 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:max_stack_size": 64,
+ "minecraft:use_duration": 32,
+ "minecraft:food": {
+ "nutrition": 4,
+ "saturation_modifier": "low"
+ }
+ },
+ "description": {
+ "category": "dn_sa_food",
+ "identifier": "dn_sa:cheese_bread"
+ }
+ }
+}
\ No newline at end of file
diff --git a/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_cheese_burger.json b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_cheese_burger.json
new file mode 100644
index 0000000..e96b4b9
--- /dev/null
+++ b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_cheese_burger.json
@@ -0,0 +1,17 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:max_stack_size": 64,
+ "minecraft:use_duration": 32,
+ "minecraft:food": {
+ "nutrition": 8,
+ "saturation_modifier": "good"
+ }
+ },
+ "description": {
+ "category": "dn_sa_food",
+ "identifier": "dn_sa:cheese_burger"
+ }
+ }
+}
\ No newline at end of file
diff --git a/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_cheese_burger_rotten.json b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_cheese_burger_rotten.json
new file mode 100644
index 0000000..918e84b
--- /dev/null
+++ b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_cheese_burger_rotten.json
@@ -0,0 +1,31 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:max_stack_size": 64,
+ "minecraft:use_duration": 32,
+ "minecraft:food": {
+ "nutrition": 3,
+ "saturation_modifier": "poor",
+ "effects": [
+ {
+ "name": "hunger",
+ "duration": 300,
+ "amplifier": 0,
+ "chance": 0.85
+ },
+ {
+ "name": "nausea",
+ "duration": 120,
+ "amplifier": 0,
+ "chance": 0.2
+ }
+ ]
+ }
+ },
+ "description": {
+ "category": "dn_sa_food",
+ "identifier": "dn_sa:cheese_burger_rotten"
+ }
+ }
+}
\ No newline at end of file
diff --git a/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_chips.json b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_chips.json
new file mode 100644
index 0000000..c385ed3
--- /dev/null
+++ b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_chips.json
@@ -0,0 +1,17 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:max_stack_size": 64,
+ "minecraft:use_duration": 32,
+ "minecraft:food": {
+ "nutrition": 2,
+ "saturation_modifier": "poor"
+ }
+ },
+ "description": {
+ "category": "dn_sa_food",
+ "identifier": "dn_sa:chips"
+ }
+ }
+}
\ No newline at end of file
diff --git a/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_classic_watch.json b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_classic_watch.json
new file mode 100644
index 0000000..3d056bd
--- /dev/null
+++ b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_classic_watch.json
@@ -0,0 +1,15 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:max_stack_size": 64,
+ "netease:customtips": {
+ "value": "可拆解的电子元件。"
+ }
+ },
+ "description": {
+ "category": "dn_sa",
+ "identifier": "dn_sa:classic_watch"
+ }
+ }
+}
\ No newline at end of file
diff --git a/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_cleaning_liquid.json b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_cleaning_liquid.json
new file mode 100644
index 0000000..0db7fb2
--- /dev/null
+++ b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_cleaning_liquid.json
@@ -0,0 +1,35 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:max_stack_size": 64,
+ "netease:customtips": {
+ "value": "装有液体的容器。"
+ },
+ "minecraft:use_duration": 32,
+ "minecraft:food": {
+ "nutrition": 2,
+ "saturation_modifier": "low",
+ "can_always_eat": true,
+ "effects": [
+ {
+ "name": "poison",
+ "chance": 1.0,
+ "duration": 10,
+ "amplifier": 1
+ },
+ {
+ "name": "nausea",
+ "chance": 1.0,
+ "duration": 15,
+ "amplifier": 0
+ }
+ ]
+ }
+ },
+ "description": {
+ "category": "dn_sa",
+ "identifier": "dn_sa:cleaning_liquid"
+ }
+ }
+}
\ No newline at end of file
diff --git a/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_cloth.json b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_cloth.json
new file mode 100644
index 0000000..9158f1b
--- /dev/null
+++ b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_cloth.json
@@ -0,0 +1,15 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:max_stack_size": 64,
+ "netease:customtips": {
+ "value": "用于缝制、修复与回收的织物材料。"
+ }
+ },
+ "description": {
+ "category": "dn_sa",
+ "identifier": "dn_sa:cloth"
+ }
+ }
+}
\ No newline at end of file
diff --git a/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_copper_wire.json b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_copper_wire.json
new file mode 100644
index 0000000..477854d
--- /dev/null
+++ b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_copper_wire.json
@@ -0,0 +1,15 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:max_stack_size": 64,
+ "netease:customtips": {
+ "value": "用于制作与缝合的线材。"
+ }
+ },
+ "description": {
+ "category": "dn_sa",
+ "identifier": "dn_sa:copper_wire"
+ }
+ }
+}
\ No newline at end of file
diff --git a/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_coxinha.json b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_coxinha.json
new file mode 100644
index 0000000..e5a8f31
--- /dev/null
+++ b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_coxinha.json
@@ -0,0 +1,17 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:max_stack_size": 64,
+ "minecraft:use_duration": 32,
+ "minecraft:food": {
+ "nutrition": 6,
+ "saturation_modifier": "normal"
+ }
+ },
+ "description": {
+ "category": "dn_sa_food",
+ "identifier": "dn_sa:coxinha"
+ }
+ }
+}
\ No newline at end of file
diff --git a/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_dented_can.json b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_dented_can.json
new file mode 100644
index 0000000..d836d5f
--- /dev/null
+++ b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_dented_can.json
@@ -0,0 +1,15 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:max_stack_size": 64,
+ "netease:customtips": {
+ "value": "空容器,可回收利用。"
+ }
+ },
+ "description": {
+ "category": "dn_sa",
+ "identifier": "dn_sa:dented_can"
+ }
+ }
+}
\ No newline at end of file
diff --git a/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_diamond_nugget.json b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_diamond_nugget.json
new file mode 100644
index 0000000..d4e5ace
--- /dev/null
+++ b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_diamond_nugget.json
@@ -0,0 +1,15 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:max_stack_size": 64,
+ "netease:customtips": {
+ "value": "用于锻造与回收的金属材料。"
+ }
+ },
+ "description": {
+ "category": "dn_sa",
+ "identifier": "dn_sa:diamond_nugget"
+ }
+ }
+}
\ No newline at end of file
diff --git a/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_dirty_rags.json b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_dirty_rags.json
new file mode 100644
index 0000000..9448ca4
--- /dev/null
+++ b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_dirty_rags.json
@@ -0,0 +1,15 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:max_stack_size": 64,
+ "netease:customtips": {
+ "value": "用于缝制、修复与回收的织物材料。"
+ }
+ },
+ "description": {
+ "category": "dn_sa",
+ "identifier": "dn_sa:dirty_rags"
+ }
+ }
+}
\ No newline at end of file
diff --git a/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_dish_towel.json b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_dish_towel.json
new file mode 100644
index 0000000..19d05a2
--- /dev/null
+++ b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_dish_towel.json
@@ -0,0 +1,15 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:max_stack_size": 64,
+ "netease:customtips": {
+ "value": "用于缝制、修复与回收的织物材料。"
+ }
+ },
+ "description": {
+ "category": "dn_sa",
+ "identifier": "dn_sa:dish_towel"
+ }
+ }
+}
\ No newline at end of file
diff --git a/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_donut.json b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_donut.json
new file mode 100644
index 0000000..d639cad
--- /dev/null
+++ b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_donut.json
@@ -0,0 +1,17 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:max_stack_size": 64,
+ "minecraft:use_duration": 32,
+ "minecraft:food": {
+ "nutrition": 4,
+ "saturation_modifier": "low"
+ }
+ },
+ "description": {
+ "category": "dn_sa_food",
+ "identifier": "dn_sa:donut"
+ }
+ }
+}
\ No newline at end of file
diff --git a/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_donut_rotten.json b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_donut_rotten.json
new file mode 100644
index 0000000..d30e349
--- /dev/null
+++ b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_donut_rotten.json
@@ -0,0 +1,31 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:max_stack_size": 64,
+ "minecraft:use_duration": 32,
+ "minecraft:food": {
+ "nutrition": 1,
+ "saturation_modifier": "poor",
+ "effects": [
+ {
+ "name": "hunger",
+ "duration": 300,
+ "amplifier": 0,
+ "chance": 0.85
+ },
+ {
+ "name": "nausea",
+ "duration": 120,
+ "amplifier": 0,
+ "chance": 0.2
+ }
+ ]
+ }
+ },
+ "description": {
+ "category": "dn_sa_food",
+ "identifier": "dn_sa:donut_rotten"
+ }
+ }
+}
\ No newline at end of file
diff --git a/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_duct_tape.json b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_duct_tape.json
new file mode 100644
index 0000000..cadcc6b
--- /dev/null
+++ b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_duct_tape.json
@@ -0,0 +1,15 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:max_stack_size": 64,
+ "netease:customtips": {
+ "value": "修复与组装的粘合材料。"
+ }
+ },
+ "description": {
+ "category": "dn_sa",
+ "identifier": "dn_sa:duct_tape"
+ }
+ }
+}
\ No newline at end of file
diff --git a/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_electric_scrap.json b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_electric_scrap.json
new file mode 100644
index 0000000..df81130
--- /dev/null
+++ b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_electric_scrap.json
@@ -0,0 +1,15 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:max_stack_size": 64,
+ "netease:customtips": {
+ "value": "可回收利用的材料。"
+ }
+ },
+ "description": {
+ "category": "dn_sa",
+ "identifier": "dn_sa:electric_scrap"
+ }
+ }
+}
\ No newline at end of file
diff --git a/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_empty_can.json b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_empty_can.json
new file mode 100644
index 0000000..90ef90c
--- /dev/null
+++ b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_empty_can.json
@@ -0,0 +1,15 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:max_stack_size": 64,
+ "netease:customtips": {
+ "value": "空容器,可回收利用。"
+ }
+ },
+ "description": {
+ "category": "dn_sa",
+ "identifier": "dn_sa:empty_can"
+ }
+ }
+}
\ No newline at end of file
diff --git a/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_empty_juice_box.json b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_empty_juice_box.json
new file mode 100644
index 0000000..13cf1ed
--- /dev/null
+++ b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_empty_juice_box.json
@@ -0,0 +1,12 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:max_stack_size": 64
+ },
+ "description": {
+ "category": "dn_sa_food",
+ "identifier": "dn_sa:empty_juice_box"
+ }
+ }
+}
\ No newline at end of file
diff --git a/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_fabric_patch.json b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_fabric_patch.json
new file mode 100644
index 0000000..94bed2e
--- /dev/null
+++ b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_fabric_patch.json
@@ -0,0 +1,15 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:max_stack_size": 64,
+ "netease:customtips": {
+ "value": "用于缝制、修复与回收的织物材料。"
+ }
+ },
+ "description": {
+ "category": "dn_sa",
+ "identifier": "dn_sa:fabric_patch"
+ }
+ }
+}
\ No newline at end of file
diff --git a/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_fermented_mash.json b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_fermented_mash.json
new file mode 100644
index 0000000..6d7c417
--- /dev/null
+++ b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_fermented_mash.json
@@ -0,0 +1,15 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:max_stack_size": 64,
+ "netease:customtips": {
+ "value": "装有液体的容器。"
+ }
+ },
+ "description": {
+ "category": "dn_sa",
+ "identifier": "dn_sa:fermented_mash"
+ }
+ }
+}
\ No newline at end of file
diff --git a/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_fiber_fabric.json b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_fiber_fabric.json
new file mode 100644
index 0000000..58f989f
--- /dev/null
+++ b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_fiber_fabric.json
@@ -0,0 +1,15 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:max_stack_size": 64,
+ "netease:customtips": {
+ "value": "用于缝制、修复与回收的织物材料。"
+ }
+ },
+ "description": {
+ "category": "dn_sa",
+ "identifier": "dn_sa:fiber_fabric"
+ }
+ }
+}
\ No newline at end of file
diff --git a/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_gasoline_bucket.json b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_gasoline_bucket.json
new file mode 100644
index 0000000..965ac3b
--- /dev/null
+++ b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_gasoline_bucket.json
@@ -0,0 +1,15 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:max_stack_size": 64,
+ "netease:customtips": {
+ "value": "装有液体的容器。"
+ }
+ },
+ "description": {
+ "category": "dn_sa",
+ "identifier": "dn_sa:gasoline_bucket"
+ }
+ }
+}
\ No newline at end of file
diff --git a/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_generator_manual.json b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_generator_manual.json
new file mode 100644
index 0000000..dd4850d
--- /dev/null
+++ b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_generator_manual.json
@@ -0,0 +1,15 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:max_stack_size": 64,
+ "netease:customtips": {
+ "value": "学习手册并完成实践训练以操作汽油发电机。"
+ }
+ },
+ "description": {
+ "category": "dn_sa",
+ "identifier": "dn_sa:generator_manual"
+ }
+ }
+}
\ No newline at end of file
diff --git a/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_glue.json b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_glue.json
new file mode 100644
index 0000000..4c5e1fe
--- /dev/null
+++ b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_glue.json
@@ -0,0 +1,15 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:max_stack_size": 64,
+ "netease:customtips": {
+ "value": "修复与组装的粘合材料。"
+ }
+ },
+ "description": {
+ "category": "dn_sa",
+ "identifier": "dn_sa:glue"
+ }
+ }
+}
\ No newline at end of file
diff --git a/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_grape_juice_box.json b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_grape_juice_box.json
new file mode 100644
index 0000000..ee9f019
--- /dev/null
+++ b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_grape_juice_box.json
@@ -0,0 +1,19 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:max_stack_size": 64,
+ "minecraft:use_duration": 40,
+ "minecraft:food": {
+ "nutrition": 3,
+ "saturation_modifier": "low",
+ "can_always_eat": true,
+ "using_converts_to": "dn_sa:empty_juice_box"
+ }
+ },
+ "description": {
+ "category": "dn_sa_food",
+ "identifier": "dn_sa:grape_juice_box"
+ }
+ }
+}
\ No newline at end of file
diff --git a/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_hair_gel.json b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_hair_gel.json
new file mode 100644
index 0000000..2ca3e07
--- /dev/null
+++ b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_hair_gel.json
@@ -0,0 +1,15 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:max_stack_size": 64,
+ "netease:customtips": {
+ "value": "装有液体的容器。"
+ }
+ },
+ "description": {
+ "category": "dn_sa",
+ "identifier": "dn_sa:hair_gel"
+ }
+ }
+}
\ No newline at end of file
diff --git a/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_hot_dog.json b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_hot_dog.json
new file mode 100644
index 0000000..b3a9037
--- /dev/null
+++ b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_hot_dog.json
@@ -0,0 +1,17 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:max_stack_size": 64,
+ "minecraft:use_duration": 32,
+ "minecraft:food": {
+ "nutrition": 6,
+ "saturation_modifier": "normal"
+ }
+ },
+ "description": {
+ "category": "dn_sa_food",
+ "identifier": "dn_sa:hot_dog"
+ }
+ }
+}
\ No newline at end of file
diff --git a/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_hot_dog_rotten.json b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_hot_dog_rotten.json
new file mode 100644
index 0000000..b04615c
--- /dev/null
+++ b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_hot_dog_rotten.json
@@ -0,0 +1,31 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:max_stack_size": 64,
+ "minecraft:use_duration": 32,
+ "minecraft:food": {
+ "nutrition": 3,
+ "saturation_modifier": "poor",
+ "effects": [
+ {
+ "name": "hunger",
+ "duration": 300,
+ "amplifier": 0,
+ "chance": 0.85
+ },
+ {
+ "name": "nausea",
+ "duration": 120,
+ "amplifier": 0,
+ "chance": 0.2
+ }
+ ]
+ }
+ },
+ "description": {
+ "category": "dn_sa_food",
+ "identifier": "dn_sa:hot_dog_rotten"
+ }
+ }
+}
\ No newline at end of file
diff --git a/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_insulated_copper_wire.json b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_insulated_copper_wire.json
new file mode 100644
index 0000000..581ea40
--- /dev/null
+++ b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_insulated_copper_wire.json
@@ -0,0 +1,15 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:max_stack_size": 64,
+ "netease:customtips": {
+ "value": "用于制作与缝合的线材。"
+ }
+ },
+ "description": {
+ "category": "dn_sa",
+ "identifier": "dn_sa:insulated_copper_wire"
+ }
+ }
+}
\ No newline at end of file
diff --git a/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_jianbing.json b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_jianbing.json
new file mode 100644
index 0000000..e95ba68
--- /dev/null
+++ b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_jianbing.json
@@ -0,0 +1,17 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:max_stack_size": 64,
+ "minecraft:use_duration": 32,
+ "minecraft:food": {
+ "nutrition": 6,
+ "saturation_modifier": "normal"
+ }
+ },
+ "description": {
+ "category": "dn_sa_food",
+ "identifier": "dn_sa:jianbing"
+ }
+ }
+}
\ No newline at end of file
diff --git a/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_jianbing_rotten.json b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_jianbing_rotten.json
new file mode 100644
index 0000000..188b26f
--- /dev/null
+++ b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_jianbing_rotten.json
@@ -0,0 +1,31 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:max_stack_size": 64,
+ "minecraft:use_duration": 32,
+ "minecraft:food": {
+ "nutrition": 3,
+ "saturation_modifier": "poor",
+ "effects": [
+ {
+ "name": "hunger",
+ "duration": 300,
+ "amplifier": 0,
+ "chance": 0.85
+ },
+ {
+ "name": "nausea",
+ "duration": 120,
+ "amplifier": 0,
+ "chance": 0.2
+ }
+ ]
+ }
+ },
+ "description": {
+ "category": "dn_sa_food",
+ "identifier": "dn_sa:jianbing_rotten"
+ }
+ }
+}
\ No newline at end of file
diff --git a/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_kevlar.json b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_kevlar.json
new file mode 100644
index 0000000..e509bad
--- /dev/null
+++ b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_kevlar.json
@@ -0,0 +1,15 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:max_stack_size": 64,
+ "netease:customtips": {
+ "value": "用于缝制、修复与回收的织物材料。"
+ }
+ },
+ "description": {
+ "category": "dn_sa",
+ "identifier": "dn_sa:kevlar"
+ }
+ }
+}
\ No newline at end of file
diff --git a/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_kevlar_thread.json b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_kevlar_thread.json
new file mode 100644
index 0000000..6b7f9c4
--- /dev/null
+++ b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_kevlar_thread.json
@@ -0,0 +1,15 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:max_stack_size": 64,
+ "netease:customtips": {
+ "value": "用于制作与缝合的线材。"
+ }
+ },
+ "description": {
+ "category": "dn_sa",
+ "identifier": "dn_sa:kevlar_thread"
+ }
+ }
+}
\ No newline at end of file
diff --git a/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_leather_strip.json b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_leather_strip.json
new file mode 100644
index 0000000..43cc398
--- /dev/null
+++ b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_leather_strip.json
@@ -0,0 +1,15 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:max_stack_size": 64,
+ "netease:customtips": {
+ "value": "用于缝制、修复与回收的织物材料。"
+ }
+ },
+ "description": {
+ "category": "dn_sa",
+ "identifier": "dn_sa:leather_strip"
+ }
+ }
+}
\ No newline at end of file
diff --git a/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_lunch_bag.json b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_lunch_bag.json
new file mode 100644
index 0000000..d0e3952
--- /dev/null
+++ b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_lunch_bag.json
@@ -0,0 +1,15 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:max_stack_size": 64,
+ "netease:customtips": {
+ "value": "存放食物的袋子。"
+ }
+ },
+ "description": {
+ "category": "dn_sa",
+ "identifier": "dn_sa:lunch_bag"
+ }
+ }
+}
\ No newline at end of file
diff --git a/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_matchbox.json b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_matchbox.json
new file mode 100644
index 0000000..060d6a9
--- /dev/null
+++ b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_matchbox.json
@@ -0,0 +1,16 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:max_stack_size": 1,
+ "minecraft:max_damage": 20,
+ "netease:customtips": {
+ "value": "点燃方块和火焰"
+ }
+ },
+ "description": {
+ "category": "dn_sa",
+ "identifier": "dn_sa:matchbox"
+ }
+ }
+}
\ No newline at end of file
diff --git a/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_meat_pastel.json b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_meat_pastel.json
new file mode 100644
index 0000000..6309ec7
--- /dev/null
+++ b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_meat_pastel.json
@@ -0,0 +1,17 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:max_stack_size": 64,
+ "minecraft:use_duration": 32,
+ "minecraft:food": {
+ "nutrition": 6,
+ "saturation_modifier": "normal"
+ }
+ },
+ "description": {
+ "category": "dn_sa_food",
+ "identifier": "dn_sa:meat_pastel"
+ }
+ }
+}
\ No newline at end of file
diff --git a/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_medical_adhesive.json b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_medical_adhesive.json
new file mode 100644
index 0000000..b8b8332
--- /dev/null
+++ b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_medical_adhesive.json
@@ -0,0 +1,15 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:max_stack_size": 64,
+ "netease:customtips": {
+ "value": "修复与组装的粘合材料。"
+ }
+ },
+ "description": {
+ "category": "dn_sa",
+ "identifier": "dn_sa:medical_adhesive"
+ }
+ }
+}
\ No newline at end of file
diff --git a/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_metal_pipe.json b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_metal_pipe.json
new file mode 100644
index 0000000..ff4742c
--- /dev/null
+++ b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_metal_pipe.json
@@ -0,0 +1,15 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:max_stack_size": 64,
+ "netease:customtips": {
+ "value": "用于锻造与回收的金属材料。"
+ }
+ },
+ "description": {
+ "category": "dn_sa",
+ "identifier": "dn_sa:metal_pipe"
+ }
+ }
+}
\ No newline at end of file
diff --git a/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_metal_scrap.json b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_metal_scrap.json
new file mode 100644
index 0000000..d4f1d96
--- /dev/null
+++ b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_metal_scrap.json
@@ -0,0 +1,15 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:max_stack_size": 64,
+ "netease:customtips": {
+ "value": "可回收利用的材料。"
+ }
+ },
+ "description": {
+ "category": "dn_sa",
+ "identifier": "dn_sa:metal_scrap"
+ }
+ }
+}
\ No newline at end of file
diff --git a/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_metal_sheet.json b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_metal_sheet.json
new file mode 100644
index 0000000..b8265bd
--- /dev/null
+++ b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_metal_sheet.json
@@ -0,0 +1,15 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:max_stack_size": 64,
+ "netease:customtips": {
+ "value": "用于锻造与回收的金属材料。"
+ }
+ },
+ "description": {
+ "category": "dn_sa",
+ "identifier": "dn_sa:metal_sheet"
+ }
+ }
+}
\ No newline at end of file
diff --git a/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_money.json b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_money.json
new file mode 100644
index 0000000..2ababab
--- /dev/null
+++ b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_money.json
@@ -0,0 +1,15 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:max_stack_size": 64,
+ "netease:customtips": {
+ "value": "战利品货币"
+ }
+ },
+ "description": {
+ "category": "dn_sa",
+ "identifier": "dn_sa:money"
+ }
+ }
+}
\ No newline at end of file
diff --git a/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_money_bundle.json b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_money_bundle.json
new file mode 100644
index 0000000..dc2b797
--- /dev/null
+++ b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_money_bundle.json
@@ -0,0 +1,15 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:max_stack_size": 64,
+ "netease:customtips": {
+ "value": "一捆货币"
+ }
+ },
+ "description": {
+ "category": "dn_sa",
+ "identifier": "dn_sa:money_bundle"
+ }
+ }
+}
\ No newline at end of file
diff --git a/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_nails.json b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_nails.json
new file mode 100644
index 0000000..daf27c0
--- /dev/null
+++ b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_nails.json
@@ -0,0 +1,15 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:max_stack_size": 64,
+ "netease:customtips": {
+ "value": "用于组装的紧固件。"
+ }
+ },
+ "description": {
+ "category": "dn_sa",
+ "identifier": "dn_sa:nails"
+ }
+ }
+}
\ No newline at end of file
diff --git a/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_netherite_nugget.json b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_netherite_nugget.json
new file mode 100644
index 0000000..fca4d95
--- /dev/null
+++ b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_netherite_nugget.json
@@ -0,0 +1,15 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:max_stack_size": 64,
+ "netease:customtips": {
+ "value": "用于锻造与回收的金属材料。"
+ }
+ },
+ "description": {
+ "category": "dn_sa",
+ "identifier": "dn_sa:netherite_nugget"
+ }
+ }
+}
\ No newline at end of file
diff --git a/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_orange_juice_box.json b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_orange_juice_box.json
new file mode 100644
index 0000000..96cbaf8
--- /dev/null
+++ b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_orange_juice_box.json
@@ -0,0 +1,19 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:max_stack_size": 64,
+ "minecraft:use_duration": 40,
+ "minecraft:food": {
+ "nutrition": 3,
+ "saturation_modifier": "normal",
+ "can_always_eat": true,
+ "using_converts_to": "dn_sa:empty_juice_box"
+ }
+ },
+ "description": {
+ "category": "dn_sa_food",
+ "identifier": "dn_sa:orange_juice_box"
+ }
+ }
+}
\ No newline at end of file
diff --git a/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_pacoquita.json b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_pacoquita.json
new file mode 100644
index 0000000..311dc8b
--- /dev/null
+++ b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_pacoquita.json
@@ -0,0 +1,17 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:max_stack_size": 64,
+ "minecraft:use_duration": 32,
+ "minecraft:food": {
+ "nutrition": 3,
+ "saturation_modifier": "low"
+ }
+ },
+ "description": {
+ "category": "dn_sa_food",
+ "identifier": "dn_sa:pacoquita"
+ }
+ }
+}
\ No newline at end of file
diff --git a/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_paperclip.json b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_paperclip.json
new file mode 100644
index 0000000..d125bd2
--- /dev/null
+++ b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_paperclip.json
@@ -0,0 +1,15 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:max_stack_size": 64,
+ "netease:customtips": {
+ "value": "用于组装的紧固件。"
+ }
+ },
+ "description": {
+ "category": "dn_sa",
+ "identifier": "dn_sa:paperclip"
+ }
+ }
+}
\ No newline at end of file
diff --git a/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_pizza.json b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_pizza.json
new file mode 100644
index 0000000..38c95ec
--- /dev/null
+++ b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_pizza.json
@@ -0,0 +1,17 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:max_stack_size": 64,
+ "minecraft:use_duration": 32,
+ "minecraft:food": {
+ "nutrition": 4,
+ "saturation_modifier": "low"
+ }
+ },
+ "description": {
+ "category": "dn_sa_food",
+ "identifier": "dn_sa:pizza"
+ }
+ }
+}
\ No newline at end of file
diff --git a/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_plastic.json b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_plastic.json
new file mode 100644
index 0000000..18ea6ca
--- /dev/null
+++ b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_plastic.json
@@ -0,0 +1,15 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:max_stack_size": 64,
+ "netease:customtips": {
+ "value": "可用于制作物品的塑料材料。"
+ }
+ },
+ "description": {
+ "category": "dn_sa",
+ "identifier": "dn_sa:plastic"
+ }
+ }
+}
\ No newline at end of file
diff --git a/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_plastic_bag.json b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_plastic_bag.json
new file mode 100644
index 0000000..11a8ec5
--- /dev/null
+++ b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_plastic_bag.json
@@ -0,0 +1,15 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:max_stack_size": 64,
+ "netease:customtips": {
+ "value": "可用于制作物品的塑料材料。"
+ }
+ },
+ "description": {
+ "category": "dn_sa",
+ "identifier": "dn_sa:plastic_bag"
+ }
+ }
+}
\ No newline at end of file
diff --git a/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_plastic_plate.json b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_plastic_plate.json
new file mode 100644
index 0000000..883e70d
--- /dev/null
+++ b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_plastic_plate.json
@@ -0,0 +1,15 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:max_stack_size": 64,
+ "netease:customtips": {
+ "value": "可用于制作物品的塑料材料。"
+ }
+ },
+ "description": {
+ "category": "dn_sa",
+ "identifier": "dn_sa:plastic_plate"
+ }
+ }
+}
\ No newline at end of file
diff --git a/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_polyester.json b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_polyester.json
new file mode 100644
index 0000000..b857d18
--- /dev/null
+++ b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_polyester.json
@@ -0,0 +1,15 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:max_stack_size": 64,
+ "netease:customtips": {
+ "value": "用于缝制、修复与回收的织物材料。"
+ }
+ },
+ "description": {
+ "category": "dn_sa",
+ "identifier": "dn_sa:polyester"
+ }
+ }
+}
\ No newline at end of file
diff --git a/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_polyester_thread.json b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_polyester_thread.json
new file mode 100644
index 0000000..176b38e
--- /dev/null
+++ b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_polyester_thread.json
@@ -0,0 +1,15 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:max_stack_size": 64,
+ "netease:customtips": {
+ "value": "用于制作与缝合的线材。"
+ }
+ },
+ "description": {
+ "category": "dn_sa",
+ "identifier": "dn_sa:polyester_thread"
+ }
+ }
+}
\ No newline at end of file
diff --git a/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_rags.json b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_rags.json
new file mode 100644
index 0000000..83a575f
--- /dev/null
+++ b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_rags.json
@@ -0,0 +1,15 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:max_stack_size": 64,
+ "netease:customtips": {
+ "value": "用于缝制、修复与回收的织物材料。"
+ }
+ },
+ "description": {
+ "category": "dn_sa",
+ "identifier": "dn_sa:rags"
+ }
+ }
+}
\ No newline at end of file
diff --git a/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_raw_cheese_pastel.json b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_raw_cheese_pastel.json
new file mode 100644
index 0000000..03378ac
--- /dev/null
+++ b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_raw_cheese_pastel.json
@@ -0,0 +1,25 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:max_stack_size": 64,
+ "minecraft:use_duration": 32,
+ "minecraft:food": {
+ "nutrition": 1,
+ "saturation_modifier": "poor",
+ "effects": [
+ {
+ "name": "poison",
+ "duration": 160,
+ "amplifier": 0,
+ "chance": 1.0
+ }
+ ]
+ }
+ },
+ "description": {
+ "category": "dn_sa_food",
+ "identifier": "dn_sa:raw_cheese_pastel"
+ }
+ }
+}
\ No newline at end of file
diff --git a/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_raw_coxinha.json b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_raw_coxinha.json
new file mode 100644
index 0000000..bd97f51
--- /dev/null
+++ b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_raw_coxinha.json
@@ -0,0 +1,25 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:max_stack_size": 64,
+ "minecraft:use_duration": 32,
+ "minecraft:food": {
+ "nutrition": 1,
+ "saturation_modifier": "poor",
+ "effects": [
+ {
+ "name": "poison",
+ "duration": 160,
+ "amplifier": 0,
+ "chance": 1.0
+ }
+ ]
+ }
+ },
+ "description": {
+ "category": "dn_sa_food",
+ "identifier": "dn_sa:raw_coxinha"
+ }
+ }
+}
\ No newline at end of file
diff --git a/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_raw_meat_pastel.json b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_raw_meat_pastel.json
new file mode 100644
index 0000000..5aff839
--- /dev/null
+++ b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_raw_meat_pastel.json
@@ -0,0 +1,25 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:max_stack_size": 64,
+ "minecraft:use_duration": 32,
+ "minecraft:food": {
+ "nutrition": 1,
+ "saturation_modifier": "poor",
+ "effects": [
+ {
+ "name": "poison",
+ "duration": 160,
+ "amplifier": 0,
+ "chance": 1.0
+ }
+ ]
+ }
+ },
+ "description": {
+ "category": "dn_sa_food",
+ "identifier": "dn_sa:raw_meat_pastel"
+ }
+ }
+}
\ No newline at end of file
diff --git a/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_raw_wind_pastel.json b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_raw_wind_pastel.json
new file mode 100644
index 0000000..b14b9bb
--- /dev/null
+++ b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_raw_wind_pastel.json
@@ -0,0 +1,25 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:max_stack_size": 64,
+ "minecraft:use_duration": 32,
+ "minecraft:food": {
+ "nutrition": 1,
+ "saturation_modifier": "poor",
+ "effects": [
+ {
+ "name": "poison",
+ "duration": 160,
+ "amplifier": 0,
+ "chance": 1.0
+ }
+ ]
+ }
+ },
+ "description": {
+ "category": "dn_sa_food",
+ "identifier": "dn_sa:raw_wind_pastel"
+ }
+ }
+}
\ No newline at end of file
diff --git a/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_rotten_coxinha.json b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_rotten_coxinha.json
new file mode 100644
index 0000000..7a4dbc1
--- /dev/null
+++ b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_rotten_coxinha.json
@@ -0,0 +1,31 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:max_stack_size": 64,
+ "minecraft:use_duration": 32,
+ "minecraft:food": {
+ "nutrition": 2,
+ "saturation_modifier": "poor",
+ "effects": [
+ {
+ "name": "hunger",
+ "duration": 300,
+ "amplifier": 0,
+ "chance": 0.85
+ },
+ {
+ "name": "nausea",
+ "duration": 120,
+ "amplifier": 0,
+ "chance": 0.2
+ }
+ ]
+ }
+ },
+ "description": {
+ "category": "dn_sa_food",
+ "identifier": "dn_sa:rotten_coxinha"
+ }
+ }
+}
\ No newline at end of file
diff --git a/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_rubber.json b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_rubber.json
new file mode 100644
index 0000000..17b2b5c
--- /dev/null
+++ b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_rubber.json
@@ -0,0 +1,15 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:max_stack_size": 64,
+ "netease:customtips": {
+ "value": "合成与回收材料。"
+ }
+ },
+ "description": {
+ "category": "dn_sa",
+ "identifier": "dn_sa:rubber"
+ }
+ }
+}
\ No newline at end of file
diff --git a/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_rubbing_alcohol.json b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_rubbing_alcohol.json
new file mode 100644
index 0000000..05c9642
--- /dev/null
+++ b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_rubbing_alcohol.json
@@ -0,0 +1,35 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:max_stack_size": 64,
+ "netease:customtips": {
+ "value": "装有液体的容器。"
+ },
+ "minecraft:use_duration": 32,
+ "minecraft:food": {
+ "nutrition": 2,
+ "saturation_modifier": "low",
+ "can_always_eat": true,
+ "effects": [
+ {
+ "name": "poison",
+ "chance": 1.0,
+ "duration": 10,
+ "amplifier": 1
+ },
+ {
+ "name": "nausea",
+ "chance": 1.0,
+ "duration": 15,
+ "amplifier": 0
+ }
+ ]
+ }
+ },
+ "description": {
+ "category": "dn_sa",
+ "identifier": "dn_sa:rubbing_alcohol"
+ }
+ }
+}
\ No newline at end of file
diff --git a/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_saltine_cracker.json b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_saltine_cracker.json
new file mode 100644
index 0000000..75792b3
--- /dev/null
+++ b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_saltine_cracker.json
@@ -0,0 +1,17 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:max_stack_size": 64,
+ "minecraft:use_duration": 32,
+ "minecraft:food": {
+ "nutrition": 2,
+ "saturation_modifier": "poor"
+ }
+ },
+ "description": {
+ "category": "dn_sa_food",
+ "identifier": "dn_sa:saltine_cracker"
+ }
+ }
+}
\ No newline at end of file
diff --git a/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_saw_blade.json b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_saw_blade.json
new file mode 100644
index 0000000..fee8a23
--- /dev/null
+++ b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_saw_blade.json
@@ -0,0 +1,15 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:max_stack_size": 64,
+ "netease:customtips": {
+ "value": "锯子部件,用于制作工具"
+ }
+ },
+ "description": {
+ "category": "dn_sa",
+ "identifier": "dn_sa:saw_blade"
+ }
+ }
+}
\ No newline at end of file
diff --git a/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_scrap_nugget.json b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_scrap_nugget.json
new file mode 100644
index 0000000..94ac142
--- /dev/null
+++ b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_scrap_nugget.json
@@ -0,0 +1,15 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:max_stack_size": 64,
+ "netease:customtips": {
+ "value": "用于锻造与回收的金属材料。"
+ }
+ },
+ "description": {
+ "category": "dn_sa",
+ "identifier": "dn_sa:scrap_nugget"
+ }
+ }
+}
\ No newline at end of file
diff --git a/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_scrap_wood.json b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_scrap_wood.json
new file mode 100644
index 0000000..4ec685d
--- /dev/null
+++ b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_scrap_wood.json
@@ -0,0 +1,15 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:max_stack_size": 64,
+ "netease:customtips": {
+ "value": "可回收利用的材料。"
+ }
+ },
+ "description": {
+ "category": "dn_sa",
+ "identifier": "dn_sa:scrap_wood"
+ }
+ }
+}
\ No newline at end of file
diff --git a/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_screws.json b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_screws.json
new file mode 100644
index 0000000..59d1d77
--- /dev/null
+++ b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_screws.json
@@ -0,0 +1,15 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:max_stack_size": 64,
+ "netease:customtips": {
+ "value": "用于组装的紧固件。"
+ }
+ },
+ "description": {
+ "category": "dn_sa",
+ "identifier": "dn_sa:screws"
+ }
+ }
+}
\ No newline at end of file
diff --git a/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_small_metal_sheet.json b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_small_metal_sheet.json
new file mode 100644
index 0000000..f0130a6
--- /dev/null
+++ b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_small_metal_sheet.json
@@ -0,0 +1,15 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:max_stack_size": 64,
+ "netease:customtips": {
+ "value": "用于锻造与回收的金属材料。"
+ }
+ },
+ "description": {
+ "category": "dn_sa",
+ "identifier": "dn_sa:small_metal_sheet"
+ }
+ }
+}
\ No newline at end of file
diff --git a/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_sterilized_rags.json b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_sterilized_rags.json
new file mode 100644
index 0000000..450562d
--- /dev/null
+++ b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_sterilized_rags.json
@@ -0,0 +1,15 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:max_stack_size": 64,
+ "netease:customtips": {
+ "value": "清洁医用布。使用后返还脏抹布"
+ }
+ },
+ "description": {
+ "category": "dn_sa",
+ "identifier": "dn_sa:sterilized_rags"
+ }
+ }
+}
\ No newline at end of file
diff --git a/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_sulfur.json b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_sulfur.json
new file mode 100644
index 0000000..329fef3
--- /dev/null
+++ b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_sulfur.json
@@ -0,0 +1,15 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:max_stack_size": 64,
+ "netease:customtips": {
+ "value": "可用于制作的化学材料。"
+ }
+ },
+ "description": {
+ "category": "dn_sa",
+ "identifier": "dn_sa:sulfur"
+ }
+ }
+}
\ No newline at end of file
diff --git a/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_sulfur_dust.json b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_sulfur_dust.json
new file mode 100644
index 0000000..839969c
--- /dev/null
+++ b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_sulfur_dust.json
@@ -0,0 +1,15 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:max_stack_size": 64,
+ "netease:customtips": {
+ "value": "可用于制作的化学材料。"
+ }
+ },
+ "description": {
+ "category": "dn_sa",
+ "identifier": "dn_sa:sulfur_dust"
+ }
+ }
+}
\ No newline at end of file
diff --git a/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_taco.json b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_taco.json
new file mode 100644
index 0000000..ac56783
--- /dev/null
+++ b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_taco.json
@@ -0,0 +1,17 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:max_stack_size": 64,
+ "minecraft:use_duration": 32,
+ "minecraft:food": {
+ "nutrition": 5,
+ "saturation_modifier": "normal"
+ }
+ },
+ "description": {
+ "category": "dn_sa_food",
+ "identifier": "dn_sa:taco"
+ }
+ }
+}
\ No newline at end of file
diff --git a/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_taco_rotten.json b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_taco_rotten.json
new file mode 100644
index 0000000..3417814
--- /dev/null
+++ b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_taco_rotten.json
@@ -0,0 +1,31 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:max_stack_size": 64,
+ "minecraft:use_duration": 32,
+ "minecraft:food": {
+ "nutrition": 2,
+ "saturation_modifier": "poor",
+ "effects": [
+ {
+ "name": "hunger",
+ "duration": 300,
+ "amplifier": 0,
+ "chance": 0.85
+ },
+ {
+ "name": "nausea",
+ "duration": 120,
+ "amplifier": 0,
+ "chance": 0.2
+ }
+ ]
+ }
+ },
+ "description": {
+ "category": "dn_sa_food",
+ "identifier": "dn_sa:taco_rotten"
+ }
+ }
+}
\ No newline at end of file
diff --git a/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_thread.json b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_thread.json
new file mode 100644
index 0000000..4f388cd
--- /dev/null
+++ b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_thread.json
@@ -0,0 +1,15 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:max_stack_size": 64,
+ "netease:customtips": {
+ "value": "用于制作与缝合的线材。"
+ }
+ },
+ "description": {
+ "category": "dn_sa",
+ "identifier": "dn_sa:thread"
+ }
+ }
+}
\ No newline at end of file
diff --git a/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_tin_can.json b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_tin_can.json
new file mode 100644
index 0000000..c4ee0d4
--- /dev/null
+++ b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_tin_can.json
@@ -0,0 +1,15 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:max_stack_size": 64,
+ "netease:customtips": {
+ "value": "空容器,可回收利用。"
+ }
+ },
+ "description": {
+ "category": "dn_sa",
+ "identifier": "dn_sa:tin_can"
+ }
+ }
+}
\ No newline at end of file
diff --git a/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_toast.json b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_toast.json
new file mode 100644
index 0000000..50092a3
--- /dev/null
+++ b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_toast.json
@@ -0,0 +1,17 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:max_stack_size": 64,
+ "minecraft:use_duration": 32,
+ "minecraft:food": {
+ "nutrition": 3,
+ "saturation_modifier": "low"
+ }
+ },
+ "description": {
+ "category": "dn_sa_food",
+ "identifier": "dn_sa:toast"
+ }
+ }
+}
\ No newline at end of file
diff --git a/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_toast_rotten.json b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_toast_rotten.json
new file mode 100644
index 0000000..ec8131c
--- /dev/null
+++ b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_toast_rotten.json
@@ -0,0 +1,31 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:max_stack_size": 64,
+ "minecraft:use_duration": 32,
+ "minecraft:food": {
+ "nutrition": 1,
+ "saturation_modifier": "poor",
+ "effects": [
+ {
+ "name": "hunger",
+ "duration": 300,
+ "amplifier": 0,
+ "chance": 0.85
+ },
+ {
+ "name": "nausea",
+ "duration": 120,
+ "amplifier": 0,
+ "chance": 0.2
+ }
+ ]
+ }
+ },
+ "description": {
+ "category": "dn_sa_food",
+ "identifier": "dn_sa:toast_rotten"
+ }
+ }
+}
\ No newline at end of file
diff --git a/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_waffles.json b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_waffles.json
new file mode 100644
index 0000000..44a3bbc
--- /dev/null
+++ b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_waffles.json
@@ -0,0 +1,17 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:max_stack_size": 64,
+ "minecraft:use_duration": 32,
+ "minecraft:food": {
+ "nutrition": 5,
+ "saturation_modifier": "normal"
+ }
+ },
+ "description": {
+ "category": "dn_sa_food",
+ "identifier": "dn_sa:waffles"
+ }
+ }
+}
\ No newline at end of file
diff --git a/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_waffles_rotten.json b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_waffles_rotten.json
new file mode 100644
index 0000000..f094af5
--- /dev/null
+++ b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_waffles_rotten.json
@@ -0,0 +1,31 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:max_stack_size": 64,
+ "minecraft:use_duration": 32,
+ "minecraft:food": {
+ "nutrition": 2,
+ "saturation_modifier": "poor",
+ "effects": [
+ {
+ "name": "hunger",
+ "duration": 300,
+ "amplifier": 0,
+ "chance": 0.85
+ },
+ {
+ "name": "nausea",
+ "duration": 120,
+ "amplifier": 0,
+ "chance": 0.2
+ }
+ ]
+ }
+ },
+ "description": {
+ "category": "dn_sa_food",
+ "identifier": "dn_sa:waffles_rotten"
+ }
+ }
+}
\ No newline at end of file
diff --git a/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_wind_pastel.json b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_wind_pastel.json
new file mode 100644
index 0000000..53c1bac
--- /dev/null
+++ b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_wind_pastel.json
@@ -0,0 +1,17 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:max_stack_size": 64,
+ "minecraft:use_duration": 32,
+ "minecraft:food": {
+ "nutrition": 4,
+ "saturation_modifier": "low"
+ }
+ },
+ "description": {
+ "category": "dn_sa_food",
+ "identifier": "dn_sa:wind_pastel"
+ }
+ }
+}
\ No newline at end of file
diff --git a/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_wire.json b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_wire.json
new file mode 100644
index 0000000..b76f10e
--- /dev/null
+++ b/behavior_pack_kcH4M5u0/netease_items_beh/dn_sa_wire.json
@@ -0,0 +1,15 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:max_stack_size": 64,
+ "netease:customtips": {
+ "value": "用于制作与缝合的线材。"
+ }
+ },
+ "description": {
+ "category": "dn_sa",
+ "identifier": "dn_sa:wire"
+ }
+ }
+}
\ No newline at end of file
diff --git a/behavior_pack_kcH4M5u0/netease_tab/tab.json b/behavior_pack_kcH4M5u0/netease_tab/tab.json
new file mode 100644
index 0000000..99b5a23
--- /dev/null
+++ b/behavior_pack_kcH4M5u0/netease_tab/tab.json
@@ -0,0 +1,14 @@
+{
+ "category": [
+ {
+ "name": "dn_sa",
+ "labelText": "dn_sa:tab_description",
+ "icon": "textures/blocks/generator"
+ },
+ {
+ "name": "dn_sa_food",
+ "labelText": "dn_sa:tab_food",
+ "icon": "textures/items/burger"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/behavior_pack_kcH4M5u0/scripts/__init__.py b/behavior_pack_kcH4M5u0/scripts/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/behavior_pack_kcH4M5u0/scripts/matchboxServer.py b/behavior_pack_kcH4M5u0/scripts/matchboxServer.py
new file mode 100644
index 0000000..b8bfa64
--- /dev/null
+++ b/behavior_pack_kcH4M5u0/scripts/matchboxServer.py
@@ -0,0 +1,88 @@
+# -*- coding: utf-8 -*-
+#
+# 火柴盒:点击方块消耗一点耐久并点燃地面,共20点耐久(对齐Java版sa_core火柴盒=打火石)
+import mod.server.extraServerApi as serverApi
+
+compFactory = serverApi.GetEngineCompFactory()
+
+MATCHBOX_ID = "dn_sa:matchbox"
+
+# 需要监听右键的原版方块(地面及常见方块),aux 用 * 匹配所有附加值
+LISTEN_BLOCKS = [
+ "minecraft:grass_block:*",
+ "minecraft:dirt:*",
+ "minecraft:coarse_dirt:*",
+ "minecraft:podzol:*",
+ "minecraft:mycelium:*",
+ "minecraft:moss_block:*",
+ "minecraft:mud:*",
+ "minecraft:stone:*",
+ "minecraft:cobblestone:*",
+ "minecraft:mossy_cobblestone:*",
+ "minecraft:gravel:*",
+ "minecraft:sand:*",
+ "minecraft:sandstone:*",
+ "minecraft:clay:*",
+ "minecraft:snow_layer:*",
+ "minecraft:dirt_path:*",
+ "minecraft:netherrack:*",
+ "minecraft:end_stone:*",
+ "minecraft:obsidian:*",
+ "minecraft:log:*",
+ "minecraft:log2:*",
+ "minecraft:planks:*",
+ "minecraft:stone_bricks:*",
+ "minecraft:bricks:*",
+ "minecraft:terracotta:*",
+]
+
+# 点击方块面 -> 火焰放置位置偏移(Facing枚举:0下 1上 2北 3南 4西 5东)
+FACE_OFFSETS = {
+ 0: (0, -1, 0),
+ 1: (0, 1, 0),
+ 2: (0, 0, -1),
+ 3: (0, 0, 1),
+ 4: (-1, 0, 0),
+ 5: (1, 0, 0),
+}
+
+
+class MatchboxServer(serverApi.GetServerSystemCls()):
+ def __init__(self, namespace, name):
+ super(MatchboxServer, self).__init__(namespace, name)
+ self.levelId = serverApi.GetLevelId()
+ self.ListenForEvent(serverApi.GetEngineNamespace(), serverApi.GetEngineSystemName(),
+ "ServerBlockUseEvent", self, self.OnBlockUse)
+ self.ListenForEvent(serverApi.GetEngineNamespace(), serverApi.GetEngineSystemName(),
+ "LoadServerAddonScriptsAfter", self, self.OnLoadAddon)
+
+ def OnLoadAddon(self, args):
+ # 注册原版方块对ServerBlockUseEvent的监听
+ whitelistComp = compFactory.CreateBlockUseEventWhiteList(self.levelId)
+ for blockName in LISTEN_BLOCKS:
+ whitelistComp.AddBlockItemListenForUseEvent(blockName)
+
+ def OnBlockUse(self, args):
+ playerId = args.get("playerId")
+ itemDict = args.get("itemDict") or {}
+ if itemDict.get("itemName") != MATCHBOX_ID:
+ return
+ # 检查主手火柴盒耐久,耐久为0时无法点燃
+ itemComp = compFactory.CreateItem(playerId)
+ carried = serverApi.GetMinecraftEnum().ItemPosType.CARRIED
+ durability = itemComp.GetItemDurability(carried, 0)
+ if durability <= 0:
+ return
+ # 计算点击面外的火焰放置位置
+ offset = FACE_OFFSETS.get(args.get("face", 1), (0, 1, 0))
+ firePos = (args["x"] + offset[0], args["y"] + offset[1], args["z"] + offset[2])
+ dimensionId = args.get("dimensionId")
+ # 获取目标位置方块(GetBlockNew 属于 CreateBlockInfo 组件)
+ blockInfoComp = compFactory.CreateBlockInfo(self.levelId)
+ curBlock = blockInfoComp.GetBlockNew(firePos, dimensionId)
+ if curBlock is not None and curBlock.get("name") == "minecraft:air":
+ # 目标位置为空气,放置火焰并消耗一点耐久,拦截该方块的交互逻辑(如同打火石)
+ # SetBlockNew 同属 CreateBlockInfo 组件
+ blockInfoComp.SetBlockNew(firePos, {"name": "minecraft:fire", "aux": 0}, 0, dimensionId)
+ itemComp.SetItemDurability(carried, 0, durability - 1)
+ args["cancel"] = True
diff --git a/behavior_pack_kcH4M5u0/scripts/modMain.py b/behavior_pack_kcH4M5u0/scripts/modMain.py
new file mode 100644
index 0000000..8a5bcc9
--- /dev/null
+++ b/behavior_pack_kcH4M5u0/scripts/modMain.py
@@ -0,0 +1,18 @@
+# -*- coding: utf-8 -*-
+from mod.common.mod import Mod
+import mod.server.extraServerApi as serverApi
+
+
+@Mod.Binding(name="dn_sa", version="1.0")
+class DnSaMod(object):
+
+ def __init__(self):
+ pass
+
+ @Mod.InitServer()
+ def DnSaServerInit(self):
+ serverApi.RegisterSystem("dn_sa", "MatchboxServer", "scripts.matchboxServer.MatchboxServer")
+
+ @Mod.DestroyServer()
+ def DnSaServerDestroy(self):
+ pass
diff --git a/resource_pack_t7eJjrxY/blocks.json b/resource_pack_t7eJjrxY/blocks.json
new file mode 100644
index 0000000..c87e639
--- /dev/null
+++ b/resource_pack_t7eJjrxY/blocks.json
@@ -0,0 +1,25 @@
+{
+ "format_version": [
+ 1,
+ 1,
+ 0
+ ],
+ "dn_sa:generator": {
+ "sound": "stone",
+ "client_entity": {
+ "identifier": "dn_sa:generator",
+ "hand_model_use_client_entity": true,
+ "destroyed_textures": "dn_sa:generator_icon",
+ "block_icon": "dn_sa:generator_icon"
+ }
+ },
+ "dn_sa:salvage_bin": {
+ "sound": "stone",
+ "client_entity": {
+ "identifier": "dn_sa:salvage_bin",
+ "hand_model_use_client_entity": true,
+ "destroyed_textures": "dn_sa:salvage_bin_icon",
+ "block_icon": "dn_sa:salvage_bin_icon"
+ }
+ }
+}
diff --git a/resource_pack_t7eJjrxY/entity/generator_block_entity.json b/resource_pack_t7eJjrxY/entity/generator_block_entity.json
new file mode 100644
index 0000000..34ff107
--- /dev/null
+++ b/resource_pack_t7eJjrxY/entity/generator_block_entity.json
@@ -0,0 +1,27 @@
+{
+ "format_version": "1.10.0",
+ "minecraft:client_entity": {
+ "description": {
+ "identifier": "dn_sa:generator",
+ "geometry": {
+ "default": "geometry.dn_sa_generator"
+ },
+ "textures": {
+ "default": "textures/blocks/generator"
+ },
+ "materials": {
+ "default": "entity_alphatest"
+ },
+ "render_controllers": [
+ {
+ "controller.render.dn_sa_generator": "variable.variant == 0"
+ }
+ ],
+ "scripts": {
+ "initialize": [
+ "variable.variant = 0;"
+ ]
+ }
+ }
+ }
+}
diff --git a/resource_pack_t7eJjrxY/entity/salvage_bin_block_entity.json b/resource_pack_t7eJjrxY/entity/salvage_bin_block_entity.json
new file mode 100644
index 0000000..dee2d3c
--- /dev/null
+++ b/resource_pack_t7eJjrxY/entity/salvage_bin_block_entity.json
@@ -0,0 +1,27 @@
+{
+ "format_version": "1.10.0",
+ "minecraft:client_entity": {
+ "description": {
+ "identifier": "dn_sa:salvage_bin",
+ "geometry": {
+ "default": "geometry.dn_sa_salvage_bin"
+ },
+ "textures": {
+ "default": "textures/blocks/salvage_bin"
+ },
+ "materials": {
+ "default": "entity_alphatest"
+ },
+ "render_controllers": [
+ {
+ "controller.render.dn_sa_salvage_bin": "variable.variant == 0"
+ }
+ ],
+ "scripts": {
+ "initialize": [
+ "variable.variant = 0;"
+ ]
+ }
+ }
+ }
+}
diff --git a/resource_pack_t7eJjrxY/manifest.json b/resource_pack_t7eJjrxY/manifest.json
new file mode 100644
index 0000000..ffd46df
--- /dev/null
+++ b/resource_pack_t7eJjrxY/manifest.json
@@ -0,0 +1,29 @@
+{
+ "format_version": 2,
+ "header": {
+ "description": "",
+ "min_engine_version": [
+ 1,
+ 18,
+ 0
+ ],
+ "name": "resource_pack",
+ "uuid": "14129e44-874a-4d2d-a63e-24184b8fef6c",
+ "version": [
+ 0,
+ 0,
+ 1
+ ]
+ },
+ "modules": [
+ {
+ "type": "resources",
+ "uuid": "766f5889-ff80-4dbb-97d8-9908ecbfb4b8",
+ "version": [
+ 0,
+ 0,
+ 1
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/resource_pack_t7eJjrxY/models/entity/generator_geo.json b/resource_pack_t7eJjrxY/models/entity/generator_geo.json
new file mode 100644
index 0000000..9f70b87
--- /dev/null
+++ b/resource_pack_t7eJjrxY/models/entity/generator_geo.json
@@ -0,0 +1,390 @@
+{
+ "format_version": "1.21.110",
+ "minecraft:geometry": [
+ {
+ "description": {
+ "identifier": "geometry.dn_sa_generator",
+ "texture_width": 128,
+ "texture_height": 128,
+ "visible_bounds_width": 3,
+ "visible_bounds_height": 2.5,
+ "visible_bounds_offset": [0, 0.75, 0]
+ },
+ "bones": [
+ {
+ "name": "bone2",
+ "pivot": [-1, 0, 0]
+ },
+ {
+ "name": "group2",
+ "parent": "bone2",
+ "pivot": [-1, 0, 0],
+ "cubes": [
+ {
+ "origin": [-15, 1, 0],
+ "size": [14, 2, 2],
+ "uv": {
+ "north": {"uv": [46, 24], "uv_size": [14, 2]},
+ "east": {"uv": [44, 24], "uv_size": [2, 2]},
+ "south": {"uv": [62, 24], "uv_size": [14, 2]},
+ "west": {"uv": [60, 24], "uv_size": [2, 2]},
+ "up": {"uv": [46, 22], "uv_size": [14, 2]},
+ "down": {"uv": [60, 24], "uv_size": [14, -2]}
+ }
+ },
+ {
+ "origin": [-15, 1, 14],
+ "size": [14, 2, 2],
+ "uv": {
+ "north": {"uv": [46, 24], "uv_size": [14, 2]},
+ "east": {"uv": [44, 24], "uv_size": [2, 2]},
+ "south": {"uv": [62, 24], "uv_size": [14, 2]},
+ "west": {"uv": [60, 24], "uv_size": [2, 2]},
+ "up": {"uv": [46, 22], "uv_size": [14, 2]},
+ "down": {"uv": [60, 24], "uv_size": [14, -2]}
+ }
+ },
+ {
+ "origin": [-15, 3, 0],
+ "size": [2, 10, 2],
+ "uv": {
+ "north": {"uv": [52, 6], "uv_size": [2, 10]},
+ "east": {"uv": [50, 6], "uv_size": [2, 10]},
+ "south": {"uv": [56, 6], "uv_size": [2, 10]},
+ "west": {"uv": [54, 6], "uv_size": [2, 10]},
+ "up": {"uv": [52, 4], "uv_size": [2, 2]},
+ "down": {"uv": [54, 6], "uv_size": [2, -2]}
+ }
+ },
+ {
+ "origin": [-13, 13, 0],
+ "size": [10, 2, 2],
+ "uv": {
+ "north": {"uv": [46, 32], "uv_size": [10, 2]},
+ "east": {"uv": [44, 32], "uv_size": [2, 2]},
+ "south": {"uv": [58, 32], "uv_size": [10, 2]},
+ "west": {"uv": [56, 32], "uv_size": [2, 2]},
+ "up": {"uv": [46, 30], "uv_size": [10, 2]},
+ "down": {"uv": [56, 32], "uv_size": [10, -2]}
+ }
+ },
+ {
+ "origin": [-15, 13, 0.025],
+ "size": [2, 2.825, 1.95],
+ "pivot": [-15, 13, 0],
+ "rotation": [0, 0, 45],
+ "uv": {
+ "north": {"uv": [53, 35], "uv_size": [2, 2]},
+ "east": {"uv": [52, 35], "uv_size": [1, 2]},
+ "south": {"uv": [56, 35], "uv_size": [2, 2]},
+ "west": {"uv": [55, 35], "uv_size": [1, 2]},
+ "up": {"uv": [53, 34], "uv_size": [2, 1]},
+ "down": {"uv": [55, 35], "uv_size": [2, -1]}
+ }
+ },
+ {
+ "origin": [-3, 13, 0.025],
+ "size": [2, 2.825, 1.95],
+ "pivot": [-1, 13, 0],
+ "rotation": [0, 0, -45],
+ "uv": {
+ "north": {"uv": [53, 52], "uv_size": [2, 2]},
+ "east": {"uv": [52, 52], "uv_size": [1, 2]},
+ "south": {"uv": [56, 52], "uv_size": [2, 2]},
+ "west": {"uv": [55, 52], "uv_size": [1, 2]},
+ "up": {"uv": [53, 51], "uv_size": [2, 1]},
+ "down": {"uv": [55, 52], "uv_size": [2, -1]}
+ }
+ },
+ {
+ "origin": [-3, 3, 0],
+ "size": [2, 10, 2],
+ "uv": {
+ "north": {"uv": [2, 53], "uv_size": [2, 10]},
+ "east": {"uv": [0, 53], "uv_size": [2, 10]},
+ "south": {"uv": [6, 53], "uv_size": [2, 10]},
+ "west": {"uv": [4, 53], "uv_size": [2, 10]},
+ "up": {"uv": [2, 51], "uv_size": [2, 2]},
+ "down": {"uv": [4, 53], "uv_size": [2, -2]}
+ }
+ }
+ ]
+ },
+ {
+ "name": "group3",
+ "parent": "bone2",
+ "pivot": [-1, 0, 0],
+ "cubes": [
+ {
+ "origin": [-15, 3, 14],
+ "size": [2, 10, 2],
+ "uv": {
+ "north": {"uv": [52, 6], "uv_size": [2, 10]},
+ "east": {"uv": [50, 6], "uv_size": [2, 10]},
+ "south": {"uv": [56, 6], "uv_size": [2, 10]},
+ "west": {"uv": [54, 6], "uv_size": [2, 10]},
+ "up": {"uv": [52, 4], "uv_size": [2, 2]},
+ "down": {"uv": [54, 6], "uv_size": [2, -2]}
+ }
+ },
+ {
+ "origin": [-13, 13, 14],
+ "size": [10, 2, 2],
+ "uv": {
+ "north": {"uv": [46, 32], "uv_size": [10, 2]},
+ "east": {"uv": [44, 32], "uv_size": [2, 2]},
+ "south": {"uv": [58, 32], "uv_size": [10, 2]},
+ "west": {"uv": [56, 32], "uv_size": [2, 2]},
+ "up": {"uv": [46, 30], "uv_size": [10, 2]},
+ "down": {"uv": [56, 32], "uv_size": [10, -2]}
+ }
+ },
+ {
+ "origin": [-15, 13, 14.025],
+ "size": [2, 2.825, 1.95],
+ "pivot": [-15, 13, 16],
+ "rotation": [0, 0, 45],
+ "uv": {
+ "north": {"uv": [53, 35], "uv_size": [2, 2]},
+ "east": {"uv": [52, 35], "uv_size": [1, 2]},
+ "south": {"uv": [56, 35], "uv_size": [2, 2]},
+ "west": {"uv": [55, 35], "uv_size": [1, 2]},
+ "up": {"uv": [53, 34], "uv_size": [2, 1]},
+ "down": {"uv": [55, 35], "uv_size": [2, -1]}
+ }
+ },
+ {
+ "origin": [-3, 13, 14.025],
+ "size": [2, 2.825, 1.95],
+ "pivot": [-1, 13, 16],
+ "rotation": [0, 0, -45],
+ "uv": {
+ "north": {"uv": [53, 52], "uv_size": [2, 2]},
+ "east": {"uv": [52, 52], "uv_size": [1, 2]},
+ "south": {"uv": [56, 52], "uv_size": [2, 2]},
+ "west": {"uv": [55, 52], "uv_size": [1, 2]},
+ "up": {"uv": [53, 51], "uv_size": [2, 1]},
+ "down": {"uv": [55, 52], "uv_size": [2, -1]}
+ }
+ },
+ {
+ "origin": [-3, 3, 14],
+ "size": [2, 10, 2],
+ "uv": {
+ "north": {"uv": [2, 53], "uv_size": [2, 10]},
+ "east": {"uv": [0, 53], "uv_size": [2, 10]},
+ "south": {"uv": [6, 53], "uv_size": [2, 10]},
+ "west": {"uv": [4, 53], "uv_size": [2, 10]},
+ "up": {"uv": [2, 51], "uv_size": [2, 2]},
+ "down": {"uv": [4, 53], "uv_size": [2, -2]}
+ }
+ }
+ ]
+ },
+ {
+ "name": "bone",
+ "parent": "bone2",
+ "pivot": [0, 0, 0],
+ "cubes": [
+ {
+ "origin": [-3, 1, 2],
+ "size": [2, 2, 12],
+ "uv": {
+ "north": {"uv": [12, 49], "uv_size": [2, 2]},
+ "east": {"uv": [0, 49], "uv_size": [12, 2]},
+ "south": {"uv": [26, 49], "uv_size": [2, 2]},
+ "west": {"uv": [14, 49], "uv_size": [12, 2]},
+ "up": {"uv": [12, 37], "uv_size": [2, 12]},
+ "down": {"uv": [14, 49], "uv_size": [2, -12]}
+ }
+ },
+ {
+ "origin": [-3, 0, 13],
+ "size": [2, 1, 2],
+ "uv": {
+ "north": {"uv": [46, 36], "uv_size": [2, 1]},
+ "east": {"uv": [44, 36], "uv_size": [2, 1]},
+ "south": {"uv": [50, 36], "uv_size": [2, 1]},
+ "west": {"uv": [48, 36], "uv_size": [2, 1]},
+ "up": {"uv": [46, 34], "uv_size": [2, 2]},
+ "down": {"uv": [48, 36], "uv_size": [2, -2]}
+ }
+ },
+ {
+ "origin": [-15, 0, 13],
+ "size": [2, 1, 2],
+ "uv": {
+ "north": {"uv": [46, 53], "uv_size": [2, 1]},
+ "east": {"uv": [44, 53], "uv_size": [2, 1]},
+ "south": {"uv": [50, 53], "uv_size": [2, 1]},
+ "west": {"uv": [48, 53], "uv_size": [2, 1]},
+ "up": {"uv": [46, 51], "uv_size": [2, 2]},
+ "down": {"uv": [48, 53], "uv_size": [2, -2]}
+ }
+ },
+ {
+ "origin": [-1, 0, 1],
+ "size": [1, 4, 4],
+ "uv": {
+ "north": {"uv": [28, 55], "uv_size": [1, 4]},
+ "east": {"uv": [24, 55], "uv_size": [4, 4]},
+ "south": {"uv": [33, 55], "uv_size": [1, 4]},
+ "west": {"uv": [29, 55], "uv_size": [4, 4]},
+ "up": {"uv": [28, 51], "uv_size": [1, 4]},
+ "down": {"uv": [29, 55], "uv_size": [1, -4]}
+ }
+ },
+ {
+ "origin": [-15, 1, 2],
+ "size": [2, 2, 12],
+ "uv": {
+ "north": {"uv": [40, 49], "uv_size": [2, 2]},
+ "east": {"uv": [28, 49], "uv_size": [12, 2]},
+ "south": {"uv": [54, 49], "uv_size": [2, 2]},
+ "west": {"uv": [42, 49], "uv_size": [12, 2]},
+ "up": {"uv": [40, 37], "uv_size": [2, 12]},
+ "down": {"uv": [42, 49], "uv_size": [2, -12]}
+ }
+ },
+ {
+ "origin": [-16, 0, 1],
+ "size": [1, 4, 4],
+ "uv": {
+ "north": {"uv": [38, 55], "uv_size": [1, 4]},
+ "east": {"uv": [34, 55], "uv_size": [4, 4]},
+ "south": {"uv": [43, 55], "uv_size": [1, 4]},
+ "west": {"uv": [39, 55], "uv_size": [4, 4]},
+ "up": {"uv": [38, 51], "uv_size": [1, 4]},
+ "down": {"uv": [39, 55], "uv_size": [1, -4]}
+ }
+ },
+ {
+ "origin": [-13, 5, 0],
+ "size": [10, 7, 15],
+ "uv": {
+ "north": {"uv": [15, 15], "uv_size": [10, 7]},
+ "east": {"uv": [0, 15], "uv_size": [15, 7]},
+ "south": {"uv": [40, 15], "uv_size": [10, 7]},
+ "west": {"uv": [25, 15], "uv_size": [15, 7]},
+ "up": {"uv": [15, 0], "uv_size": [10, 15]},
+ "down": {"uv": [25, 15], "uv_size": [10, -15]}
+ }
+ },
+ {
+ "origin": [-2.8, 6, 9],
+ "size": [0, 3, 4],
+ "uv": {
+ "north": {"uv": [38, 26], "uv_size": [0, 3]},
+ "east": {"uv": [34, 26], "uv_size": [4, 3]},
+ "south": {"uv": [42, 26], "uv_size": [0, 3]},
+ "west": {"uv": [38, 26], "uv_size": [4, 3]},
+ "up": {"uv": [38, 22], "uv_size": [0, 4]},
+ "down": {"uv": [38, 26], "uv_size": [0, -4]}
+ }
+ },
+ {
+ "origin": [-13, 2, 3],
+ "size": [10, 3, 12],
+ "uv": {
+ "north": {"uv": [12, 34], "uv_size": [10, 3]},
+ "east": {"uv": [0, 34], "uv_size": [12, 3]},
+ "south": {"uv": [34, 34], "uv_size": [10, 3]},
+ "west": {"uv": [22, 34], "uv_size": [12, 3]},
+ "up": {"uv": [12, 22], "uv_size": [10, 12]},
+ "down": {"uv": [22, 34], "uv_size": [10, -12]}
+ }
+ },
+ {
+ "origin": [-9.5, 12, 3],
+ "size": [3, 1, 3],
+ "uv": {
+ "north": {"uv": [53, 19], "uv_size": [3, 1]},
+ "east": {"uv": [50, 19], "uv_size": [3, 1]},
+ "south": {"uv": [59, 19], "uv_size": [3, 1]},
+ "west": {"uv": [56, 19], "uv_size": [3, 1]},
+ "up": {"uv": [53, 16], "uv_size": [3, 3]},
+ "down": {"uv": [56, 19], "uv_size": [3, -3]}
+ }
+ },
+ {
+ "origin": [-14.2, 7, 1],
+ "size": [12.4, 7, 14],
+ "uv": {
+ "north": {"uv": [86, 46], "uv_size": [12, 7]},
+ "east": {"uv": [98, 46], "uv_size": [14, 7]},
+ "south": {"uv": [112, 46], "uv_size": [12, 7]},
+ "west": {"uv": [98, 46], "uv_size": [14, 7]},
+ "up": {"uv": [86, 32], "uv_size": [12, 14]},
+ "down": {"uv": [98, 46], "uv_size": [12, -14]}
+ }
+ },
+ {
+ "origin": [-14.2, 0, 1],
+ "size": [12.4, 7, 14],
+ "uv": {
+ "north": {"uv": [86, 46], "uv_size": [12, 7]},
+ "east": {"uv": [98, 46], "uv_size": [14, 7]},
+ "south": {"uv": [112, 46], "uv_size": [12, 7]},
+ "west": {"uv": [98, 46], "uv_size": [14, 7]},
+ "up": {"uv": [86, 32], "uv_size": [12, 14]},
+ "down": {"uv": [98, 46], "uv_size": [12, -14]}
+ }
+ }
+ ]
+ }
+ ],
+ "item_display_transforms": {
+ "thirdperson_righthand": {
+ "rotation": [75, 45, 0],
+ "translation": [0, 2.5, 0],
+ "scale": [0.375, 0.375, 0.375],
+ "rotation_pivot": [0, 0, 0],
+ "scale_pivot": [0, 0, 0]
+ },
+ "thirdperson_lefthand": {
+ "rotation": [75, 45, 0],
+ "translation": [0, 2.5, 0],
+ "scale": [0.375, 0.375, 0.375],
+ "rotation_pivot": [0, 0, 0],
+ "scale_pivot": [0, 0, 0]
+ },
+ "firstperson_righthand": {
+ "rotation": [0, 45, 0],
+ "translation": [0, 0, 0],
+ "scale": [0.4, 0.4, 0.4],
+ "rotation_pivot": [0, 0, 0],
+ "scale_pivot": [0, 0, 0]
+ },
+ "firstperson_lefthand": {
+ "rotation": [0, -135, 0],
+ "translation": [0, 0, 0],
+ "scale": [0.4, 0.4, 0.4],
+ "rotation_pivot": [0, 0, 0],
+ "scale_pivot": [0, 0, 0]
+ },
+ "ground": {
+ "rotation": [0, 0, 0],
+ "translation": [0, 3, 0],
+ "scale": [0.25, 0.25, 0.25],
+ "rotation_pivot": [0, 0, 0],
+ "scale_pivot": [0, 0, 0]
+ },
+ "gui": {
+ "rotation": [30, -135, 0],
+ "translation": [0, 0, 0],
+ "scale": [0.625, 0.625, 0.625],
+ "rotation_pivot": [0, 0, 0],
+ "scale_pivot": [0, 0, 0],
+ "fit_to_frame": false
+ },
+ "fixed": {
+ "rotation": [0, 0, 0],
+ "translation": [0, 0, 0],
+ "scale": [0.5, 0.5, 0.5],
+ "rotation_pivot": [0, 0, 0],
+ "scale_pivot": [0, 0, 0]
+ }
+ }
+ }
+ ]
+}
\ No newline at end of file
diff --git a/resource_pack_t7eJjrxY/models/entity/salvage_bin_geo.json b/resource_pack_t7eJjrxY/models/entity/salvage_bin_geo.json
new file mode 100644
index 0000000..aaef067
--- /dev/null
+++ b/resource_pack_t7eJjrxY/models/entity/salvage_bin_geo.json
@@ -0,0 +1,224 @@
+{
+ "format_version": "1.12.0",
+ "minecraft:geometry": [
+ {
+ "description": {
+ "identifier": "geometry.dn_sa_salvage_bin",
+ "texture_width": 128,
+ "texture_height": 128,
+ "visible_bounds_width": 3,
+ "visible_bounds_height": 2.5,
+ "visible_bounds_offset": [0, 0.75, 0]
+ },
+ "bones": [
+ {
+ "name": "group",
+ "pivot": [-13, 0, 15]
+ },
+ {
+ "name": "group2",
+ "parent": "group",
+ "pivot": [-13, 0, 15],
+ "cubes": [
+ {
+ "origin": [-2, 16, 14],
+ "size": [-12, -13, -12],
+ "uv": {
+ "north": {"uv": [0, 32], "uv_size": [12, 13]},
+ "east": {"uv": [12, 42], "uv_size": [12, 13]},
+ "south": {"uv": [24, 42], "uv_size": [12, 13]},
+ "west": {"uv": [36, 42], "uv_size": [12, 13]},
+ "up": {"uv": [12, 57], "uv_size": [-12, -12]},
+ "down": {"uv": [60, 56], "uv_size": [-12, -12]}
+ }
+ },
+ {
+ "origin": [-15, 2, 1],
+ "size": [14, 11, 14],
+ "uv": {
+ "north": {"uv": [44, 0], "uv_size": [14, 11]},
+ "east": {"uv": [44, 11], "uv_size": [14, 11]},
+ "south": {"uv": [44, 22], "uv_size": [14, 11]},
+ "west": {"uv": [48, 33], "uv_size": [14, 11]},
+ "up": {"uv": [30, 14], "uv_size": [-14, -14]},
+ "down": {"uv": [30, 28], "uv_size": [-14, -14]}
+ }
+ },
+ {
+ "origin": [-15.2, 9.8, 0.8],
+ "size": [14.4, 3.4, 14.4],
+ "uv": {
+ "north": {"uv": [58, 3], "uv_size": [14, 3]},
+ "east": {"uv": [58, 6], "uv_size": [14, 3]},
+ "south": {"uv": [58, 9], "uv_size": [14, 3]},
+ "west": {"uv": [58, 12], "uv_size": [14, 3]},
+ "up": {"uv": [30, 42], "uv_size": [-14, -14]},
+ "down": {"uv": [44, 14], "uv_size": [-14, -14]}
+ }
+ },
+ {
+ "origin": [-15.2, 1.8, 0.8],
+ "size": [14.4, 3.4, 14.4],
+ "uv": {
+ "north": {"uv": [58, 15], "uv_size": [14, 3]},
+ "east": {"uv": [58, 18], "uv_size": [14, 3]},
+ "south": {"uv": [58, 21], "uv_size": [14, 3]},
+ "west": {"uv": [22, 58], "uv_size": [14, 3]},
+ "up": {"uv": [44, 28], "uv_size": [-14, -14]},
+ "down": {"uv": [44, 42], "uv_size": [-14, -14]}
+ }
+ },
+ {
+ "origin": [-16, 13, 0],
+ "size": [16, 3, 16],
+ "uv": {
+ "north": {"uv": [22, 55], "uv_size": [16, 3]},
+ "east": {"uv": [38, 56], "uv_size": [16, 3]},
+ "south": {"uv": [54, 56], "uv_size": [16, 3]},
+ "west": {"uv": [58, 0], "uv_size": [16, 3]},
+ "up": {"uv": [16, 16], "uv_size": [-16, -16]},
+ "down": {"uv": [16, 32], "uv_size": [-16, -16]}
+ }
+ },
+ {
+ "origin": [-15, 0, 12],
+ "size": [3, 2, 3],
+ "uv": {
+ "north": {"uv": [6, 57], "uv_size": [3, 2]},
+ "east": {"uv": [9, 57], "uv_size": [3, 2]},
+ "south": {"uv": [58, 24], "uv_size": [3, 2]},
+ "west": {"uv": [58, 26], "uv_size": [3, 2]},
+ "up": {"uv": [15, 35], "uv_size": [-3, -3]},
+ "down": {"uv": [15, 38], "uv_size": [-3, -3]}
+ }
+ },
+ {
+ "origin": [-15, 0, 1],
+ "size": [3, 2, 3],
+ "uv": {
+ "north": {"uv": [58, 28], "uv_size": [3, 2]},
+ "east": {"uv": [58, 30], "uv_size": [3, 2]},
+ "south": {"uv": [6, 59], "uv_size": [3, 2]},
+ "west": {"uv": [9, 59], "uv_size": [3, 2]},
+ "up": {"uv": [15, 41], "uv_size": [-3, -3]},
+ "down": {"uv": [47, 36], "uv_size": [-3, -3]}
+ }
+ },
+ {
+ "origin": [-4, 0, 12],
+ "size": [3, 2, 3],
+ "uv": {
+ "north": {"uv": [36, 59], "uv_size": [3, 2]},
+ "east": {"uv": [39, 59], "uv_size": [3, 2]},
+ "south": {"uv": [42, 59], "uv_size": [3, 2]},
+ "west": {"uv": [45, 59], "uv_size": [3, 2]},
+ "up": {"uv": [47, 39], "uv_size": [-3, -3]},
+ "down": {"uv": [47, 42], "uv_size": [-3, -3]}
+ }
+ },
+ {
+ "origin": [-4, 0, 1],
+ "size": [3, 2, 3],
+ "uv": {
+ "north": {"uv": [48, 59], "uv_size": [3, 2]},
+ "east": {"uv": [51, 59], "uv_size": [3, 2]},
+ "south": {"uv": [54, 59], "uv_size": [3, 2]},
+ "west": {"uv": [57, 59], "uv_size": [3, 2]},
+ "up": {"uv": [3, 60], "uv_size": [-3, -3]},
+ "down": {"uv": [6, 60], "uv_size": [-3, -3]}
+ }
+ }
+ ]
+ },
+ {
+ "name": "group3",
+ "parent": "group2",
+ "pivot": [-14, 18, 14]
+ },
+ {
+ "name": "group4",
+ "parent": "group",
+ "pivot": [-2, 16, 8],
+ "cubes": [
+ {
+ "origin": [-7.12811, 13.17004, 2],
+ "size": [5, 0, 12],
+ "uv": {
+ "north": {"uv": [0, 0], "uv_size": [5, 0]},
+ "east": {"uv": [0, 0], "uv_size": [12, 0]},
+ "south": {"uv": [0, 0], "uv_size": [5, 0]},
+ "west": {"uv": [0, 0], "uv_size": [12, 0]},
+ "up": {"uv": [17, 67], "uv_size": [-5, -12]},
+ "down": {"uv": [72, 43], "uv_size": [-5, -12]}
+ }
+ },
+ {
+ "origin": [-13.87189, 13.17004, 2],
+ "size": [5, 0, 12],
+ "uv": {
+ "north": {"uv": [5, 0], "uv_size": [-5, 0]},
+ "east": {"uv": [12, 0], "uv_size": [-12, 0]},
+ "south": {"uv": [5, 0], "uv_size": [-5, 0]},
+ "west": {"uv": [12, 0], "uv_size": [-12, 0]},
+ "up": {"uv": [12, 67], "uv_size": [5, -12]},
+ "down": {"uv": [64, 41], "uv_size": [5, -12]}
+ }
+ }
+ ]
+ }
+ ],
+ "item_display_transforms": {
+ "thirdperson_righthand": {
+ "rotation": [75, 45, 0],
+ "translation": [0, 2.5, 0],
+ "scale": [0.375, 0.375, 0.375],
+ "rotation_pivot": [0, 0, 0],
+ "scale_pivot": [0, 0, 0]
+ },
+ "thirdperson_lefthand": {
+ "rotation": [75, 45, 0],
+ "translation": [0, 2.5, 0],
+ "scale": [0.375, 0.375, 0.375],
+ "rotation_pivot": [0, 0, 0],
+ "scale_pivot": [0, 0, 0]
+ },
+ "firstperson_righthand": {
+ "rotation": [0, 45, 0],
+ "translation": [0, 0, 0],
+ "scale": [0.4, 0.4, 0.4],
+ "rotation_pivot": [0, 0, 0],
+ "scale_pivot": [0, 0, 0]
+ },
+ "firstperson_lefthand": {
+ "rotation": [0, -135, 0],
+ "translation": [0, 0, 0],
+ "scale": [0.4, 0.4, 0.4],
+ "rotation_pivot": [0, 0, 0],
+ "scale_pivot": [0, 0, 0]
+ },
+ "ground": {
+ "rotation": [0, 0, 0],
+ "translation": [0, 3, 0],
+ "scale": [0.25, 0.25, 0.25],
+ "rotation_pivot": [0, 0, 0],
+ "scale_pivot": [0, 0, 0]
+ },
+ "gui": {
+ "rotation": [30, -135, 0],
+ "translation": [0, 0, 0],
+ "scale": [0.625, 0.625, 0.625],
+ "rotation_pivot": [0, 0, 0],
+ "scale_pivot": [0, 0, 0],
+ "fit_to_frame": false
+ },
+ "fixed": {
+ "rotation": [0, 0, 0],
+ "translation": [0, 0, 0],
+ "scale": [0.5, 0.5, 0.5],
+ "rotation_pivot": [0, 0, 0],
+ "scale_pivot": [0, 0, 0]
+ }
+ }
+ }
+ ]
+}
diff --git a/resource_pack_t7eJjrxY/netease_items_res/dn_sa_adhesive_tape.json b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_adhesive_tape.json
new file mode 100644
index 0000000..4f27e9c
--- /dev/null
+++ b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_adhesive_tape.json
@@ -0,0 +1,11 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:icon": "dn_sa:adhesive_tape"
+ },
+ "description": {
+ "identifier": "dn_sa:adhesive_tape"
+ }
+ }
+}
\ No newline at end of file
diff --git a/resource_pack_t7eJjrxY/netease_items_res/dn_sa_alcohol.json b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_alcohol.json
new file mode 100644
index 0000000..3b398a8
--- /dev/null
+++ b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_alcohol.json
@@ -0,0 +1,12 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:icon": "dn_sa:alcohol",
+ "minecraft:use_animation": "drink"
+ },
+ "description": {
+ "identifier": "dn_sa:alcohol"
+ }
+ }
+}
\ No newline at end of file
diff --git a/resource_pack_t7eJjrxY/netease_items_res/dn_sa_antiseptic.json b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_antiseptic.json
new file mode 100644
index 0000000..f58121b
--- /dev/null
+++ b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_antiseptic.json
@@ -0,0 +1,11 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:icon": "dn_sa:antiseptic"
+ },
+ "description": {
+ "identifier": "dn_sa:antiseptic"
+ }
+ }
+}
\ No newline at end of file
diff --git a/resource_pack_t7eJjrxY/netease_items_res/dn_sa_apple_juice_box.json b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_apple_juice_box.json
new file mode 100644
index 0000000..adff68a
--- /dev/null
+++ b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_apple_juice_box.json
@@ -0,0 +1,12 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:icon": "dn_sa:apple_juice_box",
+ "minecraft:use_animation": "drink"
+ },
+ "description": {
+ "identifier": "dn_sa:apple_juice_box"
+ }
+ }
+}
\ No newline at end of file
diff --git a/resource_pack_t7eJjrxY/netease_items_res/dn_sa_ashen_steel_ingot.json b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_ashen_steel_ingot.json
new file mode 100644
index 0000000..57daaa5
--- /dev/null
+++ b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_ashen_steel_ingot.json
@@ -0,0 +1,11 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:icon": "dn_sa:ashen_steel_ingot"
+ },
+ "description": {
+ "identifier": "dn_sa:ashen_steel_ingot"
+ }
+ }
+}
\ No newline at end of file
diff --git a/resource_pack_t7eJjrxY/netease_items_res/dn_sa_ashen_steel_mixture.json b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_ashen_steel_mixture.json
new file mode 100644
index 0000000..802d387
--- /dev/null
+++ b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_ashen_steel_mixture.json
@@ -0,0 +1,11 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:icon": "dn_sa:ashen_steel_mixture"
+ },
+ "description": {
+ "identifier": "dn_sa:ashen_steel_mixture"
+ }
+ }
+}
\ No newline at end of file
diff --git a/resource_pack_t7eJjrxY/netease_items_res/dn_sa_ashen_steel_nugget.json b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_ashen_steel_nugget.json
new file mode 100644
index 0000000..b1300ff
--- /dev/null
+++ b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_ashen_steel_nugget.json
@@ -0,0 +1,11 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:icon": "dn_sa:ashen_steel_nugget"
+ },
+ "description": {
+ "identifier": "dn_sa:ashen_steel_nugget"
+ }
+ }
+}
\ No newline at end of file
diff --git a/resource_pack_t7eJjrxY/netease_items_res/dn_sa_ashen_steel_rod.json b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_ashen_steel_rod.json
new file mode 100644
index 0000000..4125187
--- /dev/null
+++ b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_ashen_steel_rod.json
@@ -0,0 +1,11 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:icon": "dn_sa:ashen_steel_rod"
+ },
+ "description": {
+ "identifier": "dn_sa:ashen_steel_rod"
+ }
+ }
+}
\ No newline at end of file
diff --git a/resource_pack_t7eJjrxY/netease_items_res/dn_sa_battery.json b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_battery.json
new file mode 100644
index 0000000..6ee2fb2
--- /dev/null
+++ b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_battery.json
@@ -0,0 +1,11 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:icon": "dn_sa:battery"
+ },
+ "description": {
+ "identifier": "dn_sa:battery"
+ }
+ }
+}
\ No newline at end of file
diff --git a/resource_pack_t7eJjrxY/netease_items_res/dn_sa_berry_juice_box.json b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_berry_juice_box.json
new file mode 100644
index 0000000..bc7ec0e
--- /dev/null
+++ b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_berry_juice_box.json
@@ -0,0 +1,12 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:icon": "dn_sa:berry_juice_box",
+ "minecraft:use_animation": "drink"
+ },
+ "description": {
+ "identifier": "dn_sa:berry_juice_box"
+ }
+ }
+}
\ No newline at end of file
diff --git a/resource_pack_t7eJjrxY/netease_items_res/dn_sa_big_burger.json b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_big_burger.json
new file mode 100644
index 0000000..1028c90
--- /dev/null
+++ b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_big_burger.json
@@ -0,0 +1,12 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:icon": "dn_sa:big_burger",
+ "minecraft:use_animation": "eat"
+ },
+ "description": {
+ "identifier": "dn_sa:big_burger"
+ }
+ }
+}
\ No newline at end of file
diff --git a/resource_pack_t7eJjrxY/netease_items_res/dn_sa_big_burger_rotten.json b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_big_burger_rotten.json
new file mode 100644
index 0000000..a952934
--- /dev/null
+++ b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_big_burger_rotten.json
@@ -0,0 +1,12 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:icon": "dn_sa:big_burger_rotten",
+ "minecraft:use_animation": "eat"
+ },
+ "description": {
+ "identifier": "dn_sa:big_burger_rotten"
+ }
+ }
+}
\ No newline at end of file
diff --git a/resource_pack_t7eJjrxY/netease_items_res/dn_sa_biscuit.json b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_biscuit.json
new file mode 100644
index 0000000..a03cbb9
--- /dev/null
+++ b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_biscuit.json
@@ -0,0 +1,12 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:icon": "dn_sa:biscuit",
+ "minecraft:use_animation": "eat"
+ },
+ "description": {
+ "identifier": "dn_sa:biscuit"
+ }
+ }
+}
\ No newline at end of file
diff --git a/resource_pack_t7eJjrxY/netease_items_res/dn_sa_biscuit_rotten.json b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_biscuit_rotten.json
new file mode 100644
index 0000000..18d44b0
--- /dev/null
+++ b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_biscuit_rotten.json
@@ -0,0 +1,12 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:icon": "dn_sa:biscuit_rotten",
+ "minecraft:use_animation": "eat"
+ },
+ "description": {
+ "identifier": "dn_sa:biscuit_rotten"
+ }
+ }
+}
\ No newline at end of file
diff --git a/resource_pack_t7eJjrxY/netease_items_res/dn_sa_brigadeiro.json b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_brigadeiro.json
new file mode 100644
index 0000000..7ca4892
--- /dev/null
+++ b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_brigadeiro.json
@@ -0,0 +1,12 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:icon": "dn_sa:brigadeiro",
+ "minecraft:use_animation": "eat"
+ },
+ "description": {
+ "identifier": "dn_sa:brigadeiro"
+ }
+ }
+}
\ No newline at end of file
diff --git a/resource_pack_t7eJjrxY/netease_items_res/dn_sa_burger.json b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_burger.json
new file mode 100644
index 0000000..500c733
--- /dev/null
+++ b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_burger.json
@@ -0,0 +1,12 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:icon": "dn_sa:burger",
+ "minecraft:use_animation": "eat"
+ },
+ "description": {
+ "identifier": "dn_sa:burger"
+ }
+ }
+}
\ No newline at end of file
diff --git a/resource_pack_t7eJjrxY/netease_items_res/dn_sa_burger_rotten.json b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_burger_rotten.json
new file mode 100644
index 0000000..544ee0c
--- /dev/null
+++ b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_burger_rotten.json
@@ -0,0 +1,12 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:icon": "dn_sa:burger_rotten",
+ "minecraft:use_animation": "eat"
+ },
+ "description": {
+ "identifier": "dn_sa:burger_rotten"
+ }
+ }
+}
\ No newline at end of file
diff --git a/resource_pack_t7eJjrxY/netease_items_res/dn_sa_burrito.json b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_burrito.json
new file mode 100644
index 0000000..f957660
--- /dev/null
+++ b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_burrito.json
@@ -0,0 +1,12 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:icon": "dn_sa:burrito",
+ "minecraft:use_animation": "eat"
+ },
+ "description": {
+ "identifier": "dn_sa:burrito"
+ }
+ }
+}
\ No newline at end of file
diff --git a/resource_pack_t7eJjrxY/netease_items_res/dn_sa_burrito_rotten.json b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_burrito_rotten.json
new file mode 100644
index 0000000..2f86cd1
--- /dev/null
+++ b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_burrito_rotten.json
@@ -0,0 +1,12 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:icon": "dn_sa:burrito_rotten",
+ "minecraft:use_animation": "eat"
+ },
+ "description": {
+ "identifier": "dn_sa:burrito_rotten"
+ }
+ }
+}
\ No newline at end of file
diff --git a/resource_pack_t7eJjrxY/netease_items_res/dn_sa_butter.json b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_butter.json
new file mode 100644
index 0000000..1658c5e
--- /dev/null
+++ b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_butter.json
@@ -0,0 +1,12 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:icon": "dn_sa:butter",
+ "minecraft:use_animation": "eat"
+ },
+ "description": {
+ "identifier": "dn_sa:butter"
+ }
+ }
+}
\ No newline at end of file
diff --git a/resource_pack_t7eJjrxY/netease_items_res/dn_sa_camera.json b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_camera.json
new file mode 100644
index 0000000..21110a6
--- /dev/null
+++ b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_camera.json
@@ -0,0 +1,11 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:icon": "dn_sa:camera"
+ },
+ "description": {
+ "identifier": "dn_sa:camera"
+ }
+ }
+}
\ No newline at end of file
diff --git a/resource_pack_t7eJjrxY/netease_items_res/dn_sa_candys.json b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_candys.json
new file mode 100644
index 0000000..f5b9d7e
--- /dev/null
+++ b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_candys.json
@@ -0,0 +1,12 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:icon": "dn_sa:candys",
+ "minecraft:use_animation": "eat"
+ },
+ "description": {
+ "identifier": "dn_sa:candys"
+ }
+ }
+}
\ No newline at end of file
diff --git a/resource_pack_t7eJjrxY/netease_items_res/dn_sa_cardboard.json b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_cardboard.json
new file mode 100644
index 0000000..638ba7a
--- /dev/null
+++ b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_cardboard.json
@@ -0,0 +1,11 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:icon": "dn_sa:cardboard"
+ },
+ "description": {
+ "identifier": "dn_sa:cardboard"
+ }
+ }
+}
\ No newline at end of file
diff --git a/resource_pack_t7eJjrxY/netease_items_res/dn_sa_cereal_fruit_loops_flakes.json b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_cereal_fruit_loops_flakes.json
new file mode 100644
index 0000000..207d9ce
--- /dev/null
+++ b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_cereal_fruit_loops_flakes.json
@@ -0,0 +1,12 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:icon": "dn_sa:cereal_fruit_loops_flakes",
+ "minecraft:use_animation": "eat"
+ },
+ "description": {
+ "identifier": "dn_sa:cereal_fruit_loops_flakes"
+ }
+ }
+}
\ No newline at end of file
diff --git a/resource_pack_t7eJjrxY/netease_items_res/dn_sa_cereal_kelloggys_flakes.json b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_cereal_kelloggys_flakes.json
new file mode 100644
index 0000000..21cc4dc
--- /dev/null
+++ b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_cereal_kelloggys_flakes.json
@@ -0,0 +1,12 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:icon": "dn_sa:cereal_kelloggys_flakes",
+ "minecraft:use_animation": "eat"
+ },
+ "description": {
+ "identifier": "dn_sa:cereal_kelloggys_flakes"
+ }
+ }
+}
\ No newline at end of file
diff --git a/resource_pack_t7eJjrxY/netease_items_res/dn_sa_charcoal_dust.json b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_charcoal_dust.json
new file mode 100644
index 0000000..da81fc3
--- /dev/null
+++ b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_charcoal_dust.json
@@ -0,0 +1,11 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:icon": "dn_sa:charcoal_dust"
+ },
+ "description": {
+ "identifier": "dn_sa:charcoal_dust"
+ }
+ }
+}
\ No newline at end of file
diff --git a/resource_pack_t7eJjrxY/netease_items_res/dn_sa_cheese.json b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_cheese.json
new file mode 100644
index 0000000..a731bd5
--- /dev/null
+++ b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_cheese.json
@@ -0,0 +1,12 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:icon": "dn_sa:cheese",
+ "minecraft:use_animation": "eat"
+ },
+ "description": {
+ "identifier": "dn_sa:cheese"
+ }
+ }
+}
\ No newline at end of file
diff --git a/resource_pack_t7eJjrxY/netease_items_res/dn_sa_cheese_bread.json b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_cheese_bread.json
new file mode 100644
index 0000000..aa4dd61
--- /dev/null
+++ b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_cheese_bread.json
@@ -0,0 +1,12 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:icon": "dn_sa:cheese_bread",
+ "minecraft:use_animation": "eat"
+ },
+ "description": {
+ "identifier": "dn_sa:cheese_bread"
+ }
+ }
+}
\ No newline at end of file
diff --git a/resource_pack_t7eJjrxY/netease_items_res/dn_sa_cheese_burger.json b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_cheese_burger.json
new file mode 100644
index 0000000..7a6d6d0
--- /dev/null
+++ b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_cheese_burger.json
@@ -0,0 +1,12 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:icon": "dn_sa:cheese_burger",
+ "minecraft:use_animation": "eat"
+ },
+ "description": {
+ "identifier": "dn_sa:cheese_burger"
+ }
+ }
+}
\ No newline at end of file
diff --git a/resource_pack_t7eJjrxY/netease_items_res/dn_sa_cheese_burger_rotten.json b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_cheese_burger_rotten.json
new file mode 100644
index 0000000..2c3c329
--- /dev/null
+++ b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_cheese_burger_rotten.json
@@ -0,0 +1,12 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:icon": "dn_sa:cheese_burger_rotten",
+ "minecraft:use_animation": "eat"
+ },
+ "description": {
+ "identifier": "dn_sa:cheese_burger_rotten"
+ }
+ }
+}
\ No newline at end of file
diff --git a/resource_pack_t7eJjrxY/netease_items_res/dn_sa_chips.json b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_chips.json
new file mode 100644
index 0000000..781ebe5
--- /dev/null
+++ b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_chips.json
@@ -0,0 +1,12 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:icon": "dn_sa:chips",
+ "minecraft:use_animation": "eat"
+ },
+ "description": {
+ "identifier": "dn_sa:chips"
+ }
+ }
+}
\ No newline at end of file
diff --git a/resource_pack_t7eJjrxY/netease_items_res/dn_sa_classic_watch.json b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_classic_watch.json
new file mode 100644
index 0000000..18c4850
--- /dev/null
+++ b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_classic_watch.json
@@ -0,0 +1,11 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:icon": "dn_sa:classic_watch"
+ },
+ "description": {
+ "identifier": "dn_sa:classic_watch"
+ }
+ }
+}
\ No newline at end of file
diff --git a/resource_pack_t7eJjrxY/netease_items_res/dn_sa_cleaning_liquid.json b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_cleaning_liquid.json
new file mode 100644
index 0000000..99d6e97
--- /dev/null
+++ b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_cleaning_liquid.json
@@ -0,0 +1,12 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:icon": "dn_sa:cleaning_liquid",
+ "minecraft:use_animation": "drink"
+ },
+ "description": {
+ "identifier": "dn_sa:cleaning_liquid"
+ }
+ }
+}
\ No newline at end of file
diff --git a/resource_pack_t7eJjrxY/netease_items_res/dn_sa_cloth.json b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_cloth.json
new file mode 100644
index 0000000..b52844b
--- /dev/null
+++ b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_cloth.json
@@ -0,0 +1,11 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:icon": "dn_sa:cloth"
+ },
+ "description": {
+ "identifier": "dn_sa:cloth"
+ }
+ }
+}
\ No newline at end of file
diff --git a/resource_pack_t7eJjrxY/netease_items_res/dn_sa_copper_wire.json b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_copper_wire.json
new file mode 100644
index 0000000..6feda67
--- /dev/null
+++ b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_copper_wire.json
@@ -0,0 +1,11 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:icon": "dn_sa:copper_wire"
+ },
+ "description": {
+ "identifier": "dn_sa:copper_wire"
+ }
+ }
+}
\ No newline at end of file
diff --git a/resource_pack_t7eJjrxY/netease_items_res/dn_sa_coxinha.json b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_coxinha.json
new file mode 100644
index 0000000..bdfa706
--- /dev/null
+++ b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_coxinha.json
@@ -0,0 +1,12 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:icon": "dn_sa:coxinha",
+ "minecraft:use_animation": "eat"
+ },
+ "description": {
+ "identifier": "dn_sa:coxinha"
+ }
+ }
+}
\ No newline at end of file
diff --git a/resource_pack_t7eJjrxY/netease_items_res/dn_sa_dented_can.json b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_dented_can.json
new file mode 100644
index 0000000..00a6158
--- /dev/null
+++ b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_dented_can.json
@@ -0,0 +1,11 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:icon": "dn_sa:dented_can"
+ },
+ "description": {
+ "identifier": "dn_sa:dented_can"
+ }
+ }
+}
\ No newline at end of file
diff --git a/resource_pack_t7eJjrxY/netease_items_res/dn_sa_diamond_nugget.json b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_diamond_nugget.json
new file mode 100644
index 0000000..a90f1a2
--- /dev/null
+++ b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_diamond_nugget.json
@@ -0,0 +1,11 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:icon": "dn_sa:diamond_nugget"
+ },
+ "description": {
+ "identifier": "dn_sa:diamond_nugget"
+ }
+ }
+}
\ No newline at end of file
diff --git a/resource_pack_t7eJjrxY/netease_items_res/dn_sa_dirty_rags.json b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_dirty_rags.json
new file mode 100644
index 0000000..2bbdb86
--- /dev/null
+++ b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_dirty_rags.json
@@ -0,0 +1,11 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:icon": "dn_sa:dirty_rags"
+ },
+ "description": {
+ "identifier": "dn_sa:dirty_rags"
+ }
+ }
+}
\ No newline at end of file
diff --git a/resource_pack_t7eJjrxY/netease_items_res/dn_sa_dish_towel.json b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_dish_towel.json
new file mode 100644
index 0000000..c73aad5
--- /dev/null
+++ b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_dish_towel.json
@@ -0,0 +1,11 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:icon": "dn_sa:dish_towel"
+ },
+ "description": {
+ "identifier": "dn_sa:dish_towel"
+ }
+ }
+}
\ No newline at end of file
diff --git a/resource_pack_t7eJjrxY/netease_items_res/dn_sa_donut.json b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_donut.json
new file mode 100644
index 0000000..bdb00be
--- /dev/null
+++ b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_donut.json
@@ -0,0 +1,12 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:icon": "dn_sa:donut",
+ "minecraft:use_animation": "eat"
+ },
+ "description": {
+ "identifier": "dn_sa:donut"
+ }
+ }
+}
\ No newline at end of file
diff --git a/resource_pack_t7eJjrxY/netease_items_res/dn_sa_donut_rotten.json b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_donut_rotten.json
new file mode 100644
index 0000000..723d341
--- /dev/null
+++ b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_donut_rotten.json
@@ -0,0 +1,12 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:icon": "dn_sa:donut_rotten",
+ "minecraft:use_animation": "eat"
+ },
+ "description": {
+ "identifier": "dn_sa:donut_rotten"
+ }
+ }
+}
\ No newline at end of file
diff --git a/resource_pack_t7eJjrxY/netease_items_res/dn_sa_duct_tape.json b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_duct_tape.json
new file mode 100644
index 0000000..874bcfb
--- /dev/null
+++ b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_duct_tape.json
@@ -0,0 +1,11 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:icon": "dn_sa:duct_tape"
+ },
+ "description": {
+ "identifier": "dn_sa:duct_tape"
+ }
+ }
+}
\ No newline at end of file
diff --git a/resource_pack_t7eJjrxY/netease_items_res/dn_sa_electric_scrap.json b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_electric_scrap.json
new file mode 100644
index 0000000..24d4eb1
--- /dev/null
+++ b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_electric_scrap.json
@@ -0,0 +1,11 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:icon": "dn_sa:electric_scrap"
+ },
+ "description": {
+ "identifier": "dn_sa:electric_scrap"
+ }
+ }
+}
\ No newline at end of file
diff --git a/resource_pack_t7eJjrxY/netease_items_res/dn_sa_empty_can.json b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_empty_can.json
new file mode 100644
index 0000000..6d5667c
--- /dev/null
+++ b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_empty_can.json
@@ -0,0 +1,11 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:icon": "dn_sa:empty_can"
+ },
+ "description": {
+ "identifier": "dn_sa:empty_can"
+ }
+ }
+}
\ No newline at end of file
diff --git a/resource_pack_t7eJjrxY/netease_items_res/dn_sa_empty_juice_box.json b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_empty_juice_box.json
new file mode 100644
index 0000000..0dd0a37
--- /dev/null
+++ b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_empty_juice_box.json
@@ -0,0 +1,11 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:icon": "dn_sa:empty_juice_box"
+ },
+ "description": {
+ "identifier": "dn_sa:empty_juice_box"
+ }
+ }
+}
\ No newline at end of file
diff --git a/resource_pack_t7eJjrxY/netease_items_res/dn_sa_fabric_patch.json b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_fabric_patch.json
new file mode 100644
index 0000000..c44380c
--- /dev/null
+++ b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_fabric_patch.json
@@ -0,0 +1,11 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:icon": "dn_sa:fabric_patch"
+ },
+ "description": {
+ "identifier": "dn_sa:fabric_patch"
+ }
+ }
+}
\ No newline at end of file
diff --git a/resource_pack_t7eJjrxY/netease_items_res/dn_sa_fermented_mash.json b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_fermented_mash.json
new file mode 100644
index 0000000..e9952fa
--- /dev/null
+++ b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_fermented_mash.json
@@ -0,0 +1,11 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:icon": "dn_sa:fermented_mash"
+ },
+ "description": {
+ "identifier": "dn_sa:fermented_mash"
+ }
+ }
+}
\ No newline at end of file
diff --git a/resource_pack_t7eJjrxY/netease_items_res/dn_sa_fiber_fabric.json b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_fiber_fabric.json
new file mode 100644
index 0000000..a3313ed
--- /dev/null
+++ b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_fiber_fabric.json
@@ -0,0 +1,11 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:icon": "dn_sa:fiber_fabric"
+ },
+ "description": {
+ "identifier": "dn_sa:fiber_fabric"
+ }
+ }
+}
\ No newline at end of file
diff --git a/resource_pack_t7eJjrxY/netease_items_res/dn_sa_gasoline_bucket.json b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_gasoline_bucket.json
new file mode 100644
index 0000000..4461d54
--- /dev/null
+++ b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_gasoline_bucket.json
@@ -0,0 +1,11 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:icon": "dn_sa:gasoline_bucket"
+ },
+ "description": {
+ "identifier": "dn_sa:gasoline_bucket"
+ }
+ }
+}
\ No newline at end of file
diff --git a/resource_pack_t7eJjrxY/netease_items_res/dn_sa_generator_manual.json b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_generator_manual.json
new file mode 100644
index 0000000..179dd51
--- /dev/null
+++ b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_generator_manual.json
@@ -0,0 +1,11 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:icon": "dn_sa:generator_manual"
+ },
+ "description": {
+ "identifier": "dn_sa:generator_manual"
+ }
+ }
+}
\ No newline at end of file
diff --git a/resource_pack_t7eJjrxY/netease_items_res/dn_sa_glue.json b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_glue.json
new file mode 100644
index 0000000..da3d47d
--- /dev/null
+++ b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_glue.json
@@ -0,0 +1,11 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:icon": "dn_sa:glue"
+ },
+ "description": {
+ "identifier": "dn_sa:glue"
+ }
+ }
+}
\ No newline at end of file
diff --git a/resource_pack_t7eJjrxY/netease_items_res/dn_sa_grape_juice_box.json b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_grape_juice_box.json
new file mode 100644
index 0000000..01398e3
--- /dev/null
+++ b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_grape_juice_box.json
@@ -0,0 +1,12 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:icon": "dn_sa:grape_juice_box",
+ "minecraft:use_animation": "drink"
+ },
+ "description": {
+ "identifier": "dn_sa:grape_juice_box"
+ }
+ }
+}
\ No newline at end of file
diff --git a/resource_pack_t7eJjrxY/netease_items_res/dn_sa_hair_gel.json b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_hair_gel.json
new file mode 100644
index 0000000..b544b50
--- /dev/null
+++ b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_hair_gel.json
@@ -0,0 +1,11 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:icon": "dn_sa:hair_gel"
+ },
+ "description": {
+ "identifier": "dn_sa:hair_gel"
+ }
+ }
+}
\ No newline at end of file
diff --git a/resource_pack_t7eJjrxY/netease_items_res/dn_sa_hot_dog.json b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_hot_dog.json
new file mode 100644
index 0000000..a7e01fd
--- /dev/null
+++ b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_hot_dog.json
@@ -0,0 +1,12 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:icon": "dn_sa:hot_dog",
+ "minecraft:use_animation": "eat"
+ },
+ "description": {
+ "identifier": "dn_sa:hot_dog"
+ }
+ }
+}
\ No newline at end of file
diff --git a/resource_pack_t7eJjrxY/netease_items_res/dn_sa_hot_dog_rotten.json b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_hot_dog_rotten.json
new file mode 100644
index 0000000..eb4ded3
--- /dev/null
+++ b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_hot_dog_rotten.json
@@ -0,0 +1,12 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:icon": "dn_sa:hot_dog_rotten",
+ "minecraft:use_animation": "eat"
+ },
+ "description": {
+ "identifier": "dn_sa:hot_dog_rotten"
+ }
+ }
+}
\ No newline at end of file
diff --git a/resource_pack_t7eJjrxY/netease_items_res/dn_sa_insulated_copper_wire.json b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_insulated_copper_wire.json
new file mode 100644
index 0000000..831155e
--- /dev/null
+++ b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_insulated_copper_wire.json
@@ -0,0 +1,11 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:icon": "dn_sa:insulated_copper_wire"
+ },
+ "description": {
+ "identifier": "dn_sa:insulated_copper_wire"
+ }
+ }
+}
\ No newline at end of file
diff --git a/resource_pack_t7eJjrxY/netease_items_res/dn_sa_jianbing.json b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_jianbing.json
new file mode 100644
index 0000000..8698692
--- /dev/null
+++ b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_jianbing.json
@@ -0,0 +1,12 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:icon": "dn_sa:jianbing",
+ "minecraft:use_animation": "eat"
+ },
+ "description": {
+ "identifier": "dn_sa:jianbing"
+ }
+ }
+}
\ No newline at end of file
diff --git a/resource_pack_t7eJjrxY/netease_items_res/dn_sa_jianbing_rotten.json b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_jianbing_rotten.json
new file mode 100644
index 0000000..015851e
--- /dev/null
+++ b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_jianbing_rotten.json
@@ -0,0 +1,12 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:icon": "dn_sa:jianbing_rotten",
+ "minecraft:use_animation": "eat"
+ },
+ "description": {
+ "identifier": "dn_sa:jianbing_rotten"
+ }
+ }
+}
\ No newline at end of file
diff --git a/resource_pack_t7eJjrxY/netease_items_res/dn_sa_kevlar.json b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_kevlar.json
new file mode 100644
index 0000000..fb7d109
--- /dev/null
+++ b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_kevlar.json
@@ -0,0 +1,11 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:icon": "dn_sa:kevlar"
+ },
+ "description": {
+ "identifier": "dn_sa:kevlar"
+ }
+ }
+}
\ No newline at end of file
diff --git a/resource_pack_t7eJjrxY/netease_items_res/dn_sa_kevlar_thread.json b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_kevlar_thread.json
new file mode 100644
index 0000000..04149a2
--- /dev/null
+++ b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_kevlar_thread.json
@@ -0,0 +1,11 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:icon": "dn_sa:kevlar_thread"
+ },
+ "description": {
+ "identifier": "dn_sa:kevlar_thread"
+ }
+ }
+}
\ No newline at end of file
diff --git a/resource_pack_t7eJjrxY/netease_items_res/dn_sa_leather_strip.json b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_leather_strip.json
new file mode 100644
index 0000000..72b11fd
--- /dev/null
+++ b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_leather_strip.json
@@ -0,0 +1,11 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:icon": "dn_sa:leather_strip"
+ },
+ "description": {
+ "identifier": "dn_sa:leather_strip"
+ }
+ }
+}
\ No newline at end of file
diff --git a/resource_pack_t7eJjrxY/netease_items_res/dn_sa_lunch_bag.json b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_lunch_bag.json
new file mode 100644
index 0000000..662db28
--- /dev/null
+++ b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_lunch_bag.json
@@ -0,0 +1,11 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:icon": "dn_sa:lunch_bag"
+ },
+ "description": {
+ "identifier": "dn_sa:lunch_bag"
+ }
+ }
+}
\ No newline at end of file
diff --git a/resource_pack_t7eJjrxY/netease_items_res/dn_sa_matchbox.json b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_matchbox.json
new file mode 100644
index 0000000..a0dea9e
--- /dev/null
+++ b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_matchbox.json
@@ -0,0 +1,11 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:icon": "dn_sa:matchbox"
+ },
+ "description": {
+ "identifier": "dn_sa:matchbox"
+ }
+ }
+}
\ No newline at end of file
diff --git a/resource_pack_t7eJjrxY/netease_items_res/dn_sa_meat_pastel.json b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_meat_pastel.json
new file mode 100644
index 0000000..233cdda
--- /dev/null
+++ b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_meat_pastel.json
@@ -0,0 +1,12 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:icon": "dn_sa:meat_pastel",
+ "minecraft:use_animation": "eat"
+ },
+ "description": {
+ "identifier": "dn_sa:meat_pastel"
+ }
+ }
+}
\ No newline at end of file
diff --git a/resource_pack_t7eJjrxY/netease_items_res/dn_sa_medical_adhesive.json b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_medical_adhesive.json
new file mode 100644
index 0000000..a6cee51
--- /dev/null
+++ b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_medical_adhesive.json
@@ -0,0 +1,11 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:icon": "dn_sa:medical_adhesive"
+ },
+ "description": {
+ "identifier": "dn_sa:medical_adhesive"
+ }
+ }
+}
\ No newline at end of file
diff --git a/resource_pack_t7eJjrxY/netease_items_res/dn_sa_metal_pipe.json b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_metal_pipe.json
new file mode 100644
index 0000000..439d900
--- /dev/null
+++ b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_metal_pipe.json
@@ -0,0 +1,11 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:icon": "dn_sa:metal_pipe"
+ },
+ "description": {
+ "identifier": "dn_sa:metal_pipe"
+ }
+ }
+}
\ No newline at end of file
diff --git a/resource_pack_t7eJjrxY/netease_items_res/dn_sa_metal_scrap.json b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_metal_scrap.json
new file mode 100644
index 0000000..ad79f63
--- /dev/null
+++ b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_metal_scrap.json
@@ -0,0 +1,11 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:icon": "dn_sa:metal_scrap"
+ },
+ "description": {
+ "identifier": "dn_sa:metal_scrap"
+ }
+ }
+}
\ No newline at end of file
diff --git a/resource_pack_t7eJjrxY/netease_items_res/dn_sa_metal_sheet.json b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_metal_sheet.json
new file mode 100644
index 0000000..e372386
--- /dev/null
+++ b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_metal_sheet.json
@@ -0,0 +1,11 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:icon": "dn_sa:metal_sheet"
+ },
+ "description": {
+ "identifier": "dn_sa:metal_sheet"
+ }
+ }
+}
\ No newline at end of file
diff --git a/resource_pack_t7eJjrxY/netease_items_res/dn_sa_money.json b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_money.json
new file mode 100644
index 0000000..e306055
--- /dev/null
+++ b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_money.json
@@ -0,0 +1,11 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:icon": "dn_sa:money"
+ },
+ "description": {
+ "identifier": "dn_sa:money"
+ }
+ }
+}
\ No newline at end of file
diff --git a/resource_pack_t7eJjrxY/netease_items_res/dn_sa_money_bundle.json b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_money_bundle.json
new file mode 100644
index 0000000..d549717
--- /dev/null
+++ b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_money_bundle.json
@@ -0,0 +1,11 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:icon": "dn_sa:money_bundle"
+ },
+ "description": {
+ "identifier": "dn_sa:money_bundle"
+ }
+ }
+}
\ No newline at end of file
diff --git a/resource_pack_t7eJjrxY/netease_items_res/dn_sa_nails.json b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_nails.json
new file mode 100644
index 0000000..a31624e
--- /dev/null
+++ b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_nails.json
@@ -0,0 +1,11 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:icon": "dn_sa:nails"
+ },
+ "description": {
+ "identifier": "dn_sa:nails"
+ }
+ }
+}
\ No newline at end of file
diff --git a/resource_pack_t7eJjrxY/netease_items_res/dn_sa_netherite_nugget.json b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_netherite_nugget.json
new file mode 100644
index 0000000..ec82723
--- /dev/null
+++ b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_netherite_nugget.json
@@ -0,0 +1,11 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:icon": "dn_sa:netherite_nugget"
+ },
+ "description": {
+ "identifier": "dn_sa:netherite_nugget"
+ }
+ }
+}
\ No newline at end of file
diff --git a/resource_pack_t7eJjrxY/netease_items_res/dn_sa_orange_juice_box.json b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_orange_juice_box.json
new file mode 100644
index 0000000..beab53f
--- /dev/null
+++ b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_orange_juice_box.json
@@ -0,0 +1,12 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:icon": "dn_sa:orange_juice_box",
+ "minecraft:use_animation": "drink"
+ },
+ "description": {
+ "identifier": "dn_sa:orange_juice_box"
+ }
+ }
+}
\ No newline at end of file
diff --git a/resource_pack_t7eJjrxY/netease_items_res/dn_sa_pacoquita.json b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_pacoquita.json
new file mode 100644
index 0000000..938df80
--- /dev/null
+++ b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_pacoquita.json
@@ -0,0 +1,12 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:icon": "dn_sa:pacoquita",
+ "minecraft:use_animation": "eat"
+ },
+ "description": {
+ "identifier": "dn_sa:pacoquita"
+ }
+ }
+}
\ No newline at end of file
diff --git a/resource_pack_t7eJjrxY/netease_items_res/dn_sa_paperclip.json b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_paperclip.json
new file mode 100644
index 0000000..1e3d901
--- /dev/null
+++ b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_paperclip.json
@@ -0,0 +1,11 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:icon": "dn_sa:paperclip"
+ },
+ "description": {
+ "identifier": "dn_sa:paperclip"
+ }
+ }
+}
\ No newline at end of file
diff --git a/resource_pack_t7eJjrxY/netease_items_res/dn_sa_pizza.json b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_pizza.json
new file mode 100644
index 0000000..f5d24c4
--- /dev/null
+++ b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_pizza.json
@@ -0,0 +1,12 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:icon": "dn_sa:pizza",
+ "minecraft:use_animation": "eat"
+ },
+ "description": {
+ "identifier": "dn_sa:pizza"
+ }
+ }
+}
\ No newline at end of file
diff --git a/resource_pack_t7eJjrxY/netease_items_res/dn_sa_plastic.json b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_plastic.json
new file mode 100644
index 0000000..08db8a6
--- /dev/null
+++ b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_plastic.json
@@ -0,0 +1,11 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:icon": "dn_sa:plastic"
+ },
+ "description": {
+ "identifier": "dn_sa:plastic"
+ }
+ }
+}
\ No newline at end of file
diff --git a/resource_pack_t7eJjrxY/netease_items_res/dn_sa_plastic_bag.json b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_plastic_bag.json
new file mode 100644
index 0000000..15dd15d
--- /dev/null
+++ b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_plastic_bag.json
@@ -0,0 +1,11 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:icon": "dn_sa:plastic_bag"
+ },
+ "description": {
+ "identifier": "dn_sa:plastic_bag"
+ }
+ }
+}
\ No newline at end of file
diff --git a/resource_pack_t7eJjrxY/netease_items_res/dn_sa_plastic_plate.json b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_plastic_plate.json
new file mode 100644
index 0000000..bc5692e
--- /dev/null
+++ b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_plastic_plate.json
@@ -0,0 +1,11 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:icon": "dn_sa:plastic_plate"
+ },
+ "description": {
+ "identifier": "dn_sa:plastic_plate"
+ }
+ }
+}
\ No newline at end of file
diff --git a/resource_pack_t7eJjrxY/netease_items_res/dn_sa_polyester.json b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_polyester.json
new file mode 100644
index 0000000..904ad71
--- /dev/null
+++ b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_polyester.json
@@ -0,0 +1,11 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:icon": "dn_sa:polyester"
+ },
+ "description": {
+ "identifier": "dn_sa:polyester"
+ }
+ }
+}
\ No newline at end of file
diff --git a/resource_pack_t7eJjrxY/netease_items_res/dn_sa_polyester_thread.json b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_polyester_thread.json
new file mode 100644
index 0000000..3cc883f
--- /dev/null
+++ b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_polyester_thread.json
@@ -0,0 +1,11 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:icon": "dn_sa:polyester_thread"
+ },
+ "description": {
+ "identifier": "dn_sa:polyester_thread"
+ }
+ }
+}
\ No newline at end of file
diff --git a/resource_pack_t7eJjrxY/netease_items_res/dn_sa_rags.json b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_rags.json
new file mode 100644
index 0000000..1345f82
--- /dev/null
+++ b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_rags.json
@@ -0,0 +1,11 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:icon": "dn_sa:rags"
+ },
+ "description": {
+ "identifier": "dn_sa:rags"
+ }
+ }
+}
\ No newline at end of file
diff --git a/resource_pack_t7eJjrxY/netease_items_res/dn_sa_raw_cheese_pastel.json b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_raw_cheese_pastel.json
new file mode 100644
index 0000000..33a1c9e
--- /dev/null
+++ b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_raw_cheese_pastel.json
@@ -0,0 +1,12 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:icon": "dn_sa:raw_cheese_pastel",
+ "minecraft:use_animation": "eat"
+ },
+ "description": {
+ "identifier": "dn_sa:raw_cheese_pastel"
+ }
+ }
+}
\ No newline at end of file
diff --git a/resource_pack_t7eJjrxY/netease_items_res/dn_sa_raw_coxinha.json b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_raw_coxinha.json
new file mode 100644
index 0000000..7399327
--- /dev/null
+++ b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_raw_coxinha.json
@@ -0,0 +1,12 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:icon": "dn_sa:raw_coxinha",
+ "minecraft:use_animation": "eat"
+ },
+ "description": {
+ "identifier": "dn_sa:raw_coxinha"
+ }
+ }
+}
\ No newline at end of file
diff --git a/resource_pack_t7eJjrxY/netease_items_res/dn_sa_raw_meat_pastel.json b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_raw_meat_pastel.json
new file mode 100644
index 0000000..12ccc83
--- /dev/null
+++ b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_raw_meat_pastel.json
@@ -0,0 +1,12 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:icon": "dn_sa:raw_meat_pastel",
+ "minecraft:use_animation": "eat"
+ },
+ "description": {
+ "identifier": "dn_sa:raw_meat_pastel"
+ }
+ }
+}
\ No newline at end of file
diff --git a/resource_pack_t7eJjrxY/netease_items_res/dn_sa_raw_wind_pastel.json b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_raw_wind_pastel.json
new file mode 100644
index 0000000..bbc066f
--- /dev/null
+++ b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_raw_wind_pastel.json
@@ -0,0 +1,12 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:icon": "dn_sa:raw_wind_pastel",
+ "minecraft:use_animation": "eat"
+ },
+ "description": {
+ "identifier": "dn_sa:raw_wind_pastel"
+ }
+ }
+}
\ No newline at end of file
diff --git a/resource_pack_t7eJjrxY/netease_items_res/dn_sa_rotten_coxinha.json b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_rotten_coxinha.json
new file mode 100644
index 0000000..6a430bc
--- /dev/null
+++ b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_rotten_coxinha.json
@@ -0,0 +1,12 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:icon": "dn_sa:rotten_coxinha",
+ "minecraft:use_animation": "eat"
+ },
+ "description": {
+ "identifier": "dn_sa:rotten_coxinha"
+ }
+ }
+}
\ No newline at end of file
diff --git a/resource_pack_t7eJjrxY/netease_items_res/dn_sa_rubber.json b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_rubber.json
new file mode 100644
index 0000000..9cae65f
--- /dev/null
+++ b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_rubber.json
@@ -0,0 +1,11 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:icon": "dn_sa:rubber"
+ },
+ "description": {
+ "identifier": "dn_sa:rubber"
+ }
+ }
+}
\ No newline at end of file
diff --git a/resource_pack_t7eJjrxY/netease_items_res/dn_sa_rubbing_alcohol.json b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_rubbing_alcohol.json
new file mode 100644
index 0000000..31f07ab
--- /dev/null
+++ b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_rubbing_alcohol.json
@@ -0,0 +1,12 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:icon": "dn_sa:rubbing_alcohol",
+ "minecraft:use_animation": "drink"
+ },
+ "description": {
+ "identifier": "dn_sa:rubbing_alcohol"
+ }
+ }
+}
\ No newline at end of file
diff --git a/resource_pack_t7eJjrxY/netease_items_res/dn_sa_saltine_cracker.json b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_saltine_cracker.json
new file mode 100644
index 0000000..1febb3e
--- /dev/null
+++ b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_saltine_cracker.json
@@ -0,0 +1,12 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:icon": "dn_sa:saltine_cracker",
+ "minecraft:use_animation": "eat"
+ },
+ "description": {
+ "identifier": "dn_sa:saltine_cracker"
+ }
+ }
+}
\ No newline at end of file
diff --git a/resource_pack_t7eJjrxY/netease_items_res/dn_sa_saw_blade.json b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_saw_blade.json
new file mode 100644
index 0000000..94dfbff
--- /dev/null
+++ b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_saw_blade.json
@@ -0,0 +1,11 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:icon": "dn_sa:saw_blade"
+ },
+ "description": {
+ "identifier": "dn_sa:saw_blade"
+ }
+ }
+}
\ No newline at end of file
diff --git a/resource_pack_t7eJjrxY/netease_items_res/dn_sa_scrap_nugget.json b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_scrap_nugget.json
new file mode 100644
index 0000000..015b39f
--- /dev/null
+++ b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_scrap_nugget.json
@@ -0,0 +1,11 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:icon": "dn_sa:scrap_nugget"
+ },
+ "description": {
+ "identifier": "dn_sa:scrap_nugget"
+ }
+ }
+}
\ No newline at end of file
diff --git a/resource_pack_t7eJjrxY/netease_items_res/dn_sa_scrap_wood.json b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_scrap_wood.json
new file mode 100644
index 0000000..b205f4f
--- /dev/null
+++ b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_scrap_wood.json
@@ -0,0 +1,11 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:icon": "dn_sa:scrap_wood"
+ },
+ "description": {
+ "identifier": "dn_sa:scrap_wood"
+ }
+ }
+}
\ No newline at end of file
diff --git a/resource_pack_t7eJjrxY/netease_items_res/dn_sa_screws.json b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_screws.json
new file mode 100644
index 0000000..12d1d01
--- /dev/null
+++ b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_screws.json
@@ -0,0 +1,11 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:icon": "dn_sa:screws"
+ },
+ "description": {
+ "identifier": "dn_sa:screws"
+ }
+ }
+}
\ No newline at end of file
diff --git a/resource_pack_t7eJjrxY/netease_items_res/dn_sa_small_metal_sheet.json b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_small_metal_sheet.json
new file mode 100644
index 0000000..91fbe19
--- /dev/null
+++ b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_small_metal_sheet.json
@@ -0,0 +1,11 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:icon": "dn_sa:small_metal_sheet"
+ },
+ "description": {
+ "identifier": "dn_sa:small_metal_sheet"
+ }
+ }
+}
\ No newline at end of file
diff --git a/resource_pack_t7eJjrxY/netease_items_res/dn_sa_sterilized_rags.json b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_sterilized_rags.json
new file mode 100644
index 0000000..9b71cff
--- /dev/null
+++ b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_sterilized_rags.json
@@ -0,0 +1,11 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:icon": "dn_sa:sterilized_rags"
+ },
+ "description": {
+ "identifier": "dn_sa:sterilized_rags"
+ }
+ }
+}
\ No newline at end of file
diff --git a/resource_pack_t7eJjrxY/netease_items_res/dn_sa_sulfur.json b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_sulfur.json
new file mode 100644
index 0000000..58e5337
--- /dev/null
+++ b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_sulfur.json
@@ -0,0 +1,11 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:icon": "dn_sa:sulfur"
+ },
+ "description": {
+ "identifier": "dn_sa:sulfur"
+ }
+ }
+}
\ No newline at end of file
diff --git a/resource_pack_t7eJjrxY/netease_items_res/dn_sa_sulfur_dust.json b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_sulfur_dust.json
new file mode 100644
index 0000000..74bfdf1
--- /dev/null
+++ b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_sulfur_dust.json
@@ -0,0 +1,11 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:icon": "dn_sa:sulfur_dust"
+ },
+ "description": {
+ "identifier": "dn_sa:sulfur_dust"
+ }
+ }
+}
\ No newline at end of file
diff --git a/resource_pack_t7eJjrxY/netease_items_res/dn_sa_taco.json b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_taco.json
new file mode 100644
index 0000000..5eab528
--- /dev/null
+++ b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_taco.json
@@ -0,0 +1,12 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:icon": "dn_sa:taco",
+ "minecraft:use_animation": "eat"
+ },
+ "description": {
+ "identifier": "dn_sa:taco"
+ }
+ }
+}
\ No newline at end of file
diff --git a/resource_pack_t7eJjrxY/netease_items_res/dn_sa_taco_rotten.json b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_taco_rotten.json
new file mode 100644
index 0000000..b35c872
--- /dev/null
+++ b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_taco_rotten.json
@@ -0,0 +1,12 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:icon": "dn_sa:taco_rotten",
+ "minecraft:use_animation": "eat"
+ },
+ "description": {
+ "identifier": "dn_sa:taco_rotten"
+ }
+ }
+}
\ No newline at end of file
diff --git a/resource_pack_t7eJjrxY/netease_items_res/dn_sa_thread.json b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_thread.json
new file mode 100644
index 0000000..8aa1aba
--- /dev/null
+++ b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_thread.json
@@ -0,0 +1,11 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:icon": "dn_sa:thread"
+ },
+ "description": {
+ "identifier": "dn_sa:thread"
+ }
+ }
+}
\ No newline at end of file
diff --git a/resource_pack_t7eJjrxY/netease_items_res/dn_sa_tin_can.json b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_tin_can.json
new file mode 100644
index 0000000..66efa5e
--- /dev/null
+++ b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_tin_can.json
@@ -0,0 +1,11 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:icon": "dn_sa:tin_can"
+ },
+ "description": {
+ "identifier": "dn_sa:tin_can"
+ }
+ }
+}
\ No newline at end of file
diff --git a/resource_pack_t7eJjrxY/netease_items_res/dn_sa_toast.json b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_toast.json
new file mode 100644
index 0000000..4091a55
--- /dev/null
+++ b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_toast.json
@@ -0,0 +1,12 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:icon": "dn_sa:toast",
+ "minecraft:use_animation": "eat"
+ },
+ "description": {
+ "identifier": "dn_sa:toast"
+ }
+ }
+}
\ No newline at end of file
diff --git a/resource_pack_t7eJjrxY/netease_items_res/dn_sa_toast_rotten.json b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_toast_rotten.json
new file mode 100644
index 0000000..f8d8af7
--- /dev/null
+++ b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_toast_rotten.json
@@ -0,0 +1,12 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:icon": "dn_sa:toast_rotten",
+ "minecraft:use_animation": "eat"
+ },
+ "description": {
+ "identifier": "dn_sa:toast_rotten"
+ }
+ }
+}
\ No newline at end of file
diff --git a/resource_pack_t7eJjrxY/netease_items_res/dn_sa_waffles.json b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_waffles.json
new file mode 100644
index 0000000..57cb71b
--- /dev/null
+++ b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_waffles.json
@@ -0,0 +1,12 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:icon": "dn_sa:waffles",
+ "minecraft:use_animation": "eat"
+ },
+ "description": {
+ "identifier": "dn_sa:waffles"
+ }
+ }
+}
\ No newline at end of file
diff --git a/resource_pack_t7eJjrxY/netease_items_res/dn_sa_waffles_rotten.json b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_waffles_rotten.json
new file mode 100644
index 0000000..e89abe1
--- /dev/null
+++ b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_waffles_rotten.json
@@ -0,0 +1,12 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:icon": "dn_sa:waffles_rotten",
+ "minecraft:use_animation": "eat"
+ },
+ "description": {
+ "identifier": "dn_sa:waffles_rotten"
+ }
+ }
+}
\ No newline at end of file
diff --git a/resource_pack_t7eJjrxY/netease_items_res/dn_sa_wind_pastel.json b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_wind_pastel.json
new file mode 100644
index 0000000..5430d57
--- /dev/null
+++ b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_wind_pastel.json
@@ -0,0 +1,12 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:icon": "dn_sa:wind_pastel",
+ "minecraft:use_animation": "eat"
+ },
+ "description": {
+ "identifier": "dn_sa:wind_pastel"
+ }
+ }
+}
\ No newline at end of file
diff --git a/resource_pack_t7eJjrxY/netease_items_res/dn_sa_wire.json b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_wire.json
new file mode 100644
index 0000000..665297f
--- /dev/null
+++ b/resource_pack_t7eJjrxY/netease_items_res/dn_sa_wire.json
@@ -0,0 +1,11 @@
+{
+ "format_version": "1.10",
+ "minecraft:item": {
+ "components": {
+ "minecraft:icon": "dn_sa:wire"
+ },
+ "description": {
+ "identifier": "dn_sa:wire"
+ }
+ }
+}
\ No newline at end of file
diff --git a/resource_pack_t7eJjrxY/render_controllers/dn_sa_render_controllers.json b/resource_pack_t7eJjrxY/render_controllers/dn_sa_render_controllers.json
new file mode 100644
index 0000000..2efeeb5
--- /dev/null
+++ b/resource_pack_t7eJjrxY/render_controllers/dn_sa_render_controllers.json
@@ -0,0 +1,27 @@
+{
+ "format_version": "1.8.0",
+ "render_controllers": {
+ "controller.render.dn_sa_generator": {
+ "geometry": "Geometry.default",
+ "materials": [
+ {
+ "*": "Material.default"
+ }
+ ],
+ "textures": [
+ "Texture.default"
+ ]
+ },
+ "controller.render.dn_sa_salvage_bin": {
+ "geometry": "Geometry.default",
+ "materials": [
+ {
+ "*": "Material.default"
+ }
+ ],
+ "textures": [
+ "Texture.default"
+ ]
+ }
+ }
+}
diff --git a/resource_pack_t7eJjrxY/texts/zh_CN.lang b/resource_pack_t7eJjrxY/texts/zh_CN.lang
new file mode 100644
index 0000000..6a6c79f
--- /dev/null
+++ b/resource_pack_t7eJjrxY/texts/zh_CN.lang
@@ -0,0 +1,118 @@
+tile.dn_sa:generator.name=发电机
+tile.dn_sa:salvage_bin.name=回收箱
+itemGroup.name.dn_sa_generator=汽油发电机
+itemGroup.name.dn_sa_salvage_bin=回收箱
+dn_sa:tab_description=幸存者军火库
+
+item.dn_sa:empty_juice_box.name=空果汁盒
+item.dn_sa:grape_juice_box.name=葡萄汁盒
+item.dn_sa:berry_juice_box.name=浆果汁盒
+item.dn_sa:apple_juice_box.name=苹果汁盒
+item.dn_sa:orange_juice_box.name=橙汁盒
+item.dn_sa:big_burger.name=大汉堡
+item.dn_sa:big_burger_rotten.name=腐烂的大汉堡
+item.dn_sa:burger.name=汉堡
+item.dn_sa:burger_rotten.name=腐烂的汉堡
+item.dn_sa:cheese_burger.name=芝士汉堡
+item.dn_sa:cheese_burger_rotten.name=腐烂的芝士汉堡
+item.dn_sa:burrito.name=卷饼
+item.dn_sa:jianbing.name=煎饼果子
+item.dn_sa:jianbing_rotten.name=腐烂的煎饼果子
+item.dn_sa:burrito_rotten.name=腐烂的卷饼
+item.dn_sa:hot_dog.name=热狗
+item.dn_sa:hot_dog_rotten.name=腐烂的热狗
+item.dn_sa:taco.name=玉米卷
+item.dn_sa:taco_rotten.name=腐烂的玉米卷
+item.dn_sa:toast.name=吐司
+item.dn_sa:toast_rotten.name=腐烂的吐司
+item.dn_sa:waffles.name=华夫饼
+item.dn_sa:waffles_rotten.name=腐烂的华夫饼
+item.dn_sa:biscuit.name=饼干
+item.dn_sa:biscuit_rotten.name=腐烂的饼干
+item.dn_sa:donut.name=甜甜圈
+item.dn_sa:donut_rotten.name=腐烂的甜甜圈
+item.dn_sa:candys.name=糖果
+item.dn_sa:butter.name=黄油
+item.dn_sa:cheese.name=奶酪
+item.dn_sa:cheese_bread.name=芝士面包
+item.dn_sa:chips.name=薯片
+item.dn_sa:brigadeiro.name=巴西巧克力球
+item.dn_sa:coxinha.name=巴西炸鸡肉饺
+item.dn_sa:rotten_coxinha.name=腐烂的炸鸡肉饺
+item.dn_sa:raw_coxinha.name=生炸鸡肉饺
+item.dn_sa:meat_pastel.name=肉馅炸饺
+item.dn_sa:raw_meat_pastel.name=生肉馅炸饺
+item.dn_sa:raw_cheese_pastel.name=生芝士炸饺
+item.dn_sa:raw_wind_pastel.name=生空心炸饺
+item.dn_sa:wind_pastel.name=空心炸饺
+item.dn_sa:pacoquita.name=巴西花生糖
+item.dn_sa:saltine_cracker.name=苏打饼干
+item.dn_sa:pizza.name=披萨片
+item.dn_sa:cereal_fruit_loops_flakes.name=水果圈麦片
+item.dn_sa:cereal_kelloggys_flakes.name=家乐氏麦片
+
+item.dn_sa:adhesive_tape.name=胶带
+item.dn_sa:alcohol.name=酒精
+item.dn_sa:antiseptic.name=消毒剂
+item.dn_sa:ashen_steel_ingot.name=灰烬钢锭
+item.dn_sa:ashen_steel_mixture.name=灰烬钢混合物
+item.dn_sa:ashen_steel_nugget.name=灰烬钢粒
+item.dn_sa:ashen_steel_rod.name=灰烬钢棒
+item.dn_sa:battery.name=电池
+item.dn_sa:camera.name=相机
+item.dn_sa:cardboard.name=纸板
+item.dn_sa:charcoal_dust.name=木炭粉
+item.dn_sa:classic_watch.name=经典手表
+item.dn_sa:cleaning_liquid.name=清洁液
+item.dn_sa:cloth.name=布料
+item.dn_sa:copper_wire.name=铜线
+item.dn_sa:dented_can.name=凹陷的罐子
+item.dn_sa:diamond_nugget.name=钻石粒
+item.dn_sa:dirty_rags.name=脏抹布
+item.dn_sa:dish_towel.name=洗碗巾
+item.dn_sa:duct_tape.name=管道胶带
+item.dn_sa:electric_scrap.name=电子废料
+item.dn_sa:empty_can.name=空罐子
+item.dn_sa:fabric_patch.name=布料补丁
+item.dn_sa:fermented_mash.name=发酵糊
+item.dn_sa:fiber_fabric.name=纤维织物
+item.dn_sa:gasoline_bucket.name=汽油桶
+item.dn_sa:generator_manual.name=发电机手册
+item.dn_sa:glue.name=胶水
+item.dn_sa:hair_gel.name=发胶
+item.dn_sa:insulated_copper_wire.name=绝缘铜缆
+item.dn_sa:kevlar.name=凯夫拉纤维
+item.dn_sa:kevlar_thread.name=凯夫拉线
+item.dn_sa:leather_strip.name=皮革条
+item.dn_sa:lunch_bag.name=午餐袋
+item.dn_sa:matchbox.name=火柴盒
+item.dn_sa:medical_adhesive.name=医用胶
+item.dn_sa:metal_pipe.name=金属管
+item.dn_sa:metal_scrap.name=金属废料
+item.dn_sa:metal_sheet.name=金属板
+item.dn_sa:money.name=钞票
+item.dn_sa:money_bundle.name=一捆钞票
+item.dn_sa:nails.name=钉子
+item.dn_sa:netherite_nugget.name=下界合金粒
+item.dn_sa:paperclip.name=回形针
+item.dn_sa:plastic.name=塑料
+item.dn_sa:plastic_bag.name=塑料袋
+item.dn_sa:plastic_plate.name=塑料盘
+item.dn_sa:polyester.name=涤纶
+item.dn_sa:polyester_thread.name=涤纶线
+item.dn_sa:rags.name=抹布
+item.dn_sa:rubber.name=橡胶
+item.dn_sa:rubbing_alcohol.name=外用酒精
+item.dn_sa:saw_blade.name=锯片
+item.dn_sa:scrap_nugget.name=废料粒
+item.dn_sa:scrap_wood.name=废木料
+item.dn_sa:screws.name=螺丝
+item.dn_sa:small_metal_sheet.name=小金属板
+item.dn_sa:sterilized_rags.name=消毒抹布
+item.dn_sa:sulfur.name=硫磺
+item.dn_sa:sulfur_dust.name=硫磺粉
+item.dn_sa:thread.name=线
+item.dn_sa:tin_can.name=锡罐
+item.dn_sa:wire.name=电线
+
+dn_sa:tab_food=食物
diff --git a/resource_pack_t7eJjrxY/textures/blocks/generator.png b/resource_pack_t7eJjrxY/textures/blocks/generator.png
new file mode 100644
index 0000000..49a04c8
Binary files /dev/null and b/resource_pack_t7eJjrxY/textures/blocks/generator.png differ
diff --git a/resource_pack_t7eJjrxY/textures/blocks/salvage_bin.png b/resource_pack_t7eJjrxY/textures/blocks/salvage_bin.png
new file mode 100644
index 0000000..3f97130
Binary files /dev/null and b/resource_pack_t7eJjrxY/textures/blocks/salvage_bin.png differ
diff --git a/resource_pack_t7eJjrxY/textures/item_texture.json b/resource_pack_t7eJjrxY/textures/item_texture.json
new file mode 100644
index 0000000..765ce03
--- /dev/null
+++ b/resource_pack_t7eJjrxY/textures/item_texture.json
@@ -0,0 +1,339 @@
+{
+ "resource_pack_name": "vanilla",
+ "texture_name": "atlas.items",
+ "texture_data": {
+ "dn_sa:generator_icon": {
+ "textures": "textures/blocks/generator"
+ },
+ "dn_sa:salvage_bin_icon": {
+ "textures": "textures/blocks/salvage_bin"
+ },
+ "dn_sa:empty_juice_box": {
+ "textures": "textures/items/empty_juice_box"
+ },
+ "dn_sa:grape_juice_box": {
+ "textures": "textures/items/grape_juice_box"
+ },
+ "dn_sa:berry_juice_box": {
+ "textures": "textures/items/berry_juice_box"
+ },
+ "dn_sa:apple_juice_box": {
+ "textures": "textures/items/apple_juice_box"
+ },
+ "dn_sa:orange_juice_box": {
+ "textures": "textures/items/orange_juice_box"
+ },
+ "dn_sa:big_burger": {
+ "textures": "textures/items/big_burger"
+ },
+ "dn_sa:big_burger_rotten": {
+ "textures": "textures/items/big_burger_rotten"
+ },
+ "dn_sa:burger": {
+ "textures": "textures/items/burger"
+ },
+ "dn_sa:burger_rotten": {
+ "textures": "textures/items/burger_rotten"
+ },
+ "dn_sa:cheese_burger": {
+ "textures": "textures/items/cheese_burger"
+ },
+ "dn_sa:cheese_burger_rotten": {
+ "textures": "textures/items/cheese_burger_rotten"
+ },
+ "dn_sa:burrito": {
+ "textures": "textures/items/burrito"
+ },
+ "dn_sa:jianbing": {
+ "textures": "textures/items/jianbing"
+ },
+ "dn_sa:jianbing_rotten": {
+ "textures": "textures/items/jianbing_rotten"
+ },
+ "dn_sa:burrito_rotten": {
+ "textures": "textures/items/burrito_rotten"
+ },
+ "dn_sa:hot_dog": {
+ "textures": "textures/items/hot_dog"
+ },
+ "dn_sa:hot_dog_rotten": {
+ "textures": "textures/items/hot_dog_rotten"
+ },
+ "dn_sa:taco": {
+ "textures": "textures/items/taco"
+ },
+ "dn_sa:taco_rotten": {
+ "textures": "textures/items/taco_rotten"
+ },
+ "dn_sa:toast": {
+ "textures": "textures/items/toast"
+ },
+ "dn_sa:toast_rotten": {
+ "textures": "textures/items/toast_rotten"
+ },
+ "dn_sa:waffles": {
+ "textures": "textures/items/waffles"
+ },
+ "dn_sa:waffles_rotten": {
+ "textures": "textures/items/waffles_rotten"
+ },
+ "dn_sa:biscuit": {
+ "textures": "textures/items/biscuit"
+ },
+ "dn_sa:biscuit_rotten": {
+ "textures": "textures/items/biscuit_rotten"
+ },
+ "dn_sa:donut": {
+ "textures": "textures/items/donut"
+ },
+ "dn_sa:donut_rotten": {
+ "textures": "textures/items/donut_rotten"
+ },
+ "dn_sa:candys": {
+ "textures": "textures/items/candys"
+ },
+ "dn_sa:butter": {
+ "textures": "textures/items/butter"
+ },
+ "dn_sa:cheese": {
+ "textures": "textures/items/cheese"
+ },
+ "dn_sa:cheese_bread": {
+ "textures": "textures/items/cheese_bread"
+ },
+ "dn_sa:chips": {
+ "textures": "textures/items/chips"
+ },
+ "dn_sa:brigadeiro": {
+ "textures": "textures/items/brigadeiro"
+ },
+ "dn_sa:coxinha": {
+ "textures": "textures/items/coxinha"
+ },
+ "dn_sa:rotten_coxinha": {
+ "textures": "textures/items/rotten_coxinha"
+ },
+ "dn_sa:raw_coxinha": {
+ "textures": "textures/items/raw_coxinha"
+ },
+ "dn_sa:meat_pastel": {
+ "textures": "textures/items/meat_pastel"
+ },
+ "dn_sa:raw_meat_pastel": {
+ "textures": "textures/items/raw_meat_pastel"
+ },
+ "dn_sa:raw_cheese_pastel": {
+ "textures": "textures/items/raw_cheese_pastel"
+ },
+ "dn_sa:raw_wind_pastel": {
+ "textures": "textures/items/raw_wind_pastel"
+ },
+ "dn_sa:wind_pastel": {
+ "textures": "textures/items/wind_pastel"
+ },
+ "dn_sa:pacoquita": {
+ "textures": "textures/items/pacoquita"
+ },
+ "dn_sa:saltine_cracker": {
+ "textures": "textures/items/saltine_cracker"
+ },
+ "dn_sa:pizza": {
+ "textures": "textures/items/pizza"
+ },
+ "dn_sa:cereal_fruit_loops_flakes": {
+ "textures": "textures/items/cereal_fruit_loops_flakes"
+ },
+ "dn_sa:cereal_kelloggys_flakes": {
+ "textures": "textures/items/cereal_kelloggys_flakes"
+ },
+ "dn_sa:adhesive_tape": {
+ "textures": "textures/items/adhesive_tape"
+ },
+ "dn_sa:alcohol": {
+ "textures": "textures/items/alcohol"
+ },
+ "dn_sa:antiseptic": {
+ "textures": "textures/items/antiseptic"
+ },
+ "dn_sa:ashen_steel_ingot": {
+ "textures": "textures/items/ashen_steel_ingot"
+ },
+ "dn_sa:ashen_steel_mixture": {
+ "textures": "textures/items/ashen_steel_mixture"
+ },
+ "dn_sa:ashen_steel_nugget": {
+ "textures": "textures/items/ashen_steel_nugget"
+ },
+ "dn_sa:ashen_steel_rod": {
+ "textures": "textures/items/ashen_steel_rod"
+ },
+ "dn_sa:battery": {
+ "textures": "textures/items/battery"
+ },
+ "dn_sa:camera": {
+ "textures": "textures/items/camera"
+ },
+ "dn_sa:cardboard": {
+ "textures": "textures/items/cardboard"
+ },
+ "dn_sa:charcoal_dust": {
+ "textures": "textures/items/charcoal_dust"
+ },
+ "dn_sa:classic_watch": {
+ "textures": "textures/items/classic_watch"
+ },
+ "dn_sa:cleaning_liquid": {
+ "textures": "textures/items/cleaning_liquid"
+ },
+ "dn_sa:cloth": {
+ "textures": "textures/items/cloth"
+ },
+ "dn_sa:copper_wire": {
+ "textures": "textures/items/copper_wire"
+ },
+ "dn_sa:dented_can": {
+ "textures": "textures/items/dented_can"
+ },
+ "dn_sa:diamond_nugget": {
+ "textures": "textures/items/diamond_nugget"
+ },
+ "dn_sa:dirty_rags": {
+ "textures": "textures/items/dirty_rags"
+ },
+ "dn_sa:dish_towel": {
+ "textures": "textures/items/dish_towel"
+ },
+ "dn_sa:duct_tape": {
+ "textures": "textures/items/duct_tape"
+ },
+ "dn_sa:electric_scrap": {
+ "textures": "textures/items/electric_scrap"
+ },
+ "dn_sa:empty_can": {
+ "textures": "textures/items/empty_can"
+ },
+ "dn_sa:fabric_patch": {
+ "textures": "textures/items/fabric_patch"
+ },
+ "dn_sa:fermented_mash": {
+ "textures": "textures/items/fermented_mash"
+ },
+ "dn_sa:fiber_fabric": {
+ "textures": "textures/items/fiber_fabric"
+ },
+ "dn_sa:gasoline_bucket": {
+ "textures": "textures/items/gasoline_bucket"
+ },
+ "dn_sa:generator_manual": {
+ "textures": "textures/items/generator_manual"
+ },
+ "dn_sa:glue": {
+ "textures": "textures/items/glue"
+ },
+ "dn_sa:hair_gel": {
+ "textures": "textures/items/hair_gel"
+ },
+ "dn_sa:insulated_copper_wire": {
+ "textures": "textures/items/insulated_copper_wire"
+ },
+ "dn_sa:kevlar": {
+ "textures": "textures/items/kevlar"
+ },
+ "dn_sa:kevlar_thread": {
+ "textures": "textures/items/kevlar_thread"
+ },
+ "dn_sa:leather_strip": {
+ "textures": "textures/items/leather_strip"
+ },
+ "dn_sa:lunch_bag": {
+ "textures": "textures/items/lunch_bag"
+ },
+ "dn_sa:matchbox": {
+ "textures": "textures/items/matchbox"
+ },
+ "dn_sa:medical_adhesive": {
+ "textures": "textures/items/medical_adhesive"
+ },
+ "dn_sa:metal_pipe": {
+ "textures": "textures/items/metal_pipe"
+ },
+ "dn_sa:metal_scrap": {
+ "textures": "textures/items/metal_scrap"
+ },
+ "dn_sa:metal_sheet": {
+ "textures": "textures/items/metal_sheet"
+ },
+ "dn_sa:money": {
+ "textures": "textures/items/money"
+ },
+ "dn_sa:money_bundle": {
+ "textures": "textures/items/money_bundle"
+ },
+ "dn_sa:nails": {
+ "textures": "textures/items/nails"
+ },
+ "dn_sa:netherite_nugget": {
+ "textures": "textures/items/netherite_nugget"
+ },
+ "dn_sa:paperclip": {
+ "textures": "textures/items/paperclip"
+ },
+ "dn_sa:plastic": {
+ "textures": "textures/items/plastic"
+ },
+ "dn_sa:plastic_bag": {
+ "textures": "textures/items/plastic_bag"
+ },
+ "dn_sa:plastic_plate": {
+ "textures": "textures/items/plastic_plate"
+ },
+ "dn_sa:polyester": {
+ "textures": "textures/items/polyester"
+ },
+ "dn_sa:polyester_thread": {
+ "textures": "textures/items/polyester_thread"
+ },
+ "dn_sa:rags": {
+ "textures": "textures/items/rags"
+ },
+ "dn_sa:rubber": {
+ "textures": "textures/items/rubber"
+ },
+ "dn_sa:rubbing_alcohol": {
+ "textures": "textures/items/rubbing_alcohol"
+ },
+ "dn_sa:saw_blade": {
+ "textures": "textures/items/saw_blade"
+ },
+ "dn_sa:scrap_nugget": {
+ "textures": "textures/items/scrap_nugget"
+ },
+ "dn_sa:scrap_wood": {
+ "textures": "textures/items/scrap_wood"
+ },
+ "dn_sa:screws": {
+ "textures": "textures/items/screws"
+ },
+ "dn_sa:small_metal_sheet": {
+ "textures": "textures/items/small_metal_sheet"
+ },
+ "dn_sa:sterilized_rags": {
+ "textures": "textures/items/sterilized_rags"
+ },
+ "dn_sa:sulfur": {
+ "textures": "textures/items/sulfur"
+ },
+ "dn_sa:sulfur_dust": {
+ "textures": "textures/items/sulfur_dust"
+ },
+ "dn_sa:thread": {
+ "textures": "textures/items/thread"
+ },
+ "dn_sa:tin_can": {
+ "textures": "textures/items/tin_can"
+ },
+ "dn_sa:wire": {
+ "textures": "textures/items/wire"
+ }
+ }
+}
\ No newline at end of file
diff --git a/resource_pack_t7eJjrxY/textures/items/adhesive_tape.png b/resource_pack_t7eJjrxY/textures/items/adhesive_tape.png
new file mode 100644
index 0000000..17e3b30
Binary files /dev/null and b/resource_pack_t7eJjrxY/textures/items/adhesive_tape.png differ
diff --git a/resource_pack_t7eJjrxY/textures/items/alcohol.png b/resource_pack_t7eJjrxY/textures/items/alcohol.png
new file mode 100644
index 0000000..b0ae3d0
Binary files /dev/null and b/resource_pack_t7eJjrxY/textures/items/alcohol.png differ
diff --git a/resource_pack_t7eJjrxY/textures/items/antiseptic.png b/resource_pack_t7eJjrxY/textures/items/antiseptic.png
new file mode 100644
index 0000000..7a17c72
Binary files /dev/null and b/resource_pack_t7eJjrxY/textures/items/antiseptic.png differ
diff --git a/resource_pack_t7eJjrxY/textures/items/apple_juice_box.png b/resource_pack_t7eJjrxY/textures/items/apple_juice_box.png
new file mode 100644
index 0000000..8ed95f4
Binary files /dev/null and b/resource_pack_t7eJjrxY/textures/items/apple_juice_box.png differ
diff --git a/resource_pack_t7eJjrxY/textures/items/ashen_steel_ingot.png b/resource_pack_t7eJjrxY/textures/items/ashen_steel_ingot.png
new file mode 100644
index 0000000..4c32d25
Binary files /dev/null and b/resource_pack_t7eJjrxY/textures/items/ashen_steel_ingot.png differ
diff --git a/resource_pack_t7eJjrxY/textures/items/ashen_steel_mixture.png b/resource_pack_t7eJjrxY/textures/items/ashen_steel_mixture.png
new file mode 100644
index 0000000..bc29313
Binary files /dev/null and b/resource_pack_t7eJjrxY/textures/items/ashen_steel_mixture.png differ
diff --git a/resource_pack_t7eJjrxY/textures/items/ashen_steel_nugget.png b/resource_pack_t7eJjrxY/textures/items/ashen_steel_nugget.png
new file mode 100644
index 0000000..2784f4d
Binary files /dev/null and b/resource_pack_t7eJjrxY/textures/items/ashen_steel_nugget.png differ
diff --git a/resource_pack_t7eJjrxY/textures/items/ashen_steel_rod.png b/resource_pack_t7eJjrxY/textures/items/ashen_steel_rod.png
new file mode 100644
index 0000000..01f79d9
Binary files /dev/null and b/resource_pack_t7eJjrxY/textures/items/ashen_steel_rod.png differ
diff --git a/resource_pack_t7eJjrxY/textures/items/battery.png b/resource_pack_t7eJjrxY/textures/items/battery.png
new file mode 100644
index 0000000..bd7c039
Binary files /dev/null and b/resource_pack_t7eJjrxY/textures/items/battery.png differ
diff --git a/resource_pack_t7eJjrxY/textures/items/berry_juice_box.png b/resource_pack_t7eJjrxY/textures/items/berry_juice_box.png
new file mode 100644
index 0000000..3389fd8
Binary files /dev/null and b/resource_pack_t7eJjrxY/textures/items/berry_juice_box.png differ
diff --git a/resource_pack_t7eJjrxY/textures/items/big_burger.png b/resource_pack_t7eJjrxY/textures/items/big_burger.png
new file mode 100644
index 0000000..cddce3d
Binary files /dev/null and b/resource_pack_t7eJjrxY/textures/items/big_burger.png differ
diff --git a/resource_pack_t7eJjrxY/textures/items/big_burger_rotten.png b/resource_pack_t7eJjrxY/textures/items/big_burger_rotten.png
new file mode 100644
index 0000000..2059e3b
Binary files /dev/null and b/resource_pack_t7eJjrxY/textures/items/big_burger_rotten.png differ
diff --git a/resource_pack_t7eJjrxY/textures/items/biscuit.png b/resource_pack_t7eJjrxY/textures/items/biscuit.png
new file mode 100644
index 0000000..cba811a
Binary files /dev/null and b/resource_pack_t7eJjrxY/textures/items/biscuit.png differ
diff --git a/resource_pack_t7eJjrxY/textures/items/biscuit_rotten.png b/resource_pack_t7eJjrxY/textures/items/biscuit_rotten.png
new file mode 100644
index 0000000..988aa51
Binary files /dev/null and b/resource_pack_t7eJjrxY/textures/items/biscuit_rotten.png differ
diff --git a/resource_pack_t7eJjrxY/textures/items/brigadeiro.png b/resource_pack_t7eJjrxY/textures/items/brigadeiro.png
new file mode 100644
index 0000000..c7ff873
Binary files /dev/null and b/resource_pack_t7eJjrxY/textures/items/brigadeiro.png differ
diff --git a/resource_pack_t7eJjrxY/textures/items/burger.png b/resource_pack_t7eJjrxY/textures/items/burger.png
new file mode 100644
index 0000000..4515c78
Binary files /dev/null and b/resource_pack_t7eJjrxY/textures/items/burger.png differ
diff --git a/resource_pack_t7eJjrxY/textures/items/burger_rotten.png b/resource_pack_t7eJjrxY/textures/items/burger_rotten.png
new file mode 100644
index 0000000..b621506
Binary files /dev/null and b/resource_pack_t7eJjrxY/textures/items/burger_rotten.png differ
diff --git a/resource_pack_t7eJjrxY/textures/items/burrito.png b/resource_pack_t7eJjrxY/textures/items/burrito.png
new file mode 100644
index 0000000..d6dc709
Binary files /dev/null and b/resource_pack_t7eJjrxY/textures/items/burrito.png differ
diff --git a/resource_pack_t7eJjrxY/textures/items/burrito_rotten.png b/resource_pack_t7eJjrxY/textures/items/burrito_rotten.png
new file mode 100644
index 0000000..e4ad3ab
Binary files /dev/null and b/resource_pack_t7eJjrxY/textures/items/burrito_rotten.png differ
diff --git a/resource_pack_t7eJjrxY/textures/items/butter.png b/resource_pack_t7eJjrxY/textures/items/butter.png
new file mode 100644
index 0000000..8c1a18f
Binary files /dev/null and b/resource_pack_t7eJjrxY/textures/items/butter.png differ
diff --git a/resource_pack_t7eJjrxY/textures/items/camera.png b/resource_pack_t7eJjrxY/textures/items/camera.png
new file mode 100644
index 0000000..c27ed29
Binary files /dev/null and b/resource_pack_t7eJjrxY/textures/items/camera.png differ
diff --git a/resource_pack_t7eJjrxY/textures/items/candys.png b/resource_pack_t7eJjrxY/textures/items/candys.png
new file mode 100644
index 0000000..0609544
Binary files /dev/null and b/resource_pack_t7eJjrxY/textures/items/candys.png differ
diff --git a/resource_pack_t7eJjrxY/textures/items/cardboard.png b/resource_pack_t7eJjrxY/textures/items/cardboard.png
new file mode 100644
index 0000000..a2988c7
Binary files /dev/null and b/resource_pack_t7eJjrxY/textures/items/cardboard.png differ
diff --git a/resource_pack_t7eJjrxY/textures/items/cereal_fruit_loops_flakes.png b/resource_pack_t7eJjrxY/textures/items/cereal_fruit_loops_flakes.png
new file mode 100644
index 0000000..8c38e85
Binary files /dev/null and b/resource_pack_t7eJjrxY/textures/items/cereal_fruit_loops_flakes.png differ
diff --git a/resource_pack_t7eJjrxY/textures/items/cereal_kelloggys_flakes.png b/resource_pack_t7eJjrxY/textures/items/cereal_kelloggys_flakes.png
new file mode 100644
index 0000000..00f7efd
Binary files /dev/null and b/resource_pack_t7eJjrxY/textures/items/cereal_kelloggys_flakes.png differ
diff --git a/resource_pack_t7eJjrxY/textures/items/charcoal_dust.png b/resource_pack_t7eJjrxY/textures/items/charcoal_dust.png
new file mode 100644
index 0000000..fac44fc
Binary files /dev/null and b/resource_pack_t7eJjrxY/textures/items/charcoal_dust.png differ
diff --git a/resource_pack_t7eJjrxY/textures/items/cheese.png b/resource_pack_t7eJjrxY/textures/items/cheese.png
new file mode 100644
index 0000000..936ab3b
Binary files /dev/null and b/resource_pack_t7eJjrxY/textures/items/cheese.png differ
diff --git a/resource_pack_t7eJjrxY/textures/items/cheese_bread.png b/resource_pack_t7eJjrxY/textures/items/cheese_bread.png
new file mode 100644
index 0000000..206a38b
Binary files /dev/null and b/resource_pack_t7eJjrxY/textures/items/cheese_bread.png differ
diff --git a/resource_pack_t7eJjrxY/textures/items/cheese_burger.png b/resource_pack_t7eJjrxY/textures/items/cheese_burger.png
new file mode 100644
index 0000000..e005ccf
Binary files /dev/null and b/resource_pack_t7eJjrxY/textures/items/cheese_burger.png differ
diff --git a/resource_pack_t7eJjrxY/textures/items/cheese_burger_rotten.png b/resource_pack_t7eJjrxY/textures/items/cheese_burger_rotten.png
new file mode 100644
index 0000000..abcedd6
Binary files /dev/null and b/resource_pack_t7eJjrxY/textures/items/cheese_burger_rotten.png differ
diff --git a/resource_pack_t7eJjrxY/textures/items/chips.png b/resource_pack_t7eJjrxY/textures/items/chips.png
new file mode 100644
index 0000000..0799a42
Binary files /dev/null and b/resource_pack_t7eJjrxY/textures/items/chips.png differ
diff --git a/resource_pack_t7eJjrxY/textures/items/classic_watch.png b/resource_pack_t7eJjrxY/textures/items/classic_watch.png
new file mode 100644
index 0000000..f3b77e0
Binary files /dev/null and b/resource_pack_t7eJjrxY/textures/items/classic_watch.png differ
diff --git a/resource_pack_t7eJjrxY/textures/items/cleaning_liquid.png b/resource_pack_t7eJjrxY/textures/items/cleaning_liquid.png
new file mode 100644
index 0000000..b237842
Binary files /dev/null and b/resource_pack_t7eJjrxY/textures/items/cleaning_liquid.png differ
diff --git a/resource_pack_t7eJjrxY/textures/items/cloth.png b/resource_pack_t7eJjrxY/textures/items/cloth.png
new file mode 100644
index 0000000..ee47482
Binary files /dev/null and b/resource_pack_t7eJjrxY/textures/items/cloth.png differ
diff --git a/resource_pack_t7eJjrxY/textures/items/copper_wire.png b/resource_pack_t7eJjrxY/textures/items/copper_wire.png
new file mode 100644
index 0000000..86bb5af
Binary files /dev/null and b/resource_pack_t7eJjrxY/textures/items/copper_wire.png differ
diff --git a/resource_pack_t7eJjrxY/textures/items/coxinha.png b/resource_pack_t7eJjrxY/textures/items/coxinha.png
new file mode 100644
index 0000000..0c439de
Binary files /dev/null and b/resource_pack_t7eJjrxY/textures/items/coxinha.png differ
diff --git a/resource_pack_t7eJjrxY/textures/items/dented_can.png b/resource_pack_t7eJjrxY/textures/items/dented_can.png
new file mode 100644
index 0000000..c8b872d
Binary files /dev/null and b/resource_pack_t7eJjrxY/textures/items/dented_can.png differ
diff --git a/resource_pack_t7eJjrxY/textures/items/diamond_nugget.png b/resource_pack_t7eJjrxY/textures/items/diamond_nugget.png
new file mode 100644
index 0000000..eb3ad82
Binary files /dev/null and b/resource_pack_t7eJjrxY/textures/items/diamond_nugget.png differ
diff --git a/resource_pack_t7eJjrxY/textures/items/dirty_rags.png b/resource_pack_t7eJjrxY/textures/items/dirty_rags.png
new file mode 100644
index 0000000..8454764
Binary files /dev/null and b/resource_pack_t7eJjrxY/textures/items/dirty_rags.png differ
diff --git a/resource_pack_t7eJjrxY/textures/items/dish_towel.png b/resource_pack_t7eJjrxY/textures/items/dish_towel.png
new file mode 100644
index 0000000..7b1d20c
Binary files /dev/null and b/resource_pack_t7eJjrxY/textures/items/dish_towel.png differ
diff --git a/resource_pack_t7eJjrxY/textures/items/donut.png b/resource_pack_t7eJjrxY/textures/items/donut.png
new file mode 100644
index 0000000..e1a69a1
Binary files /dev/null and b/resource_pack_t7eJjrxY/textures/items/donut.png differ
diff --git a/resource_pack_t7eJjrxY/textures/items/donut_rotten.png b/resource_pack_t7eJjrxY/textures/items/donut_rotten.png
new file mode 100644
index 0000000..d3c6990
Binary files /dev/null and b/resource_pack_t7eJjrxY/textures/items/donut_rotten.png differ
diff --git a/resource_pack_t7eJjrxY/textures/items/duct_tape.png b/resource_pack_t7eJjrxY/textures/items/duct_tape.png
new file mode 100644
index 0000000..d0bc505
Binary files /dev/null and b/resource_pack_t7eJjrxY/textures/items/duct_tape.png differ
diff --git a/resource_pack_t7eJjrxY/textures/items/electric_scrap.png b/resource_pack_t7eJjrxY/textures/items/electric_scrap.png
new file mode 100644
index 0000000..1ccdff5
Binary files /dev/null and b/resource_pack_t7eJjrxY/textures/items/electric_scrap.png differ
diff --git a/resource_pack_t7eJjrxY/textures/items/empty_can.png b/resource_pack_t7eJjrxY/textures/items/empty_can.png
new file mode 100644
index 0000000..82df584
Binary files /dev/null and b/resource_pack_t7eJjrxY/textures/items/empty_can.png differ
diff --git a/resource_pack_t7eJjrxY/textures/items/empty_juice_box.png b/resource_pack_t7eJjrxY/textures/items/empty_juice_box.png
new file mode 100644
index 0000000..1ae14e7
Binary files /dev/null and b/resource_pack_t7eJjrxY/textures/items/empty_juice_box.png differ
diff --git a/resource_pack_t7eJjrxY/textures/items/fabric_patch.png b/resource_pack_t7eJjrxY/textures/items/fabric_patch.png
new file mode 100644
index 0000000..977d4c6
Binary files /dev/null and b/resource_pack_t7eJjrxY/textures/items/fabric_patch.png differ
diff --git a/resource_pack_t7eJjrxY/textures/items/fermented_mash.png b/resource_pack_t7eJjrxY/textures/items/fermented_mash.png
new file mode 100644
index 0000000..bb32e11
Binary files /dev/null and b/resource_pack_t7eJjrxY/textures/items/fermented_mash.png differ
diff --git a/resource_pack_t7eJjrxY/textures/items/fiber_fabric.png b/resource_pack_t7eJjrxY/textures/items/fiber_fabric.png
new file mode 100644
index 0000000..7727c68
Binary files /dev/null and b/resource_pack_t7eJjrxY/textures/items/fiber_fabric.png differ
diff --git a/resource_pack_t7eJjrxY/textures/items/gasoline_bucket.png b/resource_pack_t7eJjrxY/textures/items/gasoline_bucket.png
new file mode 100644
index 0000000..137beff
Binary files /dev/null and b/resource_pack_t7eJjrxY/textures/items/gasoline_bucket.png differ
diff --git a/resource_pack_t7eJjrxY/textures/items/generator_manual.png b/resource_pack_t7eJjrxY/textures/items/generator_manual.png
new file mode 100644
index 0000000..3e2d1ad
Binary files /dev/null and b/resource_pack_t7eJjrxY/textures/items/generator_manual.png differ
diff --git a/resource_pack_t7eJjrxY/textures/items/glue.png b/resource_pack_t7eJjrxY/textures/items/glue.png
new file mode 100644
index 0000000..a59e127
Binary files /dev/null and b/resource_pack_t7eJjrxY/textures/items/glue.png differ
diff --git a/resource_pack_t7eJjrxY/textures/items/grape_juice_box.png b/resource_pack_t7eJjrxY/textures/items/grape_juice_box.png
new file mode 100644
index 0000000..39799f8
Binary files /dev/null and b/resource_pack_t7eJjrxY/textures/items/grape_juice_box.png differ
diff --git a/resource_pack_t7eJjrxY/textures/items/hair_gel.png b/resource_pack_t7eJjrxY/textures/items/hair_gel.png
new file mode 100644
index 0000000..bddd9e4
Binary files /dev/null and b/resource_pack_t7eJjrxY/textures/items/hair_gel.png differ
diff --git a/resource_pack_t7eJjrxY/textures/items/hot_dog.png b/resource_pack_t7eJjrxY/textures/items/hot_dog.png
new file mode 100644
index 0000000..9a5ca00
Binary files /dev/null and b/resource_pack_t7eJjrxY/textures/items/hot_dog.png differ
diff --git a/resource_pack_t7eJjrxY/textures/items/hot_dog_rotten.png b/resource_pack_t7eJjrxY/textures/items/hot_dog_rotten.png
new file mode 100644
index 0000000..9f8dbef
Binary files /dev/null and b/resource_pack_t7eJjrxY/textures/items/hot_dog_rotten.png differ
diff --git a/resource_pack_t7eJjrxY/textures/items/insulated_copper_wire.png b/resource_pack_t7eJjrxY/textures/items/insulated_copper_wire.png
new file mode 100644
index 0000000..11d3645
Binary files /dev/null and b/resource_pack_t7eJjrxY/textures/items/insulated_copper_wire.png differ
diff --git a/resource_pack_t7eJjrxY/textures/items/jianbing.png b/resource_pack_t7eJjrxY/textures/items/jianbing.png
new file mode 100644
index 0000000..991f2c2
Binary files /dev/null and b/resource_pack_t7eJjrxY/textures/items/jianbing.png differ
diff --git a/resource_pack_t7eJjrxY/textures/items/jianbing_rotten.png b/resource_pack_t7eJjrxY/textures/items/jianbing_rotten.png
new file mode 100644
index 0000000..769a978
Binary files /dev/null and b/resource_pack_t7eJjrxY/textures/items/jianbing_rotten.png differ
diff --git a/resource_pack_t7eJjrxY/textures/items/kevlar.png b/resource_pack_t7eJjrxY/textures/items/kevlar.png
new file mode 100644
index 0000000..3f7decc
Binary files /dev/null and b/resource_pack_t7eJjrxY/textures/items/kevlar.png differ
diff --git a/resource_pack_t7eJjrxY/textures/items/kevlar_thread.png b/resource_pack_t7eJjrxY/textures/items/kevlar_thread.png
new file mode 100644
index 0000000..6e60c3d
Binary files /dev/null and b/resource_pack_t7eJjrxY/textures/items/kevlar_thread.png differ
diff --git a/resource_pack_t7eJjrxY/textures/items/leather_strip.png b/resource_pack_t7eJjrxY/textures/items/leather_strip.png
new file mode 100644
index 0000000..859d31b
Binary files /dev/null and b/resource_pack_t7eJjrxY/textures/items/leather_strip.png differ
diff --git a/resource_pack_t7eJjrxY/textures/items/lunch_bag.png b/resource_pack_t7eJjrxY/textures/items/lunch_bag.png
new file mode 100644
index 0000000..4aba5d9
Binary files /dev/null and b/resource_pack_t7eJjrxY/textures/items/lunch_bag.png differ
diff --git a/resource_pack_t7eJjrxY/textures/items/matchbox.png b/resource_pack_t7eJjrxY/textures/items/matchbox.png
new file mode 100644
index 0000000..730be99
Binary files /dev/null and b/resource_pack_t7eJjrxY/textures/items/matchbox.png differ
diff --git a/resource_pack_t7eJjrxY/textures/items/meat_pastel.png b/resource_pack_t7eJjrxY/textures/items/meat_pastel.png
new file mode 100644
index 0000000..4cd5c4d
Binary files /dev/null and b/resource_pack_t7eJjrxY/textures/items/meat_pastel.png differ
diff --git a/resource_pack_t7eJjrxY/textures/items/medical_adhesive.png b/resource_pack_t7eJjrxY/textures/items/medical_adhesive.png
new file mode 100644
index 0000000..9f515e3
Binary files /dev/null and b/resource_pack_t7eJjrxY/textures/items/medical_adhesive.png differ
diff --git a/resource_pack_t7eJjrxY/textures/items/metal_pipe.png b/resource_pack_t7eJjrxY/textures/items/metal_pipe.png
new file mode 100644
index 0000000..2c9e6e1
Binary files /dev/null and b/resource_pack_t7eJjrxY/textures/items/metal_pipe.png differ
diff --git a/resource_pack_t7eJjrxY/textures/items/metal_scrap.png b/resource_pack_t7eJjrxY/textures/items/metal_scrap.png
new file mode 100644
index 0000000..d6f5841
Binary files /dev/null and b/resource_pack_t7eJjrxY/textures/items/metal_scrap.png differ
diff --git a/resource_pack_t7eJjrxY/textures/items/metal_sheet.png b/resource_pack_t7eJjrxY/textures/items/metal_sheet.png
new file mode 100644
index 0000000..4aec7ab
Binary files /dev/null and b/resource_pack_t7eJjrxY/textures/items/metal_sheet.png differ
diff --git a/resource_pack_t7eJjrxY/textures/items/money.png b/resource_pack_t7eJjrxY/textures/items/money.png
new file mode 100644
index 0000000..a2f5d10
Binary files /dev/null and b/resource_pack_t7eJjrxY/textures/items/money.png differ
diff --git a/resource_pack_t7eJjrxY/textures/items/money_bundle.png b/resource_pack_t7eJjrxY/textures/items/money_bundle.png
new file mode 100644
index 0000000..5402052
Binary files /dev/null and b/resource_pack_t7eJjrxY/textures/items/money_bundle.png differ
diff --git a/resource_pack_t7eJjrxY/textures/items/nails.png b/resource_pack_t7eJjrxY/textures/items/nails.png
new file mode 100644
index 0000000..6d59224
Binary files /dev/null and b/resource_pack_t7eJjrxY/textures/items/nails.png differ
diff --git a/resource_pack_t7eJjrxY/textures/items/netherite_nugget.png b/resource_pack_t7eJjrxY/textures/items/netherite_nugget.png
new file mode 100644
index 0000000..38ac617
Binary files /dev/null and b/resource_pack_t7eJjrxY/textures/items/netherite_nugget.png differ
diff --git a/resource_pack_t7eJjrxY/textures/items/orange_juice_box.png b/resource_pack_t7eJjrxY/textures/items/orange_juice_box.png
new file mode 100644
index 0000000..a35dd8a
Binary files /dev/null and b/resource_pack_t7eJjrxY/textures/items/orange_juice_box.png differ
diff --git a/resource_pack_t7eJjrxY/textures/items/pacoquita.png b/resource_pack_t7eJjrxY/textures/items/pacoquita.png
new file mode 100644
index 0000000..0cce972
Binary files /dev/null and b/resource_pack_t7eJjrxY/textures/items/pacoquita.png differ
diff --git a/resource_pack_t7eJjrxY/textures/items/paperclip.png b/resource_pack_t7eJjrxY/textures/items/paperclip.png
new file mode 100644
index 0000000..509c3df
Binary files /dev/null and b/resource_pack_t7eJjrxY/textures/items/paperclip.png differ
diff --git a/resource_pack_t7eJjrxY/textures/items/pizza.png b/resource_pack_t7eJjrxY/textures/items/pizza.png
new file mode 100644
index 0000000..5e55707
Binary files /dev/null and b/resource_pack_t7eJjrxY/textures/items/pizza.png differ
diff --git a/resource_pack_t7eJjrxY/textures/items/plastic.png b/resource_pack_t7eJjrxY/textures/items/plastic.png
new file mode 100644
index 0000000..4b20862
Binary files /dev/null and b/resource_pack_t7eJjrxY/textures/items/plastic.png differ
diff --git a/resource_pack_t7eJjrxY/textures/items/plastic_bag.png b/resource_pack_t7eJjrxY/textures/items/plastic_bag.png
new file mode 100644
index 0000000..0e88d5e
Binary files /dev/null and b/resource_pack_t7eJjrxY/textures/items/plastic_bag.png differ
diff --git a/resource_pack_t7eJjrxY/textures/items/plastic_plate.png b/resource_pack_t7eJjrxY/textures/items/plastic_plate.png
new file mode 100644
index 0000000..96298e0
Binary files /dev/null and b/resource_pack_t7eJjrxY/textures/items/plastic_plate.png differ
diff --git a/resource_pack_t7eJjrxY/textures/items/polyester.png b/resource_pack_t7eJjrxY/textures/items/polyester.png
new file mode 100644
index 0000000..1b44810
Binary files /dev/null and b/resource_pack_t7eJjrxY/textures/items/polyester.png differ
diff --git a/resource_pack_t7eJjrxY/textures/items/polyester_thread.png b/resource_pack_t7eJjrxY/textures/items/polyester_thread.png
new file mode 100644
index 0000000..a2d4849
Binary files /dev/null and b/resource_pack_t7eJjrxY/textures/items/polyester_thread.png differ
diff --git a/resource_pack_t7eJjrxY/textures/items/rags.png b/resource_pack_t7eJjrxY/textures/items/rags.png
new file mode 100644
index 0000000..39cdedf
Binary files /dev/null and b/resource_pack_t7eJjrxY/textures/items/rags.png differ
diff --git a/resource_pack_t7eJjrxY/textures/items/raw_cheese_pastel.png b/resource_pack_t7eJjrxY/textures/items/raw_cheese_pastel.png
new file mode 100644
index 0000000..96142ab
Binary files /dev/null and b/resource_pack_t7eJjrxY/textures/items/raw_cheese_pastel.png differ
diff --git a/resource_pack_t7eJjrxY/textures/items/raw_coxinha.png b/resource_pack_t7eJjrxY/textures/items/raw_coxinha.png
new file mode 100644
index 0000000..d417fe4
Binary files /dev/null and b/resource_pack_t7eJjrxY/textures/items/raw_coxinha.png differ
diff --git a/resource_pack_t7eJjrxY/textures/items/raw_meat_pastel.png b/resource_pack_t7eJjrxY/textures/items/raw_meat_pastel.png
new file mode 100644
index 0000000..9978209
Binary files /dev/null and b/resource_pack_t7eJjrxY/textures/items/raw_meat_pastel.png differ
diff --git a/resource_pack_t7eJjrxY/textures/items/raw_wind_pastel.png b/resource_pack_t7eJjrxY/textures/items/raw_wind_pastel.png
new file mode 100644
index 0000000..ebe308c
Binary files /dev/null and b/resource_pack_t7eJjrxY/textures/items/raw_wind_pastel.png differ
diff --git a/resource_pack_t7eJjrxY/textures/items/rotten_coxinha.png b/resource_pack_t7eJjrxY/textures/items/rotten_coxinha.png
new file mode 100644
index 0000000..bc4806f
Binary files /dev/null and b/resource_pack_t7eJjrxY/textures/items/rotten_coxinha.png differ
diff --git a/resource_pack_t7eJjrxY/textures/items/rubber.png b/resource_pack_t7eJjrxY/textures/items/rubber.png
new file mode 100644
index 0000000..90de6cf
Binary files /dev/null and b/resource_pack_t7eJjrxY/textures/items/rubber.png differ
diff --git a/resource_pack_t7eJjrxY/textures/items/rubbing_alcohol.png b/resource_pack_t7eJjrxY/textures/items/rubbing_alcohol.png
new file mode 100644
index 0000000..2bb78df
Binary files /dev/null and b/resource_pack_t7eJjrxY/textures/items/rubbing_alcohol.png differ
diff --git a/resource_pack_t7eJjrxY/textures/items/saltine_cracker.png b/resource_pack_t7eJjrxY/textures/items/saltine_cracker.png
new file mode 100644
index 0000000..2a8b1e7
Binary files /dev/null and b/resource_pack_t7eJjrxY/textures/items/saltine_cracker.png differ
diff --git a/resource_pack_t7eJjrxY/textures/items/saw_blade.png b/resource_pack_t7eJjrxY/textures/items/saw_blade.png
new file mode 100644
index 0000000..f4062f0
Binary files /dev/null and b/resource_pack_t7eJjrxY/textures/items/saw_blade.png differ
diff --git a/resource_pack_t7eJjrxY/textures/items/scrap_nugget.png b/resource_pack_t7eJjrxY/textures/items/scrap_nugget.png
new file mode 100644
index 0000000..bf652ae
Binary files /dev/null and b/resource_pack_t7eJjrxY/textures/items/scrap_nugget.png differ
diff --git a/resource_pack_t7eJjrxY/textures/items/scrap_wood.png b/resource_pack_t7eJjrxY/textures/items/scrap_wood.png
new file mode 100644
index 0000000..6001e30
Binary files /dev/null and b/resource_pack_t7eJjrxY/textures/items/scrap_wood.png differ
diff --git a/resource_pack_t7eJjrxY/textures/items/screws.png b/resource_pack_t7eJjrxY/textures/items/screws.png
new file mode 100644
index 0000000..e130455
Binary files /dev/null and b/resource_pack_t7eJjrxY/textures/items/screws.png differ
diff --git a/resource_pack_t7eJjrxY/textures/items/small_metal_sheet.png b/resource_pack_t7eJjrxY/textures/items/small_metal_sheet.png
new file mode 100644
index 0000000..ddc4948
Binary files /dev/null and b/resource_pack_t7eJjrxY/textures/items/small_metal_sheet.png differ
diff --git a/resource_pack_t7eJjrxY/textures/items/sterilized_rags.png b/resource_pack_t7eJjrxY/textures/items/sterilized_rags.png
new file mode 100644
index 0000000..877fd79
Binary files /dev/null and b/resource_pack_t7eJjrxY/textures/items/sterilized_rags.png differ
diff --git a/resource_pack_t7eJjrxY/textures/items/sulfur.png b/resource_pack_t7eJjrxY/textures/items/sulfur.png
new file mode 100644
index 0000000..e40cf5e
Binary files /dev/null and b/resource_pack_t7eJjrxY/textures/items/sulfur.png differ
diff --git a/resource_pack_t7eJjrxY/textures/items/sulfur_dust.png b/resource_pack_t7eJjrxY/textures/items/sulfur_dust.png
new file mode 100644
index 0000000..640f769
Binary files /dev/null and b/resource_pack_t7eJjrxY/textures/items/sulfur_dust.png differ
diff --git a/resource_pack_t7eJjrxY/textures/items/taco.png b/resource_pack_t7eJjrxY/textures/items/taco.png
new file mode 100644
index 0000000..d1c7fbd
Binary files /dev/null and b/resource_pack_t7eJjrxY/textures/items/taco.png differ
diff --git a/resource_pack_t7eJjrxY/textures/items/taco_rotten.png b/resource_pack_t7eJjrxY/textures/items/taco_rotten.png
new file mode 100644
index 0000000..329d09d
Binary files /dev/null and b/resource_pack_t7eJjrxY/textures/items/taco_rotten.png differ
diff --git a/resource_pack_t7eJjrxY/textures/items/thread.png b/resource_pack_t7eJjrxY/textures/items/thread.png
new file mode 100644
index 0000000..7d060d4
Binary files /dev/null and b/resource_pack_t7eJjrxY/textures/items/thread.png differ
diff --git a/resource_pack_t7eJjrxY/textures/items/tin_can.png b/resource_pack_t7eJjrxY/textures/items/tin_can.png
new file mode 100644
index 0000000..96c6363
Binary files /dev/null and b/resource_pack_t7eJjrxY/textures/items/tin_can.png differ
diff --git a/resource_pack_t7eJjrxY/textures/items/toast.png b/resource_pack_t7eJjrxY/textures/items/toast.png
new file mode 100644
index 0000000..1d9c7a2
Binary files /dev/null and b/resource_pack_t7eJjrxY/textures/items/toast.png differ
diff --git a/resource_pack_t7eJjrxY/textures/items/toast_rotten.png b/resource_pack_t7eJjrxY/textures/items/toast_rotten.png
new file mode 100644
index 0000000..0586ca1
Binary files /dev/null and b/resource_pack_t7eJjrxY/textures/items/toast_rotten.png differ
diff --git a/resource_pack_t7eJjrxY/textures/items/waffles.png b/resource_pack_t7eJjrxY/textures/items/waffles.png
new file mode 100644
index 0000000..47d527c
Binary files /dev/null and b/resource_pack_t7eJjrxY/textures/items/waffles.png differ
diff --git a/resource_pack_t7eJjrxY/textures/items/waffles_rotten.png b/resource_pack_t7eJjrxY/textures/items/waffles_rotten.png
new file mode 100644
index 0000000..8f20d6c
Binary files /dev/null and b/resource_pack_t7eJjrxY/textures/items/waffles_rotten.png differ
diff --git a/resource_pack_t7eJjrxY/textures/items/wind_pastel.png b/resource_pack_t7eJjrxY/textures/items/wind_pastel.png
new file mode 100644
index 0000000..77a8fe7
Binary files /dev/null and b/resource_pack_t7eJjrxY/textures/items/wind_pastel.png differ
diff --git a/resource_pack_t7eJjrxY/textures/items/wire.png b/resource_pack_t7eJjrxY/textures/items/wire.png
new file mode 100644
index 0000000..f1dc05a
Binary files /dev/null and b/resource_pack_t7eJjrxY/textures/items/wire.png differ
diff --git a/resource_pack_t7eJjrxY/textures/terrain_texture.json b/resource_pack_t7eJjrxY/textures/terrain_texture.json
new file mode 100644
index 0000000..5ff0599
--- /dev/null
+++ b/resource_pack_t7eJjrxY/textures/terrain_texture.json
@@ -0,0 +1,14 @@
+{
+ "resource_pack_name": "vanilla",
+ "texture_name": "atlas.terrain",
+ "padding": 8,
+ "num_mip_levels": 4,
+ "texture_data": {
+ "dn_sa_generator": {
+ "textures": "textures/blocks/generator"
+ },
+ "dn_sa_salvage_bin": {
+ "textures": "textures/blocks/salvage_bin"
+ }
+ }
+}
diff --git a/studio.json b/studio.json
new file mode 100644
index 0000000..84802a7
--- /dev/null
+++ b/studio.json
@@ -0,0 +1,49 @@
+{
+ "Source": "import",
+ "CreateVersion": "3.9.0.400525",
+ "EditVersion": "3.9.0.400525",
+ "OldEditCount": 0,
+ "NewEditCount": 1,
+ "OldComponents": [],
+ "Account": "3027246179@qq.com",
+ "UserName": "梦研汐凝",
+ "UserId": "13706",
+ "Id": "3768bd36e1da4a1cb7bd61534576037e",
+ "EditType": 2,
+ "IsMap": false,
+ "CreateNew": true,
+ "CodeEnable": false,
+ "CanPublishResourceComponent": true,
+ "EditName": "幸存者军火库",
+ "GameType": 1,
+ "WorldType": 1,
+ "Seed": "",
+ "BlockNums": [
+ 0,
+ 0
+ ],
+ "BornPoint": [
+ 0,
+ 0,
+ 0
+ ],
+ "SaveBackMapPath": null,
+ "SaveBackAddOnPath": "E:\\MCStudioDownload\\work\\3027246179@qq.com\\Cpp\\AddOn\\309c2d420bc84ee986db9cdd070ff02a",
+ "ResourceIds": [],
+ "EditAddOnPaths": [],
+ "NameSpace": "dn_sa",
+ "EditMaterialPaths": [],
+ "EditLogFilePath": "E:\\MCStudioDownload\\work\\editor\\edit.log",
+ "ServerName": "EXPR",
+ "StudioPort": 9283,
+ "DCWebUrl": "https://x19apigatewayexpr.nie.netease.com",
+ "ShowGuide": false,
+ "AssertCacheDir": "E:\\MCStudioDownload\\EngineAssert",
+ "ElkUrl": "https://x19mclexpr.nie.netease.com/client-log",
+ "ShowGpuDriverTips": false,
+ "StudioTempPath": "E:\\MCStudioDownload\\temp\\editorTemp",
+ "EditorResourcePackPath": "E:\\mcsd\\MCStudio\\data\\inner_res",
+ "EditDate": 1790769043,
+ "EditDuration": 1596,
+ "TestDuration": 102502
+}
\ No newline at end of file
diff --git a/work.mcscfg b/work.mcscfg
new file mode 100644
index 0000000..7d499a5
--- /dev/null
+++ b/work.mcscfg
@@ -0,0 +1,63 @@
+{
+ "UID": "3768bd36e1da4a1cb7bd61534576037e",
+ "Language": 0,
+ "Type": 7,
+ "Versions": [],
+ "JavaType": 8,
+ "Name": "幸存者军火库",
+ "UpdateTime": "2026-10-04T21:04:48.4687355+08:00",
+ "IconName": null,
+ "Md5": null,
+ "CloudMd5": null,
+ "HasEncrypt": true,
+ "TemplateType": 0,
+ "Difficulty": 1.0,
+ "Description": null,
+ "CloudItemsId": null,
+ "CloudItemVersion": null,
+ "IsCompetive": false,
+ "GameId": null,
+ "VersionSubDirs": null,
+ "PreComponentIds": null,
+ "IsPc": false,
+ "IsPreCom": false,
+ "CustomWorkDir": null,
+ "ImportHistoryList": null,
+ "OpenEditType": 0,
+ "EditMapUID": "",
+ "EditMapType": 1,
+ "TestMapUID": "",
+ "TestJavaMapType": 0,
+ "TestJavaGameVersion": "",
+ "TestJavaGameMode": 0,
+ "TestJavaType": 8,
+ "TestBonusChest": false,
+ "TestAllowCheat": true,
+ "TestAlwaysDay": false,
+ "TestDaylightCycle": true,
+ "TestKeepInventory": true,
+ "TestMobSpawn": true,
+ "TestMobGriefing": true,
+ "TestEntitiesDropLoot": true,
+ "TestWeatherCycle": true,
+ "TestCommandBlocksEnabled": true,
+ "TestRandomTickSpeed": 1,
+ "TestGenerateBuildings": true,
+ "TestSeed": "",
+ "TestCppMapType": 2,
+ "TestDifficulty": 2,
+ "TestCppGameMode": 1,
+ "TestExperimentalHoliday": false,
+ "TestExperimentalBiomes": false,
+ "TestIsHardcore": false,
+ "TestExperimentalModding": false,
+ "TestStartWithMap": false,
+ "TestRenderEngine": 0,
+ "SelectComponents": [
+ "347076ca005d4cb5b6ca9f07dfefac24",
+ "309c2d420bc84ee986db9cdd070ff02a"
+ ],
+ "isSlim": false,
+ "UseLegacyEditor": null,
+ "CustomTags": []
+}
\ No newline at end of file
diff --git a/world_resource_packs.json b/world_resource_packs.json
new file mode 100644
index 0000000..92d67bc
--- /dev/null
+++ b/world_resource_packs.json
@@ -0,0 +1,11 @@
+[
+ {
+ "pack_id": "14129e44-874a-4d2d-a63e-24184b8fef6c",
+ "type": "Addon",
+ "version": [
+ 0,
+ 0,
+ 1
+ ]
+ }
+]
\ No newline at end of file
diff --git a/回收箱配方表.csv b/回收箱配方表.csv
new file mode 100644
index 0000000..6290b38
--- /dev/null
+++ b/回收箱配方表.csv
@@ -0,0 +1,164 @@
+来源,可回收物,可回收物(中文),高级产物,高级产物(中文),回收类型,每次产出数量,成功率,进度,配方cookTime,配方文件
+sa_core核心,ancient_debris,远古残骸,minecraft:netherite_scrap,netherite_scrap,下界合金碎片,1,100%,直接满级领奖,160,netherite_scrap_from_ancient_debris
+sa_core核心,netherite_axe,下界合金斧,sa_core:netherite_nugget,下界合金粒,下界合金粒,3,50%,2级,64,netherite_nugget_from_netherite_axe
+sa_core核心,netherite_boots,下界合金靴子,sa_core:netherite_nugget,下界合金粒,下界合金粒,3,50%,2级,64,netherite_nugget_from_netherite_boots
+sa_core核心,netherite_chestplate,下界合金胸甲,sa_core:netherite_nugget,下界合金粒,下界合金粒,3,50%,2级,64,netherite_nugget_from_netherite_chestplate
+sa_core核心,netherite_helmet,下界合金头盔,sa_core:netherite_nugget,下界合金粒,下界合金粒,3,50%,2级,64,netherite_nugget_from_netherite_helmet
+sa_core核心,netherite_hoe,下界合金锄,sa_core:netherite_nugget,下界合金粒,下界合金粒,3,50%,2级,64,netherite_nugget_from_netherite_hoe
+sa_core核心,netherite_leggings,下界合金护腿,sa_core:netherite_nugget,下界合金粒,下界合金粒,3,50%,2级,64,netherite_nugget_from_netherite_leggings
+sa_core核心,netherite_pickaxe,下界合金镐,sa_core:netherite_nugget,下界合金粒,下界合金粒,3,50%,2级,64,netherite_nugget_from_netherite_pickaxe
+sa_core核心,netherite_shovel,下界合金锹,sa_core:netherite_nugget,下界合金粒,下界合金粒,3,50%,2级,64,netherite_nugget_from_netherite_shovel
+sa_core核心,netherite_sword,下界合金剑,sa_core:netherite_nugget,下界合金粒,下界合金粒,3,50%,2级,64,netherite_nugget_from_netherite_sword
+sa_core核心,plastic_plate,塑料板,sa_core:plastic,塑料,塑料,1,30%,1级,80,plastic_plate_to_plastic
+sa_core核心,can_opener,开罐器,sa_core:scrap_nugget,废料粒,废料粒,2,30%,1级,100,can_opener
+sa_core核心,dented_can,凹陷的罐子,sa_core:scrap_nugget,废料粒,废料粒,2,30%,1级,100,dented_can
+sa_core核心,empty_can,空罐,sa_core:scrap_nugget,废料粒,废料粒,2,30%,1级,100,empty_can
+sa_core核心,tin_can,锡罐,sa_core:scrap_nugget,废料粒,废料粒,2,30%,1级,100,tin_can
+sa_core核心,gravel,沙砾,minecraft:flint,燧石,燧石,1,50%,2级,70,flint_from_gravel
+sa_core核心,battery,电池,sa_core:electric_scrap,电子废料,电子废料,2,30%,1级,120,battery
+sa_core核心,camera,相机,sa_core:electric_scrap,电子废料,电子废料,4,50%,2级,160,electric_scrap_from_camera
+sa_core核心,cellphone,手机,sa_core:electric_scrap,电子废料,电子废料,6,70%,3级,220,electric_scrap_from_cellphone
+sa_core核心,comparator,红石比较器,sa_core:electric_scrap,电子废料,电子废料,3,50%,2级,130,electric_scrap_from_comparator
+sa_core核心,compass,指南针,sa_core:electric_scrap,电子废料,电子废料,2,30%,1级,100,electric_scrap_from_compass
+sa_core核心,observer,侦测器,sa_core:electric_scrap,电子废料,电子废料,2,30%,1级,100,electric_scrap_from_observer
+sa_core核心,redstone_lamp,红石灯,sa_core:electric_scrap,电子废料,电子废料,2,30%,1级,100,electric_scrap_from_redstone_lamp
+sa_core核心,repeater,红石中继器,sa_core:electric_scrap,电子废料,电子废料,2,30%,1级,100,electric_scrap_from_repeater
+sa_core核心,book,书,minecraft:leather,皮革,皮革,1,50%,2级,80,leather_from_book
+sa_core核心,item_frame,物品展示框,minecraft:leather,皮革,皮革,1,50%,2级,80,leather_from_item_frame
+sa_core核心,leather_boots,皮革靴子,minecraft:leather,皮革,皮革,2,50%,2级,80,leather_from_leather_boots
+sa_core核心,leather_chestplate,皮革胸甲,minecraft:leather,皮革,皮革,4,50%,2级,120,leather_from_leather_chestplate
+sa_core核心,leather_helmet,皮革头盔,minecraft:leather,皮革,皮革,2,50%,2级,80,leather_from_leather_helmet
+sa_core核心,leather_horse_armor,皮革马铠,minecraft:leather,皮革,皮革,4,50%,2级,120,leather_from_leather_horse_armor
+sa_core核心,leather_leggings,皮革护腿,minecraft:leather,皮革,皮革,3,50%,2级,100,leather_from_leather_leggings
+sa_core核心,rotten_flesh,腐肉,minecraft:leather,皮革,皮革,1,50%,2级,100,leather_from_rotten_flesh
+sa_core核心,saddle,鞍,minecraft:leather,皮革,皮革,3,50%,2级,120,leather_from_saddle
+sa_core核心,bow,弓,minecraft:string,线,线,2,70%,3级,80,string_from_bow
+sa_core核心,cobweb,蜘蛛网,minecraft:string,线,线,5,70%,3级,100,string_from_cobweb
+sa_core核心,crossbow,弩,minecraft:string,线,线,2,70%,3级,100,string_from_crossbow
+sa_core核心,fishing_rod,钓鱼竿,minecraft:string,线,线,1,70%,3级,70,string_from_fishing_rod
+sa_core核心,minecraft:wool,minecraft:wool,minecraft:string,线,线,3,70%,3级,80,string_from_wool
+sa_core核心,activator_rail,激活铁轨,sa_core:metal_scrap,金属废料,金属废料,2,30%,1级,96,metal_scrap_from_activator_rail
+sa_core核心,anvil,铁砧,sa_core:metal_scrap,金属废料,金属废料,62,100%,直接满级领奖,600,metal_scrap_from_anvil
+sa_core核心,blast_furnace,高炉,sa_core:metal_scrap,金属废料,金属废料,10,100%,直接满级领奖,184,metal_scrap_from_blast_furnace
+sa_core核心,bucket,桶,sa_core:metal_scrap,金属废料,金属废料,6,70%,3级,120,metal_scrap_from_bucket
+sa_core核心,cauldron,炼药锅,sa_core:metal_scrap,金属废料,金属废料,14,100%,直接满级领奖,240,metal_scrap_from_cauldron
+sa_core核心,chain,锁链,sa_core:metal_scrap,金属废料,金属废料,2,30%,1级,96,metal_scrap_from_chain
+sa_core核心,chainmail_boots,chainmail_boots,sa_core:metal_scrap,金属废料,金属废料,4,50%,2级,152,metal_scrap_from_chainmail_boots
+sa_core核心,chainmail_chestplate,chainmail_chestplate,sa_core:metal_scrap,金属废料,金属废料,8,100%,直接满级领奖,264,metal_scrap_from_chainmail_chestplate
+sa_core核心,chainmail_helmet,chainmail_helmet,sa_core:metal_scrap,金属废料,金属废料,5,70%,3级,184,metal_scrap_from_chainmail_helmet
+sa_core核心,chainmail_leggings,chainmail_leggings,sa_core:metal_scrap,金属废料,金属废料,7,100%,直接满级领奖,240,metal_scrap_from_chainmail_leggings
+sa_core核心,chipped_anvil,开裂的铁砧,sa_core:metal_scrap,金属废料,金属废料,45,100%,直接满级领奖,600,metal_scrap_from_chipped_anvil
+sa_core核心,damaged_anvil,损坏的铁砧,sa_core:metal_scrap,金属废料,金属废料,30,100%,直接满级领奖,600,metal_scrap_from_damaged_anvil
+sa_core核心,detector_rail,探测铁轨,sa_core:metal_scrap,金属废料,金属废料,2,30%,1级,96,metal_scrap_from_detector_rail
+sa_core核心,flint_and_steel,打火石,sa_core:metal_scrap,金属废料,金属废料,2,30%,1级,96,metal_scrap_from_flint_and_steel
+sa_core核心,heavy_weighted_pressure_plate,heavy_weighted_pressure_plate,sa_core:metal_scrap,金属废料,金属废料,4,50%,2级,112,metal_scrap_from_heavy_weighted_pressure_plate
+sa_core核心,hopper,hopper,sa_core:metal_scrap,金属废料,金属废料,10,100%,直接满级领奖,184,metal_scrap_from_hopper
+sa_core核心,iron_axe,铁斧,sa_core:metal_scrap,金属废料,金属废料,6,70%,3级,120,metal_scrap_from_iron_axe
+sa_core核心,iron_bars,iron_bars,sa_core:metal_scrap,金属废料,金属废料,1,30%,1级,88,metal_scrap_from_iron_bars
+sa_core核心,iron_block,铁块,sa_core:metal_scrap,金属废料,金属废料,18,100%,直接满级领奖,296,metal_scrap_from_iron_block
+sa_core核心,iron_boots,铁靴子,sa_core:metal_scrap,金属废料,金属废料,8,100%,直接满级领奖,152,metal_scrap_from_iron_boots
+sa_core核心,iron_chestplate,铁胸甲,sa_core:metal_scrap,金属废料,金属废料,16,100%,直接满级领奖,264,metal_scrap_from_iron_chestplate
+sa_core核心,iron_door,iron_door,sa_core:metal_scrap,金属废料,金属废料,4,50%,2级,112,metal_scrap_from_iron_door
+sa_core核心,iron_helmet,铁头盔,sa_core:metal_scrap,金属废料,金属废料,10,100%,直接满级领奖,184,metal_scrap_from_iron_helmet
+sa_core核心,iron_hoe,铁锄,sa_core:metal_scrap,金属废料,金属废料,4,50%,2级,112,metal_scrap_from_iron_hoe
+sa_core核心,iron_ingot,铁锭,sa_core:metal_scrap,金属废料,金属废料,2,30%,1级,96,metal_scrap_from_iron_ingot
+sa_core核心,iron_leggings,铁护腿,sa_core:metal_scrap,金属废料,金属废料,14,100%,直接满级领奖,240,metal_scrap_from_iron_leggings
+sa_core核心,iron_pickaxe,铁镐,sa_core:metal_scrap,金属废料,金属废料,6,70%,3级,120,metal_scrap_from_iron_pickaxe
+sa_core核心,iron_shovel,铁锹,sa_core:metal_scrap,金属废料,金属废料,2,30%,1级,96,metal_scrap_from_iron_shovel
+sa_core核心,iron_sword,铁剑,sa_core:metal_scrap,金属废料,金属废料,4,50%,2级,112,metal_scrap_from_iron_sword
+sa_core核心,iron_trapdoor,铁活板门,sa_core:metal_scrap,金属废料,金属废料,8,100%,直接满级领奖,152,metal_scrap_from_iron_trapdoor
+sa_core核心,metal_pipe,金属管,sa_core:metal_scrap,金属废料,金属废料,2,30%,1级,120,metal_pipe
+sa_core核心,minecart,矿车,sa_core:metal_scrap,金属废料,金属废料,10,100%,直接满级领奖,184,metal_scrap_from_minecart
+sa_core核心,pliers,钳子,sa_core:metal_scrap,金属废料,金属废料,2,30%,1级,120,pliers
+sa_core核心,rail,铁轨,sa_core:metal_scrap,金属废料,金属废料,1,30%,1级,88,metal_scrap_from_rail
+sa_core核心,saw,saw,sa_core:metal_scrap,金属废料,金属废料,4,50%,2级,120,metal_scrap_from_saw
+sa_core核心,saw_blade,锯片,sa_core:metal_scrap,金属废料,金属废料,4,50%,2级,160,saw_blade
+sa_core核心,scissor,scissor,sa_core:metal_scrap,金属废料,金属废料,2,30%,1级,120,metal_scrap_from_scissor
+sa_core核心,shears,剪刀,sa_core:metal_scrap,金属废料,金属废料,4,50%,2级,112,metal_scrap_from_shears
+sa_core核心,smithing_table,锻造台,sa_core:metal_scrap,金属废料,金属废料,4,50%,2级,152,metal_scrap_from_smithing_table
+sa_core核心,classic_watch,经典手表,minecraft:gold_nugget,金粒,金粒,14,100%,直接满级领奖,152,gold_nugget_from_classic_watch
+sa_core核心,clock,时钟,minecraft:gold_nugget,金粒,金粒,14,100%,直接满级领奖,152,gold_nugget_from_clock
+sa_core核心,golden_axe,金斧,minecraft:gold_nugget,金粒,金粒,10,100%,直接满级领奖,120,gold_nugget_from_golden_axe
+sa_core核心,golden_boots,金靴子,minecraft:gold_nugget,金粒,金粒,14,100%,直接满级领奖,152,gold_nugget_from_golden_boots
+sa_core核心,golden_chestplate,金胸甲,minecraft:gold_nugget,金粒,金粒,28,100%,直接满级领奖,264,gold_nugget_from_golden_chestplate
+sa_core核心,golden_helmet,金头盔,minecraft:gold_nugget,金粒,金粒,18,100%,直接满级领奖,184,gold_nugget_from_golden_helmet
+sa_core核心,golden_hoe,金锄,minecraft:gold_nugget,金粒,金粒,7,100%,直接满级领奖,96,gold_nugget_from_golden_hoe
+sa_core核心,golden_leggings,金护腿,minecraft:gold_nugget,金粒,金粒,25,100%,直接满级领奖,240,gold_nugget_from_golden_leggings
+sa_core核心,golden_pickaxe,金镐,minecraft:gold_nugget,金粒,金粒,10,100%,直接满级领奖,120,gold_nugget_from_golden_pickaxe
+sa_core核心,golden_shovel,金锹,minecraft:gold_nugget,金粒,金粒,3,50%,2级,64,gold_nugget_from_golden_shovel
+sa_core核心,golden_sword,金剑,minecraft:gold_nugget,金粒,金粒,7,100%,直接满级领奖,96,gold_nugget_from_golden_sword
+sa_core核心,powered_rail,充能铁轨,minecraft:gold_nugget,金粒,金粒,2,30%,1级,56,gold_nugget_from_powered_rail
+sa_core核心,diamond_axe,钻石斧,sa_core:diamond_nugget,钻石粒,钻石粒,10,100%,直接满级领奖,120,diamond_nugget_from_diamond_axe
+sa_core核心,diamond_boots,钻石靴子,sa_core:diamond_nugget,钻石粒,钻石粒,14,100%,直接满级领奖,152,diamond_nugget_from_diamond_boots
+sa_core核心,diamond_chestplate,钻石胸甲,sa_core:diamond_nugget,钻石粒,钻石粒,28,100%,直接满级领奖,264,diamond_nugget_from_diamond_chestplate
+sa_core核心,diamond_helmet,钻石头盔,sa_core:diamond_nugget,钻石粒,钻石粒,18,100%,直接满级领奖,184,diamond_nugget_from_diamond_helmet
+sa_core核心,diamond_hoe,钻石锄,sa_core:diamond_nugget,钻石粒,钻石粒,7,100%,直接满级领奖,96,diamond_nugget_from_diamond_hoe
+sa_core核心,diamond_leggings,钻石护腿,sa_core:diamond_nugget,钻石粒,钻石粒,25,100%,直接满级领奖,240,diamond_nugget_from_diamond_leggings
+sa_core核心,diamond_pickaxe,钻石镐,sa_core:diamond_nugget,钻石粒,钻石粒,10,100%,直接满级领奖,120,diamond_nugget_from_diamond_pickaxe
+sa_core核心,diamond_shovel,钻石锹,sa_core:diamond_nugget,钻石粒,钻石粒,3,50%,2级,64,diamond_nugget_from_diamond_shovel
+sa_core核心,diamond_sword,钻石剑,sa_core:diamond_nugget,钻石粒,钻石粒,7,100%,直接满级领奖,96,diamond_nugget_from_diamond_sword
+sa_decor装饰,attach_case,attach_case,sa_core:plastic_plate,塑料板,sa_core:plastic_plate,2,30%,1级,130,attach_case
+sa_decor装饰,gun_case,枪盒,sa_core:plastic_plate,塑料板,sa_core:plastic_plate,2,30%,1级,140,gun_case
+sa_decor装饰,gun_case_green,gun_case_green,sa_core:plastic_plate,塑料板,sa_core:plastic_plate,2,30%,1级,140,gun_case_green
+sa_decor装饰,handgun_case,handgun_case,sa_core:plastic_plate,塑料板,sa_core:plastic_plate,2,30%,1级,130,handgun_case
+sa_decor装饰,handgun_case_green,handgun_case_green,sa_core:plastic_plate,塑料板,sa_core:plastic_plate,2,30%,1级,130,handgun_case_green
+sa_decor装饰,plastic_chair_red,plastic_chair_red,sa_core:plastic_plate,塑料板,sa_core:plastic_plate,2,30%,1级,120,plastic_chair_red
+sa_decor装饰,plastic_chair_white,plastic_chair_white,sa_core:plastic_plate,塑料板,sa_core:plastic_plate,2,30%,1级,120,plastic_chair_white
+sa_decor装饰,plastic_table_red,plastic_table_red,sa_core:plastic_plate,塑料板,sa_core:plastic_plate,3,50%,2级,140,plastic_table_red
+sa_decor装饰,plastic_table_white,plastic_table_white,sa_core:plastic_plate,塑料板,sa_core:plastic_plate,3,50%,2级,140,plastic_table_white
+sa_decor装饰,tire_block,tire_block,sa_core:rubber,rubber,sa_core:rubber,1,30%,1级,120,tire_block
+sa_decor装饰,tire_block_stack2,tire_block_stack2,sa_core:rubber,rubber,sa_core:rubber,2,30%,1级,150,tire_block_stack2
+sa_decor装饰,tire_block_stack2v,tire_block_stack2v,sa_core:rubber,rubber,sa_core:rubber,2,30%,1级,150,tire_block_stack2v
+sa_decor装饰,tire_block_stack3,tire_block_stack3,sa_core:rubber,rubber,sa_core:rubber,3,50%,2级,180,tire_block_stack3
+sa_decor装饰,tire_block_stack3v,tire_block_stack3v,sa_core:rubber,rubber,sa_core:rubber,3,50%,2级,180,tire_block_stack3v
+sa_decor装饰,air_conditioner,空调,sa_core:electric_scrap,电子废料,电子废料,2,30%,1级,200,air_conditioner
+sa_decor装饰,black_telephone,black_telephone,sa_core:electric_scrap,电子废料,电子废料,1,30%,1级,120,black_telephone
+sa_decor装饰,broken_old_computer,broken_old_computer,sa_core:electric_scrap,电子废料,电子废料,1,30%,1级,140,broken_old_computer
+sa_decor装饰,cash_register_machine,cash_register_machine,sa_core:electric_scrap,电子废料,电子废料,1,30%,1级,140,cash_register_machine
+sa_decor装饰,electrical_box,electrical_box,sa_core:electric_scrap,电子废料,电子废料,2,30%,1级,200,electrical_box
+sa_decor装饰,electrical_outlet,electrical_outlet,sa_core:electric_scrap,电子废料,电子废料,1,30%,1级,100,electrical_outlet
+sa_decor装饰,freezer,freezer,sa_core:electric_scrap,电子废料,电子废料,1,30%,1级,180,freezer
+sa_decor装饰,fridge,冰箱,sa_core:electric_scrap,电子废料,电子废料,1,30%,1级,180,fridge
+sa_decor装饰,fuel_pump,fuel_pump,sa_core:electric_scrap,电子废料,电子废料,1,30%,1级,200,fuel_pump
+sa_decor装饰,fuse_box,fuse_box,sa_core:electric_scrap,电子废料,电子废料,2,30%,1级,180,fuse_box
+sa_decor装饰,light_switch,light_switch,sa_core:electric_scrap,电子废料,电子废料,1,30%,1级,100,light_switch
+sa_decor装饰,microwave,微波炉,sa_core:electric_scrap,电子废料,电子废料,1,30%,1级,150,microwave
+sa_decor装饰,military_radio,military_radio,sa_core:electric_scrap,电子废料,电子废料,2,30%,1级,160,military_radio
+sa_decor装饰,old_computer,old_computer,sa_core:electric_scrap,电子废料,电子废料,2,30%,1级,180,old_computer
+sa_decor装饰,pc,pc,sa_core:electric_scrap,电子废料,电子废料,2,30%,1级,180,pc
+sa_decor装饰,pc_broken,pc_broken,sa_core:electric_scrap,电子废料,电子废料,1,30%,1级,140,pc_broken
+sa_decor装饰,post_transformer,post_transformer,sa_core:electric_scrap,电子废料,电子废料,4,50%,2级,240,post_transformer
+sa_decor装饰,radio,收音机,sa_core:electric_scrap,电子废料,电子废料,1,30%,1级,130,radio
+sa_decor装饰,refrigerator,冰箱,sa_core:electric_scrap,电子废料,电子废料,1,30%,1级,180,refrigerator
+sa_decor装饰,smart_tv,smart_tv,sa_core:electric_scrap,电子废料,电子废料,2,30%,1级,180,smart_tv
+sa_decor装饰,smart_tv_broken,smart_tv_broken,sa_core:electric_scrap,电子废料,电子废料,1,30%,1级,140,smart_tv_broken
+sa_decor装饰,stove,stove,sa_core:electric_scrap,电子废料,电子废料,1,30%,1级,160,stove
+sa_decor装饰,stove_green,stove_green,sa_core:electric_scrap,电子废料,电子废料,1,30%,1级,160,stove_green
+sa_decor装饰,stove_red,stove_red,sa_core:electric_scrap,电子废料,电子废料,1,30%,1级,160,stove_red
+sa_decor装饰,tv,电视,sa_core:electric_scrap,电子废料,电子废料,2,30%,1级,160,tv
+sa_decor装饰,tv_broken,tv_broken,sa_core:electric_scrap,电子废料,电子废料,1,30%,1级,120,tv_broken
+sa_decor装饰,vending_machine,自动售货机,sa_core:electric_scrap,电子废料,电子废料,1,30%,1级,200,vending_machine
+sa_decor装饰,white_telephone,white_telephone,sa_core:electric_scrap,电子废料,电子废料,1,30%,1级,120,white_telephone
+sa_decor装饰,wire_connector,电线连接器,sa_core:electric_scrap,电子废料,电子废料,1,30%,1级,100,wire_connector
+sa_decor装饰,ammo_box,弹药箱,sa_core:metal_scrap,金属废料,金属废料,3,50%,2级,140,ammo_box
+sa_decor装饰,big_metal_locker,big_metal_locker,sa_core:metal_scrap,金属废料,金属废料,7,100%,直接满级领奖,190,big_metal_locker
+sa_decor装饰,big_military_crate,big_military_crate,sa_core:metal_scrap,金属废料,金属废料,10,100%,直接满级领奖,220,big_military_crate
+sa_decor装饰,dumpster,dumpster,sa_core:metal_scrap,金属废料,金属废料,6,70%,3级,200,dumpster
+sa_decor装饰,dumpster_blue,dumpster_blue,sa_core:metal_scrap,金属废料,金属废料,6,70%,3级,200,dumpster_blue
+sa_decor装饰,folding_chair_blue,folding_chair_blue,sa_core:metal_scrap,金属废料,金属废料,2,30%,1级,140,folding_chair_blue
+sa_decor装饰,folding_chair_green,folding_chair_green,sa_core:metal_scrap,金属废料,金属废料,2,30%,1级,140,folding_chair_green
+sa_decor装饰,gun_cabinet,gun_cabinet,sa_core:metal_scrap,金属废料,金属废料,6,70%,3级,180,gun_cabinet
+sa_decor装饰,locker,储物柜,sa_core:metal_scrap,金属废料,金属废料,4,50%,2级,160,locker
+sa_decor装饰,locker_gray,locker_gray,sa_core:metal_scrap,金属废料,金属废料,4,50%,2级,160,locker_gray
+sa_decor装饰,locker_green,locker_green,sa_core:metal_scrap,金属废料,金属废料,4,50%,2级,160,locker_green
+sa_decor装饰,locker_red,locker_red,sa_core:metal_scrap,金属废料,金属废料,4,50%,2级,160,locker_red
+sa_decor装饰,metal_rack,metal_rack,sa_core:metal_scrap,金属废料,金属废料,4,50%,2级,160,metal_rack
+sa_decor装饰,military_crate,military_crate,sa_core:metal_scrap,金属废料,金属废料,6,70%,3级,180,military_crate
+sa_decor装饰,office_chair,office_chair,sa_core:metal_scrap,金属废料,金属废料,3,50%,2级,160,office_chair
+sa_decor装饰,office_chair_blue,office_chair_blue,sa_core:metal_scrap,金属废料,金属废料,3,50%,2级,160,office_chair_blue
+sa_decor装饰,office_chair_brown,office_chair_brown,sa_core:metal_scrap,金属废料,金属废料,3,50%,2级,160,office_chair_brown
+sa_decor装饰,office_chair_green,office_chair_green,sa_core:metal_scrap,金属废料,金属废料,3,50%,2级,160,office_chair_green
+sa_decor装饰,office_chair_red,office_chair_red,sa_core:metal_scrap,金属废料,金属废料,3,50%,2级,160,office_chair_red
+sa_decor装饰,safe,保险箱,sa_core:metal_scrap,金属废料,金属废料,12,100%,直接满级领奖,240,safe
+sa_decor装饰,small_gun_cabinet,small_gun_cabinet,sa_core:metal_scrap,金属废料,金属废料,4,50%,2级,160,small_gun_cabinet
+sa_decor装饰,wall_metal_rack,wall_metal_rack,sa_core:metal_scrap,金属废料,金属废料,3,50%,2级,150,wall_metal_rack
diff --git a/回收箱配方表.md b/回收箱配方表.md
new file mode 100644
index 0000000..b61aa86
--- /dev/null
+++ b/回收箱配方表.md
@@ -0,0 +1,181 @@
+# 回收箱(sa_core:salvage_bin)完整配方表
+
+机制:投料→按成功率即时判定,满8级可领取;成功率/进度由配方**高级产物**决定。
+
+
+## sa_core核心(98条)
+
+| 可回收物 | 可回收物(中文) | 高级产物 | 高级产物(中文) | 回收类型 | 每次产出数量 | 成功率 | 进度 |
+|---|---|---|---|---|---|---|---|
+| ancient_debris | 远古残骸 | minecraft:netherite_scrap | netherite_scrap | 下界合金碎片 | 1 | 100% | 直接满级领奖 |
+| netherite_axe | 下界合金斧 | sa_core:netherite_nugget | 下界合金粒 | 下界合金粒 | 3 | 50% | 2级 |
+| netherite_boots | 下界合金靴子 | sa_core:netherite_nugget | 下界合金粒 | 下界合金粒 | 3 | 50% | 2级 |
+| netherite_chestplate | 下界合金胸甲 | sa_core:netherite_nugget | 下界合金粒 | 下界合金粒 | 3 | 50% | 2级 |
+| netherite_helmet | 下界合金头盔 | sa_core:netherite_nugget | 下界合金粒 | 下界合金粒 | 3 | 50% | 2级 |
+| netherite_hoe | 下界合金锄 | sa_core:netherite_nugget | 下界合金粒 | 下界合金粒 | 3 | 50% | 2级 |
+| netherite_leggings | 下界合金护腿 | sa_core:netherite_nugget | 下界合金粒 | 下界合金粒 | 3 | 50% | 2级 |
+| netherite_pickaxe | 下界合金镐 | sa_core:netherite_nugget | 下界合金粒 | 下界合金粒 | 3 | 50% | 2级 |
+| netherite_shovel | 下界合金锹 | sa_core:netherite_nugget | 下界合金粒 | 下界合金粒 | 3 | 50% | 2级 |
+| netherite_sword | 下界合金剑 | sa_core:netherite_nugget | 下界合金粒 | 下界合金粒 | 3 | 50% | 2级 |
+| plastic_plate | 塑料板 | sa_core:plastic | 塑料 | 塑料 | 1 | 30% | 1级 |
+| can_opener | 开罐器 | sa_core:scrap_nugget | 废料粒 | 废料粒 | 2 | 30% | 1级 |
+| dented_can | 凹陷的罐子 | sa_core:scrap_nugget | 废料粒 | 废料粒 | 2 | 30% | 1级 |
+| empty_can | 空罐 | sa_core:scrap_nugget | 废料粒 | 废料粒 | 2 | 30% | 1级 |
+| tin_can | 锡罐 | sa_core:scrap_nugget | 废料粒 | 废料粒 | 2 | 30% | 1级 |
+| gravel | 沙砾 | minecraft:flint | 燧石 | 燧石 | 1 | 50% | 2级 |
+| battery | 电池 | sa_core:electric_scrap | 电子废料 | 电子废料 | 2 | 30% | 1级 |
+| camera | 相机 | sa_core:electric_scrap | 电子废料 | 电子废料 | 4 | 50% | 2级 |
+| cellphone | 手机 | sa_core:electric_scrap | 电子废料 | 电子废料 | 6 | 70% | 3级 |
+| comparator | 红石比较器 | sa_core:electric_scrap | 电子废料 | 电子废料 | 3 | 50% | 2级 |
+| compass | 指南针 | sa_core:electric_scrap | 电子废料 | 电子废料 | 2 | 30% | 1级 |
+| observer | 侦测器 | sa_core:electric_scrap | 电子废料 | 电子废料 | 2 | 30% | 1级 |
+| redstone_lamp | 红石灯 | sa_core:electric_scrap | 电子废料 | 电子废料 | 2 | 30% | 1级 |
+| repeater | 红石中继器 | sa_core:electric_scrap | 电子废料 | 电子废料 | 2 | 30% | 1级 |
+| book | 书 | minecraft:leather | 皮革 | 皮革 | 1 | 50% | 2级 |
+| item_frame | 物品展示框 | minecraft:leather | 皮革 | 皮革 | 1 | 50% | 2级 |
+| leather_boots | 皮革靴子 | minecraft:leather | 皮革 | 皮革 | 2 | 50% | 2级 |
+| leather_chestplate | 皮革胸甲 | minecraft:leather | 皮革 | 皮革 | 4 | 50% | 2级 |
+| leather_helmet | 皮革头盔 | minecraft:leather | 皮革 | 皮革 | 2 | 50% | 2级 |
+| leather_horse_armor | 皮革马铠 | minecraft:leather | 皮革 | 皮革 | 4 | 50% | 2级 |
+| leather_leggings | 皮革护腿 | minecraft:leather | 皮革 | 皮革 | 3 | 50% | 2级 |
+| rotten_flesh | 腐肉 | minecraft:leather | 皮革 | 皮革 | 1 | 50% | 2级 |
+| saddle | 鞍 | minecraft:leather | 皮革 | 皮革 | 3 | 50% | 2级 |
+| bow | 弓 | minecraft:string | 线 | 线 | 2 | 70% | 3级 |
+| cobweb | 蜘蛛网 | minecraft:string | 线 | 线 | 5 | 70% | 3级 |
+| crossbow | 弩 | minecraft:string | 线 | 线 | 2 | 70% | 3级 |
+| fishing_rod | 钓鱼竿 | minecraft:string | 线 | 线 | 1 | 70% | 3级 |
+| minecraft:wool | minecraft:wool | minecraft:string | 线 | 线 | 3 | 70% | 3级 |
+| activator_rail | 激活铁轨 | sa_core:metal_scrap | 金属废料 | 金属废料 | 2 | 30% | 1级 |
+| anvil | 铁砧 | sa_core:metal_scrap | 金属废料 | 金属废料 | 62 | 100% | 直接满级领奖 |
+| blast_furnace | 高炉 | sa_core:metal_scrap | 金属废料 | 金属废料 | 10 | 100% | 直接满级领奖 |
+| bucket | 桶 | sa_core:metal_scrap | 金属废料 | 金属废料 | 6 | 70% | 3级 |
+| cauldron | 炼药锅 | sa_core:metal_scrap | 金属废料 | 金属废料 | 14 | 100% | 直接满级领奖 |
+| chain | 锁链 | sa_core:metal_scrap | 金属废料 | 金属废料 | 2 | 30% | 1级 |
+| chainmail_boots | chainmail_boots | sa_core:metal_scrap | 金属废料 | 金属废料 | 4 | 50% | 2级 |
+| chainmail_chestplate | chainmail_chestplate | sa_core:metal_scrap | 金属废料 | 金属废料 | 8 | 100% | 直接满级领奖 |
+| chainmail_helmet | chainmail_helmet | sa_core:metal_scrap | 金属废料 | 金属废料 | 5 | 70% | 3级 |
+| chainmail_leggings | chainmail_leggings | sa_core:metal_scrap | 金属废料 | 金属废料 | 7 | 100% | 直接满级领奖 |
+| chipped_anvil | 开裂的铁砧 | sa_core:metal_scrap | 金属废料 | 金属废料 | 45 | 100% | 直接满级领奖 |
+| damaged_anvil | 损坏的铁砧 | sa_core:metal_scrap | 金属废料 | 金属废料 | 30 | 100% | 直接满级领奖 |
+| detector_rail | 探测铁轨 | sa_core:metal_scrap | 金属废料 | 金属废料 | 2 | 30% | 1级 |
+| flint_and_steel | 打火石 | sa_core:metal_scrap | 金属废料 | 金属废料 | 2 | 30% | 1级 |
+| heavy_weighted_pressure_plate | heavy_weighted_pressure_plate | sa_core:metal_scrap | 金属废料 | 金属废料 | 4 | 50% | 2级 |
+| hopper | hopper | sa_core:metal_scrap | 金属废料 | 金属废料 | 10 | 100% | 直接满级领奖 |
+| iron_axe | 铁斧 | sa_core:metal_scrap | 金属废料 | 金属废料 | 6 | 70% | 3级 |
+| iron_bars | iron_bars | sa_core:metal_scrap | 金属废料 | 金属废料 | 1 | 30% | 1级 |
+| iron_block | 铁块 | sa_core:metal_scrap | 金属废料 | 金属废料 | 18 | 100% | 直接满级领奖 |
+| iron_boots | 铁靴子 | sa_core:metal_scrap | 金属废料 | 金属废料 | 8 | 100% | 直接满级领奖 |
+| iron_chestplate | 铁胸甲 | sa_core:metal_scrap | 金属废料 | 金属废料 | 16 | 100% | 直接满级领奖 |
+| iron_door | iron_door | sa_core:metal_scrap | 金属废料 | 金属废料 | 4 | 50% | 2级 |
+| iron_helmet | 铁头盔 | sa_core:metal_scrap | 金属废料 | 金属废料 | 10 | 100% | 直接满级领奖 |
+| iron_hoe | 铁锄 | sa_core:metal_scrap | 金属废料 | 金属废料 | 4 | 50% | 2级 |
+| iron_ingot | 铁锭 | sa_core:metal_scrap | 金属废料 | 金属废料 | 2 | 30% | 1级 |
+| iron_leggings | 铁护腿 | sa_core:metal_scrap | 金属废料 | 金属废料 | 14 | 100% | 直接满级领奖 |
+| iron_pickaxe | 铁镐 | sa_core:metal_scrap | 金属废料 | 金属废料 | 6 | 70% | 3级 |
+| iron_shovel | 铁锹 | sa_core:metal_scrap | 金属废料 | 金属废料 | 2 | 30% | 1级 |
+| iron_sword | 铁剑 | sa_core:metal_scrap | 金属废料 | 金属废料 | 4 | 50% | 2级 |
+| iron_trapdoor | 铁活板门 | sa_core:metal_scrap | 金属废料 | 金属废料 | 8 | 100% | 直接满级领奖 |
+| metal_pipe | 金属管 | sa_core:metal_scrap | 金属废料 | 金属废料 | 2 | 30% | 1级 |
+| minecart | 矿车 | sa_core:metal_scrap | 金属废料 | 金属废料 | 10 | 100% | 直接满级领奖 |
+| pliers | 钳子 | sa_core:metal_scrap | 金属废料 | 金属废料 | 2 | 30% | 1级 |
+| rail | 铁轨 | sa_core:metal_scrap | 金属废料 | 金属废料 | 1 | 30% | 1级 |
+| saw | saw | sa_core:metal_scrap | 金属废料 | 金属废料 | 4 | 50% | 2级 |
+| saw_blade | 锯片 | sa_core:metal_scrap | 金属废料 | 金属废料 | 4 | 50% | 2级 |
+| scissor | scissor | sa_core:metal_scrap | 金属废料 | 金属废料 | 2 | 30% | 1级 |
+| shears | 剪刀 | sa_core:metal_scrap | 金属废料 | 金属废料 | 4 | 50% | 2级 |
+| smithing_table | 锻造台 | sa_core:metal_scrap | 金属废料 | 金属废料 | 4 | 50% | 2级 |
+| classic_watch | 经典手表 | minecraft:gold_nugget | 金粒 | 金粒 | 14 | 100% | 直接满级领奖 |
+| clock | 时钟 | minecraft:gold_nugget | 金粒 | 金粒 | 14 | 100% | 直接满级领奖 |
+| golden_axe | 金斧 | minecraft:gold_nugget | 金粒 | 金粒 | 10 | 100% | 直接满级领奖 |
+| golden_boots | 金靴子 | minecraft:gold_nugget | 金粒 | 金粒 | 14 | 100% | 直接满级领奖 |
+| golden_chestplate | 金胸甲 | minecraft:gold_nugget | 金粒 | 金粒 | 28 | 100% | 直接满级领奖 |
+| golden_helmet | 金头盔 | minecraft:gold_nugget | 金粒 | 金粒 | 18 | 100% | 直接满级领奖 |
+| golden_hoe | 金锄 | minecraft:gold_nugget | 金粒 | 金粒 | 7 | 100% | 直接满级领奖 |
+| golden_leggings | 金护腿 | minecraft:gold_nugget | 金粒 | 金粒 | 25 | 100% | 直接满级领奖 |
+| golden_pickaxe | 金镐 | minecraft:gold_nugget | 金粒 | 金粒 | 10 | 100% | 直接满级领奖 |
+| golden_shovel | 金锹 | minecraft:gold_nugget | 金粒 | 金粒 | 3 | 50% | 2级 |
+| golden_sword | 金剑 | minecraft:gold_nugget | 金粒 | 金粒 | 7 | 100% | 直接满级领奖 |
+| powered_rail | 充能铁轨 | minecraft:gold_nugget | 金粒 | 金粒 | 2 | 30% | 1级 |
+| diamond_axe | 钻石斧 | sa_core:diamond_nugget | 钻石粒 | 钻石粒 | 10 | 100% | 直接满级领奖 |
+| diamond_boots | 钻石靴子 | sa_core:diamond_nugget | 钻石粒 | 钻石粒 | 14 | 100% | 直接满级领奖 |
+| diamond_chestplate | 钻石胸甲 | sa_core:diamond_nugget | 钻石粒 | 钻石粒 | 28 | 100% | 直接满级领奖 |
+| diamond_helmet | 钻石头盔 | sa_core:diamond_nugget | 钻石粒 | 钻石粒 | 18 | 100% | 直接满级领奖 |
+| diamond_hoe | 钻石锄 | sa_core:diamond_nugget | 钻石粒 | 钻石粒 | 7 | 100% | 直接满级领奖 |
+| diamond_leggings | 钻石护腿 | sa_core:diamond_nugget | 钻石粒 | 钻石粒 | 25 | 100% | 直接满级领奖 |
+| diamond_pickaxe | 钻石镐 | sa_core:diamond_nugget | 钻石粒 | 钻石粒 | 10 | 100% | 直接满级领奖 |
+| diamond_shovel | 钻石锹 | sa_core:diamond_nugget | 钻石粒 | 钻石粒 | 3 | 50% | 2级 |
+| diamond_sword | 钻石剑 | sa_core:diamond_nugget | 钻石粒 | 钻石粒 | 7 | 100% | 直接满级领奖 |
+
+## sa_decor装饰(65条)
+
+| 可回收物 | 可回收物(中文) | 高级产物 | 高级产物(中文) | 回收类型 | 每次产出数量 | 成功率 | 进度 |
+|---|---|---|---|---|---|---|---|
+| attach_case | attach_case | sa_core:plastic_plate | 塑料板 | sa_core:plastic_plate | 2 | 30% | 1级 |
+| gun_case | 枪盒 | sa_core:plastic_plate | 塑料板 | sa_core:plastic_plate | 2 | 30% | 1级 |
+| gun_case_green | gun_case_green | sa_core:plastic_plate | 塑料板 | sa_core:plastic_plate | 2 | 30% | 1级 |
+| handgun_case | handgun_case | sa_core:plastic_plate | 塑料板 | sa_core:plastic_plate | 2 | 30% | 1级 |
+| handgun_case_green | handgun_case_green | sa_core:plastic_plate | 塑料板 | sa_core:plastic_plate | 2 | 30% | 1级 |
+| plastic_chair_red | plastic_chair_red | sa_core:plastic_plate | 塑料板 | sa_core:plastic_plate | 2 | 30% | 1级 |
+| plastic_chair_white | plastic_chair_white | sa_core:plastic_plate | 塑料板 | sa_core:plastic_plate | 2 | 30% | 1级 |
+| plastic_table_red | plastic_table_red | sa_core:plastic_plate | 塑料板 | sa_core:plastic_plate | 3 | 50% | 2级 |
+| plastic_table_white | plastic_table_white | sa_core:plastic_plate | 塑料板 | sa_core:plastic_plate | 3 | 50% | 2级 |
+| tire_block | tire_block | sa_core:rubber | rubber | sa_core:rubber | 1 | 30% | 1级 |
+| tire_block_stack2 | tire_block_stack2 | sa_core:rubber | rubber | sa_core:rubber | 2 | 30% | 1级 |
+| tire_block_stack2v | tire_block_stack2v | sa_core:rubber | rubber | sa_core:rubber | 2 | 30% | 1级 |
+| tire_block_stack3 | tire_block_stack3 | sa_core:rubber | rubber | sa_core:rubber | 3 | 50% | 2级 |
+| tire_block_stack3v | tire_block_stack3v | sa_core:rubber | rubber | sa_core:rubber | 3 | 50% | 2级 |
+| air_conditioner | 空调 | sa_core:electric_scrap | 电子废料 | 电子废料 | 2 | 30% | 1级 |
+| black_telephone | black_telephone | sa_core:electric_scrap | 电子废料 | 电子废料 | 1 | 30% | 1级 |
+| broken_old_computer | broken_old_computer | sa_core:electric_scrap | 电子废料 | 电子废料 | 1 | 30% | 1级 |
+| cash_register_machine | cash_register_machine | sa_core:electric_scrap | 电子废料 | 电子废料 | 1 | 30% | 1级 |
+| electrical_box | electrical_box | sa_core:electric_scrap | 电子废料 | 电子废料 | 2 | 30% | 1级 |
+| electrical_outlet | electrical_outlet | sa_core:electric_scrap | 电子废料 | 电子废料 | 1 | 30% | 1级 |
+| freezer | freezer | sa_core:electric_scrap | 电子废料 | 电子废料 | 1 | 30% | 1级 |
+| fridge | 冰箱 | sa_core:electric_scrap | 电子废料 | 电子废料 | 1 | 30% | 1级 |
+| fuel_pump | fuel_pump | sa_core:electric_scrap | 电子废料 | 电子废料 | 1 | 30% | 1级 |
+| fuse_box | fuse_box | sa_core:electric_scrap | 电子废料 | 电子废料 | 2 | 30% | 1级 |
+| light_switch | light_switch | sa_core:electric_scrap | 电子废料 | 电子废料 | 1 | 30% | 1级 |
+| microwave | 微波炉 | sa_core:electric_scrap | 电子废料 | 电子废料 | 1 | 30% | 1级 |
+| military_radio | military_radio | sa_core:electric_scrap | 电子废料 | 电子废料 | 2 | 30% | 1级 |
+| old_computer | old_computer | sa_core:electric_scrap | 电子废料 | 电子废料 | 2 | 30% | 1级 |
+| pc | pc | sa_core:electric_scrap | 电子废料 | 电子废料 | 2 | 30% | 1级 |
+| pc_broken | pc_broken | sa_core:electric_scrap | 电子废料 | 电子废料 | 1 | 30% | 1级 |
+| post_transformer | post_transformer | sa_core:electric_scrap | 电子废料 | 电子废料 | 4 | 50% | 2级 |
+| radio | 收音机 | sa_core:electric_scrap | 电子废料 | 电子废料 | 1 | 30% | 1级 |
+| refrigerator | 冰箱 | sa_core:electric_scrap | 电子废料 | 电子废料 | 1 | 30% | 1级 |
+| smart_tv | smart_tv | sa_core:electric_scrap | 电子废料 | 电子废料 | 2 | 30% | 1级 |
+| smart_tv_broken | smart_tv_broken | sa_core:electric_scrap | 电子废料 | 电子废料 | 1 | 30% | 1级 |
+| stove | stove | sa_core:electric_scrap | 电子废料 | 电子废料 | 1 | 30% | 1级 |
+| stove_green | stove_green | sa_core:electric_scrap | 电子废料 | 电子废料 | 1 | 30% | 1级 |
+| stove_red | stove_red | sa_core:electric_scrap | 电子废料 | 电子废料 | 1 | 30% | 1级 |
+| tv | 电视 | sa_core:electric_scrap | 电子废料 | 电子废料 | 2 | 30% | 1级 |
+| tv_broken | tv_broken | sa_core:electric_scrap | 电子废料 | 电子废料 | 1 | 30% | 1级 |
+| vending_machine | 自动售货机 | sa_core:electric_scrap | 电子废料 | 电子废料 | 1 | 30% | 1级 |
+| white_telephone | white_telephone | sa_core:electric_scrap | 电子废料 | 电子废料 | 1 | 30% | 1级 |
+| wire_connector | 电线连接器 | sa_core:electric_scrap | 电子废料 | 电子废料 | 1 | 30% | 1级 |
+| ammo_box | 弹药箱 | sa_core:metal_scrap | 金属废料 | 金属废料 | 3 | 50% | 2级 |
+| big_metal_locker | big_metal_locker | sa_core:metal_scrap | 金属废料 | 金属废料 | 7 | 100% | 直接满级领奖 |
+| big_military_crate | big_military_crate | sa_core:metal_scrap | 金属废料 | 金属废料 | 10 | 100% | 直接满级领奖 |
+| dumpster | dumpster | sa_core:metal_scrap | 金属废料 | 金属废料 | 6 | 70% | 3级 |
+| dumpster_blue | dumpster_blue | sa_core:metal_scrap | 金属废料 | 金属废料 | 6 | 70% | 3级 |
+| folding_chair_blue | folding_chair_blue | sa_core:metal_scrap | 金属废料 | 金属废料 | 2 | 30% | 1级 |
+| folding_chair_green | folding_chair_green | sa_core:metal_scrap | 金属废料 | 金属废料 | 2 | 30% | 1级 |
+| gun_cabinet | gun_cabinet | sa_core:metal_scrap | 金属废料 | 金属废料 | 6 | 70% | 3级 |
+| locker | 储物柜 | sa_core:metal_scrap | 金属废料 | 金属废料 | 4 | 50% | 2级 |
+| locker_gray | locker_gray | sa_core:metal_scrap | 金属废料 | 金属废料 | 4 | 50% | 2级 |
+| locker_green | locker_green | sa_core:metal_scrap | 金属废料 | 金属废料 | 4 | 50% | 2级 |
+| locker_red | locker_red | sa_core:metal_scrap | 金属废料 | 金属废料 | 4 | 50% | 2级 |
+| metal_rack | metal_rack | sa_core:metal_scrap | 金属废料 | 金属废料 | 4 | 50% | 2级 |
+| military_crate | military_crate | sa_core:metal_scrap | 金属废料 | 金属废料 | 6 | 70% | 3级 |
+| office_chair | office_chair | sa_core:metal_scrap | 金属废料 | 金属废料 | 3 | 50% | 2级 |
+| office_chair_blue | office_chair_blue | sa_core:metal_scrap | 金属废料 | 金属废料 | 3 | 50% | 2级 |
+| office_chair_brown | office_chair_brown | sa_core:metal_scrap | 金属废料 | 金属废料 | 3 | 50% | 2级 |
+| office_chair_green | office_chair_green | sa_core:metal_scrap | 金属废料 | 金属废料 | 3 | 50% | 2级 |
+| office_chair_red | office_chair_red | sa_core:metal_scrap | 金属废料 | 金属废料 | 3 | 50% | 2级 |
+| safe | 保险箱 | sa_core:metal_scrap | 金属废料 | 金属废料 | 12 | 100% | 直接满级领奖 |
+| small_gun_cabinet | small_gun_cabinet | sa_core:metal_scrap | 金属废料 | 金属废料 | 4 | 50% | 2级 |
+| wall_metal_rack | wall_metal_rack | sa_core:metal_scrap | 金属废料 | 金属废料 | 3 | 50% | 2级 |
+
+## 成功率换算规则
+- netherite_scrap → 100%(直接满级领奖);string → 70%,3级;leather / flint → 50%,2级
+- 其他按产物数量 value=(count+1)//2 限制1–4:1→30%·1级,2→50%·2级,3→70%·3级,4→100%·满级
diff --git a/回收箱配方表.xlsx b/回收箱配方表.xlsx
new file mode 100644
index 0000000..17cf322
Binary files /dev/null and b/回收箱配方表.xlsx differ
diff --git a/幸存者军火库-合成配方表.md b/幸存者军火库-合成配方表.md
new file mode 100644
index 0000000..ed8fd8f
--- /dev/null
+++ b/幸存者军火库-合成配方表.md
@@ -0,0 +1,114 @@
+# 幸存者军火库-合成配方表
+
+## sa_core 原版合成
+
+| 类型 | 产出/项目 | 配方/规则 | 备注 |
+|---|---|---|---|
+| 原版合成 | 螺丝刀 Screwdriver | 废料粒+金属废料+橡胶 / 铁粒+铁锭+橡胶 | 两个版本均可 |
+| 原版合成 | 金属板 Metal Sheet | 羊角锤+铁锭 | 无合成格,锤击 |
+| 原版合成 | 小金属板×4 | 金属板×1 | 拆解 |
+| 原版合成 | 金属板 | 小金属板×4 | 拼合 |
+| 原版合成 | 金属管 | 金属废料×3 | 竖排 |
+| 原版合成 | 螺丝×4 | 铁粒+铁锭+钳子 | |
+| 原版合成 | 回形针×2 | 废料粒×2 | |
+| 原版合成 | 回形针×4 | 铁粒×2 | 铁版 |
+| 原版合成 | 绝缘铜线×4 | 铜线×8 + 橡胶×1(3x3 边框) | |
+| 原版合成 | 碎木料 | 任意木板×2 | |
+| 原版合成 | 胶粘带 | 纸+史莱姆球 | |
+| 原版合成 | 钉子盒 | 纸板×2+钉子+胶粘带 | 供给容器 |
+| 原版合成 | 螺丝盒 | 纸板×2+螺丝+胶粘带 | 供给容器 |
+| 原版合成 | 回形针盒 | 纸板×2+回形针+胶粘带 | 供给容器 |
+| 原版合成 | 火药瓶 | 空玻璃瓶+火药+胶粘带 | 供给容器 |
+| 原版合成 | 回收箱 | 金属废料×4 + 碎木料×3 | 3x3 字形 |
+| 原版合成 | 固体燃料发电机 | 金属板×2+绝缘铜线+电子废料×2+熔炉+铁块×2+红石 | 高耗材 |
+
+## sa_combat 原版合成格
+
+| 类型 | 产出/项目 | 配方/规则 | 备注 |
+|---|---|---|---|
+| 原版合成 | 军火台 | 金属板×2+螺丝+工作台+铁锭×3 | 合成格 3x3 |
+| 原版合成 | 碎玻璃瓶 | 空玻璃瓶×1 | 无合成格 |
+| 原版合成 | 木板 Plank | 碎木料×2 | |
+| 原版合成 | 钉木板 | 碎木料×2+钉子×4+胶带 | |
+| 原版合成 | 木矛 | 碎木料×2+木棍×2+绳索 | |
+| 原版合成 | 厨刀矛 | 碎木料×2+木棍×2+铁锭+小金属板+绳索+胶带 | |
+| 原版合成 | 废料刀矛 | 碎木料×2+木棍×2+小金属板×2+电线+胶带 | |
+| 原版合成 | 碎玻璃矛 | 碎木料×2+木棍×2+空玻璃瓶+布料+胶带 | |
+| 原版合成 | 擀面杖 | 橡木木板×2+木棍×2 | |
+| 原版合成 | 停止牌 Stop Sign | sa_decor 停止牌 tag | 装饰兼容 |
+| 原版合成 | 停止牌盾 | sa_decor 停止牌 tag+皮革条×2+橡胶+胶带 | 装饰兼容 |
+
+## sa_combat 军火台-杂项
+
+| 类型 | 产出/项目 | 配方/规则 | 备注 |
+|---|---|---|---|
+| 军火台-杂项 | 武器零件×1 | 金属废料×12+小金属板×6+金属板×4+螺丝×16+电线×6+橡胶×4 | |
+| 军火台-杂项 | 简易弩箭×6 | 木棍×3+燧石×2+羽毛×2+线+废料粒×2 | |
+| 军火台-杂项 | 战术弩箭×6 | 木棍×3+铁粒×6+羽毛×2+凯夫拉线×2+小金属板×2 | |
+| 军火台-杂项 | 维修套件I | 武器零件×2+金属废料×8+小金属板×4+螺丝×10+胶带×3+布料×2+胶水 | |
+| 军火台-杂项 | 维修套件II | 武器零件×5+金属板×5+螺丝×14+橡胶×2+纤维织物×4+胶水 | |
+| 军火台-杂项 | 维修套件III | 武器零件×8+灰钢锭×5+金属板×6+螺丝×18+凯夫拉线×6+钻石粒×8 | |
+| 军火台-杂项 | 装甲板I | 武器零件×2+金属板×6+纤维织物×4+橡胶×3+螺丝×8+胶带×3 | |
+| 军火台-杂项 | 装甲板II | 武器零件×5+金属板×8+凯夫拉×6+纤维织物×4+橡胶×4+螺丝×12 | |
+| 军火台-杂项 | 装甲板III | 武器零件×8+灰钢锭×6+金属板×8+凯夫拉×10+钻石粒×8+下界合金粒×2+螺丝×16 | |
+| 军火台-杂项 | 遥控引爆器 | 电子废料×3+绝缘铜线×3+电池×2+中继器+红石×3+塑料板×2+螺丝×6 | |
+| 军火台-杂项 | 燃烧瓶 | 空玻璃瓶+酒精tag+布料+线 | 酒精饮品 tag |
+| 军火台-杂项 | 管状炸弹 | 金属管+火药×4+电线+胶带+红石 | |
+| 军火台-杂项 | 钉炸弹 | 金属管+火药×5+钉子×8+电线+胶带 | |
+| 军火台-杂项 | 破片手雷 | 武器零件×2+金属板×3+火药×8+红石×2+螺丝×4 | |
+| 军火台-杂项 | 燃烧手雷 | 武器零件×2+金属板×2+火药×4+烈焰粉×4+布料×2+红石×2 | |
+| 军火台-杂项 | 烟雾弹 | 武器零件+金属板×2+火药×3+木炭×4+糖×3+红石 | |
+| 军火台-杂项 | 废料头盔 | 金属废料×5+小金属板×3+布料×2+皮革条×2+胶带×2+螺丝×4 | |
+| 军火台-杂项 | 废料胸甲 | 金属废料×10+金属板×4+布料×3+皮革条×3+胶带×3+螺丝×8 | |
+| 军火台-杂项 | 废料护腿 | 金属废料×8+金属板×3+布料×3+皮革条×3+胶带×3+螺丝×6 | |
+| 军火台-杂项 | 废料靴 | 金属废料×4+橡胶×3+皮革条×3+胶带×2+螺丝×4 | |
+| 军火台-杂项 | 简易防化头罩 | 塑料×5+玻璃板×2+橡胶×2+纤维织物×2+胶带×3 | |
+| 军火台-杂项 | 简易防化服 | 塑料×10+橡胶×4+纤维织物×4+胶带×4+线×2 | |
+| 军火台-杂项 | 简易防化裤 | 塑料×8+橡胶×3+纤维织物×3+胶带×3 | |
+| 军火台-杂项 | 简易防化靴 | 塑料×4+橡胶×5+纤维织物×2+胶带×2 | |
+| 军火台-杂项 | 地雷 | 武器零件×3+重型测重压力板+金属板×6+火药×12+红石×3+电线×2+螺丝×10 | 需地雷蓝图 |
+| 军火台-杂项 | C4 | 武器零件×5+手机+火药×16+塑料板×6+绝缘铜线×4+电子废料×4+胶带×2+红石×4 | 需C4蓝图 |
+
+## sa_combat 军火台-改装(Modifier)
+
+| 类型 | 产出/项目 | 配方/规则 | 备注 |
+|---|---|---|---|
+| 军火台-改装 | 棒球棒: 电击套件/带刺/锯刃/握把胶带/强化 | 武器零件×3-4 + 对应材料 | 通用改装 |
+| 军火台-改装 | 铝棒: 砍刀头/尖刺 | 武器零件×3-4 + 对应材料 | |
+| 军火台-改装 | 水管: 小刀 | 武器零件×3 + 小金属板×3+铁锭×2+螺丝×6+胶带 | |
+| 军火台-改装 | 拳击手套: 刀刃 | 武器零件×4 + 小金属板×6+铁锭×3+螺丝×8+皮革条×3 | |
+| 军火台-改装 | 垃圾桶盖盾/废料盾/防暴盾/停止牌盾/井盖盾: 尖刺 | 武器零件×3 + 钉子×10-14+金属废料+螺丝×6-8 | |
+| 军火台-改装 | 战术弩: 望远镜/自动机构 | 武器零件×3-5 + 望远镜或中继器×2+电子废料+电池 | |
+| 军火台-改装 | 简易弩: 瞄准镜 | 武器零件×3 + 玻璃板×2+小金属板×2+螺丝×4+胶带 | |
+| 军火台-改装 | 钉枪: 枪托/消音器/扩容弹匣 | 武器零件×3-4 + 对应材料 | |
+| 军火台-改装 | 大锤: 榴弹 | 武器零件×4 + 火药×6+金属板×3+钉子×6+电线×2+螺丝×6 | |
+
+## sa_combat 军火台-升级(Upgrade)
+
+| 类型 | 产出/项目 | 配方/规则 | 备注 |
+|---|---|---|---|
+| 军火台-升级 | 伤害/攻速/暴击/攻击距离 4 条 | 每条 5 级,材料逐级递进(武器零件+灰钢锭/钻石粒/下界合金粒) | 仅棒球棒示范,规则通用 |
+
+## sa-decor 装饰工作台(自动配方系统)
+
+| 类型 | 产出/项目 | 配方/规则 | 备注 |
+|---|---|---|---|
+| 工作台 | STORAGE 存储类 | 金属板/螺丝 为主的容器配方;纸板箱用纸板、木制用木板+钉子、家电类用金属板+电子废料+绝缘铜线 | 约 60+ 方块 |
+| 工作台 | FUNCTIONAL 功能类 | 金属板/电子废料/绝缘铜线/红石 为主的电力与功能配方(灯、开关、电箱、车库门、消防栓等) | 约 80+ 方块 |
+| 工作台 | DECOR 装饰类 | 建材/家具/标牌/门 配方,按子类给料(木制用木板、金属用金属板、路面用砾石/混凝土/砖等) | 约 200+ 方块 |
+| 工作台 | MISC 杂项 | 金属废料×4+螺丝×4 兜底;交通锥、托盘堆叠特殊 | 少量 |
+| 工作台 | 附加规则 | 带颜色关键词自动加对应染料;用了螺丝/钉子/金属管/线材会自动附加对应工具(螺丝刀/羊角锤/扳手/钳子,耗耐久不消耗);产出数:围栏8、线材4、表面方块4、衍生形状2-4、屋顶顶板2 | |
+| 工作台 | 例外 | 以下方块不可在工作台合成:战利品专用(收银机/消防栓/冰箱/油泵/微波炉/变压器/炉灶/空投/售货机)、状态变体(破损/闪烁/熄灭)、换色变体、部分道具/围挡/锁/睡袋等 | |
+| 工作台 | 连接工具 | 塑料板×2+电子废料+红石×2+绝缘铜线+螺丝刀(耗耐久) | 唯一独立物品配方 |
+
+## sa-decor 原版合成
+
+| 类型 | 产出/项目 | 配方/规则 | 备注 |
+|---|---|---|---|
+| 原版合成 | 染色换色配方 | 任意同族方块 + 对应染料 → 换色变体 | 木椅/办公椅/折叠椅/塑料桌椅/军床/台灯/电话/垃圾箱/冰箱/储物柜/炉灶等 |
+| 原版合成 | 抛光混凝土台阶×6 | 抛光混凝土×3 | +切石机×2 |
+| 原版合成 | 抛光混凝土楼梯×4 | 抛光混凝土×6 | +切石机×1 |
+| 原版合成 | 开裂抛光混凝土台阶/楼梯 | 开裂抛光混凝土 | 同上 |
+| 原版合成 | 人行道混凝土台阶 | 人行道混凝土×3 | 切石机×2 |
+
+> 武器合成配方见《幸存者军火库武器数据》;回收机/回收箱配方见《回收箱配方表》;食物制作见《幸存者军火库食物表》。
\ No newline at end of file
diff --git a/幸存者军火库-合成配方表.xlsx b/幸存者军火库-合成配方表.xlsx
new file mode 100644
index 0000000..444b02e
Binary files /dev/null and b/幸存者军火库-合成配方表.xlsx differ
diff --git a/幸存者军火库-实体效果流体表.md b/幸存者军火库-实体效果流体表.md
new file mode 100644
index 0000000..36d0eab
--- /dev/null
+++ b/幸存者军火库-实体效果流体表.md
@@ -0,0 +1,82 @@
+# 幸存者军火库-实体效果流体表
+
+共 56 条。
+
+> 含实体、方块实体(BE)、状态效果、流体、粒子、GUI 菜单。sa-decor 方块实体为移植重点(网易侧需逐块配置 block_entity)。
+
+| 类型 | 裸ID | 英文名 | 中文名 | 备注 | 大类 |
+|---|---|---|---|---|---|
+
+**实体**
+
+| 实体 | thrown_item | Thrown Item | 投掷物 | 可抛掷物品的通用投射实体 | 实体 |
+| 生物 | merchant | Merchant | 商人 | 交易 NPC | 实体 |
+| 投射物 | tactical_bolt | Tactical Bolt | 战术弩箭 | | 实体 |
+| 投射物 | nail | Nail | 钉子 | 钉炸弹飞钉 | 实体 |
+| 投掷物 | frag_grenade | Frag Grenade | 破片手雷 | | 实体 |
+| 投掷物 | incendiary_grenade | Incendiary Grenade | 燃烧手雷 | | 实体 |
+| 投掷物 | smoke_grenade | Smoke Grenade | 烟雾弹 | | 实体 |
+| 投掷物 | molotov | Molotov | 燃烧瓶 | | 实体 |
+| 投掷物 | pipe_bomb | Pipe Bomb | 管状炸弹 | | 实体 |
+| 投掷物 | nail_bomb | Nail Bomb | 钉炸弹 | | 实体 |
+| 投掷物 | tactical_tomahawk | Thrown Tactical Tomahawk | 投掷战术手斧 | | 实体 |
+| 实体 | seat | Seat | 座椅 | 可坐乘 | 实体 |
+| 实体 | air_drop | Air Drop | 空投 | 空投箱 | 实体 |
+| 投射物 | flare_projectile | Flare Projectile | 信号弹 | 信号枪发射 | 实体 |
+
+**方块实体**
+
+| 流体存储 | gas_barrel | Gas Barrel | 油桶 | 汽油桶/油桶(蓝绿红黄) | 方块实体 |
+| 功能 | fire_hydrant | Fire Hydrant | 消防栓 | | 方块实体 |
+| 功能 | stove | Stove | 炉灶 | 黑色/绿/红 | 方块实体 |
+| 容器 | decor_container | Decor Container | 装饰容器 | 40+ 容器方块共用 | 方块实体 |
+| 容器 | decor_multiblock_container | Decor Multiblock Container | 多格容器 | 大箱子/储物柜/冰箱等 28 方块 | 方块实体 |
+| 功能 | structure_access_anchor | Structure Access Anchor | 结构访问锚点 | | 方块实体 |
+| 屋顶 | camouflaged_roof | Camouflaged Roof | 迷彩屋顶 | 屋顶套件专用 | 方块实体 |
+| 功能 | wall_clock | Wall Clock | 挂钟 | | 方块实体 |
+| 功能 | fuel_pump | Fuel Pump | 油泵 | | 方块实体 |
+| 功能 | drinking_fountain | Drinking Fountain | 饮水机 | | 方块实体 |
+| 电力 | electrical_box | Electrical Box | 电箱 | | 方块实体 |
+| 电力 | electrical_outlet | Electrical Outlet | 插座 | | 方块实体 |
+| 电力 | fuse_box | Fuse Box | 保险丝盒 | | 方块实体 |
+| 功能 | microwave | Microwave | 微波炉 | | 方块实体 |
+| 灯光 | work_light | Work Light | 工作灯 | 便携/双三脚架工作灯 | 方块实体 |
+| 灯光 | double_flourecent_lamp | Double Fluorescent Lamp | 双管荧光灯 | 含闪烁变体 | 方块实体 |
+| 灯光 | lamp_block | Lamp Block | 灯具方块 | 含闪烁变体 | 方块实体 |
+| 灯光 | small_lamp | Small Lamp | 小台灯 | 含闪烁变体 | 方块实体 |
+| 电力 | wire_connector | Wire Connector | 电线连接器 | | 方块实体 |
+| 电力 | light_switch | Light Switch | 电灯开关 | | 方块实体 |
+| 载具 | sedan | Sedan | 轿车 | 轿车/皮卡/警车/面包车/救护车及破损变体共 15 | 方块实体 |
+| 环境 | lying_corpse | Lying Corpse | 躺尸 | 尸体装饰 | 方块实体 |
+| 功能 | garage_door | Garage Door | 车库门 | 黑色/金属/金属红/金属绿 | 方块实体 |
+| 功能 | small_garage_door | Small Garage Door | 小车库门 | 金属红/绿/白 | 方块实体 |
+| 容器 | visible_inventory_container | Visible Inventory Container | 可视容器 | 食品箱/厨房架/金属架/小枪柜 | 方块实体 |
+| 安全 | keycard_reader | Keycard Reader | 门禁读卡器 | | 方块实体 |
+| 环境 | loose_pickup | Loose Pickup | 散落拾取物 | 散落钥匙/门禁卡 | 方块实体 |
+
+**状态效果**
+
+| 效果 | bleeding | Bleeding | 出血 | 持续伤害 | 状态效果 |
+| 效果 | electric_shock | Electric Shock | 电击 | 麻痹/伤害 | 状态效果 |
+
+**流体**
+
+| 流体 | gasoline | Gasoline | 汽油 | 发电机燃料 | 流体 |
+| 流体 | dirty_water | Dirty Water | 脏水 | | 流体 |
+
+**粒子**
+
+| 粒子 | fly | Fly | 飞虫 | 环境飞虫 | 粒子 |
+| 粒子 | red_smoke | Red Smoke | 红烟 | 信号弹烟雾 | 粒子 |
+
+**GUI**
+
+| 1 行 | decor_chest_9x1 | 菜单 | 9格箱子界面 | | GUI |
+| 2 行 | decor_chest_9x2 | 菜单 | 18格箱子界面 | | GUI |
+| 3 行 | decor_chest_9x3 | 菜单 | 27格箱子界面 | | GUI |
+| 4 行 | decor_chest_9x4 | 菜单 | 36格箱子界面 | | GUI |
+| 5 行 | decor_chest_9x5 | 菜单 | 45格箱子界面 | | GUI |
+| 6 行 | decor_chest_9x6 | 菜单 | 54格箱子界面 | | GUI |
+| 装饰配方制作 | decor_workbench | 菜单 | 装饰工作台 | | GUI |
+| 魔杖 GUI | loot_crate_wand | 菜单 | 战利品配置 | | GUI |
+| | loot_manager | 菜单 | 战利品管理器 | | GUI |
\ No newline at end of file
diff --git a/幸存者军火库-实体效果流体表.xlsx b/幸存者军火库-实体效果流体表.xlsx
new file mode 100644
index 0000000..c151d82
Binary files /dev/null and b/幸存者军火库-实体效果流体表.xlsx differ
diff --git a/幸存者军火库-方块总表.md b/幸存者军火库-方块总表.md
new file mode 100644
index 0000000..a093b78
--- /dev/null
+++ b/幸存者军火库-方块总表.md
@@ -0,0 +1,469 @@
+# 幸存者军火库-方块总表
+
+共 398 条。
+
+> 范围:sa-lib(sa_core)、sa_survival、sa_combat、sa-decor 全部方块(sa-decor 377 项由 SADecorBlocks.java 自动解析)。
+
+| 分类 | 裸ID | 英文名 | 中文名 | 备注 | 来源模组 |
+|---|---|---|---|---|---|
+
+**机器**
+
+| 机器 | recycler | Recycler | 回收机 | 双格界面;处理回收配方需 40 FE/t,支持漏斗 | sa_core |
+| 机器 | salvage_bin | Salvage Bin | 回收箱 | 手动回收,低回收率,无需电力 | sa_core |
+| 机器 | solid_fuel_generator | Solid Fuel Generator | 固体燃料发电机 | 燃烧熔炉类固体燃料产 FE,低功率,无需手册 | sa_core |
+| 机器 | generator | Gasoline Generator | 汽油发电机 | 高功率,只烧汽油;需完成发电机手册训练 | sa_core |
+
+**流体**
+
+| 流体 | gasoline | Gasoline | 汽油(流体方块) | Fluid 方块,非方块实体 | sa_core |
+
+**建材**
+
+| 建材 | ashen_steel_block | Ashen Steel Block | 灰钢块 | 灰钢锭合成块 | sa_core |
+| 建材 | scrap_metal_block | Scrap Metal Block | 废金属块 | 金属废料合成块 | sa_core |
+| 建材 | raw_sulfur_block | Raw Sulfur Block | 粗硫磺块 | 硫磺原矿块 | sa_core |
+| 建材 | sulfur_ore | Sulfur Ore | 硫磺矿石 | 主世界矿石 | sa_core |
+
+**供给容器**
+
+| 供给容器 | box_of_nails | Box of Nails | 钉子盒 | SupplyContainer;内含钉子 | sa_core |
+| 供给容器 | box_of_screws | Box of Screws | 螺丝盒 | SupplyContainer;内含螺丝 | sa_core |
+| 供给容器 | box_of_paperclips | Box of Paperclips | 回形针盒 | SupplyContainer;内含回形针 | sa_core |
+| 供给容器 | gunpowder_bottle | Gunpowder Bottle | 火药瓶 | SupplyContainer;内含火药 | sa_core |
+
+**功能性**
+
+| 功能性 | rope | Rope | 绳索(方块) | 可放置、可攀爬,落到其上免摔伤 | sa_core |
+
+**植物**
+
+| 植物 | green_herb | Green Herb | 绿色草药 | 可种植草药植物 | sa_survival |
+| 植物 | red_herb | Red Herb | 红色草药 | 可种植草药植物 | sa_survival |
+| 植物 | blue_herb | Blue Herb | 蓝色草药 | 可种植草药植物 | sa_survival |
+| 植物 | yellow_herb | Yellow Herb | 黄色草药 | 可种植草药植物 | sa_survival |
+
+**工作台**
+
+| 工作台 | arsenal_table | Arsenal Table | 军火台 | 武器制作/升级/改装 GUI | sa_combat |
+
+**陷阱**
+
+| 陷阱 | land_mine | Land Mine | 地雷 | 踩踏触发爆炸 | sa_combat |
+| 陷阱 | c4 | C4 | C4炸药 | 遥控引爆 | sa_combat |
+
+**围栏**
+
+| 围栏 | urban_fence | Urban Fence | Urban Fence | | sa_decor |
+| 围栏 | urban_fence_wire | Urban Fence Wire | Urban Fence Wire | | sa_decor |
+| 围栏 | whitewood_fence | | whitewood fence | | sa_decor |
+
+**家具**
+
+| 家具 | folding_chair_blue | Folding Chair | Folding Chair | | sa_decor |
+| 家具 | folding_chair_green | Green Folding Chair | Green Folding Chair | | sa_decor |
+| 家具 | military_bed | Military Bed | Military Bed | | sa_decor |
+| 家具 | military_bed_blue | Blue Military Bed | Blue Military Bed | | sa_decor |
+| 家具 | office_chair | Office Chair | Office Chair | | sa_decor |
+| 家具 | office_chair_blue | Blue Office Chair | Blue Office Chair | | sa_decor |
+| 家具 | office_chair_broken | Broken Office Chair | Broken Office Chair | | sa_decor |
+| 家具 | office_chair_broken_blue | Broken Blue Office Chair | Broken Blue Office Chair | | sa_decor |
+| 家具 | office_chair_broken_brown | Broken Brown Office Chair | Broken Brown Office Chair | | sa_decor |
+| 家具 | office_chair_broken_green | Broken Green Office Chair | Broken Green Office Chair | | sa_decor |
+| 家具 | office_chair_broken_red | Broken Red Office Chair | Broken Red Office Chair | | sa_decor |
+| 家具 | office_chair_brown | Brown Office Chair | Brown Office Chair | | sa_decor |
+| 家具 | office_chair_green | Green Office Chair | Green Office Chair | | sa_decor |
+| 家具 | office_chair_red | Red Office Chair | Red Office Chair | | sa_decor |
+| 家具 | plastic_chair_red | Red Plastic Chair | Red Plastic Chair | | sa_decor |
+| 家具 | plastic_chair_white | Plastic Chair | Plastic Chair | | sa_decor |
+| 家具 | plastic_table_red | Red Plastic Table | Red Plastic Table | | sa_decor |
+| 家具 | plastic_table_white | Plastic Table | Plastic Table | | sa_decor |
+| 家具 | white_smooth_table | White Smooth Table | White Smooth Table | | sa_decor |
+| 家具 | wooden_seat | Wooden Seat | Wooden Seat | | sa_decor |
+| 家具 | wooden_seat_beige | Beige Wooden Seat | Beige Wooden Seat | | sa_decor |
+| 家具 | wooden_seat_blue | Blue Wooden Seat | Blue Wooden Seat | | sa_decor |
+| 家具 | wooden_seat_gray | Gray Wooden Seat | Gray Wooden Seat | | sa_decor |
+| 家具 | wooden_seat_green | Green Wooden Seat | Green Wooden Seat | | sa_decor |
+| 家具 | wooden_seat_red | Red Wooden Seat | Red Wooden Seat | | sa_decor |
+| 家具 | wooden_table | Wooden Table | Wooden Table | | sa_decor |
+
+**容器**
+
+| 容器 | ammo_box | Ammo Box | Ammo Box | | sa_decor |
+| 容器 | ammo_box_stack_2 | Ammo Box Stack | Ammo Box Stack | | sa_decor |
+| 容器 | ammo_box_stack_3 | Large Ammo Box Stack | Large Ammo Box Stack | | sa_decor |
+| 容器 | ammo_box_stack_4 | Ammo Box Stack x4 | Ammo Box Stack x4 | | sa_decor |
+| 容器 | ammo_props | Ammo Props | Ammo Props | | sa_decor |
+| 容器 | attach_case | Attach Case | Attach Case | | sa_decor |
+| 容器 | big_metal_locker | Big Metal Locker | Big Metal Locker | | sa_decor |
+| 容器 | big_military_crate | Big Military Crate | Big Military Crate | | sa_decor |
+| 容器 | birch_big_wooden_crate | Birch Big Wooden Crate | Birch Big Wooden Crate | | sa_decor |
+| 容器 | birch_supply_crate | Birch Crate | Birch Crate | | sa_decor |
+| 容器 | birch_wooden_drawer_double | Double Birch Wooden Drawer | Double Birch Wooden Drawer | | sa_decor |
+| 容器 | birch_wooden_drawer_one | Birch Wooden Drawer | Birch Wooden Drawer | | sa_decor |
+| 容器 | cabinet_double | Double Cabinet | Double Cabinet | | sa_decor |
+| 容器 | cabinet_one | Cabinet | Cabinet | | sa_decor |
+| 容器 | cardboard_box | Cardboard Box | Cardboard Box | | sa_decor |
+| 容器 | cash_register_machine | Cash Register | Cash Register | | sa_decor |
+| 容器 | counter_cabinet | Counter Cabinet | Counter Cabinet | | sa_decor |
+| 容器 | double_wooden_supply_crate | Double Wooden Supply Crate | Double Wooden Supply Crate | | sa_decor |
+| 容器 | dumpster | Dumpster | Dumpster | | sa_decor |
+| 容器 | dumpster_blue | Blue Dumpster | Blue Dumpster | | sa_decor |
+| 容器 | electrical_box | Electrical Box | Electrical Box | | sa_decor |
+| 容器 | food_crate | Food Crate | Food Crate | | sa_decor |
+| 容器 | freezer | Freezer | Freezer | | sa_decor |
+| 容器 | fridge | Fridge | Fridge | | sa_decor |
+| 容器 | fridge_green | Green Fridge | Green Fridge | | sa_decor |
+| 容器 | fridge_red | Red Fridge | Red Fridge | | sa_decor |
+| 容器 | fuse_box | Fuse Box | Fuse Box | | sa_decor |
+| 容器 | garbage_bin | Garbage Bin | Garbage Bin | | sa_decor |
+| 容器 | gun_cabinet | Gun Cabinet | Gun Cabinet | | sa_decor |
+| 容器 | gun_case | Gun Case | Gun Case | | sa_decor |
+| 容器 | gun_case_green | Green Gun Case | Green Gun Case | | sa_decor |
+| 容器 | handgun_case | Handgun Case | Handgun Case | | sa_decor |
+| 容器 | handgun_case_green | Green Handgun Case | Green Handgun Case | | sa_decor |
+| 容器 | hospital_cabinet | Hospital Cabinet | Hospital Cabinet | | sa_decor |
+| 容器 | kitchen_drawer | Kitchen Drawer | Kitchen Drawer | | sa_decor |
+| 容器 | kitchen_shelf | Kitchen Shelf | Kitchen Shelf | | sa_decor |
+| 容器 | locker | Locker | Locker | | sa_decor |
+| 容器 | locker_gray | Gray Locker | Gray Locker | | sa_decor |
+| 容器 | locker_green | Green Locker | Green Locker | | sa_decor |
+| 容器 | locker_red | Red Locker | Red Locker | | sa_decor |
+| 容器 | marketing_shelf | Marketing Shelf | Marketing Shelf | | sa_decor |
+| 容器 | marketing_shelf_wooden | Wooden Marketing Shelf | Wooden Marketing Shelf | | sa_decor |
+| 容器 | medicinal_cabinet | Medicinal Cabinet | Medicinal Cabinet | | sa_decor |
+| 容器 | medicinal_crate | Medicinal Crate | Medicinal Crate | | sa_decor |
+| 容器 | medium_cardboard_box | Medium Cardboard Box | Medium Cardboard Box | | sa_decor |
+| 容器 | metal_counter_cabinet | Metal Counter Cabinet | Metal Counter Cabinet | | sa_decor |
+| 容器 | metal_rack | Metal Rack | Metal Rack | | sa_decor |
+| 容器 | metal_rack_side | Metal Rack Side | Metal Rack Side | | sa_decor |
+| 容器 | military_crate | Military Crate | Military Crate | | sa_decor |
+| 容器 | modern_trash_bin | Modern Trash Bin | Modern Trash Bin | | sa_decor |
+| 容器 | oak_big_wooden_crate | Oak Big Wooden Crate | Oak Big Wooden Crate | | sa_decor |
+| 容器 | oak_supply_crate | Oak Crate | Oak Crate | | sa_decor |
+| 容器 | oak_wooden_drawer_double | Double Oak Wooden Drawer | Double Oak Wooden Drawer | | sa_decor |
+| 容器 | oak_wooden_drawer_one | Oak Wooden Drawer | Oak Wooden Drawer | | sa_decor |
+| 容器 | office_desk | Office Desk | Office Desk | | sa_decor |
+| 容器 | safe | Safe | Safe | | sa_decor |
+| 容器 | small_cardboard_box | Small Cardboard Box | Small Cardboard Box | | sa_decor |
+| 容器 | small_cardboard_box_stack1 | Small Cardboard Boxes (2) | Small Cardboard Boxes (2) | | sa_decor |
+| 容器 | small_cardboard_box_stack2 | Small Cardboard Boxes (3) | Small Cardboard Boxes (3) | | sa_decor |
+| 容器 | small_cardboard_box_stack3 | Small Cardboard Boxes (4) | Small Cardboard Boxes (4) | | sa_decor |
+| 容器 | small_gun_cabinet | Small Gun Cabinet | Small Gun Cabinet | | sa_decor |
+| 容器 | spruce_big_wooden_crate | Spruce Big Wooden Crate | Spruce Big Wooden Crate | | sa_decor |
+| 容器 | spruce_supply_crate | Spruce Crate | Spruce Crate | | sa_decor |
+| 容器 | spruce_wooden_drawer_double | Double Spruce Wooden Drawer | Double Spruce Wooden Drawer | | sa_decor |
+| 容器 | spruce_wooden_drawer_one | Spruce Wooden Drawer | Spruce Wooden Drawer | | sa_decor |
+| 容器 | store_shelf | Store Shelf | Store Shelf | | sa_decor |
+| 容器 | supply_drop | Supply Drop | Supply Drop | | sa_decor |
+| 容器 | trash_bin | Trash Bin | Trash Bin | | sa_decor |
+| 容器 | trash_can | Trash Can | Trash Can | | sa_decor |
+| 容器 | trash_props | Trash Props | Trash Props | | sa_decor |
+| 容器 | vending_machine | Vending Machine | Vending Machine | | sa_decor |
+| 容器 | wall_metal_counter_cabinet | Wall Metal Counter Cabinet | Wall Metal Counter Cabinet | | sa_decor |
+| 容器 | wall_metal_rack | Wall Metal Rack | Wall Metal Rack | | sa_decor |
+| 容器 | wall_wooden_drawer | Wall Wooden Drawer | Wall Wooden Drawer | | sa_decor |
+| 容器 | wall_wooden_drawer_glass | Glass Wall Wooden Drawer | Glass Wall Wooden Drawer | | sa_decor |
+| 容器 | wardrobe | Wardrobe | Wardrobe | | sa_decor |
+| 容器 | wooden_supply_crate | Wooden Supply Crate | Wooden Supply Crate | | sa_decor |
+
+**屋顶**
+
+| 屋顶 | framed_low_roof | Black Low Roof | Black Low Roof | | sa_decor |
+| 屋顶 | framed_low_roof_top | Black Low Roof Ridge | Black Low Roof Ridge | | sa_decor |
+| 屋顶 | framed_roof | Black Roof | Black Roof | | sa_decor |
+| 屋顶 | framed_roof_top | Black Roof Ridge | Black Roof Ridge | | sa_decor |
+| 屋顶 | framed_roof_top_slab | Black Roof Top Slab | Black Roof Top Slab | | sa_decor |
+
+**市政设施**
+
+| 市政设施 | drinking_fountain | Drinking Fountain | Drinking Fountain | | sa_decor |
+| 市政设施 | fire_hydrant | Fire Hydrant | Fire Hydrant | | sa_decor |
+| 市政设施 | fuel_pump | Fuel Pump | Fuel Pump | | sa_decor |
+| 市政设施 | wires | Wires | Wires | | sa_decor |
+
+**建材**
+
+| 建材 | asphalt | Asphalt | Asphalt | | sa_decor |
+| 建材 | asphalt_corner_white_line | Asphalt Corner White Line | Asphalt Corner White Line | | sa_decor |
+| 建材 | asphalt_double_yellow_line | Asphalt Double Yellow Line | Asphalt Double Yellow Line | | sa_decor |
+| 建材 | asphalt_white_line | Asphalt White Line | Asphalt White Line | | sa_decor |
+| 建材 | beige_commercial_wall | Beige Commercial Wall | Beige Commercial Wall | | sa_decor |
+| 建材 | black_commercial_floor | Black Commercial Floor | Black Commercial Floor | | sa_decor |
+| 建材 | black_commercial_floor_slab | Black Commercial Floor Slab | Black Commercial Floor Slab | | sa_decor |
+| 建材 | black_storefront_double_glass_panel | Black Storefront Double Glass Panel | Black Storefront Double Glass Panel | | sa_decor |
+| 建材 | black_storefront_glass_panel | Black Storefront Glass Panel | Black Storefront Glass Panel | | sa_decor |
+| 建材 | black_storefront_panel | Black Storefront Panel | Black Storefront Panel | | sa_decor |
+| 建材 | blue_horizontal_siding | Blue Horizontal Siding | Blue Horizontal Siding | | sa_decor |
+| 建材 | blue_horizontal_siding_slab | Blue Horizontal Siding Slab | Blue Horizontal Siding Slab | | sa_decor |
+| 建材 | blue_horizontal_siding_stairs | Blue Horizontal Siding Stairs | Blue Horizontal Siding Stairs | | sa_decor |
+| 建材 | blue_horizontal_siding_wall | Blue Horizontal Siding Wall | Blue Horizontal Siding Wall | | sa_decor |
+| 建材 | broken_asphalt | Broken Asphalt | Broken Asphalt | | sa_decor |
+| 建材 | broken_ceiling_tile | Broken Ceiling Tile | Broken Ceiling Tile | | sa_decor |
+| 建材 | broken_cinder_block_wall | Broken Cinder Block Wall | Broken Cinder Block Wall | | sa_decor |
+| 建材 | ceiling_tile | Ceiling Tile | Ceiling Tile | | sa_decor |
+| 建材 | cinder_block_wall | Cinder Block Wall | Cinder Block Wall | | sa_decor |
+| 建材 | concrete_barrier | Concrete Barrier | Concrete Barrier | | sa_decor |
+| 建材 | concrete_barrier_big | Big Concrete Barrier | Big Concrete Barrier | | sa_decor |
+| 建材 | concrete_barrier_break | Broken Concrete Barrier | Broken Concrete Barrier | | sa_decor |
+| 建材 | concrete_barrier_small | Small Concrete Barrier | Small Concrete Barrier | | sa_decor |
+| 建材 | concrete_barrier_smooth | Smooth Concrete Barrier | Smooth Concrete Barrier | | sa_decor |
+| 建材 | cracked_asphalt | Cracked Asphalt | Cracked Asphalt | | sa_decor |
+| 建材 | cracked_polished_concrete | Cracked Polished Concrete | Cracked Polished Concrete | | sa_decor |
+| 建材 | cracked_polished_concrete_slab | Cracked Polished Concrete Slab | Cracked Polished Concrete Slab | | sa_decor |
+| 建材 | cracked_polished_concrete_stairs | Cracked Polished Concrete Stairs | Cracked Polished Concrete Stairs | | sa_decor |
+| 建材 | cracked_white_tiles | Cracked White Tiles | Cracked White Tiles | | sa_decor |
+| 建材 | cracked_white_tiles_slab | Cracked White Tiles Slab | Cracked White Tiles Slab | | sa_decor |
+| 建材 | damaged_dark_brick_wall | Damaged Dark Brick Wall | Damaged Dark Brick Wall | | sa_decor |
+| 建材 | damaged_dark_brick_wall_slab | Damaged Dark Brick Wall Slab | Damaged Dark Brick Wall Slab | | sa_decor |
+| 建材 | damaged_dark_brick_wall_stairs | Damaged Dark Brick Wall Stairs | Damaged Dark Brick Wall Stairs | | sa_decor |
+| 建材 | damaged_dark_brick_wall_wall | Damaged Dark Brick Wall | Damaged Dark Brick Wall | | sa_decor |
+| 建材 | dark_brick_wall | Dark Brick Wall | Dark Brick Wall | | sa_decor |
+| 建材 | dark_brick_wall_slab | Dark Brick Wall Slab | Dark Brick Wall Slab | | sa_decor |
+| 建材 | dark_brick_wall_stairs | Dark Brick Wall Stairs | Dark Brick Wall Stairs | | sa_decor |
+| 建材 | dark_brick_wall_wall | Dark Brick Wall | Dark Brick Wall | | sa_decor |
+| 建材 | dirty_beige_commercial_wall | Dirty Beige Commercial Wall | Dirty Beige Commercial Wall | | sa_decor |
+| 建材 | floor_mirror | Floor Mirror | Floor Mirror | | sa_decor |
+| 建材 | gray_paver_path | Gray Paver Path | Gray Paver Path | | sa_decor |
+| 建材 | gray_paver_path_slab | Gray Paver Path Slab | Gray Paver Path Slab | | sa_decor |
+| 建材 | gray_paver_path_stairs | Gray Paver Path Stairs | Gray Paver Path Stairs | | sa_decor |
+| 建材 | gray_paver_path_wall | Gray Paver Path Wall | Gray Paver Path Wall | | sa_decor |
+| 建材 | green_horizontal_siding | Green Horizontal Siding | Green Horizontal Siding | | sa_decor |
+| 建材 | green_horizontal_siding_slab | Green Horizontal Siding Slab | Green Horizontal Siding Slab | | sa_decor |
+| 建材 | green_horizontal_siding_stairs | Green Horizontal Siding Stairs | Green Horizontal Siding Stairs | | sa_decor |
+| 建材 | green_horizontal_siding_wall | Green Horizontal Siding Wall | Green Horizontal Siding Wall | | sa_decor |
+| 建材 | iron_duct | Iron Duct | Iron Duct | | sa_decor |
+| 建材 | iron_duct_full | Iron Duct Full | Iron Duct Full | | sa_decor |
+| 建材 | mustard_commercial_floor | Mustard Commercial Floor | Mustard Commercial Floor | | sa_decor |
+| 建材 | mustard_commercial_floor_slab | Mustard Commercial Floor Slab | Mustard Commercial Floor Slab | | sa_decor |
+| 建材 | polished_concrete | Polished Concrete | Polished Concrete | | sa_decor |
+| 建材 | polished_concrete_slab | Polished Concrete Slab | Polished Concrete Slab | | sa_decor |
+| 建材 | polished_concrete_stairs | Polished Concrete Stairs | Polished Concrete Stairs | | sa_decor |
+| 建材 | red_horizontal_siding | Red Horizontal Siding | Red Horizontal Siding | | sa_decor |
+| 建材 | red_horizontal_siding_slab | Red Horizontal Siding Slab | Red Horizontal Siding Slab | | sa_decor |
+| 建材 | red_horizontal_siding_stairs | Red Horizontal Siding Stairs | Red Horizontal Siding Stairs | | sa_decor |
+| 建材 | red_horizontal_siding_wall | Red Horizontal Siding Wall | Red Horizontal Siding Wall | | sa_decor |
+| 建材 | sidewalk_concrete | Sidewalk Concrete | Sidewalk Concrete | | sa_decor |
+| 建材 | sidewalk_concrete_slab | Sidewalk Concrete Slab | Sidewalk Concrete Slab | | sa_decor |
+| 建材 | wall_clock | Wall Clock | Wall Clock | | sa_decor |
+| 建材 | wall_vent | Wall Vent | Wall Vent | | sa_decor |
+| 建材 | white_commercial_floor | White Commercial Floor | White Commercial Floor | | sa_decor |
+| 建材 | white_commercial_floor_slab | White Commercial Floor Slab | White Commercial Floor Slab | | sa_decor |
+| 建材 | white_horizontal_siding | White Horizontal Siding | White Horizontal Siding | | sa_decor |
+| 建材 | white_horizontal_siding_slab | White Horizontal Siding Slab | White Horizontal Siding Slab | | sa_decor |
+| 建材 | white_horizontal_siding_stairs | White Horizontal Siding Stairs | White Horizontal Siding Stairs | | sa_decor |
+| 建材 | white_horizontal_siding_wall | White Horizontal Siding Wall | White Horizontal Siding Wall | | sa_decor |
+| 建材 | white_plaster_wall | White Plaster Wall | White Plaster Wall | | sa_decor |
+| 建材 | white_plaster_wall_slab | White Plaster Wall Slab | White Plaster Wall Slab | | sa_decor |
+| 建材 | white_plaster_wall_stairs | White Plaster Wall Stairs | White Plaster Wall Stairs | | sa_decor |
+| 建材 | white_plaster_wall_wall | White Plaster Wall | White Plaster Wall | | sa_decor |
+| 建材 | white_tiles | White Tiles | White Tiles | | sa_decor |
+| 建材 | white_tiles_slab | White Tiles Slab | White Tiles Slab | | sa_decor |
+
+**杂物**
+
+| 杂物 | blood_props | Blood Props | Blood Props | | sa_decor |
+| 杂物 | dirty_props | Dirty Props | Dirty Props | | sa_decor |
+| 杂物 | garbage_props | Garbage Props | Garbage Props | | sa_decor |
+| 杂物 | grime | Grime | Grime | | sa_decor |
+| 杂物 | grime_carpet | Grime Carpet | Grime Carpet | | sa_decor |
+| 杂物 | medical_props | Medical Props | Medical Props | | sa_decor |
+| 杂物 | paper_props | Paper Props | Paper Props | | sa_decor |
+
+**标牌**
+
+| 标牌 | danger_sign | Danger Sign | Danger Sign | | sa_decor |
+| 标牌 | exit_sign | Exit Sign | Exit Sign | | sa_decor |
+| 标牌 | road_sign_do_not_enter | Do Not Enter Road Sign | Do Not Enter Road Sign | | sa_decor |
+| 标牌 | road_sign_no_entry | No Entry Road Sign | No Entry Road Sign | | sa_decor |
+| 标牌 | road_sign_one_way | One Way Road Sign | One Way Road Sign | | sa_decor |
+| 标牌 | road_sign_parking | Parking Road Sign | Parking Road Sign | | sa_decor |
+| 标牌 | road_sign_sharp_curves | Sharp Curves Road Sign | Sharp Curves Road Sign | | sa_decor |
+| 标牌 | road_sign_speed_limit_30 | Speed Limit 30 Road Sign | Speed Limit 30 Road Sign | | sa_decor |
+| 标牌 | road_sign_stop | Stop Road Sign | Stop Road Sign | | sa_decor |
+| 标牌 | umbrella_sign | Umbrella Sign | Umbrella Sign | | sa_decor |
+
+**灯具**
+
+| 灯具 | black_desk_lamp | Black Desk Lamp | Black Desk Lamp | | sa_decor |
+| 灯具 | blue_desk_lamp | Blue Desk Lamp | Blue Desk Lamp | | sa_decor |
+| 灯具 | broken_light_asphalt | Broken Light Asphalt | Broken Light Asphalt | | sa_decor |
+| 灯具 | construction_barrier_break_no_lamp | Broken Construction Barrier No Lamp | Broken Construction Barrier No Lamp | | sa_decor |
+| 灯具 | construction_barrier_no_lamp | Construction Barrier No Lamp | Construction Barrier No Lamp | | sa_decor |
+| 灯具 | cracked_light_asphalt | Cracked Light Asphalt | Cracked Light Asphalt | | sa_decor |
+| 灯具 | double_flourecent_lamp | Double Fluorescent Lamp | Double Fluorescent Lamp | | sa_decor |
+| 灯具 | double_flourecent_lamp_broken | Broken Double Fluorescent Lamp | Broken Double Fluorescent Lamp | | sa_decor |
+| 灯具 | double_flourecent_lamp_flickering | Flickering Double Fluorescent Lamp | Flickering Double Fluorescent Lamp | | sa_decor |
+| 灯具 | dual_tripod_work_light | Dual Tripod Work Light | Dual Tripod Work Light | | sa_decor |
+| 灯具 | lamp_block | Lamp Block | Lamp Block | | sa_decor |
+| 灯具 | lamp_block_flickering | Flickering Lamp Block | Flickering Lamp Block | | sa_decor |
+| 灯具 | light_asphalt | Light Asphalt | Light Asphalt | | sa_decor |
+| 灯具 | light_asphalt_corner_white_line | Light Asphalt Corner White Line | Light Asphalt Corner White Line | | sa_decor |
+| 灯具 | light_switch | Light Switch | Light Switch | | sa_decor |
+| 灯具 | portable_work_light | Portable Work Light | Portable Work Light | | sa_decor |
+| 灯具 | road_sign_traffic_light_warning | Traffic Light Warning Road Sign | Traffic Light Warning Road Sign | | sa_decor |
+| 灯具 | small_lamp | Small Lamp | Small Lamp | | sa_decor |
+| 灯具 | small_lamp_flickering | Flickering Small Lamp | Flickering Small Lamp | | sa_decor |
+| 灯具 | street_light_arm | Street Light Arm | Street Light Arm | | sa_decor |
+| 灯具 | street_light_base | Street Light Base | Street Light Base | | sa_decor |
+| 灯具 | street_light_lamp_broken | Broken Street Light Lamp | Broken Street Light Lamp | | sa_decor |
+| 灯具 | street_light_lamp_flickering | Flickering Street Light Lamp | Flickering Street Light Lamp | | sa_decor |
+| 灯具 | street_light_lamp_off | Street Light Lamp Off | Street Light Lamp Off | | sa_decor |
+| 灯具 | street_light_lamp_on | Street Light Lamp | Street Light Lamp | | sa_decor |
+| 灯具 | street_light_pole | Street Light Pole | Street Light Pole | | sa_decor |
+| 灯具 | street_light_support_arm | Street Light Support Arm | Street Light Support Arm | | sa_decor |
+| 灯具 | street_light_top | Street Light Top | Street Light Top | | sa_decor |
+| 灯具 | work_light_beam | | work light beam | | sa_decor |
+
+**装饰**
+
+| 装饰 | air_conditioner | Air Conditioner | Air Conditioner | | sa_decor |
+| 装饰 | backpack_loot | Loot Backpack | Loot Backpack | | sa_decor |
+| 装饰 | barbed_wire | Barbed Wire | Barbed Wire | | sa_decor |
+| 装饰 | barricade | Barricade | Barricade | | sa_decor |
+| 装饰 | bathroom_sink | Bathroom Sink | Bathroom Sink | | sa_decor |
+| 装饰 | bear_trap | Bear Trap | Bear Trap | | sa_decor |
+| 装饰 | big_barricade | Big Barricade | Big Barricade | | sa_decor |
+| 装饰 | black_shutter | Black Shutter | Black Shutter | | sa_decor |
+| 装饰 | black_telephone | Black Telephone | Black Telephone | | sa_decor |
+| 装饰 | blue_side_bars | Blue Side Bars | Blue Side Bars | | sa_decor |
+| 装饰 | brazil_flag | Brazilian Flag | Brazilian Flag | | sa_decor |
+| 装饰 | broken_cinder_block | Broken Cinder Block | Broken Cinder Block | | sa_decor |
+| 装饰 | broken_cinder_block_slab | Broken Cinder Block Slab | Broken Cinder Block Slab | | sa_decor |
+| 装饰 | broken_cinder_block_stairs | Broken Cinder Block Stairs | Broken Cinder Block Stairs | | sa_decor |
+| 装饰 | broken_glass | Broken Glass | Broken Glass | | sa_decor |
+| 装饰 | broken_old_computer | Broken Old Computer | Broken Old Computer | | sa_decor |
+| 装饰 | cinder_block | Cinder Block | Cinder Block | | sa_decor |
+| 装饰 | cinder_block_slab | Cinder Block Slab | Cinder Block Slab | | sa_decor |
+| 装饰 | cinder_block_stairs | Cinder Block Stairs | Cinder Block Stairs | | sa_decor |
+| 装饰 | decor_workbench | | decor workbench | | sa_decor |
+| 装饰 | electrical_outlet | Electrical Outlet | Electrical Outlet | | sa_decor |
+| 装饰 | fire_escape_platform | Fire Escape Platform | Fire Escape Platform | | sa_decor |
+| 装饰 | fire_escape_railing | Fire Escape Railing | Fire Escape Railing | | sa_decor |
+| 装饰 | fire_escape_stairs | Fire Escape Stairs | Fire Escape Stairs | | sa_decor |
+| 装饰 | fly_emitter | Fly Emitter | Fly Emitter | | sa_decor |
+| 装饰 | fly_emitter | | fly emitter | | sa_decor |
+| 装饰 | gas_barrel | Gas Barrel | Gas Barrel | | sa_decor |
+| 装饰 | gray_fire_escape_platform | Gray Fire Escape Platform | Gray Fire Escape Platform | | sa_decor |
+| 装饰 | gray_fire_escape_railing | Gray Fire Escape Railing | Gray Fire Escape Railing | | sa_decor |
+| 装饰 | gray_fire_escape_stairs | Gray Fire Escape Stairs | Gray Fire Escape Stairs | | sa_decor |
+| 装饰 | gray_industrial_ladder | Gray Industrial Ladder | Gray Industrial Ladder | | sa_decor |
+| 装饰 | gutter | Gutter | Gutter | | sa_decor |
+| 装饰 | gutter_tube | Gutter Tube | Gutter Tube | | sa_decor |
+| 装饰 | highway_guardrail | Highway Guardrail | Highway Guardrail | | sa_decor |
+| 装饰 | hospital_curtain | Hospital Curtain | Hospital Curtain | | sa_decor |
+| 装饰 | hospital_curtain_big | Big Hospital Curtain | Big Hospital Curtain | | sa_decor |
+| 装饰 | industrial_ladder | Industrial Ladder | Industrial Ladder | | sa_decor |
+| 装饰 | iv_stand | IV Stand | IV Stand | | sa_decor |
+| 装饰 | keycard_reader | Keycard Reader | Keycard Reader | | sa_decor |
+| 装饰 | kitchen_cover | Kitchen Cover | Kitchen Cover | | sa_decor |
+| 装饰 | kitchen_sink | Kitchen Sink | Kitchen Sink | | sa_decor |
+| 装饰 | loose_key | Key | Key | | sa_decor |
+| 装饰 | loose_keycard | Keycard | Keycard | | sa_decor |
+| 装饰 | lying_corpse | Lying Corpse | Lying Corpse | | sa_decor |
+| 装饰 | manhole | Manhole | Manhole | | sa_decor |
+| 装饰 | metal_counter | Metal Counter | Metal Counter | | sa_decor |
+| 装饰 | microwave | Microwave | Microwave | | sa_decor |
+| 装饰 | military_radio | Military Radio | Military Radio | | sa_decor |
+| 装饰 | mirror | Mirror | Mirror | | sa_decor |
+| 装饰 | noteboard | Noteboard | Noteboard | | sa_decor |
+| 装饰 | oil_barrel | Oil Barrel | Oil Barrel | | sa_decor |
+| 装饰 | oil_barrel_blue | Blue Oil Barrel | Blue Oil Barrel | | sa_decor |
+| 装饰 | oil_barrel_green | Green Oil Barrel | Green Oil Barrel | | sa_decor |
+| 装饰 | oil_barrel_red | Red Oil Barrel | Red Oil Barrel | | sa_decor |
+| 装饰 | oil_barrel_yellow | Yellow Oil Barrel | Yellow Oil Barrel | | sa_decor |
+| 装饰 | old_computer | Old Computer | Old Computer | | sa_decor |
+| 装饰 | padlock_attachment | | padlock attachment | | sa_decor |
+| 装饰 | park_bench | Park Bench | Park Bench | | sa_decor |
+| 装饰 | pc | PC | PC | | sa_decor |
+| 装饰 | pc_broken | Broken PC | Broken PC | | sa_decor |
+| 装饰 | planks_pallet_stack1 | Planks Pallet | Planks Pallet | | sa_decor |
+| 装饰 | planks_pallet_stack2 | Stacked Planks Pallet | Stacked Planks Pallet | | sa_decor |
+| 装饰 | planks_pallet_stack3 | Tall Planks Pallet | Tall Planks Pallet | | sa_decor |
+| 装饰 | post_transformer | Post Transformer | Post Transformer | | sa_decor |
+| 装饰 | radio | Radio | Radio | | sa_decor |
+| 装饰 | red_sleeping_bag | Red Sleeping Bag | Red Sleeping Bag | | sa_decor |
+| 装饰 | refrigerator | Refrigerator | Refrigerator | | sa_decor |
+| 装饰 | sand_bag | Sand Bag | Sand Bag | | sa_decor |
+| 装饰 | shutter_leaf | Open Shutter | Open Shutter | | sa_decor |
+| 装饰 | small_mirror | Small Mirror | Small Mirror | | sa_decor |
+| 装饰 | smart_tv | Smart TV | Smart TV | | sa_decor |
+| 装饰 | smart_tv_broken | Broken Smart TV | Broken Smart TV | | sa_decor |
+| 装饰 | stove | Stove | Stove | | sa_decor |
+| 装饰 | stove_green | Green Stove | Green Stove | | sa_decor |
+| 装饰 | stove_red | Red Stove | Red Stove | | sa_decor |
+| 装饰 | structure_access_anchor | | structure access anchor | | sa_decor |
+| 装饰 | tire_block | Tire Block | Tire Block | | sa_decor |
+| 装饰 | tire_block_stack2 | Tire Block Stack | Tire Block Stack | | sa_decor |
+| 装饰 | tire_block_stack2v | Tire Block Stack Variant | Tire Block Stack Variant | | sa_decor |
+| 装饰 | tire_block_stack3 | Tall Tire Block Stack | Tall Tire Block Stack | | sa_decor |
+| 装饰 | tire_block_stack3v | Tall Tire Block Stack Variant | Tall Tire Block Stack Variant | | sa_decor |
+| 装饰 | toilet | Toilet | Toilet | | sa_decor |
+| 装饰 | toilet_paper | Toilet Paper | Toilet Paper | | sa_decor |
+| 装饰 | tool_storage | Tool Storage | Tool Storage | | sa_decor |
+| 装饰 | traffic_cone | Traffic Cone | Traffic Cone | | sa_decor |
+| 装饰 | traffic_cone_tall | Tall Traffic Cone | Tall Traffic Cone | | sa_decor |
+| 装饰 | tv | TV | TV | | sa_decor |
+| 装饰 | tv_broken | Broken TV | Broken TV | | sa_decor |
+| 装饰 | usa_flag | United States Flag | United States Flag | | sa_decor |
+| 装饰 | white_shutter | White Shutter | White Shutter | | sa_decor |
+| 装饰 | white_telephone | White Telephone | White Telephone | | sa_decor |
+| 装饰 | wire_connector | Wire Connector | Wire Connector | | sa_decor |
+| 装饰 | wood_plank_pile | Wood Plank Pile | Wood Plank Pile | | sa_decor |
+| 装饰 | wooden_scaffolding | Wooden Scaffolding | Wooden Scaffolding | | sa_decor |
+| 装饰 | wooden_shelves | Wooden Shelves | Wooden Shelves | | sa_decor |
+
+**路障**
+
+| 路障 | construction_barrier | Construction Barrier | Construction Barrier | | sa_decor |
+| 路障 | construction_barrier_break | Broken Construction Barrier | Broken Construction Barrier | | sa_decor |
+| 路障 | empty_hesco_barrier | Empty Hesco Barrier | Empty Hesco Barrier | | sa_decor |
+| 路障 | hesco_barrier | Hesco Barrier | Hesco Barrier | | sa_decor |
+
+**载具**
+
+| 载具 | ambulance | Ambulance | Ambulance | | sa_decor |
+| 载具 | broken_ambulance | Broken Ambulance | Broken Ambulance | | sa_decor |
+| 载具 | broken_pickup | Broken Pickup | Broken Pickup | | sa_decor |
+| 载具 | broken_police_car | Broken Police Car | Broken Police Car | | sa_decor |
+| 载具 | broken_sedan | Broken Sedan | Broken Sedan | | sa_decor |
+| 载具 | broken_van | Broken Van | Broken Van | | sa_decor |
+| 载具 | destroyed_ambulance | Destroyed Ambulance | Destroyed Ambulance | | sa_decor |
+| 载具 | destroyed_pickup | Destroyed Pickup | Destroyed Pickup | | sa_decor |
+| 载具 | destroyed_police_car | Destroyed Police Car | Destroyed Police Car | | sa_decor |
+| 载具 | destroyed_sedan | Destroyed Sedan | Destroyed Sedan | | sa_decor |
+| 载具 | destroyed_van | Destroyed Van | Destroyed Van | | sa_decor |
+| 载具 | pickup | Pickup | Pickup | | sa_decor |
+| 载具 | police_car | Police Car | Police Car | | sa_decor |
+| 载具 | sedan | Sedan | Sedan | | sa_decor |
+| 载具 | van | Van | Van | | sa_decor |
+
+**门**
+
+| 门 | beige_utility_vent_door | Beige Utility Vent Door | Beige Utility Vent Door | | sa_decor |
+| 门 | black_panel_door | Black Panel Door | Black Panel Door | | sa_decor |
+| 门 | black_storefront_door | Black Storefront Door | Black Storefront Door | | sa_decor |
+| 门 | black_storefront_header_trapdoor | Black Storefront Header | Black Storefront Header | | sa_decor |
+| 门 | bloodied_gray_steel_door | Bloodied Gray Steel Door | Bloodied Gray Steel Door | | sa_decor |
+| 门 | blue_industrial_door | Blue Industrial Door | Blue Industrial Door | | sa_decor |
+| 门 | brown_glass_panel_door | Brown Glass Panel Door | Brown Glass Panel Door | | sa_decor |
+| 门 | cream_paneled_door | Cream Paneled Door | Cream Paneled Door | | sa_decor |
+| 门 | duct_trapdoor | Duct Trapdoor | Duct Trapdoor | | sa_decor |
+| 门 | electronic_security_door | Electronic Security Door | Electronic Security Door | | sa_decor |
+| 门 | garage_door | White Garage Door | White Garage Door | | sa_decor |
+| 门 | garage_door_metal | Metal Garage Door | Metal Garage Door | | sa_decor |
+| 门 | garage_door_metal_green | Green Metal Garage Door | Green Metal Garage Door | | sa_decor |
+| 门 | garage_door_metal_red | Red Metal Garage Door | Red Metal Garage Door | | sa_decor |
+| 门 | gray_glass_door | Gray Glass Door | Gray Glass Door | | sa_decor |
+| 门 | gray_steel_door | Gray Steel Door | Gray Steel Door | | sa_decor |
+| 门 | mint_paneled_door | Mint Paneled Door | Mint Paneled Door | | sa_decor |
+| 门 | security_door | Security Door | Security Door | | sa_decor |
+| 门 | small_garage_door | Metal Small Garage Door | Metal Small Garage Door | | sa_decor |
+| 门 | small_garage_door_metal_green | Green Metal Small Garage Door | Green Metal Small Garage Door | | sa_decor |
+| 门 | small_garage_door_metal_red | Red Metal Small Garage Door | Red Metal Small Garage Door | | sa_decor |
+| 门 | small_garage_door_white | White Small Garage Door | White Small Garage Door | | sa_decor |
+| 门 | urban_fence_door | Urban Fence Door | Urban Fence Door | | sa_decor |
+| 门 | white_full_glass_door | White Full Glass Door | White Full Glass Door | | sa_decor |
+| 门 | white_plain_door | White Plain Door | White Plain Door | | sa_decor |
+| 门 | white_stained_glass_door | White Stained Glass Door | White Stained Glass Door | | sa_decor |
+| 门 | yellow_security_door | Yellow Security Door | Yellow Security Door | | sa_decor |
\ No newline at end of file
diff --git a/幸存者军火库-方块总表.xlsx b/幸存者军火库-方块总表.xlsx
new file mode 100644
index 0000000..43e89c7
Binary files /dev/null and b/幸存者军火库-方块总表.xlsx differ
diff --git a/幸存者军火库-物品总表.md b/幸存者军火库-物品总表.md
new file mode 100644
index 0000000..7e7797e
--- /dev/null
+++ b/幸存者军火库-物品总表.md
@@ -0,0 +1,239 @@
+# 幸存者军火库-物品总表
+
+共 219 条。
+
+> 范围:sa_core 材料/工具/织物/化工/电子、sa_survival 草药/医疗/背包/服装(食物见食物表)、sa_combat 图纸/弹药/投掷物/防具(武器见武器表)、sa-decor 工具与安全物品。
+
+| 来源模组 | 分类 | 裸ID | 英文名 | 中文名 | 备注 |
+|---|---|---|---|---|---|
+
+**sa_core**
+
+| sa_core | 材料 | metal_scrap | Metal Scrap | 金属废料 | 回收机核心产出 |
+| sa_core | 材料 | scrap_nugget | Scrap Nugget | 废料粒 | 废料小颗粒 |
+| sa_core | 材料 | electric_scrap | Electric Scrap | 电子废料 | 电器类回收产出 |
+| sa_core | 材料 | nails | Nails | 钉子 | 基础紧固件 |
+| sa_core | 材料 | screws | Screws | 螺丝 | 基础紧固件 |
+| sa_core | 材料 | paperclip | Paperclip | 回形针 | 可用废料粒/铁粒制作 |
+| sa_core | 材料 | wire | Wire | 电线 | 通用线材 |
+| sa_core | 材料 | copper_wire | Copper Wire | 铜线 | 导电 |
+| sa_core | 材料 | insulated_copper_wire | Insulated Copper Cable | 绝缘铜线 | 橡胶+铜线制作 |
+| sa_core | 材料 | metal_pipe | Metal Pipe | 金属管 | 通用管材 |
+| sa_core | 材料 | saw_blade | Saw Blade | 锯片 | 武器/锯类制作 |
+| sa_core | 材料 | metal_sheet | Metal Sheet | 金属板 | 锤+铁锭锻打 |
+| sa_core | 材料 | small_metal_sheet | Small Metal Sheet | 小金属板 | 金属板分解×4 |
+| sa_core | 工具 | mortar_and_pestle | Mortar and Pestle | 研钵 | 研磨用 |
+| sa_core | 材料 | hair_gel | Hair Gel | 发胶 | 日用品 |
+| sa_core | 材料 | ashen_steel_mixture | Ashen Steel Mixture | 灰钢混合物 | 灰钢锭前置 |
+| sa_core | 材料 | ashen_steel_ingot | Ashen Steel Ingot | 灰钢锭 | 高级材料 |
+| sa_core | 材料 | ashen_steel_nugget | Ashen Steel Nugget | 灰钢粒 | 灰钢锭分解 |
+| sa_core | 材料 | ashen_steel_rod | Ashen Steel Rod | 灰钢棒 | 高级棒材 |
+| sa_core | 材料 | diamond_nugget | Diamond Nugget | 钻石粒 | 钻石合成 |
+| sa_core | 材料 | netherite_nugget | Netherite Nugget | 下界合金粒 | 下界合金碎片合成 |
+| sa_core | 容器 | empty_can | Empty Can | 空罐 | |
+| sa_core | 容器 | tin_can | Tin Can | 锡罐 | |
+| sa_core | 容器 | dented_can | Dented Can | 凹陷罐 | |
+| sa_core | 容器 | empty_glass_bottle | Empty Glass Bottle | 空玻璃瓶 | |
+| sa_core | 容器 | jerry_can | Jerry Can | 油桶 | 可装 1000mB 液体,容量 tooltip |
+| sa_core | 容器 | gasoline_bucket | Gasoline Bucket | 汽油桶 | 桶装汽油 |
+| sa_core | 容器 | water_bottle | Water Bottle | 水瓶 | |
+| sa_core | 容器 | water_bottle_empty | Empty Water Bottle | 空水瓶 | |
+| sa_core | 容器 | dirty_water_bottle | Dirty Water Bottle | 脏水瓶 | 饮用会致饥饿 |
+| sa_core | 容器 | lunch_bag | Lunch Bag | 午餐袋 | |
+| sa_core | 容器 | plastic_bag | Plastic Bag | 塑料袋 | Bundle 式储存 |
+| sa_core | 容器 | money | Money | 钱 | |
+| sa_core | 容器 | money_bundle | Money Bundle | 成捆钱 | |
+| sa_core | 功能 | generator_manual | Generator Manual | 发电机手册 | 阅读并完成 3 项训练才能操作汽油发电机 |
+| sa_core | 织物 | cloth | Cloth | 布料 | |
+| sa_core | 织物 | rags | Rags | 破布 | |
+| sa_core | 织物 | dirty_rags | Dirty Rags | 脏破布 | |
+| sa_core | 织物 | sterilized_rags | Sterilized Rags | 消毒破布 | 使用后返还脏破布 |
+| sa_core | 织物 | dish_towel | Dish Towel | 洗碗布 | |
+| sa_core | 织物 | fiber_fabric | Fiber Fabric | 纤维织物 | |
+| sa_core | 织物 | polyester | Polyester | 涤纶 | |
+| sa_core | 织物 | polyester_thread | Polyester Thread | 涤纶线 | |
+| sa_core | 织物 | thread | Thread | 线 | |
+| sa_core | 织物 | kevlar | Kevlar | 凯夫拉 | 防弹材料 |
+| sa_core | 织物 | kevlar_thread | Kevlar Thread | 凯夫拉线 | |
+| sa_core | 织物 | leather_strip | Leather Strip | 皮革条 | |
+| sa_core | 织物 | fabric_patch | Fabric Patch | 织物补丁 | |
+| sa_core | 化工 | charcoal_dust | Charcoal Dust | 木炭粉 | |
+| sa_core | 化工 | sulfur | Sulfur | 硫磺 | |
+| sa_core | 化工 | sulfur_dust | Sulfur Dust | 硫磺粉 | |
+| sa_core | 化工 | fermented_mash | Fermented Mash | 发酵浆 | 酿酒前置 |
+| sa_core | 化工 | cardboard | Cardboard | 纸板 | |
+| sa_core | 化工 | plastic | Plastic | 塑料 | |
+| sa_core | 化工 | plastic_plate | Plastic Plate | 塑料板 | |
+| sa_core | 化工 | rubber | Rubber | 橡胶 | |
+| sa_core | 化工 | scrap_wood | Scrap Wood | 碎木料 | 2 木板合成 |
+| sa_core | 化工 | alcohol | Alcohol | 酒精 | |
+| sa_core | 化工 | rubbing_alcohol | Rubbing Alcohol | 外用酒精 | |
+| sa_core | 化工 | cleaning_liquid | Cleaning Liquid | 清洁液 | |
+| sa_core | 化工 | antiseptic | Antiseptic | 消毒剂 | |
+| sa_core | 化工 | duct_tape | Duct Tape | 胶带 | |
+| sa_core | 化工 | adhesive_tape | Adhesive Tape | 胶粘带 | |
+| sa_core | 化工 | glue | Glue | 胶水 | |
+| sa_core | 化工 | medical_adhesive | Medical Adhesive | 医用粘合剂 | |
+| sa_core | 工具 | can_opener | Can Opener | 开罐器 | 开罐头必需 |
+| sa_core | 工具 | pliers | Pliers | 钳子 | 装配工具 |
+| sa_core | 工具 | screwdrive | Screwdriver | 螺丝刀 | 装配工具 |
+| sa_core | 工具 | crowbar | Crowbar | 撬棍 | 可当临时近战武器 |
+| sa_core | 工具 | claw_hammer | Claw Hammer | 羊角锤 | 装配工具 |
+| sa_core | 工具 | bolt_cutter | Bolt Cutter | 断线钳 | |
+| sa_core | 工具 | wrench | Adjustable Wrench | 活动扳手 | 装配工具 |
+| sa_core | 工具 | metal_saw | Metal Saw | 金属锯 | |
+| sa_core | 工具 | matchbox | Matchbox | 火柴盒 | 可点燃方块与火 |
+| sa_core | 工具 | scissor | Scissors | 剪刀 | 可当剪刀用 |
+| sa_core | 工具 | saw | Saw | 手锯 | 装配工具 |
+| sa_core | 工具 | scrap_pickaxe | Scrap Pickaxe | 废料镐 | |
+| sa_core | 工具 | scrap_axe | Scrap Axe | 废料斧 | |
+| sa_core | 工具 | scrap_shovel | Scrap Shovel | 废料铲 | |
+| sa_core | 工具 | scrap_hoe | Scrap Hoe | 废料锄 | |
+| sa_core | 工具 | scrap_multitool | Scrap Multitool | 废料万能工具 | 镐+斧+铲三合一 |
+| sa_core | 工具 | ashen_steel_pickaxe | Ashen Steel Pickaxe | 灰钢镐 | |
+| sa_core | 工具 | ashen_steel_axe | Ashen Steel Axe | 灰钢斧 | |
+| sa_core | 工具 | ashen_steel_shovel | Ashen Steel Shovel | 灰钢铲 | |
+| sa_core | 工具 | ashen_steel_hoe | Ashen Steel Hoe | 灰钢锄 | |
+| sa_core | 工具 | ashen_steel_multitool | Ashen Steel Multitool | 灰钢万能工具 | 镐+斧+铲三合一 |
+| sa_core | 电子 | battery | Battery | 电池 | 供电 |
+| sa_core | 电子 | camera | Camera | 相机 | |
+| sa_core | 电子 | cellphone | Cellphone | 手机 | C4 配方原料 |
+| sa_core | 电子 | classic_watch | Classic Watch | 经典手表 | |
+
+**sa_survival**
+
+| sa_survival | 草药 | crushed_green_herb | Crushed Green Herb | 研磨绿草药 | |
+| sa_survival | 草药 | crushed_red_herb | Crushed Red Herb | 研磨红草药 | |
+| sa_survival | 草药 | crushed_blue_herb | Crushed Blue Herb | 研磨蓝草药 | |
+| sa_survival | 草药 | crushed_yellow_herb | Crushed Yellow Herb | 研磨黄草药 | |
+| sa_survival | 草药 | mixed_gg_herbs | Mixed GG Herbs | 混合GG草药 | 绿+绿 |
+| sa_survival | 草药 | mixed_ggg_herbs | Mixed GGG Herbs | 混合GGG草药 | 绿×3 |
+| sa_survival | 草药 | mixed_gr_herbs | Mixed GR Herbs | 混合GR草药 | 绿+红 |
+| sa_survival | 草药 | mixed_ggr_herbs | Mixed GGR Herbs | 混合GGR草药 | 绿+绿+红 |
+| sa_survival | 草药 | mixed_gb_herbs | Mixed GB Herbs | 混合GB草药 | 绿+蓝 |
+| sa_survival | 草药 | mixed_ggb_herbs | Mixed GGB Herbs | 混合GGB草药 | 绿+绿+蓝 |
+| sa_survival | 草药 | mixed_gy_herbs | Mixed GY Herbs | 混合GY草药 | 绿+黄 |
+| sa_survival | 草药 | mixed_ggy_herbs | Mixed GGY Herbs | 混合GGY草药 | 绿+绿+黄 |
+| sa_survival | 草药 | mixed_gyb_herbs | Mixed GYB Herbs | 混合GYB草药 | 绿+黄+蓝 |
+| sa_survival | 草药 | mixed_gry_herbs | Mixed GRY Herbs | 混合GRY草药 | 绿+红+黄 |
+| sa_survival | 草药 | mixed_grb_herbs | Mixed GRB Herbs | 混合GRB草药 | 绿+红+蓝 |
+| sa_survival | 草药 | mixed_rb_herbs | Mixed RB Herbs | 混合RB草药 | 红+蓝 |
+| sa_survival | 医疗 | bandage | Bandage | 绷带 | 止血/治疗 |
+| sa_survival | 医疗 | bandage_sterilized | Sterilized Bandage | 消毒绷带 | 止血等级更高 |
+| sa_survival | 医疗 | plaster | Plaster | 创可贴 | 轻度治疗 |
+| sa_survival | 医疗 | splint | Splint | 夹板 | 接骨 |
+| sa_survival | 医疗 | alcohol_wipes | Alcohol Wipes | 酒精湿巾 | 消毒 |
+| sa_survival | 医疗 | blood_bag | Blood Bag | 血袋 | 补血 |
+| sa_survival | 医疗 | blood_bag_empty | Empty Blood Bag | 空血袋 | 可装血 |
+| sa_survival | 医疗 | first_aid_kit | First Aid Kit | 急救包 | 高级治疗 |
+| sa_survival | 医疗 | first_aid_spray | First Aid Spray | 急救喷雾 | 治疗 |
+| sa_survival | 医疗 | adrenaline | Adrenaline | 肾上腺素 | Buff |
+| sa_survival | 医疗 | morphine | Morphine | 吗啡 | 强效止痛 |
+| sa_survival | 医疗 | stim_shot | Stim Shot | 刺激针 | 注射针 |
+| sa_survival | 医疗 | painkiller | Painkiller | 止痛药 | 止痛 |
+| sa_survival | 医疗 | painkiller_pills | Painkiller Pills | 止痛药丸 | 口服止痛 |
+| sa_survival | 医疗 | stamina_boost | Stamina Boost | 耐力增强 | Buff |
+| sa_survival | 医疗 | stamina_boost_pills | Stamina Boost Pills | 耐力增强药丸 | 口服 Buff |
+| sa_survival | 医疗 | tube | Tube | 管子 | 输液管类 |
+| sa_survival | 杂物 | garbage_bag | Garbage Bag | 垃圾袋 | |
+| sa_survival | 背包 | leather_backpack | Leather Backpack | 皮革背包 | 容量 12 |
+| sa_survival | 背包 | satchel_black | Black Satchel | 黑色挎包 | 容量 15 |
+| sa_survival | 背包 | satchel_brown | Brown Satchel | 棕色挎包 | 容量 15 |
+| sa_survival | 背包 | satchel_green | Green Satchel | 绿色挎包 | 容量 15 |
+| sa_survival | 背包 | satchel_white | White Satchel | 白色挎包 | 容量 15 |
+| sa_survival | 背包 | small_backpack_black | Small Black Backpack | 黑色小背包 | 容量 18 |
+| sa_survival | 背包 | small_backpack_blue | Small Blue Backpack | 蓝色小背包 | 容量 18 |
+| sa_survival | 背包 | small_backpack_green | Small Green Backpack | 绿色小背包 | 容量 18 |
+| sa_survival | 背包 | small_backpack_pink | Small Pink Backpack | 粉色小背包 | 容量 18 |
+| sa_survival | 背包 | duffel_bag_black | Black Duffel Bag | 黑色旅行袋 | 容量 30 |
+| sa_survival | 背包 | duffel_bag_blue | Blue Duffel Bag | 蓝色旅行袋 | 容量 30 |
+| sa_survival | 背包 | duffel_bag_red | Red Duffel Bag | 红色旅行袋 | 容量 30 |
+| sa_survival | 背包 | duffel_bag_yellow | Yellow Duffel Bag | 黄色旅行袋 | 容量 30 |
+| sa_survival | 背包 | hiking_backpack_black | Black Hiking Backpack | 黑色登山包 | 容量 36 |
+| sa_survival | 背包 | hiking_backpack_blue | Blue Hiking Backpack | 蓝色登山包 | 容量 36 |
+| sa_survival | 背包 | hiking_backpack_green | Green Hiking Backpack | 绿色登山包 | 容量 36 |
+| sa_survival | 背包 | hiking_backpack_red | Red Hiking Backpack | 红色登山包 | 容量 36 |
+| sa_survival | 背包 | military_backpack_desert | Desert Military Backpack | 沙漠军用背包 | 容量 42 |
+| sa_survival | 背包 | military_backpack_blue | Blue Military Backpack | 蓝色军用背包 | 容量 42 |
+| sa_survival | 背包 | military_backpack_camo | Camo Military Backpack | 迷彩军用背包 | 容量 42 |
+| sa_survival | 背包 | military_backpack_green | Green Military Backpack | 绿色军用背包 | 容量 42 |
+| sa_survival | 服装 | blue_jeans | Blue Jeans | 蓝色牛仔裤 | 护腿位 GeckoClothing |
+| sa_survival | 服装 | green_t_shirt | Green T-Shirt | 绿色T恤 | 胸甲位 GeckoClothing |
+| sa_survival | 服装 | leon_s_kennedy_jacket | Leon S. Kennedy Jacket | 里昂夹克 | 胸甲位,钻石级 |
+| sa_survival | 电子 | flashlight | Flashlight | 手电筒 | 需电池,右键开关 |
+
+**sa_combat**
+
+| sa_combat | 图纸 | blueprint | Blueprint | 空白蓝图 | 可通过数据包/NBT 定制解锁 |
+| sa_combat | 图纸 | lucille_blueprint | Lucille Blueprint | 露西尔蓝图 | 解锁 露西尔(棒球棍+铁丝) |
+| sa_combat | 图纸 | gauntlet_blueprint | Gauntlet Blueprint | 拳套蓝图 | 解锁 拳套 |
+| sa_combat | 图纸 | chainsaw_sword_blueprint | Chainsaw Sword Blueprint | 电锯剑蓝图 | 解锁 电锯剑 |
+| sa_combat | 图纸 | double_fire_axe_hammer_blueprint | Double Fire Axe Hammer Blueprint | 双头消防斧蓝图 | 解锁 双头消防斧锤 |
+| sa_combat | 图纸 | tetanus_king_blueprint | Tetanus King Blueprint | 破伤风之王蓝图 | 解锁 破伤风之王 |
+| sa_combat | 图纸 | improvised_great_axe_blueprint | Improvised Great Axe Blueprint | 简易巨斧蓝图 | 解锁 简易巨斧 |
+| sa_combat | 图纸 | brutalizer_blueprint | Brutalizer Blueprint | 残暴者蓝图 | 解锁 残暴者 |
+| sa_combat | 图纸 | land_mine_blueprint | Land Mine Blueprint | 地雷蓝图 | 解锁 地雷 |
+| sa_combat | 图纸 | c4_blueprint | C4 Blueprint | C4蓝图 | 解锁 C4 |
+| sa_combat | 图纸 | tactical_crossbow_blueprint | Tactical Crossbow Blueprint | 战术弩蓝图 | 解锁 战术弩 |
+| sa_combat | 图纸 | compound_bow_blueprint | Compound Bow Blueprint | 复合弓蓝图 | 解锁 复合弓 |
+| sa_combat | 图纸 | hunting_knife_blueprint | Hunting Knife Blueprint | 猎刀蓝图 | 解锁 猎刀 |
+| sa_combat | 图纸 | katana_blueprint | Katana Blueprint | 武士刀蓝图 | 解锁 武士刀 |
+| sa_combat | 图纸 | police_shield_blueprint | Police Shield Blueprint | 防暴盾蓝图 | 解锁 防暴盾 |
+| sa_combat | 生物 | merchant_spawn_egg | Merchant Spawn Egg | 商人刷怪蛋 | 生成流浪商人型交易者 |
+| sa_combat | 材料 | weapon_parts | Weapon Parts | 武器零件 | 高级武器/装备通用材料 |
+| sa_combat | 维修 | repair_kit_i | Repair Kit I | 维修套件I | 低阶武器维修 |
+| sa_combat | 维修 | repair_kit_ii | Repair Kit II | 维修套件II | 中阶武器维修 |
+| sa_combat | 维修 | repair_kit_iii | Repair Kit III | 维修套件III | 高阶武器维修 |
+| sa_combat | 弹药 | tactical_bolt | Tactical Bolt | 战术弩箭 | 弩用 |
+| sa_combat | 弹药 | improvised_bolt | Improvised Bolt | 简易弩箭 | 弩用 |
+| sa_combat | 投掷物 | frag_grenade | Frag Grenade | 破片手雷 | 爆炸+破片 |
+| sa_combat | 投掷物 | incendiary_grenade | Incendiary Grenade | 燃烧手雷 | 燃烧 |
+| sa_combat | 投掷物 | smoke_grenade | Smoke Grenade | 烟雾弹 | 烟雾掩护 |
+| sa_combat | 投掷物 | pipe_bomb | Pipe Bomb | 管状炸弹 | 爆炸 |
+| sa_combat | 投掷物 | nail_bomb | Nail Bomb | 钉炸弹 | 爆炸+飞钉 |
+| sa_combat | 投掷物 | molotov | Molotov | 燃烧瓶 | 酒精+玻璃瓶 |
+| sa_combat | 引爆 | remote_detonator | Remote Detonator | 遥控引爆器 | 引爆 C4 |
+| sa_combat | 杂物 | currency_wallet | Legacy Wallet (Disabled) | 旧钱包 | 已禁用 |
+| sa_combat | 装甲 | armor_plate_i | Armor Plate I | 装甲板I | 镶嵌/装备 |
+| sa_combat | 装甲 | armor_plate_ii | Armor Plate II | 装甲板II | 镶嵌/装备 |
+| sa_combat | 装甲 | armor_plate_iii | Armor Plate III | 装甲板III | 镶嵌/装备 |
+| sa_combat | 防弹衣 | black_tactical_vest | Black Tactical Vest | 黑色战术背心 | 胸前防护 |
+| sa_combat | 防弹衣 | police_vest | Police Vest | 警用背心 | 胸前防护 |
+| sa_combat | 防弹衣 | umbrella_vest | Umbrella Vest | 伞公司背心 | 胸前防护 |
+| sa_combat | 警服 | rpd_police_hat | RPD Police Hat | RPD警帽 | |
+| sa_combat | 警服 | rpd_police_uniform | RPD Police Uniform | RPD警服 | |
+| sa_combat | 警服 | rpd_police_pants | RPD Police Pants | RPD警裤 | |
+| sa_combat | 警服 | rpd_police_boots | RPD Police Boots | RPD警靴 | |
+| sa_combat | 制服 | umbrella_corp_helmet | Umbrella Corp Helmet | 伞公司头盔 | |
+| sa_combat | 制服 | umbrella_corp_uniform | Umbrella Corp Uniform | 伞公司制服 | |
+| sa_combat | 制服 | umbrella_corp_pants | Umbrella Corp Pants | 伞公司裤 | |
+| sa_combat | 制服 | umbrella_corp_boots | Umbrella Corp Boots | 伞公司靴 | |
+| sa_combat | 废料甲 | scrap_helmet | Scrap Helmet | 废料头盔 | |
+| sa_combat | 废料甲 | scrap_chestplate | Scrap Chestplate | 废料胸甲 | |
+| sa_combat | 废料甲 | scrap_leggings | Scrap Leggings | 废料护腿 | |
+| sa_combat | 废料甲 | scrap_boots | Scrap Boots | 废料靴 | |
+| sa_combat | 防化服 | improvised_hazmat_helmet | Improvised Hazmat Hood | 简易防化头罩 | |
+| sa_combat | 防化服 | improvised_hazmat_suit | Improvised Hazmat Suit | 简易防化服 | |
+| sa_combat | 防化服 | improvised_hazmat_pants | Improvised Hazmat Pants | 简易防化裤 | |
+| sa_combat | 防化服 | improvised_hazmat_boots | Improvised Hazmat Boots | 简易防化靴 | |
+| sa_combat | 消防服 | firefighter_helmet | Firefighter Helmet | 消防头盔 | |
+| sa_combat | 消防服 | firefighter_jacket | Firefighter Jacket | 消防夹克 | |
+| sa_combat | 消防服 | firefighter_pants | Firefighter Pants | 消防裤 | |
+| sa_combat | 消防服 | firefighter_boots | Firefighter Boots | 消防靴 | |
+
+**sa_decor**
+
+| sa_decor | 工具 | variation_tool | Variation Tool | 变体工具 | 切换方块变体 |
+| sa_decor | 工具 | loot_crate_wand | Loot Crate Wand | 战利品箱魔杖 | 打开战利品配置 GUI |
+| sa_decor | 工具 | rotation_wand | Rotation Wand | 旋转魔杖 | 右键旋转方块视觉朝向 |
+| sa_decor | 工具 | flare_gun | Flare Gun | 信号枪 | 发射信号弹 |
+| sa_decor | 安全 | lock | Padlock | 挂锁 | 锁门 |
+| sa_decor | 安全 | lockpick | Lockpick | 开锁器 | 开挂锁 |
+| sa_decor | 安全 | broken_padlock | Broken Padlock | 损坏挂锁 | 开锁失败残留 |
+| sa_decor | 安全 | key | Key | 钥匙 | 开对应锁 |
+| sa_decor | 安全 | keycard | Keycard | 门禁卡 | 开门禁读卡器 |
+| sa_decor | 工具 | linking_tool | Linking Tool | 连接工具 | 电缆/电线连接,军火工作台可造 |
+| sa_decor | 工具 | structure_access_tool | Structure Access Tool | 结构访问工具 | 访问结构锚点 |
+| sa_decor | 开发 | fake_hands | Fake Hands | 隐藏手(开发) | 无显示名 |
+| sa_decor | 开发 | barricade_construction_view | Barricade Construction View | 围挡建造视角(开发) | 无显示名 |
+| sa_decor | 开发 | crowbar_force_open_view | Crowbar Force Open View | 撬棍强制开启视角(开发) | 无显示名 |
\ No newline at end of file
diff --git a/幸存者军火库-物品总表.xlsx b/幸存者军火库-物品总表.xlsx
new file mode 100644
index 0000000..150c587
Binary files /dev/null and b/幸存者军火库-物品总表.xlsx differ
diff --git a/幸存者军火库武器数据.md b/幸存者军火库武器数据.md
new file mode 100644
index 0000000..4dcc01d
--- /dev/null
+++ b/幸存者军火库武器数据.md
@@ -0,0 +1,119 @@
+# 幸存者军火库武器数据统计
+
+> 数据来源:`.tmp_sa_survival/sa-survival`(WeaponDefinitions.java / ModItems.java / 语言文件),共 **57** 件武器。
+
+## 概览
+
+| 指标 | 数值 |
+|---|---|
+| 武器总数 | **57** |
+| 分类 | 远程×4、盾牌×5、钝器×20、刀具×11、长柄×5、斧类×5、唯一×7 |
+| 品质分布 | 普通×35、稀有×3、罕见×10、史诗×1、传说×7、唯一×1 |
+| 材质分布 | 木质×7、废料×17、强化×17、军用×7、传说×9 |
+| 近战武器平均最终伤害 | 6.7 |
+| 最高伤害 | 双头消防斧锤 16.8(传说) |
+| 最低伤害 | 扫帚 / 木板 2.0 |
+| 最高耐久 | 双头消防斧锤 3200 |
+| 材质伤害加成 | 木质+0、废料+0.1、强化+0.4、军用+0.6、传说+0.8 |
+| 实际攻速 | 4.0 + 攻速修正(如 -2.2 → 1.8 次/秒) |
+
+## 武器明细
+
+### 远程(4)
+
+| 名称 | 英文ID | 品质 | 分类 | 材质 | 基础伤害 | 最终伤害 | 攻速修正 | 实际攻速(次/秒) | 耐久 | 特效(命中) | 备注 |
+|---|---|---|---|---|---|---|---|---|---|---|---|
+| 战术弩 | tactical_crossbow | 罕见 | 远程 | 强化 | 8 | 8.4 | -2.8 | 1.2 | 450 | — | 可装瞄准镜/自动机构附件 |
+| 简易弩 | improvised_crossbow | 稀有 | 远程 | 废料 | 6 | 6.1 | -3.0 | 1.0 | 230 | — | 可装简易瞄准附件 |
+| 射钉枪 | nail_gun | 罕见 | 远程 | 强化 | 1 | 1.4 | -2.6 | 1.4 | 380 | — | 全自动,可装枪托/消音器/扩容弹匣 |
+| 复合弓 | compound_bow | 罕见 | 远程 | 强化 | 8 | 8.4 | -2.8 | 1.2 | 520 | — | 满拉伤害,随蓄力缩放 |
+
+### 盾牌(5)
+
+| 名称 | 英文ID | 品质 | 分类 | 材质 | 基础伤害 | 最终伤害 | 攻速修正 | 实际攻速(次/秒) | 耐久 | 特效(命中) | 备注 |
+|---|---|---|---|---|---|---|---|---|---|---|---|
+| 废料盾 | scrap_shield | 稀有 | 盾牌 | 废料 | 0 | 0 | 0 | — | 320 | — | 防御型 |
+| 垃圾桶盖盾 | trash_lid_shield | 普通 | 盾牌 | 废料 | 0 | 0 | 0 | — | 180 | — | 防御型 |
+| 防暴盾 | police_shield | 罕见 | 盾牌 | 强化 | 0 | 0 | 0 | — | 520 | — | 防御型 |
+| 停车牌盾 | stop_sign_shield | 稀有 | 盾牌 | 强化 | 0 | 0 | 0 | — | 440 | — | 防御型 |
+| 井盖盾 | manhole_shield | 罕见 | 盾牌 | 强化 | 0 | 0 | 0 | — | 700 | — | 防御型 |
+
+### 钝器(20)
+
+| 名称 | 英文ID | 品质 | 分类 | 材质 | 基础伤害 | 最终伤害 | 攻速修正 | 实际攻速(次/秒) | 耐久 | 特效(命中) | 备注 |
+|---|---|---|---|---|---|---|---|---|---|---|---|
+| 扫帚 | broom | 普通 | 钝器 | 木质 | 2 | 2.0 | -2.2 | 1.8 | 90 | — | |
+| 棒球棍 | baseball_bat | 罕见 | 钝器 | 废料 | 5 | 5.1 | -2.2 | 1.8 | 190 | 冲击 I | 可改装 |
+| 重锤 | heavy_hammer | 罕见 | 钝器 | 强化 | 11 | 11.4 | -2.9 | 1.1 | 1600 | 震荡 II + 冲击 I | 不可改装 |
+| 管钳 | pipe_wrench | 普通 | 钝器 | 强化 | 5 | 5.4 | -2.6 | 1.4 | 300 | 震荡 I | 可改装 |
+| 铁管 | pipe | 普通 | 钝器 | 废料 | 4 | 4.1 | -2.2 | 1.8 | 180 | 冲击 I | 可改装 |
+| 停车标志牌 | stop_sign | 普通 | 钝器 | 强化 | 13 | 13.4 | -3.2 | 0.8 | 520 | 冲击 II | |
+| 高尔夫球杆 | golf_stick | 普通 | 钝器 | 废料 | 4 | 4.1 | -2.0 | 2.0 | 140 | 冲击 I | |
+| 铝制棒球棍 | aluminum_baseball_bat | 罕见 | 钝器 | 强化 | 6 | 6.4 | -2.1 | 1.9 | 320 | 冲击 I / 震荡 I | 随机触发其一 |
+| 警棍 | police_baton | 普通 | 钝器 | 军用 | 5 | 5.6 | -2.0 | 2.0 | 500 | 震荡 II | |
+| 擀面杖 | rolling_pin | 普通 | 钝器 | 木质 | 3 | 3.0 | -2.0 | 2.0 | 100 | 冲击 I | |
+| 废料锤 | scrap_hammer | 普通 | 钝器 | 废料 | 8 | 8.1 | -2.6 | 1.4 | 500 | 震荡 II + 流血 I | |
+| 大锤 | sledgehammer | 罕见 | 钝器 | 强化 | 13 | 13.4 | -3.0 | 1.0 | 2500 | 震荡 II + 冲击 II | 可装榴弹附件 |
+| 木吉他 | acoustic_guitar | 普通 | 钝器 | 木质 | 4 | 4.0 | -2.2 | 1.8 | 120 | 冲击 I | |
+| 电吉他 | electric_guitar | 普通 | 钝器 | 强化 | 5 | 5.4 | -2.4 | 1.6 | 250 | 电击 I | |
+| 键盘吉他 | keytar | 普通 | 钝器 | 废料 | 5 | 5.1 | -2.4 | 1.6 | 200 | 震荡 I | |
+| 指虎 | knuckle_punch | 普通 | 钝器 | 废料 | 4 | 4.1 | -1.6 | 2.4 | 180 | 冲击 I | |
+| 拳击手套 | boxing_gloves | 普通 | 钝器 | 废料 | 3 | 3.1 | -1.4 | 2.6 | 160 | 震荡 I | 可装刀片附件 |
+| 木板 | plank | 普通 | 钝器 | 木质 | 2 | 2.0 | -1.8 | 2.2 | 70 | — | |
+| 钉板 | nailed_plank | 普通 | 钝器 | 木质 | 4 | 4.0 | -2.2 | 1.8 | 120 | 流血 I | |
+| 杠铃 | barbell | 普通 | 钝器 | 强化 | 8 | 8.4 | -3.2 | 0.8 | 380 | 冲击 I / 震荡 II | 随机触发其一 |
+
+### 刀具(11)
+
+| 名称 | 英文ID | 品质 | 分类 | 材质 | 基础伤害 | 最终伤害 | 攻速修正 | 实际攻速(次/秒) | 耐久 | 特效(命中) | 备注 |
+|---|---|---|---|---|---|---|---|---|---|---|---|
+| 厨房刀 | kitchen_knife | 普通 | 刀具 | 废料 | 4 | 4.1 | -1.8 | 2.2 | 190 | 流血 I | |
+| 战斗刀 | combat_knife | 普通 | 刀具 | 军用 | 5 | 5.6 | -2.0 | 2.0 | 800 | 流血 I | |
+| 剁肉刀 | cleaver | 普通 | 刀具 | 强化 | 4 | 4.4 | -2.0 | 2.0 | 230 | 流血 II | |
+| 铁砍刀 | iron_machete | 普通 | 刀具 | 强化 | 6 | 6.4 | -2.4 | 1.6 | 320 | 流血 II | |
+| 灰烬砍刀 | ashen_machete | 普通 | 刀具 | 传说 | 7 | 7.8 | -2.4 | 1.6 | 600 | 流血 III | |
+| 废料刀 | scrap_knife | 普通 | 刀具 | 废料 | 3 | 3.1 | -1.8 | 2.2 | 140 | 流血 I | |
+| 猎刀 | hunting_knife | 罕见 | 刀具 | 军用 | 6 | 6.6 | -2.1 | 1.9 | 700 | 流血 II | 不可改装 |
+| 武士刀 | katana | 普通 | 刀具 | 军用 | 8 | 8.6 | -1.8 | 2.2 | 1500 | 流血 III | |
+| 碎玻璃瓶 | broken_glass_bottle | 普通 | 刀具 | 废料 | 3 | 3.1 | -1.8 | 2.2 | 80 | 流血 I | |
+| 废料钉拳 | scrap_nail_punch | 普通 | 刀具 | 废料 | 4 | 4.1 | -1.6 | 2.4 | 180 | 流血 I / 冲击 I | 随机触发其一 |
+| 电击棒 | stun_baton | 普通 | 刀具 | 军用 | 5 | 5.6 | -2.0 | 2.0 | 500 | 电击 I / 震荡 I | 随机触发其一 |
+
+### 长柄(5)
+
+| 名称 | 英文ID | 品质 | 分类 | 材质 | 基础伤害 | 最终伤害 | 攻速修正 | 实际攻速(次/秒) | 耐久 | 特效(命中) | 备注 |
+|---|---|---|---|---|---|---|---|---|---|---|---|
+| 厨房刀长矛 | kitchen_knife_spear | 普通 | 长柄 | 废料 | 5 | 5.1 | -2.6 | 1.4 | 180 | 流血 I | |
+| 木矛 | wooden_spear | 普通 | 长柄 | 木质 | 4 | 4.0 | -2.6 | 1.4 | 100 | — | |
+| 废料刀长矛 | scrap_knife_spear | 普通 | 长柄 | 废料 | 5 | 5.1 | -2.6 | 1.4 | 180 | 流血 I | |
+| 碎玻璃长矛 | broken_glass_spear | 普通 | 长柄 | 废料 | 5 | 5.1 | -2.6 | 1.4 | 140 | 流血 II | |
+| 耙子 | rake | 普通 | 长柄 | 木质 | 3 | 3.0 | -2.6 | 1.4 | 90 | 流血 I | |
+
+### 斧类(5)
+
+| 名称 | 英文ID | 品质 | 分类 | 材质 | 基础伤害 | 最终伤害 | 攻速修正 | 实际攻速(次/秒) | 耐久 | 特效(命中) | 备注 |
+|---|---|---|---|---|---|---|---|---|---|---|---|
+| 锯片斧 | sawblade_axe | 普通 | 斧类 | 强化 | 8 | 8.4 | -2.8 | 1.2 | 250 | 流血 II / 冲击 I | 随机触发其一 |
+| 消防斧 | fire_axe | 史诗 | 斧类 | 军用 | 8 | 8.6 | -3.0 | 1.0 | 1120 | 流血 I / 冲击 I | 随机触发其一,可砍木 |
+| 冰镐 | ice_axe | 普通 | 斧类 | 强化 | 6 | 6.4 | -2.6 | 1.4 | 300 | 震荡 I | 镐类,可挖石 |
+| 战术战斧 | tactical_tomahawk | 普通 | 斧类 | 军用 | 8 | 8.6 | -2.2 | 1.8 | 1300 | 流血 II | 可投掷 |
+| 电锯 | chainsaw | 传说 | 斧类 | 传说 | 10 | 10.8 | -3.0 | 1.0 | 1800 | — | 需汽油,持续攻击,可伐木 |
+
+### 唯一(7)
+
+| 名称 | 英文ID | 品质 | 分类 | 材质 | 基础伤害 | 最终伤害 | 攻速修正 | 实际攻速(次/秒) | 耐久 | 特效(命中) | 备注 |
+|---|---|---|---|---|---|---|---|---|---|---|---|
+| 残暴者 | brutalizer | 传说 | 唯一 | 传说 | 9 | 9.8 | -2.3 | 1.7 | 2000 | 流血 III | |
+| 破伤风之王 | tetanus_king | 传说 | 唯一 | 传说 | 13 | 13.8 | -2.8 | 1.2 | 2800 | 流血 III | |
+| 简易巨斧 | improvised_great_axe | 传说 | 唯一 | 传说 | 14 | 14.8 | -3.0 | 1.0 | 2700 | 流血 II + 冲击 I | |
+| 双头消防斧锤 | double_fire_axe_hammer | 传说 | 唯一 | 传说 | 16 | 16.8 | -3.2 | 0.8 | 3200 | 流血 II + 震荡 II + 冲击 II | |
+| 电锯剑 | chainsaw_sword | 传说 | 唯一 | 传说 | 10 | 10.8 | -2.4 | 1.6 | 1800 | 流血 III / 震荡 I | 随机触发其一,永久供电 |
+| 露西尔 | lucille | 唯一 | 唯一 | 传说 | 9 | 9.8 | -2.8 | 1.2 | 1700 | 流血 III / 冲击 II | 随机触发其一 |
+| 拳套 | gauntlet | 传说 | 唯一 | 传说 | 7 | 7.8 | -1.4 | 2.6 | 1800 | 冲击 II / 震荡 I | 随机触发其一 |
+
+## 附注
+
+- 最终伤害 = 基础伤害 + 材质加成(含空手基础 1 点在内为面板显示值)。
+- 远程武器(战术弩/简易弩/射钉枪/复合弓)的面板伤害为弹药/箭矢伤害,攻速修正只影响拉弦/装填节奏。
+- “随机触发其一”指命中时从多个特效中随机选择 1 个触发(WeaponProcMode.RANDOM_ONE)。
+- 唯一武器均需图纸解锁,盾牌为防御型、无近战攻击属性。
\ No newline at end of file
diff --git a/幸存者军火库武器数据.xlsx b/幸存者军火库武器数据.xlsx
new file mode 100644
index 0000000..c68a3bb
Binary files /dev/null and b/幸存者军火库武器数据.xlsx differ
diff --git a/幸存者军火库食物表.md b/幸存者军火库食物表.md
new file mode 100644
index 0000000..be43c76
--- /dev/null
+++ b/幸存者军火库食物表.md
@@ -0,0 +1,201 @@
+# 幸存者军火库 · 全食物数据表
+
+来源:sa-survival 工程(namespace `sa_combat`),数据取自 `SASurvivalItems.java` + LSO 口渴消耗品 JSON + `en_us.json` / `pt_br.json`。
+营养 = 饥饿值;饱食 = saturationMod(实际饱食 = 营养 × saturationMod)。口渴数据依赖 LSO(Legendary Survival Overhaul)模组。
+
+## 1. 罐头食品(未开罐需开罐器,开罐后可食用)
+
+| 物品 ID | 中文名 | 英文名 | 营养 | 饱食 | 补水量 | 备注 |
+| --- | --- | --- | --- | --- | --- | --- |
+| canned_beans | 豆子罐头 | Canned Beans | — | — | — | 需开罐 |
+| canned_beans_open | 打开的豆子罐头 | Open Canned Beans | 5 | 0.55 | 2 | 开罐后可食 |
+| canned_carrots | 胡萝卜罐头 | Canned Carrots | — | — | — | 需开罐 |
+| canned_carrots_open | 打开的胡萝卜罐头 | Open Canned Carrots | 4 | 0.45 | 4 | 开罐后可食 |
+| canned_chilli | 辣椒罐头 | Canned Chilli | — | — | — | 需开罐 |
+| canned_chilli_open | 打开的辣椒罐头 | Open Canned Chilli | 7 | 0.75 | 2 | 开罐后可食 |
+| canned_corn | 玉米罐头 | Canned Corn | — | — | — | 需开罐 |
+| canned_corn_open | 打开的玉米罐头 | Open Canned Corn | 4 | 0.50 | 4 | 开罐后可食 |
+| canned_corned_beef | 咸牛肉罐头 | Canned Corned Beef | — | — | — | 需开罐 |
+| canned_corned_beef_open | 打开的咸牛肉罐头 | Open Canned Corned Beef | 8 | 0.85 | 1 | 开罐后可食(meat) |
+| canned_dog_food | 狗粮罐头 | Canned Dog Food | — | — | — | 需开罐 |
+| canned_dog_food_open | 打开的狗粮罐头 | Open Canned Dog Food | 3 | 0.25 | 1 | 开罐后可食(meat) |
+| canned_evaporated_milk | 淡奶罐头 | Canned Evaporated Milk | — | — | — | 需开罐 |
+| canned_evaporated_milk_open | 打开的淡奶罐头 | Open Canned Evaporated Milk | 4 | 0.60 | 6 | 开罐后可食 |
+| canned_fruit_cocktail | 水果鸡尾酒罐头 | Canned Fruit Cocktail | — | — | — | 需开罐 |
+| canned_fruit_cocktail_open | 打开的水果鸡尾酒罐头 | Open Canned Fruit Cocktail | 5 | 0.55 | 5 | 开罐后可食 |
+| canned_mushroom_soup | 蘑菇汤罐头 | Canned Mushroom Soup | — | — | — | 需开罐 |
+| canned_mushroom_soup_open | 打开的蘑菇汤罐头 | Open Canned Mushroom Soup | 6 | 0.65 | 6 | 开罐后可食 |
+| canned_peaches | 桃子罐头 | Canned Peaches | — | — | — | 需开罐 |
+| canned_peaches_open | 打开的桃子罐头 | Open Canned Peaches | 5 | 0.55 | 5 | 开罐后可食 |
+| canned_peas | 豌豆罐头 | Canned Peas | — | — | — | 需开罐 |
+| canned_peas_open | 打开的豌豆罐头 | Open Canned Peas | 4 | 0.50 | 3 | 开罐后可食 |
+| canned_pineapple | 菠萝罐头 | Canned Pineapple | — | — | — | 需开罐 |
+| canned_pineapple_open | 打开的菠萝罐头 | Open Canned Pineapple | 5 | 0.55 | 5 | 开罐后可食 |
+| canned_potato | 土豆罐头 | Canned Potato | — | — | — | 需开罐 |
+| canned_potato_open | 打开的土豆罐头 | Open Canned Potato | 6 | 0.65 | 2 | 开罐后可食 |
+| canned_spaghetti_bolognese | 肉酱意面罐头 | Canned Spaghetti Bolognese | — | — | — | 需开罐 |
+| canned_spaghetti_bolognese_open | 打开的肉酱意面罐头 | Open Canned Spaghetti Bolognese | 8 | 0.85 | 2 | 开罐后可食(meat) |
+| canned_vegetable_soup | 蔬菜汤罐头 | Canned Vegetable Soup | — | — | — | 需开罐 |
+| canned_vegetable_soup_open | 打开的蔬菜汤罐头 | Open Canned Vegetable Soup | 6 | 0.65 | 6 | 开罐后可食 |
+| canned_fruit_beverage | 水果饮料罐头 | Canned Fruit Beverage | — | — | — | 需开罐 |
+| canned_fruit_beverage_open | 打开的水果饮料罐头 | Open Canned Fruit Beverage | 4 | 0.50 | 7 | 开罐后可食 |
+| canned_sardines | 沙丁鱼罐头 | Canned Sardines | 7 | 0.75 | 2 | 免开罐(meat) |
+| canned_tuna | 金枪鱼罐头 | Canned Tuna | 7 | 0.75 | 2 | 免开罐(meat) |
+
+## 2. 果汁盒 / 瓶装饮料 / 奶
+
+| 物品 ID | 中文名 | 英文名 | 营养 | 饱食 | 补水量 | 备注 |
+| --- | --- | --- | --- | --- | --- | --- |
+| grape_juice_box | 葡萄汁盒 | Grape Juice Box | 3 | 0.35 | 7 | 喝动画 + 蜂蜜喝音效 |
+| berry_juice_box | 浆果汁盒 | Berry Juice Box | 3 | 0.35 | 7 | 同上 |
+| apple_juice_box | 苹果汁盒 | Apple Juice Box | 3 | 0.40 | 7 | 同上 |
+| orange_juice_box | 橙汁盒 | Orange Juice Box | 3 | 0.45 | 7 | 同上 |
+| peach_juice_bottle | 桃汁瓶 | Peach Juice Bottle | 4 | 0.45 | 8 | 喝完返空水瓶 |
+| pineapple_juice_bottle | 菠萝汁瓶 | Pineapple Juice Bottle | 4 | 0.45 | 8 | 喝完返空水瓶 |
+| milk_box | 牛奶盒 | Milk Box | 3 | 0.35 | 7 | SelectiveMilk(可选喝/倒) |
+| milk_gallon | 牛奶桶 | Milk Gallon | 3 | 0.35 | 7 | 8 次耐久 |
+
+## 3. 汽水 / 能量饮料 / 咖啡
+
+| 物品 ID | 中文名 | 英文名 | 营养 | 饱食 | 补水量 | 效果 | 备注 |
+| --- | --- | --- | --- | --- | --- | --- | --- |
+| cola | 可乐 | Cola | 2 | 0.25 | 6 | 无 | 返空罐 |
+| pepsi | 百事 | Pepsi | 2 | 0.25 | 6 | 无 | 返空罐 |
+| fanta_orange_soda | 芬达橙味 | Fanta Orange Soda | 2 | 0.25 | 6 | 无 | 返空罐 |
+| fanta_grape_soda | 芬达葡萄味 | Fanta Grape Soda | 2 | 0.25 | 6 | 无 | 返空罐 |
+| guarana_soda | 瓜拉纳汽水 | Guarana Soda | 2 | 0.25 | 6 | 无 | 返空罐 |
+| monster | 魔爪能量 | Monster | 2 | 0.25 | 4 | 速度 I(1200t) + 急迫 I(1200t) | 4 次耐久,开盖音效,返空罐 |
+| energy_drink | 能量饮料 | Energy Drink | 2 | 0.25 | 4 | 速度 I(900t) + 急迫 I(900t) | 4 次耐久,开盖音效,返空罐 |
+| coffee | 咖啡 | Coffee | 2 | 0.25 | 4 | 急迫 I(900t) + 速度 I(600t) | 4 次耐久 |
+
+## 4. 酒类(全部 12 次耐久,喝完返容器)
+
+| 物品 ID | 中文名 | 英文名 | 营养 | 饱食 | 补水量 | 效果 | 容器 |
+| --- | --- | --- | --- | --- | --- | --- | --- |
+| beer | 啤酒 | Beer | 1 | 0.10 | 3 | 反胃(160t) | 空玻璃瓶 |
+| duff_beer | 达夫啤酒 | Duff Beer | 1 | 0.10 | 3 | 反胃(160t) | 空罐 |
+| vodka | 伏特加 | Vodka | 1 | 0.05 | 1 | 反胃(220t) + 虚弱(160t) | 空玻璃瓶 |
+| whiskey | 威士忌 | Whiskey | 1 | 0.05 | 1 | 反胃(220t) + 虚弱(160t) | 空玻璃瓶 |
+| wine | 葡萄酒 | Wine | 1 | 0.10 | 2 | 反胃(180t) | 空玻璃瓶 |
+
+## 5. 快餐 / 熟食(含腐烂版)
+
+| 物品 ID | 中文名 | 英文名 | 营养 | 饱食 | 备注 |
+| --- | --- | --- | --- | --- | --- |
+| big_burger | 大汉堡 | Big Burger | 10 | 0.90 | |
+| big_burger_rotten | 腐烂的大汉堡 | Rotten Big Burger | 4 | 0.20 | 饥饿(85%) + 反胃(20%) |
+| burger | 汉堡 | Burger | 7 | 0.65 | |
+| burger_rotten | 腐烂的汉堡 | Rotten Burger | 3 | 0.15 | 饥饿(85%) + 反胃(20%) |
+| cheese_burger | 芝士汉堡 | Cheese Burger | 8 | 0.75 | |
+| cheese_burger_rotten | 腐烂的芝士汉堡 | Rotten Cheese Burger | 3 | 0.15 | 饥饿(85%) + 反胃(20%) |
+| burrito | 卷饼 | Burrito | 6 | 0.60 | |
+| burrito_rotten | 腐烂的卷饼 | Rotten Burrito | 3 | 0.15 | 饥饿(85%) + 反胃(20%) |
+| hot_dog | 热狗 | Hot Dog | 6 | 0.55 | |
+| hot_dog_rotten | 腐烂的热狗 | Rotten Hot Dog | 3 | 0.15 | 饥饿(85%) + 反胃(20%) |
+| taco | 玉米卷 | Taco | 5 | 0.50 | |
+| taco_rotten | 腐烂的玉米卷 | Rotten Taco | 2 | 0.10 | 饥饿(85%) + 反胃(20%) |
+| toast | 吐司 | Toast | 3 | 0.25 | |
+| toast_rotten | 腐烂的吐司 | Rotten Toast | 1 | 0.05 | 饥饿(85%) + 反胃(20%) |
+| waffles | 华夫饼 | Waffles | 5 | 0.45 | |
+| waffles_rotten | 腐烂的华夫饼 | Rotten Waffles | 2 | 0.10 | 饥饿(85%) + 反胃(20%) |
+| biscuit | 饼干 | Biscuit | 3 | 0.30 | |
+| biscuit_rotten | 腐烂的饼干 | Rotten Biscuit | 1 | 0.05 | 饥饿(85%) + 反胃(20%) |
+| donut | 甜甜圈 | Donut | 4 | 0.35 | |
+| donut_rotten | 腐烂的甜甜圈 | Rotten Donut | 1 | 0.05 | 饥饿(85%) + 反胃(20%) |
+
+## 6. 零食 / 甜食 / 酱料
+
+| 物品 ID | 中文名 | 英文名 | 营养 | 饱食 | 备注 |
+| --- | --- | --- | --- | --- | --- |
+| candys | 糖果 | Candys | 2 | 0.15 | |
+| chocolate_bar | 巧克力棒 | Chocolate Bar | 4 | 0.35 | |
+| energy_bar | 能量棒 | Energy Bar | 4 | 0.45 | 速度 I(300t) |
+| granola_bar | 燕麦棒 | Granola Bar | 4 | 0.45 | |
+| smirkers_bar | 斯尼克棒 | Smirkers Bar | 4 | 0.35 | |
+| sniksnak_bar | 斯尼克零食棒 | Sniksnak Bar | 4 | 0.35 | |
+| fruit_jam | 果酱 | Fruit Jam | 3 | 0.25 | |
+| peanut_butter | 花生酱 | Peanut Butter | 5 | 0.60 | |
+| butter | 黄油 | Butter | 1 | 0.08 | |
+| cheese | 奶酪 | Cheese | 3 | 0.30 | |
+| cheese_bread | 芝士面包 | Cheese Bread | 4 | 0.40 | |
+
+## 7. 巴西小食
+
+| 物品 ID | 中文名 | 英文名 | 营养 | 饱食 | 备注 |
+| --- | --- | --- | --- | --- | --- |
+| brigadeiro | 巴西巧克力球 | Brigadeiro | 3 | 0.25 | |
+| coxinha | 巴西炸鸡肉饺 | Coxinha | 6 | 0.60 | |
+| rotten_coxinha | 腐烂的炸鸡肉饺 | Rotten Coxinha | 2 | 0.10 | 饥饿(85%) + 反胃(20%) |
+| coxinha_dough | 炸鸡肉饺生面团 | Coxinha Dough | 1 | 0.03 | 中毒(160t, 100%) |
+| raw_coxinha | 生炸鸡肉饺 | Raw Coxinha | 1 | 0.03 | 中毒(160t, 100%) |
+| pastel_dough | 炸饺面团 | Pastel Dough | 1 | 0.03 | 中毒(160t, 100%) |
+| raw_cheese_pastel | 生芝士炸饺 | Raw Cheese Pastel | 1 | 0.03 | 中毒(160t, 100%) |
+| raw_meat_pastel | 生肉馅炸饺 | Raw Meat Pastel | 1 | 0.03 | 中毒(160t, 100%) |
+| raw_wind_pastel | 生空心炸饺 | Raw Wind Pastel | 1 | 0.03 | 中毒(160t, 100%) |
+| meat_pastel | 肉馅炸饺 | Meat Pastel | 6 | 0.60 | |
+| wind_pastel | 空心炸饺 | Wind Pastel | 4 | 0.35 | |
+| pacoquita | 巴西花生糖 | Pacoquita | 3 | 0.25 | |
+| saltine_cracker | 苏打饼干 | Saltine Cracker | 2 | 0.10 | |
+
+## 8. 披萨 / 薯片 / 谷物(袋装为容器,出多个)
+
+| 物品 ID | 中文名 | 英文名 | 营养 | 饱食 | 备注 |
+| --- | --- | --- | --- | --- | --- |
+| pizza | 披萨片 | Pizza Slice | 4 | 0.40 | |
+| pizza_box | 披萨盒 | Pizza Box | — | — | 耐久 4,每次出 2 片披萨 |
+| chips | 薯片 | Chips | 2 | 0.15 | |
+| plain_chips_bag | 原味薯片袋 | Plain Chips Bag | — | — | 耐久 4,出 4 薯片 |
+| barbecue_chips_bag | 烧烤味薯片袋 | Barbecue Chips Bag | — | — | 耐久 4,出 4 薯片 |
+| salt_vinegar_chips_bag | 盐醋味薯片袋 | Salt & Vinegar Chips Bag | — | — | 耐久 4,出 4 薯片 |
+| sour_cream_onion_chips_bag | 酸奶油洋葱味薯片袋 | Sour Cream & Onion Chips Bag | — | — | 耐久 4,出 4 薯片 |
+| candy_package | 糖果包 | Candy Package | — | — | 耐久 4,出 4 糖果 |
+| cereal_fruit_loops_flakes | 水果圈麦片 | Fruit Loops Cereal | 1 | 0.08 | |
+| cereal_kelloggys_flakes | 家乐氏麦片 | Kelloggys Cereal | 1 | 0.08 | |
+| cereal | 麦片盒 | Cereal Box | — | — | 耐久 4,出 6 家乐氏麦片 |
+| cereal_fruit_loops | 水果圈麦片盒 | Fruit Loops Cereal Box | — | — | 耐久 4,出 6 水果圈麦片 |
+| cereal_kelloggys | 家乐氏麦片盒 | Kelloggys Cereal Box | — | — | 耐久 4,出 6 家乐氏麦片 |
+
+## 9. 草药(可食用 / 可种植)
+
+| 物品 ID | 中文名 | 英文名 | 效果 |
+| --- | --- | --- | --- |
+| green_herb | 绿草 | Green Herb | 再生(60t) |
+| red_herb | 红草 | Red Herb | 饱和(40t) |
+| blue_herb | 蓝草 | Blue Herb | 再生(40t) |
+| yellow_herb | 黄草 | Yellow Herb | 吸收(100t) |
+| crushed_green_herb | 绿草粉 | Crushed Green Herb | 再生(100t) |
+| crushed_red_herb | 红草粉 | Crushed Red Herb | 饱和(60t) |
+| crushed_blue_herb | 蓝草粉 | Crushed Blue Herb | 解毒 |
+| crushed_yellow_herb | 黄草粉 | Crushed Yellow Herb | 吸收(200t) |
+| mixed_gg_herbs | 混合草药 GG | Mixed GG Herbs | 再生 I(160t) |
+| mixed_ggg_herbs | 混合草药 GGG | Mixed GGG Herbs | 再生 I(300t) |
+| mixed_gr_herbs | 混合草药 GR | Mixed GR Herbs | 再生 I(240t) |
+| mixed_ggr_herbs | 混合草药 GGR | Mixed GGR Herbs | 再生 II(240t) |
+| mixed_gb_herbs | 混合草药 GB | Mixed GB Herbs | 再生(160t) + 解毒 |
+| mixed_ggb_herbs | 混合草药 GGB | Mixed GGB Herbs | 再生 I(200t) + 解毒 |
+| mixed_gy_herbs | 混合草药 GY | Mixed GY Herbs | 再生(160t) + 吸收(200t) |
+| mixed_ggy_herbs | 混合草药 GGY | Mixed GGY Herbs | 再生 I(240t) + 吸收(200t) |
+| mixed_gyb_herbs | 混合草药 GYB | Mixed GYB Herbs | 再生(160t) + 吸收(200t) + 解毒 |
+| mixed_gry_herbs | 混合草药 GRY | Mixed GRY Herbs | 再生 I(240t) + 吸收 I(400t) |
+| mixed_grb_herbs | 混合草药 GRB | Mixed GRB Herbs | 再生 I(240t) + 吸收(160t) + 解毒 |
+| mixed_rb_herbs | 混合草药 RB | Mixed RB Herbs | 再生(100t) + 解毒 |
+
+---
+
+### LSO 口渴副作用(饮料自带口渴效果)
+
+| 物品 | 效果 | 概率 | 时长 |
+| --- | --- | --- | --- |
+| beer / duff_beer | 口渴 | 35% | 500t |
+| coffee | 口渴 | 18% | 300t |
+| energy_drink / monster | 口渴 | 22% | 360t |
+| vodka / whiskey | 口渴 | 75% | 800t |
+| wine | 口渴 | 45% | 600t |
+
+### 说明
+
+- 所有食物均不可附魔、无附魔光泽(`SimpleFoodItem`)。
+- 堆叠:普通食物 64(默认),饮品/罐头/盒装 16,耐久容器 1。
+- 腐烂版额外效果:饥饿(300t, 85%) + 反胃(120t, 20%)。
+- 生面团/生食材额外效果:中毒(160t, 100%)。
+- 注:葡语(pt_br)个别名未在生成文件中有条目(如 `rotten_*`、`coxinha_dough` 等),英文名可作兜底。
diff --git a/幸存者军火库食物表.xlsx b/幸存者军火库食物表.xlsx
new file mode 100644
index 0000000..5db0aff
Binary files /dev/null and b/幸存者军火库食物表.xlsx differ