From 795ef07b38e38054e00b5ae6ad4c061df00b1ca4 Mon Sep 17 00:00:00 2001 From: PepperBell <44146161+PepperCode1@users.noreply.github.com> Date: Wed, 10 Nov 2021 22:15:26 -0800 Subject: [PATCH] Fix Flywheel contraption lighting - Fix some events being registered to the wrong event bus - Organize some event registration - Fully fix FluidRenderer --- src/main/java/com/simibubi/create/Create.java | 16 +--- .../com/simibubi/create/CreateClient.java | 5 -- .../render/ContraptionRenderDispatcher.java | 3 +- .../simibubi/create/events/ClientEvents.java | 38 ++++++---- .../simibubi/create/events/CommonEvents.java | 19 +++++ .../simibubi/create/events/InputEvents.java | 8 +- .../block/render/SpriteShifter.java | 6 ++ .../create/foundation/config/AllConfigs.java | 5 ++ .../config/ui/BaseConfigScreen.java | 10 +-- .../foundation/fluid/FluidRenderer.java | 76 ++++++++----------- .../foundation/render/CreateContexts.java | 3 +- .../PlacementSimulationWorld.java | 3 +- .../flywheel/shaders/context/contraption.glsl | 6 +- 13 files changed, 104 insertions(+), 94 deletions(-) diff --git a/src/main/java/com/simibubi/create/Create.java b/src/main/java/com/simibubi/create/Create.java index 43b8f4f29..d7d2478a6 100644 --- a/src/main/java/com/simibubi/create/Create.java +++ b/src/main/java/com/simibubi/create/Create.java @@ -11,7 +11,6 @@ import com.simibubi.create.api.behaviour.BlockSpoutingBehaviour; import com.simibubi.create.content.CreateItemGroup; import com.simibubi.create.content.contraptions.TorquePropagator; import com.simibubi.create.content.contraptions.components.flywheel.engine.FurnaceEngineModifiers; -import com.simibubi.create.content.contraptions.components.structureMovement.train.capability.CapabilityMinecartController; import com.simibubi.create.content.curiosities.weapons.BuiltinPotatoProjectileTypes; import com.simibubi.create.content.logistics.RedstoneLinkNetworkHandler; import com.simibubi.create.content.palettes.AllPaletteBlocks; @@ -45,8 +44,6 @@ import net.minecraft.world.level.levelgen.placement.FeatureDecorator; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.common.ForgeMod; import net.minecraftforge.common.MinecraftForge; -import net.minecraftforge.common.capabilities.RegisterCapabilitiesEvent; -import net.minecraftforge.event.world.BiomeLoadingEvent; import net.minecraftforge.eventbus.api.EventPriority; import net.minecraftforge.eventbus.api.IEventBus; import net.minecraftforge.fml.DistExecutor; @@ -112,16 +109,13 @@ public class Create { IEventBus forgeEventBus = MinecraftForge.EVENT_BUS; modEventBus.addListener(Create::init); + modEventBus.addListener(EventPriority.LOWEST, Create::gatherData); modEventBus.addGenericListener(Feature.class, AllWorldFeatures::registerOreFeatures); modEventBus.addGenericListener(FeatureDecorator.class, AllWorldFeatures::registerDecoratorFeatures); modEventBus.addGenericListener(RecipeSerializer.class, AllRecipeTypes::register); modEventBus.addGenericListener(ParticleType.class, AllParticleTypes::register); modEventBus.addGenericListener(SoundEvent.class, AllSoundEvents::register); - modEventBus.addListener(AllConfigs::onLoad); - modEventBus.addListener(AllConfigs::onReload); - modEventBus.addListener(EventPriority.LOWEST, Create::gatherData); - forgeEventBus.addListener(EventPriority.HIGH, Create::onBiomeLoad); forgeEventBus.register(CHUNK_UTIL); DistExecutor.unsafeRunWhenOn(Dist.CLIENT, @@ -153,14 +147,6 @@ public class Create { ProcessingRecipeGen.registerAll(gen); } - public static void registerCapabilities(RegisterCapabilitiesEvent event) { - event.register(CapabilityMinecartController.class); - } - - public static void onBiomeLoad(BiomeLoadingEvent event) { - AllWorldFeatures.reload(event); - } - public static CreateRegistrate registrate() { return REGISTRATE.get(); } diff --git a/src/main/java/com/simibubi/create/CreateClient.java b/src/main/java/com/simibubi/create/CreateClient.java index 42cff9fd5..09a515768 100644 --- a/src/main/java/com/simibubi/create/CreateClient.java +++ b/src/main/java/com/simibubi/create/CreateClient.java @@ -10,9 +10,7 @@ import com.simibubi.create.content.curiosities.zapper.ZapperRenderHandler; import com.simibubi.create.content.schematics.ClientSchematicLoader; import com.simibubi.create.content.schematics.client.SchematicAndQuillHandler; import com.simibubi.create.content.schematics.client.SchematicHandler; -import com.simibubi.create.events.ClientEvents; import com.simibubi.create.foundation.ClientResourceReloadListener; -import com.simibubi.create.foundation.block.render.SpriteShifter; import com.simibubi.create.foundation.config.AllConfigs; import com.simibubi.create.foundation.gui.UIRenderHelper; import com.simibubi.create.foundation.ponder.content.PonderIndex; @@ -58,9 +56,6 @@ public class CreateClient { public static void onCtorClient(IEventBus modEventBus, IEventBus forgeEventBus) { modEventBus.addListener(CreateClient::clientInit); - modEventBus.addListener(ClientEvents::loadCompleted); - modEventBus.addListener(SpriteShifter::onTextureStitchPre); - modEventBus.addListener(SpriteShifter::onTextureStitchPost); modEventBus.addListener(AllParticleTypes::registerFactories); modEventBus.addListener(CreateContexts::flwInit); modEventBus.addListener(AllMaterialSpecs::flwInit); diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/render/ContraptionRenderDispatcher.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/render/ContraptionRenderDispatcher.java index 8b9ec1f5a..6eefda560 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/render/ContraptionRenderDispatcher.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/render/ContraptionRenderDispatcher.java @@ -32,6 +32,7 @@ import net.minecraft.client.renderer.RenderType; import net.minecraft.core.BlockPos; import net.minecraft.world.level.Level; import net.minecraft.world.level.LightLayer; +import net.minecraft.world.level.block.Block; import net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemplate; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; @@ -110,7 +111,7 @@ public class ContraptionRenderDispatcher { for (StructureTemplate.StructureBlockInfo info : c.getBlocks() .values()) // Skip individual lighting updates to prevent lag with large contraptions - renderWorld.setBlock(info.pos, info.state, 128); + renderWorld.setBlock(info.pos, info.state, Block.UPDATE_SUPPRESS_LIGHT); renderWorld.updateLightSources(); renderWorld.lighter.runUpdates(Integer.MAX_VALUE, false, false); diff --git a/src/main/java/com/simibubi/create/events/ClientEvents.java b/src/main/java/com/simibubi/create/events/ClientEvents.java index 9280982e8..8337e012c 100644 --- a/src/main/java/com/simibubi/create/events/ClientEvents.java +++ b/src/main/java/com/simibubi/create/events/ClientEvents.java @@ -93,7 +93,7 @@ import net.minecraftforge.fml.common.Mod.EventBusSubscriber; import net.minecraftforge.fml.event.lifecycle.FMLLoadCompleteEvent; import net.minecraftforge.fmlclient.ConfigGuiHandler; -@EventBusSubscriber(value = Dist.CLIENT) +@EventBusSubscriber(Dist.CLIENT) public class ClientEvents { private static final String ITEM_PREFIX = "item." + Create.ID; @@ -341,23 +341,29 @@ public class ClientEvents { } } - @SubscribeEvent - public static void registerClientReloadListeners(RegisterClientReloadListenersEvent event) { - event.registerReloadListener(CreateClient.RESOURCE_RELOAD_LISTENER); - } + @EventBusSubscriber(value = Dist.CLIENT, bus = EventBusSubscriber.Bus.MOD) + public static class ModBusEvents { - @SubscribeEvent - public static void addEntityRendererLayers(EntityRenderersEvent.AddLayers event) { - EntityRenderDispatcher dispatcher = Minecraft.getInstance().getEntityRenderDispatcher(); - CopperBacktankArmorLayer.registerOnAll(dispatcher); - } + @SubscribeEvent + public static void registerClientReloadListeners(RegisterClientReloadListenersEvent event) { + event.registerReloadListener(CreateClient.RESOURCE_RELOAD_LISTENER); + } + + @SubscribeEvent + public static void addEntityRendererLayers(EntityRenderersEvent.AddLayers event) { + EntityRenderDispatcher dispatcher = Minecraft.getInstance().getEntityRenderDispatcher(); + CopperBacktankArmorLayer.registerOnAll(dispatcher); + } + + @SubscribeEvent + public static void loadCompleted(FMLLoadCompleteEvent event) { + ModContainer createContainer = ModList.get() + .getModContainerById(Create.ID) + .orElseThrow(() -> new IllegalStateException("Create Mod Container missing after loadCompleted")); + createContainer.registerExtensionPoint(ConfigGuiHandler.ConfigGuiFactory.class, + () -> new ConfigGuiHandler.ConfigGuiFactory((mc, previousScreen) -> BaseConfigScreen.forCreate(previousScreen))); + } - public static void loadCompleted(FMLLoadCompleteEvent event) { - ModContainer createContainer = ModList.get() - .getModContainerById(Create.ID) - .orElseThrow(() -> new IllegalStateException("Create Mod Container missing after loadCompleted")); - createContainer.registerExtensionPoint(ConfigGuiHandler.ConfigGuiFactory.class, - () -> new ConfigGuiHandler.ConfigGuiFactory((mc, previousScreen) -> BaseConfigScreen.forCreate(previousScreen))); } } diff --git a/src/main/java/com/simibubi/create/events/CommonEvents.java b/src/main/java/com/simibubi/create/events/CommonEvents.java index ea306dfa5..bcfb5e08c 100644 --- a/src/main/java/com/simibubi/create/events/CommonEvents.java +++ b/src/main/java/com/simibubi/create/events/CommonEvents.java @@ -19,6 +19,7 @@ import com.simibubi.create.foundation.utility.Iterate; import com.simibubi.create.foundation.utility.ServerSpeedProvider; import com.simibubi.create.foundation.utility.WorldAttached; import com.simibubi.create.foundation.utility.recipe.RecipeFinder; +import com.simibubi.create.foundation.worldgen.AllWorldFeatures; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; @@ -32,6 +33,7 @@ import net.minecraft.world.level.Level; import net.minecraft.world.level.LevelAccessor; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.material.FluidState; +import net.minecraftforge.common.capabilities.RegisterCapabilitiesEvent; import net.minecraftforge.event.AddReloadListenerEvent; import net.minecraftforge.event.AttachCapabilitiesEvent; import net.minecraftforge.event.RegisterCommandsEvent; @@ -44,8 +46,10 @@ import net.minecraftforge.event.entity.player.AttackEntityEvent; import net.minecraftforge.event.entity.player.PlayerEvent; import net.minecraftforge.event.entity.player.PlayerEvent.PlayerLoggedInEvent; import net.minecraftforge.event.world.BlockEvent.FluidPlaceBlockEvent; +import net.minecraftforge.event.world.BiomeLoadingEvent; import net.minecraftforge.event.world.ChunkEvent; import net.minecraftforge.event.world.WorldEvent; +import net.minecraftforge.eventbus.api.EventPriority; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.common.Mod.EventBusSubscriber; import net.minecraftforge.fmlserverevents.FMLServerStoppingEvent; @@ -172,6 +176,11 @@ public class CommonEvents { CapabilityMinecartController.startTracking(event); } + @SubscribeEvent(priority = EventPriority.HIGH) + public static void onBiomeLoad(BiomeLoadingEvent event) { + AllWorldFeatures.reload(event); + } + public static void leftClickEmpty(ServerPlayer player) { ItemStack stack = player.getMainHandItem(); if (stack.getItem() instanceof ZapperItem) { @@ -179,4 +188,14 @@ public class CommonEvents { } } + @EventBusSubscriber(bus = EventBusSubscriber.Bus.MOD) + public static class ModBusEvents { + + @SubscribeEvent + public static void registerCapabilities(RegisterCapabilitiesEvent event) { + event.register(CapabilityMinecartController.class); + } + + } + } diff --git a/src/main/java/com/simibubi/create/events/InputEvents.java b/src/main/java/com/simibubi/create/events/InputEvents.java index 36a30a317..0d4029f51 100644 --- a/src/main/java/com/simibubi/create/events/InputEvents.java +++ b/src/main/java/com/simibubi/create/events/InputEvents.java @@ -15,17 +15,17 @@ import net.minecraftforge.client.event.InputEvent.MouseScrollEvent; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.common.Mod.EventBusSubscriber; -@EventBusSubscriber(value = Dist.CLIENT) +@EventBusSubscriber(Dist.CLIENT) public class InputEvents { @SubscribeEvent public static void onKeyInput(KeyInputEvent event) { - int key = event.getKey(); - boolean pressed = !(event.getAction() == 0); - if (Minecraft.getInstance().screen != null) return; + int key = event.getKey(); + boolean pressed = !(event.getAction() == 0); + CreateClient.SCHEMATIC_HANDLER.onKeyInput(key, pressed); ToolboxHandlerClient.onKeyInput(key, pressed); } diff --git a/src/main/java/com/simibubi/create/foundation/block/render/SpriteShifter.java b/src/main/java/com/simibubi/create/foundation/block/render/SpriteShifter.java index 26d2d02fa..dbca39ce3 100644 --- a/src/main/java/com/simibubi/create/foundation/block/render/SpriteShifter.java +++ b/src/main/java/com/simibubi/create/foundation/block/render/SpriteShifter.java @@ -10,8 +10,12 @@ import com.simibubi.create.Create; import net.minecraft.client.renderer.texture.TextureAtlas; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.inventory.InventoryMenu; +import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.client.event.TextureStitchEvent; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod.EventBusSubscriber; +@EventBusSubscriber(value = Dist.CLIENT, bus = EventBusSubscriber.Bus.MOD) public class SpriteShifter { protected static final Map ENTRY_CACHE = new HashMap<>(); @@ -35,6 +39,7 @@ public class SpriteShifter { return ENTRY_CACHE.values().stream().map(SpriteShiftEntry::getTargetResourceLocation).collect(Collectors.toList()); } + @SubscribeEvent public static void onTextureStitchPre(TextureStitchEvent.Pre event) { if (!event.getMap() .location() @@ -45,6 +50,7 @@ public class SpriteShifter { .forEach(event::addSprite); } + @SubscribeEvent public static void onTextureStitchPost(TextureStitchEvent.Post event) { if (!event.getMap() .location() diff --git a/src/main/java/com/simibubi/create/foundation/config/AllConfigs.java b/src/main/java/com/simibubi/create/foundation/config/AllConfigs.java index cb3d84258..756383840 100644 --- a/src/main/java/com/simibubi/create/foundation/config/AllConfigs.java +++ b/src/main/java/com/simibubi/create/foundation/config/AllConfigs.java @@ -10,10 +10,13 @@ import org.apache.commons.lang3.tuple.Pair; import com.simibubi.create.foundation.block.BlockStressValues; import net.minecraftforge.common.ForgeConfigSpec; +import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.ModLoadingContext; +import net.minecraftforge.fml.common.Mod.EventBusSubscriber; import net.minecraftforge.fml.config.ModConfig; import net.minecraftforge.fml.event.config.ModConfigEvent; +@EventBusSubscriber(bus = EventBusSubscriber.Bus.MOD) public class AllConfigs { private static final Map CONFIGS = new EnumMap<>(ModConfig.Type.class); @@ -50,6 +53,7 @@ public class AllConfigs { BlockStressValues.registerProvider(context.getActiveNamespace(), SERVER.kinetics.stressValues); } + @SubscribeEvent public static void onLoad(ModConfigEvent.Loading event) { for (ConfigBase config : CONFIGS.values()) if (config.specification == event.getConfig() @@ -57,6 +61,7 @@ public class AllConfigs { config.onLoad(); } + @SubscribeEvent public static void onReload(ModConfigEvent.Reloading event) { for (ConfigBase config : CONFIGS.values()) if (config.specification == event.getConfig() diff --git a/src/main/java/com/simibubi/create/foundation/config/ui/BaseConfigScreen.java b/src/main/java/com/simibubi/create/foundation/config/ui/BaseConfigScreen.java index 60c936aa7..03260c5c7 100644 --- a/src/main/java/com/simibubi/create/foundation/config/ui/BaseConfigScreen.java +++ b/src/main/java/com/simibubi/create/foundation/config/ui/BaseConfigScreen.java @@ -30,10 +30,10 @@ import net.minecraftforge.fml.config.ModConfig; public class BaseConfigScreen extends ConfigScreen { public static final DelegatedStencilElement.ElementRenderer DISABLED_RENDERER = (ms, width, height, alpha) -> UIRenderHelper.angledGradient(ms, 0, 0, height / 2, height, width, Theme.p(Theme.Key.BUTTON_DISABLE)); - private static final Map> defaults = new HashMap<>(); + private static final Map> DEFAULTS = new HashMap<>(); static { - defaults.put("create", (base) -> base + DEFAULTS.put(Create.ID, (base) -> base .withTitles("Client Settings", "World Generation Settings", "Gameplay Settings") .withSpecs(AllConfigs.CLIENT.specification, AllConfigs.COMMON.specification, AllConfigs.SERVER.specification) ); @@ -52,7 +52,7 @@ public class BaseConfigScreen extends ConfigScreen { if (modID.equals(Create.ID)) return; - defaults.put(modID, transform); + DEFAULTS.put(modID, transform); } public static BaseConfigScreen forCreate(Screen parent) { @@ -79,8 +79,8 @@ public class BaseConfigScreen extends ConfigScreen { super(parent); this.modID = modID; - if (defaults.containsKey(modID)) - defaults.get(modID).apply(this); + if (DEFAULTS.containsKey(modID)) + DEFAULTS.get(modID).apply(this); else { this.searchForSpecsInModContainer(); } diff --git a/src/main/java/com/simibubi/create/foundation/fluid/FluidRenderer.java b/src/main/java/com/simibubi/create/foundation/fluid/FluidRenderer.java index b1ae88b42..43809fa5c 100644 --- a/src/main/java/com/simibubi/create/foundation/fluid/FluidRenderer.java +++ b/src/main/java/com/simibubi/create/foundation/fluid/FluidRenderer.java @@ -106,7 +106,6 @@ public class FluidRenderer { light = (light & 0xF00000) | luminosity << 4; Vec3 center = new Vec3(xMin + (xMax - xMin) / 2, yMin + (yMax - yMin) / 2, zMin + (zMax - zMin) / 2); - MatrixTransformStack msr = MatrixTransformStack.of(ms); ms.pushPose(); if (fluidStack.getFluid() .getAttributes() @@ -120,27 +119,16 @@ public class FluidRenderer { if (side == Direction.DOWN && !renderBottom) continue; + boolean positive = side.getAxisDirection() == AxisDirection.POSITIVE; if (side.getAxis() .isHorizontal()) { - ms.pushPose(); - - if (side.getAxisDirection() == AxisDirection.NEGATIVE) { - msr.translate(center) - .rotateY(180) - .translateBack(center); - side = Direction.get(AxisDirection.POSITIVE, side.getAxis()); - } - - boolean X = side.getAxis() == Axis.X; - renderTiledHorizontalFace(X ? xMax : zMax, side, X ? zMin : xMin, yMin, X ? zMax : xMax, yMax, builder, + boolean x = side.getAxis() == Axis.X; + renderTiledHorizontalFace(positive ? (x ? xMax : zMax) : (x ? xMin : zMin), side, x ? zMin : xMin, yMin, x ? zMax : xMax, yMax, builder, ms, light, color, fluidTexture); - - ms.popPose(); - continue; + } else { + renderTiledVerticalFace(positive ? yMax : yMin, side, xMin, zMin, xMax, zMax, builder, ms, + light, color, fluidTexture); } - - renderTiledVerticalFace(side == Direction.UP ? yMax : yMin, side, xMin, zMin, xMax, zMax, builder, ms, - light, color, fluidTexture); } ms.popPose(); @@ -149,6 +137,8 @@ public class FluidRenderer { private static void renderTiledVerticalFace(float y, Direction face, float xMin, float zMin, float xMax, float zMax, VertexConsumer builder, PoseStack ms, int light, int color, TextureAtlasSprite texture) { + boolean positive = face.getAxisDirection() == Direction.AxisDirection.POSITIVE; + float x2 = 0; float z2 = 0; for (float x1 = xMin; x1 < xMax; x1 = x2) { @@ -161,41 +151,40 @@ public class FluidRenderer { float u2 = texture.getU(x2 == xMax ? local(x2) * 16 : 16); float v2 = texture.getV(z2 == zMax ? local(z2) * 16 : 16); - putVertex(builder, ms, x1, y, z2, color, u1, v2, face, light); - putVertex(builder, ms, x2, y, z2, color, u2, v2, face, light); - putVertex(builder, ms, x2, y, z1, color, u2, v1, face, light); - putVertex(builder, ms, x1, y, z1, color, u1, v1, face, light); + putVertex(builder, ms, x1, y, positive ? z1 : z2, color, u1, v1, face, light); + putVertex(builder, ms, x1, y, positive ? z2 : z1, color, u1, v2, face, light); + putVertex(builder, ms, x2, y, positive ? z2 : z1, color, u2, v2, face, light); + putVertex(builder, ms, x2, y, positive ? z1 : z2, color, u2, v1, face, light); } } } private static void renderTiledHorizontalFace(float h, Direction face, float hMin, float yMin, float hMax, float yMax, VertexConsumer builder, PoseStack ms, int light, int color, TextureAtlasSprite texture) { - boolean X = face.getAxis() == Axis.X; + boolean positive = face.getAxisDirection() == Direction.AxisDirection.POSITIVE; + boolean x = face.getAxis() == Axis.X; float h2 = 0; float y2 = 0; - for (float h1 = hMin; h1 < hMax; h1 = h2) { h2 = Math.min((int) (h1 + 1), hMax); for (float y1 = yMin; y1 < yMax; y1 = y2) { y2 = Math.min((int) (y1 + 1), yMax); - int multiplier = texture.getWidth() == 32 ? 8 : 16; - float u1 = texture.getU(local(h1) * multiplier); - float v1 = texture.getV(local(y1) * multiplier); - float u2 = texture.getU(h2 == hMax ? local(h2) * multiplier : multiplier); - float v2 = texture.getV(y2 == yMax ? local(y2) * multiplier : multiplier); + float u1 = texture.getU(local(h1) * 16); + float v1 = texture.getV(local(y1) * 16); + float u2 = texture.getU(h2 == hMax ? local(h2) * 16 : 16); + float v2 = texture.getV(y2 == yMax ? local(y2) * 16 : 16); - float x1 = X ? h : h1; - float x2 = X ? h : h2; - float z1 = X ? h1 : h; - float z2 = X ? h2 : h; + float x1 = x ? h : (positive ? h1 : h2); + float x2 = x ? h : (positive ? h2 : h1); + float z1 = x ? (positive ? h1 : h2) : h; + float z2 = x ? (positive ? h2 : h1) : h; - putVertex(builder, ms, x2, y2, z1, color, u1, v2, face, light); - putVertex(builder, ms, x1, y2, z2, color, u2, v2, face, light); - putVertex(builder, ms, x1, y1, z2, color, u2, v1, face, light); - putVertex(builder, ms, x2, y1, z1, color, u1, v1, face, light); + putVertex(builder, ms, x1, y2, z2, color, u1, v1, face, light); + putVertex(builder, ms, x1, y1, z2, color, u1, v2, face, light); + putVertex(builder, ms, x2, y1, z1, color, u2, v2, face, light); + putVertex(builder, ms, x2, y2, z1, color, u2, v1, face, light); } } } @@ -209,20 +198,19 @@ public class FluidRenderer { private static void putVertex(VertexConsumer builder, PoseStack ms, float x, float y, float z, int color, float u, float v, Direction face, int light) { - Vec3i n = face.getNormal(); + Vec3i normal = face.getNormal(); Pose peek = ms.last(); - int ff = 0xff; - int a = color >> 24 & ff; - int r = color >> 16 & ff; - int g = color >> 8 & ff; - int b = color & ff; + int a = color >> 24 & 0xff; + int r = color >> 16 & 0xff; + int g = color >> 8 & 0xff; + int b = color & 0xff; builder.vertex(peek.pose(), x, y, z) .color(r, g, b, a) .uv(u, v) .overlayCoords(OverlayTexture.NO_OVERLAY) .uv2(light) - .normal(peek.normal(), n.getX(), n.getY(), n.getZ()) + .normal(peek.normal(), normal.getX(), normal.getY(), normal.getZ()) .endVertex(); } diff --git a/src/main/java/com/simibubi/create/foundation/render/CreateContexts.java b/src/main/java/com/simibubi/create/foundation/render/CreateContexts.java index 20e3da3c4..12342701b 100644 --- a/src/main/java/com/simibubi/create/foundation/render/CreateContexts.java +++ b/src/main/java/com/simibubi/create/foundation/render/CreateContexts.java @@ -13,6 +13,7 @@ import com.jozufozu.flywheel.backend.source.Resolver; import com.jozufozu.flywheel.core.WorldContext; import com.jozufozu.flywheel.event.GatherContextEvent; import com.jozufozu.flywheel.util.ResourceUtil; +import com.simibubi.create.Create; import com.simibubi.create.content.contraptions.components.structureMovement.render.ContraptionProgram; import net.minecraft.resources.ResourceLocation; @@ -21,7 +22,7 @@ import net.minecraftforge.api.distmarker.OnlyIn; @OnlyIn(Dist.CLIENT) public class CreateContexts { - private static final ResourceLocation CONTRAPTION = new ResourceLocation("create", "context/contraption"); + private static final ResourceLocation CONTRAPTION = Create.asResource("context/contraption"); public static WorldContext CWORLD; public static WorldContext STRUCTURE; diff --git a/src/main/java/com/simibubi/create/foundation/utility/worldWrappers/PlacementSimulationWorld.java b/src/main/java/com/simibubi/create/foundation/utility/worldWrappers/PlacementSimulationWorld.java index 2d6460ece..a49fb790b 100644 --- a/src/main/java/com/simibubi/create/foundation/utility/worldWrappers/PlacementSimulationWorld.java +++ b/src/main/java/com/simibubi/create/foundation/utility/worldWrappers/PlacementSimulationWorld.java @@ -12,6 +12,7 @@ import com.jozufozu.flywheel.backend.IFlywheelWorld; import net.minecraft.core.BlockPos; import net.minecraft.core.SectionPos; import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.state.BlockState; @@ -73,7 +74,7 @@ public class PlacementSimulationWorld extends WrappedWorld implements IFlywheelW lighter.updateSectionStatus(sectionPos, false); } - if ((flags & 128) == 0) { + if ((flags & Block.UPDATE_SUPPRESS_LIGHT) == 0) { lighter.checkBlock(pos); } diff --git a/src/main/resources/assets/create/flywheel/shaders/context/contraption.glsl b/src/main/resources/assets/create/flywheel/shaders/context/contraption.glsl index caa456d53..61d0b80c2 100644 --- a/src/main/resources/assets/create/flywheel/shaders/context/contraption.glsl +++ b/src/main/resources/assets/create/flywheel/shaders/context/contraption.glsl @@ -1,7 +1,5 @@ #use "flywheel:context/fog.glsl" -out vec3 BoxCoord; - uniform sampler3D uLightVolume; uniform sampler2D uBlockAtlas; @@ -25,6 +23,8 @@ void FLWFinalizeNormal(inout vec3 normal) { #if defined(VERTEX_SHADER) +out vec3 BoxCoord; + void FLWFinalizeWorldPos(inout vec4 worldPos) { worldPos = uModel * worldPos; @@ -40,6 +40,8 @@ void FLWFinalizeWorldPos(inout vec4 worldPos) { #elif defined(FRAGMENT_SHADER) #use "flywheel:core/lightutil.glsl" +in vec3 BoxCoord; + out vec4 FragColor; vec4 FLWBlockTexture(vec2 texCoords) {