Multiloader V

fabric is working
This commit is contained in:
techno-sam
2026-04-16 10:49:24 +02:00
parent b4355e8fd8
commit d4b8894a3b
53 changed files with 983 additions and 169 deletions
@@ -0,0 +1,11 @@
package io.github.slimeistdev.crystalline_sky.compat.fabric;
import io.github.slimeistdev.crystalline_sky.annotation.multiloader.ImplClass;
import net.fabricmc.loader.api.FabricLoader;
@ImplClass
public class ModsImpl {
public static boolean isModLoaded(String id) {
return FabricLoader.getInstance().isModLoaded(id);
}
}
@@ -1,6 +1,7 @@
package io.github.slimeistdev.crystalline_sky.fabric;
import io.github.slimeistdev.crystalline_sky.CrystallineSkyClient;
import io.github.slimeistdev.crystalline_sky.multiloader.fabric.ItemGroupRegistrationEventImpl;
import io.github.slimeistdev.crystalline_sky.registry.CrystallineBlocks;
import io.github.slimeistdev.crystalline_sky.registry.client.CrystallineRenderTypes;
import net.fabricmc.api.ClientModInitializer;
@@ -9,6 +10,9 @@ import net.fabricmc.api.Environment;
import net.fabricmc.fabric.api.blockrenderlayer.v1.BlockRenderLayerMap;
import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents;
import net.fabricmc.fabric.api.client.keybinding.v1.KeyBindingHelper;
import net.minecraft.world.level.block.Block;
import java.util.function.Consumer;
@Environment(EnvType.CLIENT)
public class CrystallineSkyClientImpl implements ClientModInitializer {
@@ -16,9 +20,11 @@ public class CrystallineSkyClientImpl implements ClientModInitializer {
public void onInitializeClient() {
CrystallineSkyClient.init();
CrystallineSkyClient.registerKeybindings(KeyBindingHelper::registerKeyBinding);
ItemGroupRegistrationEventImpl.register();
BlockRenderLayerMap.INSTANCE.putBlock(CrystallineBlocks.SKY, CrystallineRenderTypes.SKY);
BlockRenderLayerMap.INSTANCE.putBlock(CrystallineBlocks.WEEPING_SKY, CrystallineRenderTypes.SKY);
Consumer<Block> makeSky = b -> BlockRenderLayerMap.INSTANCE.putBlock(b, CrystallineRenderTypes.SKY);
CrystallineBlocks.SKY.onRegistered(makeSky);
CrystallineBlocks.WEEPING_SKY.onRegistered(makeSky);
ClientTickEvents.END_CLIENT_TICK.register(CrystallineSkyClient::onEndTick);
}
@@ -1,13 +1,16 @@
package io.github.slimeistdev.crystalline_sky.fabric.datagen.providers;
import io.github.slimeistdev.crystalline_sky.CrystallineSky;
import io.github.slimeistdev.crystalline_sky.foundation.registration.holder.BaseHolder;
import io.github.slimeistdev.crystalline_sky.registry.CrystallineBlocks;
import net.fabricmc.fabric.api.datagen.v1.FabricDataOutput;
import net.fabricmc.fabric.api.datagen.v1.provider.FabricTagProvider;
import net.minecraft.core.registries.Registries;
import net.minecraft.core.Holder;
import net.minecraft.core.HolderLookup;
import net.minecraft.core.registries.Registries;
import net.minecraft.tags.BlockTags;
import net.minecraft.tags.TagKey;
import net.minecraft.world.level.block.Block;
import java.util.concurrent.CompletableFuture;
@@ -18,14 +21,25 @@ public class CrystallineSkyBlockTagProvider extends FabricTagProvider.BlockTagPr
@Override
protected void addTags(HolderLookup.Provider wrapperLookup) {
getOrCreateTagBuilder(TagKey.create(Registries.BLOCK, CrystallineSky.id("sky_light_emitters")))
builder(TagKey.create(Registries.BLOCK, CrystallineSky.id("sky_light_emitters")))
.add(CrystallineBlocks.SKY)
.add(CrystallineBlocks.SKY_LIGHT)
.add(CrystallineBlocks.WEEPING_SKY)
.add(CrystallineBlocks.WEEPING_SKY_LIGHT);
getOrCreateTagBuilder(BlockTags.CRYSTAL_SOUND_BLOCKS)
builder(BlockTags.CRYSTAL_SOUND_BLOCKS)
.add(CrystallineBlocks.SKY)
.add(CrystallineBlocks.WEEPING_SKY);
}
private TagBuilder<Block> builder(TagKey<Block> tag) {
return new TagBuilder<>(getOrCreateTagBuilder(tag));
}
private record TagBuilder<T>(FabricTagProvider<T>.FabricTagBuilder wrapped) {
public <R extends T> TagBuilder<T> add(Holder<R> object) {
BaseHolder.<T>downcast(object).unwrap().map(wrapped::add, wrapped::add);
return this;
}
}
}
@@ -14,7 +14,7 @@ public class CrystallineSkyLootProvider extends FabricBlockLootTableProvider {
@Override
public void generate() {
dropWhenSilkTouch(CrystallineBlocks.SKY);
dropWhenSilkTouch(CrystallineBlocks.WEEPING_SKY);
dropWhenSilkTouch(CrystallineBlocks.SKY.value());
dropWhenSilkTouch(CrystallineBlocks.WEEPING_SKY.value());
}
}
@@ -32,12 +32,12 @@ public class CrystallineSkyModelProvider extends FabricModelProvider {
@Override
public void generateBlockStateModels(BlockModelGenerators gen) {
registerSkyBlock(gen, CrystallineBlocks.SKY);
registerSkyBlock(gen, CrystallineBlocks.WEEPING_SKY);
registerSkyLightBlock(gen, CrystallineBlocks.SKY_LIGHT, CrystallineItems.SKY_LIGHT);
registerSkyBlock(gen, CrystallineBlocks.SKY.value());
registerSkyBlock(gen, CrystallineBlocks.WEEPING_SKY.value());
registerSkyLightBlock(gen, CrystallineBlocks.SKY_LIGHT.value(), CrystallineItems.SKY_LIGHT.value());
gen.createAirLikeBlock(CrystallineBlocks.WEEPING_SKY_LIGHT, CrystallineItems.WEEPING_SKY_LIGHT);
gen.createSimpleFlatItemModel(CrystallineItems.WEEPING_SKY_LIGHT);
gen.createAirLikeBlock(CrystallineBlocks.WEEPING_SKY_LIGHT.value(), CrystallineItems.WEEPING_SKY_LIGHT.value());
gen.createSimpleFlatItemModel(CrystallineItems.WEEPING_SKY_LIGHT.value());
}
private void registerSkyBlock(BlockModelGenerators gen, Block block) {
@@ -0,0 +1,22 @@
package io.github.slimeistdev.crystalline_sky.fabric.mixin.client.compat.axiom;
import com.moulberry.axiom.render.ChunkRenderOverrider;
import io.github.slimeistdev.crystalline_sky.annotation.mixin.ConditionalMixin;
import io.github.slimeistdev.crystalline_sky.compat.Mods;
import io.github.slimeistdev.crystalline_sky.registry.client.CrystallineRenderTypes;
import net.minecraft.client.renderer.RenderType;
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;
@ConditionalMixin(mods = Mods.AXIOM)
@Mixin(ChunkRenderOverrider.AxiomChunkOverrideLayer.class)
public class ChunkRenderOverrider_AxiomChunkOverrideLayerMixin {
@Inject(method = "fromVanilla", at = @At("HEAD"), cancellable = true)
private static void unexplodeSky(RenderType layer, CallbackInfoReturnable<ChunkRenderOverrider.AxiomChunkOverrideLayer> cir) {
if (layer == CrystallineRenderTypes.SKY) {
cir.setReturnValue(ChunkRenderOverrider.AxiomChunkOverrideLayer.CUTOUT_MIPPED);
}
}
}
@@ -0,0 +1,47 @@
package io.github.slimeistdev.crystalline_sky.multiloader.fabric;
import io.github.slimeistdev.crystalline_sky.multiloader.ItemGroupRegistrationEvent;
import io.github.slimeistdev.crystalline_sky.registry.CrystallineItems;
import net.fabricmc.fabric.api.itemgroup.v1.FabricItemGroupEntries;
import net.fabricmc.fabric.api.itemgroup.v1.ItemGroupEvents;
import net.minecraft.core.registries.BuiltInRegistries;
import net.minecraft.resources.ResourceKey;
import net.minecraft.world.item.CreativeModeTab;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.ItemLike;
import java.util.List;
public class ItemGroupRegistrationEventImpl implements ItemGroupRegistrationEvent {
private final ResourceKey<CreativeModeTab> tab;
private final FabricItemGroupEntries entries;
public ItemGroupRegistrationEventImpl(ResourceKey<CreativeModeTab> tab, FabricItemGroupEntries entries) {
this.tab = tab;
this.entries = entries;
}
@Override
public ResourceKey<CreativeModeTab> getTab() {
return tab;
}
@Override
public boolean hasPermissions() {
return entries.getContext().hasPermissions();
}
@Override
public void addAfter(ItemLike reference, List<ItemStack> stacks) {
entries.addAfter(reference, stacks);
}
public static void register() {
ItemGroupEvents.MODIFY_ENTRIES_ALL.register((tab, entries) -> {
CrystallineItems.onItemGroupRegistration(new ItemGroupRegistrationEventImpl(
BuiltInRegistries.CREATIVE_MODE_TAB.getResourceKey(tab).orElseThrow(),
entries
));
});
}
}
@@ -0,0 +1,13 @@
package io.github.slimeistdev.crystalline_sky.multiloader.fabric;
import io.github.slimeistdev.crystalline_sky.annotation.multiloader.ImplClass;
import io.github.slimeistdev.crystalline_sky.multiloader.Loader;
import org.jetbrains.annotations.ApiStatus.Internal;
@ImplClass
public class LoaderImpl {
@Internal
public static Loader getCurrent() {
return Loader.FABRIC;
}
}
@@ -10,7 +10,8 @@
"mixins": [
],
"client": [
"client.RenderTypeMixin"
"client.RenderTypeMixin",
"client.compat.axiom.ChunkRenderOverrider_AxiomChunkOverrideLayerMixin"
],
"server": [
],