mirror of
https://github.com/PolyhedralDev/Terra.git
synced 2025-07-04 00:45:57 +00:00
register some tags
This commit is contained in:
parent
b4d34589d8
commit
0b49bf4dc9
@ -59,20 +59,6 @@ public final class FabricAddon implements BaseAddon {
|
|||||||
.priority(100)
|
.priority(100)
|
||||||
.global();
|
.global();
|
||||||
|
|
||||||
terraFabricPlugin.getEventManager()
|
|
||||||
.getHandler(FunctionalEventHandler.class)
|
|
||||||
.register(this, BiomeRegistrationEvent.class)
|
|
||||||
.then(event -> {
|
|
||||||
logger.info("Registering biomes...");
|
|
||||||
|
|
||||||
terraFabricPlugin.getConfigRegistry().forEach(pack -> { // Register all Terra biomes.
|
|
||||||
pack.getCheckedRegistry(Biome.class)
|
|
||||||
.forEach((id, biome) -> FabricUtil.registerBiome(biome, pack, event.getRegistryManager(), id));
|
|
||||||
});
|
|
||||||
logger.info("Biomes registered.");
|
|
||||||
})
|
|
||||||
.global();
|
|
||||||
|
|
||||||
terraFabricPlugin.getEventManager()
|
terraFabricPlugin.getEventManager()
|
||||||
.getHandler(FunctionalEventHandler.class)
|
.getHandler(FunctionalEventHandler.class)
|
||||||
.register(this, ConfigurationLoadEvent.class)
|
.register(this, ConfigurationLoadEvent.class)
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package com.dfsek.terra.fabric.mixin.lifecycle;
|
package com.dfsek.terra.fabric.mixin.lifecycle;
|
||||||
|
|
||||||
import com.dfsek.terra.fabric.util.FabricUtil;
|
import com.dfsek.terra.fabric.FabricEntryPoint;
|
||||||
|
import com.dfsek.terra.fabric.event.BiomeRegistrationEvent;
|
||||||
|
|
||||||
import net.minecraft.server.DataPackContents;
|
import net.minecraft.server.DataPackContents;
|
||||||
import net.minecraft.util.registry.DynamicRegistryManager;
|
import net.minecraft.util.registry.DynamicRegistryManager;
|
||||||
@ -13,6 +14,8 @@ import org.spongepowered.asm.mixin.injection.At;
|
|||||||
import org.spongepowered.asm.mixin.injection.Inject;
|
import org.spongepowered.asm.mixin.injection.Inject;
|
||||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||||
|
|
||||||
|
import com.dfsek.terra.fabric.util.FabricUtil;
|
||||||
|
|
||||||
|
|
||||||
@Mixin(DataPackContents.class)
|
@Mixin(DataPackContents.class)
|
||||||
public class DataPackContentsMixin {
|
public class DataPackContentsMixin {
|
||||||
@ -22,7 +25,6 @@ public class DataPackContentsMixin {
|
|||||||
|
|
||||||
@Inject(method = "refresh(Lnet/minecraft/util/registry/DynamicRegistryManager;)V", at = @At("RETURN"))
|
@Inject(method = "refresh(Lnet/minecraft/util/registry/DynamicRegistryManager;)V", at = @At("RETURN"))
|
||||||
private void injectReload(DynamicRegistryManager dynamicRegistryManager, CallbackInfo ci) {
|
private void injectReload(DynamicRegistryManager dynamicRegistryManager, CallbackInfo ci) {
|
||||||
LOGGER.info("Doing tag garbage....");
|
|
||||||
FabricUtil.registerTags(dynamicRegistryManager.get(Registry.BIOME_KEY));
|
FabricUtil.registerTags(dynamicRegistryManager.get(Registry.BIOME_KEY));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -17,12 +17,15 @@
|
|||||||
|
|
||||||
package com.dfsek.terra.fabric.mixin.lifecycle.client;
|
package com.dfsek.terra.fabric.mixin.lifecycle.client;
|
||||||
|
|
||||||
|
import com.dfsek.terra.fabric.util.FabricUtil;
|
||||||
|
|
||||||
import net.minecraft.client.MinecraftClient;
|
import net.minecraft.client.MinecraftClient;
|
||||||
import net.minecraft.client.RunArgs;
|
import net.minecraft.client.RunArgs;
|
||||||
import net.minecraft.client.world.GeneratorType;
|
import net.minecraft.client.world.GeneratorType;
|
||||||
import net.minecraft.text.LiteralText;
|
import net.minecraft.text.LiteralText;
|
||||||
import net.minecraft.util.registry.DynamicRegistryManager;
|
import net.minecraft.util.registry.DynamicRegistryManager;
|
||||||
import net.minecraft.util.registry.DynamicRegistryManager.Mutable;
|
import net.minecraft.util.registry.DynamicRegistryManager.Mutable;
|
||||||
|
import net.minecraft.util.registry.Registry;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.spongepowered.asm.mixin.Final;
|
import org.spongepowered.asm.mixin.Final;
|
||||||
import org.spongepowered.asm.mixin.Mixin;
|
import org.spongepowered.asm.mixin.Mixin;
|
||||||
@ -34,7 +37,6 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
|||||||
|
|
||||||
import com.dfsek.terra.api.event.events.platform.PlatformInitializationEvent;
|
import com.dfsek.terra.api.event.events.platform.PlatformInitializationEvent;
|
||||||
import com.dfsek.terra.fabric.FabricEntryPoint;
|
import com.dfsek.terra.fabric.FabricEntryPoint;
|
||||||
import com.dfsek.terra.fabric.event.BiomeRegistrationEvent;
|
|
||||||
import com.dfsek.terra.fabric.generation.TerraGeneratorType;
|
import com.dfsek.terra.fabric.generation.TerraGeneratorType;
|
||||||
import com.dfsek.terra.fabric.mixin.access.GeneratorTypeAccessor;
|
import com.dfsek.terra.fabric.mixin.access.GeneratorTypeAccessor;
|
||||||
|
|
||||||
@ -54,7 +56,7 @@ public class MinecraftClientMixin {
|
|||||||
private static Mutable injectBiomes() {
|
private static Mutable injectBiomes() {
|
||||||
Mutable mutable = DynamicRegistryManager.createAndLoad();
|
Mutable mutable = DynamicRegistryManager.createAndLoad();
|
||||||
LOGGER.info("Injecting Terra biomes...");
|
LOGGER.info("Injecting Terra biomes...");
|
||||||
FabricEntryPoint.getPlatform().getEventManager().callEvent(new BiomeRegistrationEvent(mutable));
|
FabricUtil.registerBiomes(mutable.get(Registry.BIOME_KEY));
|
||||||
return mutable;
|
return mutable;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -17,9 +17,12 @@
|
|||||||
|
|
||||||
package com.dfsek.terra.fabric.mixin.lifecycle.server;
|
package com.dfsek.terra.fabric.mixin.lifecycle.server;
|
||||||
|
|
||||||
|
import com.dfsek.terra.fabric.util.FabricUtil;
|
||||||
|
|
||||||
import net.minecraft.server.Main;
|
import net.minecraft.server.Main;
|
||||||
import net.minecraft.util.registry.DynamicRegistryManager;
|
import net.minecraft.util.registry.DynamicRegistryManager;
|
||||||
import net.minecraft.util.registry.DynamicRegistryManager.Mutable;
|
import net.minecraft.util.registry.DynamicRegistryManager.Mutable;
|
||||||
|
import net.minecraft.util.registry.Registry;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.spongepowered.asm.mixin.Final;
|
import org.spongepowered.asm.mixin.Final;
|
||||||
import org.spongepowered.asm.mixin.Mixin;
|
import org.spongepowered.asm.mixin.Mixin;
|
||||||
@ -31,7 +34,6 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
|||||||
|
|
||||||
import com.dfsek.terra.api.event.events.platform.PlatformInitializationEvent;
|
import com.dfsek.terra.api.event.events.platform.PlatformInitializationEvent;
|
||||||
import com.dfsek.terra.fabric.FabricEntryPoint;
|
import com.dfsek.terra.fabric.FabricEntryPoint;
|
||||||
import com.dfsek.terra.fabric.event.BiomeRegistrationEvent;
|
|
||||||
|
|
||||||
|
|
||||||
@Mixin(Main.class)
|
@Mixin(Main.class)
|
||||||
@ -60,7 +62,7 @@ public class ServerMainMixin {
|
|||||||
private static Mutable injectBiomes() {
|
private static Mutable injectBiomes() {
|
||||||
Mutable mutable = DynamicRegistryManager.createAndLoad();
|
Mutable mutable = DynamicRegistryManager.createAndLoad();
|
||||||
LOGGER.info("Injecting Terra biomes...");
|
LOGGER.info("Injecting Terra biomes...");
|
||||||
FabricEntryPoint.getPlatform().getEventManager().callEvent(new BiomeRegistrationEvent(mutable));
|
FabricUtil.registerBiomes(mutable.get(Registry.BIOME_KEY));
|
||||||
return mutable;
|
return mutable;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -17,28 +17,29 @@
|
|||||||
|
|
||||||
package com.dfsek.terra.fabric.util;
|
package com.dfsek.terra.fabric.util;
|
||||||
|
|
||||||
|
import com.google.common.collect.ImmutableMap;
|
||||||
import net.minecraft.block.entity.LootableContainerBlockEntity;
|
import net.minecraft.block.entity.LootableContainerBlockEntity;
|
||||||
import net.minecraft.block.entity.MobSpawnerBlockEntity;
|
import net.minecraft.block.entity.MobSpawnerBlockEntity;
|
||||||
import net.minecraft.block.entity.SignBlockEntity;
|
import net.minecraft.block.entity.SignBlockEntity;
|
||||||
import net.minecraft.tag.TagKey;
|
import net.minecraft.tag.TagKey;
|
||||||
import net.minecraft.util.Identifier;
|
import net.minecraft.util.Identifier;
|
||||||
import net.minecraft.util.math.BlockPos;
|
import net.minecraft.util.math.BlockPos;
|
||||||
import net.minecraft.util.registry.DynamicRegistryManager;
|
|
||||||
import net.minecraft.util.registry.Registry;
|
import net.minecraft.util.registry.Registry;
|
||||||
import net.minecraft.util.registry.RegistryEntry;
|
import net.minecraft.util.registry.RegistryEntry;
|
||||||
import net.minecraft.util.registry.RegistryEntryList.Named;
|
|
||||||
import net.minecraft.world.WorldAccess;
|
import net.minecraft.world.WorldAccess;
|
||||||
import net.minecraft.world.biome.Biome.Builder;
|
import net.minecraft.world.biome.Biome.Builder;
|
||||||
import net.minecraft.world.biome.BiomeEffects;
|
import net.minecraft.world.biome.BiomeEffects;
|
||||||
import net.minecraft.world.biome.GenerationSettings;
|
import net.minecraft.world.biome.GenerationSettings;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
import java.util.stream.Stream;
|
|
||||||
|
|
||||||
import com.dfsek.terra.api.block.entity.BlockEntity;
|
import com.dfsek.terra.api.block.entity.BlockEntity;
|
||||||
import com.dfsek.terra.api.block.entity.Container;
|
import com.dfsek.terra.api.block.entity.Container;
|
||||||
@ -46,17 +47,29 @@ import com.dfsek.terra.api.block.entity.MobSpawner;
|
|||||||
import com.dfsek.terra.api.block.entity.Sign;
|
import com.dfsek.terra.api.block.entity.Sign;
|
||||||
import com.dfsek.terra.api.config.ConfigPack;
|
import com.dfsek.terra.api.config.ConfigPack;
|
||||||
import com.dfsek.terra.api.world.biome.Biome;
|
import com.dfsek.terra.api.world.biome.Biome;
|
||||||
|
import com.dfsek.terra.fabric.FabricEntryPoint;
|
||||||
import com.dfsek.terra.fabric.config.PreLoadCompatibilityOptions;
|
import com.dfsek.terra.fabric.config.PreLoadCompatibilityOptions;
|
||||||
import com.dfsek.terra.fabric.config.VanillaBiomeProperties;
|
import com.dfsek.terra.fabric.config.VanillaBiomeProperties;
|
||||||
import com.dfsek.terra.fabric.mixin.access.BiomeEffectsAccessor;
|
import com.dfsek.terra.fabric.mixin.access.BiomeEffectsAccessor;
|
||||||
|
|
||||||
|
|
||||||
public final class FabricUtil {
|
public final class FabricUtil {
|
||||||
|
private static final Logger logger = LoggerFactory.getLogger(FabricUtil.class);
|
||||||
|
|
||||||
public static String createBiomeID(ConfigPack pack, com.dfsek.terra.api.registry.key.RegistryKey biomeID) {
|
public static String createBiomeID(ConfigPack pack, com.dfsek.terra.api.registry.key.RegistryKey biomeID) {
|
||||||
return pack.getID()
|
return pack.getID()
|
||||||
.toLowerCase() + "/" + biomeID.getNamespace().toLowerCase(Locale.ROOT) + "/" + biomeID.getID().toLowerCase(Locale.ROOT);
|
.toLowerCase() + "/" + biomeID.getNamespace().toLowerCase(Locale.ROOT) + "/" + biomeID.getID().toLowerCase(Locale.ROOT);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void registerBiomes(Registry<net.minecraft.world.biome.Biome> biomeRegistry) {
|
||||||
|
logger.info("Registering biomes...");
|
||||||
|
FabricEntryPoint.getPlatform().getConfigRegistry().forEach(pack -> { // Register all Terra biomes.
|
||||||
|
pack.getCheckedRegistry(Biome.class)
|
||||||
|
.forEach((id, biome) -> registerBiome(biome, pack, biomeRegistry, id));
|
||||||
|
});
|
||||||
|
logger.info("Biomes registered.");
|
||||||
|
}
|
||||||
|
|
||||||
private static final Map<RegistryEntry<net.minecraft.world.biome.Biome>, RegistryEntry<net.minecraft.world.biome.Biome>>
|
private static final Map<RegistryEntry<net.minecraft.world.biome.Biome>, RegistryEntry<net.minecraft.world.biome.Biome>>
|
||||||
TERRA_BIOME_MAP = new HashMap<>();
|
TERRA_BIOME_MAP = new HashMap<>();
|
||||||
private static final Map<Biome, RegistryEntry<net.minecraft.world.biome.Biome>> BIOME_MAP = new HashMap<>();
|
private static final Map<Biome, RegistryEntry<net.minecraft.world.biome.Biome>> BIOME_MAP = new HashMap<>();
|
||||||
@ -67,9 +80,8 @@ public final class FabricUtil {
|
|||||||
* @param biome The Terra BiomeBuilder.
|
* @param biome The Terra BiomeBuilder.
|
||||||
* @param pack The ConfigPack this biome belongs to.
|
* @param pack The ConfigPack this biome belongs to.
|
||||||
*/
|
*/
|
||||||
public static void registerBiome(Biome biome, ConfigPack pack, DynamicRegistryManager registryManager,
|
public static void registerBiome(Biome biome, ConfigPack pack, Registry<net.minecraft.world.biome.Biome> registry,
|
||||||
com.dfsek.terra.api.registry.key.RegistryKey id) {
|
com.dfsek.terra.api.registry.key.RegistryKey id) {
|
||||||
Registry<net.minecraft.world.biome.Biome> registry = registryManager.get(Registry.BIOME_KEY);
|
|
||||||
RegistryEntry<net.minecraft.world.biome.Biome> vanilla = ((ProtoPlatformBiome) biome.getPlatformBiome()).get(registry);
|
RegistryEntry<net.minecraft.world.biome.Biome> vanilla = ((ProtoPlatformBiome) biome.getPlatformBiome()).get(registry);
|
||||||
|
|
||||||
|
|
||||||
@ -97,29 +109,26 @@ public final class FabricUtil {
|
|||||||
return BIOME_MAP.get(biome);
|
return BIOME_MAP.get(biome);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static Stream<RegistryEntry<net.minecraft.world.biome.Biome>> getMatchingBiome(Named<net.minecraft.world.biome.Biome> named) {
|
|
||||||
return TERRA_BIOME_MAP.keySet()
|
|
||||||
.stream()
|
|
||||||
.filter(named::contains)
|
|
||||||
.map(TERRA_BIOME_MAP::get);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void registerTags(Registry<net.minecraft.world.biome.Biome> registry) {
|
public static void registerTags(Registry<net.minecraft.world.biome.Biome> registry) {
|
||||||
|
logger.info("Doing tag garbage....");
|
||||||
Map<TagKey<net.minecraft.world.biome.Biome>, List<RegistryEntry<net.minecraft.world.biome.Biome>>> collect = registry
|
Map<TagKey<net.minecraft.world.biome.Biome>, List<RegistryEntry<net.minecraft.world.biome.Biome>>> collect = registry
|
||||||
.streamTagsAndEntries()
|
.streamTagsAndEntries()
|
||||||
.peek(System.out::println)
|
|
||||||
.collect(HashMap::new,
|
.collect(HashMap::new,
|
||||||
(map, pair) ->
|
(map, pair) ->
|
||||||
map.put(pair.getFirst(),
|
map.put(pair.getFirst(), new ArrayList<>(pair.getSecond().stream().toList())),
|
||||||
Stream.concat(pair.getSecond().stream(), getMatchingBiome(pair.getSecond())).toList()),
|
|
||||||
HashMap::putAll);
|
HashMap::putAll);
|
||||||
registry.clearTags();
|
|
||||||
registry.populateTags(collect);
|
|
||||||
|
|
||||||
System.out.println(registry.streamEntries()
|
TERRA_BIOME_MAP.forEach((vanilla, terra) -> getEntry(registry, vanilla.getKey().orElseThrow().getValue()).orElseThrow()
|
||||||
.map(e -> e.registryKey().getValue() + ": " +
|
.streamTags()
|
||||||
e.streamTags().reduce("", (s, t) -> s + ", " + t, String::concat))
|
.forEach(tag -> collect.computeIfAbsent(tag, t -> new ArrayList<>()).add(getEntry(registry, terra.getKey().orElseThrow().getValue()).orElseThrow())));
|
||||||
.reduce("", (s, s2) -> s + "\n" + s2));
|
|
||||||
|
registry.clearTags();
|
||||||
|
registry.populateTags(ImmutableMap.copyOf(collect));
|
||||||
|
|
||||||
|
registry.streamEntries()
|
||||||
|
.map(e -> e.registryKey().getValue() + ": " +
|
||||||
|
e.streamTags().reduce("", (s, t) -> t.id() + ", " + s, String::concat))
|
||||||
|
.forEach(logger::info);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static net.minecraft.world.biome.Biome createBiome(Biome biome, net.minecraft.world.biome.Biome vanilla) {
|
public static net.minecraft.world.biome.Biome createBiome(Biome biome, net.minecraft.world.biome.Biome vanilla) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user