From 3301f8ff015bb952ca7acce3687fc3655f07c327 Mon Sep 17 00:00:00 2001 From: simibubi <31564874+simibubi@users.noreply.github.com> Date: Fri, 4 Dec 2020 23:31:12 +0100 Subject: [PATCH] Honey, I'm blue! - Evade fluid tinting issues with optifine --- src/generated/resources/.cache/cache | 2 +- .../assets/create/models/block/honey.json | 2 +- .../java/com/simibubi/create/AllFluids.java | 47 ++++++++++++------ .../foundation/data/CreateRegistrate.java | 7 +++ .../create/textures/fluid/honey_flow.png | Bin 17371 -> 3628 bytes .../create/textures/fluid/honey_still.png | Bin 0 -> 247 bytes 6 files changed, 41 insertions(+), 17 deletions(-) create mode 100644 src/main/resources/assets/create/textures/fluid/honey_still.png diff --git a/src/generated/resources/.cache/cache b/src/generated/resources/.cache/cache index 56c325a36..add2b3215 100644 --- a/src/generated/resources/.cache/cache +++ b/src/generated/resources/.cache/cache @@ -753,7 +753,7 @@ a68cd40ffb769b195437107f4a2c2188b222b74a assets/create/models/block/gray_sail.js 17b651233c62b928f0228562a7f6e7a2b7b2d6b7 assets/create/models/block/green_sail.json 1438b8ce54ac5557b8f10dcef94f3525eae19461 assets/create/models/block/green_seat.json cc7ce9b6bc687ad5027a67c3bf22bdf5bcd71674 assets/create/models/block/green_valve_handle.json -5bbe7e5322020d205d2c60bc14e4b45b317a193c assets/create/models/block/honey.json +5163171ed77af879fa06f290bf24b1bb99735c94 assets/create/models/block/honey.json 9730fcb02f679087e81e24c836751e625be6a298 assets/create/models/block/horizontal_framed_glass.json d13df8a5920c5778d98081fb0e97f045e2fd46a2 assets/create/models/block/horizontal_framed_glass_pane_noside.json 3e975bec02e2670ce2b1868cebcbd780a5ebf3f8 assets/create/models/block/horizontal_framed_glass_pane_noside_alt.json diff --git a/src/generated/resources/assets/create/models/block/honey.json b/src/generated/resources/assets/create/models/block/honey.json index 262271bb6..079948a71 100644 --- a/src/generated/resources/assets/create/models/block/honey.json +++ b/src/generated/resources/assets/create/models/block/honey.json @@ -1,5 +1,5 @@ { "textures": { - "particle": "block/honey_block_top" + "particle": "create:fluid/honey_still" } } \ No newline at end of file diff --git a/src/main/java/com/simibubi/create/AllFluids.java b/src/main/java/com/simibubi/create/AllFluids.java index 0666e5c72..5f2277b51 100644 --- a/src/main/java/com/simibubi/create/AllFluids.java +++ b/src/main/java/com/simibubi/create/AllFluids.java @@ -10,14 +10,15 @@ import com.simibubi.create.foundation.data.CreateRegistrate; import com.tterrag.registrate.util.entry.RegistryEntry; import net.minecraft.block.BlockState; -import net.minecraft.block.Blocks; import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.RenderTypeLookup; import net.minecraft.fluid.Fluid; import net.minecraft.fluid.IFluidState; -import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.ILightReader; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.fluids.FluidAttributes; import net.minecraftforge.fluids.ForgeFlowingFluid; public class AllFluids { @@ -39,7 +40,7 @@ public class AllFluids { .register(); public static RegistryEntry HONEY = - REGISTRATE.fluid("honey", new ResourceLocation("block/honey_block_top"), Create.asResource("fluid/honey_flow")) + REGISTRATE.standardFluid("honey", NoColorFluidAttributes::new) .lang(f -> "fluid.create.honey", "Honey") .attributes(b -> b.viscosity(500) .density(1400)) @@ -50,24 +51,23 @@ public class AllFluids { .tag(AllTags.forgeFluidTag("honey")) .register(); - public static RegistryEntry CHOCOLATE = REGISTRATE.standardFluid("chocolate") - .lang(f -> "fluid.create.chocolate", "Chocolate") - .attributes(b -> b.viscosity(500) - .density(1400)) - .properties(p -> p.levelDecreasePerBlock(2) - .tickRate(25) - .slopeFindDistance(3) - .explosionResistance(100f)) - .register(); + public static RegistryEntry CHOCOLATE = + REGISTRATE.standardFluid("chocolate", NoColorFluidAttributes::new) + .lang(f -> "fluid.create.chocolate", "Chocolate") + .attributes(b -> b.viscosity(500) + .density(1400)) + .properties(p -> p.levelDecreasePerBlock(2) + .tickRate(25) + .slopeFindDistance(3) + .explosionResistance(100f)) + .register(); // Load this class public static void register() {} @OnlyIn(Dist.CLIENT) - public static void assignRenderLayers() { - makeTranslucent(HONEY); - } + public static void assignRenderLayers() {} @OnlyIn(Dist.CLIENT) private static void makeTranslucent(RegistryEntry entry) { @@ -90,4 +90,21 @@ public class AllFluids { return null; } + /** + * Removing alpha from tint prevents optifine from forcibly applying biome + * colors to modded fluids (Makes translucent fluids disappear) + */ + private static class NoColorFluidAttributes extends FluidAttributes { + + protected NoColorFluidAttributes(Builder builder, Fluid fluid) { + super(builder, fluid); + } + + @Override + public int getColor(ILightReader world, BlockPos pos) { + return 0x00ffffff; + } + + } + } diff --git a/src/main/java/com/simibubi/create/foundation/data/CreateRegistrate.java b/src/main/java/com/simibubi/create/foundation/data/CreateRegistrate.java index f619a4dc2..f278611be 100644 --- a/src/main/java/com/simibubi/create/foundation/data/CreateRegistrate.java +++ b/src/main/java/com/simibubi/create/foundation/data/CreateRegistrate.java @@ -25,6 +25,7 @@ import com.tterrag.registrate.builders.FluidBuilder; import com.tterrag.registrate.builders.ItemBuilder; import com.tterrag.registrate.util.NonNullLazyValue; import com.tterrag.registrate.util.entry.RegistryEntry; +import com.tterrag.registrate.util.nullness.NonNullBiFunction; import com.tterrag.registrate.util.nullness.NonNullConsumer; import com.tterrag.registrate.util.nullness.NonNullFunction; import com.tterrag.registrate.util.nullness.NonNullSupplier; @@ -143,6 +144,12 @@ public class CreateRegistrate extends AbstractRegistrate { return fluid(name, Create.asResource("fluid/" + name + "_still"), Create.asResource("fluid/" + name + "_flow")); } + public FluidBuilder standardFluid(String name, + NonNullBiFunction attributesFactory) { + return fluid(name, Create.asResource("fluid/" + name + "_still"), Create.asResource("fluid/" + name + "_flow"), + attributesFactory); + } + /* Util */ public static NonNullConsumer connectedTextures(ConnectedTextureBehaviour behavior) { diff --git a/src/main/resources/assets/create/textures/fluid/honey_flow.png b/src/main/resources/assets/create/textures/fluid/honey_flow.png index 2fa7090efa3b7bb716938cbe1e4ec93fd250e3fe..496733dfb820a122ec3d32695a06c117e2632442 100644 GIT binary patch literal 3628 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 literal 0 HcmV?d00001