mirror of
https://github.com/wisplite/crystalline-sky.git
synced 2026-10-30 13:32:18 -05:00
Porting I
This commit is contained in:
@@ -1,12 +1,12 @@
|
||||
package io.github.slimeistdev.crystalline_sky;
|
||||
|
||||
import io.github.slimeistdev.crystalline_sky.extenders_cove.BlockRenderLayerExt;
|
||||
import io.github.slimeistdev.crystalline_sky.mixin_ducks.client.DebugRenderer_Duck;
|
||||
import io.github.slimeistdev.crystalline_sky.registry.CrystallineBlocks;
|
||||
import io.github.slimeistdev.crystalline_sky.registry.client.CrystallineRenderLayers;
|
||||
import net.fabricmc.api.ClientModInitializer;
|
||||
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.fabricmc.fabric.api.client.rendering.v1.BlockRenderLayerMap;
|
||||
import net.minecraft.client.option.KeyBinding;
|
||||
import net.minecraft.client.util.InputUtil;
|
||||
import net.minecraft.screen.ScreenTexts;
|
||||
@@ -17,8 +17,8 @@ import org.lwjgl.glfw.GLFW;
|
||||
public class CrystallineSkyClient implements ClientModInitializer {
|
||||
@Override
|
||||
public void onInitializeClient() {
|
||||
BlockRenderLayerMap.putBlock(CrystallineBlocks.SKY, BlockRenderLayerExt.CRYSTALLINE_SKY_SKY);
|
||||
BlockRenderLayerMap.putBlock(CrystallineBlocks.WEEPING_SKY, BlockRenderLayerExt.CRYSTALLINE_SKY_SKY);
|
||||
BlockRenderLayerMap.INSTANCE.putBlock(CrystallineBlocks.SKY, CrystallineRenderLayers.SKY);
|
||||
BlockRenderLayerMap.INSTANCE.putBlock(CrystallineBlocks.WEEPING_SKY, CrystallineRenderLayers.SKY);
|
||||
|
||||
var weepingSkyKeybind = KeyBindingHelper.registerKeyBinding(new KeyBinding(
|
||||
"crystalline_sky.key.toggle_weeping_sky_debug",
|
||||
|
||||
+24
-22
@@ -1,17 +1,18 @@
|
||||
package io.github.slimeistdev.crystalline_sky.compat.sodium;
|
||||
|
||||
import com.mojang.blaze3d.opengl.GlStateManager;
|
||||
import com.mojang.blaze3d.textures.GpuTextureView;
|
||||
import com.mojang.blaze3d.platform.GlStateManager;
|
||||
import io.github.slimeistdev.crystalline_sky.registry.CrystallineItems;
|
||||
import net.caffeinemc.mods.sodium.client.gl.shader.uniform.GlUniformFloat3v;
|
||||
import net.caffeinemc.mods.sodium.client.gl.shader.uniform.GlUniformFloat4v;
|
||||
import net.caffeinemc.mods.sodium.client.gl.shader.uniform.GlUniformInt;
|
||||
import net.caffeinemc.mods.sodium.client.gl.shader.uniform.GlUniformMatrix4f;
|
||||
import net.caffeinemc.mods.sodium.client.render.chunk.shader.*;
|
||||
import net.caffeinemc.mods.sodium.client.render.chunk.terrain.TerrainRenderPass;
|
||||
import net.caffeinemc.mods.sodium.client.util.FogParameters;
|
||||
import net.caffeinemc.mods.sodium.client.render.chunk.shader.ChunkShaderFogComponent;
|
||||
import net.caffeinemc.mods.sodium.client.render.chunk.shader.ChunkShaderInterface;
|
||||
import net.caffeinemc.mods.sodium.client.render.chunk.shader.ChunkShaderOptions;
|
||||
import net.caffeinemc.mods.sodium.client.render.chunk.shader.ChunkShaderTextureSlot;
|
||||
import net.caffeinemc.mods.sodium.client.render.chunk.shader.ShaderBindingContext;
|
||||
import net.caffeinemc.mods.sodium.client.util.TextureUtil;
|
||||
import net.minecraft.client.MinecraftClient;
|
||||
import net.minecraft.client.texture.GlTexture;
|
||||
import net.minecraft.util.math.MathHelper;
|
||||
import org.joml.Matrix4fc;
|
||||
import org.lwjgl.opengl.GL32C;
|
||||
@@ -31,6 +32,8 @@ public class SkyShaderInterface implements ChunkShaderInterface {
|
||||
// The fog shader component used by this program in order to set up the appropriate GL state
|
||||
private final ChunkShaderFogComponent fogShader;
|
||||
|
||||
private final float[] colorModulator = new float[] {1.0f, 1.0f, 1.0f, 1.0f};
|
||||
|
||||
public SkyShaderInterface(ShaderBindingContext context, ChunkShaderOptions options) {
|
||||
this.uniformModelViewMatrix = context.bindUniform("u_ModelViewMatrix", GlUniformMatrix4f::new);
|
||||
this.uniformProjectionMatrix = context.bindUniform("u_ProjectionMatrix", GlUniformMatrix4f::new);
|
||||
@@ -43,9 +46,9 @@ public class SkyShaderInterface implements ChunkShaderInterface {
|
||||
this.fogShader = options.fog().getFactory().apply(context);
|
||||
}
|
||||
|
||||
@Override // the shader interface should not modify pipeline state
|
||||
public void setupState(TerrainRenderPass pass, FogParameters parameters) {
|
||||
this.bindTexture(ChunkShaderTextureSlot.BLOCK, pass.getAtlas());
|
||||
@Override
|
||||
public void setupState() {
|
||||
this.bindTexture(ChunkShaderTextureSlot.BLOCK, TextureUtil.getBlockTextureId());
|
||||
|
||||
MinecraftClient client = MinecraftClient.getInstance();
|
||||
if (client.world != null
|
||||
@@ -55,17 +58,18 @@ public class SkyShaderInterface implements ChunkShaderInterface {
|
||||
|| client.player.getMainHandStack().isOf(CrystallineItems.WEEPING_SKY)
|
||||
|| client.player.getOffHandStack().isOf(CrystallineItems.WEEPING_SKY))) {
|
||||
|
||||
float f = client.world.getTime() + client.getRenderTickCounter().getTickProgress(true);
|
||||
float f = client.world.getTime() + client.getRenderTickCounter().getTickDelta(true);
|
||||
float alpha = (MathHelper.sin(f / 10.0f) + 1.0f) / 2.0f;
|
||||
// remap alpha from [0, 1] to [0, 0.75]
|
||||
float maxAlpha = 1.0f - 0.25f;
|
||||
alpha = alpha * maxAlpha;
|
||||
this.uniformColorModulator.set(1.0f, 1.0f, 1.0f, alpha);
|
||||
colorModulator[3] = alpha;
|
||||
} else {
|
||||
this.uniformColorModulator.set(1.0f, 1.0f, 1.0f, 1.0f);
|
||||
colorModulator[3] = 1.0f;
|
||||
}
|
||||
this.uniformColorModulator.set(colorModulator);
|
||||
|
||||
this.fogShader.setup(parameters);
|
||||
this.fogShader.setup();
|
||||
}
|
||||
|
||||
@Override // the shader interface should not modify pipeline state
|
||||
@@ -73,16 +77,14 @@ public class SkyShaderInterface implements ChunkShaderInterface {
|
||||
// This is used by alternate implementations.
|
||||
}
|
||||
|
||||
@Deprecated(forRemoval = true) // should be handled properly in GFX instead.
|
||||
private void bindTexture(ChunkShaderTextureSlot slot, GpuTextureView textureView) {
|
||||
GlTexture tex = (GlTexture) textureView.texture();
|
||||
/** @deprecated */
|
||||
@Deprecated(
|
||||
forRemoval = true
|
||||
)
|
||||
private void bindTexture(ChunkShaderTextureSlot slot, int textureId) {
|
||||
GlStateManager._activeTexture(GL32C.GL_TEXTURE0 + slot.ordinal());
|
||||
GlStateManager._bindTexture(tex.getGlId());
|
||||
GlStateManager._texParameter(GL32C.GL_TEXTURE_2D, 33084, textureView.baseMipLevel());
|
||||
GlStateManager._texParameter(GL32C.GL_TEXTURE_2D, 33085, textureView.baseMipLevel() + textureView.mipLevels() - 1);
|
||||
tex.checkDirty(GL32C.GL_TEXTURE_2D);
|
||||
|
||||
var uniform = this.uniformTextures.get(slot);
|
||||
GlStateManager._bindTexture(textureId);
|
||||
GlUniformInt uniform = this.uniformTextures.get(slot);
|
||||
uniform.setInt(slot.ordinal());
|
||||
}
|
||||
|
||||
|
||||
+12
-12
@@ -1,7 +1,11 @@
|
||||
package io.github.slimeistdev.crystalline_sky.content.blocks;
|
||||
|
||||
import io.github.slimeistdev.crystalline_sky.registry.CrystallineItems;
|
||||
import net.minecraft.block.*;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.block.BlockRenderType;
|
||||
import net.minecraft.block.BlockState;
|
||||
import net.minecraft.block.ShapeContext;
|
||||
import net.minecraft.block.Waterloggable;
|
||||
import net.minecraft.fluid.FluidState;
|
||||
import net.minecraft.fluid.Fluids;
|
||||
import net.minecraft.state.StateManager;
|
||||
@@ -9,12 +13,10 @@ import net.minecraft.state.property.BooleanProperty;
|
||||
import net.minecraft.state.property.Properties;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.util.math.Direction;
|
||||
import net.minecraft.util.math.random.Random;
|
||||
import net.minecraft.util.shape.VoxelShape;
|
||||
import net.minecraft.util.shape.VoxelShapes;
|
||||
import net.minecraft.world.BlockView;
|
||||
import net.minecraft.world.WorldView;
|
||||
import net.minecraft.world.tick.ScheduledTickView;
|
||||
import net.minecraft.world.WorldAccess;
|
||||
|
||||
public class WeepingSkyLightBlock extends Block implements Waterloggable {
|
||||
public static final BooleanProperty WATERLOGGED = Properties.WATERLOGGED;
|
||||
@@ -35,7 +37,7 @@ public class WeepingSkyLightBlock extends Block implements Waterloggable {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean isTransparent(BlockState state) {
|
||||
protected boolean isTransparent(BlockState state, BlockView world, BlockPos pos) {
|
||||
return state.getFluidState().isEmpty();
|
||||
}
|
||||
|
||||
@@ -52,19 +54,17 @@ public class WeepingSkyLightBlock extends Block implements Waterloggable {
|
||||
@Override
|
||||
protected BlockState getStateForNeighborUpdate(
|
||||
BlockState state,
|
||||
WorldView world,
|
||||
ScheduledTickView tickView,
|
||||
BlockPos pos,
|
||||
Direction direction,
|
||||
BlockPos neighborPos,
|
||||
BlockState neighborState,
|
||||
Random random
|
||||
WorldAccess world,
|
||||
BlockPos pos,
|
||||
BlockPos neighborPos
|
||||
) {
|
||||
if (state.get(WATERLOGGED)) {
|
||||
tickView.scheduleFluidTick(pos, Fluids.WATER, Fluids.WATER.getTickRate(world));
|
||||
world.scheduleFluidTick(pos, Fluids.WATER, Fluids.WATER.getTickRate(world));
|
||||
}
|
||||
|
||||
return super.getStateForNeighborUpdate(state, world, tickView, pos, direction, neighborPos, neighborState, random);
|
||||
return super.getStateForNeighborUpdate(state, direction, neighborState, world, pos, neighborPos);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+3
-2
@@ -8,6 +8,7 @@ import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.item.ItemUsageContext;
|
||||
import net.minecraft.util.ActionResult;
|
||||
import net.minecraft.util.Hand;
|
||||
import net.minecraft.util.TypedActionResult;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.util.math.ColumnPos;
|
||||
import net.minecraft.world.World;
|
||||
@@ -32,13 +33,13 @@ public class WeepingSkyBlockItem extends BlockItem {
|
||||
}
|
||||
|
||||
@Override
|
||||
public ActionResult use(World world, PlayerEntity user, Hand hand) {
|
||||
public TypedActionResult<ItemStack> use(World world, PlayerEntity user, Hand hand) {
|
||||
ItemStack stack = user.getStackInHand(hand);
|
||||
if (stack.get(CrystallineDataComponentTypes.WEEPING_SKY_DEBUG_COLUMN_TOOL) != null) {
|
||||
if (world.isClient) {
|
||||
WeepingSkyBlockItemClient.setSelectedColumn(null);
|
||||
}
|
||||
return ActionResult.SUCCESS;
|
||||
return TypedActionResult.success(stack);
|
||||
}
|
||||
|
||||
return super.use(world, user, hand);
|
||||
|
||||
+2
-2
@@ -18,13 +18,13 @@ public class CrystallineSkyBlockTagProvider extends FabricTagProvider.BlockTagPr
|
||||
|
||||
@Override
|
||||
protected void configure(RegistryWrapper.WrapperLookup wrapperLookup) {
|
||||
valueLookupBuilder(TagKey.of(RegistryKeys.BLOCK, CrystallineSky.id("sky_light_emitters")))
|
||||
getOrCreateTagBuilder(TagKey.of(RegistryKeys.BLOCK, CrystallineSky.id("sky_light_emitters")))
|
||||
.add(CrystallineBlocks.SKY)
|
||||
.add(CrystallineBlocks.SKY_LIGHT)
|
||||
.add(CrystallineBlocks.WEEPING_SKY)
|
||||
.add(CrystallineBlocks.WEEPING_SKY_LIGHT);
|
||||
|
||||
valueLookupBuilder(BlockTags.CRYSTAL_SOUND_BLOCKS)
|
||||
getOrCreateTagBuilder(BlockTags.CRYSTAL_SOUND_BLOCKS)
|
||||
.add(CrystallineBlocks.SKY)
|
||||
.add(CrystallineBlocks.WEEPING_SKY);
|
||||
}
|
||||
|
||||
+20
-18
@@ -2,22 +2,25 @@ package io.github.slimeistdev.crystalline_sky.datagen.providers;
|
||||
|
||||
import io.github.slimeistdev.crystalline_sky.registry.CrystallineBlocks;
|
||||
import io.github.slimeistdev.crystalline_sky.registry.CrystallineItems;
|
||||
import net.fabricmc.fabric.api.client.datagen.v1.provider.FabricModelProvider;
|
||||
import net.fabricmc.fabric.api.datagen.v1.FabricDataOutput;
|
||||
import net.fabricmc.fabric.api.datagen.v1.provider.FabricModelProvider;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.block.LightBlock;
|
||||
import net.minecraft.client.data.*;
|
||||
import net.minecraft.client.render.item.model.ItemModel;
|
||||
import net.minecraft.client.render.model.json.WeightedVariant;
|
||||
import net.minecraft.data.client.BlockStateModelGenerator;
|
||||
import net.minecraft.data.client.BlockStateVariant;
|
||||
import net.minecraft.data.client.BlockStateVariantMap;
|
||||
import net.minecraft.data.client.ItemModelGenerator;
|
||||
import net.minecraft.data.client.ModelIds;
|
||||
import net.minecraft.data.client.Models;
|
||||
import net.minecraft.data.client.TextureMap;
|
||||
import net.minecraft.data.client.VariantSettings;
|
||||
import net.minecraft.data.client.VariantsBlockStateSupplier;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.state.property.Properties;
|
||||
import net.minecraft.util.Identifier;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
|
||||
import static net.minecraft.client.data.BlockStateModelGenerator.createWeightedVariant;
|
||||
//import static net.minecraft.client.data.BlockStateModelGenerator.createWeightedVariant;
|
||||
|
||||
@SuppressWarnings("SameParameterValue")
|
||||
public class CrystallineSkyModelProvider extends FabricModelProvider {
|
||||
@@ -41,26 +44,25 @@ public class CrystallineSkyModelProvider extends FabricModelProvider {
|
||||
}
|
||||
|
||||
private void registerSkyLightBlock(BlockStateModelGenerator gen, Block block, Item item) {
|
||||
ItemModel.Unbaked fallback = ItemModels.basic(gen.uploadItemModel(item));
|
||||
Map<Integer, ItemModel.Unbaked> itemModels = new HashMap<>(16);
|
||||
BlockStateVariantMap.SingleProperty<WeightedVariant, Integer> levelProp = BlockStateVariantMap.models(Properties.LEVEL_15);
|
||||
BlockStateVariantMap.SingleProperty<Integer> singleProperty = BlockStateVariantMap.create(Properties.LEVEL_15);
|
||||
|
||||
for (int level = 0; level <= 15; level++) {
|
||||
String suffix = String.format(Locale.ROOT, "_%02d", level);
|
||||
Identifier texture = TextureMap.getSubId(item, suffix);
|
||||
|
||||
levelProp.register(level, createWeightedVariant(Models.PARTICLE.upload(block, suffix, TextureMap.particle(texture), gen.modelCollector)));
|
||||
|
||||
ItemModel.Unbaked levelItemModel = ItemModels.basic(Models.GENERATED.upload(
|
||||
singleProperty.register(level, BlockStateVariant.create().put(
|
||||
VariantSettings.MODEL,
|
||||
Models.PARTICLE.upload(block, suffix, TextureMap.particle(texture), gen.modelCollector))
|
||||
);
|
||||
Models.GENERATED.upload(
|
||||
ModelIds.getItemSubModelId(item, suffix),
|
||||
TextureMap.layer0(texture),
|
||||
gen.modelCollector
|
||||
));
|
||||
itemModels.put(level, levelItemModel);
|
||||
);
|
||||
}
|
||||
|
||||
gen.itemModelOutput.accept(item, ItemModels.select(LightBlock.LEVEL_15, fallback, itemModels));
|
||||
gen.blockStateCollector.accept(VariantsBlockModelDefinitionCreator.of(block).with(levelProp));
|
||||
// TODO generate root-level item model itself
|
||||
gen.blockStateCollector.accept(VariantsBlockStateSupplier.create(block).coordinate(singleProperty));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
-11
@@ -1,11 +0,0 @@
|
||||
package io.github.slimeistdev.crystalline_sky.extenders_cove;
|
||||
|
||||
import com.chocohead.mm.api.ClassTinkerers;
|
||||
import net.fabricmc.api.EnvType;
|
||||
import net.fabricmc.api.Environment;
|
||||
import net.minecraft.client.render.BlockRenderLayer;
|
||||
|
||||
public class BlockRenderLayerExt {
|
||||
@Environment(EnvType.CLIENT)
|
||||
public static final BlockRenderLayer CRYSTALLINE_SKY_SKY = ClassTinkerers.getEnum(BlockRenderLayer.class, "CRYSTALLINE_SKY_SKY");
|
||||
}
|
||||
-8
@@ -1,8 +0,0 @@
|
||||
package io.github.slimeistdev.crystalline_sky.extenders_cove;
|
||||
|
||||
import com.chocohead.mm.api.ClassTinkerers;
|
||||
import net.minecraft.client.render.BlockRenderLayerGroup;
|
||||
|
||||
public class BlockRenderLayerGroupExt {
|
||||
public static final BlockRenderLayerGroup CRYSTALLINE_SKY_SKY = ClassTinkerers.getEnum(BlockRenderLayerGroup.class, "CRYSTALLINE_SKY_SKY");
|
||||
}
|
||||
-16
@@ -1,16 +0,0 @@
|
||||
package io.github.slimeistdev.crystalline_sky.extenders_cove;
|
||||
|
||||
import net.fabricmc.api.EnvType;
|
||||
import net.fabricmc.loader.api.FabricLoader;
|
||||
|
||||
import java.util.function.Supplier;
|
||||
|
||||
public class CrystallineSkyEarlyRiser implements Runnable {
|
||||
@Override
|
||||
@SuppressWarnings({"Convert2MethodRef", "TrivialFunctionalExpressionUsage"})
|
||||
public void run() {
|
||||
if (FabricLoader.getInstance().getEnvironmentType() == EnvType.CLIENT) {
|
||||
((Supplier<Runnable>) (() -> () -> CrystallineSkyEarlyRiserClient.runClient())).get().run();
|
||||
}
|
||||
}
|
||||
}
|
||||
-38
@@ -1,38 +0,0 @@
|
||||
package io.github.slimeistdev.crystalline_sky.extenders_cove;
|
||||
|
||||
import com.chocohead.mm.api.ClassTinkerers;
|
||||
import io.github.slimeistdev.crystalline_sky.registry.client.CrystallineRenderPipelines;
|
||||
import net.fabricmc.api.EnvType;
|
||||
import net.fabricmc.api.Environment;
|
||||
import net.fabricmc.loader.api.FabricLoader;
|
||||
import net.fabricmc.loader.api.MappingResolver;
|
||||
import net.minecraft.client.render.BlockRenderLayer;
|
||||
|
||||
class CrystallineSkyEarlyRiserClient {
|
||||
@Environment(EnvType.CLIENT)
|
||||
static void runClient() {
|
||||
MappingResolver remapper = FabricLoader.getInstance().getMappingResolver();
|
||||
|
||||
// net.minecraft.client.render.BlockRenderLayer
|
||||
String blockRenderLayer = remapper.mapClassName("intermediary", "net.minecraft.class_11515");
|
||||
|
||||
// RenderPipeline is not obfuscated
|
||||
ClassTinkerers.enumBuilder(blockRenderLayer, "Lcom/mojang/blaze3d/pipeline/RenderPipeline;", "I", "Z", "Z")
|
||||
.addEnum("CRYSTALLINE_SKY_SKY", () -> new Object[]{
|
||||
CrystallineRenderPipelines.SKY_PIPELINE,
|
||||
1536,
|
||||
false,
|
||||
false
|
||||
})
|
||||
.build();
|
||||
|
||||
// net.minecraft.client.render.BlockRenderLayerGroup
|
||||
String blockRenderLayerGroup = remapper.mapClassName("intermediary", "net.minecraft.class_11531");
|
||||
|
||||
ClassTinkerers.enumBuilder(blockRenderLayerGroup, "[L"+blockRenderLayer+";")
|
||||
.addEnum("CRYSTALLINE_SKY_SKY", () -> new Object[] {
|
||||
new BlockRenderLayer[] {BlockRenderLayerExt.CRYSTALLINE_SKY_SKY}
|
||||
})
|
||||
.build();
|
||||
}
|
||||
}
|
||||
+7
-7
@@ -54,7 +54,7 @@ public class MutableWeepingScanner implements WeepingStorage.WeepingScanner {
|
||||
|
||||
while (bottomPos.getY() >= minY) {
|
||||
BlockState bottomState = blockView.getBlockState(bottomPos);
|
||||
if (faceBlocksLight(topState, bottomState)) {
|
||||
if (faceBlocksLight(blockView, topState, bottomState, topPos, bottomPos)) {
|
||||
return transformOutputY(bottomPos.getY());
|
||||
}
|
||||
|
||||
@@ -85,7 +85,7 @@ public class MutableWeepingScanner implements WeepingStorage.WeepingScanner {
|
||||
return transformOutputY(bottomPos.getY());
|
||||
}
|
||||
|
||||
if (faceBlocksLight(topState, bottomState)) {
|
||||
if (faceBlocksLight(blockView, topState, bottomState, topPos, bottomPos)) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
@@ -107,15 +107,15 @@ public class MutableWeepingScanner implements WeepingStorage.WeepingScanner {
|
||||
BlockState upper = blockView.getBlockState(reusablePos1);
|
||||
BlockState lower = blockView.getBlockState(reusablePos2);
|
||||
|
||||
return faceBlocksLight(upper, lower);
|
||||
return faceBlocksLight(blockView, upper, lower, reusablePos1, reusablePos2);
|
||||
}
|
||||
|
||||
private static boolean faceBlocksLight(BlockState upper, BlockState lower) {
|
||||
if (lower.getOpacity() != 0) {
|
||||
private static boolean faceBlocksLight(BlockView world, BlockState upper, BlockState lower, BlockPos upperPos, BlockPos lowerPos) {
|
||||
if (lower.getOpacity(world, lowerPos) != 0) {
|
||||
return true;
|
||||
} else {
|
||||
VoxelShape voxelShape = ChunkLightProvider.getOpaqueShape(upper, Direction.DOWN);
|
||||
VoxelShape voxelShape2 = ChunkLightProvider.getOpaqueShape(lower, Direction.UP);
|
||||
VoxelShape voxelShape = ChunkLightProvider.getOpaqueShape(world, upperPos, upper, Direction.DOWN);
|
||||
VoxelShape voxelShape2 = ChunkLightProvider.getOpaqueShape(world, lowerPos, lower, Direction.UP);
|
||||
return VoxelShapes.unionCoversFullCube(voxelShape, voxelShape2);
|
||||
}
|
||||
}
|
||||
|
||||
-28
@@ -1,28 +0,0 @@
|
||||
package io.github.slimeistdev.crystalline_sky.mixin.client;
|
||||
|
||||
import com.mojang.blaze3d.textures.GpuTextureView;
|
||||
import io.github.slimeistdev.crystalline_sky.extenders_cove.BlockRenderLayerExt;
|
||||
import io.github.slimeistdev.crystalline_sky.mixin_ducks.client.DefaultFramebufferSet_Duck;
|
||||
import net.minecraft.client.MinecraftClient;
|
||||
import net.minecraft.client.gl.Framebuffer;
|
||||
import net.minecraft.client.render.BlockRenderLayer;
|
||||
import net.minecraft.client.render.DefaultFramebufferSet;
|
||||
import net.minecraft.client.util.Handle;
|
||||
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;
|
||||
|
||||
@Mixin(BlockRenderLayer.class)
|
||||
public class BlockRenderLayerMixin {
|
||||
@Inject(method = "getTextureView", at = @At("HEAD"), cancellable = true)
|
||||
private void shatterTheSky(CallbackInfoReturnable<GpuTextureView> cir) {
|
||||
if (((Object) this) == BlockRenderLayerExt.CRYSTALLINE_SKY_SKY) {
|
||||
MinecraftClient mc = MinecraftClient.getInstance();
|
||||
DefaultFramebufferSet framebuffers = ((WorldRendererAccessor) mc.worldRenderer).crystalline_sky$getFramebufferSet();
|
||||
Handle<Framebuffer> skyFramebuffer = ((DefaultFramebufferSet_Duck) framebuffers).crystalline_sky$getSkyFramebuffer();
|
||||
|
||||
cir.setReturnValue(skyFramebuffer.get().getColorAttachmentView());
|
||||
}
|
||||
}
|
||||
}
|
||||
+1
-2
@@ -3,7 +3,6 @@ package io.github.slimeistdev.crystalline_sky.mixin.client;
|
||||
import io.github.slimeistdev.crystalline_sky.infrastructure.client.WeepingSkyDebugRenderer;
|
||||
import io.github.slimeistdev.crystalline_sky.mixin_ducks.client.DebugRenderer_Duck;
|
||||
import net.minecraft.client.MinecraftClient;
|
||||
import net.minecraft.client.render.Frustum;
|
||||
import net.minecraft.client.render.VertexConsumerProvider;
|
||||
import net.minecraft.client.render.debug.DebugRenderer;
|
||||
import net.minecraft.client.util.math.MatrixStack;
|
||||
@@ -42,7 +41,7 @@ public class DebugRendererMixin implements DebugRenderer_Duck {
|
||||
}
|
||||
|
||||
@Inject(method = "render", at = @At("RETURN"))
|
||||
private void render(MatrixStack matrices, Frustum frustum, VertexConsumerProvider.Immediate vertexConsumers, double cameraX, double cameraY, double cameraZ, CallbackInfo ci) {
|
||||
private void render(MatrixStack matrices, VertexConsumerProvider.Immediate vertexConsumers, double cameraX, double cameraY, double cameraZ, CallbackInfo ci) {
|
||||
if (crystalline_sky$weepingSkyMode != 0) {
|
||||
crystalline_sky$weepingSkyDebugRenderer.setLitMode(crystalline_sky$weepingSkyMode == 1);
|
||||
crystalline_sky$weepingSkyDebugRenderer.render(matrices, vertexConsumers, cameraX, cameraY, cameraZ);
|
||||
|
||||
-49
@@ -1,49 +0,0 @@
|
||||
package io.github.slimeistdev.crystalline_sky.mixin.client;
|
||||
|
||||
import io.github.slimeistdev.crystalline_sky.mixin_ducks.client.DefaultFramebufferSet_Duck;
|
||||
import net.minecraft.client.gl.Framebuffer;
|
||||
import net.minecraft.client.render.DefaultFramebufferSet;
|
||||
import net.minecraft.client.util.Handle;
|
||||
import net.minecraft.util.Identifier;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.Unique;
|
||||
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;
|
||||
|
||||
@Mixin(DefaultFramebufferSet.class)
|
||||
public class DefaultFramebufferSetMixin implements DefaultFramebufferSet_Duck {
|
||||
@Unique
|
||||
private Handle<Framebuffer> crystalline_sky$skyFramebuffer = Handle.empty();
|
||||
|
||||
@Override
|
||||
public Handle<Framebuffer> crystalline_sky$getSkyFramebuffer() {
|
||||
return crystalline_sky$skyFramebuffer;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void crystalline_sky$setSkyFramebuffer(Handle<Framebuffer> framebuffer) {
|
||||
crystalline_sky$skyFramebuffer = framebuffer;
|
||||
}
|
||||
|
||||
@Inject(method = "set", at = @At("HEAD"), cancellable = true)
|
||||
private void setSky(Identifier id, Handle<Framebuffer> framebuffer, CallbackInfo ci) {
|
||||
if (id.equals(crystalline_sky$SKY_FRAMEBUFFER)) {
|
||||
crystalline_sky$skyFramebuffer = framebuffer;
|
||||
ci.cancel();
|
||||
}
|
||||
}
|
||||
|
||||
@Inject(method = "get", at = @At("HEAD"), cancellable = true)
|
||||
private void getSky(Identifier id, CallbackInfoReturnable<Handle<Framebuffer>> cir) {
|
||||
if (id.equals(crystalline_sky$SKY_FRAMEBUFFER)) {
|
||||
cir.setReturnValue(crystalline_sky$skyFramebuffer);
|
||||
}
|
||||
}
|
||||
|
||||
@Inject(method = "clear", at = @At("HEAD"))
|
||||
private void clearSky(CallbackInfo ci) {
|
||||
crystalline_sky$skyFramebuffer = Handle.empty();
|
||||
}
|
||||
}
|
||||
+16
-9
@@ -1,18 +1,17 @@
|
||||
package io.github.slimeistdev.crystalline_sky.mixin.client;
|
||||
|
||||
import com.mojang.blaze3d.platform.GlConst;
|
||||
import com.mojang.blaze3d.platform.GlStateManager;
|
||||
import com.mojang.blaze3d.systems.RenderSystem;
|
||||
import com.mojang.blaze3d.textures.GpuTexture;
|
||||
import io.github.slimeistdev.crystalline_sky.mixin_ducks.client.Framebuffer_Duck;
|
||||
import net.minecraft.client.gl.Framebuffer;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.Shadow;
|
||||
|
||||
@Mixin(Framebuffer.class)
|
||||
public class FramebufferMixin implements Framebuffer_Duck {
|
||||
@Shadow
|
||||
@Nullable
|
||||
protected GpuTexture colorAttachment;
|
||||
protected int colorAttachment;
|
||||
|
||||
@Shadow
|
||||
public int textureWidth;
|
||||
@@ -20,17 +19,25 @@ public class FramebufferMixin implements Framebuffer_Duck {
|
||||
@Shadow
|
||||
public int textureHeight;
|
||||
|
||||
@Shadow
|
||||
public int fbo;
|
||||
|
||||
@Override
|
||||
public void crystalline_sky$copyColorFrom(Framebuffer framebuffer) {
|
||||
RenderSystem.assertOnRenderThread();
|
||||
if (this.colorAttachment == null) {
|
||||
if (this.colorAttachment == -1) {
|
||||
throw new IllegalStateException("Trying to copy color texture to a RenderTarget without a color texture");
|
||||
} else if (framebuffer.getColorAttachment() == null) {
|
||||
} else if (framebuffer.getColorAttachment() == -1) {
|
||||
throw new IllegalStateException("Trying to copy color texture from a RenderTarget without a color texture");
|
||||
} else {
|
||||
RenderSystem.getDevice()
|
||||
.createCommandEncoder()
|
||||
.copyTextureToTexture(framebuffer.getColorAttachment(), this.colorAttachment, 0, 0, 0, 0, 0, this.textureWidth, this.textureHeight);
|
||||
GlStateManager._glBindFramebuffer(GlConst.GL_READ_FRAMEBUFFER, framebuffer.fbo);
|
||||
GlStateManager._glBindFramebuffer(GlConst.GL_DRAW_FRAMEBUFFER, this.fbo);
|
||||
GlStateManager._glBlitFrameBuffer(
|
||||
0, 0, framebuffer.textureWidth, framebuffer.textureHeight,
|
||||
0, 0, this.textureWidth, this.textureHeight,
|
||||
256, GlConst.GL_NEAREST
|
||||
);
|
||||
GlStateManager._glBindFramebuffer(GlConst.GL_FRAMEBUFFER, 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+35
@@ -0,0 +1,35 @@
|
||||
package io.github.slimeistdev.crystalline_sky.mixin.client;
|
||||
|
||||
import com.llamalad7.mixinextras.injector.wrapoperation.Operation;
|
||||
import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation;
|
||||
import com.mojang.datafixers.util.Pair;
|
||||
import io.github.slimeistdev.crystalline_sky.registry.client.CrystallineShaderPrograms;
|
||||
import net.minecraft.client.gl.ShaderProgram;
|
||||
import net.minecraft.client.render.GameRenderer;
|
||||
import net.minecraft.client.render.VertexFormats;
|
||||
import net.minecraft.resource.ResourceFactory;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.injection.At;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.List;
|
||||
import java.util.function.Consumer;
|
||||
|
||||
@Mixin(GameRenderer.class)
|
||||
public class GameRendererMixin {
|
||||
@SuppressWarnings("InvalidInjectorMethodSignature")
|
||||
@WrapOperation(method = "loadPrograms", at = @At(value = "INVOKE", target = "Ljava/util/List;add(Ljava/lang/Object;)Z", ordinal = 0))
|
||||
private <E extends Pair<ShaderProgram, Consumer<ShaderProgram>>> boolean loadSkyProgram(
|
||||
List<E> instance,
|
||||
E e,
|
||||
Operation<Boolean> original,
|
||||
ResourceFactory factory
|
||||
) throws IOException {
|
||||
original.call(instance, Pair.of(new ShaderProgram(
|
||||
factory,
|
||||
"crystalline_sky_rendertype_sky",
|
||||
VertexFormats.POSITION_COLOR_TEXTURE_LIGHT_NORMAL
|
||||
), (Consumer<ShaderProgram>) program -> CrystallineShaderPrograms.renderTypeSkyProgram = program));
|
||||
return original.call(instance, e);
|
||||
}
|
||||
}
|
||||
+21
@@ -0,0 +1,21 @@
|
||||
package io.github.slimeistdev.crystalline_sky.mixin.client;
|
||||
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import com.llamalad7.mixinextras.injector.wrapoperation.Operation;
|
||||
import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation;
|
||||
import io.github.slimeistdev.crystalline_sky.registry.client.CrystallineRenderLayers;
|
||||
import net.minecraft.client.render.RenderLayer;
|
||||
import org.objectweb.asm.Opcodes;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.injection.At;
|
||||
|
||||
@Mixin(RenderLayer.class)
|
||||
public class RenderLayerMixin {
|
||||
@WrapOperation(method = "<clinit>", at = @At(value = "FIELD", target = "Lnet/minecraft/client/render/RenderLayer;BLOCK_LAYERS:Lcom/google/common/collect/ImmutableList;", opcode = Opcodes.PUTSTATIC))
|
||||
private static void addSkyToBlockLayers(ImmutableList<RenderLayer> value, Operation<Void> original) {
|
||||
original.call(ImmutableList.<RenderLayer>builder()
|
||||
.addAll(value)
|
||||
.add(CrystallineRenderLayers.SKY)
|
||||
.build());
|
||||
}
|
||||
}
|
||||
-12
@@ -1,12 +0,0 @@
|
||||
package io.github.slimeistdev.crystalline_sky.mixin.client;
|
||||
|
||||
import net.minecraft.client.render.DefaultFramebufferSet;
|
||||
import net.minecraft.client.render.WorldRenderer;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.gen.Accessor;
|
||||
|
||||
@Mixin(WorldRenderer.class)
|
||||
public interface WorldRendererAccessor {
|
||||
@Accessor("framebufferSet")
|
||||
DefaultFramebufferSet crystalline_sky$getFramebufferSet();
|
||||
}
|
||||
+82
-59
@@ -1,22 +1,22 @@
|
||||
package io.github.slimeistdev.crystalline_sky.mixin.client;
|
||||
|
||||
import com.llamalad7.mixinextras.sugar.Local;
|
||||
import com.mojang.blaze3d.buffers.GpuBufferSlice;
|
||||
import io.github.slimeistdev.crystalline_sky.extenders_cove.BlockRenderLayerGroupExt;
|
||||
import io.github.slimeistdev.crystalline_sky.mixin_ducks.client.DefaultFramebufferSet_Duck;
|
||||
import com.llamalad7.mixinextras.injector.wrapoperation.Operation;
|
||||
import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation;
|
||||
import io.github.slimeistdev.crystalline_sky.mixin_ducks.client.Framebuffer_Duck;
|
||||
import io.github.slimeistdev.crystalline_sky.mixin_ducks.client.WorldRenderer_Duck;
|
||||
import io.github.slimeistdev.crystalline_sky.registry.client.CrystallineRenderLayers;
|
||||
import net.minecraft.client.MinecraftClient;
|
||||
import net.minecraft.client.gl.Framebuffer;
|
||||
import net.minecraft.client.gl.SimpleFramebufferFactory;
|
||||
import net.minecraft.client.option.CloudRenderMode;
|
||||
import net.minecraft.client.render.*;
|
||||
import net.minecraft.client.util.Handle;
|
||||
import net.minecraft.client.util.ObjectAllocator;
|
||||
import net.minecraft.client.gl.SimpleFramebuffer;
|
||||
import net.minecraft.client.render.Camera;
|
||||
import net.minecraft.client.render.GameRenderer;
|
||||
import net.minecraft.client.render.LightmapTextureManager;
|
||||
import net.minecraft.client.render.RenderLayer;
|
||||
import net.minecraft.client.render.RenderTickCounter;
|
||||
import net.minecraft.client.render.WorldRenderer;
|
||||
import net.minecraft.client.world.ClientWorld;
|
||||
import net.minecraft.util.profiler.Profiler;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.joml.Matrix4f;
|
||||
import org.joml.Vector4f;
|
||||
import org.spongepowered.asm.mixin.Final;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.Shadow;
|
||||
@@ -25,14 +25,8 @@ import org.spongepowered.asm.mixin.injection.At;
|
||||
import org.spongepowered.asm.mixin.injection.Inject;
|
||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||
|
||||
import java.util.Optional;
|
||||
|
||||
@Mixin(WorldRenderer.class)
|
||||
public abstract class WorldRendererMixin {
|
||||
@Shadow
|
||||
@Final
|
||||
private DefaultFramebufferSet framebufferSet;
|
||||
|
||||
public abstract class WorldRendererMixin implements WorldRenderer_Duck {
|
||||
@Shadow
|
||||
@Final
|
||||
private MinecraftClient client;
|
||||
@@ -43,33 +37,73 @@ public abstract class WorldRendererMixin {
|
||||
@Shadow
|
||||
private int ticks;
|
||||
|
||||
@Shadow
|
||||
@Final
|
||||
private CloudRenderer cloudRenderer;
|
||||
|
||||
@Shadow
|
||||
protected abstract boolean hasBlindnessOrDarkness(Camera camera);
|
||||
|
||||
@Inject(method = "render", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/WorldRenderer;getTransparencyPostEffectProcessor()Lnet/minecraft/client/gl/PostEffectProcessor;"))
|
||||
private void setupSkyBuffer(ObjectAllocator allocator, RenderTickCounter tickCounter, boolean renderBlockOutline,
|
||||
Camera camera, Matrix4f positionMatrix, Matrix4f projectionMatrix, GpuBufferSlice fog,
|
||||
Vector4f fogColor, boolean shouldRenderSky, CallbackInfo ci,
|
||||
@Local FrameGraphBuilder frameGraphBuilder,
|
||||
@Local SimpleFramebufferFactory factory) {
|
||||
Handle<Framebuffer> framebuffer = frameGraphBuilder.createResourceHandle("crystalline_sky:sky_framebuffer", factory);
|
||||
((DefaultFramebufferSet_Duck) framebufferSet).crystalline_sky$setSkyFramebuffer(framebuffer);
|
||||
}
|
||||
@Shadow
|
||||
protected abstract void renderLayer(RenderLayer renderLayer, double x, double y, double z, Matrix4f matrix4f, Matrix4f positionMatrix);
|
||||
|
||||
@Unique
|
||||
private Handle<Framebuffer> crystalline_sky$transferSkyBuffer(FramePass pass) {
|
||||
Handle<Framebuffer> skyFramebuffer = pass.transfer(
|
||||
((DefaultFramebufferSet_Duck) framebufferSet).crystalline_sky$getSkyFramebuffer());
|
||||
((DefaultFramebufferSet_Duck) framebufferSet).crystalline_sky$setSkyFramebuffer(skyFramebuffer);
|
||||
return skyFramebuffer;
|
||||
@Nullable
|
||||
private Framebuffer crystalline_sky$skyBuffer;// = new SimpleFramebuffer(0, 0, false, MinecraftClient.IS_SYSTEM_MAC);
|
||||
|
||||
@Override
|
||||
public Framebuffer crystalline_sky$getSkyFramebuffer() {
|
||||
if (crystalline_sky$skyBuffer == null) {
|
||||
var fb = client.getFramebuffer();
|
||||
crystalline_sky$skyBuffer = new SimpleFramebuffer(fb.textureWidth, fb.textureHeight, false, MinecraftClient.IS_SYSTEM_MAC);
|
||||
}
|
||||
return crystalline_sky$skyBuffer;
|
||||
}
|
||||
|
||||
@Inject(method = "render", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/WorldRenderer;renderMain(Lnet/minecraft/client/render/FrameGraphBuilder;Lnet/minecraft/client/render/Frustum;Lnet/minecraft/client/render/Camera;Lorg/joml/Matrix4f;Lcom/mojang/blaze3d/buffers/GpuBufferSlice;ZZLnet/minecraft/client/render/RenderTickCounter;Lnet/minecraft/util/profiler/Profiler;)V"))
|
||||
private void copyAfterSky(ObjectAllocator allocator, RenderTickCounter tickCounter, boolean renderBlockOutline,
|
||||
@Inject(
|
||||
method = "render",
|
||||
at = @At(
|
||||
value = "INVOKE_STRING",
|
||||
target = "Lnet/minecraft/util/profiler/Profiler;swap(Ljava/lang/String;)V",
|
||||
args = "ldc=clear",
|
||||
shift = At.Shift.AFTER
|
||||
)
|
||||
)
|
||||
private void setupSkyBuffer(RenderTickCounter tickCounter, boolean renderBlockOutline, Camera camera,
|
||||
GameRenderer gameRenderer, LightmapTextureManager lightmapTextureManager,
|
||||
Matrix4f matrix4f, Matrix4f matrix4f2, CallbackInfo ci) {
|
||||
crystalline_sky$getSkyFramebuffer();
|
||||
}
|
||||
|
||||
@Inject(method = "onResized", at = @At("RETURN"))
|
||||
private void resizeSkyBuffer(int width, int height, CallbackInfo ci) {
|
||||
if (crystalline_sky$skyBuffer != null) {
|
||||
crystalline_sky$skyBuffer.resize(width, height, MinecraftClient.IS_SYSTEM_MAC);
|
||||
}
|
||||
}
|
||||
|
||||
@Inject(method = "close", at = @At("RETURN"))
|
||||
private void closeSkyBuffer(CallbackInfo ci) {
|
||||
if (crystalline_sky$skyBuffer != null) {
|
||||
crystalline_sky$skyBuffer.delete();
|
||||
crystalline_sky$skyBuffer = null;
|
||||
}
|
||||
}
|
||||
|
||||
@Inject(
|
||||
method = "render",
|
||||
at = @At(
|
||||
value = "INVOKE",
|
||||
target = "Lnet/minecraft/client/render/WorldRenderer;renderSky(Lorg/joml/Matrix4f;Lorg/joml/Matrix4f;FLnet/minecraft/client/render/Camera;ZLjava/lang/Runnable;)V",
|
||||
shift = At.Shift.AFTER
|
||||
)
|
||||
)
|
||||
private void copyAfterSky(RenderTickCounter tickCounter, boolean renderBlockOutline, Camera camera,
|
||||
GameRenderer gameRenderer, LightmapTextureManager lightmapTextureManager,
|
||||
Matrix4f matrix4f, Matrix4f matrix4f2, CallbackInfo ci) {
|
||||
var skyBuffer = crystalline_sky$getSkyFramebuffer();
|
||||
((Framebuffer_Duck) skyBuffer).crystalline_sky$copyColorFrom(client.getFramebuffer());
|
||||
// TODO: render clouds
|
||||
}
|
||||
|
||||
/* @Inject(method = "render", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/WorldRenderer;renderMain(Lnet/minecraft/client/render/FrameGraphBuilder;Lnet/minecraft/client/render/Frustum;Lnet/minecraft/client/render/Camera;Lorg/joml/Matrix4f;Lcom/mojang/blaze3d/buffers/GpuBufferSlice;ZZLnet/minecraft/client/render/RenderTickCounter;Lnet/minecraft/util/profiler/Profiler;)V"))
|
||||
private void copyAfterSky2(ObjectAllocator allocator, RenderTickCounter tickCounter, boolean renderBlockOutline,
|
||||
Camera camera, Matrix4f positionMatrix, Matrix4f projectionMatrix, GpuBufferSlice fog,
|
||||
Vector4f fogColor, boolean shouldRenderSky, CallbackInfo ci,
|
||||
@Local FrameGraphBuilder frameGraphBuilder) {
|
||||
@@ -111,31 +145,20 @@ public abstract class WorldRendererMixin {
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}*/
|
||||
|
||||
@Inject(method = "renderMain", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/FramePass;transfer(Lnet/minecraft/client/util/Handle;)Lnet/minecraft/client/util/Handle;", ordinal = 0))
|
||||
private void transferCrystallineSky(FrameGraphBuilder frameGraphBuilder, Frustum frustum, Camera camera,
|
||||
Matrix4f positionMatrix, GpuBufferSlice fog, boolean renderBlockOutline,
|
||||
boolean renderEntityOutline, RenderTickCounter tickCounter, Profiler profiler,
|
||||
CallbackInfo ci, @Local FramePass framePass) {
|
||||
crystalline_sky$transferSkyBuffer(framePass);
|
||||
}
|
||||
|
||||
// renderMain : framePass.setRenderer(@{() -> ...});
|
||||
@Inject(
|
||||
method = "method_62214",
|
||||
// after solid, cutoutMipped, and cutout
|
||||
@WrapOperation(
|
||||
method = "render",
|
||||
at = @At(
|
||||
value = "INVOKE",
|
||||
target = "Lnet/minecraft/client/render/SectionRenderState;renderSection(Lnet/minecraft/client/render/BlockRenderLayerGroup;)V",
|
||||
ordinal = 0,
|
||||
shift = At.Shift.AFTER
|
||||
target = "Lnet/minecraft/client/render/WorldRenderer;renderLayer(Lnet/minecraft/client/render/RenderLayer;DDDLorg/joml/Matrix4f;Lorg/joml/Matrix4f;)V",
|
||||
ordinal = 2
|
||||
)
|
||||
)
|
||||
private void renderCrystallineSky(GpuBufferSlice fog, RenderTickCounter tickCounter, Camera camera,
|
||||
Profiler profiler, Matrix4f positionMatrix, Handle<Framebuffer> itemEntityFramebuffer,
|
||||
Handle<Framebuffer> entityOutlineFramebuffer, boolean renderBlockOutline, Frustum frustum,
|
||||
Handle<Framebuffer> translucentFramebuffer, Handle<Framebuffer> mainFramebuffer, CallbackInfo ci,
|
||||
@Local SectionRenderState sectionRenderState) {
|
||||
sectionRenderState.renderSection(BlockRenderLayerGroupExt.CRYSTALLINE_SKY_SKY);
|
||||
private void renderCrystallineSky(WorldRenderer instance, RenderLayer renderLayer, double x, double y, double z,
|
||||
Matrix4f matrix4f, Matrix4f positionMatrix, Operation<Void> original) {
|
||||
original.call(instance, renderLayer, x, y, z, matrix4f, positionMatrix);
|
||||
renderLayer(CrystallineRenderLayers.SKY, x, y, z, matrix4f, positionMatrix);
|
||||
}
|
||||
}
|
||||
|
||||
+20
-18
@@ -2,20 +2,19 @@ package io.github.slimeistdev.crystalline_sky.mixin.client;
|
||||
|
||||
import com.llamalad7.mixinextras.injector.wrapoperation.Operation;
|
||||
import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation;
|
||||
import com.llamalad7.mixinextras.sugar.Local;
|
||||
import com.mojang.blaze3d.systems.RenderSystem;
|
||||
import io.github.slimeistdev.crystalline_sky.annotation.mixin.ConditionalMixin;
|
||||
import io.github.slimeistdev.crystalline_sky.compat.Mods;
|
||||
import io.github.slimeistdev.crystalline_sky.extenders_cove.BlockRenderLayerExt;
|
||||
import io.github.slimeistdev.crystalline_sky.registry.CrystallineItems;
|
||||
import io.github.slimeistdev.crystalline_sky.registry.client.CrystallineRenderLayers;
|
||||
import net.minecraft.client.MinecraftClient;
|
||||
import net.minecraft.client.gl.DynamicUniforms;
|
||||
import net.minecraft.client.render.BlockRenderLayer;
|
||||
import net.minecraft.client.gl.ShaderProgram;
|
||||
import net.minecraft.client.render.RenderLayer;
|
||||
import net.minecraft.client.render.VertexFormat;
|
||||
import net.minecraft.client.render.WorldRenderer;
|
||||
import net.minecraft.client.util.Window;
|
||||
import net.minecraft.util.math.MathHelper;
|
||||
import org.joml.Matrix4fc;
|
||||
import org.joml.Vector3fc;
|
||||
import org.joml.Vector4f;
|
||||
import org.joml.Vector4fc;
|
||||
import org.joml.Matrix4f;
|
||||
import org.spongepowered.asm.mixin.Final;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.Shadow;
|
||||
@@ -31,26 +30,29 @@ public class WorldRenderer_NoSodium_Mixin {
|
||||
@Shadow
|
||||
private int ticks;
|
||||
|
||||
@WrapOperation(method = "renderBlockLayers", at = @At(value = "NEW", target = "net/minecraft/client/gl/DynamicUniforms$UniformValue"))
|
||||
private DynamicUniforms.UniformValue tintSkyBlocks(Matrix4fc modelView, Vector4fc colorModulator,
|
||||
Vector3fc modelOffset, Matrix4fc textureMatrix, float lineWidth,
|
||||
Operation<DynamicUniforms.UniformValue> original,
|
||||
@Local BlockRenderLayer blockRenderLayer) {
|
||||
if (blockRenderLayer == BlockRenderLayerExt.CRYSTALLINE_SKY_SKY
|
||||
@WrapOperation(method = "renderLayer", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gl/ShaderProgram;initializeUniforms(Lnet/minecraft/client/render/VertexFormat$DrawMode;Lorg/joml/Matrix4f;Lorg/joml/Matrix4f;Lnet/minecraft/client/util/Window;)V"))
|
||||
private void tintSkyBlocks(ShaderProgram instance, VertexFormat.DrawMode drawMode, Matrix4f viewMatrix,
|
||||
Matrix4f projectionMatrix, Window window, Operation<Void> original,
|
||||
RenderLayer renderLayer) {
|
||||
original.call(instance, drawMode, viewMatrix, projectionMatrix, window);
|
||||
|
||||
if (renderLayer == CrystallineRenderLayers.SKY
|
||||
&& instance.colorModulator != null
|
||||
&& client.player != null
|
||||
&& (client.player.getMainHandStack().isOf(CrystallineItems.SKY)
|
||||
|| client.player.getOffHandStack().isOf(CrystallineItems.SKY)
|
||||
|| client.player.getMainHandStack().isOf(CrystallineItems.WEEPING_SKY)
|
||||
|| client.player.getOffHandStack().isOf(CrystallineItems.WEEPING_SKY))) {
|
||||
|
||||
float f = ticks + client.getRenderTickCounter().getTickProgress(true);
|
||||
float f = ticks + client.getRenderTickCounter().getTickDelta(true);
|
||||
float alpha = (MathHelper.sin(f / 10.0f) + 1.0f) / 2.0f;
|
||||
// remap alpha from [0, 1] to [0, 0.75]
|
||||
float maxAlpha = 1.0f - 0.25f;
|
||||
alpha = alpha * maxAlpha;
|
||||
colorModulator = new Vector4f(1.0f, 1.0f, 1.0f, alpha).mul(colorModulator);
|
||||
}
|
||||
|
||||
return original.call(modelView, colorModulator, modelOffset, textureMatrix, lineWidth);
|
||||
float[] colorModulator = RenderSystem.getShaderColor().clone();
|
||||
colorModulator[3] *= alpha;
|
||||
instance.colorModulator.set(colorModulator);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+5
-5
@@ -3,8 +3,8 @@ package io.github.slimeistdev.crystalline_sky.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.extenders_cove.BlockRenderLayerExt;
|
||||
import net.minecraft.client.render.BlockRenderLayer;
|
||||
import io.github.slimeistdev.crystalline_sky.registry.client.CrystallineRenderLayers;
|
||||
import net.minecraft.client.render.RenderLayer;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.injection.At;
|
||||
import org.spongepowered.asm.mixin.injection.Inject;
|
||||
@@ -13,9 +13,9 @@ 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(value = "NEW", target = "()Ljava/lang/IncompatibleClassChangeError;"), cancellable = true)
|
||||
private static void unexplodeSky(BlockRenderLayer layer, CallbackInfoReturnable<ChunkRenderOverrider.AxiomChunkOverrideLayer> cir) {
|
||||
if (layer == BlockRenderLayerExt.CRYSTALLINE_SKY_SKY) {
|
||||
@Inject(method = "fromVanilla", at = @At("HEAD"), cancellable = true)
|
||||
private static void unexplodeSky(RenderLayer layer, CallbackInfoReturnable<ChunkRenderOverrider.AxiomChunkOverrideLayer> cir) {
|
||||
if (layer == CrystallineRenderLayers.SKY) {
|
||||
cir.setReturnValue(ChunkRenderOverrider.AxiomChunkOverrideLayer.CUTOUT_MIPPED);
|
||||
}
|
||||
}
|
||||
|
||||
+6
-6
@@ -1,13 +1,13 @@
|
||||
package io.github.slimeistdev.crystalline_sky.mixin.client.compat.sodium;
|
||||
|
||||
import io.github.slimeistdev.crystalline_sky.annotation.mixin.ConditionalMixin;
|
||||
import io.github.slimeistdev.crystalline_sky.extenders_cove.BlockRenderLayerExt;
|
||||
import io.github.slimeistdev.crystalline_sky.compat.Mods;
|
||||
import io.github.slimeistdev.crystalline_sky.registry.client.CrystallineRenderLayers;
|
||||
import net.caffeinemc.mods.sodium.client.render.chunk.terrain.DefaultTerrainRenderPasses;
|
||||
import net.caffeinemc.mods.sodium.client.render.chunk.terrain.material.DefaultMaterials;
|
||||
import net.caffeinemc.mods.sodium.client.render.chunk.terrain.material.Material;
|
||||
import net.caffeinemc.mods.sodium.client.render.chunk.terrain.material.parameters.AlphaCutoffParameter;
|
||||
import net.minecraft.client.render.BlockRenderLayer;
|
||||
import net.minecraft.client.render.RenderLayer;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.Unique;
|
||||
import org.spongepowered.asm.mixin.injection.At;
|
||||
@@ -23,16 +23,16 @@ public class DefaultMaterialsMixin {
|
||||
@SuppressWarnings("OptionalGetWithoutIsPresent")
|
||||
private static final Material crystalline_sky$SKY = new Material(
|
||||
Arrays.stream(DefaultTerrainRenderPasses.ALL)
|
||||
.filter(pass -> ((TerrainRenderPassAccessor) pass).crystalline_sky$getRenderLayer() == BlockRenderLayerExt.CRYSTALLINE_SKY_SKY)
|
||||
.filter(pass -> ((TerrainRenderPassAccessor) pass).crystalline_sky$getRenderLayer() == CrystallineRenderLayers.SKY)
|
||||
.findFirst()
|
||||
.get(),
|
||||
AlphaCutoffParameter.ZERO,
|
||||
false
|
||||
);
|
||||
|
||||
@Inject(method = "forChunkLayer", at = @At(value = "NEW", target = "(Ljava/lang/String;Ljava/lang/Throwable;)Ljava/lang/MatchException;"), cancellable = true)
|
||||
private static void addCrystallineSkyMaterial(BlockRenderLayer layer, CallbackInfoReturnable<Material> cir) {
|
||||
if (layer == BlockRenderLayerExt.CRYSTALLINE_SKY_SKY) {
|
||||
@Inject(method = "forRenderLayer", at = @At(value = "NEW", target = "(Ljava/lang/String;)Ljava/lang/IllegalArgumentException;"), cancellable = true)
|
||||
private static void addCrystallineSkyMaterial(RenderLayer layer, CallbackInfoReturnable<Material> cir) {
|
||||
if (layer == CrystallineRenderLayers.SKY) {
|
||||
cir.setReturnValue(crystalline_sky$SKY);
|
||||
}
|
||||
}
|
||||
|
||||
+2
-2
@@ -1,8 +1,8 @@
|
||||
package io.github.slimeistdev.crystalline_sky.mixin.client.compat.sodium;
|
||||
|
||||
import io.github.slimeistdev.crystalline_sky.annotation.mixin.ConditionalMixin;
|
||||
import io.github.slimeistdev.crystalline_sky.extenders_cove.BlockRenderLayerExt;
|
||||
import io.github.slimeistdev.crystalline_sky.compat.Mods;
|
||||
import io.github.slimeistdev.crystalline_sky.registry.client.CrystallineRenderLayers;
|
||||
import net.caffeinemc.mods.sodium.client.render.chunk.terrain.DefaultTerrainRenderPasses;
|
||||
import net.caffeinemc.mods.sodium.client.render.chunk.terrain.TerrainRenderPass;
|
||||
import org.spongepowered.asm.mixin.Final;
|
||||
@@ -25,7 +25,7 @@ public class DefaultTerrainRenderPassesMixin {
|
||||
private static void addCrystallineSkyPass(CallbackInfo ci) {
|
||||
var ALL$ = new TerrainRenderPass[ALL.length + 1];
|
||||
System.arraycopy(ALL, 0, ALL$, 0, ALL.length);
|
||||
ALL$[ALL.length] = new TerrainRenderPass(BlockRenderLayerExt.CRYSTALLINE_SKY_SKY, false, true);
|
||||
ALL$[ALL.length] = new TerrainRenderPass(CrystallineRenderLayers.SKY, false, true);
|
||||
ALL = ALL$;
|
||||
}
|
||||
}
|
||||
|
||||
+2
-2
@@ -5,7 +5,7 @@ import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation;
|
||||
import io.github.slimeistdev.crystalline_sky.annotation.mixin.ConditionalMixin;
|
||||
import io.github.slimeistdev.crystalline_sky.compat.Mods;
|
||||
import io.github.slimeistdev.crystalline_sky.compat.sodium.SkyShaderInterface;
|
||||
import io.github.slimeistdev.crystalline_sky.extenders_cove.BlockRenderLayerExt;
|
||||
import io.github.slimeistdev.crystalline_sky.registry.client.CrystallineRenderLayers;
|
||||
import net.caffeinemc.mods.sodium.client.gl.shader.GlProgram;
|
||||
import net.caffeinemc.mods.sodium.client.render.chunk.ShaderChunkRenderer;
|
||||
import net.caffeinemc.mods.sodium.client.render.chunk.shader.ChunkShaderInterface;
|
||||
@@ -23,7 +23,7 @@ import java.util.function.Function;
|
||||
public class ShaderChunkRendererMixin {
|
||||
@WrapOperation(method = "compileProgram", at = @At(value = "INVOKE", target = "Lnet/caffeinemc/mods/sodium/client/render/chunk/ShaderChunkRenderer;createShader(Ljava/lang/String;Lnet/caffeinemc/mods/sodium/client/render/chunk/shader/ChunkShaderOptions;)Lnet/caffeinemc/mods/sodium/client/gl/shader/GlProgram;"), remap = false)
|
||||
private GlProgram<ChunkShaderInterface> createSkyShader(ShaderChunkRenderer instance, String path, ChunkShaderOptions options, Operation<GlProgram<ChunkShaderInterface>> original) {
|
||||
if (options.pass() == DefaultMaterials.forChunkLayer(BlockRenderLayerExt.CRYSTALLINE_SKY_SKY).pass) {
|
||||
if (options.pass() == DefaultMaterials.forRenderLayer(CrystallineRenderLayers.SKY).pass) {
|
||||
return original.call(instance, "sodium_compat/block_layer_sky", options);
|
||||
}
|
||||
|
||||
|
||||
+5
-6
@@ -1,14 +1,13 @@
|
||||
package io.github.slimeistdev.crystalline_sky.mixin.client.compat.sodium;
|
||||
|
||||
import io.github.slimeistdev.crystalline_sky.annotation.mixin.ConditionalMixin;
|
||||
import io.github.slimeistdev.crystalline_sky.extenders_cove.BlockRenderLayerExt;
|
||||
import io.github.slimeistdev.crystalline_sky.extenders_cove.BlockRenderLayerGroupExt;
|
||||
import io.github.slimeistdev.crystalline_sky.compat.Mods;
|
||||
import io.github.slimeistdev.crystalline_sky.registry.client.CrystallineRenderLayers;
|
||||
import net.caffeinemc.mods.sodium.client.render.SodiumWorldRenderer;
|
||||
import net.caffeinemc.mods.sodium.client.render.chunk.ChunkRenderMatrices;
|
||||
import net.caffeinemc.mods.sodium.client.render.chunk.RenderSectionManager;
|
||||
import net.caffeinemc.mods.sodium.client.render.chunk.terrain.material.DefaultMaterials;
|
||||
import net.minecraft.client.render.BlockRenderLayerGroup;
|
||||
import net.minecraft.client.render.RenderLayer;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.Shadow;
|
||||
import org.spongepowered.asm.mixin.injection.At;
|
||||
@@ -22,9 +21,9 @@ public class SodiumWorldRendererMixin {
|
||||
private RenderSectionManager renderSectionManager;
|
||||
|
||||
@Inject(method = "drawChunkLayer", at = @At("RETURN"))
|
||||
private void drawCrystallineLayer(BlockRenderLayerGroup group, ChunkRenderMatrices matrices, double x, double y, double z, CallbackInfo ci) {
|
||||
if (group != BlockRenderLayerGroupExt.CRYSTALLINE_SKY_SKY) return;
|
||||
private void drawCrystallineLayer(RenderLayer renderLayer, ChunkRenderMatrices matrices, double x, double y, double z, CallbackInfo ci) {
|
||||
if (renderLayer != CrystallineRenderLayers.SKY) return;
|
||||
|
||||
renderSectionManager.renderLayer(matrices, DefaultMaterials.forChunkLayer(BlockRenderLayerExt.CRYSTALLINE_SKY_SKY).pass, x, y, z);
|
||||
renderSectionManager.renderLayer(matrices, DefaultMaterials.forRenderLayer(CrystallineRenderLayers.SKY).pass, x, y, z);
|
||||
}
|
||||
}
|
||||
|
||||
+2
-2
@@ -3,7 +3,7 @@ package io.github.slimeistdev.crystalline_sky.mixin.client.compat.sodium;
|
||||
import io.github.slimeistdev.crystalline_sky.annotation.mixin.ConditionalMixin;
|
||||
import io.github.slimeistdev.crystalline_sky.compat.Mods;
|
||||
import net.caffeinemc.mods.sodium.client.render.chunk.terrain.TerrainRenderPass;
|
||||
import net.minecraft.client.render.BlockRenderLayer;
|
||||
import net.minecraft.client.render.RenderLayer;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.gen.Accessor;
|
||||
|
||||
@@ -11,5 +11,5 @@ import org.spongepowered.asm.mixin.gen.Accessor;
|
||||
@Mixin(TerrainRenderPass.class)
|
||||
public interface TerrainRenderPassAccessor {
|
||||
@Accessor("renderType")
|
||||
BlockRenderLayer crystalline_sky$getRenderLayer();
|
||||
RenderLayer crystalline_sky$getRenderLayer();
|
||||
}
|
||||
|
||||
-13
@@ -1,13 +0,0 @@
|
||||
package io.github.slimeistdev.crystalline_sky.mixin_ducks.client;
|
||||
|
||||
import io.github.slimeistdev.crystalline_sky.CrystallineSky;
|
||||
import net.minecraft.client.gl.Framebuffer;
|
||||
import net.minecraft.client.util.Handle;
|
||||
import net.minecraft.util.Identifier;
|
||||
|
||||
public interface DefaultFramebufferSet_Duck {
|
||||
Identifier crystalline_sky$SKY_FRAMEBUFFER = CrystallineSky.id("sky");
|
||||
|
||||
Handle<Framebuffer> crystalline_sky$getSkyFramebuffer();
|
||||
void crystalline_sky$setSkyFramebuffer(Handle<Framebuffer> framebuffer);
|
||||
}
|
||||
+7
@@ -0,0 +1,7 @@
|
||||
package io.github.slimeistdev.crystalline_sky.mixin_ducks.client;
|
||||
|
||||
import net.minecraft.client.gl.Framebuffer;
|
||||
|
||||
public interface WorldRenderer_Duck {
|
||||
Framebuffer crystalline_sky$getSkyFramebuffer();
|
||||
}
|
||||
@@ -54,7 +54,7 @@ public class CrystallineBlocks {
|
||||
|
||||
private static <T extends Block> T register(String id, Function<Settings, T> factory, Settings settings) {
|
||||
RegistryKey<Block> key = CrystallineSky.key(RegistryKeys.BLOCK, id);
|
||||
return Registry.register(Registries.BLOCK, key, factory.apply(settings.registryKey(key)));
|
||||
return Registry.register(Registries.BLOCK, key, factory.apply(settings));
|
||||
}
|
||||
|
||||
public static boolean isCrystallineSky(BlockState state) {
|
||||
|
||||
+2
-1
@@ -2,6 +2,7 @@ package io.github.slimeistdev.crystalline_sky.registry;
|
||||
|
||||
import io.github.slimeistdev.crystalline_sky.CrystallineSky;
|
||||
import net.minecraft.component.ComponentType;
|
||||
import net.minecraft.network.codec.PacketCodec;
|
||||
import net.minecraft.registry.Registries;
|
||||
import net.minecraft.registry.Registry;
|
||||
import net.minecraft.util.Unit;
|
||||
@@ -12,7 +13,7 @@ public class CrystallineDataComponentTypes {
|
||||
public static final ComponentType<Unit> WEEPING_SKY_DEBUG_COLUMN_TOOL = register(
|
||||
"weeping_sky_debug_column_tool",
|
||||
b -> b
|
||||
.packetCodec(Unit.PACKET_CODEC)
|
||||
.packetCodec(PacketCodec.unit(Unit.INSTANCE))
|
||||
.codec(Unit.CODEC)
|
||||
);
|
||||
|
||||
|
||||
@@ -3,14 +3,20 @@ package io.github.slimeistdev.crystalline_sky.registry;
|
||||
import io.github.slimeistdev.crystalline_sky.content.blocks.SkyLightBlock;
|
||||
import io.github.slimeistdev.crystalline_sky.content.items.WeepingSkyBlockItem;
|
||||
import net.fabricmc.fabric.api.itemgroup.v1.ItemGroupEvents;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.block.LightBlock;
|
||||
import net.minecraft.component.DataComponentTypes;
|
||||
import net.minecraft.component.type.BlockStateComponent;
|
||||
import net.minecraft.item.*;
|
||||
import net.minecraft.item.BlockItem;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.item.ItemGroups;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.item.Items;
|
||||
import net.minecraft.util.Rarity;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.function.BiFunction;
|
||||
|
||||
public class CrystallineItems {
|
||||
public static final Item SKY = Items.register(
|
||||
@@ -18,7 +24,7 @@ public class CrystallineItems {
|
||||
settings -> settings.rarity(Rarity.EPIC)
|
||||
);
|
||||
|
||||
public static final Item WEEPING_SKY = Items.register(
|
||||
public static final Item WEEPING_SKY = register(
|
||||
CrystallineBlocks.WEEPING_SKY,
|
||||
(block, settings) -> new WeepingSkyBlockItem(block, settings.rarity(Rarity.EPIC))
|
||||
);
|
||||
@@ -34,6 +40,11 @@ public class CrystallineItems {
|
||||
settings -> settings.rarity(Rarity.EPIC)
|
||||
);
|
||||
|
||||
@SuppressWarnings("SameParameterValue")
|
||||
private static Item register(Block block, BiFunction<Block, Item.Settings, BlockItem> factory) {
|
||||
return Items.register(factory.apply(block, new Item.Settings()));
|
||||
}
|
||||
|
||||
public static void init() {
|
||||
ItemGroupEvents.modifyEntriesEvent(ItemGroups.OPERATOR).register(entries -> {
|
||||
if (!entries.getContext().hasPermissions()) return;
|
||||
|
||||
+44
@@ -0,0 +1,44 @@
|
||||
package io.github.slimeistdev.crystalline_sky.registry.client;
|
||||
|
||||
import com.mojang.blaze3d.systems.RenderSystem;
|
||||
import io.github.slimeistdev.crystalline_sky.mixin_ducks.client.WorldRenderer_Duck;
|
||||
import net.fabricmc.api.EnvType;
|
||||
import net.fabricmc.api.Environment;
|
||||
import net.minecraft.client.MinecraftClient;
|
||||
import net.minecraft.client.render.RenderLayer;
|
||||
import net.minecraft.client.render.RenderPhase;
|
||||
import net.minecraft.client.render.VertexFormat;
|
||||
import net.minecraft.client.render.VertexFormats;
|
||||
|
||||
import static net.minecraft.client.render.RenderLayer.of;
|
||||
import static net.minecraft.client.render.RenderPhase.ENABLE_LIGHTMAP;
|
||||
|
||||
@Environment(EnvType.CLIENT)
|
||||
public class CrystallineRenderLayers {
|
||||
private static final RenderPhase.TextureBase SKY_TEXTURE = new SkyBufferTexture();
|
||||
private static final RenderPhase.ShaderProgram SKY_PROGRAM = new RenderPhase.ShaderProgram(CrystallineShaderPrograms::getRenderTypeSkyProgram);
|
||||
|
||||
public static final RenderLayer SKY = of(
|
||||
"crystalline_sky_sky",
|
||||
VertexFormats.POSITION_COLOR_TEXTURE_LIGHT_NORMAL,
|
||||
VertexFormat.DrawMode.QUADS,
|
||||
4194304,
|
||||
true,
|
||||
false,
|
||||
RenderLayer.MultiPhaseParameters.builder()
|
||||
.lightmap(ENABLE_LIGHTMAP)
|
||||
.program(SKY_PROGRAM)
|
||||
.texture(SKY_TEXTURE)
|
||||
.build(true)
|
||||
);
|
||||
|
||||
private static class SkyBufferTexture extends RenderPhase.TextureBase {
|
||||
public SkyBufferTexture() {
|
||||
super(() -> {
|
||||
MinecraftClient mc = MinecraftClient.getInstance();
|
||||
var fb = ((WorldRenderer_Duck) mc.worldRenderer).crystalline_sky$getSkyFramebuffer();
|
||||
RenderSystem.setShaderTexture(0, fb.getColorAttachment());
|
||||
}, () -> {});
|
||||
}
|
||||
}
|
||||
}
|
||||
-19
@@ -1,19 +0,0 @@
|
||||
package io.github.slimeistdev.crystalline_sky.registry.client;
|
||||
|
||||
import com.mojang.blaze3d.pipeline.RenderPipeline;
|
||||
import io.github.slimeistdev.crystalline_sky.CrystallineSky;
|
||||
import net.fabricmc.api.EnvType;
|
||||
import net.fabricmc.api.Environment;
|
||||
import net.minecraft.client.gl.RenderPipelines;
|
||||
|
||||
@Environment(EnvType.CLIENT)
|
||||
public class CrystallineRenderPipelines {
|
||||
public static final RenderPipeline SKY_PIPELINE = RenderPipelines.register(
|
||||
RenderPipeline.builder(RenderPipelines.TERRAIN_SNIPPET)
|
||||
.withFragmentShader(CrystallineSky.id("core/terrain_sky"))
|
||||
.withVertexShader(CrystallineSky.id("core/terrain_sky"))
|
||||
.withLocation(CrystallineSky.id("pipeline/sky"))
|
||||
.withShaderDefine("BAYER_BIAS", 0.03125f)
|
||||
.build()
|
||||
);
|
||||
}
|
||||
+14
@@ -0,0 +1,14 @@
|
||||
package io.github.slimeistdev.crystalline_sky.registry.client;
|
||||
|
||||
import net.minecraft.client.gl.ShaderProgram;
|
||||
import org.jetbrains.annotations.ApiStatus;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
public class CrystallineShaderPrograms {
|
||||
@ApiStatus.Internal
|
||||
public static @Nullable ShaderProgram renderTypeSkyProgram;
|
||||
|
||||
public static @Nullable ShaderProgram getRenderTypeSkyProgram() {
|
||||
return renderTypeSkyProgram;
|
||||
}
|
||||
}
|
||||
@@ -15,13 +15,12 @@
|
||||
"SkyLightStorageAccessor"
|
||||
],
|
||||
"client": [
|
||||
"client.BlockRenderLayerMixin",
|
||||
"client.ClientWorldMixin",
|
||||
"client.DebugRendererMixin",
|
||||
"client.DefaultFramebufferSetMixin",
|
||||
"client.FramebufferMixin",
|
||||
"client.GameRendererMixin",
|
||||
"client.RenderLayerMixin",
|
||||
"client.WorldRenderer_NoSodium_Mixin",
|
||||
"client.WorldRendererAccessor",
|
||||
"client.WorldRendererMixin",
|
||||
"client.compat.axiom.ChunkRenderOverrider_AxiomChunkOverrideLayerMixin",
|
||||
"client.compat.sodium.DefaultMaterialsMixin",
|
||||
|
||||
@@ -36,9 +36,6 @@
|
||||
],
|
||||
"fabric-datagen": [
|
||||
"io.github.slimeistdev.crystalline_sky.datagen.CrystallineSkyDataGenerator"
|
||||
],
|
||||
"mm:early_risers": [
|
||||
"io.github.slimeistdev.crystalline_sky.extenders_cove.CrystallineSkyEarlyRiser"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user