From cf607f24a0f524b4cbced171bd55598cf56935ff Mon Sep 17 00:00:00 2001 From: paulevsGitch Date: Thu, 26 Nov 2020 16:13:34 +0300 Subject: [PATCH] Tenanea fixes and glow --- .../betterend/blocks/BlockTenaneaFlowers.java | 3 +- src/main/java/ru/betterend/util/MHelper.java | 99 +++++++++++++++++++ .../materialmaps/block/tenanea_flowers.json | 3 + .../block/tenanea_outer_leaves.json | 2 +- 4 files changed, 105 insertions(+), 2 deletions(-) create mode 100644 src/main/resources/assets/betterend/materialmaps/block/tenanea_flowers.json diff --git a/src/main/java/ru/betterend/blocks/BlockTenaneaFlowers.java b/src/main/java/ru/betterend/blocks/BlockTenaneaFlowers.java index d78a91ef..3cdad85c 100644 --- a/src/main/java/ru/betterend/blocks/BlockTenaneaFlowers.java +++ b/src/main/java/ru/betterend/blocks/BlockTenaneaFlowers.java @@ -49,8 +49,9 @@ public class BlockTenaneaFlowers extends BlockVine implements IColorProvider { int r = MHelper.floor(MathHelper.lerp(delta, color1.getX(), color2.getX())); int g = MHelper.floor(MathHelper.lerp(delta, color1.getY(), color2.getY())); int b = MHelper.floor(MathHelper.lerp(delta, color1.getZ(), color2.getZ())); + float[] hsb = MHelper.fromRGBtoHSB(r, g, b); - return MHelper.color(r, g, b); + return MHelper.fromHSBtoRGB(hsb[0], MHelper.max(0.5F, hsb[1]), hsb[2]); }; ITEM_PROVIDER = (stack, tintIndex) -> { diff --git a/src/main/java/ru/betterend/util/MHelper.java b/src/main/java/ru/betterend/util/MHelper.java index e8dcf52c..cd39865b 100644 --- a/src/main/java/ru/betterend/util/MHelper.java +++ b/src/main/java/ru/betterend/util/MHelper.java @@ -57,6 +57,10 @@ public class MHelper { return a < b ? a : b; } + public static int min(int a, int b, int c) { + return min(a, min(b, c)); + } + public static int max(int a, int b) { return a > b ? a : b; } @@ -73,6 +77,10 @@ public class MHelper { return max(a, max(b, c)); } + public static int max(int a, int b, int c) { + return max(a, max(b, c)); + } + public static boolean isEven(int num) { return (num & 1) == 0; } @@ -143,4 +151,95 @@ public class MHelper { public static int pow2(int i) { return i * i; } + + public static int fromHSBtoRGB(float hue, float saturation, float brightness) { + int red = 0; + int green = 0; + int blue = 0; + if (saturation == 0.0F) { + red = green = blue = (int) (brightness * 255.0F + 0.5F); + } else { + float var6 = (hue - (float) Math.floor((double) hue)) * 6.0F; + float var7 = var6 - (float) Math.floor((double) var6); + float var8 = brightness * (1.0F - saturation); + float var9 = brightness * (1.0F - saturation * var7); + float var10 = brightness * (1.0F - saturation * (1.0F - var7)); + switch ((int) var6) { + case 0 : + red = (int) (brightness * 255.0F + 0.5F); + green = (int) (var10 * 255.0F + 0.5F); + blue = (int) (var8 * 255.0F + 0.5F); + break; + case 1 : + red = (int) (var9 * 255.0F + 0.5F); + green = (int) (brightness * 255.0F + 0.5F); + blue = (int) (var8 * 255.0F + 0.5F); + break; + case 2 : + red = (int) (var8 * 255.0F + 0.5F); + green = (int) (brightness * 255.0F + 0.5F); + blue = (int) (var10 * 255.0F + 0.5F); + break; + case 3 : + red = (int) (var8 * 255.0F + 0.5F); + green = (int) (var9 * 255.0F + 0.5F); + blue = (int) (brightness * 255.0F + 0.5F); + break; + case 4 : + red = (int) (var10 * 255.0F + 0.5F); + green = (int) (var8 * 255.0F + 0.5F); + blue = (int) (brightness * 255.0F + 0.5F); + break; + case 5 : + red = (int) (brightness * 255.0F + 0.5F); + green = (int) (var8 * 255.0F + 0.5F); + blue = (int) (var9 * 255.0F + 0.5F); + } + } + + return ALPHA | red << 16 | green << 8 | blue << 0; + } + + public static float[] fromRGBtoHSB(int r, int g, int b) { + float[] values = new float[3]; + + int max = max(r, g, b); + int min = min(r, g, b); + + float brightness = (float) max / 255.0F; + float saturation; + if (max != 0) { + saturation = (float) (max - min) / (float) max; + } else { + saturation = 0.0F; + } + + float hue; + if (saturation == 0.0F) { + hue = 0.0F; + } + else { + float var9 = (float) (max - r) / (float) (max - min); + float var10 = (float) (max - g) / (float) (max - min); + float var11 = (float) (max - b) / (float) (max - min); + if (r == max) { + hue = var11 - var10; + } else if (g == max) { + hue = 2.0F + var9 - var11; + } else { + hue = 4.0F + var10 - var9; + } + + hue /= 6.0F; + if (hue < 0.0F) { + ++hue; + } + } + + values[0] = hue; + values[1] = saturation; + values[2] = brightness; + + return values; + } } diff --git a/src/main/resources/assets/betterend/materialmaps/block/tenanea_flowers.json b/src/main/resources/assets/betterend/materialmaps/block/tenanea_flowers.json new file mode 100644 index 00000000..ff78dfb5 --- /dev/null +++ b/src/main/resources/assets/betterend/materialmaps/block/tenanea_flowers.json @@ -0,0 +1,3 @@ +{ + "defaultMaterial": "betterend:wave_glow_inc" +} diff --git a/src/main/resources/assets/betterend/materialmaps/block/tenanea_outer_leaves.json b/src/main/resources/assets/betterend/materialmaps/block/tenanea_outer_leaves.json index 11eeb91f..45210670 100644 --- a/src/main/resources/assets/betterend/materialmaps/block/tenanea_outer_leaves.json +++ b/src/main/resources/assets/betterend/materialmaps/block/tenanea_outer_leaves.json @@ -1,3 +1,3 @@ { - "defaultMaterial": "betterend:leaves_noshade" + "defaultMaterial": "betterend:waving_wall" }