├── gradle
├── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
└── libs.versions.toml
├── settings.gradle.kts
├── src
└── main
│ └── java
│ └── org
│ └── cloudburstmc
│ └── blockstateupdater
│ ├── BlockStateUpdater.java
│ ├── BlockStateUpdater_1_10_0.java
│ ├── BlockStateUpdater_1_17_40.java
│ ├── BlockStateUpdater_1_21_110.java
│ ├── BlockStateUpdater_1_15_0.java
│ ├── BlockStateUpdater_1_19_20.java
│ ├── BlockStateUpdater_1_17_30.java
│ ├── BlockStateUpdater_1_12_0.java
│ ├── BlockStateUpdater_1_16_210.java
│ ├── BlockStateUpdater_1_21_40.java
│ ├── BlockStateUpdater_1_20_40.java
│ ├── BlockStateUpdater_1_20_60.java
│ ├── BlockStateUpdater_1_19_70.java
│ ├── BlockStateUpdater_1_19_80.java
│ ├── BlockStateUpdater_1_18_10.java
│ ├── BlockStateUpdater_1_20_50.java
│ ├── BlockStateUpdater_1_19_0.java
│ ├── BlockStateUpdater_1_18_30.java
│ ├── util
│ ├── TagUtils.java
│ ├── OrderedUpdater.java
│ └── tagupdater
│ │ ├── CompoundTagEditHelper.java
│ │ ├── CompoundTagUpdaterContext.java
│ │ └── CompoundTagUpdater.java
│ ├── BlockStateUpdater_1_20_70.java
│ ├── BlockStateUpdater_1_14_0.java
│ ├── BlockStateUpdater_1_20_10.java
│ ├── BlockStateUpdaters.java
│ ├── BlockStateUpdater_1_20_80.java
│ ├── BlockStateUpdaterBase.java
│ ├── BlockStateUpdater_1_21_20.java
│ ├── BlockStateUpdater_1_21_60.java
│ ├── BlockStateUpdater_1_21_0.java
│ ├── BlockStateUpdater_1_13_0.java
│ ├── BlockStateUpdater_1_21_30.java
│ ├── BlockStateUpdater_1_20_30.java
│ ├── BlockStateUpdater_1_20_0.java
│ ├── BlockStateUpdater_1_16_0.java
│ └── BlockStateUpdater_1_21_10.java
├── .github
└── workflows
│ ├── deploy-release.yml
│ ├── deploy-snapshot.yml
│ └── deploy.yml
├── README.md
├── gradlew.bat
├── .gitignore
├── LICENSE
└── gradlew
/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CloudburstMC/BlockStateUpdater/HEAD/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/settings.gradle.kts:
--------------------------------------------------------------------------------
1 | rootProject.name = "block-state-updater"
2 |
3 | plugins {
4 | id("org.gradle.toolchains.foojay-resolver-convention") version ("0.4.0")
5 | }
6 |
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | distributionBase=GRADLE_USER_HOME
2 | distributionPath=wrapper/dists
3 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.0-bin.zip
4 | networkTimeout=10000
5 | zipStoreBase=GRADLE_USER_HOME
6 | zipStorePath=wrapper/dists
7 |
--------------------------------------------------------------------------------
/src/main/java/org/cloudburstmc/blockstateupdater/BlockStateUpdater.java:
--------------------------------------------------------------------------------
1 | package org.cloudburstmc.blockstateupdater;
2 |
3 | import org.cloudburstmc.blockstateupdater.util.tagupdater.CompoundTagUpdaterContext;
4 |
5 | public interface BlockStateUpdater {
6 |
7 | void registerUpdaters(CompoundTagUpdaterContext context);
8 |
9 | }
10 |
--------------------------------------------------------------------------------
/gradle/libs.versions.toml:
--------------------------------------------------------------------------------
1 | [versions]
2 | junit = "5.9.2"
3 |
4 | [libraries]
5 |
6 | jackson-databind = { group = "com.fasterxml.jackson.core", name = "jackson-databind", version = "2.14.2" }
7 | lombok = { group = "org.projectlombok", name = "lombok", version = "1.18.26" }
8 | nbt = { group = "org.cloudburstmc", name = "nbt", version = "3.0.3.Final" }
9 | junit-jupiter-api = { group = "org.junit.jupiter", name = "junit-jupiter-api", version.ref = "junit" }
10 | junit-jupiter-engine = { group = "org.junit.jupiter", name = "junit-jupiter-engine", version.ref = "junit" }
11 |
--------------------------------------------------------------------------------
/.github/workflows/deploy-release.yml:
--------------------------------------------------------------------------------
1 | name: Deploy Release
2 | on:
3 | push:
4 | tags:
5 | - '*'
6 |
7 | jobs:
8 | deploy:
9 | uses: CloudburstMC/BlockStateUpdater/.github/workflows/deploy.yml@master
10 | with:
11 | deploy-url: "https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/"
12 | secrets:
13 | DEPLOY_USERNAME: ${{ secrets.OSSRH_USERNAME }}
14 | DEPLOY_PASSWORD: ${{ secrets.OSSRH_PASSWORD }}
15 | PGP_SECRET: ${{ secrets.MAVEN_CENTRAL_SECRET }}
16 | PGP_PASSPHRASE: ${{ secrets.MAVEN_CENTRAL_PASSPHRASE }}
17 |
--------------------------------------------------------------------------------
/.github/workflows/deploy-snapshot.yml:
--------------------------------------------------------------------------------
1 | name: Deploy Snapshot
2 | on:
3 | push:
4 | branches:
5 | - 'master'
6 |
7 | jobs:
8 | deploy:
9 | uses: CloudburstMC/BlockStateUpdater/.github/workflows/deploy.yml@master
10 | with:
11 | deploy-url: "https://repo.opencollab.dev/maven-snapshots/"
12 | secrets:
13 | DEPLOY_USERNAME: ${{ secrets.OPENCOLLAB_USERNAME }}
14 | DEPLOY_PASSWORD: ${{ secrets.OPENCOLLAB_PASSWORD }}
15 | PGP_SECRET: ${{ secrets.MAVEN_CENTRAL_SECRET }}
16 | PGP_PASSPHRASE: ${{ secrets.MAVEN_CENTRAL_PASSPHRASE }}
17 |
--------------------------------------------------------------------------------
/src/main/java/org/cloudburstmc/blockstateupdater/BlockStateUpdater_1_10_0.java:
--------------------------------------------------------------------------------
1 | package org.cloudburstmc.blockstateupdater;
2 |
3 | import org.cloudburstmc.blockstateupdater.util.tagupdater.CompoundTagUpdaterContext;
4 | import lombok.AccessLevel;
5 | import lombok.NoArgsConstructor;
6 |
7 | @NoArgsConstructor(access = AccessLevel.PRIVATE)
8 | public class BlockStateUpdater_1_10_0 implements BlockStateUpdater {
9 |
10 | public static final BlockStateUpdater INSTANCE = new BlockStateUpdater_1_10_0();
11 |
12 | @Override
13 | public void registerUpdaters(CompoundTagUpdaterContext context) {
14 | // TODO: mapped types. (I'm not sure if these are needed)
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/src/main/java/org/cloudburstmc/blockstateupdater/BlockStateUpdater_1_17_40.java:
--------------------------------------------------------------------------------
1 | package org.cloudburstmc.blockstateupdater;
2 |
3 | import org.cloudburstmc.blockstateupdater.util.tagupdater.CompoundTagUpdaterContext;
4 |
5 | public class BlockStateUpdater_1_17_40 implements BlockStateUpdater {
6 |
7 | public static final BlockStateUpdater INSTANCE = new BlockStateUpdater_1_17_40();
8 |
9 | @Override
10 | public void registerUpdaters(CompoundTagUpdaterContext context) {
11 | context.addUpdater(1, 16, 210, true) // Palette version wasn't bumped so far
12 | .match("name", "minecraft:sculk_catalyst")
13 | .visit("states")
14 | .tryAdd("bloom", (byte) 0);
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/src/main/java/org/cloudburstmc/blockstateupdater/BlockStateUpdater_1_21_110.java:
--------------------------------------------------------------------------------
1 | package org.cloudburstmc.blockstateupdater;
2 |
3 | import org.cloudburstmc.blockstateupdater.util.tagupdater.CompoundTagUpdaterContext;
4 |
5 | public class BlockStateUpdater_1_21_110 implements BlockStateUpdater {
6 |
7 | public static final BlockStateUpdater INSTANCE = new BlockStateUpdater_1_21_110();
8 |
9 | @Override
10 | public void registerUpdaters(CompoundTagUpdaterContext ctx) {
11 | ctx.addUpdater(1, 21, 110).match("name", "minecraft:chain")
12 | .edit("name", helper -> helper.replaceWith("name", "minecraft:iron_chain"));
13 |
14 | ctx.addUpdater(1, 21, 110)
15 | .match("name", "minecraft:lightning_rod")
16 | .visit("states")
17 | .tryAdd("powered_bit", (byte) 0);
18 |
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # BlockStateUpdater
2 |
3 | Extracted block state mappings from the Minecraft: Bedrock Edition used to update versioned NBT tags found in LevelDB
4 | worlds to the latest version.
5 |
6 | ### Usage
7 |
8 | Updating legacy meta values to block states
9 |
10 | ```java
11 | NbtMap updatedTag = BlockStateUpdaters.updateBlockState(NbtMap.builder()
12 | .putString("name","minecraft:stone")
13 | .putShort("val",(short)1)
14 | .build(),0);
15 | ```
16 |
17 | ### Maven
18 |
19 | ```xml
20 |
21 |
22 |
23 | nukkitx-repo-release
24 | https://repo.nukkitx.com/maven-releases/
25 |
26 |
27 |
28 |
29 |
30 | org.cloudburstmc
31 | block-state-updater
32 | 1.19.80-SNAPSHOT
33 |
34 |
35 | ```
--------------------------------------------------------------------------------
/src/main/java/org/cloudburstmc/blockstateupdater/BlockStateUpdater_1_15_0.java:
--------------------------------------------------------------------------------
1 | package org.cloudburstmc.blockstateupdater;
2 |
3 | import org.cloudburstmc.blockstateupdater.util.tagupdater.CompoundTagUpdaterContext;
4 | import lombok.AccessLevel;
5 | import lombok.NoArgsConstructor;
6 |
7 | @NoArgsConstructor(access = AccessLevel.PRIVATE)
8 | public class BlockStateUpdater_1_15_0 implements BlockStateUpdater {
9 |
10 | public static final BlockStateUpdater INSTANCE = new BlockStateUpdater_1_15_0();
11 |
12 | @Override
13 | public void registerUpdaters(CompoundTagUpdaterContext context) {
14 | context.addUpdater(1, 15, 0)
15 | .match("name", "minecraft:kelp")
16 | .visit("states")
17 | .edit("age", helper -> {
18 | int age = (int) helper.getTag();
19 | helper.replaceWith("kelp_age", age);
20 | });
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/src/main/java/org/cloudburstmc/blockstateupdater/BlockStateUpdater_1_19_20.java:
--------------------------------------------------------------------------------
1 | package org.cloudburstmc.blockstateupdater;
2 |
3 | import org.cloudburstmc.blockstateupdater.util.tagupdater.CompoundTagUpdaterContext;
4 |
5 | public class BlockStateUpdater_1_19_20 implements BlockStateUpdater {
6 |
7 | public static final BlockStateUpdater INSTANCE = new BlockStateUpdater_1_19_20();
8 |
9 | @Override
10 | public void registerUpdaters(CompoundTagUpdaterContext context) {
11 | this.addProperty(context, "minecraft:muddy_mangrove_roots", "pillar_axis", "y");
12 | }
13 |
14 | private void addProperty(CompoundTagUpdaterContext context, String identifier, String propertyName, Object value) {
15 | context.addUpdater(1, 18, 10, true) // Here we go again Mojang
16 | .match("name", identifier)
17 | .visit("states")
18 | .tryAdd(propertyName, value);
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/src/main/java/org/cloudburstmc/blockstateupdater/BlockStateUpdater_1_17_30.java:
--------------------------------------------------------------------------------
1 | package org.cloudburstmc.blockstateupdater;
2 |
3 | import org.cloudburstmc.blockstateupdater.util.tagupdater.CompoundTagUpdaterContext;
4 |
5 | public class BlockStateUpdater_1_17_30 implements BlockStateUpdater {
6 |
7 | public static final BlockStateUpdater INSTANCE = new BlockStateUpdater_1_17_30();
8 |
9 | @Override
10 | public void registerUpdaters(CompoundTagUpdaterContext context) {
11 | this.updateItemFrame("minecraft:frame", context);
12 | this.updateItemFrame("minecraft:glow_frame", context);
13 | }
14 |
15 | private void updateItemFrame(String name, CompoundTagUpdaterContext context) {
16 | context.addUpdater(1, 16, 210, true) // Palette version wasn't bumped so far
17 | .match("name", name)
18 | .visit("states")
19 | .tryAdd("item_frame_photo_bit", (byte) 0);
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/src/main/java/org/cloudburstmc/blockstateupdater/BlockStateUpdater_1_12_0.java:
--------------------------------------------------------------------------------
1 | package org.cloudburstmc.blockstateupdater;
2 |
3 | import org.cloudburstmc.blockstateupdater.util.tagupdater.CompoundTagUpdaterContext;
4 | import lombok.AccessLevel;
5 | import lombok.NoArgsConstructor;
6 |
7 | @NoArgsConstructor(access = AccessLevel.PRIVATE)
8 | public class BlockStateUpdater_1_12_0 implements BlockStateUpdater {
9 |
10 | public static final BlockStateUpdater INSTANCE = new BlockStateUpdater_1_12_0();
11 |
12 | @Override
13 | public void registerUpdaters(CompoundTagUpdaterContext context) {
14 | context.addUpdater(1, 12, 0)
15 | .match("name", "minecraft:coral_fan")
16 | .visit("states")
17 | .rename("direction", "coral_fan_direction");
18 |
19 | context.addUpdater(1, 12, 0)
20 | .match("name", "minecraft:coral_fan_dead")
21 | .visit("states")
22 | .rename("direction", "coral_fan_direction");
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/src/main/java/org/cloudburstmc/blockstateupdater/BlockStateUpdater_1_16_210.java:
--------------------------------------------------------------------------------
1 | package org.cloudburstmc.blockstateupdater;
2 |
3 | import org.cloudburstmc.blockstateupdater.util.tagupdater.CompoundTagUpdaterContext;
4 | import lombok.AccessLevel;
5 | import lombok.NoArgsConstructor;
6 |
7 | @NoArgsConstructor(access = AccessLevel.PRIVATE)
8 | public class BlockStateUpdater_1_16_210 implements BlockStateUpdater {
9 |
10 | public static final BlockStateUpdater INSTANCE = new BlockStateUpdater_1_16_210();
11 |
12 | private static void registerUpdater(CompoundTagUpdaterContext context, String name) {
13 | context.addUpdater(1, 16, 210)
14 | .match("name", name)
15 | .visit("states")
16 | .remove("deprecated");
17 | }
18 |
19 | @Override
20 | public void registerUpdaters(CompoundTagUpdaterContext context) {
21 | registerUpdater(context, "minecraft:stripped_crimson_stem");
22 | registerUpdater(context, "minecraft:stripped_warped_stem");
23 | registerUpdater(context, "minecraft:stripped_crimson_hyphae");
24 | registerUpdater(context, "minecraft:stripped_warped_hyphae");
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/.github/workflows/deploy.yml:
--------------------------------------------------------------------------------
1 | on:
2 | workflow_call:
3 | inputs:
4 | deploy-url:
5 | description: 'The maven repository to deploy to'
6 | required: true
7 | type: string
8 | secrets:
9 | DEPLOY_USERNAME:
10 | required: true
11 | DEPLOY_PASSWORD:
12 | required: true
13 | PGP_SECRET:
14 | required: true
15 | PGP_PASSPHRASE:
16 | required: true
17 |
18 | jobs:
19 | publish:
20 | runs-on: ubuntu-latest
21 | steps:
22 | - uses: actions/checkout@v3
23 | - uses: actions/setup-java@v3
24 | with:
25 | distribution: 'temurin'
26 | java-version: '8'
27 | - name: Validate Gradle Wrapper
28 | uses: gradle/wrapper-validation-action@v1
29 | - name: Build
30 | uses: gradle/gradle-build-action@v2
31 | with:
32 | gradle-version: wrapper
33 | arguments: "publish"
34 | env:
35 | MAVEN_DEPLOY_USERNAME: ${{ secrets.DEPLOY_USERNAME }}
36 | MAVEN_DEPLOY_PASSWORD: ${{ secrets.DEPLOY_PASSWORD }}
37 | PGP_SECRET: ${{ secrets.PGP_SECRET }}
38 | PGP_PASSPHRASE: ${{ secrets.PGP_PASSPHRASE }}
39 | MAVEN_DEPLOY_URL: ${{ inputs.deploy-url }}
40 |
--------------------------------------------------------------------------------
/src/main/java/org/cloudburstmc/blockstateupdater/BlockStateUpdater_1_21_40.java:
--------------------------------------------------------------------------------
1 | package org.cloudburstmc.blockstateupdater;
2 |
3 | import org.cloudburstmc.blockstateupdater.util.tagupdater.CompoundTagUpdaterContext;
4 |
5 | public class BlockStateUpdater_1_21_40 implements BlockStateUpdater {
6 |
7 | public static final BlockStateUpdater INSTANCE = new BlockStateUpdater_1_21_40();
8 |
9 | @Override
10 | public void registerUpdaters(CompoundTagUpdaterContext ctx) {
11 | // Skull blocks was now split into individual blocks
12 | // however, skull type was determined by block entity or item data, and we do not have that information here
13 | ctx.addUpdater(1, 21, 40)
14 | .match("name", "minecraft:skull")
15 | .edit("name", helper -> {
16 | helper.replaceWith("name", "minecraft:skeleton_skull");
17 | });
18 |
19 |
20 | // these are not vanilla updaters
21 | // but use this one to bump the version to 18163713 as that's what vanilla does
22 | ctx.addUpdater(1, 21, 40)
23 | .match("name", "minecraft:cherry_wood")
24 | .visit("states")
25 | .remove("stripped_bit");
26 |
27 | ctx.addUpdater(1, 21, 40, false, false)
28 | .match("name", "minecraft:mangrove_wood")
29 | .visit("states")
30 | .remove("stripped_bit");
31 |
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/src/main/java/org/cloudburstmc/blockstateupdater/BlockStateUpdater_1_20_40.java:
--------------------------------------------------------------------------------
1 | package org.cloudburstmc.blockstateupdater;
2 |
3 | import org.cloudburstmc.blockstateupdater.util.OrderedUpdater;
4 | import org.cloudburstmc.blockstateupdater.util.tagupdater.CompoundTagUpdaterContext;
5 |
6 | import static org.cloudburstmc.blockstateupdater.util.OrderedUpdater.*;
7 |
8 | public class BlockStateUpdater_1_20_40 implements BlockStateUpdater {
9 |
10 | public static final BlockStateUpdater INSTANCE = new BlockStateUpdater_1_20_40();
11 |
12 | @Override
13 | public void registerUpdaters(CompoundTagUpdaterContext ctx) {
14 | this.addDirectionUpdater(ctx, "minecraft:chest", FACING_TO_CARDINAL);
15 | this.addDirectionUpdater(ctx, "minecraft:ender_chest", FACING_TO_CARDINAL);
16 | this.addDirectionUpdater(ctx, "minecraft:stonecutter_block", FACING_TO_CARDINAL);
17 | this.addDirectionUpdater(ctx, "minecraft:trapped_chest", FACING_TO_CARDINAL);
18 | }
19 |
20 | private void addDirectionUpdater(CompoundTagUpdaterContext ctx, String identifier, OrderedUpdater updater) {
21 | ctx.addUpdater(1, 20, 40)
22 | .match("name", identifier)
23 | .visit("states")
24 | .edit(updater.getOldProperty(), helper -> {
25 | int value = (int) helper.getTag();
26 | helper.replaceWith(updater.getNewProperty(), updater.translate(value));
27 | });
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/src/main/java/org/cloudburstmc/blockstateupdater/BlockStateUpdater_1_20_60.java:
--------------------------------------------------------------------------------
1 | package org.cloudburstmc.blockstateupdater;
2 |
3 | import org.cloudburstmc.blockstateupdater.util.tagupdater.CompoundTagUpdaterContext;
4 |
5 | public class BlockStateUpdater_1_20_60 implements BlockStateUpdater {
6 |
7 | public static final BlockStateUpdater INSTANCE = new BlockStateUpdater_1_20_60();
8 |
9 | @Override
10 | public void registerUpdaters(CompoundTagUpdaterContext ctx) {
11 | ctx.addUpdater(1, 20, 60)
12 | .match("name", "minecraft:hard_stained_glass")
13 | .visit("states")
14 | .edit("color", helper -> {
15 | String color = (String) helper.getTag();
16 | if (color.equals("silver")) {
17 | color = "light_gray";
18 | }
19 | helper.getRootTag().put("name", "minecraft:hard_" + color + "_stained_glass");
20 | })
21 | .remove("color");
22 |
23 | ctx.addUpdater(1, 20, 60)
24 | .match("name", "minecraft:hard_stained_glass_pane")
25 | .visit("states")
26 | .edit("color", helper -> {
27 | String color = (String) helper.getTag();
28 | if (color.equals("silver")) {
29 | color = "light_gray";
30 | }
31 | helper.getRootTag().put("name", "minecraft:hard_" + color + "_stained_glass_pane");
32 | })
33 | .remove("color");
34 | }
35 | }
36 |
--------------------------------------------------------------------------------
/src/main/java/org/cloudburstmc/blockstateupdater/BlockStateUpdater_1_19_70.java:
--------------------------------------------------------------------------------
1 | package org.cloudburstmc.blockstateupdater;
2 |
3 | import org.cloudburstmc.blockstateupdater.util.tagupdater.CompoundTagUpdaterContext;
4 |
5 | public class BlockStateUpdater_1_19_70 implements BlockStateUpdater {
6 |
7 | public static final BlockStateUpdater INSTANCE = new BlockStateUpdater_1_19_70();
8 |
9 | public static final String[] COLORS = {
10 | "magenta",
11 | "pink",
12 | "green",
13 | "lime",
14 | "yellow",
15 | "black",
16 | "light_blue",
17 | "brown",
18 | "cyan",
19 | "orange",
20 | "red",
21 | "gray",
22 | "white",
23 | "blue",
24 | "purple",
25 | "silver"
26 | };
27 |
28 | @Override
29 | public void registerUpdaters(CompoundTagUpdaterContext context) {
30 | for (String color : COLORS) {
31 | this.addColorUpdater(context, color);
32 | }
33 | }
34 |
35 | private void addColorUpdater(CompoundTagUpdaterContext context, String color) {
36 | context.addUpdater(1, 19, 70)
37 | .match("name", "minecraft:wool")
38 | .visit("states")
39 | .match("color", color)
40 | .edit("color", helper -> {
41 | if (color.equals("silver")) {
42 | helper.getRootTag().put("name", "minecraft:light_gray_wool");
43 | } else {
44 | helper.getRootTag().put("name", "minecraft:" + color + "_wool");
45 | }
46 | })
47 | .remove("color");
48 |
49 | }
50 | }
51 |
--------------------------------------------------------------------------------
/src/main/java/org/cloudburstmc/blockstateupdater/BlockStateUpdater_1_19_80.java:
--------------------------------------------------------------------------------
1 | package org.cloudburstmc.blockstateupdater;
2 |
3 | import org.cloudburstmc.blockstateupdater.util.tagupdater.CompoundTagUpdaterContext;
4 |
5 | public class BlockStateUpdater_1_19_80 implements BlockStateUpdater {
6 |
7 | public static final BlockStateUpdater INSTANCE = new BlockStateUpdater_1_19_80();
8 |
9 | private static final String[] WOOD = {
10 | "birch",
11 | "oak",
12 | "jungle",
13 | "spruce",
14 | "acacia",
15 | "dark_oak"
16 | };
17 |
18 | @Override
19 | public void registerUpdaters(CompoundTagUpdaterContext ctx) {
20 | // It could be done the more clever way, but Mojang added 12 updaters, and so we do.
21 | for (int i = 0; i < WOOD.length; i++) {
22 | String type = WOOD[i];
23 | this.addTypeUpdater(ctx, "minecraft:fence", "wood_type", type, "minecraft:" + type + "_fence");
24 | if (i < 4) {
25 | this.addTypeUpdater(ctx, "minecraft:log", "old_log_type", type, "minecraft:" + type + "_log");
26 | } else {
27 | this.addTypeUpdater(ctx, "minecraft:log2", "new_log_type", type, "minecraft:" + type + "_log");
28 | }
29 | }
30 | }
31 |
32 | private void addTypeUpdater(CompoundTagUpdaterContext context, String identifier, String typeState, String type, String newIdentifier) {
33 | context.addUpdater(1, 19, 80)
34 | .match("name", identifier)
35 | .visit("states")
36 | .match(typeState, type)
37 | .edit(typeState, helper -> helper.getRootTag().put("name", newIdentifier))
38 | .remove(typeState);
39 |
40 | }
41 | }
42 |
--------------------------------------------------------------------------------
/src/main/java/org/cloudburstmc/blockstateupdater/BlockStateUpdater_1_18_10.java:
--------------------------------------------------------------------------------
1 | package org.cloudburstmc.blockstateupdater;
2 |
3 | import org.cloudburstmc.blockstateupdater.util.tagupdater.CompoundTagUpdaterContext;
4 |
5 | public class BlockStateUpdater_1_18_10 implements BlockStateUpdater {
6 |
7 | public static final BlockStateUpdater INSTANCE = new BlockStateUpdater_1_18_10();
8 |
9 | @Override
10 | public void registerUpdaters(CompoundTagUpdaterContext context) {
11 | context.addUpdater(1, 18, 10)
12 | .match("name", "minecraft:skull")
13 | .visit("states")
14 | .remove("no_drop_bit");
15 |
16 |
17 | context.addUpdater(1, 18, 10)
18 | .match("name", "minecraft:glow_lichen")
19 | .visit("states")
20 | .tryEdit("multi_face_direction_bits", helper -> {
21 | int bits = (int) helper.getTag();
22 | boolean north = (bits & (1 << 2)) != 0;
23 | boolean south = (bits & (1 << 3)) != 0;
24 | boolean west = (bits & (1 << 4)) != 0;
25 | if (north) {
26 | bits |= 1 << 4;
27 | } else {
28 | bits &= ~(1 << 4);
29 | }
30 | if (south) {
31 | bits |= 1 << 2;
32 | } else {
33 | bits &= ~(1 << 2);
34 | }
35 | if (west) {
36 | bits |= 1 << 3;
37 | } else {
38 | bits &= ~(1 << 3);
39 | }
40 | helper.replaceWith("multi_face_direction_bits", bits);
41 | });
42 | }
43 | }
44 |
--------------------------------------------------------------------------------
/src/main/java/org/cloudburstmc/blockstateupdater/BlockStateUpdater_1_20_50.java:
--------------------------------------------------------------------------------
1 | package org.cloudburstmc.blockstateupdater;
2 |
3 | import org.cloudburstmc.blockstateupdater.util.tagupdater.CompoundTagUpdaterContext;
4 |
5 | public class BlockStateUpdater_1_20_50 implements BlockStateUpdater {
6 |
7 | public static final BlockStateUpdater INSTANCE = new BlockStateUpdater_1_20_50();
8 |
9 | @Override
10 | public void registerUpdaters(CompoundTagUpdaterContext ctx) {
11 | ctx.addUpdater(1, 20, 50)
12 | .match("name", "minecraft:planks")
13 | .visit("states")
14 | .edit("wood_type", helper -> {
15 | String type = (String) helper.getTag();
16 | helper.getRootTag().put("name", "minecraft:" + type + "_planks");
17 | })
18 | .remove("wood_type");
19 |
20 | ctx.addUpdater(1, 20, 50)
21 | .match("name", "minecraft:stone")
22 | .visit("states")
23 | .edit("stone_type", helper -> {
24 | String type = (String) helper.getTag();
25 | switch (type) {
26 | case "andesite_smooth":
27 | type = "polished_andesite";
28 | break;
29 | case "diorite_smooth":
30 | type = "polished_diorite";
31 | break;
32 | case "granite_smooth":
33 | type = "polished_granite";
34 | break;
35 | }
36 | helper.getRootTag().put("name", "minecraft:" + type);
37 | })
38 | .remove("stone_type");
39 |
40 | }
41 | }
42 |
--------------------------------------------------------------------------------
/src/main/java/org/cloudburstmc/blockstateupdater/BlockStateUpdater_1_19_0.java:
--------------------------------------------------------------------------------
1 | package org.cloudburstmc.blockstateupdater;
2 |
3 | import org.cloudburstmc.blockstateupdater.util.tagupdater.CompoundTagUpdaterContext;
4 |
5 | public class BlockStateUpdater_1_19_0 implements BlockStateUpdater {
6 |
7 | public static final BlockStateUpdater INSTANCE = new BlockStateUpdater_1_19_0();
8 |
9 | @Override
10 | public void registerUpdaters(CompoundTagUpdaterContext context) {
11 | this.renameIdentifier(context, "minecraft:stone_slab", "minecraft:stone_block_slab");
12 | this.renameIdentifier(context, "minecraft:stone_slab2", "minecraft:stone_block_slab2");
13 | this.renameIdentifier(context, "minecraft:stone_slab3", "minecraft:stone_block_slab3");
14 | this.renameIdentifier(context, "minecraft:stone_slab4", "minecraft:stone_block_slab4");
15 | this.renameIdentifier(context, "minecraft:double_stone_slab", "minecraft:double_stone_block_slab");
16 | this.renameIdentifier(context, "minecraft:double_stone_slab2", "minecraft:double_stone_block_slab2");
17 | this.renameIdentifier(context, "minecraft:double_stone_slab3", "minecraft:double_stone_block_slab3");
18 | this.renameIdentifier(context, "minecraft:double_stone_slab4", "minecraft:double_stone_block_slab4");
19 |
20 | this.addProperty(context, "minecraft:sculk_shrieker", "can_summon", (byte) 0);
21 |
22 | }
23 |
24 | private void renameIdentifier(CompoundTagUpdaterContext context, String from, String to) {
25 | context.addUpdater(1, 18, 10, true) // Here we go again Mojang
26 | .match("name", from)
27 | .edit("name", helper -> helper.replaceWith("name", to));
28 | }
29 |
30 | private void addProperty(CompoundTagUpdaterContext context, String identifier, String propertyName, Object value) {
31 | context.addUpdater(1, 18, 10, true) // Here we go again Mojang
32 | .match("name", identifier)
33 | .visit("states")
34 | .tryAdd(propertyName, value);
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/src/main/java/org/cloudburstmc/blockstateupdater/BlockStateUpdater_1_18_30.java:
--------------------------------------------------------------------------------
1 | package org.cloudburstmc.blockstateupdater;
2 |
3 | import org.cloudburstmc.blockstateupdater.util.tagupdater.CompoundTagUpdaterContext;
4 |
5 | public class BlockStateUpdater_1_18_30 implements BlockStateUpdater {
6 |
7 | public static final BlockStateUpdater INSTANCE = new BlockStateUpdater_1_18_30();
8 |
9 | @Override
10 | public void registerUpdaters(CompoundTagUpdaterContext context) {
11 | this.renameIdentifier(context, "minecraft:concretePowder", "minecraft:concrete_powder");
12 | this.renameIdentifier(context, "minecraft:frog_egg", "minecraft:frog_spawn");
13 | this.renameIdentifier(context, "minecraft:invisibleBedrock", "minecraft:invisible_bedrock");
14 | this.renameIdentifier(context, "minecraft:movingBlock", "minecraft:moving_block");
15 | this.renameIdentifier(context, "minecraft:pistonArmCollision", "minecraft:piston_arm_collision");
16 | this.renameIdentifier(context, "minecraft:seaLantern", "minecraft:sea_lantern");
17 | this.renameIdentifier(context, "minecraft:stickyPistonArmCollision", "minecraft:sticky_piston_arm_collision");
18 | this.renameIdentifier(context, "minecraft:tripWire", "minecraft:trip_wire");
19 |
20 | this.addPillarAxis(context, "minecraft:ochre_froglight");
21 | this.addPillarAxis(context, "minecraft:pearlescent_froglight");
22 | this.addPillarAxis(context, "minecraft:verdant_froglight");
23 | }
24 |
25 | private void renameIdentifier(CompoundTagUpdaterContext context, String from, String to) {
26 | context.addUpdater(1, 18, 10, true) // Here we go again Mojang
27 | .match("name", from)
28 | .edit("name", helper -> helper.replaceWith("name", to));
29 | }
30 |
31 | private void addPillarAxis(CompoundTagUpdaterContext context, String from) {
32 | context.addUpdater(1, 18, 10, true) // Here we go again Mojang
33 | .match("name", from)
34 | .visit("states")
35 | .tryAdd("pillar_axis", "y");
36 | }
37 | }
38 |
--------------------------------------------------------------------------------
/src/main/java/org/cloudburstmc/blockstateupdater/util/TagUtils.java:
--------------------------------------------------------------------------------
1 | package org.cloudburstmc.blockstateupdater.util;
2 |
3 | import org.cloudburstmc.nbt.NbtList;
4 | import org.cloudburstmc.nbt.NbtMap;
5 | import org.cloudburstmc.nbt.NbtMapBuilder;
6 | import org.cloudburstmc.nbt.NbtType;
7 |
8 | import java.util.ArrayList;
9 | import java.util.LinkedHashMap;
10 | import java.util.List;
11 | import java.util.Map;
12 |
13 | public class TagUtils {
14 |
15 | public static Object toMutable(Object immutable) {
16 | if (immutable instanceof NbtMap) {
17 | NbtMap map = (NbtMap) immutable;
18 | Map mutable = new LinkedHashMap<>();
19 | for (Map.Entry entry : map.entrySet()) {
20 | mutable.put(entry.getKey(), toMutable(entry.getValue()));
21 | }
22 | return mutable;
23 | } else if (immutable instanceof NbtList) {
24 | List