Skip to content

Commit e0e690c

Browse files
committed
feat: visual elements
1 parent 92122ea commit e0e690c

7 files changed

Lines changed: 336 additions & 11 deletions

File tree

main/src/main/java/me/outspending/biomesapi/biome/CustomBiome.java

Lines changed: 40 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,11 @@
1616
* This interface represents a custom biome in the BiomesAPI.
1717
* It provides methods to retrieve and modify the properties of the custom biome.
1818
*
19-
* @version 0.0.24
19+
* @version 1.0.2
2020
* @since 0.0.1
2121
* @author Outspending
2222
*/
23-
@AsOf("0.0.24")
23+
@AsOf("1.0.2")
2424
public interface CustomBiome {
2525

2626
/**
@@ -124,6 +124,15 @@ public interface CustomBiome {
124124
@AsOf("0.0.1")
125125
int getGrassColor();
126126

127+
/**
128+
* Returns the dry foliage color of the CustomBiome.
129+
*
130+
* @return the dry foliage color of the CustomBiome
131+
* @since 1.0.2
132+
*/
133+
@AsOf("1.0.2")
134+
int getDryFoliageColor();
135+
127136
/**
128137
* Returns the GrassColorModifier of the CustomBiome.
129138
*
@@ -205,6 +214,15 @@ public interface CustomBiome {
205214
@AsOf("0.0.5")
206215
void setGrassColor(int grassColor);
207216

217+
/**
218+
* Sets the dry foliage color of the CustomBiome.
219+
*
220+
* @param dryFoliageColor the dry foliage color of the CustomBiome
221+
* @since 1.0.2
222+
*/
223+
@AsOf("1.0.2")
224+
void setDryFoliageColor(int dryFoliageColor);
225+
208226
/**
209227
* Sets the GrassColorModifier of the CustomBiome.
210228
*
@@ -293,6 +311,7 @@ class Builder {
293311

294312
private int foliageColor = 0;
295313
private int grassColor = 0;
314+
private int dryFoliageColor = 0;
296315

297316
private GrassColorModifier grassColorModifier = GrassColorModifier.NONE;
298317
private ParticleRenderer particleRenderer = null;
@@ -336,9 +355,10 @@ public Builder(@NotNull CustomBiome biome) {
336355
this.skyColor = biome.getSkyColor();
337356
this.foliageColor = biome.getFoliageColor();
338357
this.grassColor = biome.getGrassColor();
358+
this.dryFoliageColor = biome.getDryFoliageColor();
359+
this.grassColorModifier = biome.getGrassColorModifier();
339360
this.particleRenderer = biome.getParticleRenderer();
340361
this.blockReplacements = biome.getBlockReplacements();
341-
this.grassColorModifier = biome.getGrassColorModifier();
342362
}
343363

344364
/**
@@ -523,6 +543,20 @@ public Builder(@NotNull CustomBiome biome) {
523543
return this;
524544
}
525545

546+
547+
/**
548+
* This method sets the dry foliage color property of the CustomBiome.
549+
*
550+
* @param dryFoliageColor The dry foliage color of the custom biome.
551+
* @since 1.0.2
552+
* @return The Builder object, for chaining method calls.
553+
*/
554+
@AsOf("1.0.2")
555+
public @NotNull Builder dryFoliageColor(@NotNull String dryFoliageColor) {
556+
this.dryFoliageColor = Integer.parseInt(formatHex(dryFoliageColor), 16);
557+
return this;
558+
}
559+
526560
/**
527561
* This method sets the grass color modifier property of the CustomBiome.
528562
*
@@ -566,10 +600,10 @@ public Builder(@NotNull CustomBiome biome) {
566600
/**
567601
* This method creates a new CustomBiome object with the properties set in the Builder.
568602
*
569-
* @version 0.0.1
603+
* @since 0.0.1
570604
* @return a new CustomBiome object.
571605
*/
572-
@AsOf("0.0.1")
606+
@AsOf("1.0.2")
573607
public @NotNull CustomBiome build() {
574608
Preconditions.checkArgument(resourceKey != null, "Resource key must be set");
575609
Preconditions.checkArgument(settings != null, "Settings must be set");
@@ -583,6 +617,7 @@ public Builder(@NotNull CustomBiome biome) {
583617
skyColor,
584618
foliageColor,
585619
grassColor,
620+
dryFoliageColor,
586621
grassColorModifier,
587622
particleRenderer,
588623
blockReplacements

main/src/main/java/me/outspending/biomesapi/biome/CustomBiomeImpl.java

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ public final class CustomBiomeImpl implements CustomBiome {
3737
// Optional Colors
3838
private int foliageColor = 0;
3939
private int grassColor = 0;
40+
private int dryFoliageColor = 0;
4041

4142
// Optional Settings
4243
private GrassColorModifier grassColorModifier = GrassColorModifier.NONE;
@@ -86,7 +87,7 @@ public CustomBiomeImpl(
8687
this.blockReplacements = new BlockReplacement[0];
8788
}
8889

89-
@AsOf("0.0.24")
90+
@AsOf("1.0.2")
9091
public CustomBiomeImpl(
9192
@NotNull BiomeResourceKey resourceKey,
9293
@NotNull BiomeSettings settings,
@@ -97,6 +98,7 @@ public CustomBiomeImpl(
9798
int skyColor,
9899
int foliageColor,
99100
int grassColor,
101+
int dryFoliageColor,
100102

101103
@NotNull GrassColorModifier grassColorModifier,
102104
@NotNull ParticleRenderer particleRenderer,
@@ -105,6 +107,7 @@ public CustomBiomeImpl(
105107
this(resourceKey, settings, fogColor, waterColor, waterFogColor, skyColor, particleRenderer);
106108
this.foliageColor = foliageColor;
107109
this.grassColor = grassColor;
110+
this.dryFoliageColor = dryFoliageColor;
108111
this.grassColorModifier = grassColorModifier;
109112
this.blockReplacements = blockReplacements;
110113
}
@@ -160,6 +163,10 @@ public int getGrassColor() {
160163
return grassColor;
161164
}
162165

166+
public int getDryFoliageColor() {
167+
return dryFoliageColor;
168+
}
169+
163170
@Override
164171
public GrassColorModifier getGrassColorModifier() {
165172
return grassColorModifier;
@@ -205,6 +212,10 @@ public void setGrassColor(int grassColor) {
205212
this.grassColor = grassColor;
206213
}
207214

215+
public void setDryFoliageColor(int dryFoliageColor) {
216+
this.dryFoliageColor = dryFoliageColor;
217+
}
218+
208219
@Override
209220
public void setGrassColorModifier(@NotNull GrassColorModifier grassColorModifier) {
210221
this.grassColorModifier = grassColorModifier;
@@ -246,6 +257,8 @@ public boolean isSimilar(@NotNull CustomBiome otherBiome) {
246257
if (this.skyColor != otherBiome.getSkyColor()) return false;
247258
if (this.foliageColor != otherBiome.getFoliageColor()) return false;
248259
if (this.grassColor != otherBiome.getGrassColor()) return false;
260+
if (this.dryFoliageColor != otherBiome.getDryFoliageColor()) return false;
261+
if (!this.grassColorModifier.equals(otherBiome.getGrassColorModifier())) return false;
249262
if (!this.particleRenderer.equals(otherBiome.getParticleRenderer())) return false;
250263
if (this.blockReplacements.length != otherBiome.getBlockReplacements().length) return false;
251264
for (int i = 0; i < this.blockReplacements.length; i++) {

main/src/main/java/me/outspending/biomesapi/registry/handlers/SpecialEffectsHandler.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
import net.minecraft.world.level.biome.BiomeSpecialEffects;
88
import org.jetbrains.annotations.NotNull;
99

10-
@AsOf("0.0.25")
10+
@AsOf("1.0.2")
1111
public class SpecialEffectsHandler implements BuilderHandler<Biome.BiomeBuilder, BiomeSpecialEffects> {
1212

1313
@Override
@@ -19,14 +19,12 @@ public void handle(BiomeSpecialEffects value, @NotNull Biome.BiomeBuilder builde
1919

2020
@Override
2121
public BiomeSpecialEffects build(@NotNull CustomBiome biome) {
22-
// TODO: Expand this to include more special effects settings
2322
BiomeSpecialEffects.Builder builder = new BiomeSpecialEffects.Builder()
2423
.foliageColorOverride(biome.getFoliageColor())
2524
.waterColor(biome.getWaterColor())
2625
.grassColorOverride(biome.getGrassColor())
2726
.grassColorModifier(biome.getGrassColorModifier().getDelegateModifier())
28-
.dryFoliageColorOverride(biome.getFoliageColor())
29-
;
27+
.dryFoliageColorOverride(biome.getDryFoliageColor());
3028

3129
return builder.build();
3230
}
Lines changed: 182 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,182 @@
1+
package me.outspending.biomesapi.renderer;
2+
3+
import me.outspending.biomesapi.wrapper.AmbientParticle;
4+
import me.outspending.biomesapi.wrapper.MoonPhase;
5+
import me.outspending.biomesapi.wrapper.WrappedEnvironmentAttribute;
6+
import net.minecraft.core.particles.ParticleOptions;
7+
import net.minecraft.world.attribute.EnvironmentAttributeMap;
8+
import net.minecraft.world.attribute.EnvironmentAttributes;
9+
10+
11+
public class VisualElements {
12+
13+
// fogColor handled elsewhere
14+
private WrappedEnvironmentAttribute<Float, Float> fogStartDistance;
15+
private WrappedEnvironmentAttribute<Float, Float> fogEndDistance;
16+
private WrappedEnvironmentAttribute<Float, Float> skyFogEndDistance;
17+
private WrappedEnvironmentAttribute<Float, Float> cloudFogEndDistance;
18+
// waterFogColor handled elsewhere
19+
private WrappedEnvironmentAttribute<Float, Float> waterFogStartDistance;
20+
private WrappedEnvironmentAttribute<Float, Float> waterFogEndDistance;
21+
// skyColor handled elsewhere
22+
private WrappedEnvironmentAttribute<Integer, Integer> sunriseSunsetColor;
23+
private WrappedEnvironmentAttribute<Integer, Integer> cloudColor;
24+
private WrappedEnvironmentAttribute<Float, Float> cloudHeight;
25+
private WrappedEnvironmentAttribute<Float, Float> sunAngle;
26+
private WrappedEnvironmentAttribute<Float, Float> moonAngle;
27+
private WrappedEnvironmentAttribute<Float, Float> starAngle;
28+
private WrappedEnvironmentAttribute<net.minecraft.world.level.MoonPhase, MoonPhase> moonPhase;
29+
private WrappedEnvironmentAttribute<Float, Float> starBrightness;
30+
// skyLightColor handled elsewhere
31+
private WrappedEnvironmentAttribute<Float, Float> skyLightFactor;
32+
private WrappedEnvironmentAttribute<ParticleOptions, AmbientParticle> defaultDripstoneParticle;
33+
// ambientParticles handled elsewhere
34+
35+
36+
public VisualElements(Builder builder) {
37+
this.fogStartDistance = builder.fogStartDistance;
38+
this.fogEndDistance = builder.fogEndDistance;
39+
this.skyFogEndDistance = builder.skyFogEndDistance;
40+
this.cloudFogEndDistance = builder.cloudFogEndDistance;
41+
this.waterFogStartDistance = builder.waterFogStartDistance;
42+
this.waterFogEndDistance = builder.waterFogEndDistance;
43+
this.sunriseSunsetColor = builder.sunriseSunsetColor;
44+
this.cloudColor = builder.cloudColor;
45+
this.cloudHeight = builder.cloudHeight;
46+
this.sunAngle = builder.sunAngle;
47+
this.moonAngle = builder.moonAngle;
48+
this.starAngle = builder.starAngle;
49+
this.moonPhase = builder.moonPhase;
50+
this.starBrightness = builder.starBrightness;
51+
this.skyLightFactor = builder.skyLightFactor;
52+
this.defaultDripstoneParticle = builder.defaultDripstoneParticle;
53+
}
54+
55+
56+
public void applyToEnvironment(EnvironmentAttributeMap map) {
57+
fogStartDistance.applyToEnvironment(map);
58+
fogEndDistance.applyToEnvironment(map);
59+
skyFogEndDistance.applyToEnvironment(map);
60+
cloudFogEndDistance.applyToEnvironment(map);
61+
waterFogStartDistance.applyToEnvironment(map);
62+
waterFogEndDistance.applyToEnvironment(map);
63+
sunriseSunsetColor.applyToEnvironment(map);
64+
cloudColor.applyToEnvironment(map);
65+
cloudHeight.applyToEnvironment(map);
66+
sunAngle.applyToEnvironment(map);
67+
moonAngle.applyToEnvironment(map);
68+
starAngle.applyToEnvironment(map);
69+
moonPhase.applyToEnvironment(map);
70+
starBrightness.applyToEnvironment(map);
71+
skyLightFactor.applyToEnvironment(map);
72+
defaultDripstoneParticle.applyToEnvironment(map);
73+
}
74+
75+
76+
public static class Builder {
77+
78+
private WrappedEnvironmentAttribute<Float, Float> fogStartDistance = WrappedEnvironmentAttribute.of(EnvironmentAttributes.FOG_START_DISTANCE);
79+
private WrappedEnvironmentAttribute<Float, Float> fogEndDistance = WrappedEnvironmentAttribute.of(EnvironmentAttributes.FOG_END_DISTANCE);
80+
private WrappedEnvironmentAttribute<Float, Float> skyFogEndDistance = WrappedEnvironmentAttribute.of(EnvironmentAttributes.SKY_FOG_END_DISTANCE);
81+
private WrappedEnvironmentAttribute<Float, Float> cloudFogEndDistance = WrappedEnvironmentAttribute.of(EnvironmentAttributes.CLOUD_FOG_END_DISTANCE);
82+
private WrappedEnvironmentAttribute<Float, Float> waterFogStartDistance = WrappedEnvironmentAttribute.of(EnvironmentAttributes.WATER_FOG_START_DISTANCE);
83+
private WrappedEnvironmentAttribute<Float, Float> waterFogEndDistance = WrappedEnvironmentAttribute.of(EnvironmentAttributes.WATER_FOG_END_DISTANCE);
84+
private WrappedEnvironmentAttribute<Integer, Integer> sunriseSunsetColor = WrappedEnvironmentAttribute.of(EnvironmentAttributes.SUNRISE_SUNSET_COLOR);
85+
private WrappedEnvironmentAttribute<Integer, Integer> cloudColor = WrappedEnvironmentAttribute.of(EnvironmentAttributes.CLOUD_COLOR);
86+
private WrappedEnvironmentAttribute<Float, Float> cloudHeight = WrappedEnvironmentAttribute.of(EnvironmentAttributes.CLOUD_HEIGHT);
87+
private WrappedEnvironmentAttribute<Float, Float> sunAngle = WrappedEnvironmentAttribute.of(EnvironmentAttributes.SUN_ANGLE);
88+
private WrappedEnvironmentAttribute<Float, Float> moonAngle = WrappedEnvironmentAttribute.of(EnvironmentAttributes.MOON_ANGLE);
89+
private WrappedEnvironmentAttribute<Float, Float> starAngle = WrappedEnvironmentAttribute.of(EnvironmentAttributes.STAR_ANGLE);
90+
private WrappedEnvironmentAttribute<net.minecraft.world.level.MoonPhase, MoonPhase> moonPhase = WrappedEnvironmentAttribute.of(EnvironmentAttributes.MOON_PHASE, MoonPhase::getDelegatePhase);
91+
private WrappedEnvironmentAttribute<Float, Float> starBrightness = WrappedEnvironmentAttribute.of(EnvironmentAttributes.STAR_BRIGHTNESS);
92+
private WrappedEnvironmentAttribute<Float, Float> skyLightFactor = WrappedEnvironmentAttribute.of(EnvironmentAttributes.SKY_LIGHT_FACTOR);
93+
private WrappedEnvironmentAttribute<ParticleOptions, AmbientParticle> defaultDripstoneParticle = WrappedEnvironmentAttribute.of(EnvironmentAttributes.DEFAULT_DRIPSTONE_PARTICLE, AmbientParticle::getSimpleParticle);
94+
95+
public Builder fogStartDistance(float distance) {
96+
this.fogStartDistance.setValue(distance);
97+
return this;
98+
}
99+
100+
public Builder fogEndDistance(float distance) {
101+
this.fogEndDistance.setValue(distance);
102+
return this;
103+
}
104+
105+
public Builder skyFogEndDistance(float distance) {
106+
this.skyFogEndDistance.setValue(distance);
107+
return this;
108+
}
109+
110+
public Builder cloudFogEndDistance(float distance) {
111+
this.cloudFogEndDistance.setValue(distance);
112+
return this;
113+
}
114+
115+
public Builder waterFogStartDistance(float distance) {
116+
this.waterFogStartDistance.setValue(distance);
117+
return this;
118+
}
119+
120+
public Builder waterFogEndDistance(float distance) {
121+
this.waterFogEndDistance.setValue(distance);
122+
return this;
123+
}
124+
125+
public Builder sunriseSunsetColor(int color) {
126+
this.sunriseSunsetColor.setValue(color);
127+
return this;
128+
}
129+
130+
public Builder cloudColor(int color) {
131+
this.cloudColor.setValue(color);
132+
return this;
133+
}
134+
135+
public Builder cloudHeight(float height) {
136+
this.cloudHeight.setValue(height);
137+
return this;
138+
}
139+
140+
public Builder sunAngle(float angle) {
141+
this.sunAngle.setValue(angle);
142+
return this;
143+
}
144+
145+
public Builder moonAngle(float angle) {
146+
this.moonAngle.setValue(angle);
147+
return this;
148+
}
149+
150+
public Builder starAngle(float angle) {
151+
this.starAngle.setValue(angle);
152+
return this;
153+
}
154+
155+
public Builder moonPhase(MoonPhase phase) {
156+
this.moonPhase.setValue(phase);
157+
return this;
158+
}
159+
160+
public Builder starBrightness(float brightness) {
161+
this.starBrightness.setValue(brightness);
162+
return this;
163+
}
164+
165+
public Builder skyLightFactor(float factor) {
166+
this.skyLightFactor.setValue(factor);
167+
return this;
168+
}
169+
170+
public Builder defaultDripstoneParticle(AmbientParticle particle) {
171+
this.defaultDripstoneParticle.setValue(particle);
172+
return this;
173+
}
174+
175+
public VisualElements build() {
176+
return new VisualElements(this);
177+
}
178+
}
179+
180+
181+
182+
}

main/src/main/java/me/outspending/biomesapi/wrapper/GrassColorModifier.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
*
1111
* @version 0.0.24
1212
* @since 0.0.24
13-
* @author Outspending
13+
* @author Jsinco
1414
*/
1515
@AsOf("0.0.24")
1616
public enum GrassColorModifier {

0 commit comments

Comments
 (0)