mirror of
https://github.com/PolyhedralDev/Terra.git
synced 2026-06-17 14:21:08 +00:00
Expand the AwfulHacks series
This commit is contained in:
+106
@@ -0,0 +1,106 @@
|
|||||||
|
package com.dfsek.terra.bukkit.nms.v1_18_R2;
|
||||||
|
|
||||||
|
import com.dfsek.terra.bukkit.world.BukkitPlatformBiome;
|
||||||
|
import com.dfsek.terra.registry.master.ConfigRegistry;
|
||||||
|
|
||||||
|
import com.google.common.collect.ImmutableMap;
|
||||||
|
import com.mojang.serialization.Lifecycle;
|
||||||
|
import net.minecraft.core.Holder;
|
||||||
|
import net.minecraft.core.MappedRegistry;
|
||||||
|
import net.minecraft.core.Registry;
|
||||||
|
import net.minecraft.core.WritableRegistry;
|
||||||
|
import net.minecraft.data.BuiltinRegistries;
|
||||||
|
import net.minecraft.resources.ResourceKey;
|
||||||
|
import net.minecraft.resources.ResourceLocation;
|
||||||
|
import net.minecraft.tags.TagKey;
|
||||||
|
import net.minecraft.world.level.biome.Biome;
|
||||||
|
import org.bukkit.NamespacedKey;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
|
||||||
|
public class AwfulBukkitHacks {
|
||||||
|
private static final Logger LOGGER = LoggerFactory.getLogger(NMSBiomeInjector.class);
|
||||||
|
private static final Map<ResourceLocation, List<ResourceLocation>> terraBiomeMap = new HashMap<>();
|
||||||
|
|
||||||
|
|
||||||
|
public static void registerBiomes(ConfigRegistry configRegistry) {
|
||||||
|
try {
|
||||||
|
LOGGER.info("Hacking biome registry...");
|
||||||
|
WritableRegistry<Biome> biomeRegistry = (WritableRegistry<Biome>) Registries.biomeRegistry();
|
||||||
|
|
||||||
|
Reflection.MAPPED_REGISTRY.setFrozen((MappedRegistry<?>) biomeRegistry, false);
|
||||||
|
|
||||||
|
configRegistry.forEach(pack -> pack.getRegistry(com.dfsek.terra.api.world.biome.Biome.class).forEach((key, biome) -> {
|
||||||
|
try {
|
||||||
|
BukkitPlatformBiome platformBiome = (BukkitPlatformBiome) biome.getPlatformBiome();
|
||||||
|
NamespacedKey vanillaBukkitKey = platformBiome.getHandle().getKey();
|
||||||
|
ResourceLocation vanillaMinecraftKey = new ResourceLocation(vanillaBukkitKey.getNamespace(), vanillaBukkitKey.getKey());
|
||||||
|
Biome platform = NMSBiomeInjector.createBiome(
|
||||||
|
biome,
|
||||||
|
biomeRegistry.get(vanillaMinecraftKey) // get
|
||||||
|
);
|
||||||
|
|
||||||
|
ResourceKey<Biome> delegateKey = ResourceKey.create(Registry.BIOME_REGISTRY, new ResourceLocation("terra", NMSBiomeInjector.createBiomeID(pack, key)));
|
||||||
|
|
||||||
|
BuiltinRegistries.register(BuiltinRegistries.BIOME, delegateKey, platform);
|
||||||
|
biomeRegistry.register(delegateKey, platform, Lifecycle.stable());
|
||||||
|
platformBiome.getContext().put(new NMSBiomeInfo(delegateKey));
|
||||||
|
|
||||||
|
terraBiomeMap.computeIfAbsent(vanillaMinecraftKey, i -> new ArrayList<>()).add(delegateKey.location());
|
||||||
|
|
||||||
|
LOGGER.debug("Registered biome: " + delegateKey);
|
||||||
|
} catch(NoSuchFieldException | SecurityException | IllegalArgumentException | IllegalAccessException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
|
||||||
|
Reflection.MAPPED_REGISTRY.setFrozen((MappedRegistry<?>) biomeRegistry, true); // freeze registry again :)
|
||||||
|
|
||||||
|
LOGGER.info("Doing tag garbage....");
|
||||||
|
Map<TagKey<Biome>, List<Holder<Biome>>> collect = biomeRegistry
|
||||||
|
.getTags() // streamKeysAndEntries
|
||||||
|
.collect(HashMap::new,
|
||||||
|
(map, pair) ->
|
||||||
|
map.put(pair.getFirst(), new ArrayList<>(pair.getSecond().stream().toList())),
|
||||||
|
HashMap::putAll);
|
||||||
|
|
||||||
|
terraBiomeMap
|
||||||
|
.forEach((vb, terraBiomes) ->
|
||||||
|
NMSBiomeInjector.getEntry(biomeRegistry, vb)
|
||||||
|
.ifPresentOrElse(
|
||||||
|
vanilla -> terraBiomes
|
||||||
|
.forEach(tb -> NMSBiomeInjector.getEntry(biomeRegistry, tb)
|
||||||
|
.ifPresentOrElse(
|
||||||
|
terra -> {
|
||||||
|
LOGGER.debug(vanilla.unwrapKey().orElseThrow().location() +
|
||||||
|
" (vanilla for " +
|
||||||
|
terra.unwrapKey().orElseThrow().location() +
|
||||||
|
": " +
|
||||||
|
vanilla.tags().toList());
|
||||||
|
|
||||||
|
vanilla.tags()
|
||||||
|
.forEach(
|
||||||
|
tag -> collect
|
||||||
|
.computeIfAbsent(tag,
|
||||||
|
t -> new ArrayList<>())
|
||||||
|
.add(terra));
|
||||||
|
},
|
||||||
|
() -> LOGGER.error(
|
||||||
|
"No such biome: {}",
|
||||||
|
tb))),
|
||||||
|
() -> LOGGER.error("No vanilla biome: {}", vb)));
|
||||||
|
|
||||||
|
biomeRegistry.resetTags(); // clearTags
|
||||||
|
biomeRegistry.bindTags(ImmutableMap.copyOf(collect)); // populateTags
|
||||||
|
|
||||||
|
} catch(SecurityException | IllegalArgumentException exception) {
|
||||||
|
throw new RuntimeException(exception);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
+1
-79
@@ -31,84 +31,6 @@ import com.dfsek.terra.registry.master.ConfigRegistry;
|
|||||||
|
|
||||||
|
|
||||||
public class NMSBiomeInjector {
|
public class NMSBiomeInjector {
|
||||||
private static final Logger LOGGER = LoggerFactory.getLogger(NMSBiomeInjector.class);
|
|
||||||
private static final Map<ResourceLocation, List<ResourceLocation>> terraBiomeMap = new HashMap<>();
|
|
||||||
|
|
||||||
|
|
||||||
public static void registerBiomes(ConfigRegistry configRegistry) {
|
|
||||||
try {
|
|
||||||
LOGGER.info("Hacking biome registry...");
|
|
||||||
WritableRegistry<Biome> biomeRegistry = (WritableRegistry<Biome>) Registries.biomeRegistry();
|
|
||||||
|
|
||||||
Reflection.MAPPED_REGISTRY.setFrozen((MappedRegistry<?>) biomeRegistry, false);
|
|
||||||
|
|
||||||
configRegistry.forEach(pack -> pack.getRegistry(com.dfsek.terra.api.world.biome.Biome.class).forEach((key, biome) -> {
|
|
||||||
try {
|
|
||||||
BukkitPlatformBiome platformBiome = (BukkitPlatformBiome) biome.getPlatformBiome();
|
|
||||||
NamespacedKey vanillaBukkitKey = platformBiome.getHandle().getKey();
|
|
||||||
ResourceLocation vanillaMinecraftKey = new ResourceLocation(vanillaBukkitKey.getNamespace(), vanillaBukkitKey.getKey());
|
|
||||||
Biome platform = createBiome(
|
|
||||||
biome,
|
|
||||||
biomeRegistry.get(vanillaMinecraftKey) // get
|
|
||||||
);
|
|
||||||
|
|
||||||
ResourceKey<Biome> delegateKey = ResourceKey.create(Registry.BIOME_REGISTRY, new ResourceLocation("terra", createBiomeID(pack, key)));
|
|
||||||
|
|
||||||
BuiltinRegistries.register(BuiltinRegistries.BIOME, delegateKey, platform);
|
|
||||||
biomeRegistry.register(delegateKey, platform, Lifecycle.stable());
|
|
||||||
platformBiome.getContext().put(new NMSBiomeInfo(delegateKey));
|
|
||||||
|
|
||||||
terraBiomeMap.computeIfAbsent(vanillaMinecraftKey, i -> new ArrayList<>()).add(delegateKey.location());
|
|
||||||
|
|
||||||
LOGGER.debug("Registered biome: " + delegateKey);
|
|
||||||
} catch(NoSuchFieldException | SecurityException | IllegalArgumentException | IllegalAccessException e) {
|
|
||||||
throw new RuntimeException(e);
|
|
||||||
}
|
|
||||||
}));
|
|
||||||
|
|
||||||
Reflection.MAPPED_REGISTRY.setFrozen((MappedRegistry<?>) biomeRegistry, true); // freeze registry again :)
|
|
||||||
|
|
||||||
LOGGER.info("Doing tag garbage....");
|
|
||||||
Map<TagKey<Biome>, List<Holder<Biome>>> collect = biomeRegistry
|
|
||||||
.getTags() // streamKeysAndEntries
|
|
||||||
.collect(HashMap::new,
|
|
||||||
(map, pair) ->
|
|
||||||
map.put(pair.getFirst(), new ArrayList<>(pair.getSecond().stream().toList())),
|
|
||||||
HashMap::putAll);
|
|
||||||
|
|
||||||
terraBiomeMap
|
|
||||||
.forEach((vb, terraBiomes) ->
|
|
||||||
getEntry(biomeRegistry, vb)
|
|
||||||
.ifPresentOrElse(
|
|
||||||
vanilla -> terraBiomes
|
|
||||||
.forEach(tb -> getEntry(biomeRegistry, tb)
|
|
||||||
.ifPresentOrElse(
|
|
||||||
terra -> {
|
|
||||||
LOGGER.debug(vanilla.unwrapKey().orElseThrow().location() +
|
|
||||||
" (vanilla for " +
|
|
||||||
terra.unwrapKey().orElseThrow().location() +
|
|
||||||
": " +
|
|
||||||
vanilla.tags().toList());
|
|
||||||
|
|
||||||
vanilla.tags()
|
|
||||||
.forEach(
|
|
||||||
tag -> collect
|
|
||||||
.computeIfAbsent(tag,
|
|
||||||
t -> new ArrayList<>())
|
|
||||||
.add(terra));
|
|
||||||
},
|
|
||||||
() -> LOGGER.error(
|
|
||||||
"No such biome: {}",
|
|
||||||
tb))),
|
|
||||||
() -> LOGGER.error("No vanilla biome: {}", vb)));
|
|
||||||
|
|
||||||
biomeRegistry.resetTags(); // clearTags
|
|
||||||
biomeRegistry.bindTags(ImmutableMap.copyOf(collect)); // populateTags
|
|
||||||
|
|
||||||
} catch(SecurityException | IllegalArgumentException exception) {
|
|
||||||
throw new RuntimeException(exception);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static <T> Optional<Holder<T>> getEntry(Registry<T> registry, ResourceLocation identifier) {
|
public static <T> Optional<Holder<T>> getEntry(Registry<T> registry, ResourceLocation identifier) {
|
||||||
return registry.getOptional(identifier)
|
return registry.getOptional(identifier)
|
||||||
@@ -116,7 +38,7 @@ public class NMSBiomeInjector {
|
|||||||
.map(registry::getOrCreateHolder);
|
.map(registry::getOrCreateHolder);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static Biome createBiome(com.dfsek.terra.api.world.biome.Biome biome, Biome vanilla)
|
public static Biome createBiome(com.dfsek.terra.api.world.biome.Biome biome, Biome vanilla)
|
||||||
throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException {
|
throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException {
|
||||||
Biome.BiomeBuilder builder = new Biome.BiomeBuilder(); // Builder
|
Biome.BiomeBuilder builder = new Biome.BiomeBuilder(); // Builder
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -9,7 +9,7 @@ import com.dfsek.terra.bukkit.nms.Initializer;
|
|||||||
public class NMSInitializer implements Initializer {
|
public class NMSInitializer implements Initializer {
|
||||||
@Override
|
@Override
|
||||||
public void initialize(PlatformImpl platform) {
|
public void initialize(PlatformImpl platform) {
|
||||||
NMSBiomeInjector.registerBiomes(platform.getRawConfigRegistry());
|
AwfulBukkitHacks.registerBiomes(platform.getRawConfigRegistry());
|
||||||
Bukkit.getPluginManager().registerEvents(new NMSInjectListener(), platform.getPlugin());
|
Bukkit.getPluginManager().registerEvents(new NMSInjectListener(), platform.getPlugin());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+102
@@ -0,0 +1,102 @@
|
|||||||
|
package com.dfsek.terra.bukkit.nms.v1_19_R1;
|
||||||
|
|
||||||
|
import com.dfsek.terra.bukkit.world.BukkitPlatformBiome;
|
||||||
|
import com.dfsek.terra.registry.master.ConfigRegistry;
|
||||||
|
import com.google.common.collect.ImmutableMap;
|
||||||
|
import com.mojang.serialization.Lifecycle;
|
||||||
|
import net.minecraft.core.Holder;
|
||||||
|
import net.minecraft.core.MappedRegistry;
|
||||||
|
import net.minecraft.core.Registry;
|
||||||
|
import net.minecraft.core.WritableRegistry;
|
||||||
|
import net.minecraft.data.BuiltinRegistries;
|
||||||
|
import net.minecraft.resources.ResourceKey;
|
||||||
|
import net.minecraft.resources.ResourceLocation;
|
||||||
|
import net.minecraft.tags.TagKey;
|
||||||
|
import net.minecraft.world.level.biome.Biome;
|
||||||
|
import org.bukkit.NamespacedKey;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
|
public class AwfulBukkitHacks {
|
||||||
|
private static final Logger LOGGER = LoggerFactory.getLogger(AwfulBukkitHacks.class);
|
||||||
|
|
||||||
|
private static final Map<ResourceLocation, List<ResourceLocation>> terraBiomeMap = new HashMap<>();
|
||||||
|
|
||||||
|
public static void registerBiomes(ConfigRegistry configRegistry) {
|
||||||
|
try {
|
||||||
|
LOGGER.info("Hacking biome registry...");
|
||||||
|
WritableRegistry<Biome> biomeRegistry = (WritableRegistry<Biome>) Registries.biomeRegistry();
|
||||||
|
|
||||||
|
Reflection.MAPPED_REGISTRY.setFrozen((MappedRegistry<?>) biomeRegistry, false);
|
||||||
|
|
||||||
|
configRegistry.forEach(pack -> pack.getRegistry(com.dfsek.terra.api.world.biome.Biome.class).forEach((key, biome) -> {
|
||||||
|
try {
|
||||||
|
BukkitPlatformBiome platformBiome = (BukkitPlatformBiome) biome.getPlatformBiome();
|
||||||
|
NamespacedKey vanillaBukkitKey = platformBiome.getHandle().getKey();
|
||||||
|
ResourceLocation vanillaMinecraftKey = new ResourceLocation(vanillaBukkitKey.getNamespace(), vanillaBukkitKey.getKey());
|
||||||
|
Biome platform = NMSBiomeInjector.createBiome(
|
||||||
|
biome,
|
||||||
|
Objects.requireNonNull(biomeRegistry.get(vanillaMinecraftKey)) // get
|
||||||
|
);
|
||||||
|
|
||||||
|
ResourceKey<Biome> delegateKey = ResourceKey.create(Registry.BIOME_REGISTRY,
|
||||||
|
new ResourceLocation("terra", NMSBiomeInjector.createBiomeID(pack, key)));
|
||||||
|
|
||||||
|
BuiltinRegistries.register(BuiltinRegistries.BIOME, delegateKey, platform);
|
||||||
|
biomeRegistry.register(delegateKey, platform, Lifecycle.stable());
|
||||||
|
platformBiome.getContext().put(new NMSBiomeInfo(delegateKey));
|
||||||
|
|
||||||
|
terraBiomeMap.computeIfAbsent(vanillaMinecraftKey, i -> new ArrayList<>()).add(delegateKey.location());
|
||||||
|
|
||||||
|
LOGGER.debug("Registered biome: " + delegateKey);
|
||||||
|
} catch(NoSuchFieldException | SecurityException | IllegalArgumentException | IllegalAccessException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
|
||||||
|
Reflection.MAPPED_REGISTRY.setFrozen((MappedRegistry<?>) biomeRegistry, true); // freeze registry again :)
|
||||||
|
|
||||||
|
LOGGER.info("Doing tag garbage....");
|
||||||
|
Map<TagKey<Biome>, List<Holder<Biome>>> collect = biomeRegistry
|
||||||
|
.getTags() // streamKeysAndEntries
|
||||||
|
.collect(HashMap::new,
|
||||||
|
(map, pair) ->
|
||||||
|
map.put(pair.getFirst(), new ArrayList<>(pair.getSecond().stream().toList())),
|
||||||
|
HashMap::putAll);
|
||||||
|
|
||||||
|
terraBiomeMap
|
||||||
|
.forEach((vb, terraBiomes) ->
|
||||||
|
NMSBiomeInjector.getEntry(biomeRegistry, vb)
|
||||||
|
.ifPresentOrElse(
|
||||||
|
vanilla -> terraBiomes
|
||||||
|
.forEach(tb -> NMSBiomeInjector.getEntry(biomeRegistry, tb)
|
||||||
|
.ifPresentOrElse(
|
||||||
|
terra -> {
|
||||||
|
LOGGER.debug(vanilla.unwrapKey().orElseThrow().location() +
|
||||||
|
" (vanilla for " +
|
||||||
|
terra.unwrapKey().orElseThrow().location() +
|
||||||
|
": " +
|
||||||
|
vanilla.tags().toList());
|
||||||
|
|
||||||
|
vanilla.tags()
|
||||||
|
.forEach(
|
||||||
|
tag -> collect
|
||||||
|
.computeIfAbsent(tag,
|
||||||
|
t -> new ArrayList<>())
|
||||||
|
.add(terra));
|
||||||
|
},
|
||||||
|
() -> LOGGER.error(
|
||||||
|
"No such biome: {}",
|
||||||
|
tb))),
|
||||||
|
() -> LOGGER.error("No vanilla biome: {}", vb)));
|
||||||
|
|
||||||
|
biomeRegistry.resetTags();
|
||||||
|
biomeRegistry.bindTags(ImmutableMap.copyOf(collect));
|
||||||
|
|
||||||
|
} catch(SecurityException | IllegalArgumentException exception) {
|
||||||
|
throw new RuntimeException(exception);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
+2
-81
@@ -31,93 +31,14 @@ import com.dfsek.terra.registry.master.ConfigRegistry;
|
|||||||
|
|
||||||
|
|
||||||
public class NMSBiomeInjector {
|
public class NMSBiomeInjector {
|
||||||
private static final Logger LOGGER = LoggerFactory.getLogger(NMSBiomeInjector.class);
|
|
||||||
private static final Map<ResourceLocation, List<ResourceLocation>> terraBiomeMap = new HashMap<>();
|
|
||||||
|
|
||||||
|
|
||||||
public static void registerBiomes(ConfigRegistry configRegistry) {
|
|
||||||
try {
|
|
||||||
LOGGER.info("Hacking biome registry...");
|
|
||||||
WritableRegistry<Biome> biomeRegistry = (WritableRegistry<Biome>) Registries.biomeRegistry();
|
|
||||||
|
|
||||||
Reflection.MAPPED_REGISTRY.setFrozen((MappedRegistry<?>) biomeRegistry, false);
|
|
||||||
|
|
||||||
configRegistry.forEach(pack -> pack.getRegistry(com.dfsek.terra.api.world.biome.Biome.class).forEach((key, biome) -> {
|
|
||||||
try {
|
|
||||||
BukkitPlatformBiome platformBiome = (BukkitPlatformBiome) biome.getPlatformBiome();
|
|
||||||
NamespacedKey vanillaBukkitKey = platformBiome.getHandle().getKey();
|
|
||||||
ResourceLocation vanillaMinecraftKey = new ResourceLocation(vanillaBukkitKey.getNamespace(), vanillaBukkitKey.getKey());
|
|
||||||
Biome platform = createBiome(
|
|
||||||
biome,
|
|
||||||
Objects.requireNonNull(biomeRegistry.get(vanillaMinecraftKey)) // get
|
|
||||||
);
|
|
||||||
|
|
||||||
ResourceKey<Biome> delegateKey = ResourceKey.create(Registry.BIOME_REGISTRY,
|
|
||||||
new ResourceLocation("terra", createBiomeID(pack, key)));
|
|
||||||
|
|
||||||
BuiltinRegistries.register(BuiltinRegistries.BIOME, delegateKey, platform);
|
|
||||||
biomeRegistry.register(delegateKey, platform, Lifecycle.stable());
|
|
||||||
platformBiome.getContext().put(new NMSBiomeInfo(delegateKey));
|
|
||||||
|
|
||||||
terraBiomeMap.computeIfAbsent(vanillaMinecraftKey, i -> new ArrayList<>()).add(delegateKey.location());
|
|
||||||
|
|
||||||
LOGGER.debug("Registered biome: " + delegateKey);
|
|
||||||
} catch(NoSuchFieldException | SecurityException | IllegalArgumentException | IllegalAccessException e) {
|
|
||||||
throw new RuntimeException(e);
|
|
||||||
}
|
|
||||||
}));
|
|
||||||
|
|
||||||
Reflection.MAPPED_REGISTRY.setFrozen((MappedRegistry<?>) biomeRegistry, true); // freeze registry again :)
|
|
||||||
|
|
||||||
LOGGER.info("Doing tag garbage....");
|
|
||||||
Map<TagKey<Biome>, List<Holder<Biome>>> collect = biomeRegistry
|
|
||||||
.getTags() // streamKeysAndEntries
|
|
||||||
.collect(HashMap::new,
|
|
||||||
(map, pair) ->
|
|
||||||
map.put(pair.getFirst(), new ArrayList<>(pair.getSecond().stream().toList())),
|
|
||||||
HashMap::putAll);
|
|
||||||
|
|
||||||
terraBiomeMap
|
|
||||||
.forEach((vb, terraBiomes) ->
|
|
||||||
getEntry(biomeRegistry, vb)
|
|
||||||
.ifPresentOrElse(
|
|
||||||
vanilla -> terraBiomes
|
|
||||||
.forEach(tb -> getEntry(biomeRegistry, tb)
|
|
||||||
.ifPresentOrElse(
|
|
||||||
terra -> {
|
|
||||||
LOGGER.debug(vanilla.unwrapKey().orElseThrow().location() +
|
|
||||||
" (vanilla for " +
|
|
||||||
terra.unwrapKey().orElseThrow().location() +
|
|
||||||
": " +
|
|
||||||
vanilla.tags().toList());
|
|
||||||
|
|
||||||
vanilla.tags()
|
|
||||||
.forEach(
|
|
||||||
tag -> collect
|
|
||||||
.computeIfAbsent(tag,
|
|
||||||
t -> new ArrayList<>())
|
|
||||||
.add(terra));
|
|
||||||
},
|
|
||||||
() -> LOGGER.error(
|
|
||||||
"No such biome: {}",
|
|
||||||
tb))),
|
|
||||||
() -> LOGGER.error("No vanilla biome: {}", vb)));
|
|
||||||
|
|
||||||
biomeRegistry.resetTags();
|
|
||||||
biomeRegistry.bindTags(ImmutableMap.copyOf(collect));
|
|
||||||
|
|
||||||
} catch(SecurityException | IllegalArgumentException exception) {
|
|
||||||
throw new RuntimeException(exception);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static <T> Optional<Holder<T>> getEntry(Registry<T> registry, ResourceLocation identifier) {
|
public static <T> Optional<Holder<T>> getEntry(Registry<T> registry, ResourceLocation identifier) {
|
||||||
return registry.getOptional(identifier)
|
return registry.getOptional(identifier)
|
||||||
.flatMap(registry::getResourceKey)
|
.flatMap(registry::getResourceKey)
|
||||||
.map(registry::getOrCreateHolderOrThrow);
|
.map(registry::getOrCreateHolderOrThrow);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static Biome createBiome(com.dfsek.terra.api.world.biome.Biome biome, Biome vanilla)
|
public static Biome createBiome(com.dfsek.terra.api.world.biome.Biome biome, Biome vanilla)
|
||||||
throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException {
|
throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException {
|
||||||
Biome.BiomeBuilder builder = new Biome.BiomeBuilder();
|
Biome.BiomeBuilder builder = new Biome.BiomeBuilder();
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -9,7 +9,7 @@ import com.dfsek.terra.bukkit.nms.Initializer;
|
|||||||
public class NMSInitializer implements Initializer {
|
public class NMSInitializer implements Initializer {
|
||||||
@Override
|
@Override
|
||||||
public void initialize(PlatformImpl platform) {
|
public void initialize(PlatformImpl platform) {
|
||||||
NMSBiomeInjector.registerBiomes(platform.getRawConfigRegistry());
|
AwfulBukkitHacks.registerBiomes(platform.getRawConfigRegistry());
|
||||||
Bukkit.getPluginManager().registerEvents(new NMSInjectListener(), platform.getPlugin());
|
Bukkit.getPluginManager().registerEvents(new NMSInjectListener(), platform.getPlugin());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-2
@@ -11,8 +11,8 @@ import java.net.URL;
|
|||||||
*
|
*
|
||||||
* This will likely not work on Gson because FabricLoader has some special logic related to Gson.
|
* This will likely not work on Gson because FabricLoader has some special logic related to Gson.
|
||||||
*/
|
*/
|
||||||
public final class PreLaunchHacks {
|
public final class AwfulQuiltHacks {
|
||||||
private PreLaunchHacks() {}
|
private AwfulQuiltHacks() {}
|
||||||
|
|
||||||
private static final ClassLoader KNOT_CLASSLOADER = Thread.currentThread().getContextClassLoader();
|
private static final ClassLoader KNOT_CLASSLOADER = Thread.currentThread().getContextClassLoader();
|
||||||
private static final Method ADD_URL_METHOD;
|
private static final Method ADD_URL_METHOD;
|
||||||
@@ -13,7 +13,7 @@ public class QuiltPreLaunchEntryPoint implements PreLaunchEntrypoint {
|
|||||||
public void onPreLaunch(ModContainer mod) {
|
public void onPreLaunch(ModContainer mod) {
|
||||||
if (QuiltLoader.isDevelopmentEnvironment()) {
|
if (QuiltLoader.isDevelopmentEnvironment()) {
|
||||||
try {
|
try {
|
||||||
PreLaunchHacks.hackilyLoadForMixin(BrigadierMappingBuilder.class.getName());
|
AwfulQuiltHacks.hackilyLoadForMixin(BrigadierMappingBuilder.class.getName());
|
||||||
} catch(ClassNotFoundException | InvocationTargetException | IllegalAccessException e) {
|
} catch(ClassNotFoundException | InvocationTargetException | IllegalAccessException e) {
|
||||||
throw new RuntimeException(e);
|
throw new RuntimeException(e);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user