mirror of
https://github.com/wisplite/crystalline-sky.git
synced 2026-10-30 13:32:18 -05:00
Skybox II
better fabric model loading, clean up shaders
This commit is contained in:
+1
-1
@@ -2,7 +2,7 @@ package io.github.slimeistdev.crystalline_sky.fabric;
|
||||
|
||||
import io.github.slimeistdev.crystalline_sky.CrystallineSkyClient;
|
||||
import io.github.slimeistdev.crystalline_sky.fabric.events.RegisterMaterialAtlasesEvent;
|
||||
import io.github.slimeistdev.crystalline_sky.fabric.render_tmp.SkyboxModelLoadingPlugin;
|
||||
import io.github.slimeistdev.crystalline_sky.fabric.skybox_model.SkyboxModelLoadingPlugin;
|
||||
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.CrystallineAtlases;
|
||||
|
||||
+13
-2
@@ -16,8 +16,10 @@ 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.ModelTemplate;
|
||||
import net.minecraft.data.models.model.ModelTemplates;
|
||||
import net.minecraft.data.models.model.TextureMapping;
|
||||
import net.minecraft.data.models.model.TextureSlot;
|
||||
import net.minecraft.data.models.model.TexturedModel;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import net.minecraft.world.item.Item;
|
||||
@@ -25,7 +27,9 @@ import net.minecraft.world.level.block.Block;
|
||||
import net.minecraft.world.level.block.state.properties.BlockStateProperties;
|
||||
|
||||
import java.util.Locale;
|
||||
import java.util.Optional;
|
||||
|
||||
import static net.minecraft.data.models.model.TextureMapping.getBlockTexture;
|
||||
import static net.minecraft.data.models.model.TexturedModel.createDefault;
|
||||
|
||||
@SuppressWarnings("SameParameterValue")
|
||||
@@ -35,9 +39,16 @@ public class CrystallineSkyModelProvider extends FabricModelProvider {
|
||||
return resourceLocation.withPrefix("crystalline_sky_skybox/");
|
||||
}
|
||||
|
||||
private static ModelTemplate create(String blockModelLocation, TextureSlot... requiredSlots) {
|
||||
return new ModelTemplate(Optional.of(ResourceLocation.withDefaultNamespace("block/" + blockModelLocation)), Optional.empty(), requiredSlots);
|
||||
}
|
||||
|
||||
private static final ModelTemplate CUBE_ALL_PARTICLE = create("cube_all", TextureSlot.ALL, TextureSlot.PARTICLE);
|
||||
|
||||
private static final TexturedModel.Provider SKYBOX_CUBE = createDefault(
|
||||
block -> TextureMapping.cube(getSkyboxBlockTexture(block)),
|
||||
ModelTemplates.CUBE_ALL
|
||||
block -> TextureMapping.cube(getSkyboxBlockTexture(block))
|
||||
.put(TextureSlot.PARTICLE, getBlockTexture(block)),
|
||||
CUBE_ALL_PARTICLE
|
||||
);
|
||||
|
||||
public CrystallineSkyModelProvider(FabricDataOutput output) {
|
||||
|
||||
+2
-21
@@ -1,4 +1,4 @@
|
||||
package io.github.slimeistdev.crystalline_sky.fabric.render_tmp;
|
||||
package io.github.slimeistdev.crystalline_sky.fabric.skybox_model;
|
||||
|
||||
import net.fabricmc.fabric.api.renderer.v1.Renderer;
|
||||
import net.fabricmc.fabric.api.renderer.v1.RendererAccess;
|
||||
@@ -61,25 +61,6 @@ public class SkyboxBakedModel extends ForwardingBakedModel {
|
||||
// copied from net.fabricmc.fabric.impl.renderer.VanillaModelEncoder.emitBlockQuads
|
||||
@Override
|
||||
public void emitBlockQuads(BlockAndTintGetter blockView, BlockState state, BlockPos pos, Supplier<RandomSource> randomSupplier, RenderContext context) {
|
||||
/*TextureAtlasSprite sprite = getParticleIcon();
|
||||
float u0 = sprite.getU0();
|
||||
float v0 = sprite.getV0();
|
||||
int u1 = (int) (sprite.getU1() * 0xffff);
|
||||
int v1 = (int) (sprite.getV1() * 0xffff);
|
||||
|
||||
int color = (u1 << 16) | v1;
|
||||
var emitter = context.getEmitter()
|
||||
.square(Direction.UP, 0, 0, 1, 1, 0)
|
||||
.material(FULLBRIGHT_MATERIAL);
|
||||
for (int i = 0; i < 4; i++) {
|
||||
emitter
|
||||
.color(i, color)
|
||||
.lightmap(i, LightTexture.FULL_BRIGHT)
|
||||
.normal(i, 0, 1, 0)
|
||||
.uv(i, u0, v0);
|
||||
}
|
||||
emitter.emit();*/
|
||||
|
||||
QuadEmitter emitter = context.getEmitter();
|
||||
|
||||
for (int i = 0; i <= ModelHelper.NULL_FACE_ID; i++) {
|
||||
@@ -93,7 +74,7 @@ public class SkyboxBakedModel extends ForwardingBakedModel {
|
||||
final List<BakedQuad> quads = getQuads(state, cullFace, randomSupplier.get());
|
||||
|
||||
for (final BakedQuad q : quads) {
|
||||
emitter.fromVanilla(q, FULL_BRIGHT_MATERIAL, cullFace); // fixme view bobbing breaks projection, use TextureMatrix to pass a view projection matrix along :)
|
||||
emitter.fromVanilla(q, FULL_BRIGHT_MATERIAL, cullFace);
|
||||
TextureAtlasSprite sprite = q.getSprite();
|
||||
float u0 = sprite.getU0();
|
||||
float v0 = sprite.getV0();
|
||||
+5
-11
@@ -1,8 +1,7 @@
|
||||
package io.github.slimeistdev.crystalline_sky.fabric.render_tmp;
|
||||
package io.github.slimeistdev.crystalline_sky.fabric.skybox_model;
|
||||
|
||||
import io.github.slimeistdev.crystalline_sky.CrystallineSky;
|
||||
import io.github.slimeistdev.crystalline_sky.mixin_ducks.client.SimpleBakedModel_Duck;
|
||||
import net.fabricmc.fabric.api.client.model.loading.v1.ModelLoadingPlugin;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
|
||||
public class SkyboxModelLoadingPlugin implements ModelLoadingPlugin {
|
||||
private SkyboxModelLoadingPlugin() {}
|
||||
@@ -10,15 +9,10 @@ public class SkyboxModelLoadingPlugin implements ModelLoadingPlugin {
|
||||
@Override
|
||||
public void onInitializeModelLoader(Context pluginContext) {
|
||||
pluginContext.modifyModelAfterBake().register((model, ctx) -> {
|
||||
if (model == null) return null;
|
||||
if (model instanceof SimpleBakedModel_Duck duck && duck.crystalline_sky$isSkybox())
|
||||
return new SkyboxBakedModel(model);
|
||||
|
||||
ResourceLocation id = ctx.resourceId();
|
||||
if (id == null) {
|
||||
id = ctx.topLevelId().id();
|
||||
}
|
||||
if (!id.equals(CrystallineSky.id("block/skybox_test"))) return model;
|
||||
|
||||
return new SkyboxBakedModel(model);
|
||||
return model;
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user