diff --git a/gradle.properties b/gradle.properties index 6111c4511..c420c269d 100644 --- a/gradle.properties +++ b/gradle.properties @@ -23,7 +23,7 @@ use_parchment = true # dependency versions registrate_version = MC1.20-1.3.3 flywheel_minecraft_version = 1.20.1 -flywheel_version = 1.0.0-alpha-66 +flywheel_version = 1.0.0-alpha-67 jei_minecraft_version = 1.20.1 jei_version = 15.2.0.22 curios_minecraft_version = 1.20.1 diff --git a/src/main/java/com/simibubi/create/AllPartialModels.java b/src/main/java/com/simibubi/create/AllPartialModels.java index 9d6c2b36a..e3c774b36 100644 --- a/src/main/java/com/simibubi/create/AllPartialModels.java +++ b/src/main/java/com/simibubi/create/AllPartialModels.java @@ -8,7 +8,6 @@ import java.util.Map; import com.jozufozu.flywheel.lib.model.baked.PartialModel; import com.simibubi.create.content.fluids.FluidTransportBehaviour; -import com.simibubi.create.foundation.render.CutoutPartial; import com.simibubi.create.foundation.utility.Couple; import com.simibubi.create.foundation.utility.Iterate; import com.simibubi.create.foundation.utility.Lang; @@ -36,7 +35,7 @@ public class AllPartialModels { ANDESITE_BELT_COVER_Z = block("belt_cover/andesite_belt_cover_z"), BRASS_BELT_COVER_Z = block("belt_cover/brass_belt_cover_z"), - ENCASED_FAN_INNER = cutoutBlock("encased_fan/propeller"), HAND_CRANK_HANDLE = block("hand_crank/handle"), + ENCASED_FAN_INNER = block("encased_fan/propeller"), HAND_CRANK_HANDLE = block("hand_crank/handle"), MECHANICAL_PRESS_HEAD = block("mechanical_press/head"), MECHANICAL_MIXER_POLE = block("mechanical_mixer/pole"), MECHANICAL_MIXER_HEAD = block("mechanical_mixer/head"), MECHANICAL_CRAFTER_LID = block("mechanical_crafter/lid"), @@ -52,7 +51,7 @@ public class AllPartialModels { GAUGE_INDICATOR = block("gauge/indicator"), GAUGE_HEAD_SPEED = block("gauge/speedometer/head"), GAUGE_HEAD_STRESS = block("gauge/stressometer/head"), BEARING_TOP = block("bearing/top"), BEARING_TOP_WOODEN = block("bearing/top_wooden"), DRILL_HEAD = block("mechanical_drill/head"), - HARVESTER_BLADE = cutoutBlock("mechanical_harvester/blade"), DEPLOYER_POLE = block("deployer/pole"), + HARVESTER_BLADE = block("mechanical_harvester/blade"), DEPLOYER_POLE = block("deployer/pole"), DEPLOYER_HAND_POINTING = block("deployer/hand_pointing"), DEPLOYER_HAND_PUNCHING = block("deployer/hand_punching"), DEPLOYER_HAND_HOLDING = block("deployer/hand_holding"), ANALOG_LEVER_HANDLE = block("analog_lever/handle"), @@ -204,7 +203,7 @@ public class AllPartialModels { PIPE_ATTACHMENTS.put(type, map); } for (DyeColor color : DyeColor.values()) - TOOLBOX_LIDS.put(color, cutoutBlock("toolbox/lid/" + Lang.asId(color.name()))); + TOOLBOX_LIDS.put(color, block("toolbox/lid/" + Lang.asId(color.name()))); for (Direction d : Iterate.horizontalDirections) METAL_GIRDER_BRACKETS.put(d, block("metal_girder/bracket_" + Lang.asId(d.name()))); for (int i = 0; i < 8; i++) @@ -223,10 +222,6 @@ public class AllPartialModels { return new PartialModel(Create.asResource("block/" + path)); } - private static PartialModel cutoutBlock(String path) { - return new CutoutPartial(Create.asResource("block/" + path)); - } - private static PartialModel entity(String path) { return new PartialModel(Create.asResource("entity/" + path)); } diff --git a/src/main/java/com/simibubi/create/content/trains/track/TrackVisual.java b/src/main/java/com/simibubi/create/content/trains/track/TrackVisual.java index 84b9e6558..535f34ee6 100644 --- a/src/main/java/com/simibubi/create/content/trains/track/TrackVisual.java +++ b/src/main/java/com/simibubi/create/content/trains/track/TrackVisual.java @@ -1,16 +1,14 @@ package com.simibubi.create.content.trains.track; -import java.util.ArrayList; import java.util.List; import java.util.Objects; import java.util.function.Consumer; +import java.util.function.LongConsumer; import javax.annotation.Nullable; import com.jozufozu.flywheel.api.instance.Instance; import com.jozufozu.flywheel.api.visualization.VisualizationContext; -import com.jozufozu.flywheel.lib.box.Box; -import com.jozufozu.flywheel.lib.box.MutableBox; import com.jozufozu.flywheel.lib.instance.InstanceTypes; import com.jozufozu.flywheel.lib.instance.TransformedInstance; import com.jozufozu.flywheel.lib.model.Models; @@ -25,6 +23,7 @@ import com.simibubi.create.foundation.utility.Couple; import com.simibubi.create.foundation.utility.Iterate; import net.minecraft.core.BlockPos; +import net.minecraft.core.SectionPos; public class TrackVisual extends AbstractBlockEntityVisual { @@ -34,24 +33,25 @@ public class TrackVisual extends AbstractBlockEntityVisual { super(context, track); } + @Override + public void init(float partialTick) { + visuals = blockEntity.connections.values() + .stream() + .map(this::createInstance) + .filter(Objects::nonNull) + .toList(); + + super.init(partialTick); + } + @Override public void update(float pt) { if (blockEntity.connections.isEmpty()) return; _delete(); - visuals = blockEntity.connections.values() - .stream() - .map(this::createInstance) - .filter(Objects::nonNull) - .toList(); - } - - public Box getVolume() { - List out = new ArrayList<>(); - out.addAll(blockEntity.connections.keySet()); - out.addAll(blockEntity.connections.keySet()); - return MutableBox.containingAll(out); + init(pt); + notifier.notifySectionsChanged(); } @Override @@ -75,6 +75,30 @@ public class TrackVisual extends AbstractBlockEntityVisual { visuals.forEach(BezierTrackVisual::delete); } + @Override + public void collectLightSections(LongConsumer consumer) { + if (blockEntity.connections.isEmpty()) { + return; + } + int minX = Integer.MAX_VALUE; + int minY = Integer.MAX_VALUE; + int minZ = Integer.MAX_VALUE; + int maxX = Integer.MIN_VALUE; + int maxY = Integer.MIN_VALUE; + int maxZ = Integer.MIN_VALUE; + for (BlockPos pos : blockEntity.connections.keySet()) { + minX = Math.min(minX, pos.getX()); + minY = Math.min(minY, pos.getY()); + minZ = Math.min(minZ, pos.getZ()); + maxX = Math.max(maxX, pos.getX()); + maxY = Math.max(maxY, pos.getY()); + maxZ = Math.max(maxZ, pos.getZ()); + } + SectionPos.betweenClosedStream(SectionPos.blockToSectionCoord(minX), SectionPos.blockToSectionCoord(minY), SectionPos.blockToSectionCoord(minZ), SectionPos.blockToSectionCoord(maxX), SectionPos.blockToSectionCoord(maxY), SectionPos.blockToSectionCoord(maxZ)) + .mapToLong(SectionPos::asLong) + .forEach(consumer); + } + @Override public void collectCrumblingInstances(Consumer consumer) { if (visuals == null) @@ -126,15 +150,15 @@ public class TrackVisual extends AbstractBlockEntityVisual { var modelIndex = i - 1; ties[modelIndex].setTransform(pose) - .mulPose(segment.tieTransform.pose()) - .mulNormal(segment.tieTransform.normal()); + .transform(segment.tieTransform) + .setChanged(); tiesLightPos[modelIndex] = segment.lightPosition.offset(tePosition); for (boolean first : Iterate.trueAndFalse) { Pose transform = segment.railTransforms.get(first); (first ? this.left : this.right)[modelIndex].setTransform(pose) - .mulPose(transform.pose()) - .mulNormal(transform.normal()); + .transform(transform) + .setChanged(); (first ? leftLightPos : rightLightPos)[modelIndex] = segment.lightPosition.offset(tePosition); } } @@ -155,11 +179,14 @@ public class TrackVisual extends AbstractBlockEntityVisual { void updateLight() { for (int i = 0; i < ties.length; i++) - ties[i].updateLight(level, tiesLightPos[i]); + ties[i].updateLight(level, tiesLightPos[i]) + .setChanged(); for (int i = 0; i < left.length; i++) - left[i].updateLight(level, leftLightPos[i]); + left[i].updateLight(level, leftLightPos[i]) + .setChanged(); for (int i = 0; i < right.length; i++) - right[i].updateLight(level, rightLightPos[i]); + right[i].updateLight(level, rightLightPos[i]) + .setChanged(); if (girder != null) girder.updateLight(); } @@ -208,15 +235,15 @@ public class TrackVisual extends AbstractBlockEntityVisual { for (boolean first : Iterate.trueAndFalse) { Pose beamTransform = segment.beams.get(first); beams.get(first)[modelIndex].setTransform(pose) - .mulPose(beamTransform.pose()) - .mulNormal(beamTransform.normal()); + .transform(beamTransform) + .setChanged(); for (boolean top : Iterate.trueAndFalse) { Pose beamCapTransform = segment.beamCaps.get(top) .get(first); beamCaps.get(top) .get(first)[modelIndex].setTransform(pose) - .mulPose(beamCapTransform.pose()) - .mulNormal(beamCapTransform.normal()); + .transform(beamCapTransform) + .setChanged(); } } } @@ -238,11 +265,13 @@ public class TrackVisual extends AbstractBlockEntityVisual { void updateLight() { beams.forEach(arr -> { for (int i = 0; i < arr.length; i++) - arr[i].updateLight(level, lightPos[i]); + arr[i].updateLight(level, lightPos[i]) + .setChanged(); }); beamCaps.forEach(c -> c.forEach(arr -> { for (int i = 0; i < arr.length; i++) - arr[i].updateLight(level, lightPos[i]); + arr[i].updateLight(level, lightPos[i]) + .setChanged(); })); } diff --git a/src/main/java/com/simibubi/create/foundation/render/CutoutPartial.java b/src/main/java/com/simibubi/create/foundation/render/CutoutPartial.java deleted file mode 100644 index 923b02145..000000000 --- a/src/main/java/com/simibubi/create/foundation/render/CutoutPartial.java +++ /dev/null @@ -1,126 +0,0 @@ -package com.simibubi.create.foundation.render; - -import java.util.List; - -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import com.jozufozu.flywheel.lib.model.baked.PartialModel; -import com.mojang.blaze3d.vertex.PoseStack; - -import net.minecraft.client.renderer.RenderType; -import net.minecraft.client.renderer.block.model.BakedQuad; -import net.minecraft.client.renderer.block.model.ItemOverrides; -import net.minecraft.client.renderer.texture.TextureAtlasSprite; -import net.minecraft.client.resources.model.BakedModel; -import net.minecraft.core.BlockPos; -import net.minecraft.core.Direction; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.util.RandomSource; -import net.minecraft.world.item.ItemDisplayContext; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.level.BlockAndTintGetter; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraftforge.client.ChunkRenderTypeSet; -import net.minecraftforge.client.model.data.ModelData; - -public class CutoutPartial extends PartialModel { - public CutoutPartial(ResourceLocation modelLocation) { - super(modelLocation); - } - - @Override - protected void set(BakedModel bakedModel) { - super.set(new Wrapper(bakedModel)); - } - - private record Wrapper(BakedModel inner) implements BakedModel { - private static final ChunkRenderTypeSet CUTOUT = ChunkRenderTypeSet.of(RenderType.cutout()); - - @Override - public @NotNull List getQuads(@Nullable BlockState state, @Nullable Direction side, @NotNull RandomSource rand, @NotNull ModelData data, @Nullable RenderType renderType) { - if (renderType == null) { - return inner.getQuads(state, side, rand, data, null); - } else if (renderType == RenderType.cutout()) { - return inner.getQuads(state, side, rand, data, renderType); - } else { - return List.of(); - } - } - - @Override - public ChunkRenderTypeSet getRenderTypes(@NotNull BlockState state, @NotNull RandomSource rand, @NotNull ModelData data) { - return CUTOUT; - } - - @Override - public List getQuads(@Nullable BlockState pState, @Nullable Direction pDirection, RandomSource pRandom) { - return inner.getQuads(pState, pDirection, pRandom); - } - - @Override - public boolean useAmbientOcclusion(BlockState state) { - return inner.useAmbientOcclusion(state); - } - - @Override - public boolean useAmbientOcclusion(BlockState state, RenderType renderType) { - return inner.useAmbientOcclusion(state, renderType); - } - - @Override - public BakedModel applyTransform(ItemDisplayContext transformType, PoseStack poseStack, boolean applyLeftHandTransform) { - return inner.applyTransform(transformType, poseStack, applyLeftHandTransform); - } - - @Override - public @NotNull ModelData getModelData(@NotNull BlockAndTintGetter level, @NotNull BlockPos pos, @NotNull BlockState state, @NotNull ModelData modelData) { - return inner.getModelData(level, pos, state, modelData); - } - - @Override - public TextureAtlasSprite getParticleIcon(@NotNull ModelData data) { - return inner.getParticleIcon(data); - } - - @Override - public List getRenderTypes(ItemStack itemStack, boolean fabulous) { - return inner.getRenderTypes(itemStack, fabulous); - } - - @Override - public List getRenderPasses(ItemStack itemStack, boolean fabulous) { - return inner.getRenderPasses(itemStack, fabulous); - } - - @Override - public boolean useAmbientOcclusion() { - return inner.useAmbientOcclusion(); - } - - @Override - public boolean isGui3d() { - return inner.isGui3d(); - } - - @Override - public boolean usesBlockLight() { - return inner.usesBlockLight(); - } - - @Override - public boolean isCustomRenderer() { - return inner.isCustomRenderer(); - } - - @Override - public TextureAtlasSprite getParticleIcon() { - return inner.getParticleIcon(); - } - - @Override - public ItemOverrides getOverrides() { - return inner.getOverrides(); - } - } -} diff --git a/src/main/resources/assets/create/models/block/encased_fan/propeller.json b/src/main/resources/assets/create/models/block/encased_fan/propeller.json index c149d9ab8..d7a23a150 100644 --- a/src/main/resources/assets/create/models/block/encased_fan/propeller.json +++ b/src/main/resources/assets/create/models/block/encased_fan/propeller.json @@ -5,6 +5,7 @@ "fan_blades": "create:block/fan_blades", "axis": "create:block/axis" }, + "render_type": "minecraft:cutout", "elements": [ { "name": "Shaft", diff --git a/src/main/resources/assets/create/models/block/mechanical_harvester/blade.json b/src/main/resources/assets/create/models/block/mechanical_harvester/blade.json index c3f0f8ab6..ab5eb93be 100644 --- a/src/main/resources/assets/create/models/block/mechanical_harvester/blade.json +++ b/src/main/resources/assets/create/models/block/mechanical_harvester/blade.json @@ -5,6 +5,7 @@ "anvil": "minecraft:block/anvil", "andesite_casing_short": "create:block/andesite_casing_short" }, + "render_type": "minecraft:cutout", "elements": [ { "name": "Wheel", diff --git a/src/main/resources/assets/create/models/block/mechanical_mixer/head.json b/src/main/resources/assets/create/models/block/mechanical_mixer/head.json index 2e4744b63..e949ae1ff 100644 --- a/src/main/resources/assets/create/models/block/mechanical_mixer/head.json +++ b/src/main/resources/assets/create/models/block/mechanical_mixer/head.json @@ -5,7 +5,8 @@ "textures": { "6": "create:block/mixer_head" }, - "elements": [ + "render_type": "minecraft:cutout", + "elements": [ { "name": "MixerCenter", "from": [7, -4, 7], @@ -39,4 +40,4 @@ } } ] -} \ No newline at end of file +} diff --git a/src/main/resources/assets/create/models/block/toolbox/lid/brown.json b/src/main/resources/assets/create/models/block/toolbox/lid/brown.json index f352cd396..62b901111 100644 --- a/src/main/resources/assets/create/models/block/toolbox/lid/brown.json +++ b/src/main/resources/assets/create/models/block/toolbox/lid/brown.json @@ -5,7 +5,8 @@ "0": "create:block/toolbox/brown", "particle": "block/dark_oak_planks" }, - "elements": [ + "render_type": "minecraft:cutout", + "elements": [ { "from": [1, 6, 4], "to": [15, 9, 12], @@ -56,4 +57,4 @@ } ], "display": {} -} \ No newline at end of file +} diff --git a/src/main/resources/assets/create/models/block/track/tie.json b/src/main/resources/assets/create/models/block/track/tie.json index 3f199f479..4278f784e 100644 --- a/src/main/resources/assets/create/models/block/track/tie.json +++ b/src/main/resources/assets/create/models/block/track/tie.json @@ -2,5 +2,6 @@ "parent": "create:block/track/obj_track", "loader": "forge:obj", "flip_v": true, + "render_type": "minecraft:cutout_mipped", "model": "create:models/block/track/tie.obj" -} \ No newline at end of file +}