From 19bb33fb5770b53b19b71f9bcce3983ae703099f Mon Sep 17 00:00:00 2001
From: TWME <65117253+TWME-TW@users.noreply.github.com>
Date: Mon, 17 Nov 2025 15:47:51 +0800
Subject: [PATCH 1/7] =?UTF-8?q?chore(deps):=20=E6=9B=B4=E6=96=B0=20TWME=20?=
=?UTF-8?q?=E5=AD=98=E5=84=B2=E5=BA=AB=E5=BF=AB=E7=85=A7=E5=92=8C=20Paper?=
=?UTF-8?q?=20API=20=E7=89=88=E6=9C=AC?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- 移除 EvokeGames Maven 快照存儲庫
- 新增 TWME 存儲庫快照
- 更新 Paper API 版本至 1.21.10-R0.1-SNAPSHOT
- 更新 spigot 依賴的 groupId
---
pom.xml | 16 ++++++++--------
1 file changed, 8 insertions(+), 8 deletions(-)
diff --git a/pom.xml b/pom.xml
index 5173ef8..2771dee 100644
--- a/pom.xml
+++ b/pom.xml
@@ -83,23 +83,23 @@
codemc-snapshots
https://repo.codemc.io/repository/maven-snapshots/
-
- evoke-snapshots
- EvokeGames Maven
- https://maven.evokegames.gg/snapshots
-
twme-repo-releases
TWME Repository
https://repo.twme.dev/releases
+
+ twme-repo-snapshots
+ TWME Repository
+ https://repo.twme.dev/snapshots
+
io.papermc.paper
paper-api
- 1.21.8-R0.1-SNAPSHOT
+ 1.21.10-R0.1-SNAPSHOT
provided
@@ -121,9 +121,9 @@
compile
- me.tofaa.entitylib
+ io.github.tofaa2
spigot
- +598d71f-SNAPSHOT
+ +eba7ada-SNAPSHOT
dev.twme
From 58738b7c3d634ad8abc7b13aef898e6d580356ff Mon Sep 17 00:00:00 2001
From: TWME <65117253+TWME-TW@users.noreply.github.com>
Date: Mon, 17 Nov 2025 15:48:05 +0800
Subject: [PATCH 2/7] =?UTF-8?q?feat(ci):=20=E6=96=B0=E5=A2=9E=20JAR=20?=
=?UTF-8?q?=E6=AA=94=E6=A1=88=E4=B8=8A=E5=82=B3=E6=AD=A5=E9=A9=9F=E8=87=B3?=
=?UTF-8?q?=20Maven=20=E5=B7=A5=E4=BD=9C=E6=B5=81=E7=A8=8B?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.github/workflows/maven.yml | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml
index 01ee3d7..524b957 100644
--- a/.github/workflows/maven.yml
+++ b/.github/workflows/maven.yml
@@ -28,4 +28,9 @@ jobs:
distribution: 'temurin'
cache: maven
- name: Build with Maven
- run: mvn -B package --file pom.xml
\ No newline at end of file
+ run: mvn -B package --file pom.xml
+ - name: Upload JAR
+ uses: actions/upload-artifact@v4
+ with:
+ name: DebugStickPro
+ path: target/*.jar
\ No newline at end of file
From 5c572f2de0fb1b6f4e1501b6390515214810c303 Mon Sep 17 00:00:00 2001
From: TWME <65117253+TWME-TW@users.noreply.github.com>
Date: Mon, 17 Nov 2025 15:48:14 +0800
Subject: [PATCH 3/7] =?UTF-8?q?feat(blockdata):=20=E6=96=B0=E5=A2=9E?=
=?UTF-8?q?=E9=8A=85=E8=A3=BD=E5=82=80=E5=84=A1=E9=9B=95=E5=83=8F=E5=A7=BF?=
=?UTF-8?q?=E5=8B=A2=E8=B3=87=E6=96=99=E9=A1=9E=E5=88=A5=E5=8F=8A=E5=85=B6?=
=?UTF-8?q?=E8=99=95=E7=90=86=E9=82=8F=E8=BC=AF?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../blockdatautil/BlockDataSeparater.java | 9 +++
.../subdata/CopperGolemStatuePoseData.java | 66 +++++++++++++++++++
.../twme/debugstickpro/localization/Lang.java | 1 +
src/main/resources/lang/en_US.yml | 1 +
src/main/resources/lang/zh_TW.yml | 1 +
5 files changed, 78 insertions(+)
create mode 100644 src/main/java/dev/twme/debugstickpro/blockdatautil/subdata/CopperGolemStatuePoseData.java
diff --git a/src/main/java/dev/twme/debugstickpro/blockdatautil/BlockDataSeparater.java b/src/main/java/dev/twme/debugstickpro/blockdatautil/BlockDataSeparater.java
index fb778e8..e8cef7c 100644
--- a/src/main/java/dev/twme/debugstickpro/blockdatautil/BlockDataSeparater.java
+++ b/src/main/java/dev/twme/debugstickpro/blockdatautil/BlockDataSeparater.java
@@ -771,6 +771,15 @@ public static ArrayList separate(BlockData blockData) {
blockDataList.add(waterlogged);
}
+ // 1.21.9
+
+ if (isValidMaterial("copper_chain")) {
+ if (blockData instanceof CopperGolemStatue) {
+ SubBlockData copperGolemStatuePose = new CopperGolemStatuePoseData(blockData);
+ blockDataList.add(copperGolemStatuePose);
+ }
+ }
+
blockDataList = filterSubBlockData(blockDataList);
cache.put(blockData.getMaterial(), blockDataList);
diff --git a/src/main/java/dev/twme/debugstickpro/blockdatautil/subdata/CopperGolemStatuePoseData.java b/src/main/java/dev/twme/debugstickpro/blockdatautil/subdata/CopperGolemStatuePoseData.java
new file mode 100644
index 0000000..bf4506e
--- /dev/null
+++ b/src/main/java/dev/twme/debugstickpro/blockdatautil/subdata/CopperGolemStatuePoseData.java
@@ -0,0 +1,66 @@
+package dev.twme.debugstickpro.blockdatautil.subdata;
+
+import java.util.Arrays;
+import java.util.List;
+
+import org.bukkit.block.data.BlockData;
+import org.bukkit.block.data.type.CopperGolemStatue;
+
+import dev.twme.debugstickpro.blockdatautil.SubBlockData;
+import dev.twme.debugstickpro.localization.Lang;
+
+public class CopperGolemStatuePoseData extends SubBlockData {
+ private CopperGolemStatue.Pose pose;
+
+ public CopperGolemStatuePoseData(BlockData blockData) {
+ this.blockData = blockData;
+ this.pose = ((CopperGolemStatue) blockData).getCopperGolemPose();
+ }
+
+ @Override
+ public String dataName() {
+ return Lang.DataKeyName.CopperGolemStatuePoseDataName;
+ }
+
+ @Override
+ public String getDataAsString() {
+ return pose.name();
+ }
+
+ @Override
+ public SubBlockData nextData() {
+ CopperGolemStatue copperGolemStatue = ((CopperGolemStatue) blockData);
+ List poses = Arrays.stream(CopperGolemStatue.Pose.values()).toList();
+ if (poses.indexOf(pose) == poses.size() - 1) {
+ pose = poses.getFirst();
+ } else {
+ pose = poses.get(poses.indexOf(pose) + 1);
+ }
+ copperGolemStatue.setCopperGolemPose(pose);
+ return this;
+ }
+
+ @Override
+ public SubBlockData previousData() {
+ CopperGolemStatue copperGolemStatue = ((CopperGolemStatue) blockData);
+ List poses = Arrays.stream(CopperGolemStatue.Pose.values()).toList();
+ if (poses.indexOf(pose) == 0) {
+ pose = poses.getLast();
+ } else {
+ pose = poses.get(poses.indexOf(pose) - 1);
+ }
+ copperGolemStatue.setCopperGolemPose(pose);
+ return this;
+ }
+
+ @Override
+ public BlockData copyTo(BlockData blockData) {
+ ((CopperGolemStatue) blockData).setCopperGolemPose(pose);
+ return blockData;
+ }
+
+ @Override
+ public SubBlockData fromBlockData(BlockData blockData) {
+ return new CopperGolemStatuePoseData(blockData);
+ }
+}
diff --git a/src/main/java/dev/twme/debugstickpro/localization/Lang.java b/src/main/java/dev/twme/debugstickpro/localization/Lang.java
index 92d01fc..7c90247 100644
--- a/src/main/java/dev/twme/debugstickpro/localization/Lang.java
+++ b/src/main/java/dev/twme/debugstickpro/localization/Lang.java
@@ -89,6 +89,7 @@ public final static class DataKeyName {
public final static String ChiseledBookshelfSlot_5DataName = "DataKeyName.ChiseledBookshelfSlot_5DataName";
public final static String CommandBlockDataName = "DataKeyName.CommandBlockDataName";
public final static String ComparatorDataName = "DataKeyName.ComparatorDataName";
+ public final static String CopperGolemStatuePoseDataName = "DataKeyName.CopperGolemStatuePoseDataName";
public final static String CrafterCraftingDataName = "DataKeyName.CrafterCraftingDataName";
public final static String CrafterOrientationDataName = "DataKeyName.CrafterOrientationDataName";
public final static String CrafterTriggerDataName = "DataKeyName.CrafterTriggerDataName";
diff --git a/src/main/resources/lang/en_US.yml b/src/main/resources/lang/en_US.yml
index a020c85..a2eb7b4 100644
--- a/src/main/resources/lang/en_US.yml
+++ b/src/main/resources/lang/en_US.yml
@@ -60,6 +60,7 @@ DataKeyName:
ChiseledBookshelfSlot_5DataName: "Slot 5"
CommandBlockDataName: "Conditional"
ComparatorDataName: "Mode"
+ CopperGolemStatuePoseDataName: "Pose"
CrafterCraftingDataName: "Type"
CrafterOrientationDataName: "Crafter Orientation"
CrafterTriggerDataName: "Triggered"
diff --git a/src/main/resources/lang/zh_TW.yml b/src/main/resources/lang/zh_TW.yml
index 51924ab..5a4ac5e 100644
--- a/src/main/resources/lang/zh_TW.yml
+++ b/src/main/resources/lang/zh_TW.yml
@@ -61,6 +61,7 @@ DataKeyName:
ChiseledBookshelfSlot_5DataName: "Slot 5"
CommandBlockDataName: "Conditional"
ComparatorDataName: "Mode"
+ CopperGolemStatuePoseDataName: "Pose"
CrafterCraftingDataName: "Type"
CrafterOrientationDataName: "Crafter Orientation"
CrafterTriggerDataName: "Triggered"
From 5b5a2f200c309f9cbda292d3c7d3370f9e7ad64c Mon Sep 17 00:00:00 2001
From: TWME <65117253+TWME-TW@users.noreply.github.com>
Date: Mon, 17 Nov 2025 15:59:03 +0800
Subject: [PATCH 4/7] =?UTF-8?q?feat(blockdata):=20=E6=96=B0=E5=A2=9E=20Sid?=
=?UTF-8?q?eChainingData=20=E9=A1=9E=E5=88=A5=E5=8F=8A=E5=85=B6=E8=99=95?=
=?UTF-8?q?=E7=90=86=E9=82=8F=E8=BC=AF?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../blockdatautil/BlockDataSeparater.java | 4 ++
.../subdata/SideChainingData.java | 66 +++++++++++++++++++
.../twme/debugstickpro/localization/Lang.java | 1 +
src/main/resources/lang/en_US.yml | 1 +
src/main/resources/lang/zh_TW.yml | 1 +
5 files changed, 73 insertions(+)
create mode 100644 src/main/java/dev/twme/debugstickpro/blockdatautil/subdata/SideChainingData.java
diff --git a/src/main/java/dev/twme/debugstickpro/blockdatautil/BlockDataSeparater.java b/src/main/java/dev/twme/debugstickpro/blockdatautil/BlockDataSeparater.java
index e8cef7c..bbd6ebc 100644
--- a/src/main/java/dev/twme/debugstickpro/blockdatautil/BlockDataSeparater.java
+++ b/src/main/java/dev/twme/debugstickpro/blockdatautil/BlockDataSeparater.java
@@ -778,6 +778,10 @@ public static ArrayList separate(BlockData blockData) {
SubBlockData copperGolemStatuePose = new CopperGolemStatuePoseData(blockData);
blockDataList.add(copperGolemStatuePose);
}
+ if (blockData instanceof SideChaining) {
+ SubBlockData sideChaining = new SideChainingData(blockData);
+ blockDataList.add(sideChaining);
+ }
}
blockDataList = filterSubBlockData(blockDataList);
diff --git a/src/main/java/dev/twme/debugstickpro/blockdatautil/subdata/SideChainingData.java b/src/main/java/dev/twme/debugstickpro/blockdatautil/subdata/SideChainingData.java
new file mode 100644
index 0000000..1d69914
--- /dev/null
+++ b/src/main/java/dev/twme/debugstickpro/blockdatautil/subdata/SideChainingData.java
@@ -0,0 +1,66 @@
+package dev.twme.debugstickpro.blockdatautil.subdata;
+
+import java.util.Arrays;
+import java.util.List;
+
+import org.bukkit.block.data.BlockData;
+import org.bukkit.block.data.SideChaining;
+
+import dev.twme.debugstickpro.blockdatautil.SubBlockData;
+import dev.twme.debugstickpro.localization.Lang;
+
+public class SideChainingData extends SubBlockData {
+ private SideChaining.ChainPart chainPart;
+
+ public SideChainingData(BlockData blockData) {
+ this.blockData = blockData;
+ this.chainPart = ((SideChaining) blockData).getSideChain();
+ }
+
+ @Override
+ public String dataName() {
+ return Lang.DataKeyName.SideChainingDataName;
+ }
+
+ @Override
+ public String getDataAsString() {
+ return chainPart.name();
+ }
+
+ @Override
+ public SubBlockData nextData() {
+ List chainParts = Arrays.asList(SideChaining.ChainPart.values());
+ int index = chainParts.indexOf(chainPart);
+ if (index >= chainParts.size() - 1) {
+ ((SideChaining) blockData).setSideChain(chainParts.getFirst());
+ } else {
+ ((SideChaining) blockData).setSideChain(chainParts.get(index + 1));
+ }
+ this.chainPart = ((SideChaining) blockData).getSideChain();
+ return this;
+ }
+
+ @Override
+ public SubBlockData previousData() {
+ List chainParts = Arrays.asList(SideChaining.ChainPart.values());
+ int index = chainParts.indexOf(chainPart);
+ if (index <= 0) {
+ ((SideChaining) blockData).setSideChain(chainParts.getLast());
+ } else {
+ ((SideChaining) blockData).setSideChain(chainParts.get(index - 1));
+ }
+ this.chainPart = ((SideChaining) blockData).getSideChain();
+ return this;
+ }
+
+ @Override
+ public BlockData copyTo(BlockData blockData) {
+ ((SideChaining) blockData).setSideChain(chainPart);
+ return blockData;
+ }
+
+ @Override
+ public SubBlockData fromBlockData(BlockData blockData) {
+ return new SideChainingData(blockData);
+ }
+}
diff --git a/src/main/java/dev/twme/debugstickpro/localization/Lang.java b/src/main/java/dev/twme/debugstickpro/localization/Lang.java
index 7c90247..d331269 100644
--- a/src/main/java/dev/twme/debugstickpro/localization/Lang.java
+++ b/src/main/java/dev/twme/debugstickpro/localization/Lang.java
@@ -160,6 +160,7 @@ public final static class DataKeyName {
public final static String SculkShriekerCanSummonDataName = "DataKeyName.SculkShriekerCanSummonDataName";
public final static String SculkShriekerShriekingDataName = "DataKeyName.SculkShriekerShriekingDataName";
public final static String SeaPickleDataName = "DataKeyName.SeaPickleDataName";
+ public final static String SideChainingDataName = "DataKeyName.SideChainingDataName";
public final static String SlabDataName = "DataKeyName.SlabDataName";
public final static String SnowableDataName = "DataKeyName.SnowableDataName";
public final static String SnowDataName = "DataKeyName.SnowDataName";
diff --git a/src/main/resources/lang/en_US.yml b/src/main/resources/lang/en_US.yml
index a2eb7b4..d2d4871 100644
--- a/src/main/resources/lang/en_US.yml
+++ b/src/main/resources/lang/en_US.yml
@@ -130,6 +130,7 @@ DataKeyName:
SculkShriekerCanSummonDataName: "Summoning"
SculkShriekerShriekingDataName: "Shrieking"
SeaPickleDataName: "Pickles"
+ SideChainingDataName: "Side Chain"
SlabDataName: "Type"
SnowableDataName: "Snowy"
SnowDataName: "Layers"
diff --git a/src/main/resources/lang/zh_TW.yml b/src/main/resources/lang/zh_TW.yml
index 5a4ac5e..24ae0c8 100644
--- a/src/main/resources/lang/zh_TW.yml
+++ b/src/main/resources/lang/zh_TW.yml
@@ -131,6 +131,7 @@ DataKeyName:
SculkShriekerCanSummonDataName: "Summoning"
SculkShriekerShriekingDataName: "Shrieking"
SeaPickleDataName: "Pickles"
+ SideChainingDataName: "Side Chain"
SlabDataName: "Type"
SnowableDataName: "Snowy"
SnowDataName: "Layers"
From c0f4a7a1afb73e1704d5f7a40b57b1c838941310 Mon Sep 17 00:00:00 2001
From: TWME <65117253+TWME-TW@users.noreply.github.com>
Date: Mon, 17 Nov 2025 16:07:09 +0800
Subject: [PATCH 5/7] =?UTF-8?q?feat(blockdata):=20=E6=96=B0=E5=A2=9E=20Seg?=
=?UTF-8?q?mentableData=20=E9=A1=9E=E5=88=A5=E5=8F=8A=E5=85=B6=E8=99=95?=
=?UTF-8?q?=E7=90=86=E9=82=8F=E8=BC=AF?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../blockdatautil/BlockDataSeparater.java | 8 ++-
.../subdata/SegmentableData.java | 61 +++++++++++++++++++
.../twme/debugstickpro/localization/Lang.java | 1 +
src/main/resources/lang/en_US.yml | 1 +
src/main/resources/lang/zh_TW.yml | 1 +
5 files changed, 71 insertions(+), 1 deletion(-)
create mode 100644 src/main/java/dev/twme/debugstickpro/blockdatautil/subdata/SegmentableData.java
diff --git a/src/main/java/dev/twme/debugstickpro/blockdatautil/BlockDataSeparater.java b/src/main/java/dev/twme/debugstickpro/blockdatautil/BlockDataSeparater.java
index bbd6ebc..c7c2b34 100644
--- a/src/main/java/dev/twme/debugstickpro/blockdatautil/BlockDataSeparater.java
+++ b/src/main/java/dev/twme/debugstickpro/blockdatautil/BlockDataSeparater.java
@@ -772,7 +772,6 @@ public static ArrayList separate(BlockData blockData) {
}
// 1.21.9
-
if (isValidMaterial("copper_chain")) {
if (blockData instanceof CopperGolemStatue) {
SubBlockData copperGolemStatuePose = new CopperGolemStatuePoseData(blockData);
@@ -784,6 +783,13 @@ public static ArrayList separate(BlockData blockData) {
}
}
+ if (isValidMaterial("leaf_litter")) {
+ if (blockData instanceof Segmentable) {
+ SubBlockData segmentable = new SegmentableData(blockData);
+ blockDataList.add(segmentable);
+ }
+ }
+
blockDataList = filterSubBlockData(blockDataList);
cache.put(blockData.getMaterial(), blockDataList);
diff --git a/src/main/java/dev/twme/debugstickpro/blockdatautil/subdata/SegmentableData.java b/src/main/java/dev/twme/debugstickpro/blockdatautil/subdata/SegmentableData.java
new file mode 100644
index 0000000..cf4a6e7
--- /dev/null
+++ b/src/main/java/dev/twme/debugstickpro/blockdatautil/subdata/SegmentableData.java
@@ -0,0 +1,61 @@
+package dev.twme.debugstickpro.blockdatautil.subdata;
+
+import org.bukkit.block.data.BlockData;
+import org.bukkit.block.data.Segmentable;
+
+import dev.twme.debugstickpro.blockdatautil.SubBlockData;
+import dev.twme.debugstickpro.localization.Lang;
+
+public class SegmentableData extends SubBlockData {
+ private int segmentAmount;
+
+ public SegmentableData(BlockData blockData) {
+ this.blockData = blockData;
+ this.segmentAmount = ((Segmentable) blockData).getSegmentAmount();
+ }
+
+ @Override
+ public String dataName() {
+ return Lang.DataKeyName.SegmentableDataName;
+ }
+
+ @Override
+ public String getDataAsString() {
+ return String.valueOf(segmentAmount);
+ }
+
+ @Override
+ public SubBlockData nextData() {
+ Segmentable segmentable = ((Segmentable) blockData);
+ if (segmentAmount >= segmentable.getMaximumSegmentAmount()) {
+ segmentAmount = segmentable.getMinimumSegmentAmount();
+ } else {
+ segmentAmount++;
+ }
+ segmentable.setSegmentAmount(segmentAmount);
+ return this;
+ }
+
+ @Override
+ public SubBlockData previousData() {
+ Segmentable segmentable = ((Segmentable) blockData);
+ if (segmentAmount <= segmentable.getMinimumSegmentAmount()) {
+ segmentAmount = segmentable.getMaximumSegmentAmount();
+ } else {
+ segmentAmount--;
+ }
+ segmentable.setSegmentAmount(segmentAmount);
+ return this;
+ }
+
+ @Override
+ public BlockData copyTo(BlockData blockData) {
+ ((Segmentable) blockData).setSegmentAmount(segmentAmount);
+ return blockData;
+ }
+
+ @Override
+ public SubBlockData fromBlockData(BlockData blockData) {
+ return new SegmentableData(blockData);
+ }
+}
diff --git a/src/main/java/dev/twme/debugstickpro/localization/Lang.java b/src/main/java/dev/twme/debugstickpro/localization/Lang.java
index d331269..844b6fe 100644
--- a/src/main/java/dev/twme/debugstickpro/localization/Lang.java
+++ b/src/main/java/dev/twme/debugstickpro/localization/Lang.java
@@ -160,6 +160,7 @@ public final static class DataKeyName {
public final static String SculkShriekerCanSummonDataName = "DataKeyName.SculkShriekerCanSummonDataName";
public final static String SculkShriekerShriekingDataName = "DataKeyName.SculkShriekerShriekingDataName";
public final static String SeaPickleDataName = "DataKeyName.SeaPickleDataName";
+ public final static String SegmentableDataName = "DataKeyName.SegmentableDataName";
public final static String SideChainingDataName = "DataKeyName.SideChainingDataName";
public final static String SlabDataName = "DataKeyName.SlabDataName";
public final static String SnowableDataName = "DataKeyName.SnowableDataName";
diff --git a/src/main/resources/lang/en_US.yml b/src/main/resources/lang/en_US.yml
index d2d4871..8be0a01 100644
--- a/src/main/resources/lang/en_US.yml
+++ b/src/main/resources/lang/en_US.yml
@@ -130,6 +130,7 @@ DataKeyName:
SculkShriekerCanSummonDataName: "Summoning"
SculkShriekerShriekingDataName: "Shrieking"
SeaPickleDataName: "Pickles"
+ SegmentableDataName: "Segment Amount"
SideChainingDataName: "Side Chain"
SlabDataName: "Type"
SnowableDataName: "Snowy"
diff --git a/src/main/resources/lang/zh_TW.yml b/src/main/resources/lang/zh_TW.yml
index 24ae0c8..64f8783 100644
--- a/src/main/resources/lang/zh_TW.yml
+++ b/src/main/resources/lang/zh_TW.yml
@@ -131,6 +131,7 @@ DataKeyName:
SculkShriekerCanSummonDataName: "Summoning"
SculkShriekerShriekingDataName: "Shrieking"
SeaPickleDataName: "Pickles"
+ SegmentableDataName: "Segment Amount"
SideChainingDataName: "Side Chain"
SlabDataName: "Type"
SnowableDataName: "Snowy"
From edbe4a5a01cd0c464e49dcd5642496dd90d638df Mon Sep 17 00:00:00 2001
From: TWME <65117253+TWME-TW@users.noreply.github.com>
Date: Mon, 17 Nov 2025 16:14:20 +0800
Subject: [PATCH 6/7] =?UTF-8?q?feat(blockdata):=20=E6=96=B0=E5=A2=9E=20Tes?=
=?UTF-8?q?tBlockData=20=E9=A1=9E=E5=88=A5=E5=8F=8A=E5=85=B6=E8=99=95?=
=?UTF-8?q?=E7=90=86=E9=82=8F=E8=BC=AF?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../blockdatautil/BlockDataSeparater.java | 5 ++
.../blockdatautil/subdata/TestBlockData.java | 63 +++++++++++++++++++
.../twme/debugstickpro/localization/Lang.java | 1 +
src/main/resources/lang/en_US.yml | 1 +
src/main/resources/lang/zh_TW.yml | 1 +
5 files changed, 71 insertions(+)
create mode 100644 src/main/java/dev/twme/debugstickpro/blockdatautil/subdata/TestBlockData.java
diff --git a/src/main/java/dev/twme/debugstickpro/blockdatautil/BlockDataSeparater.java b/src/main/java/dev/twme/debugstickpro/blockdatautil/BlockDataSeparater.java
index c7c2b34..7e4602e 100644
--- a/src/main/java/dev/twme/debugstickpro/blockdatautil/BlockDataSeparater.java
+++ b/src/main/java/dev/twme/debugstickpro/blockdatautil/BlockDataSeparater.java
@@ -788,6 +788,11 @@ public static ArrayList separate(BlockData blockData) {
SubBlockData segmentable = new SegmentableData(blockData);
blockDataList.add(segmentable);
}
+
+ if (blockData instanceof TestBlock) {
+ SubBlockData testBlock = new TestBlockData(blockData);
+ blockDataList.add(testBlock);
+ }
}
blockDataList = filterSubBlockData(blockDataList);
diff --git a/src/main/java/dev/twme/debugstickpro/blockdatautil/subdata/TestBlockData.java b/src/main/java/dev/twme/debugstickpro/blockdatautil/subdata/TestBlockData.java
new file mode 100644
index 0000000..7c2c9f0
--- /dev/null
+++ b/src/main/java/dev/twme/debugstickpro/blockdatautil/subdata/TestBlockData.java
@@ -0,0 +1,63 @@
+package dev.twme.debugstickpro.blockdatautil.subdata;
+
+import org.bukkit.block.data.BlockData;
+import org.bukkit.block.data.type.TestBlock;
+
+import dev.twme.debugstickpro.blockdatautil.SubBlockData;
+import dev.twme.debugstickpro.localization.Lang;
+
+public class TestBlockData extends SubBlockData {
+ private TestBlock.Mode mode;
+
+ public TestBlockData(BlockData blockData) {
+ this.blockData = blockData;
+ this.mode = ((TestBlock) blockData).getMode();
+ }
+
+ @Override
+ public String dataName() {
+ return Lang.DataKeyName.TestBlockDataName;
+ }
+
+ @Override
+ public String getDataAsString() {
+ return mode.name();
+ }
+
+ @Override
+ public SubBlockData nextData() {
+ TestBlock testBlock = ((TestBlock) blockData);
+ switch (mode) {
+ case START -> mode = TestBlock.Mode.LOG;
+ case LOG -> mode = TestBlock.Mode.FAIL;
+ case FAIL -> mode = TestBlock.Mode.ACCEPT;
+ case ACCEPT -> mode = TestBlock.Mode.START;
+ }
+ testBlock.setMode(mode);
+ return this;
+ }
+
+ @Override
+ public SubBlockData previousData() {
+ TestBlock testBlock = ((TestBlock) blockData);
+ switch (mode) {
+ case LOG -> mode = TestBlock.Mode.START;
+ case FAIL -> mode = TestBlock.Mode.LOG;
+ case ACCEPT -> mode = TestBlock.Mode.FAIL;
+ case START -> mode = TestBlock.Mode.ACCEPT;
+ }
+ testBlock.setMode(mode);
+ return this;
+ }
+
+ @Override
+ public BlockData copyTo(BlockData blockData) {
+ ((TestBlock) blockData).setMode(mode);
+ return blockData;
+ }
+
+ @Override
+ public SubBlockData fromBlockData(BlockData blockData) {
+ return new TestBlockData(blockData);
+ }
+}
diff --git a/src/main/java/dev/twme/debugstickpro/localization/Lang.java b/src/main/java/dev/twme/debugstickpro/localization/Lang.java
index 844b6fe..d5321a6 100644
--- a/src/main/java/dev/twme/debugstickpro/localization/Lang.java
+++ b/src/main/java/dev/twme/debugstickpro/localization/Lang.java
@@ -168,6 +168,7 @@ public final static class DataKeyName {
public final static String StairsDataName = "DataKeyName.StairsDataName";
public final static String StructureBlockDataName = "DataKeyName.StructureBlockDataName";
public final static String TechnicalPistonDataName = "DataKeyName.TechnicalPistonDataName";
+ public final static String TestBlockDataName = "DataKeyName.TestBlockDataName";
public final static String TNTDataName = "DataKeyName.TNTDataName";
public final static String TrialSpawnerDataName = "DataKeyName.TrialSpawnerDataName";
public final static String TripwireDataName = "DataKeyName.TripwireDataName";
diff --git a/src/main/resources/lang/en_US.yml b/src/main/resources/lang/en_US.yml
index 8be0a01..ffdbece 100644
--- a/src/main/resources/lang/en_US.yml
+++ b/src/main/resources/lang/en_US.yml
@@ -138,6 +138,7 @@ DataKeyName:
StairsDataName: "Shape"
StructureBlockDataName: "Mode"
TechnicalPistonDataName: "Type"
+ TestBlockDataName: "Mode"
TNTDataName: "Unstable"
TrialSpawnerDataName: "State"
TripwireDataName: "Disarmed"
diff --git a/src/main/resources/lang/zh_TW.yml b/src/main/resources/lang/zh_TW.yml
index 64f8783..feaf787 100644
--- a/src/main/resources/lang/zh_TW.yml
+++ b/src/main/resources/lang/zh_TW.yml
@@ -139,6 +139,7 @@ DataKeyName:
StairsDataName: "Shape"
StructureBlockDataName: "Mode"
TechnicalPistonDataName: "Type"
+ TestBlockDataName: "Mode"
TNTDataName: "Unstable"
TrialSpawnerDataName: "State"
TripwireDataName: "Disarmed"
From cc3dc454476ca555f81940c5935f253b98136abb Mon Sep 17 00:00:00 2001
From: TWME <65117253+TWME-TW@users.noreply.github.com>
Date: Mon, 17 Nov 2025 16:20:54 +0800
Subject: [PATCH 7/7] =?UTF-8?q?feat(blockdata):=20=E6=96=B0=E5=A2=9E=20Dri?=
=?UTF-8?q?edGhastHydrationData=20=E9=A1=9E=E5=88=A5=E5=8F=8A=E5=85=B6?=
=?UTF-8?q?=E8=99=95=E7=90=86=E9=82=8F=E8=BC=AF?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../blockdatautil/BlockDataSeparater.java | 7 +++
.../subdata/DriedGhastHydrationData.java | 61 +++++++++++++++++++
.../twme/debugstickpro/localization/Lang.java | 1 +
src/main/resources/lang/en_US.yml | 1 +
src/main/resources/lang/zh_TW.yml | 1 +
5 files changed, 71 insertions(+)
create mode 100644 src/main/java/dev/twme/debugstickpro/blockdatautil/subdata/DriedGhastHydrationData.java
diff --git a/src/main/java/dev/twme/debugstickpro/blockdatautil/BlockDataSeparater.java b/src/main/java/dev/twme/debugstickpro/blockdatautil/BlockDataSeparater.java
index 7e4602e..d37e40b 100644
--- a/src/main/java/dev/twme/debugstickpro/blockdatautil/BlockDataSeparater.java
+++ b/src/main/java/dev/twme/debugstickpro/blockdatautil/BlockDataSeparater.java
@@ -795,6 +795,13 @@ public static ArrayList separate(BlockData blockData) {
}
}
+ if (isValidMaterial("dried_ghast")) {
+ if (blockData instanceof DriedGhast) {
+ SubBlockData driedGhastState = new DriedGhastHydrationData(blockData);
+ blockDataList.add(driedGhastState);
+ }
+ }
+
blockDataList = filterSubBlockData(blockDataList);
cache.put(blockData.getMaterial(), blockDataList);
diff --git a/src/main/java/dev/twme/debugstickpro/blockdatautil/subdata/DriedGhastHydrationData.java b/src/main/java/dev/twme/debugstickpro/blockdatautil/subdata/DriedGhastHydrationData.java
new file mode 100644
index 0000000..007cc3f
--- /dev/null
+++ b/src/main/java/dev/twme/debugstickpro/blockdatautil/subdata/DriedGhastHydrationData.java
@@ -0,0 +1,61 @@
+package dev.twme.debugstickpro.blockdatautil.subdata;
+
+import org.bukkit.block.data.BlockData;
+import org.bukkit.block.data.type.DriedGhast;
+
+import dev.twme.debugstickpro.blockdatautil.SubBlockData;
+import dev.twme.debugstickpro.localization.Lang;
+
+public class DriedGhastHydrationData extends SubBlockData {
+ private int hydration;
+
+ public DriedGhastHydrationData(BlockData blockData) {
+ this.blockData = blockData;
+ this.hydration = ((DriedGhast) blockData).getHydration();
+ }
+
+ @Override
+ public String dataName() {
+ return Lang.DataKeyName.DriedGhastHydrationDataName;
+ }
+
+ @Override
+ public String getDataAsString() {
+ return String.valueOf(hydration);
+ }
+
+ @Override
+ public SubBlockData nextData() {
+ DriedGhast driedGhast = ((DriedGhast) blockData);
+ if (hydration >= driedGhast.getMaximumHydration()) {
+ hydration = 0;
+ } else {
+ hydration++;
+ }
+ driedGhast.setHydration(hydration);
+ return this;
+ }
+
+ @Override
+ public SubBlockData previousData() {
+ DriedGhast driedGhast = ((DriedGhast) blockData);
+ if (hydration <= 0) {
+ hydration = driedGhast.getMaximumHydration();
+ } else {
+ hydration--;
+ }
+ driedGhast.setHydration(hydration);
+ return this;
+ }
+
+ @Override
+ public BlockData copyTo(BlockData blockData) {
+ ((DriedGhast) blockData).setHydration(hydration);
+ return blockData;
+ }
+
+ @Override
+ public SubBlockData fromBlockData(BlockData blockData) {
+ return new DriedGhastHydrationData(blockData);
+ }
+}
diff --git a/src/main/java/dev/twme/debugstickpro/localization/Lang.java b/src/main/java/dev/twme/debugstickpro/localization/Lang.java
index d5321a6..fa83dc3 100644
--- a/src/main/java/dev/twme/debugstickpro/localization/Lang.java
+++ b/src/main/java/dev/twme/debugstickpro/localization/Lang.java
@@ -98,6 +98,7 @@ public final static class DataKeyName {
public final static String DaylightDetectorDataName = "DataKeyName.DaylightDetectorDataName";
public final static String DirectionalDataName = "DataKeyName.DirectionalDataName";
public final static String DispenserDataName = "DataKeyName.DispenserDataName";
+ public final static String DriedGhastHydrationDataName = "DataKeyName.DriedGhastHydrationDataName";
public final static String DoorDataName = "DataKeyName.DoorDataName";
public final static String EndPortalFrameDataName = "DataKeyName.EndPortalFrameDataName";
public final static String FaceAttachableDataName = "DataKeyName.FaceAttachableDataName";
diff --git a/src/main/resources/lang/en_US.yml b/src/main/resources/lang/en_US.yml
index ffdbece..bcd1b4a 100644
--- a/src/main/resources/lang/en_US.yml
+++ b/src/main/resources/lang/en_US.yml
@@ -70,6 +70,7 @@ DataKeyName:
DirectionalDataName: "Direction"
DispenserDataName: "Triggered"
DoorDataName: "Door Hinge"
+ DriedGhastHydrationDataName: "Hydration"
EndPortalFrameDataName: "Eye"
FaceAttachableDataName: "Attached Face"
FarmlandDataName: "Moisture"
diff --git a/src/main/resources/lang/zh_TW.yml b/src/main/resources/lang/zh_TW.yml
index feaf787..3391166 100644
--- a/src/main/resources/lang/zh_TW.yml
+++ b/src/main/resources/lang/zh_TW.yml
@@ -71,6 +71,7 @@ DataKeyName:
DirectionalDataName: "Direction"
DispenserDataName: "Triggered"
DoorDataName: "Door Hinge"
+ DriedGhastHydrationDataName: "Hydration"
EndPortalFrameDataName: "Eye"
FaceAttachableDataName: "Attached Face"
FarmlandDataName: "Moisture"