mirror of
https://github.com/wisplite/crystalline-sky.git
synced 2026-10-30 13:32:18 -05:00
Multiloader V
fabric is working
This commit is contained in:
@@ -10,9 +10,9 @@ loom {
|
||||
client()
|
||||
|
||||
name = "Minecraft Data"
|
||||
vmArg("-Dfabric-api.data")
|
||||
vmArg("-Dfabric-api.datagen")
|
||||
vmArg("-Dfabric-api.datagen.output-dir=${common.file("src/generated/resources")}")
|
||||
vmArg("-Dfabric-api.datagen.modid=${"slug"()}")
|
||||
vmArg("-Dfabric-api.datagen.modid=${"modId"()}")
|
||||
|
||||
environmentVariable("DATAGEN", "TRUE")
|
||||
}
|
||||
|
||||
+11
@@ -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);
|
||||
}
|
||||
}
|
||||
+8
-2
@@ -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);
|
||||
}
|
||||
|
||||
+17
-3
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+2
-2
@@ -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());
|
||||
}
|
||||
}
|
||||
|
||||
+5
-5
@@ -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) {
|
||||
|
||||
+22
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
+47
@@ -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
|
||||
));
|
||||
});
|
||||
}
|
||||
}
|
||||
+13
@@ -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": [
|
||||
],
|
||||
|
||||
Reference in New Issue
Block a user