mirror of
https://github.com/wisplite/crystalline-sky.git
synced 2026-10-30 13:32:18 -05:00
Multiloader IV
client setup ported
This commit is contained in:
+11
@@ -1,14 +1,25 @@
|
||||
package io.github.slimeistdev.crystalline_sky.fabric;
|
||||
|
||||
import io.github.slimeistdev.crystalline_sky.CrystallineSkyClient;
|
||||
import io.github.slimeistdev.crystalline_sky.registry.CrystallineBlocks;
|
||||
import io.github.slimeistdev.crystalline_sky.registry.client.CrystallineRenderTypes;
|
||||
import net.fabricmc.api.ClientModInitializer;
|
||||
import net.fabricmc.api.EnvType;
|
||||
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;
|
||||
|
||||
@Environment(EnvType.CLIENT)
|
||||
public class CrystallineSkyClientImpl implements ClientModInitializer {
|
||||
@Override
|
||||
public void onInitializeClient() {
|
||||
CrystallineSkyClient.init();
|
||||
CrystallineSkyClient.registerKeybindings(KeyBindingHelper::registerKeyBinding);
|
||||
|
||||
BlockRenderLayerMap.INSTANCE.putBlock(CrystallineBlocks.SKY, CrystallineRenderTypes.SKY);
|
||||
BlockRenderLayerMap.INSTANCE.putBlock(CrystallineBlocks.WEEPING_SKY, CrystallineRenderTypes.SKY);
|
||||
|
||||
ClientTickEvents.END_CLIENT_TICK.register(CrystallineSkyClient::onEndTick);
|
||||
}
|
||||
}
|
||||
|
||||
+18
@@ -0,0 +1,18 @@
|
||||
package io.github.slimeistdev.crystalline_sky.fabric.datagen;
|
||||
|
||||
import io.github.slimeistdev.crystalline_sky.fabric.datagen.providers.CrystallineSkyBlockTagProvider;
|
||||
import io.github.slimeistdev.crystalline_sky.fabric.datagen.providers.CrystallineSkyLootProvider;
|
||||
import io.github.slimeistdev.crystalline_sky.fabric.datagen.providers.CrystallineSkyModelProvider;
|
||||
import net.fabricmc.fabric.api.datagen.v1.DataGeneratorEntrypoint;
|
||||
import net.fabricmc.fabric.api.datagen.v1.FabricDataGenerator;
|
||||
|
||||
public class CrystallineSkyDataGenerator implements DataGeneratorEntrypoint {
|
||||
@Override
|
||||
public void onInitializeDataGenerator(FabricDataGenerator gen) {
|
||||
FabricDataGenerator.Pack pack = gen.createPack();
|
||||
|
||||
pack.addProvider(CrystallineSkyModelProvider::new);
|
||||
pack.addProvider(CrystallineSkyLootProvider::new);
|
||||
pack.addProvider(CrystallineSkyBlockTagProvider::new);
|
||||
}
|
||||
}
|
||||
+31
@@ -0,0 +1,31 @@
|
||||
package io.github.slimeistdev.crystalline_sky.fabric.datagen.providers;
|
||||
|
||||
import io.github.slimeistdev.crystalline_sky.CrystallineSky;
|
||||
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.HolderLookup;
|
||||
import net.minecraft.tags.BlockTags;
|
||||
import net.minecraft.tags.TagKey;
|
||||
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
|
||||
public class CrystallineSkyBlockTagProvider extends FabricTagProvider.BlockTagProvider {
|
||||
public CrystallineSkyBlockTagProvider(FabricDataOutput output, CompletableFuture<HolderLookup.Provider> registriesFuture) {
|
||||
super(output, registriesFuture);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void addTags(HolderLookup.Provider wrapperLookup) {
|
||||
getOrCreateTagBuilder(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)
|
||||
.add(CrystallineBlocks.SKY)
|
||||
.add(CrystallineBlocks.WEEPING_SKY);
|
||||
}
|
||||
}
|
||||
+20
@@ -0,0 +1,20 @@
|
||||
package io.github.slimeistdev.crystalline_sky.fabric.datagen.providers;
|
||||
|
||||
import io.github.slimeistdev.crystalline_sky.registry.CrystallineBlocks;
|
||||
import net.fabricmc.fabric.api.datagen.v1.FabricDataOutput;
|
||||
import net.fabricmc.fabric.api.datagen.v1.provider.FabricBlockLootTableProvider;
|
||||
import net.minecraft.core.HolderLookup;
|
||||
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
|
||||
public class CrystallineSkyLootProvider extends FabricBlockLootTableProvider {
|
||||
public CrystallineSkyLootProvider(FabricDataOutput dataOutput, CompletableFuture<HolderLookup.Provider> registryLookup) {
|
||||
super(dataOutput, registryLookup);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void generate() {
|
||||
dropWhenSilkTouch(CrystallineBlocks.SKY);
|
||||
dropWhenSilkTouch(CrystallineBlocks.WEEPING_SKY);
|
||||
}
|
||||
}
|
||||
+104
@@ -0,0 +1,104 @@
|
||||
package io.github.slimeistdev.crystalline_sky.fabric.datagen.providers;
|
||||
|
||||
import com.google.gson.JsonArray;
|
||||
import com.google.gson.JsonObject;
|
||||
import io.github.slimeistdev.crystalline_sky.CrystallineSky;
|
||||
import io.github.slimeistdev.crystalline_sky.registry.CrystallineBlocks;
|
||||
import io.github.slimeistdev.crystalline_sky.registry.CrystallineItems;
|
||||
import net.fabricmc.fabric.api.datagen.v1.FabricDataOutput;
|
||||
import net.fabricmc.fabric.api.datagen.v1.provider.FabricModelProvider;
|
||||
import net.minecraft.data.models.BlockModelGenerators;
|
||||
import net.minecraft.data.models.ItemModelGenerators;
|
||||
import net.minecraft.data.models.blockstates.MultiVariantGenerator;
|
||||
import net.minecraft.data.models.blockstates.PropertyDispatch;
|
||||
import net.minecraft.data.models.blockstates.Variant;
|
||||
import net.minecraft.data.models.blockstates.VariantProperties;
|
||||
import net.minecraft.data.models.model.ModelLocationUtils;
|
||||
import net.minecraft.data.models.model.ModelTemplates;
|
||||
import net.minecraft.data.models.model.TextureMapping;
|
||||
import net.minecraft.data.models.model.TexturedModel;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import net.minecraft.world.item.Item;
|
||||
import net.minecraft.world.level.block.Block;
|
||||
import net.minecraft.world.level.block.state.properties.BlockStateProperties;
|
||||
|
||||
import java.util.Locale;
|
||||
|
||||
@SuppressWarnings("SameParameterValue")
|
||||
public class CrystallineSkyModelProvider extends FabricModelProvider {
|
||||
public CrystallineSkyModelProvider(FabricDataOutput output) {
|
||||
super(output);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void generateBlockStateModels(BlockModelGenerators gen) {
|
||||
registerSkyBlock(gen, CrystallineBlocks.SKY);
|
||||
registerSkyBlock(gen, CrystallineBlocks.WEEPING_SKY);
|
||||
registerSkyLightBlock(gen, CrystallineBlocks.SKY_LIGHT, CrystallineItems.SKY_LIGHT);
|
||||
|
||||
gen.createAirLikeBlock(CrystallineBlocks.WEEPING_SKY_LIGHT, CrystallineItems.WEEPING_SKY_LIGHT);
|
||||
gen.createSimpleFlatItemModel(CrystallineItems.WEEPING_SKY_LIGHT);
|
||||
}
|
||||
|
||||
private void registerSkyBlock(BlockModelGenerators gen, Block block) {
|
||||
gen.blockStateOutput.accept(BlockModelGenerators.createSimpleBlock(block, TexturedModel.CUBE.create(
|
||||
block,
|
||||
(id, json) -> {
|
||||
gen.modelOutput.accept(id, () -> {
|
||||
JsonObject root = json.get().getAsJsonObject();
|
||||
root.addProperty("render_type", CrystallineSky.id("sky").toString());
|
||||
return root;
|
||||
});
|
||||
}
|
||||
)));
|
||||
gen.createSimpleFlatItemModel(block);
|
||||
}
|
||||
|
||||
private void registerSkyLightBlock(BlockModelGenerators gen, Block block, Item item) {
|
||||
gen.skipAutoItemBlock(block);
|
||||
PropertyDispatch.C1<Integer> singleProperty = PropertyDispatch.property(BlockStateProperties.LEVEL);
|
||||
|
||||
for (int level = 0; level <= 15; level++) {
|
||||
String suffix = String.format(Locale.ROOT, "_%02d", level);
|
||||
ResourceLocation texture = TextureMapping.getItemTexture(item, suffix);
|
||||
|
||||
singleProperty.select(level, Variant.variant().with(
|
||||
VariantProperties.MODEL,
|
||||
ModelTemplates.PARTICLE_ONLY.createWithSuffix(block, suffix, TextureMapping.particle(texture), gen.modelOutput))
|
||||
);
|
||||
ModelTemplates.FLAT_ITEM.create(
|
||||
ModelLocationUtils.getModelLocation(item, suffix),
|
||||
TextureMapping.layer0(texture),
|
||||
gen.modelOutput
|
||||
);
|
||||
}
|
||||
|
||||
ModelTemplates.FLAT_ITEM.create(
|
||||
ModelLocationUtils.getModelLocation(item),
|
||||
TextureMapping.layer0(item),
|
||||
gen.modelOutput,
|
||||
(id, textures) -> {
|
||||
JsonObject base = ModelTemplates.FLAT_ITEM.createBaseTemplate(id, textures);
|
||||
var overrides = new JsonArray();
|
||||
for (int level = 0; level <= 15; level++) {
|
||||
JsonObject override = new JsonObject();
|
||||
|
||||
JsonObject predicate = new JsonObject();
|
||||
predicate.addProperty("level", level / 16f);
|
||||
override.add("predicate", predicate);
|
||||
|
||||
String suffix = String.format(Locale.ROOT, "_%02d", level);
|
||||
ResourceLocation model = TextureMapping.getItemTexture(item, suffix);
|
||||
override.addProperty("model", model.toString());
|
||||
|
||||
overrides.add(override);
|
||||
}
|
||||
base.add("overrides", overrides);
|
||||
return base;
|
||||
});
|
||||
gen.blockStateOutput.accept(MultiVariantGenerator.multiVariant(block).with(singleProperty));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void generateItemModels(ItemModelGenerators gen) {}
|
||||
}
|
||||
+25
@@ -0,0 +1,25 @@
|
||||
package io.github.slimeistdev.crystalline_sky.fabric.mixin.client;
|
||||
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import io.github.slimeistdev.crystalline_sky.mixin_ducks.client.RenderType_Duck;
|
||||
import net.minecraft.client.renderer.RenderType;
|
||||
import org.spongepowered.asm.mixin.Final;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.Mutable;
|
||||
import org.spongepowered.asm.mixin.Shadow;
|
||||
|
||||
@Mixin(RenderType.class)
|
||||
public class RenderTypeMixin implements RenderType_Duck {
|
||||
@Shadow
|
||||
@Final
|
||||
@Mutable
|
||||
private static ImmutableList<RenderType> CHUNK_BUFFER_LAYERS;
|
||||
|
||||
@Override
|
||||
public void crystalline_sky$markAsBlockLayer() {
|
||||
CHUNK_BUFFER_LAYERS = ImmutableList.<RenderType>builder()
|
||||
.addAll(CHUNK_BUFFER_LAYERS)
|
||||
.add((RenderType) (Object) this)
|
||||
.build();
|
||||
}
|
||||
}
|
||||
+14
@@ -0,0 +1,14 @@
|
||||
package io.github.slimeistdev.crystalline_sky.multiloader.fabric;
|
||||
|
||||
import io.github.slimeistdev.crystalline_sky.annotation.multiloader.ImplClass;
|
||||
import net.minecraft.client.renderer.item.ClampedItemPropertyFunction;
|
||||
import net.minecraft.client.renderer.item.ItemProperties;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import net.minecraft.world.item.Item;
|
||||
|
||||
@ImplClass
|
||||
public class ClientPlatformHelperImpl {
|
||||
public static void registerItemProperty(Item item, ResourceLocation name, ClampedItemPropertyFunction property) {
|
||||
ItemProperties.register(item, name, property);
|
||||
}
|
||||
}
|
||||
@@ -10,6 +10,7 @@
|
||||
"mixins": [
|
||||
],
|
||||
"client": [
|
||||
"client.RenderTypeMixin"
|
||||
],
|
||||
"server": [
|
||||
],
|
||||
|
||||
@@ -36,7 +36,7 @@
|
||||
"io.github.slimeistdev.crystalline_sky.fabric.CrystallineSkyClientImpl"
|
||||
],
|
||||
"fabric-datagen": [
|
||||
"io.github.slimeistdev.crystalline_sky.datagen.CrystallineSkyDataGenerator"
|
||||
"io.github.slimeistdev.crystalline_sky.fabric.datagen.CrystallineSkyDataGenerator"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user