Skip to content

Commit

Permalink
BiomeTag.(water_)fog_color tag + mech (#2516)
Browse files Browse the repository at this point in the history
* `BiomeTag.(water_)fog_color` tag + mech

* Slight re-order
  • Loading branch information
tal5 committed Aug 6, 2023
1 parent 19433ee commit 2ba64c9
Show file tree
Hide file tree
Showing 6 changed files with 124 additions and 12 deletions.
Expand Up @@ -85,6 +85,22 @@ public enum DownfallType {

public abstract void setFoliageColor(int color);

public int getFogColor() {
throw new UnsupportedOperationException();
}

public void setFogColor(int color) {
throw new UnsupportedOperationException();
}

public int getWaterFogColor() {
throw new UnsupportedOperationException();
}

public void setWaterFogColor(int color) {
throw new UnsupportedOperationException();
}

public abstract void setTo(Block block);

public ColorTag getColor(int x, int y) {
Expand Down
Expand Up @@ -341,6 +341,68 @@ else if (attribute.startsWith("water", 2)) {
return new ElementTag(object.biome.hasDownfall());
});

// <--[tag]
// @attribute <BiomeTag.fog_color>
// @returns ColorTag
// @mechanism BiomeTag.fog_color
// @description
// Returns the biome's fog color, which is visible when outside water (see also <@link tag BiomeTag.water_fog_color>).
// @example
// # Sends the player a message in their current biome's fog color.
// - narrate "You are currently seeing fog that looks like <&color[<player.location.biome.fog_color>]>this!"
// -->
tagProcessor.registerTag(ColorTag.class, "fog_color", (attribute, object) -> {
return ColorTag.fromRGB(object.biome.getFogColor());
});

// <--[tag]
// @attribute <BiomeTag.water_fog_color>
// @returns ColorTag
// @mechanism BiomeTag.water_fog_color
// @description
// Returns the biome's water fog color, which is visible when underwater (see also <@link tag BiomeTag.fog_color>).
// @example
// # Sends the player a message in their current biome's water fog color.
// - narrate "If you are underwater, everything looks like <&color[<player.location.biome.water_fog_color>]>this!"
// -->
tagProcessor.registerTag(ColorTag.class, "water_fog_color", (attribute, object) -> {
return ColorTag.fromRGB(object.biome.getWaterFogColor());
});

// <--[mechanism]
// @object BiomeTag
// @name fog_color
// @input ColorTag
// @description
// Sets the biome's fog color, which is visible when outside water (see also <@link mechanism BiomeTag.water_fog_color>).
// @tags
// <BiomeTag.fog_color>
// @example
// # Makes the plains biome's fog color red permanently, using a server start event to keep it applied.
// on server start:
// - adjust <biome[plains]> fog_color:red
// -->
tagProcessor.registerMechanism("fog_color", false, ColorTag.class, (object, mechanism, input) -> {
object.biome.setFogColor(input.asRGB());
});

// <--[mechanism]
// @object BiomeTag
// @name water_fog_color
// @input ColorTag
// @description
// Sets the biome's water fog color, which is visible when underwater (see also <@link mechanism BiomeTag.fog_color>).
// @tags
// <BiomeTag.water_fog_color>
// @example
// # Makes the plains biome's water fog color fuchsia permanently, using a server start event to keep it applied.
// on server start:
// - adjust <biome[plains]> water_fog_color:fuchsia
// -->
tagProcessor.registerMechanism("water_fog_color", false, ColorTag.class, (object, mechanism, input) -> {
object.biome.setWaterFogColor(input.asRGB());
});

// <--[mechanism]
// @object BiomeTag
// @name has_downfall
Expand Down
Expand Up @@ -61,6 +61,8 @@ public class ReflectionMappingsInfo {

// net.minecraft.world.level.biome.BiomeSpecialEffects
public static String BiomeSpecialEffects_foliageColorOverride = "f";
public static String BiomeSpecialEffects_fogColor = "b";
public static String BiomeSpecialEffects_waterFogColor = "d";

// net.minecraft.network.Connection
public static String Connection_receiving = "k";
Expand Down
Expand Up @@ -136,12 +136,27 @@ public void setHasDownfall(boolean hasDownfall) {

@Override
public void setFoliageColor(int color) {
try {
ReflectionHelper.setFieldValue(BiomeSpecialEffects.class, ReflectionMappingsInfo.BiomeSpecialEffects_foliageColorOverride, biomeHolder.value().getSpecialEffects(), Optional.of(color));
}
catch (Throwable ex) {
Debug.echoError(ex);
}
ReflectionHelper.setFieldValue(BiomeSpecialEffects.class, ReflectionMappingsInfo.BiomeSpecialEffects_foliageColorOverride, biomeHolder.value().getSpecialEffects(), Optional.of(color));
}

@Override
public int getFogColor() {
return biomeHolder.value().getFogColor();
}

@Override
public void setFogColor(int color) {
ReflectionHelper.setFieldValue(BiomeSpecialEffects.class, ReflectionMappingsInfo.BiomeSpecialEffects_fogColor, biomeHolder.value().getSpecialEffects(), color);
}

@Override
public int getWaterFogColor() {
return biomeHolder.value().getWaterFogColor();
}

@Override
public void setWaterFogColor(int color) {
ReflectionHelper.setFieldValue(BiomeSpecialEffects.class, ReflectionMappingsInfo.BiomeSpecialEffects_waterFogColor, biomeHolder.value().getSpecialEffects(), color);
}

private List<EntityType> getSpawnableEntities(MobCategory creatureType) {
Expand Down
Expand Up @@ -64,6 +64,8 @@ public class ReflectionMappingsInfo {

// net.minecraft.world.level.biome.BiomeSpecialEffects
public static String BiomeSpecialEffects_foliageColorOverride = "f";
public static String BiomeSpecialEffects_fogColor = "b";
public static String BiomeSpecialEffects_waterFogColor = "d";

// net.minecraft.network.Connection
public static String Connection_receiving = "k";
Expand Down
Expand Up @@ -136,12 +136,27 @@ public void setHasDownfall(boolean hasDownfall) {

@Override
public void setFoliageColor(int color) {
try {
ReflectionHelper.setFieldValue(BiomeSpecialEffects.class, ReflectionMappingsInfo.BiomeSpecialEffects_foliageColorOverride, biomeHolder.value().getSpecialEffects(), Optional.of(color));
}
catch (Throwable ex) {
Debug.echoError(ex);
}
ReflectionHelper.setFieldValue(BiomeSpecialEffects.class, ReflectionMappingsInfo.BiomeSpecialEffects_foliageColorOverride, biomeHolder.value().getSpecialEffects(), Optional.of(color));
}

@Override
public int getFogColor() {
return biomeHolder.value().getFogColor();
}

@Override
public void setFogColor(int color) {
ReflectionHelper.setFieldValue(BiomeSpecialEffects.class, ReflectionMappingsInfo.BiomeSpecialEffects_fogColor, biomeHolder.value().getSpecialEffects(), color);
}

@Override
public int getWaterFogColor() {
return biomeHolder.value().getWaterFogColor();
}

@Override
public void setWaterFogColor(int color) {
ReflectionHelper.setFieldValue(BiomeSpecialEffects.class, ReflectionMappingsInfo.BiomeSpecialEffects_waterFogColor, biomeHolder.value().getSpecialEffects(), color);
}

private List<EntityType> getSpawnableEntities(MobCategory creatureType) {
Expand Down

0 comments on commit 2ba64c9

Please sign in to comment.