From c89b8a85149ddb95466d2ef1d0b84ed387d50f4d Mon Sep 17 00:00:00 2001 From: Cat Core <34719527+thecatcore@users.noreply.github.com> Date: Tue, 11 Feb 2025 22:03:43 +0100 Subject: [PATCH] Registry sync v2 - Block (#172) * Block module rebase fixes * Fix whether to use neighbour light for Modded blocks * Clean up and fix style * Update test mods * Fix compiling errors * Spotless * Fix compiling errors * PR Feedback --- gradle.properties | 1 + .../1.12.2/build.gradle | 3 + .../1.12.2/gradle.properties | 2 + .../block/versioned/BlockStateRemapper.java | 69 ++++++++++++++ .../block/versioned/EarlyInitializer.java | 89 +++++++++++++++++++ .../mixin/block/versioned/BlockAccessor.java | 32 +++++++ .../mixin/block/versioned/BlockMixin.java | 44 +++++++++ .../mixin/block/versioned/ItemAccessor.java | 34 +++++++ .../1.12.2/src/main/resources/fabric.mod.json | 46 ++++++++++ .../legacy-fabric-block-api-v1.accesswidener | 6 ++ .../legacy-fabric-block-api-v1.mixins.json | 15 ++++ .../1.7.10/build.gradle | 3 + .../1.7.10/gradle.properties | 2 + .../block/versioned/EarlyInitializer.java | 62 +++++++++++++ .../block/versioned/BlockItemAccessor.java | 30 +++++++ .../mixin/block/versioned/BlockMixin.java | 68 ++++++++++++++ .../mixin/block/versioned/ItemMixin.java | 48 ++++++++++ .../1.7.10/src/main/resources/fabric.mod.json | 46 ++++++++++ .../legacy-fabric-block-api-v1.accesswidener | 6 ++ .../legacy-fabric-block-api-v1.mixins.json | 15 ++++ legacy-fabric-block-api-v1/common.gradle | 7 ++ .../common/build.gradle | 0 .../common/gradle.properties | 2 + .../fabric/impl/block/EarlyInitializer.java | 39 ++++++++ .../common/src/main/resources/fabric.mod.json | 45 ++++++++++ ...acy-fabric-block-api-v1-common.mixins.json | 12 +++ .../common.gradle | 3 +- .../fabric/test/registry/RegistryTest.java | 26 ++++++ .../fabric/test/registry/RegistryTest.java | 26 ++++++ .../fabric/test/registry/RegistryTest.java | 26 ++++++ .../fabric/test/registry/RegistryTest.java | 18 ++++ .../fabric/test/registry/RegistryTest.java | 19 ++++ legacyfabric-api/1.8/build.gradle | 3 + .../fabric/test/registry/RegistryTest.java | 18 ++++ .../1.8/src/testmod/resources/fabric.mod.json | 1 + .../fabric/test/registry/RegistryTest.java | 26 ++++++ legacyfabric-api/common.gradle | 1 + settings.gradle | 1 + 38 files changed, 893 insertions(+), 1 deletion(-) create mode 100644 legacy-fabric-block-api-v1/1.12.2/build.gradle create mode 100644 legacy-fabric-block-api-v1/1.12.2/gradle.properties create mode 100644 legacy-fabric-block-api-v1/1.12.2/src/main/java/net/legacyfabric/fabric/impl/block/versioned/BlockStateRemapper.java create mode 100644 legacy-fabric-block-api-v1/1.12.2/src/main/java/net/legacyfabric/fabric/impl/block/versioned/EarlyInitializer.java create mode 100644 legacy-fabric-block-api-v1/1.12.2/src/main/java/net/legacyfabric/fabric/mixin/block/versioned/BlockAccessor.java create mode 100644 legacy-fabric-block-api-v1/1.12.2/src/main/java/net/legacyfabric/fabric/mixin/block/versioned/BlockMixin.java create mode 100644 legacy-fabric-block-api-v1/1.12.2/src/main/java/net/legacyfabric/fabric/mixin/block/versioned/ItemAccessor.java create mode 100644 legacy-fabric-block-api-v1/1.12.2/src/main/resources/fabric.mod.json create mode 100644 legacy-fabric-block-api-v1/1.12.2/src/main/resources/legacy-fabric-block-api-v1.accesswidener create mode 100644 legacy-fabric-block-api-v1/1.12.2/src/main/resources/legacy-fabric-block-api-v1.mixins.json create mode 100644 legacy-fabric-block-api-v1/1.7.10/build.gradle create mode 100644 legacy-fabric-block-api-v1/1.7.10/gradle.properties create mode 100644 legacy-fabric-block-api-v1/1.7.10/src/main/java/net/legacyfabric/fabric/impl/block/versioned/EarlyInitializer.java create mode 100644 legacy-fabric-block-api-v1/1.7.10/src/main/java/net/legacyfabric/fabric/mixin/block/versioned/BlockItemAccessor.java create mode 100644 legacy-fabric-block-api-v1/1.7.10/src/main/java/net/legacyfabric/fabric/mixin/block/versioned/BlockMixin.java create mode 100644 legacy-fabric-block-api-v1/1.7.10/src/main/java/net/legacyfabric/fabric/mixin/block/versioned/ItemMixin.java create mode 100644 legacy-fabric-block-api-v1/1.7.10/src/main/resources/fabric.mod.json create mode 100644 legacy-fabric-block-api-v1/1.7.10/src/main/resources/legacy-fabric-block-api-v1.accesswidener create mode 100644 legacy-fabric-block-api-v1/1.7.10/src/main/resources/legacy-fabric-block-api-v1.mixins.json create mode 100644 legacy-fabric-block-api-v1/common.gradle create mode 100644 legacy-fabric-block-api-v1/common/build.gradle create mode 100644 legacy-fabric-block-api-v1/common/gradle.properties create mode 100644 legacy-fabric-block-api-v1/common/src/main/java/net/legacyfabric/fabric/impl/block/EarlyInitializer.java create mode 100644 legacy-fabric-block-api-v1/common/src/main/resources/fabric.mod.json create mode 100644 legacy-fabric-block-api-v1/common/src/main/resources/legacy-fabric-block-api-v1-common.mixins.json diff --git a/gradle.properties b/gradle.properties index ff72863d3..0b4182dbd 100644 --- a/gradle.properties +++ b/gradle.properties @@ -21,5 +21,6 @@ legacy-fabric-permissions-api-v1.version = 1.1.1 legacy-fabric-registry-sync-api-v1.version = 2.2.0 legacy-fabric-registry-sync-api-v2.version = 1.0.0 legacy-fabric-item-api-v1.version = 1.0.0 +legacy-fabric-block-api-v1.version = 1.0.0 legacy-fabric-rendering-api-v1.version = 1.0.0 legacy-fabric-resource-loader-v1.version = 2.2.2 diff --git a/legacy-fabric-block-api-v1/1.12.2/build.gradle b/legacy-fabric-block-api-v1/1.12.2/build.gradle new file mode 100644 index 000000000..306a9d690 --- /dev/null +++ b/legacy-fabric-block-api-v1/1.12.2/build.gradle @@ -0,0 +1,3 @@ +loom { + accessWidenerPath = file("src/main/resources/legacy-fabric-block-api-v1.accesswidener") +} diff --git a/legacy-fabric-block-api-v1/1.12.2/gradle.properties b/legacy-fabric-block-api-v1/1.12.2/gradle.properties new file mode 100644 index 000000000..7d5606688 --- /dev/null +++ b/legacy-fabric-block-api-v1/1.12.2/gradle.properties @@ -0,0 +1,2 @@ +minVersionIncluded=1.8 +maxVersionIncluded=1.12.2 diff --git a/legacy-fabric-block-api-v1/1.12.2/src/main/java/net/legacyfabric/fabric/impl/block/versioned/BlockStateRemapper.java b/legacy-fabric-block-api-v1/1.12.2/src/main/java/net/legacyfabric/fabric/impl/block/versioned/BlockStateRemapper.java new file mode 100644 index 000000000..aac7787ff --- /dev/null +++ b/legacy-fabric-block-api-v1/1.12.2/src/main/java/net/legacyfabric/fabric/impl/block/versioned/BlockStateRemapper.java @@ -0,0 +1,69 @@ +/* + * Copyright (c) 2020 - 2024 Legacy Fabric + * Copyright (c) 2016 - 2022 FabricMC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package net.legacyfabric.fabric.impl.block.versioned; + +import java.util.Map; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.util.collection.IdList; + +import net.legacyfabric.fabric.api.registry.v2.RegistryHelper; +import net.legacyfabric.fabric.api.registry.v2.event.RegistryRemapCallback; +import net.legacyfabric.fabric.api.registry.v2.registry.holder.FabricRegistryEntry; +import net.legacyfabric.fabric.api.registry.v2.registry.registrable.IdsHolder; +import net.legacyfabric.fabric.api.util.Identifier; +import net.legacyfabric.fabric.api.util.VersionUtils; +import net.legacyfabric.fabric.mixin.block.versioned.BlockAccessor; + +public class BlockStateRemapper implements RegistryRemapCallback { + private static final boolean hasSpecialCase = VersionUtils.matches(">1.8.9"); + private static final Identifier specialCaseId = new Identifier("tripwire"); + + @Override + public void callback(Map> changedIdsMap) { + IdsHolder newList = Block.BLOCK_STATES.fabric$new(); + + for (Block block : Block.REGISTRY) { + int blockRawId = RegistryHelper.getRawId(Block.REGISTRY, block); + + if (changedIdsMap.containsKey(blockRawId)) { + blockRawId = changedIdsMap.get(blockRawId).getId(); + } + + Identifier blockId = RegistryHelper.getId(Block.REGISTRY, block); + + if (blockId.equals(specialCaseId) && hasSpecialCase) { + for (int i = 0; i < 15; ++i) { + int blockStateId = blockRawId << 4 | i; + BlockState state = block.stateFromData(i); + + newList.fabric$setValue(state, blockStateId); + } + } else { + for (BlockState state : block.getStateManager().getBlockStates()) { + int blockStateId = blockRawId << 4 | block.getData(state); + + newList.fabric$setValue(state, blockStateId); + } + } + } + + BlockAccessor.setBlockStateList((IdList) newList); + } +} diff --git a/legacy-fabric-block-api-v1/1.12.2/src/main/java/net/legacyfabric/fabric/impl/block/versioned/EarlyInitializer.java b/legacy-fabric-block-api-v1/1.12.2/src/main/java/net/legacyfabric/fabric/impl/block/versioned/EarlyInitializer.java new file mode 100644 index 000000000..5ef2e46f6 --- /dev/null +++ b/legacy-fabric-block-api-v1/1.12.2/src/main/java/net/legacyfabric/fabric/impl/block/versioned/EarlyInitializer.java @@ -0,0 +1,89 @@ +/* + * Copyright (c) 2020 - 2024 Legacy Fabric + * Copyright (c) 2016 - 2022 FabricMC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package net.legacyfabric.fabric.impl.block.versioned; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.block.SlabBlock; +import net.minecraft.block.StairsBlock; +import net.minecraft.block.material.Material; +import net.minecraft.item.BlockItem; +import net.minecraft.item.Item; + +import net.fabricmc.loader.api.entrypoint.PreLaunchEntrypoint; + +import net.legacyfabric.fabric.api.registry.v2.RegistryHelper; +import net.legacyfabric.fabric.api.registry.v2.RegistryIds; +import net.legacyfabric.fabric.api.registry.v2.event.RegistryInitializedEvent; +import net.legacyfabric.fabric.api.registry.v2.registry.holder.FabricRegistry; +import net.legacyfabric.fabric.api.registry.v2.registry.holder.SyncedFabricRegistry; +import net.legacyfabric.fabric.api.util.Identifier; +import net.legacyfabric.fabric.api.util.VersionUtils; +import net.legacyfabric.fabric.mixin.block.versioned.ItemAccessor; + +public class EarlyInitializer implements PreLaunchEntrypoint { + private static final boolean checkGrass = VersionUtils.matches(">1.8.9"); + @Override + public void onPreLaunch() { + RegistryInitializedEvent.event(RegistryIds.BLOCKS).register(EarlyInitializer::blockRegistryInit); + RegistryInitializedEvent.event(RegistryIds.ITEMS).register(EarlyInitializer::itemRegistryInit); + } + + private static void blockRegistryInit(FabricRegistry holder) { + SyncedFabricRegistry registry = (SyncedFabricRegistry) holder; + + registry.fabric$getEntryAddedCallback().register((rawId, id, block) -> { + for (BlockState blockState : block.getStateManager().getBlockStates()) { + int i = rawId << 4 | block.getData(blockState); + Block.BLOCK_STATES.set(blockState, i); + } + }); + + registry.fabric$getRegistryRemapCallback().register(new BlockStateRemapper()); + + registry.fabric$getEntryAddedCallback().register((rawId, id, block) -> { + if (block.material == Material.AIR) { + block.useNeighbourLight = false; + } else { + boolean useNeighbourLight = false; + boolean isStairs = block instanceof StairsBlock; + boolean isSlab = block instanceof SlabBlock; + boolean isMissingTop = block == RegistryHelper.getValue(Item.REGISTRY, new Identifier("farmland")) + || (checkGrass && block == RegistryHelper.getValue(Item.REGISTRY, new Identifier("grass_path"))); + boolean isTranslucent = block.transluscent; + boolean isNotOpaque = block.opacity == 0; + + if (isStairs || isSlab || isMissingTop || isTranslucent || isNotOpaque) { + useNeighbourLight = true; + } + + block.useNeighbourLight = useNeighbourLight; + } + }); + } + + private static void itemRegistryInit(FabricRegistry holder) { + SyncedFabricRegistry registry = (SyncedFabricRegistry) holder; + + registry.fabric$getEntryAddedCallback().register((rawId, id, item) -> { + if (item instanceof BlockItem) { + ItemAccessor.getBlockItemsMap().put(((BlockItem) item).getBlock(), item); + } + }); + } +} diff --git a/legacy-fabric-block-api-v1/1.12.2/src/main/java/net/legacyfabric/fabric/mixin/block/versioned/BlockAccessor.java b/legacy-fabric-block-api-v1/1.12.2/src/main/java/net/legacyfabric/fabric/mixin/block/versioned/BlockAccessor.java new file mode 100644 index 000000000..2ec203f4d --- /dev/null +++ b/legacy-fabric-block-api-v1/1.12.2/src/main/java/net/legacyfabric/fabric/mixin/block/versioned/BlockAccessor.java @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2020 - 2024 Legacy Fabric + * Copyright (c) 2016 - 2022 FabricMC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package net.legacyfabric.fabric.mixin.block.versioned; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.util.collection.IdList; + +@Mixin(Block.class) +public interface BlockAccessor { + @Accessor("BLOCK_STATES") + static void setBlockStateList(IdList blockStates) { + } +} diff --git a/legacy-fabric-block-api-v1/1.12.2/src/main/java/net/legacyfabric/fabric/mixin/block/versioned/BlockMixin.java b/legacy-fabric-block-api-v1/1.12.2/src/main/java/net/legacyfabric/fabric/mixin/block/versioned/BlockMixin.java new file mode 100644 index 000000000..6bd40b175 --- /dev/null +++ b/legacy-fabric-block-api-v1/1.12.2/src/main/java/net/legacyfabric/fabric/mixin/block/versioned/BlockMixin.java @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2020 - 2024 Legacy Fabric + * Copyright (c) 2016 - 2022 FabricMC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package net.legacyfabric.fabric.mixin.block.versioned; + +import org.spongepowered.asm.mixin.Final; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +import net.minecraft.block.Block; +import net.minecraft.util.Identifier; +import net.minecraft.util.registry.BiDefaultedRegistry; + +import net.legacyfabric.fabric.api.registry.v2.RegistryHelper; +import net.legacyfabric.fabric.api.registry.v2.RegistryIds; + +@Mixin(Block.class) +public class BlockMixin { + @Shadow + @Final + public static BiDefaultedRegistry REGISTRY; + + @Inject(method = "setup", at = @At("RETURN")) + private static void registerRegistry(CallbackInfo ci) { + RegistryHelper.addRegistry(RegistryIds.BLOCKS, REGISTRY); + } +} diff --git a/legacy-fabric-block-api-v1/1.12.2/src/main/java/net/legacyfabric/fabric/mixin/block/versioned/ItemAccessor.java b/legacy-fabric-block-api-v1/1.12.2/src/main/java/net/legacyfabric/fabric/mixin/block/versioned/ItemAccessor.java new file mode 100644 index 000000000..794281ac8 --- /dev/null +++ b/legacy-fabric-block-api-v1/1.12.2/src/main/java/net/legacyfabric/fabric/mixin/block/versioned/ItemAccessor.java @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2020 - 2024 Legacy Fabric + * Copyright (c) 2016 - 2022 FabricMC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package net.legacyfabric.fabric.mixin.block.versioned; + +import java.util.Map; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; + +import net.minecraft.block.Block; +import net.minecraft.item.Item; + +@Mixin(Item.class) +public interface ItemAccessor { + @Accessor("BLOCK_ITEMS") + static Map getBlockItemsMap() { + return null; + } +} diff --git a/legacy-fabric-block-api-v1/1.12.2/src/main/resources/fabric.mod.json b/legacy-fabric-block-api-v1/1.12.2/src/main/resources/fabric.mod.json new file mode 100644 index 000000000..b018250ea --- /dev/null +++ b/legacy-fabric-block-api-v1/1.12.2/src/main/resources/fabric.mod.json @@ -0,0 +1,46 @@ +{ + "schemaVersion": 1, + "id": "legacy-fabric-block-api-v1", + "name": "Legacy Fabric Block API (V1)", + "version": "${version}", + "environment": "*", + "license": "Apache-2.0", + "icon": "assets/legacy-fabric/icon.png", + "contact": { + "homepage": "https://legacyfabric.net/", + "irc": "irc://irc.esper.net:6667/legacyfabric", + "issues": "https://github.com/Legacy-Fabric/fabric/issues", + "sources": "https://github.com/Legacy-Fabric/fabric" + }, + "authors": [ + "Legacy-Fabric" + ], + "depends": { + "fabricloader": ">=0.4.0", + "minecraft": "${minecraft_version}" + }, + "description": "Block utils", + "entrypoints": { + "preLaunch": [ + "net.legacyfabric.fabric.impl.block.versioned.EarlyInitializer" + ] + }, + "mixins": [ + "legacy-fabric-block-api-v1.mixins.json" + ], + "accessWidener": "legacy-fabric-block-api-v1.accesswidener", + "custom": { + "loom:injected_interfaces": { + }, + "modmenu": { + "badges": [ "library" ], + "parent": { + "id": "legacy-fabric-api", + "name": "Legacy Fabric API", + "badges": [ "library" ], + "description": "Core API module providing key hooks and inter-compatibility features for Minecraft 1.7.10-1.12.2.", + "icon": "assets/legacy-fabric/icon.png" + } + } + } +} diff --git a/legacy-fabric-block-api-v1/1.12.2/src/main/resources/legacy-fabric-block-api-v1.accesswidener b/legacy-fabric-block-api-v1/1.12.2/src/main/resources/legacy-fabric-block-api-v1.accesswidener new file mode 100644 index 000000000..b3e9ad4a4 --- /dev/null +++ b/legacy-fabric-block-api-v1/1.12.2/src/main/resources/legacy-fabric-block-api-v1.accesswidener @@ -0,0 +1,6 @@ +accessWidener v2 named + +accessible field net/minecraft/block/Block useNeighbourLight Z +accessible field net/minecraft/block/Block transluscent Z +accessible field net/minecraft/block/Block material Lnet/minecraft/block/material/Material; +accessible field net/minecraft/block/Block opacity I diff --git a/legacy-fabric-block-api-v1/1.12.2/src/main/resources/legacy-fabric-block-api-v1.mixins.json b/legacy-fabric-block-api-v1/1.12.2/src/main/resources/legacy-fabric-block-api-v1.mixins.json new file mode 100644 index 000000000..6368baf84 --- /dev/null +++ b/legacy-fabric-block-api-v1/1.12.2/src/main/resources/legacy-fabric-block-api-v1.mixins.json @@ -0,0 +1,15 @@ +{ + "required": true, + "package": "net.legacyfabric.fabric.mixin.block.versioned", + "compatibilityLevel": "JAVA_8", + "injectors": { + "defaultRequire": 1 + }, + "mixins": [ + "BlockAccessor", + "BlockMixin", + "ItemAccessor" + ], + "client": [ + ] +} diff --git a/legacy-fabric-block-api-v1/1.7.10/build.gradle b/legacy-fabric-block-api-v1/1.7.10/build.gradle new file mode 100644 index 000000000..306a9d690 --- /dev/null +++ b/legacy-fabric-block-api-v1/1.7.10/build.gradle @@ -0,0 +1,3 @@ +loom { + accessWidenerPath = file("src/main/resources/legacy-fabric-block-api-v1.accesswidener") +} diff --git a/legacy-fabric-block-api-v1/1.7.10/gradle.properties b/legacy-fabric-block-api-v1/1.7.10/gradle.properties new file mode 100644 index 000000000..c01c52c6b --- /dev/null +++ b/legacy-fabric-block-api-v1/1.7.10/gradle.properties @@ -0,0 +1,2 @@ +minVersionIncluded=1.7 +maxVersionIncluded=1.7.10 diff --git a/legacy-fabric-block-api-v1/1.7.10/src/main/java/net/legacyfabric/fabric/impl/block/versioned/EarlyInitializer.java b/legacy-fabric-block-api-v1/1.7.10/src/main/java/net/legacyfabric/fabric/impl/block/versioned/EarlyInitializer.java new file mode 100644 index 000000000..681a3e607 --- /dev/null +++ b/legacy-fabric-block-api-v1/1.7.10/src/main/java/net/legacyfabric/fabric/impl/block/versioned/EarlyInitializer.java @@ -0,0 +1,62 @@ +/* + * Copyright (c) 2020 - 2024 Legacy Fabric + * Copyright (c) 2016 - 2022 FabricMC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package net.legacyfabric.fabric.impl.block.versioned; + +import net.minecraft.block.Block; +import net.minecraft.block.SlabBlock; +import net.minecraft.block.material.Material; +import net.minecraft.item.Item; + +import net.fabricmc.loader.api.entrypoint.PreLaunchEntrypoint; + +import net.legacyfabric.fabric.api.registry.v2.RegistryHelper; +import net.legacyfabric.fabric.api.registry.v2.RegistryIds; +import net.legacyfabric.fabric.api.registry.v2.event.RegistryInitializedEvent; +import net.legacyfabric.fabric.api.registry.v2.registry.holder.FabricRegistry; +import net.legacyfabric.fabric.api.registry.v2.registry.holder.SyncedFabricRegistry; +import net.legacyfabric.fabric.api.util.Identifier; + +public class EarlyInitializer implements PreLaunchEntrypoint { + @Override + public void onPreLaunch() { + RegistryInitializedEvent.event(RegistryIds.BLOCKS).register(EarlyInitializer::blockRegistryInit); + } + + private static void blockRegistryInit(FabricRegistry holder) { + SyncedFabricRegistry registry = (SyncedFabricRegistry) holder; + + registry.fabric$getEntryAddedCallback().register((rawId, id, block) -> { + if (block.getMaterial() == Material.AIR) { + block.useNeighbourLight = false; + } else { + boolean useNeighbourLight = false; + boolean isStairs = block.getBlockType() == 10; + boolean isSlab = block instanceof SlabBlock; + boolean isMissingTop = block == RegistryHelper.getValue(Item.REGISTRY, new Identifier("farmland")); + boolean isTranslucent = block.transluscent; + boolean isNotOpaque = block.getOpacity() == 0; + + if (isStairs || isSlab || isMissingTop || isTranslucent || isNotOpaque) { + useNeighbourLight = true; + } + + block.useNeighbourLight = useNeighbourLight; + } + }); + } +} diff --git a/legacy-fabric-block-api-v1/1.7.10/src/main/java/net/legacyfabric/fabric/mixin/block/versioned/BlockItemAccessor.java b/legacy-fabric-block-api-v1/1.7.10/src/main/java/net/legacyfabric/fabric/mixin/block/versioned/BlockItemAccessor.java new file mode 100644 index 000000000..aaad9cbfb --- /dev/null +++ b/legacy-fabric-block-api-v1/1.7.10/src/main/java/net/legacyfabric/fabric/mixin/block/versioned/BlockItemAccessor.java @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2020 - 2024 Legacy Fabric + * Copyright (c) 2016 - 2022 FabricMC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package net.legacyfabric.fabric.mixin.block.versioned; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; + +import net.minecraft.block.Block; +import net.minecraft.item.BlockItem; + +@Mixin(BlockItem.class) +public interface BlockItemAccessor { + @Accessor + Block getBlock(); +} diff --git a/legacy-fabric-block-api-v1/1.7.10/src/main/java/net/legacyfabric/fabric/mixin/block/versioned/BlockMixin.java b/legacy-fabric-block-api-v1/1.7.10/src/main/java/net/legacyfabric/fabric/mixin/block/versioned/BlockMixin.java new file mode 100644 index 000000000..7b959d0aa --- /dev/null +++ b/legacy-fabric-block-api-v1/1.7.10/src/main/java/net/legacyfabric/fabric/mixin/block/versioned/BlockMixin.java @@ -0,0 +1,68 @@ +/* + * Copyright (c) 2020 - 2024 Legacy Fabric + * Copyright (c) 2016 - 2022 FabricMC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package net.legacyfabric.fabric.mixin.block.versioned; + +import org.spongepowered.asm.mixin.Final; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +import net.minecraft.block.Block; +import net.minecraft.item.BlockItem; +import net.minecraft.item.Item; +import net.minecraft.util.registry.SimpleRegistry; + +import net.legacyfabric.fabric.api.registry.v2.RegistryHelper; +import net.legacyfabric.fabric.api.registry.v2.RegistryIds; +import net.legacyfabric.fabric.api.util.Identifier; + +@Mixin(Block.class) +public class BlockMixin { + @Shadow + @Final + public static SimpleRegistry REGISTRY; + + @Inject(method = "setup", at = @At("RETURN")) + private static void registerRegistry(CallbackInfo ci) { + RegistryHelper.addRegistry(RegistryIds.BLOCKS, REGISTRY); + } + + @Inject(method = "getBlockFromItem", at = @At("HEAD"), cancellable = true) + private static void fixBlockFromItem(Item item, CallbackInfoReturnable cir) { + if (item instanceof BlockItem) { + cir.setReturnValue(((BlockItemAccessor) item).getBlock()); + return; + } + + Identifier identifier = RegistryHelper.getId(Item.REGISTRY, item); + + if (identifier != null) { + Block blockFromId = RegistryHelper.getValue(REGISTRY, identifier); + + if (blockFromId != null) { + cir.setReturnValue(blockFromId); + return; + } + } + + cir.setReturnValue(null); + } +} diff --git a/legacy-fabric-block-api-v1/1.7.10/src/main/java/net/legacyfabric/fabric/mixin/block/versioned/ItemMixin.java b/legacy-fabric-block-api-v1/1.7.10/src/main/java/net/legacyfabric/fabric/mixin/block/versioned/ItemMixin.java new file mode 100644 index 000000000..da5fd6879 --- /dev/null +++ b/legacy-fabric-block-api-v1/1.7.10/src/main/java/net/legacyfabric/fabric/mixin/block/versioned/ItemMixin.java @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2020 - 2024 Legacy Fabric + * Copyright (c) 2016 - 2022 FabricMC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package net.legacyfabric.fabric.mixin.block.versioned; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +import net.minecraft.block.Block; +import net.minecraft.item.Item; + +import net.legacyfabric.fabric.api.registry.v2.RegistryHelper; +import net.legacyfabric.fabric.api.util.Identifier; + +@Mixin(Item.class) +public class ItemMixin { + @Inject(method = "fromBlock", at = @At("HEAD"), cancellable = true) + private static void fixItemFromBlock(Block block, CallbackInfoReturnable cir) { + Identifier identifier = RegistryHelper.getId(Block.REGISTRY, block); + + if (identifier != null) { + Item item = RegistryHelper.getValue(Item.REGISTRY, identifier); + + if (item != null) { + cir.setReturnValue(item); + return; + } + } + + cir.setReturnValue(null); + } +} diff --git a/legacy-fabric-block-api-v1/1.7.10/src/main/resources/fabric.mod.json b/legacy-fabric-block-api-v1/1.7.10/src/main/resources/fabric.mod.json new file mode 100644 index 000000000..b018250ea --- /dev/null +++ b/legacy-fabric-block-api-v1/1.7.10/src/main/resources/fabric.mod.json @@ -0,0 +1,46 @@ +{ + "schemaVersion": 1, + "id": "legacy-fabric-block-api-v1", + "name": "Legacy Fabric Block API (V1)", + "version": "${version}", + "environment": "*", + "license": "Apache-2.0", + "icon": "assets/legacy-fabric/icon.png", + "contact": { + "homepage": "https://legacyfabric.net/", + "irc": "irc://irc.esper.net:6667/legacyfabric", + "issues": "https://github.com/Legacy-Fabric/fabric/issues", + "sources": "https://github.com/Legacy-Fabric/fabric" + }, + "authors": [ + "Legacy-Fabric" + ], + "depends": { + "fabricloader": ">=0.4.0", + "minecraft": "${minecraft_version}" + }, + "description": "Block utils", + "entrypoints": { + "preLaunch": [ + "net.legacyfabric.fabric.impl.block.versioned.EarlyInitializer" + ] + }, + "mixins": [ + "legacy-fabric-block-api-v1.mixins.json" + ], + "accessWidener": "legacy-fabric-block-api-v1.accesswidener", + "custom": { + "loom:injected_interfaces": { + }, + "modmenu": { + "badges": [ "library" ], + "parent": { + "id": "legacy-fabric-api", + "name": "Legacy Fabric API", + "badges": [ "library" ], + "description": "Core API module providing key hooks and inter-compatibility features for Minecraft 1.7.10-1.12.2.", + "icon": "assets/legacy-fabric/icon.png" + } + } + } +} diff --git a/legacy-fabric-block-api-v1/1.7.10/src/main/resources/legacy-fabric-block-api-v1.accesswidener b/legacy-fabric-block-api-v1/1.7.10/src/main/resources/legacy-fabric-block-api-v1.accesswidener new file mode 100644 index 000000000..55067474a --- /dev/null +++ b/legacy-fabric-block-api-v1/1.7.10/src/main/resources/legacy-fabric-block-api-v1.accesswidener @@ -0,0 +1,6 @@ +accessWidener v2 named + +transitive-accessible method net/minecraft/block/Block (Lnet/minecraft/block/material/Material;)V + +accessible field net/minecraft/block/Block useNeighbourLight Z +accessible field net/minecraft/block/Block transluscent Z diff --git a/legacy-fabric-block-api-v1/1.7.10/src/main/resources/legacy-fabric-block-api-v1.mixins.json b/legacy-fabric-block-api-v1/1.7.10/src/main/resources/legacy-fabric-block-api-v1.mixins.json new file mode 100644 index 000000000..0fbf43835 --- /dev/null +++ b/legacy-fabric-block-api-v1/1.7.10/src/main/resources/legacy-fabric-block-api-v1.mixins.json @@ -0,0 +1,15 @@ +{ + "required": true, + "package": "net.legacyfabric.fabric.mixin.block.versioned", + "compatibilityLevel": "JAVA_8", + "injectors": { + "defaultRequire": 1 + }, + "mixins": [ + "BlockItemAccessor", + "BlockMixin", + "ItemMixin" + ], + "client": [ + ] +} diff --git a/legacy-fabric-block-api-v1/common.gradle b/legacy-fabric-block-api-v1/common.gradle new file mode 100644 index 000000000..7102014bf --- /dev/null +++ b/legacy-fabric-block-api-v1/common.gradle @@ -0,0 +1,7 @@ +moduleDependencies(project, [ + "legacy-fabric-api-base", + "legacy-fabric-networking-api-v1", + "legacy-fabric-resource-loader-v1", + "legacy-fabric-registry-sync-api-v2", + "legacy-fabric-item-api-v1" +]) diff --git a/legacy-fabric-block-api-v1/common/build.gradle b/legacy-fabric-block-api-v1/common/build.gradle new file mode 100644 index 000000000..e69de29bb diff --git a/legacy-fabric-block-api-v1/common/gradle.properties b/legacy-fabric-block-api-v1/common/gradle.properties new file mode 100644 index 000000000..a499ab733 --- /dev/null +++ b/legacy-fabric-block-api-v1/common/gradle.properties @@ -0,0 +1,2 @@ +minVersionIncluded=1.7 +maxVersionIncluded=1.12.2 diff --git a/legacy-fabric-block-api-v1/common/src/main/java/net/legacyfabric/fabric/impl/block/EarlyInitializer.java b/legacy-fabric-block-api-v1/common/src/main/java/net/legacyfabric/fabric/impl/block/EarlyInitializer.java new file mode 100644 index 000000000..4153bd3c1 --- /dev/null +++ b/legacy-fabric-block-api-v1/common/src/main/java/net/legacyfabric/fabric/impl/block/EarlyInitializer.java @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2020 - 2024 Legacy Fabric + * Copyright (c) 2016 - 2022 FabricMC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package net.legacyfabric.fabric.impl.block; + +import net.minecraft.block.Block; + +import net.fabricmc.loader.api.entrypoint.PreLaunchEntrypoint; + +import net.legacyfabric.fabric.api.registry.v2.RegistryIds; +import net.legacyfabric.fabric.api.registry.v2.event.RegistryInitializedEvent; +import net.legacyfabric.fabric.api.registry.v2.registry.holder.FabricRegistry; + +public class EarlyInitializer implements PreLaunchEntrypoint { + @Override + public void onPreLaunch() { + RegistryInitializedEvent.event(RegistryIds.BLOCKS).register(EarlyInitializer::blockRegistryInit); + } + + private static void blockRegistryInit(FabricRegistry holder) { + FabricRegistry registry = (FabricRegistry) holder; + + registry.fabric$getBeforeAddedCallback().register((rawId, id, block) -> block.setTranslationKey(id.toTranslationKey())); + } +} diff --git a/legacy-fabric-block-api-v1/common/src/main/resources/fabric.mod.json b/legacy-fabric-block-api-v1/common/src/main/resources/fabric.mod.json new file mode 100644 index 000000000..39d3627f1 --- /dev/null +++ b/legacy-fabric-block-api-v1/common/src/main/resources/fabric.mod.json @@ -0,0 +1,45 @@ +{ + "schemaVersion": 1, + "id": "legacy-fabric-block-api-v1-common", + "name": "Legacy Fabric Block API (V1)", + "version": "${version}", + "environment": "*", + "license": "Apache-2.0", + "icon": "assets/legacy-fabric/icon.png", + "contact": { + "homepage": "https://legacyfabric.net/", + "irc": "irc://irc.esper.net:6667/legacyfabric", + "issues": "https://github.com/Legacy-Fabric/fabric/issues", + "sources": "https://github.com/Legacy-Fabric/fabric" + }, + "authors": [ + "Legacy-Fabric" + ], + "depends": { + "fabricloader": ">=0.4.0", + "minecraft": "${minecraft_version}" + }, + "description": "Block utils", + "entrypoints": { + "preLaunch": [ + "net.legacyfabric.fabric.impl.block.EarlyInitializer" + ] + }, + "mixins": [ + "legacy-fabric-block-api-v1-common.mixins.json" + ], + "custom": { + "loom:injected_interfaces": { + }, + "modmenu": { + "badges": [ "library" ], + "parent": { + "id": "legacy-fabric-api", + "name": "Legacy Fabric API", + "badges": [ "library" ], + "description": "Core API module providing key hooks and inter-compatibility features for Minecraft 1.7.10-1.12.2.", + "icon": "assets/legacy-fabric/icon.png" + } + } + } +} diff --git a/legacy-fabric-block-api-v1/common/src/main/resources/legacy-fabric-block-api-v1-common.mixins.json b/legacy-fabric-block-api-v1/common/src/main/resources/legacy-fabric-block-api-v1-common.mixins.json new file mode 100644 index 000000000..4c2ea7c54 --- /dev/null +++ b/legacy-fabric-block-api-v1/common/src/main/resources/legacy-fabric-block-api-v1-common.mixins.json @@ -0,0 +1,12 @@ +{ + "required": true, + "package": "net.legacyfabric.fabric.mixin.block", + "compatibilityLevel": "JAVA_8", + "injectors": { + "defaultRequire": 1 + }, + "mixins": [ + ], + "client": [ + ] +} diff --git a/legacy-fabric-registry-sync-api-v1/common.gradle b/legacy-fabric-registry-sync-api-v1/common.gradle index 7102014bf..be10e46f6 100644 --- a/legacy-fabric-registry-sync-api-v1/common.gradle +++ b/legacy-fabric-registry-sync-api-v1/common.gradle @@ -3,5 +3,6 @@ moduleDependencies(project, [ "legacy-fabric-networking-api-v1", "legacy-fabric-resource-loader-v1", "legacy-fabric-registry-sync-api-v2", - "legacy-fabric-item-api-v1" + "legacy-fabric-item-api-v1", + "legacy-fabric-block-api-v1", ]) diff --git a/legacyfabric-api/1.10.2/src/testmod/java/net/legacyfabric/fabric/test/registry/RegistryTest.java b/legacyfabric-api/1.10.2/src/testmod/java/net/legacyfabric/fabric/test/registry/RegistryTest.java index d3078041e..23a79494b 100644 --- a/legacyfabric-api/1.10.2/src/testmod/java/net/legacyfabric/fabric/test/registry/RegistryTest.java +++ b/legacyfabric-api/1.10.2/src/testmod/java/net/legacyfabric/fabric/test/registry/RegistryTest.java @@ -17,6 +17,12 @@ package net.legacyfabric.fabric.test.registry; +import java.util.concurrent.ThreadLocalRandom; + +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.block.material.MaterialColor; +import net.minecraft.item.BlockItem; import net.minecraft.item.Item; import net.minecraft.item.itemgroup.ItemGroup; @@ -30,6 +36,7 @@ public class RegistryTest implements ModInitializer { @Override public void onInitialize() { this.registerItems(); + this.registerBlocks(); } private void registerItems() { @@ -40,4 +47,23 @@ private void registerItems() { ); ItemModelRegistry.registerItemModel(testItem, new Identifier("legacy-fabric-api:test_item")); } + + private void registerBlocks() { + Block concBlock = new Block(Material.STONE, MaterialColor.BLACK).setItemGroup(ItemGroup.FOOD); + Block concBlock2 = new Block(Material.STONE, MaterialColor.BLUE).setItemGroup(ItemGroup.FOOD); + Block[] blocks = ThreadLocalRandom.current().nextBoolean() ? new Block[]{concBlock, concBlock2} : new Block[]{concBlock2, concBlock}; + + for (Block block : blocks) { + int color = 1644825; + + if (block == concBlock2) { + color = 3361970; + } + + Identifier identifier = new Identifier("legacy-fabric-api", "conc_block_" + color); + + RegistryHelper.register(Block.REGISTRY, identifier, block); + RegistryHelper.register(Item.REGISTRY, identifier, new BlockItem(block)); + } + } } diff --git a/legacyfabric-api/1.11.2/src/testmod/java/net/legacyfabric/fabric/test/registry/RegistryTest.java b/legacyfabric-api/1.11.2/src/testmod/java/net/legacyfabric/fabric/test/registry/RegistryTest.java index d3078041e..23a79494b 100644 --- a/legacyfabric-api/1.11.2/src/testmod/java/net/legacyfabric/fabric/test/registry/RegistryTest.java +++ b/legacyfabric-api/1.11.2/src/testmod/java/net/legacyfabric/fabric/test/registry/RegistryTest.java @@ -17,6 +17,12 @@ package net.legacyfabric.fabric.test.registry; +import java.util.concurrent.ThreadLocalRandom; + +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.block.material.MaterialColor; +import net.minecraft.item.BlockItem; import net.minecraft.item.Item; import net.minecraft.item.itemgroup.ItemGroup; @@ -30,6 +36,7 @@ public class RegistryTest implements ModInitializer { @Override public void onInitialize() { this.registerItems(); + this.registerBlocks(); } private void registerItems() { @@ -40,4 +47,23 @@ private void registerItems() { ); ItemModelRegistry.registerItemModel(testItem, new Identifier("legacy-fabric-api:test_item")); } + + private void registerBlocks() { + Block concBlock = new Block(Material.STONE, MaterialColor.BLACK).setItemGroup(ItemGroup.FOOD); + Block concBlock2 = new Block(Material.STONE, MaterialColor.BLUE).setItemGroup(ItemGroup.FOOD); + Block[] blocks = ThreadLocalRandom.current().nextBoolean() ? new Block[]{concBlock, concBlock2} : new Block[]{concBlock2, concBlock}; + + for (Block block : blocks) { + int color = 1644825; + + if (block == concBlock2) { + color = 3361970; + } + + Identifier identifier = new Identifier("legacy-fabric-api", "conc_block_" + color); + + RegistryHelper.register(Block.REGISTRY, identifier, block); + RegistryHelper.register(Item.REGISTRY, identifier, new BlockItem(block)); + } + } } diff --git a/legacyfabric-api/1.12.2/src/testmod/java/net/legacyfabric/fabric/test/registry/RegistryTest.java b/legacyfabric-api/1.12.2/src/testmod/java/net/legacyfabric/fabric/test/registry/RegistryTest.java index d3078041e..23a79494b 100644 --- a/legacyfabric-api/1.12.2/src/testmod/java/net/legacyfabric/fabric/test/registry/RegistryTest.java +++ b/legacyfabric-api/1.12.2/src/testmod/java/net/legacyfabric/fabric/test/registry/RegistryTest.java @@ -17,6 +17,12 @@ package net.legacyfabric.fabric.test.registry; +import java.util.concurrent.ThreadLocalRandom; + +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.block.material.MaterialColor; +import net.minecraft.item.BlockItem; import net.minecraft.item.Item; import net.minecraft.item.itemgroup.ItemGroup; @@ -30,6 +36,7 @@ public class RegistryTest implements ModInitializer { @Override public void onInitialize() { this.registerItems(); + this.registerBlocks(); } private void registerItems() { @@ -40,4 +47,23 @@ private void registerItems() { ); ItemModelRegistry.registerItemModel(testItem, new Identifier("legacy-fabric-api:test_item")); } + + private void registerBlocks() { + Block concBlock = new Block(Material.STONE, MaterialColor.BLACK).setItemGroup(ItemGroup.FOOD); + Block concBlock2 = new Block(Material.STONE, MaterialColor.BLUE).setItemGroup(ItemGroup.FOOD); + Block[] blocks = ThreadLocalRandom.current().nextBoolean() ? new Block[]{concBlock, concBlock2} : new Block[]{concBlock2, concBlock}; + + for (Block block : blocks) { + int color = 1644825; + + if (block == concBlock2) { + color = 3361970; + } + + Identifier identifier = new Identifier("legacy-fabric-api", "conc_block_" + color); + + RegistryHelper.register(Block.REGISTRY, identifier, block); + RegistryHelper.register(Item.REGISTRY, identifier, new BlockItem(block)); + } + } } diff --git a/legacyfabric-api/1.7.10/src/testmod/java/net/legacyfabric/fabric/test/registry/RegistryTest.java b/legacyfabric-api/1.7.10/src/testmod/java/net/legacyfabric/fabric/test/registry/RegistryTest.java index ac716f6c5..30d0f2679 100644 --- a/legacyfabric-api/1.7.10/src/testmod/java/net/legacyfabric/fabric/test/registry/RegistryTest.java +++ b/legacyfabric-api/1.7.10/src/testmod/java/net/legacyfabric/fabric/test/registry/RegistryTest.java @@ -17,6 +17,11 @@ package net.legacyfabric.fabric.test.registry; +import java.util.concurrent.ThreadLocalRandom; + +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.item.BlockItem; import net.minecraft.item.Item; import net.minecraft.item.itemgroup.ItemGroup; @@ -29,6 +34,7 @@ public class RegistryTest implements ModInitializer { @Override public void onInitialize() { this.registerItems(); + this.registerBlocks(); } private void registerItems() { @@ -40,4 +46,16 @@ private void registerItems() { new Identifier("legacy-fabric-api", "test_item"), testItem ); } + + private void registerBlocks() { + Block concBlock = new Block(Material.STONE).setItemGroup(ItemGroup.FOOD); + Block concBlock2 = new Block(Material.GLASS).setItemGroup(ItemGroup.FOOD); + Block[] blocks = ThreadLocalRandom.current().nextBoolean() ? new Block[]{concBlock, concBlock2} : new Block[]{concBlock2, concBlock}; + + for (Block block : blocks) { + Identifier identifier = new Identifier("legacy-fabric-api:conc_block_" + block.getMaterial().getColor().color); + RegistryHelper.register(Block.REGISTRY, identifier, block); + RegistryHelper.register(Item.REGISTRY, identifier, new BlockItem(block)); + } + } } diff --git a/legacyfabric-api/1.8.9/src/testmod/java/net/legacyfabric/fabric/test/registry/RegistryTest.java b/legacyfabric-api/1.8.9/src/testmod/java/net/legacyfabric/fabric/test/registry/RegistryTest.java index d3078041e..8dd49306a 100644 --- a/legacyfabric-api/1.8.9/src/testmod/java/net/legacyfabric/fabric/test/registry/RegistryTest.java +++ b/legacyfabric-api/1.8.9/src/testmod/java/net/legacyfabric/fabric/test/registry/RegistryTest.java @@ -17,6 +17,12 @@ package net.legacyfabric.fabric.test.registry; +import java.util.concurrent.ThreadLocalRandom; + +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.block.material.MaterialColor; +import net.minecraft.item.BlockItem; import net.minecraft.item.Item; import net.minecraft.item.itemgroup.ItemGroup; @@ -30,6 +36,7 @@ public class RegistryTest implements ModInitializer { @Override public void onInitialize() { this.registerItems(); + this.registerBlocks(); } private void registerItems() { @@ -40,4 +47,16 @@ private void registerItems() { ); ItemModelRegistry.registerItemModel(testItem, new Identifier("legacy-fabric-api:test_item")); } + + private void registerBlocks() { + Block concBlock = new Block(Material.STONE, MaterialColor.BLACK).setItemGroup(ItemGroup.FOOD); + Block concBlock2 = new Block(Material.GLASS, MaterialColor.BLUE).setItemGroup(ItemGroup.FOOD); + Block[] blocks = ThreadLocalRandom.current().nextBoolean() ? new Block[]{concBlock, concBlock2} : new Block[]{concBlock2, concBlock}; + + for (Block block : blocks) { + Identifier identifier = new Identifier("legacy-fabric-api:conc_block_" + block.getMaterialColor(block.getDefaultState()).color); + RegistryHelper.register(Block.REGISTRY, identifier, block); + RegistryHelper.register(Item.REGISTRY, identifier, new BlockItem(block)); + } + } } diff --git a/legacyfabric-api/1.8/build.gradle b/legacyfabric-api/1.8/build.gradle index e69de29bb..eb4794b24 100644 --- a/legacyfabric-api/1.8/build.gradle +++ b/legacyfabric-api/1.8/build.gradle @@ -0,0 +1,3 @@ +loom { + accessWidenerPath = file("src/testmod/resources/testmods.accesswidener") +} diff --git a/legacyfabric-api/1.8/src/testmod/java/net/legacyfabric/fabric/test/registry/RegistryTest.java b/legacyfabric-api/1.8/src/testmod/java/net/legacyfabric/fabric/test/registry/RegistryTest.java index d3078041e..649025aca 100644 --- a/legacyfabric-api/1.8/src/testmod/java/net/legacyfabric/fabric/test/registry/RegistryTest.java +++ b/legacyfabric-api/1.8/src/testmod/java/net/legacyfabric/fabric/test/registry/RegistryTest.java @@ -17,6 +17,11 @@ package net.legacyfabric.fabric.test.registry; +import java.util.concurrent.ThreadLocalRandom; + +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.item.BlockItem; import net.minecraft.item.Item; import net.minecraft.item.itemgroup.ItemGroup; @@ -30,6 +35,7 @@ public class RegistryTest implements ModInitializer { @Override public void onInitialize() { this.registerItems(); + this.registerBlocks(); } private void registerItems() { @@ -40,4 +46,16 @@ private void registerItems() { ); ItemModelRegistry.registerItemModel(testItem, new Identifier("legacy-fabric-api:test_item")); } + + private void registerBlocks() { + Block concBlock = new Block(Material.STONE).setItemGroup(ItemGroup.FOOD); + Block concBlock2 = new Block(Material.GLASS).setItemGroup(ItemGroup.FOOD); + Block[] blocks = ThreadLocalRandom.current().nextBoolean() ? new Block[]{concBlock, concBlock2} : new Block[]{concBlock2, concBlock}; + + for (Block block : blocks) { + Identifier identifier = new Identifier("legacy-fabric-api:conc_block_" + block.getMaterial().getColor().color); + RegistryHelper.register(Block.REGISTRY, identifier, block); + RegistryHelper.register(Item.REGISTRY, identifier, new BlockItem(block)); + } + } } diff --git a/legacyfabric-api/1.8/src/testmod/resources/fabric.mod.json b/legacyfabric-api/1.8/src/testmod/resources/fabric.mod.json index b745d372a..8c70add9b 100644 --- a/legacyfabric-api/1.8/src/testmod/resources/fabric.mod.json +++ b/legacyfabric-api/1.8/src/testmod/resources/fabric.mod.json @@ -53,6 +53,7 @@ "depends": { "minecraft": "${minecraft_version}" }, + "accessWidener": "testmods.accesswidener", "custom": { "modmenu": { "badges": [ "library" ] diff --git a/legacyfabric-api/1.9.4/src/testmod/java/net/legacyfabric/fabric/test/registry/RegistryTest.java b/legacyfabric-api/1.9.4/src/testmod/java/net/legacyfabric/fabric/test/registry/RegistryTest.java index d3078041e..cc0fa4c79 100644 --- a/legacyfabric-api/1.9.4/src/testmod/java/net/legacyfabric/fabric/test/registry/RegistryTest.java +++ b/legacyfabric-api/1.9.4/src/testmod/java/net/legacyfabric/fabric/test/registry/RegistryTest.java @@ -17,6 +17,12 @@ package net.legacyfabric.fabric.test.registry; +import java.util.concurrent.ThreadLocalRandom; + +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.block.material.MaterialColor; +import net.minecraft.item.BlockItem; import net.minecraft.item.Item; import net.minecraft.item.itemgroup.ItemGroup; @@ -30,6 +36,7 @@ public class RegistryTest implements ModInitializer { @Override public void onInitialize() { this.registerItems(); + this.registerBlocks(); } private void registerItems() { @@ -40,4 +47,23 @@ private void registerItems() { ); ItemModelRegistry.registerItemModel(testItem, new Identifier("legacy-fabric-api:test_item")); } + + private void registerBlocks() { + Block concBlock = new Block(Material.STONE, MaterialColor.BLACK).setItemGroup(ItemGroup.FOOD); + Block concBlock2 = new Block(Material.GLASS, MaterialColor.BLUE).setItemGroup(ItemGroup.FOOD); + Block[] blocks = ThreadLocalRandom.current().nextBoolean() ? new Block[] {concBlock, concBlock2} : new Block[] {concBlock2, concBlock}; + + for (Block block : blocks) { + int color = 1644825; + + if (block == concBlock2) { + color = 3361970; + } + + Identifier identifier = new Identifier("legacy-fabric-api", "conc_block_" + color); + + RegistryHelper.register(Block.REGISTRY, identifier, block); + RegistryHelper.register(Item.REGISTRY, identifier, new BlockItem(block)); + } + } } diff --git a/legacyfabric-api/common.gradle b/legacyfabric-api/common.gradle index 1ec69e2e6..9598864ea 100644 --- a/legacyfabric-api/common.gradle +++ b/legacyfabric-api/common.gradle @@ -12,6 +12,7 @@ moduleDependencies(project, [ "legacy-fabric-registry-sync-api-v1", "legacy-fabric-registry-sync-api-v2", "legacy-fabric-item-api-v1", + "legacy-fabric-block-api-v1", "legacy-fabric-rendering-api-v1", "legacy-fabric-crash-report-info-v1", "legacy-fabric-command-api-v2" diff --git a/settings.gradle b/settings.gradle index a9a1dea06..16791cd1c 100644 --- a/settings.gradle +++ b/settings.gradle @@ -42,6 +42,7 @@ loadProject("legacy-fabric-permissions-api-v1") loadProject("legacy-fabric-registry-sync-api-v1") loadProject("legacy-fabric-registry-sync-api-v2") loadProject("legacy-fabric-item-api-v1") +loadProject("legacy-fabric-block-api-v1") loadProject("legacy-fabric-rendering-api-v1") loadProject("legacy-fabric-crash-report-info-v1") loadProject("legacy-fabric-command-api-v2")