Skip to content

Commit

Permalink
feat: Biome tint stuff, wip
Browse files Browse the repository at this point in the history
  • Loading branch information
Zepalesque committed May 23, 2024
1 parent 8bf60ba commit a4da6d0
Show file tree
Hide file tree
Showing 4 changed files with 124 additions and 1 deletion.
14 changes: 13 additions & 1 deletion src/main/java/net/zepalesque/zenith/Zenith.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,11 @@
import net.neoforged.fml.event.lifecycle.FMLCommonSetupEvent;
import net.neoforged.fml.loading.FMLPaths;
import net.neoforged.neoforge.registries.DataPackRegistryEvent;
import net.neoforged.neoforge.registries.datamaps.DataMapEntry;
import net.neoforged.neoforge.registries.datamaps.DataMapType;
import net.neoforged.neoforge.registries.datamaps.RegisterDataMapTypesEvent;
import net.zepalesque.zenith.api.biometint.BiomeTint;
import net.zepalesque.zenith.api.biometint.BiomeTints;
import net.zepalesque.zenith.api.condition.Condition;
import net.zepalesque.zenith.api.condition.ConditionElements;
import net.zepalesque.zenith.api.condition.ConfigCondition;
Expand All @@ -40,9 +45,11 @@ public class Zenith
public Zenith(IEventBus bus, Dist dist) {

bus.addListener(this::commonSetup);
bus.addListener(this::registerDataMaps);
bus.addListener(DataPackRegistryEvent.NewRegistry.class, event -> event.dataPackRegistry(Keys.CONDITION, Condition.ELEMENT_CODEC, Condition.ELEMENT_CODEC));

ConditionElements.ELEMENTS.register(bus);
BiomeTints.TINTS.register(bus);
ZenithRecipeConditions.CODECS.register(bus);
ZenithPlacementModifiers.FILTERS.register(bus);
ZenithLootConditions.LOOT_CONDITIONS.register(bus);
Expand All @@ -61,6 +68,10 @@ private void commonSetup(final FMLCommonSetupEvent event) {

}

private void registerDataMaps(RegisterDataMapTypesEvent event) {
BiomeTint.MAPS.forEach(event::register);
}

@Mod.EventBusSubscriber(modid = MODID, bus = Mod.EventBusSubscriber.Bus.MOD, value = Dist.CLIENT)
public static class ClientModEvents {

Expand All @@ -76,9 +87,10 @@ public static ResourceLocation loc(String path) {
}

public static class Keys {

public static final ResourceKey<Registry<Codec<? extends Condition<?>>>> CONDITION_ELEMENT = ResourceKey.createRegistryKey(Zenith.loc("condition_element"));
public static final ResourceKey<Registry<Condition<?>>> CONDITION = ResourceKey.createRegistryKey(Zenith.loc("condition"));

public static final ResourceKey<Registry<BiomeTint>> BIOME_TINT = ResourceKey.createRegistryKey(Zenith.loc("biome_tint"));
}


Expand Down
59 changes: 59 additions & 0 deletions src/main/java/net/zepalesque/zenith/api/biometint/BiomeTint.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
package net.zepalesque.zenith.api.biometint;

import com.mojang.serialization.Codec;
import net.minecraft.core.registries.Registries;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.level.biome.Biome;
import net.neoforged.neoforge.registries.datamaps.DataMapType;

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;

public class BiomeTint {

private final DataMapType<Biome, Integer> dataMap;
private Map<Biome, Integer> tints = null;
private final int defaultColor;

public static Collection<DataMapType<Biome, Integer>> MAPS = new ArrayList<>();

public BiomeTint(ResourceLocation loc, int defaultColor) {
DataMapType<Biome, Integer> dataMap = createTintMap(loc);
MAPS.add(dataMap);
this.dataMap = dataMap;
this.defaultColor = defaultColor;
}

private static DataMapType<Biome, Integer> createTintMap(ResourceLocation location) {
return DataMapType.builder(location.withPrefix("tint/"), Registries.BIOME, Codec.INT).synced(Codec.INT, true).build();
}

public int getColor(Biome biome) {
if (this.tints == null) {
throw new UnsupportedOperationException("Biome tints have not been initialized yet!");
} else {
return this.tints.getOrDefault(biome, defaultColor);
}
}

public void clearTints() {
if (this.tints == null) {
this.tints = new HashMap<>();
} else {
this.tints.clear();
}
}
public void addTint(Biome biome, int color) {
if (this.tints == null) {
throw new UnsupportedOperationException("Biome tints have not been initialized yet!");
} else {
this.tints.put(biome, color);
}
}

public DataMapType<Biome, Integer> getDataMap() {
return this.dataMap;
}
}
20 changes: 20 additions & 0 deletions src/main/java/net/zepalesque/zenith/api/biometint/BiomeTints.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package net.zepalesque.zenith.api.biometint;

import com.mojang.serialization.Codec;
import net.minecraft.core.Registry;
import net.neoforged.neoforge.registries.DeferredHolder;
import net.neoforged.neoforge.registries.DeferredRegister;
import net.neoforged.neoforge.registries.RegistryBuilder;
import net.zepalesque.zenith.Zenith;
import net.zepalesque.zenith.api.condition.Condition;
import net.zepalesque.zenith.api.condition.ConfigCondition;

public class BiomeTints {

public static final DeferredRegister<BiomeTint> TINTS = DeferredRegister.create(Zenith.Keys.BIOME_TINT, Zenith.MODID);
public static final Registry<BiomeTint> TINT_REGISTRY = new RegistryBuilder<>(Zenith.Keys.BIOME_TINT).sync(true).create();

public static final DeferredHolder<BiomeTint, BiomeTint> TEST = TINTS.register("test_tint", () -> new BiomeTint(Zenith.loc("test_tint"), 0xFFFFFF));


}
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package net.zepalesque.zenith.event.listener;


import net.minecraft.core.Registry;
import net.minecraft.core.registries.Registries;
import net.minecraft.resources.ResourceKey;
import net.minecraft.world.level.biome.Biome;
import net.neoforged.bus.api.SubscribeEvent;
import net.neoforged.fml.common.Mod;
import net.neoforged.neoforge.client.event.ClientPlayerNetworkEvent;
import net.neoforged.neoforge.registries.datamaps.DataMapType;
import net.zepalesque.zenith.Zenith;
import net.zepalesque.zenith.api.biometint.BiomeTints;

import java.util.HashMap;
import java.util.Map;

@Mod.EventBusSubscriber(modid = Zenith.MODID)
public class BiomeTintListener {

@SubscribeEvent
public static void sendColors(ClientPlayerNetworkEvent.LoggingIn event) {
BiomeTints.TINT_REGISTRY.forEach(tint -> {
tint.clearTints();
Registry<Biome> registry = event.getPlayer().level().registryAccess().registryOrThrow(Registries.BIOME);
for (Map.Entry<ResourceKey<Biome>, Integer> entry : registry.getDataMap(tint.getDataMap()).entrySet()) {
Biome b = registry.get(entry.getKey());
tint.addTint(b, entry.getValue());
}
});
}
}

0 comments on commit a4da6d0

Please sign in to comment.