Skip to content

Commit 66844df

Browse files
committed
Fix error if biome water-color effect has alpha. Fixes: #715
1 parent 6ce3472 commit 66844df

File tree

8 files changed

+78
-74
lines changed

8 files changed

+78
-74
lines changed
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package de.bluecolored.bluemap.core.resources.adapter;
2+
3+
import java.lang.annotation.ElementType;
4+
import java.lang.annotation.Retention;
5+
import java.lang.annotation.RetentionPolicy;
6+
import java.lang.annotation.Target;
7+
8+
@Retention(RetentionPolicy.RUNTIME)
9+
@Target({ElementType.METHOD})
10+
public @interface PostDeserialize {}
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
package de.bluecolored.bluemap.core.resources.adapter;
2+
3+
import com.google.gson.Gson;
4+
import com.google.gson.TypeAdapter;
5+
import com.google.gson.TypeAdapterFactory;
6+
import com.google.gson.reflect.TypeToken;
7+
import com.google.gson.stream.JsonReader;
8+
import com.google.gson.stream.JsonWriter;
9+
10+
import java.io.IOException;
11+
import java.lang.reflect.InvocationTargetException;
12+
import java.lang.reflect.Method;
13+
14+
public class PostDeserializeAdapterFactory implements TypeAdapterFactory {
15+
16+
@Override
17+
public <T> TypeAdapter<T> create(Gson gson, TypeToken<T> type) {
18+
for (Method method : type.getRawType().getDeclaredMethods()) {
19+
if (method.isAnnotationPresent(PostDeserialize.class) && method.getParameterCount() == 0) {
20+
TypeAdapter<T> delegate = gson.getDelegateAdapter(this, type);
21+
return new TypeAdapter<>() {
22+
23+
@Override
24+
public void write(JsonWriter out, T value) throws IOException {
25+
delegate.write(out, value);
26+
}
27+
28+
@Override
29+
public T read(JsonReader in) throws IOException {
30+
try {
31+
T obj = delegate.read(in);
32+
method.setAccessible(true);
33+
method.invoke(obj);
34+
return obj;
35+
} catch (IllegalAccessException | InvocationTargetException e) {
36+
throw new IOException(e);
37+
}
38+
}
39+
40+
};
41+
}
42+
}
43+
return null;
44+
}
45+
46+
}

