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"