diff --git a/src/main/java/dev/twme/debugstickpro/DebugStickPro.java b/src/main/java/dev/twme/debugstickpro/DebugStickPro.java index 3748daf..c102a01 100644 --- a/src/main/java/dev/twme/debugstickpro/DebugStickPro.java +++ b/src/main/java/dev/twme/debugstickpro/DebugStickPro.java @@ -68,7 +68,7 @@ public final class DebugStickPro extends JavaPlugin { /** * This is the version of the language file */ - public static final int LANG_VERSION = 4; + public static final int LANG_VERSION = 5; /** * This method is called when the plugin is loaded diff --git a/src/main/java/dev/twme/debugstickpro/localization/I18n.java b/src/main/java/dev/twme/debugstickpro/localization/I18n.java index 71a4988..eb82967 100644 --- a/src/main/java/dev/twme/debugstickpro/localization/I18n.java +++ b/src/main/java/dev/twme/debugstickpro/localization/I18n.java @@ -1,10 +1,12 @@ package dev.twme.debugstickpro.localization; +import dev.twme.debugstickpro.blockdatautil.SubBlockData; import dev.twme.debugstickpro.config.ConfigFile; import dev.twme.debugstickpro.hook.PlaceholderAPIUtil; import org.bukkit.Bukkit; import java.util.List; +import java.util.Locale; import java.util.UUID; public class I18n { @@ -58,4 +60,40 @@ public static List list(String key) { return lang.getList(key); } + + /** + * Translate a SubBlockData value for the player. + * + * @param playerUUID the UUID of the player + * @param subBlockData the SubBlockData whose value should be translated + * @return translated value, or the raw value in lower case when no translation exists + */ + public static String blockDataValue(UUID playerUUID, SubBlockData subBlockData) { + String playerLocale = PlayerLanguageManager.getLocale(playerUUID); + LangFileReader lang = LangFileManager.getLang(playerLocale); + String rawValue = subBlockData.getDataAsString(); + + String translated = findBlockDataValue(lang, subBlockData.name(), rawValue); + if (translated != null) { + return translated; + } + + if (!playerLocale.equals(ConfigFile.Language.DefaultLanguage)) { + translated = findBlockDataValue(LangFileManager.getLang(ConfigFile.Language.DefaultLanguage), subBlockData.name(), rawValue); + if (translated != null) { + return translated; + } + } + + return rawValue.toLowerCase(Locale.ROOT); + } + + private static String findBlockDataValue(LangFileReader lang, String dataType, String rawValue) { + String translated = lang.getOptionalString(Lang.DataValueName.value(dataType, rawValue)); + if (translated != null) { + return translated; + } + + return lang.getOptionalString(Lang.DataValueName.common(rawValue)); + } } diff --git a/src/main/java/dev/twme/debugstickpro/localization/Lang.java b/src/main/java/dev/twme/debugstickpro/localization/Lang.java index 4e0bf7c..5e566b8 100644 --- a/src/main/java/dev/twme/debugstickpro/localization/Lang.java +++ b/src/main/java/dev/twme/debugstickpro/localization/Lang.java @@ -194,4 +194,17 @@ public final static class DataKeyName { public final static String WaterloggedDataName = "DataKeyName.WaterloggedDataName"; } + + public final static class DataValueName { + private final static String Root = "DataValueName"; + private final static String Common = Root + ".Common"; + + public static String value(String dataType, String value) { + return Root + "." + dataType + "." + value; + } + + public static String common(String value) { + return Common + "." + value; + } + } } diff --git a/src/main/java/dev/twme/debugstickpro/localization/LangFileReader.java b/src/main/java/dev/twme/debugstickpro/localization/LangFileReader.java index c6eb885..5e3a7d2 100644 --- a/src/main/java/dev/twme/debugstickpro/localization/LangFileReader.java +++ b/src/main/java/dev/twme/debugstickpro/localization/LangFileReader.java @@ -121,6 +121,16 @@ public String getString(String key) { return this.langFile.getString(key); } + /** + * Get a string without falling back to the default language or modifying the file. + * + * @param key the key of the string + * @return the string of the key, or null if it is not configured + */ + public String getOptionalString(String key) { + return this.langFile.getString(key); + } + /** * Get the list of the key * diff --git a/src/main/java/dev/twme/debugstickpro/mode/classic/ClassicActionBarDisplay.java b/src/main/java/dev/twme/debugstickpro/mode/classic/ClassicActionBarDisplay.java index 3d7d92d..840549e 100644 --- a/src/main/java/dev/twme/debugstickpro/mode/classic/ClassicActionBarDisplay.java +++ b/src/main/java/dev/twme/debugstickpro/mode/classic/ClassicActionBarDisplay.java @@ -56,10 +56,11 @@ public static String getDisplay(UUID playerUUID, BlockData blockData) { for (int i = 0; i < displayList.size(); i++) { SubBlockData subBlockData = displayList.get((i + sort) % displayList.size()); + String value = I18n.blockDataValue(playerUUID, subBlockData); if (subBlockData.isUsing()) { - stringBuilder.append(Lang.ActionBar.formatSelectedData(I18n.string(playerUUID, Lang.ActionBar.SelectedDataFormat), I18n.string(playerUUID, subBlockData.dataName()), subBlockData.getDataAsString().toLowerCase())).append(" "); + stringBuilder.append(Lang.ActionBar.formatSelectedData(I18n.string(playerUUID, Lang.ActionBar.SelectedDataFormat), I18n.string(playerUUID, subBlockData.dataName()), value)).append(" "); } else { - stringBuilder.append(Lang.ActionBar.formatNotSelectedData(I18n.string(playerUUID, Lang.ActionBar.NotSelectedDataFormat), I18n.string(playerUUID, subBlockData.dataName()), subBlockData.getDataAsString().toLowerCase())).append(" "); + stringBuilder.append(Lang.ActionBar.formatNotSelectedData(I18n.string(playerUUID, Lang.ActionBar.NotSelectedDataFormat), I18n.string(playerUUID, subBlockData.dataName()), value)).append(" "); } } return stringBuilder.toString(); diff --git a/src/main/java/dev/twme/debugstickpro/mode/copy/CopyActionBarDisplay.java b/src/main/java/dev/twme/debugstickpro/mode/copy/CopyActionBarDisplay.java index 13719b6..88fed7a 100644 --- a/src/main/java/dev/twme/debugstickpro/mode/copy/CopyActionBarDisplay.java +++ b/src/main/java/dev/twme/debugstickpro/mode/copy/CopyActionBarDisplay.java @@ -22,7 +22,7 @@ public static String getDisplay(UUID playerUUID) { StringBuilder stringBuilder = new StringBuilder(); for (SubBlockData subBlockData : copiedSubBlockData) { - stringBuilder.append(Lang.ActionBar.formatCopiedBlockData(I18n.string(playerUUID, Lang.ActionBar.CopiedBlockDataFormat), I18n.string(playerUUID, subBlockData.dataName()), subBlockData.getDataAsString().toLowerCase())).append(" "); + stringBuilder.append(Lang.ActionBar.formatCopiedBlockData(I18n.string(playerUUID, Lang.ActionBar.CopiedBlockDataFormat), I18n.string(playerUUID, subBlockData.dataName()), I18n.blockDataValue(playerUUID, subBlockData))).append(" "); } return stringBuilder.toString(); } diff --git a/src/main/resources/lang/en_US.yml b/src/main/resources/lang/en_US.yml index 2c40ccb..04ad593 100644 --- a/src/main/resources/lang/en_US.yml +++ b/src/main/resources/lang/en_US.yml @@ -1,5 +1,5 @@ # Don't change this value -LangFileVersion: 4 +LangFileVersion: 5 CommandsMessages: Help: @@ -45,7 +45,7 @@ DataKeyName: BrewingStandBottle_0DataName: "Bottle 1" BrewingStandBottle_1DataName: "Bottle 2" BrewingStandBottle_2DataName: "Bottle 3" - BrushableDataName: "Brushed" + BrushableDataName: "Dusted" BubbleColumnDataName: "Drag" CakeDataName: "Bites" CampfireDataName: "Signal Fire" @@ -61,12 +61,11 @@ DataKeyName: CommandBlockDataName: "Conditional" ComparatorDataName: "Mode" CopperGolemStatuePoseDataName: "Pose" - CrafterCraftingDataName: "Type" + CrafterCraftingDataName: "Crafting" CrafterOrientationDataName: "Crafter Orientation" CrafterTriggerDataName: "Triggered" - CreakingHeartNatureDataName: "isNature" CreakingHeartNaturalDataName: "Natural" - CreakingHeartStateDataName: "isActive" + CreakingHeartStateDataName: "State" DaylightDetectorDataName: "Inverted" DecoratedPotCrackedDataName: "Cracked" DirectionalDataName: "Direction" @@ -88,37 +87,37 @@ DataKeyName: LectronDataName: "Has Book" LevelledDataName: "Level" LightableDataName: "Lit" - MultipleFacingDownDataName: "Faces(Down)" - MultipleFacingEastDataName: "Faces(East)" - MultipleFacingEastNorthEastDataName: "Faces(East North East)" - MultipleFacingEastSouthEastDataName: "Faces(East South East)" - MultipleFacingNorthDataName: "Faces(North)" - MultipleFacingNorthEastDataName: "Faces(North East)" - MultipleFacingNorthNorthEastDataName: "Faces(North North East)" - MultipleFacingNorthNorthWestDataName: "Faces(North North West)" - MultipleFacingNorthWestDataName: "Faces(North West)" - MultipleFacingSelfDataName: "Faces(Self)" - MultipleFacingSouthDataName: "Faces(South)" - MultipleFacingSouthEastDataName: "Faces(South East)" - MultipleFacingSouthSouthEastDataName: "Faces(South South East)" - MultipleFacingSouthSouthWestDataName: "Faces(South South West)" - MultipleFacingSouthWestDataName: "Faces(South West)" - MultipleFacingUpDataName: "Faces(Up)" - MultipleFacingWestDataName: "Faces(West)" - MultipleFacingWestNorthWestDataName: "Faces(West North West)" - MultipleFacingWestSouthWestDataName: "Faces(West South West)" + MultipleFacingDownDataName: "Faces (Down)" + MultipleFacingEastDataName: "Faces (East)" + MultipleFacingEastNorthEastDataName: "Faces (East North East)" + MultipleFacingEastSouthEastDataName: "Faces (East South East)" + MultipleFacingNorthDataName: "Faces (North)" + MultipleFacingNorthEastDataName: "Faces (North East)" + MultipleFacingNorthNorthEastDataName: "Faces (North North East)" + MultipleFacingNorthNorthWestDataName: "Faces (North North West)" + MultipleFacingNorthWestDataName: "Faces (North West)" + MultipleFacingSelfDataName: "Faces (Self)" + MultipleFacingSouthDataName: "Faces (South)" + MultipleFacingSouthEastDataName: "Faces (South East)" + MultipleFacingSouthSouthEastDataName: "Faces (South South East)" + MultipleFacingSouthSouthWestDataName: "Faces (South South West)" + MultipleFacingSouthWestDataName: "Faces (South West)" + MultipleFacingUpDataName: "Faces (Up)" + MultipleFacingWestDataName: "Faces (West)" + MultipleFacingWestNorthWestDataName: "Faces (West North West)" + MultipleFacingWestSouthWestDataName: "Faces (West South West)" MossyCarpetBottomDataName: "Bottom" - MossyCarpetHeightEastDataName: "Height(East)" - MossyCarpetHeightNorthDataName: "Height(North)" - MossyCarpetHeightSouthDataName: "Height(South)" - MossyCarpetHeightWestDataName: "Height(West)" + MossyCarpetHeightEastDataName: "Height (East)" + MossyCarpetHeightNorthDataName: "Height (North)" + MossyCarpetHeightSouthDataName: "Height (South)" + MossyCarpetHeightWestDataName: "Height (West)" NoteBlockInstrumentDataName: "Instrument" NoteBlockNoteDataName: "Note" OpenableDataName: "Open" OrientableDataName: "Axis" PinkPetalsDataname: "Flower Amount" PistonDataName: "Extended" - PistonHeadDataName: "ShortArm" + PistonHeadDataName: "Short Arm" PointedDripstoneThicknessDataName: "Thickness" PointedDripstoneVerticalDirectionDataName: "Vertical Direction" PotentSulfurStateDataName: "Potent Sulfur State" @@ -137,14 +136,14 @@ DataKeyName: ScaffoldingDistanceDataName: "Distance" SculkCatalystDataName: "Bloom" SculkSensorDataName: "Phase" - SculkShriekerCanSummonDataName: "Summoning" + SculkShriekerCanSummonDataName: "Can Summon" SculkShriekerShriekingDataName: "Shrieking" SeaPickleDataName: "Pickles" SegmentableDataName: "Segment Amount" SideChainingDataName: "Side Chain" SlabDataName: "Type" - SnowableDataName: "Snowy" SnowDataName: "Layers" + SnowableDataName: "Snowy" SpeleothemThicknessDataName: "Thickness" SpeleothemVerticalDirectionDataName: "Vertical Direction" StairsDataName: "Shape" @@ -155,11 +154,192 @@ DataKeyName: TrialSpawnerDataName: "State" TripwireDataName: "Disarmed" TurtleEggDataName: "Eggs" - VaultStateDataName: "Vault State" VaultOminousDataName: "Ominous" + VaultStateDataName: "Vault State" WallHeightEastDataName: "East" WallHeightNorthDataName: "North" WallHeightSouthDataName: "South" WallHeightWestDataName: "West" WallUpDataName: "Up" WaterloggedDataName: "Waterlogged" + +DataValueName: + Common: + "true": "True" + "false": "False" + "0": "0" + "1": "1" + "2": "2" + "3": "3" + "4": "4" + "5": "5" + "6": "6" + "7": "7" + "8": "8" + "9": "9" + "10": "10" + "11": "11" + "12": "12" + "13": "13" + "14": "14" + "15": "15" + "16": "16" + "17": "17" + "18": "18" + "19": "19" + "20": "20" + "21": "21" + "22": "22" + "23": "23" + "24": "24" + "25": "25" + "26": "26" + "27": "27" + "28": "28" + "29": "29" + "30": "30" + "31": "31" + "Note{F#}": "F#" + "Note{G}": "G" + "Note{G#}": "G#" + "Note{A}": "A" + "Note{A#}": "A#" + "Note{B}": "B" + "Note{C}": "C" + "Note{C#}": "C#" + "Note{D}": "D" + "Note{D#}": "D#" + "Note{E}": "E" + "Note{F}": "F" + "NONE": "None" + "SMALL": "Small" + "LARGE": "Large" + "HEAD": "Head" + "FOOT": "Foot" + "FLOOR": "Floor" + "CEILING": "Ceiling" + "WALL": "Wall" + "SINGLE_WALL": "Single Wall" + "DOUBLE_WALL": "Double Wall" + "UNSTABLE": "Unstable" + "PARTIAL": "Partial" + "FULL": "Full" + "TOP": "Top" + "BOTTOM": "Bottom" + "SINGLE": "Single" + "LEFT": "Left" + "RIGHT": "Right" + "CENTER": "Center" + "COMPARE": "Compare" + "SUBTRACT": "Subtract" + "STANDING": "Standing" + "SITTING": "Sitting" + "RUNNING": "Running" + "STAR": "Star" + "DOWN_EAST": "Down East" + "DOWN_NORTH": "Down North" + "DOWN_SOUTH": "Down South" + "DOWN_WEST": "Down West" + "UP_EAST": "Up East" + "UP_NORTH": "Up North" + "UP_SOUTH": "Up South" + "UP_WEST": "Up West" + "WEST_UP": "West Up" + "EAST_UP": "East Up" + "NORTH_UP": "North Up" + "SOUTH_UP": "South Up" + "NORTH": "North" + "EAST": "East" + "SOUTH": "South" + "WEST": "West" + "UP": "Up" + "DOWN": "Down" + "NORTH_EAST": "North East" + "NORTH_WEST": "North West" + "SOUTH_EAST": "South East" + "SOUTH_WEST": "South West" + "WEST_NORTH_WEST": "West North West" + "NORTH_NORTH_WEST": "North North West" + "NORTH_NORTH_EAST": "North North East" + "EAST_NORTH_EAST": "East North East" + "EAST_SOUTH_EAST": "East South East" + "SOUTH_SOUTH_EAST": "South South East" + "SOUTH_SOUTH_WEST": "South South West" + "WEST_SOUTH_WEST": "West South West" + "SELF": "Self" + "X": "X Axis" + "Y": "Y Axis" + "Z": "Z Axis" + "TIP_MERGE": "Tip Merge" + "TIP": "Tip" + "FRUSTUM": "Frustum" + "MIDDLE": "Middle" + "BASE": "Base" + "DRY": "Dry" + "WET": "Wet" + "DORMANT": "Dormant" + "ERUPTING": "Erupting" + "CONTINUOUS": "Continuous" + "NORTH_SOUTH": "North South" + "EAST_WEST": "East West" + "ASCENDING_EAST": "Ascending East" + "ASCENDING_WEST": "Ascending West" + "ASCENDING_NORTH": "Ascending North" + "ASCENDING_SOUTH": "Ascending South" + "INACTIVE": "Inactive" + "ACTIVE": "Active" + "COOLDOWN": "Cooldown" + "DOUBLE": "Double" + "STRAIGHT": "Straight" + "INNER_LEFT": "Inner Left" + "INNER_RIGHT": "Inner Right" + "OUTER_LEFT": "Outer Left" + "OUTER_RIGHT": "Outer Right" + "SAVE": "Save" + "LOAD": "Load" + "CORNER": "Corner" + "DATA": "Data" + "NORMAL": "Normal" + "STICKY": "Sticky" + "START": "Start" + "LOG": "Log" + "FAIL": "Fail" + "ACCEPT": "Accept" + "WAITING_FOR_PLAYERS": "Waiting for Players" + "WAITING_FOR_REWARD_EJECTION": "Waiting for Reward Ejection" + "EJECTING_REWARD": "Ejecting Reward" + "UNLOCKING": "Unlocking" + "EJECTING": "Ejecting" + "LOW": "Low" + "TALL": "Tall" + "UNCONNECTED": "Unconnected" + "UPROOTED": "Uprooted" + "AWAKE": "Awake" + "SIDE": "Side" + "PIANO": "Piano" + "BASS_DRUM": "Bass Drum" + "SNARE_DRUM": "Snare Drum" + "STICKS": "Sticks" + "BASS_GUITAR": "Bass Guitar" + "FLUTE": "Flute" + "BELL": "Bell" + "GUITAR": "Guitar" + "CHIME": "Chime" + "XYLOPHONE": "Xylophone" + "IRON_XYLOPHONE": "Iron Xylophone" + "COW_BELL": "Cow Bell" + "DIDGERIDOO": "Didgeridoo" + "BIT": "Bit" + "BANJO": "Banjo" + "PLING": "Pling" + "TRUMPET": "Trumpet" + "TRUMPET_EXPOSED": "Exposed Trumpet" + "TRUMPET_OXIDIZED": "Oxidized Trumpet" + "TRUMPET_WEATHERED": "Weathered Trumpet" + "ZOMBIE": "Zombie" + "SKELETON": "Skeleton" + "CREEPER": "Creeper" + "DRAGON": "Dragon" + "WITHER_SKELETON": "Wither Skeleton" + "PIGLIN": "Piglin" + "CUSTOM_HEAD": "Custom Head" diff --git a/src/main/resources/lang/zh_TW.yml b/src/main/resources/lang/zh_TW.yml index 2d33e1f..cae6008 100644 --- a/src/main/resources/lang/zh_TW.yml +++ b/src/main/resources/lang/zh_TW.yml @@ -1,5 +1,5 @@ # Don't change this value -LangFileVersion: 4 +LangFileVersion: 5 CommandsMessages: Help: @@ -34,131 +34,313 @@ Tips: FreezeModeIntroduction: "凍結模式: 解凍所有方塊, 凍結/解凍單個方塊。" DataKeyName: - AgeableDataName: "Age" - AnaloguePowerableDataName: "Power" - AttachableDataName: "Attached" - BambooDataName: "Leaves" - BedDataName: "Part" - BeehiveDataName: "Honey Level" - BellDataName: "Attachment" - BigDripleafDataName: "Tilt" - BisectedDataName: "Half" - BrewingStandBottle_0DataName: "Bottle 1" - BrewingStandBottle_1DataName: "Bottle 2" - BrewingStandBottle_2DataName: "Bottle 3" - BrushableDataName: "Brushed" - BubbleColumnDataName: "Drag" - CakeDataName: "Bites" - CampfireDataName: "Signal Fire" - CandleDataName: "Candle Count" - CaveVinesPlantDataName: "Berries" - ChestDataName: "Chest Type" - ChiseledBookshelfSlot_0DataName: "Slot 0" - ChiseledBookshelfSlot_1DataName: "Slot 1" - ChiseledBookshelfSlot_2DataName: "Slot 2" - ChiseledBookshelfSlot_3DataName: "Slot 3" - ChiseledBookshelfSlot_4DataName: "Slot 4" - ChiseledBookshelfSlot_5DataName: "Slot 5" - CommandBlockDataName: "Conditional" - ComparatorDataName: "Mode" - CopperGolemStatuePoseDataName: "Pose" - CrafterCraftingDataName: "Type" - CrafterOrientationDataName: "Crafter Orientation" - CrafterTriggerDataName: "Triggered" - CreakingHeartNatureDataName: "isNature" - CreakingHeartNaturalDataName: "Natural" - CreakingHeartStateDataName: "isActive" - DaylightDetectorDataName: "Inverted" - DecoratedPotCrackedDataName: "Cracked" - DirectionalDataName: "Direction" - DispenserDataName: "Triggered" - DoorDataName: "Door Hinge" - DriedGhastHydrationDataName: "Hydration" - EndPortalFrameDataName: "Eye" - FaceAttachableDataName: "Attached Face" - FarmlandDataName: "Moisture" - GateDataName: "In Wall" - HangableDataName: "Hanging" - HangingMossTipDataName: "Tip" - HatchableDataName: "Hatch" - HopperDataName: "Enabled" - JigsawDataName: "Orientation" - JukeboxDataName: "Has Record" - LeavesDistanceDataName: "Distance" - LeavesPersistentDataName: "Persistent" - LectronDataName: "Has Book" - LevelledDataName: "Level" - LightableDataName: "Lit" - MultipleFacingDownDataName: "Faces(Down)" - MultipleFacingEastDataName: "Faces(East)" - MultipleFacingEastNorthEastDataName: "Faces(East North East)" - MultipleFacingEastSouthEastDataName: "Faces(East South East)" - MultipleFacingNorthDataName: "Faces(North)" - MultipleFacingNorthEastDataName: "Faces(North East)" - MultipleFacingNorthNorthEastDataName: "Faces(North North East)" - MultipleFacingNorthNorthWestDataName: "Faces(North North West)" - MultipleFacingNorthWestDataName: "Faces(North West)" - MultipleFacingSelfDataName: "Faces(Self)" - MultipleFacingSouthDataName: "Faces(South)" - MultipleFacingSouthEastDataName: "Faces(South East)" - MultipleFacingSouthSouthEastDataName: "Faces(South South East)" - MultipleFacingSouthSouthWestDataName: "Faces(South South West)" - MultipleFacingSouthWestDataName: "Faces(South West)" - MultipleFacingUpDataName: "Faces(Up)" - MultipleFacingWestDataName: "Faces(West)" - MultipleFacingWestNorthWestDataName: "Faces(West North West)" - MultipleFacingWestSouthWestDataName: "Faces(West South West)" - MossyCarpetBottomDataName: "Bottom" - MossyCarpetHeightEastDataName: "Height(East)" - MossyCarpetHeightNorthDataName: "Height(North)" - MossyCarpetHeightSouthDataName: "Height(South)" - MossyCarpetHeightWestDataName: "Height(West)" - NoteBlockInstrumentDataName: "Instrument" - NoteBlockNoteDataName: "Note" - OpenableDataName: "Open" - OrientableDataName: "Axis" - PinkPetalsDataname: "Flower Amount" - PistonDataName: "Extended" - PistonHeadDataName: "ShortArm" - PointedDripstoneThicknessDataName: "Thickness" - PointedDripstoneVerticalDirectionDataName: "Vertical Direction" - PotentSulfurStateDataName: "Potent Sulfur State" - PowerableDataName: "Powered" - RailDataName: "Shape" - RedstoneWireEastDataName: "East" - RedstoneWireNorthDataName: "North" - RedstoneWireSouthDataName: "South" - RedstoneWireWestDataName: "West" - RepeaterDelayDataName: "Delay" - RepeaterLockedDataName: "Locked" - RespawnAnchorDataName: "Charges" - RotatableDataName: "Rotation" - SaplingDataName: "Stage" - ScaffoldingBottomDataName: "Bottom" - ScaffoldingDistanceDataName: "Distance" - SculkCatalystDataName: "Bloom" - SculkSensorDataName: "Phase" - SculkShriekerCanSummonDataName: "Summoning" - SculkShriekerShriekingDataName: "Shrieking" - SeaPickleDataName: "Pickles" - SegmentableDataName: "Segment Amount" - SideChainingDataName: "Side Chain" - SlabDataName: "Type" - SnowableDataName: "Snowy" - SnowDataName: "Layers" - SpeleothemThicknessDataName: "Thickness" - SpeleothemVerticalDirectionDataName: "Vertical Direction" - StairsDataName: "Shape" - StructureBlockDataName: "Mode" - TechnicalPistonDataName: "Type" - TestBlockDataName: "Mode" - TNTDataName: "Unstable" - TrialSpawnerDataName: "State" - TripwireDataName: "Disarmed" - TurtleEggDataName: "Eggs" - WallHeightEastDataName: "East" - WallHeightNorthDataName: "North" - WallHeightSouthDataName: "South" - WallHeightWestDataName: "West" - WallUpDataName: "Up" - WaterloggedDataName: "Waterlogged" + AgeableDataName: "年齡" + AnaloguePowerableDataName: "能量" + AttachableDataName: "已附著" + BambooDataName: "葉片" + BedDataName: "部分" + BeehiveDataName: "蜂蜜等級" + BellDataName: "附著方式" + BigDripleafDataName: "傾斜" + BisectedDataName: "半部" + BrewingStandBottle_0DataName: "瓶子 1" + BrewingStandBottle_1DataName: "瓶子 2" + BrewingStandBottle_2DataName: "瓶子 3" + BrushableDataName: "刷拭進度" + BubbleColumnDataName: "阻力" + CakeDataName: "咬食次數" + CampfireDataName: "煙霧信號" + CandleDataName: "蠟燭數量" + CaveVinesPlantDataName: "漿果" + ChestDataName: "箱子類型" + ChiseledBookshelfSlot_0DataName: "欄位 0" + ChiseledBookshelfSlot_1DataName: "欄位 1" + ChiseledBookshelfSlot_2DataName: "欄位 2" + ChiseledBookshelfSlot_3DataName: "欄位 3" + ChiseledBookshelfSlot_4DataName: "欄位 4" + ChiseledBookshelfSlot_5DataName: "欄位 5" + CommandBlockDataName: "條件式" + ComparatorDataName: "模式" + CopperGolemStatuePoseDataName: "姿勢" + CrafterCraftingDataName: "合成中" + CrafterOrientationDataName: "合成器朝向" + CrafterTriggerDataName: "已觸發" + CreakingHeartNaturalDataName: "天然" + CreakingHeartStateDataName: "狀態" + DaylightDetectorDataName: "反轉" + DecoratedPotCrackedDataName: "破裂" + DirectionalDataName: "方向" + DispenserDataName: "已觸發" + DoorDataName: "門鉸鏈" + DriedGhastHydrationDataName: "含水量" + EndPortalFrameDataName: "末影之眼" + FaceAttachableDataName: "附著面" + FarmlandDataName: "濕度" + GateDataName: "位於牆內" + HangableDataName: "懸掛" + HangingMossTipDataName: "末端" + HatchableDataName: "孵化程度" + HopperDataName: "已啟用" + JigsawDataName: "朝向" + JukeboxDataName: "有唱片" + LeavesDistanceDataName: "距離" + LeavesPersistentDataName: "持續存在" + LectronDataName: "有書" + LevelledDataName: "等級" + LightableDataName: "點亮" + MultipleFacingDownDataName: "面(下)" + MultipleFacingEastDataName: "面(東)" + MultipleFacingEastNorthEastDataName: "面(東北東)" + MultipleFacingEastSouthEastDataName: "面(東南東)" + MultipleFacingNorthDataName: "面(北)" + MultipleFacingNorthEastDataName: "面(東北)" + MultipleFacingNorthNorthEastDataName: "面(北北東)" + MultipleFacingNorthNorthWestDataName: "面(北北西)" + MultipleFacingNorthWestDataName: "面(西北)" + MultipleFacingSelfDataName: "面(自身)" + MultipleFacingSouthDataName: "面(南)" + MultipleFacingSouthEastDataName: "面(東南)" + MultipleFacingSouthSouthEastDataName: "面(南南東)" + MultipleFacingSouthSouthWestDataName: "面(南南西)" + MultipleFacingSouthWestDataName: "面(西南)" + MultipleFacingUpDataName: "面(上)" + MultipleFacingWestDataName: "面(西)" + MultipleFacingWestNorthWestDataName: "面(西北西)" + MultipleFacingWestSouthWestDataName: "面(西南西)" + MossyCarpetBottomDataName: "底部" + MossyCarpetHeightEastDataName: "高度(東)" + MossyCarpetHeightNorthDataName: "高度(北)" + MossyCarpetHeightSouthDataName: "高度(南)" + MossyCarpetHeightWestDataName: "高度(西)" + NoteBlockInstrumentDataName: "樂器" + NoteBlockNoteDataName: "音符" + OpenableDataName: "開啟" + OrientableDataName: "軸向" + PinkPetalsDataname: "花朵數量" + PistonDataName: "已伸出" + PistonHeadDataName: "短臂" + PointedDripstoneThicknessDataName: "厚度" + PointedDripstoneVerticalDirectionDataName: "垂直方向" + PotentSulfurStateDataName: "強效硫磺狀態" + PowerableDataName: "已通電" + RailDataName: "形狀" + RedstoneWireEastDataName: "東側" + RedstoneWireNorthDataName: "北側" + RedstoneWireSouthDataName: "南側" + RedstoneWireWestDataName: "西側" + RepeaterDelayDataName: "延遲" + RepeaterLockedDataName: "已鎖定" + RespawnAnchorDataName: "充能數" + RotatableDataName: "旋轉" + SaplingDataName: "階段" + ScaffoldingBottomDataName: "底部" + ScaffoldingDistanceDataName: "距離" + SculkCatalystDataName: "綻放" + SculkSensorDataName: "階段" + SculkShriekerCanSummonDataName: "可召喚" + SculkShriekerShriekingDataName: "尖嘯中" + SeaPickleDataName: "海鞘數量" + SegmentableDataName: "節數" + SideChainingDataName: "側鏈" + SlabDataName: "類型" + SnowDataName: "層數" + SnowableDataName: "積雪" + SpeleothemThicknessDataName: "厚度" + SpeleothemVerticalDirectionDataName: "垂直方向" + StairsDataName: "形狀" + StructureBlockDataName: "模式" + TechnicalPistonDataName: "類型" + TestBlockDataName: "模式" + TNTDataName: "不穩定" + TrialSpawnerDataName: "狀態" + TripwireDataName: "已解除" + TurtleEggDataName: "蛋數" + VaultOminousDataName: "不祥" + VaultStateDataName: "寶庫狀態" + WallHeightEastDataName: "東側" + WallHeightNorthDataName: "北側" + WallHeightSouthDataName: "南側" + WallHeightWestDataName: "西側" + WallUpDataName: "上方" + WaterloggedDataName: "含水" + +DataValueName: + Common: + "true": "是" + "false": "否" + "0": "0" + "1": "1" + "2": "2" + "3": "3" + "4": "4" + "5": "5" + "6": "6" + "7": "7" + "8": "8" + "9": "9" + "10": "10" + "11": "11" + "12": "12" + "13": "13" + "14": "14" + "15": "15" + "16": "16" + "17": "17" + "18": "18" + "19": "19" + "20": "20" + "21": "21" + "22": "22" + "23": "23" + "24": "24" + "25": "25" + "26": "26" + "27": "27" + "28": "28" + "29": "29" + "30": "30" + "31": "31" + "Note{F#}": "F#" + "Note{G}": "G" + "Note{G#}": "G#" + "Note{A}": "A" + "Note{A#}": "A#" + "Note{B}": "B" + "Note{C}": "C" + "Note{C#}": "C#" + "Note{D}": "D" + "Note{D#}": "D#" + "Note{E}": "E" + "Note{F}": "F" + "NONE": "無" + "SMALL": "小" + "LARGE": "大" + "HEAD": "頭部" + "FOOT": "足部" + "FLOOR": "地板" + "CEILING": "天花板" + "WALL": "牆面" + "SINGLE_WALL": "單牆" + "DOUBLE_WALL": "雙牆" + "UNSTABLE": "不穩定" + "PARTIAL": "部分" + "FULL": "完整" + "TOP": "上方" + "BOTTOM": "下方" + "SINGLE": "單一" + "LEFT": "左" + "RIGHT": "右" + "CENTER": "中央" + "COMPARE": "比較" + "SUBTRACT": "減法" + "STANDING": "站立" + "SITTING": "坐姿" + "RUNNING": "奔跑" + "STAR": "星形" + "DOWN_EAST": "下東" + "DOWN_NORTH": "下北" + "DOWN_SOUTH": "下南" + "DOWN_WEST": "下西" + "UP_EAST": "上東" + "UP_NORTH": "上北" + "UP_SOUTH": "上南" + "UP_WEST": "上西" + "WEST_UP": "西上" + "EAST_UP": "東上" + "NORTH_UP": "北上" + "SOUTH_UP": "南上" + "NORTH": "北" + "EAST": "東" + "SOUTH": "南" + "WEST": "西" + "UP": "上" + "DOWN": "下" + "NORTH_EAST": "東北" + "NORTH_WEST": "西北" + "SOUTH_EAST": "東南" + "SOUTH_WEST": "西南" + "WEST_NORTH_WEST": "西北西" + "NORTH_NORTH_WEST": "北北西" + "NORTH_NORTH_EAST": "北北東" + "EAST_NORTH_EAST": "東北東" + "EAST_SOUTH_EAST": "東南東" + "SOUTH_SOUTH_EAST": "南南東" + "SOUTH_SOUTH_WEST": "南南西" + "WEST_SOUTH_WEST": "西南西" + "SELF": "自身" + "X": "X 軸" + "Y": "Y 軸" + "Z": "Z 軸" + "TIP_MERGE": "尖端合併" + "TIP": "尖端" + "FRUSTUM": "截頭" + "MIDDLE": "中段" + "BASE": "基底" + "DRY": "乾燥" + "WET": "潮濕" + "DORMANT": "休眠" + "ERUPTING": "噴發中" + "CONTINUOUS": "持續" + "NORTH_SOUTH": "南北" + "EAST_WEST": "東西" + "ASCENDING_EAST": "向東上升" + "ASCENDING_WEST": "向西上升" + "ASCENDING_NORTH": "向北上升" + "ASCENDING_SOUTH": "向南上升" + "INACTIVE": "未啟用" + "ACTIVE": "啟用" + "COOLDOWN": "冷卻" + "DOUBLE": "雙層" + "STRAIGHT": "直線" + "INNER_LEFT": "內左" + "INNER_RIGHT": "內右" + "OUTER_LEFT": "外左" + "OUTER_RIGHT": "外右" + "SAVE": "儲存" + "LOAD": "載入" + "CORNER": "角落" + "DATA": "資料" + "NORMAL": "普通" + "STICKY": "黏性" + "START": "開始" + "LOG": "記錄" + "FAIL": "失敗" + "ACCEPT": "接受" + "WAITING_FOR_PLAYERS": "等待玩家" + "WAITING_FOR_REWARD_EJECTION": "等待彈出獎勵" + "EJECTING_REWARD": "正在彈出獎勵" + "UNLOCKING": "解鎖中" + "EJECTING": "彈出中" + "LOW": "低" + "TALL": "高" + "UNCONNECTED": "未連接" + "UPROOTED": "連根拔起" + "AWAKE": "甦醒" + "SIDE": "側面" + "PIANO": "鋼琴" + "BASS_DRUM": "大鼓" + "SNARE_DRUM": "小鼓" + "STICKS": "木棒" + "BASS_GUITAR": "貝斯吉他" + "FLUTE": "長笛" + "BELL": "鈴" + "GUITAR": "吉他" + "CHIME": "鐘琴" + "XYLOPHONE": "木琴" + "IRON_XYLOPHONE": "鐵木琴" + "COW_BELL": "牛鈴" + "DIDGERIDOO": "迪吉里杜管" + "BIT": "位元" + "BANJO": "班卓琴" + "PLING": "叮聲" + "TRUMPET": "小號" + "TRUMPET_EXPOSED": "斑駁小號" + "TRUMPET_OXIDIZED": "氧化小號" + "TRUMPET_WEATHERED": "風化小號" + "ZOMBIE": "殭屍" + "SKELETON": "骷髏" + "CREEPER": "苦力怕" + "DRAGON": "終界龍" + "WITHER_SKELETON": "凋零骷髏" + "PIGLIN": "豬布林" + "CUSTOM_HEAD": "自訂頭顱"