core/src/main/java/de/bluecolored/bluemap/core/resources/adapter/ResourcesGson.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ public class ResourcesGson {
4949

5050
public static GsonBuilder addAdapter(GsonBuilder builder) {
5151
return builder
52+
.registerTypeAdapterFactory(new PostDeserializeAdapterFactory())
5253
.registerTypeAdapter(Key.class, new KeyAdapter())
5354
.registerTypeAdapter(Axis.class, new AxisAdapter())
5455
.registerTypeAdapter(Color.class, new ColorAdapter())

core/src/main/java/de/bluecolored/bluemap/core/resources/pack/datapack/biome/DatapackBiome.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@
2424
*/
2525
package de.bluecolored.bluemap.core.resources.pack.datapack.biome;
2626

27+
import de.bluecolored.bluemap.core.logger.Logger;
28+
import de.bluecolored.bluemap.core.resources.adapter.PostDeserialize;
2729
import de.bluecolored.bluemap.core.util.Key;
2830
import de.bluecolored.bluemap.core.util.math.Color;
2931
import de.bluecolored.bluemap.core.world.biome.Biome;
@@ -87,6 +89,12 @@ public static class Effects {
8789
private Color grassColor = Biome.DEFAULT.getOverlayGrassColor();
8890
private GrassColorModifier grassColorModifier = Biome.DEFAULT.getGrassColorModifier();
8991

92+
@PostDeserialize
93+
private void init() {
94+
waterColor.a = 1f;
95+
Logger.global.logInfo("Biome-Effects Initialized!");
96+
}
97+
9098
}
9199

92100
}

core/src/main/java/de/bluecolored/bluemap/core/resources/pack/resourcepack/blockstate/Variant.java

Lines changed: 7 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -24,24 +24,20 @@
2424
*/
2525
package de.bluecolored.bluemap.core.resources.pack.resourcepack.blockstate;
2626

27-
import com.google.gson.Gson;
28-
import com.google.gson.annotations.JsonAdapter;
29-
import com.google.gson.reflect.TypeToken;
30-
import com.google.gson.stream.JsonReader;
3127
import de.bluecolored.bluemap.core.map.hires.block.BlockRendererType;
32-
import de.bluecolored.bluemap.core.resources.adapter.AbstractTypeAdapterFactory;
3328
import de.bluecolored.bluemap.core.resources.ResourcePath;
34-
import de.bluecolored.bluemap.core.resources.pack.resourcepack.model.Model;
29+
import de.bluecolored.bluemap.core.resources.adapter.PostDeserialize;
3530
import de.bluecolored.bluemap.core.resources.pack.resourcepack.ResourcePack;
31+
import de.bluecolored.bluemap.core.resources.pack.resourcepack.model.Model;
3632
import de.bluecolored.bluemap.core.util.math.MatrixM4f;
37-
import lombok.*;
38-
39-
import java.io.IOException;
33+
import lombok.AccessLevel;
34+
import lombok.Getter;
35+
import lombok.NoArgsConstructor;
36+
import lombok.Setter;
4037

4138
@SuppressWarnings({"FieldMayBeFinal", "FieldCanBeLocal", "unused"})
4239
@Getter
4340
@NoArgsConstructor(access = AccessLevel.PRIVATE)
44-
@JsonAdapter(Variant.Adapter.class)
4541
public class Variant {
4642

4743
@Setter
@@ -76,6 +72,7 @@ public Variant(ResourcePath<Model> model, float x, float y, boolean uvlock, doub
7672
init();
7773
}
7874

75+
@PostDeserialize
7976
private void init() {
8077
this.transformed = x != 0 || y != 0;
8178
this.transformMatrix = new MatrixM4f()
@@ -84,19 +81,4 @@ private void init() {
8481
.translate(0.5f, 0.5f, 0.5f);
8582
}
8683

87-
static class Adapter extends AbstractTypeAdapterFactory<Variant> {
88-
89-
public Adapter() {
90-
super(Variant.class);
91-
}
92-
93-
@Override
94-
public Variant read(JsonReader in, Gson gson) throws IOException {
95-
Variant variant = gson.getDelegateAdapter(this, TypeToken.get(Variant.class)).read(in);
96-
variant.init();
97-
return variant;
98-
}
99-
100-
}
101-
10284
}

core/src/main/java/de/bluecolored/bluemap/core/resources/pack/resourcepack/entitystate/Part.java

Lines changed: 2 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
import de.bluecolored.bluemap.core.map.hires.entity.EntityRendererType;
3333
import de.bluecolored.bluemap.core.resources.adapter.AbstractTypeAdapterFactory;
3434
import de.bluecolored.bluemap.core.resources.ResourcePath;
35+
import de.bluecolored.bluemap.core.resources.adapter.PostDeserialize;
3536
import de.bluecolored.bluemap.core.resources.pack.resourcepack.ResourcePack;
3637
import de.bluecolored.bluemap.core.resources.pack.resourcepack.model.Model;
3738
import de.bluecolored.bluemap.core.util.math.MatrixM4f;
@@ -40,7 +41,6 @@
4041
import java.io.IOException;
4142

4243
@SuppressWarnings("FieldMayBeFinal")
43-
@JsonAdapter(Part.Adapter.class)
4444
@NoArgsConstructor(access = AccessLevel.PRIVATE)
4545
@Getter
4646
public class Part {
@@ -67,26 +67,11 @@ public Part(ResourcePath<Model> model, Vector3f position, Vector3f rotation) {
6767
init();
6868
}
6969

70+
@PostDeserialize
7071
private void init() {
7172
this.transformed = !position.equals(Vector3f.ZERO) || !rotation.equals(Vector3f.ZERO);
7273
this.transformMatrix = new MatrixM4f()
7374
.rotate(rotation.getX(), rotation.getY(), rotation.getZ())
7475
.translate(position.getX(), position.getY(), position.getZ());
7576
}
76-
77-
static class Adapter extends AbstractTypeAdapterFactory<Part> {
78-
79-
public Adapter() {
80-
super(Part.class);
81-
}
82-
83-
@Override
84-
public Part read(JsonReader in, Gson gson) throws IOException {
85-
Part part = gson.getDelegateAdapter(this, TypeToken.get(Part.class)).read(in);
86-
part.init();
87-
return part;
88-
}
89-
90-
}
91-
9277
}

core/src/main/java/de/bluecolored/bluemap/core/resources/pack/resourcepack/model/Element.java

Lines changed: 2 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
import com.google.gson.stream.JsonReader;
3333
import de.bluecolored.bluemap.core.resources.ResourcePath;
3434
import de.bluecolored.bluemap.core.resources.adapter.AbstractTypeAdapterFactory;
35+
import de.bluecolored.bluemap.core.resources.adapter.PostDeserialize;
3536
import de.bluecolored.bluemap.core.resources.pack.ResourcePool;
3637
import de.bluecolored.bluemap.core.resources.pack.resourcepack.ResourcePack;
3738
import de.bluecolored.bluemap.core.resources.pack.resourcepack.texture.Texture;
@@ -45,7 +46,6 @@
4546
import java.util.Map;
4647

4748
@SuppressWarnings({"FieldMayBeFinal", "FieldCanBeLocal", "unused"})
48-
@JsonAdapter(Element.Adapter.class)
4949
@NoArgsConstructor(access = AccessLevel.PRIVATE)
5050
@Getter
5151
public class Element {
@@ -93,6 +93,7 @@ private Element(Element copyFrom) {
9393
copyFrom.faces.forEach((direction, face) -> this.faces.put(direction, face.copy()));
9494
}
9595

96+
@PostDeserialize
9697
private void init() {
9798
faces.forEach((direction, face) -> face.init(direction, this::calculateDefaultUV));
9899
}
@@ -132,19 +133,4 @@ public void optimize(ResourcePool<Texture> texturePool) {
132133
}
133134
}
134135

135-
static class Adapter extends AbstractTypeAdapterFactory<Element> {
136-
137-
public Adapter() {
138-
super(Element.class);
139-
}
140-
141-
@Override
142-
public Element read(JsonReader in, Gson gson) throws IOException {
143-
Element element = gson.getDelegateAdapter(this, TypeToken.get(Element.class)).read(in);
144-
element.init();
145-
return element;
146-
}
147-
148-
}
149-
150136
}

core/src/main/java/de/bluecolored/bluemap/core/resources/pack/resourcepack/model/Rotation.java

Lines changed: 2 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
import com.google.gson.reflect.TypeToken;
3333
import com.google.gson.stream.JsonReader;
3434
import de.bluecolored.bluemap.core.resources.adapter.AbstractTypeAdapterFactory;
35+
import de.bluecolored.bluemap.core.resources.adapter.PostDeserialize;
3536
import de.bluecolored.bluemap.core.util.math.Axis;
3637
import de.bluecolored.bluemap.core.util.math.MatrixM4f;
3738
import lombok.AccessLevel;
@@ -41,7 +42,6 @@
4142
import java.io.IOException;
4243

4344
@SuppressWarnings("FieldMayBeFinal")
44-
@JsonAdapter(Rotation.Adapter.class)
4545
@NoArgsConstructor(access = AccessLevel.PRIVATE)
4646
@Getter
4747
public class Rotation {
@@ -66,6 +66,7 @@ public Rotation(Vector3f origin, Axis axis, float angle, boolean rescale) {
6666
init();
6767
}
6868

69+
@PostDeserialize
6970
private void init() {
7071
Vector3i axisAngle = axis.toVector();
7172

@@ -92,19 +93,4 @@ private void init() {
9293
}
9394
}
9495

95-
static class Adapter extends AbstractTypeAdapterFactory<Rotation> {
96-
97-
public Adapter() {
98-
super(Rotation.class);
99-
}
100-
101-
@Override
102-
public Rotation read(JsonReader in, Gson gson) throws IOException {
103-
Rotation rotation = gson.getDelegateAdapter(this, TypeToken.get(Rotation.class)).read(in);
104-
rotation.init();
105-
return rotation;
106-
}
107-
108-
}
109-
11096
}

0 commit comments

Comments
 (0)