Skip to content

Commit

Permalink
Add tile detection fallback
Browse files Browse the repository at this point in the history
At least in 1.18, we still have to rely on the BiomeCategory, as
biomes do not fully support biome tags yet. While the current
heuristic for tile detection is lack luster, there is no hope
for fixing it beyond the current state, when custom biomes,
like terralith do not have any meaningful biome tags yet.

I really hope this changes with 1.19. Otherwise, I'm
doomed.

Fixes #460
  • Loading branch information
tyra314 committed Mar 30, 2023
1 parent b283b50 commit af64cc5
Show file tree
Hide file tree
Showing 3 changed files with 48 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,11 @@
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.minecraft.util.Identifier;
import net.minecraft.util.registry.BuiltinRegistries;
import net.minecraft.util.registry.RegistryEntryList;
import net.minecraft.util.registry.RegistryKey;
import net.minecraft.world.biome.Biome;
import net.minecraft.world.gen.feature.PlacedFeature;

import java.util.*;
import java.util.Map.Entry;
Expand Down Expand Up @@ -93,6 +96,47 @@ static private Optional<Identifier> guessFittingTextureSet(RegistryKey<Biome> bi
throw new AssertionError("Not implemented");
}

static public Optional<Identifier> guessFittingTextureSetFallback(Biome biome) {
Identifier texture_set = switch (biome.getCategory()) {
case SWAMP -> AntiqueAtlasMod.id("swamp");
case OCEAN, RIVER ->
biome.getPrecipitation() == Biome.Precipitation.SNOW ? AntiqueAtlasMod.id("ice") : AntiqueAtlasMod.id("water");
case BEACH -> AntiqueAtlasMod.id("shore");
case JUNGLE -> AntiqueAtlasMod.id("jungle");
case SAVANNA -> AntiqueAtlasMod.id("savanna");
case MESA -> AntiqueAtlasMod.id("plateau_mesa");
case FOREST ->
biome.getPrecipitation() == Biome.Precipitation.SNOW ? AntiqueAtlasMod.id("snow_pines") : AntiqueAtlasMod.id("forest");
case PLAINS ->
biome.getPrecipitation() == Biome.Precipitation.SNOW ? AntiqueAtlasMod.id("snow") : AntiqueAtlasMod.id("plains");
case ICY -> AntiqueAtlasMod.id("ice_spikes");
case DESERT -> AntiqueAtlasMod.id("desert");
case TAIGA -> AntiqueAtlasMod.id("snow");
case EXTREME_HILLS -> AntiqueAtlasMod.id("hills");
case MOUNTAIN -> AntiqueAtlasMod.id("mountains");
case THEEND -> {
List<RegistryEntryList<PlacedFeature>> features = biome.getGenerationSettings().getFeatures();
PlacedFeature chorus_plant_feature = BuiltinRegistries.PLACED_FEATURE.get(new Identifier("chorus_plant"));
assert chorus_plant_feature != null;
boolean has_chorus_plant = features.stream().anyMatch(entries -> entries.stream().anyMatch(feature -> feature.value() == chorus_plant_feature));
if (has_chorus_plant) {
yield AntiqueAtlasMod.id("end_island_plants");
} else {
yield AntiqueAtlasMod.id("end_island");
}
}
case MUSHROOM -> AntiqueAtlasMod.id("mushroom");
case NETHER -> AntiqueAtlasMod.id("soul_sand_valley");
case NONE -> AntiqueAtlasMod.id("end_void");
case UNDERGROUND -> {
Log.warn("Underground biomes aren't supported yet.");
yield null;
}
};

return Optional.ofNullable(texture_set);
}

public boolean isRegistered(Identifier id) {
return textureMap.containsKey(id);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package hunternif.mc.impl.atlas.client.fabric;

import hunternif.mc.impl.atlas.AntiqueAtlasMod;
import hunternif.mc.impl.atlas.client.TileTextureMap;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.fabricmc.fabric.api.tag.convention.v1.ConventionalBiomeTags;
Expand Down Expand Up @@ -156,6 +157,6 @@ static public Optional<Identifier> guessFittingTextureSet(RegistryKey<Biome> bio
return Optional.of(AntiqueAtlasMod.id("mesa"));
}

return Optional.empty();
return TileTextureMap.guessFittingTextureSetFallback(biomeTag.value());
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package hunternif.mc.impl.atlas.client.forge;

import hunternif.mc.impl.atlas.AntiqueAtlasMod;
import hunternif.mc.impl.atlas.client.TileTextureMap;
import net.minecraft.client.MinecraftClient;
import net.minecraft.tag.BiomeTags;
import net.minecraft.util.Identifier;
Expand Down Expand Up @@ -149,8 +150,6 @@ static public Optional<Identifier> guessFittingTextureSet(RegistryKey<Biome> bio
return Optional.of(AntiqueAtlasMod.id("mushroom"));
}



if (biomeTag.isIn(BiomeTags.IS_BADLANDS)) {
return Optional.of(AntiqueAtlasMod.id("mesa"));
}
Expand All @@ -163,6 +162,6 @@ static public Optional<Identifier> guessFittingTextureSet(RegistryKey<Biome> bio
AntiqueAtlasMod.LOG.warn("Underground biomes aren't supported yet.");
}

return Optional.empty();
return TileTextureMap.guessFittingTextureSetFallback(biomeTag.value());
}
}

0 comments on commit af64cc5

Please sign in to comment.