Skip to content

Commit a4b65cc

Browse files
committed
Add the honey block.
1 parent 03e72f2 commit a4b65cc

File tree

5 files changed

+172
-0
lines changed

5 files changed

+172
-0
lines changed

chunky/src/java/se/llbit/chunky/block/BlockSpec.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1506,6 +1506,8 @@ private Block blockFromTag(String name) {
15061506
int age = stringToInt(tag.get("Properties").get("age"), 3);
15071507
return new FrostedIce(age);
15081508
}
1509+
case "honey_block":
1510+
return new Honey();
15091511
case "spawner":
15101512
return new MinecraftBlockTranslucent(name, Texture.monsterSpawner);
15111513
case "nether_portal": {
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package se.llbit.chunky.block;
2+
3+
import se.llbit.chunky.model.HoneyBlockModel;
4+
import se.llbit.chunky.renderer.scene.Scene;
5+
import se.llbit.chunky.resources.Texture;
6+
import se.llbit.math.Ray;
7+
8+
public class Honey extends MinecraftBlockTranslucent {
9+
public Honey() {
10+
super("honey_block", Texture.honeyBlockSide);
11+
localIntersect = true;
12+
opaque = false;
13+
ior = 1.474f; // according to https://study.com/academy/answer/what-is-the-refractive-index-of-honey.html
14+
solid = false;
15+
refractive = true;
16+
}
17+
18+
@Override
19+
public boolean intersect(Ray ray, Scene scene) {
20+
return HoneyBlockModel.intersect(ray);
21+
}
22+
}
Lines changed: 133 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,133 @@
1+
package se.llbit.chunky.model;
2+
3+
import se.llbit.chunky.resources.Texture;
4+
import se.llbit.math.*;
5+
6+
public class HoneyBlockModel {
7+
private static final Quad[] quads = {
8+
new Quad(
9+
new Vector3(16 / 16.0, 16 / 16.0, 0 / 16.0),
10+
new Vector3(0 / 16.0, 16 / 16.0, 0 / 16.0),
11+
new Vector3(16 / 16.0, 16 / 16.0, 16 / 16.0),
12+
new Vector4(0, 1, 0, 1)
13+
),
14+
new Quad(
15+
new Vector3(0 / 16.0, 0 / 16.0, 0 / 16.0),
16+
new Vector3(16 / 16.0, 0 / 16.0, 0 / 16.0),
17+
new Vector3(0 / 16.0, 0 / 16.0, 16 / 16.0),
18+
new Vector4(0, 1, 0, 1)
19+
),
20+
new Quad(
21+
new Vector3(16 / 16.0, 0 / 16.0, 16 / 16.0),
22+
new Vector3(16 / 16.0, 0 / 16.0, 0 / 16.0),
23+
new Vector3(16 / 16.0, 16 / 16.0, 16 / 16.0),
24+
new Vector4(0, 1, 0, 1)
25+
),
26+
new Quad(
27+
new Vector3(0 / 16.0, 0 / 16.0, 0 / 16.0),
28+
new Vector3(0 / 16.0, 0 / 16.0, 16 / 16.0),
29+
new Vector3(0 / 16.0, 16 / 16.0, 0 / 16.0),
30+
new Vector4(0, 1, 0, 1)
31+
),
32+
new Quad(
33+
new Vector3(16 / 16.0, 0 / 16.0, 0 / 16.0),
34+
new Vector3(0 / 16.0, 0 / 16.0, 0 / 16.0),
35+
new Vector3(16 / 16.0, 16 / 16.0, 0 / 16.0),
36+
new Vector4(0, 1, 0, 1)
37+
),
38+
new Quad(
39+
new Vector3(0 / 16.0, 0 / 16.0, 16 / 16.0),
40+
new Vector3(16 / 16.0, 0 / 16.0, 16 / 16.0),
41+
new Vector3(0 / 16.0, 16 / 16.0, 16 / 16.0),
42+
new Vector4(0, 1, 0, 1)
43+
),
44+
new Quad(
45+
new Vector3(15 / 16.0, 15 / 16.0, 1 / 16.0),
46+
new Vector3(1 / 16.0, 15 / 16.0, 1 / 16.0),
47+
new Vector3(15 / 16.0, 15 / 16.0, 15 / 16.0),
48+
new Vector4(1 / 16.0, 15 / 16.0, 1 / 16.0, 15 / 16.0)
49+
),
50+
new Quad(
51+
new Vector3(1 / 16.0, 1 / 16.0, 1 / 16.0),
52+
new Vector3(15 / 16.0, 1 / 16.0, 1 / 16.0),
53+
new Vector3(1 / 16.0, 1 / 16.0, 15 / 16.0),
54+
new Vector4(1 / 16.0, 15 / 16.0, 1 / 16.0, 15 / 16.0)
55+
),
56+
new Quad(
57+
new Vector3(15 / 16.0, 1 / 16.0, 15 / 16.0),
58+
new Vector3(15 / 16.0, 1 / 16.0, 1 / 16.0),
59+
new Vector3(15 / 16.0, 15 / 16.0, 15 / 16.0),
60+
new Vector4(1 / 16.0, 15 / 16.0, 1 / 16.0, 15 / 16.0)
61+
),
62+
new Quad(
63+
new Vector3(1 / 16.0, 1 / 16.0, 1 / 16.0),
64+
new Vector3(1 / 16.0, 1 / 16.0, 15 / 16.0),
65+
new Vector3(1 / 16.0, 15 / 16.0, 1 / 16.0),
66+
new Vector4(1 / 16.0, 15 / 16.0, 1 / 16.0, 15 / 16.0)
67+
),
68+
new Quad(
69+
new Vector3(15 / 16.0, 1 / 16.0, 1 / 16.0),
70+
new Vector3(1 / 16.0, 1 / 16.0, 1 / 16.0),
71+
new Vector3(15 / 16.0, 15 / 16.0, 1 / 16.0),
72+
new Vector4(1 / 16.0, 15 / 16.0, 1 / 16.0, 15 / 16.0)
73+
),
74+
new Quad(
75+
new Vector3(1 / 16.0, 1 / 16.0, 15 / 16.0),
76+
new Vector3(15 / 16.0, 1 / 16.0, 15 / 16.0),
77+
new Vector3(1 / 16.0, 15 / 16.0, 15 / 16.0),
78+
new Vector4(1 / 16.0, 15 / 16.0, 1 / 16.0, 15 / 16.0)
79+
),
80+
};
81+
82+
private static final Texture[] tex = {
83+
Texture.honeyBlockBottom, Texture.honeyBlockBottom, Texture.honeyBlockBottom,
84+
Texture.honeyBlockBottom, Texture.honeyBlockBottom, Texture.honeyBlockBottom,
85+
86+
Texture.honeyBlockBottom, Texture.honeyBlockTop, Texture.honeyBlockSide,
87+
Texture.honeyBlockSide, Texture.honeyBlockSide, Texture.honeyBlockSide
88+
};
89+
90+
public static boolean intersect(Ray ray) {
91+
ray.t = Double.POSITIVE_INFINITY;
92+
boolean hit = false;
93+
Vector4 oldColor = new Vector4(ray.color);
94+
for (int i = 6; i < quads.length; ++i) {
95+
Quad quad = quads[i];
96+
if (quad.intersect(ray)) {
97+
float[] color = tex[i].getColor(ray.u, ray.v);
98+
if (color[3] > Ray.EPSILON) {
99+
ColorUtil.overlayColor(ray.color, color);
100+
ray.n.set(quad.n);
101+
ray.t = ray.tNext;
102+
hit = true;
103+
}
104+
}
105+
}
106+
boolean innerHit = hit;
107+
Vector4 innerColor = hit ? new Vector4(ray.color) : null;
108+
109+
ray.color.set(oldColor);
110+
hit = false;
111+
112+
for (int i = 0; i < 6; ++i) {
113+
Quad quad = quads[i];
114+
if (quad.intersect(ray)) {
115+
float[] color = tex[i].getColor(ray.u, ray.v);
116+
if (color[3] > Ray.EPSILON) {
117+
ColorUtil.overlayColor(ray.color, color);
118+
ray.n.set(quad.n);
119+
ray.t = ray.tNext;
120+
hit = true;
121+
}
122+
}
123+
}
124+
if (hit) {
125+
ray.distance += ray.t;
126+
ray.o.scaleAdd(ray.t, ray.d);
127+
if (innerHit) {
128+
ColorUtil.overlayColor(ray.color, innerColor);
129+
}
130+
}
131+
return hit;
132+
}
133+
}

chunky/src/java/se/llbit/chunky/resources/Texture.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -758,6 +758,11 @@ public class Texture {
758758
public static final Texture witherRose = new Texture();
759759
public static final Texture bambooSapling = new Texture();
760760

761+
// [1.15]
762+
public static final Texture honeyBlockTop = new Texture();
763+
public static final Texture honeyBlockSide = new Texture();
764+
public static final Texture honeyBlockBottom = new Texture();
765+
761766
/** Banner base texture. */
762767
public static final Texture bannerBase = new Texture();
763768

chunky/src/java/se/llbit/chunky/resources/TexturePackLoader.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3314,6 +3314,16 @@ public class TexturePackLoader {
33143314
new SimpleTexture("assets/minecraft/textures/block/smoker_front_on",
33153315
Texture.smokerFrontOn));
33163316

3317+
allTextures.put("honey_block_top",
3318+
new SimpleTexture("assets/minecraft/textures/block/honey_block_top",
3319+
Texture.honeyBlockTop));
3320+
allTextures.put("honey_block_side",
3321+
new SimpleTexture("assets/minecraft/textures/block/honey_block_side",
3322+
Texture.honeyBlockSide));
3323+
allTextures.put("honey_block_bottom",
3324+
new SimpleTexture("assets/minecraft/textures/block/honey_block_bottom",
3325+
Texture.honeyBlockBottom));
3326+
33173327
addSimpleTexture("assets/minecraft/textures/block/sweet_berry_bush_stage0", Texture.sweetBerryBushStage0);
33183328
addSimpleTexture("assets/minecraft/textures/block/sweet_berry_bush_stage1", Texture.sweetBerryBushStage1);
33193329
addSimpleTexture("assets/minecraft/textures/block/sweet_berry_bush_stage2", Texture.sweetBerryBushStage2);

0 commit comments

Comments
 (0)