Inspired by 2020's April Fools' 20w14infinite Snapshot, this mod brings endless randomly generated dimensions into Minecraft.
1package net.lerariemann.infinity.entity.custom;
2
3import net.lerariemann.infinity.util.VersionMethods;
4
5import org.joml.Vector3f;
6
7import java.awt.*;
8//? if <1.21.2 {
9/*import net.minecraft.util.FastColor;
10import net.minecraft.world.entity.animal.Sheep;
11*///?} else {
12import net.minecraft.util.ARGB;
13import net.minecraft.world.entity.animal.sheep.Sheep;
14//?}
15
16import net.minecraft.world.item.DyeColor;
17
18public interface TintableEntity {
19 default Vector3f particleColorFromInt(int i) {
20 float f = (float)(i >> 16 & 0xFF) / 255.0f;
21 float g = (float)(i >> 8 & 0xFF) / 255.0f;
22 float h = (float)(i & 0xFF) / 255.0f;
23 return new Vector3f(f, g, h);
24 }
25
26 static int getColorJeb(int age, int id) {
27 int n = age / 25 + id;
28 int o = DyeColor.values().length;
29 int p = n % o;
30 int q = (n + 1) % o;
31 float r = (float)(age % 25) / 25.0F;
32 //? if =1.21.1 {
33 /*int s = Sheep.getColor(DyeColor.byId(p));
34 int t = Sheep.getColor(DyeColor.byId(q));
35 *///?} else {
36 int s = DyeColor.byId(p).getFireworkColor();
37 int t = DyeColor.byId(q).getFireworkColor();
38 //?}
39
40
41 //? if <1.21.2 {
42 /*return FastColor.ARGB32
43 *///?} else {
44 return ARGB
45 //?}
46 .lerp(r, s, t);
47 }
48
49 int getColorNamed();
50
51 static int getColorNamed(String name, int age, int id) {
52 if ("jeb_".equals(name)) {
53 return TintableEntity.getColorJeb(age, id);
54 }
55 if ("hue".equals(name)) {
56 float hue = age / 400.f + id;
57 hue = hue - (int) hue;
58 return Color.getHSBColor(hue, 1.0f, 1.0f).getRGB();
59 }
60 return -1;
61 }
62
63 default int getColorForRender() {
64 int v = getColorNamed();
65 if (v!=-1) return v;
66 return VersionMethods.opaque(this.getColor());
67 }
68
69 default int getColor() {
70 return 0;
71 }
72}