Skip to content

Commit 9abac34

Browse files
authored
Merge pull request #323 from PolyhedralDev/ver/6.1.2
Reimplement Cloud and update Bukkit implementation to 1.19 with Paperweight
2 parents d93f11b + a94c0ad commit 9abac34

28 files changed

+919
-275
lines changed

build.gradle.kts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
preRelease(true)
22

3-
versionProjects(":common:api", version("6.1.1"))
4-
versionProjects(":common:implementation", version("6.1.1"))
5-
versionProjects(":platforms", version("6.1.1"))
3+
versionProjects(":common:api", version("6.1.2"))
4+
versionProjects(":common:implementation", version("6.1.2"))
5+
versionProjects(":platforms", version("6.1.2"))
66

77

88
allprojects {

buildSrc/build.gradle.kts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,15 @@ repositories {
1616
mavenCentral()
1717
gradlePluginPortal()
1818
maven { url = uri("https://repo.codemc.org/repository/maven-public") }
19+
maven("https://papermc.io/repo/repository/maven-public/") {
20+
name = "PaperMC"
21+
}
1922
}
2023

2124
dependencies {
2225
implementation("gradle.plugin.com.github.jengelman.gradle.plugins:shadow:+")
26+
implementation("io.papermc.paperweight.userdev:io.papermc.paperweight.userdev.gradle.plugin:1.3.5")
27+
2328
implementation("org.ow2.asm:asm:9.3")
2429
implementation("org.ow2.asm:asm-tree:9.3")
2530
implementation("com.dfsek.tectonic:common:4.2.0")

buildSrc/src/main/kotlin/Versions.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ object Versions {
44
const val paralithic = "0.7.0"
55
const val strata = "1.1.1"
66

7-
const val cloud = "1.6.2"
7+
const val cloud = "1.7.0-SNAPSHOT"
88

99
const val slf4j = "1.7.36"
1010
const val log4j_slf4j_impl = "2.14.1"

platforms/bukkit/build.gradle.kts

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@ import java.nio.channels.Channels
44
import java.nio.file.Files
55
import java.nio.file.StandardCopyOption
66

7+
plugins {
8+
id("xyz.jpenilla.run-paper") version "1.0.6"
9+
}
710

811
val mcVersion = "1.18.2"
912
val testDir = "target/server"
@@ -13,9 +16,15 @@ val paperBuild = 350
1316
val paperURL = "https://papermc.io/api/v2/projects/paper/versions/%version%/builds/$paperBuild/downloads/paper-%version%-$paperBuild.jar"
1417
val purpurURL = "https://api.purpurmc.org/v2/purpur/%version%/latest/download"
1518

19+
repositories {
20+
maven("https://s01.oss.sonatype.org/content/repositories/snapshots/")
21+
}
22+
1623
dependencies {
1724
shaded(project(":platforms:bukkit:common"))
18-
shaded(project(":platforms:bukkit:nms:v1_18_R2"))
25+
shaded(project(":platforms:bukkit:nms:v1_18_R2", configuration = "reobf"))
26+
shaded(project(":platforms:bukkit:nms:v1_19_R1", configuration = "reobf"))
27+
shaded("xyz.jpenilla", "reflection-remapper", "0.1.0-SNAPSHOT")
1928
}
2029

2130
val throttleCoreCount = 0
Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,17 @@
1+
apply(plugin = "io.papermc.paperweight.userdev")
2+
3+
repositories {
4+
maven("https://s01.oss.sonatype.org/content/repositories/snapshots/")
5+
}
6+
17
dependencies {
28
api(project(":platforms:bukkit:common"))
3-
4-
compileOnly("io.papermc.paper:paper-api:1.18.2-R0.1-20220519.005047-123")
5-
compileOnly(group = "org.spigotmc", name = "spigot", version = "1.18.2-R0.1-SNAPSHOT")
9+
paperDevBundle("1.18.2-R0.1-SNAPSHOT")
10+
implementation("xyz.jpenilla", "reflection-remapper", "0.1.0-SNAPSHOT")
11+
}
12+
13+
tasks {
14+
assemble {
15+
dependsOn("reobfJar")
16+
}
617
}
Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
package com.dfsek.terra.bukkit.nms.v1_18_R2;
22

3-
import com.dfsek.terra.api.properties.Properties;
4-
53
import net.minecraft.resources.ResourceKey;
6-
import net.minecraft.world.level.biome.BiomeBase;
4+
import net.minecraft.world.level.biome.Biome;
5+
6+
import com.dfsek.terra.api.properties.Properties;
77

88

9-
public record NMSBiomeInfo(ResourceKey<BiomeBase> biomeKey) implements Properties {
9+
public record NMSBiomeInfo(ResourceKey<Biome> biomeKey) implements Properties {
1010
}

platforms/bukkit/nms/v1_18_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_18_R2/NMSBiomeInjector.java

Lines changed: 66 additions & 86 deletions
Original file line numberDiff line numberDiff line change
@@ -3,23 +3,19 @@
33
import com.google.common.collect.ImmutableMap;
44
import com.mojang.serialization.Lifecycle;
55
import net.minecraft.core.Holder;
6-
import net.minecraft.core.IRegistry;
7-
import net.minecraft.core.IRegistryWritable;
8-
import net.minecraft.core.RegistryMaterials;
9-
import net.minecraft.data.RegistryGeneration;
10-
import net.minecraft.resources.MinecraftKey;
6+
import net.minecraft.core.MappedRegistry;
7+
import net.minecraft.core.Registry;
8+
import net.minecraft.core.WritableRegistry;
9+
import net.minecraft.data.BuiltinRegistries;
1110
import net.minecraft.resources.ResourceKey;
11+
import net.minecraft.resources.ResourceLocation;
1212
import net.minecraft.tags.TagKey;
13-
import net.minecraft.world.level.biome.BiomeBase;
14-
import net.minecraft.world.level.biome.BiomeFog;
15-
import net.minecraft.world.level.biome.BiomeFog.GrassColor;
16-
import net.minecraft.world.level.biome.BiomeSettingsGeneration;
17-
import net.minecraft.world.level.biome.BiomeSettingsMobs;
13+
import net.minecraft.world.level.biome.Biome;
14+
import net.minecraft.world.level.biome.BiomeSpecialEffects;
1815
import org.bukkit.NamespacedKey;
1916
import org.slf4j.Logger;
2017
import org.slf4j.LoggerFactory;
2118

22-
import java.lang.reflect.Field;
2319
import java.util.ArrayList;
2420
import java.util.HashMap;
2521
import java.util.List;
@@ -29,57 +25,55 @@
2925
import java.util.Optional;
3026

3127
import com.dfsek.terra.api.config.ConfigPack;
32-
import com.dfsek.terra.api.world.biome.Biome;
3328
import com.dfsek.terra.bukkit.config.VanillaBiomeProperties;
3429
import com.dfsek.terra.bukkit.world.BukkitPlatformBiome;
3530
import com.dfsek.terra.registry.master.ConfigRegistry;
3631

3732

3833
public class NMSBiomeInjector {
3934
private static final Logger LOGGER = LoggerFactory.getLogger(NMSBiomeInjector.class);
40-
private static final Map<MinecraftKey, List<MinecraftKey>> terraBiomeMap = new HashMap<>();
35+
private static final Map<ResourceLocation, List<ResourceLocation>> terraBiomeMap = new HashMap<>();
4136

4237

4338
public static void registerBiomes(ConfigRegistry configRegistry) {
4439
try {
4540
LOGGER.info("Hacking biome registry...");
46-
IRegistryWritable<BiomeBase> biomeRegistry = (IRegistryWritable<BiomeBase>) Registries.biomeRegistry();
47-
Field frozen = RegistryMaterials.class.getDeclaredField("bL"); // registry frozen field
48-
frozen.setAccessible(true);
49-
frozen.set(biomeRegistry, false);
41+
WritableRegistry<Biome> biomeRegistry = (WritableRegistry<Biome>) Registries.biomeRegistry();
5042

51-
configRegistry.forEach(pack -> pack.getRegistry(Biome.class).forEach((key, biome) -> {
43+
Reflection.MAPPED_REGISTRY.setFrozen((MappedRegistry<?>) biomeRegistry, false);
44+
45+
configRegistry.forEach(pack -> pack.getRegistry(com.dfsek.terra.api.world.biome.Biome.class).forEach((key, biome) -> {
5246
try {
5347
BukkitPlatformBiome platformBiome = (BukkitPlatformBiome) biome.getPlatformBiome();
5448
NamespacedKey vanillaBukkitKey = platformBiome.getHandle().getKey();
55-
MinecraftKey vanillaMinecraftKey = new MinecraftKey(vanillaBukkitKey.getNamespace(), vanillaBukkitKey.getKey());
56-
BiomeBase platform = createBiome(
49+
ResourceLocation vanillaMinecraftKey = new ResourceLocation(vanillaBukkitKey.getNamespace(), vanillaBukkitKey.getKey());
50+
Biome platform = createBiome(
5751
biome,
58-
biomeRegistry.a(vanillaMinecraftKey) // get
52+
biomeRegistry.get(vanillaMinecraftKey) // get
5953
);
6054

61-
ResourceKey<BiomeBase> delegateKey = ResourceKey.a(IRegistry.aP, new MinecraftKey("terra", createBiomeID(pack, key)));
55+
ResourceKey<Biome> delegateKey = ResourceKey.create(Registry.BIOME_REGISTRY, new ResourceLocation("terra", createBiomeID(pack, key)));
6256

63-
RegistryGeneration.a(RegistryGeneration.i, delegateKey, platform);
64-
biomeRegistry.a(delegateKey, platform, Lifecycle.stable());
57+
BuiltinRegistries.register(BuiltinRegistries.BIOME, delegateKey, platform);
58+
biomeRegistry.register(delegateKey, platform, Lifecycle.stable());
6559
platformBiome.getContext().put(new NMSBiomeInfo(delegateKey));
6660

67-
terraBiomeMap.computeIfAbsent(vanillaMinecraftKey, i -> new ArrayList<>()).add(delegateKey.a());
61+
terraBiomeMap.computeIfAbsent(vanillaMinecraftKey, i -> new ArrayList<>()).add(delegateKey.location());
6862

6963
LOGGER.debug("Registered biome: " + delegateKey);
7064
} catch(NoSuchFieldException | SecurityException | IllegalArgumentException | IllegalAccessException e) {
7165
throw new RuntimeException(e);
7266
}
7367
}));
74-
75-
frozen.set(biomeRegistry, true); // freeze registry again :)
68+
69+
Reflection.MAPPED_REGISTRY.setFrozen((MappedRegistry<?>) biomeRegistry, true); // freeze registry again :)
7670

7771
LOGGER.info("Doing tag garbage....");
78-
Map<TagKey<BiomeBase>, List<Holder<BiomeBase>>> collect = biomeRegistry
79-
.g() // streamKeysAndEntries
72+
Map<TagKey<Biome>, List<Holder<Biome>>> collect = biomeRegistry
73+
.getTags() // streamKeysAndEntries
8074
.collect(HashMap::new,
8175
(map, pair) ->
82-
map.put(pair.getFirst(), new ArrayList<>(pair.getSecond().a().toList())),
76+
map.put(pair.getFirst(), new ArrayList<>(pair.getSecond().stream().toList())),
8377
HashMap::putAll);
8478

8579
terraBiomeMap
@@ -90,13 +84,13 @@ public static void registerBiomes(ConfigRegistry configRegistry) {
9084
.forEach(tb -> getEntry(biomeRegistry, tb)
9185
.ifPresentOrElse(
9286
terra -> {
93-
LOGGER.debug(vanilla.e().orElseThrow().a() +
87+
LOGGER.debug(vanilla.unwrapKey().orElseThrow().location() +
9488
" (vanilla for " +
95-
terra.e().orElseThrow().a() +
89+
terra.unwrapKey().orElseThrow().location() +
9690
": " +
97-
vanilla.c().toList());
91+
vanilla.tags().toList());
9892

99-
vanilla.c()
93+
vanilla.tags()
10094
.forEach(
10195
tag -> collect
10296
.computeIfAbsent(tag,
@@ -108,77 +102,63 @@ public static void registerBiomes(ConfigRegistry configRegistry) {
108102
tb))),
109103
() -> LOGGER.error("No vanilla biome: {}", vb)));
110104

111-
biomeRegistry.k(); // clearTags
112-
biomeRegistry.a(ImmutableMap.copyOf(collect)); // populateTags
105+
biomeRegistry.resetTags(); // clearTags
106+
biomeRegistry.bindTags(ImmutableMap.copyOf(collect)); // populateTags
113107

114-
} catch(NoSuchFieldException | SecurityException | IllegalArgumentException | IllegalAccessException exception) {
108+
} catch(SecurityException | IllegalArgumentException exception) {
115109
throw new RuntimeException(exception);
116110
}
117111
}
118112

119-
public static <T> Optional<Holder<T>> getEntry(IRegistry<T> registry, MinecraftKey identifier) {
120-
return registry.b(identifier)
121-
.flatMap(registry::c)
122-
.map(registry::c);
113+
public static <T> Optional<Holder<T>> getEntry(Registry<T> registry, ResourceLocation identifier) {
114+
return registry.getOptional(identifier)
115+
.flatMap(registry::getResourceKey)
116+
.map(registry::getOrCreateHolder);
123117
}
124118

125-
private static BiomeBase createBiome(Biome biome, BiomeBase vanilla)
119+
private static Biome createBiome(com.dfsek.terra.api.world.biome.Biome biome, Biome vanilla)
126120
throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException {
127-
BiomeBase.a builder = new BiomeBase.a(); // Builder
128-
129-
Field f = BiomeBase.class.getDeclaredField("l"); // category
130-
f.setAccessible(true);
131-
builder.a((BiomeBase.Geography) f.get(vanilla))
132-
.a(vanilla.c()); // getPrecipitation
133-
134-
135-
Field biomeSettingMobsField = BiomeBase.class.getDeclaredField("k"); // spawn settings
136-
biomeSettingMobsField.setAccessible(true);
137-
BiomeSettingsMobs biomeSettingMobs = (BiomeSettingsMobs) biomeSettingMobsField.get(vanilla);
138-
builder.a(biomeSettingMobs);
139-
121+
Biome.BiomeBuilder builder = new Biome.BiomeBuilder(); // Builder
140122

141-
BiomeSettingsGeneration.a generationBuilder = new BiomeSettingsGeneration.a(); // builder
142-
builder.a(generationBuilder.a())
143-
.a(vanilla.c())
144-
.b(vanilla.h()) // precipitation
145-
.a(vanilla.i()); // temp
146123

124+
builder.biomeCategory(Reflection.BIOME.getBiomeCategory(vanilla))
125+
.precipitation(vanilla.getPrecipitation()) // getPrecipitation
126+
.mobSpawnSettings(vanilla.getMobSettings())
127+
.generationSettings(vanilla.getGenerationSettings())
128+
.temperature(vanilla.getBaseTemperature())
129+
.downfall(vanilla.getDownfall());
130+
131+
147132

148-
BiomeFog.a effects = new BiomeFog.a(); // Builder
149-
effects.a(GrassColor.a); // magic
150-
133+
BiomeSpecialEffects.Builder effects = new BiomeSpecialEffects.Builder();
134+
135+
effects.grassColorModifier(vanilla.getSpecialEffects().getGrassColorModifier());
136+
151137
VanillaBiomeProperties vanillaBiomeProperties = biome.getContext().get(VanillaBiomeProperties.class);
152-
153-
// fog
154-
effects.a(Objects.requireNonNullElse(vanillaBiomeProperties.getFogColor(), vanilla.f()));
155-
156-
// water
157-
effects.b(Objects.requireNonNullElse(vanillaBiomeProperties.getWaterColor(), vanilla.k()));
158-
159-
// water fog
160-
effects.c(Objects.requireNonNullElse(vanillaBiomeProperties.getWaterFogColor(), vanilla.l()));
161-
162-
// sky
163-
effects.d(Objects.requireNonNullElse(vanillaBiomeProperties.getSkyColor(), vanilla.a()));
164-
138+
139+
effects.fogColor(Objects.requireNonNullElse(vanillaBiomeProperties.getFogColor(), vanilla.getFogColor()))
140+
141+
.waterColor(Objects.requireNonNullElse(vanillaBiomeProperties.getWaterColor(), vanilla.getWaterColor()))
142+
143+
.waterFogColor(Objects.requireNonNullElse(vanillaBiomeProperties.getWaterFogColor(), vanilla.getWaterFogColor()))
144+
145+
.skyColor(Objects.requireNonNullElse(vanillaBiomeProperties.getSkyColor(), vanilla.getSkyColor()));
146+
165147
if(vanillaBiomeProperties.getFoliageColor() == null) {
166-
vanilla.j().e().ifPresent(effects::e);
148+
vanilla.getSpecialEffects().getFoliageColorOverride().ifPresent(effects::foliageColorOverride);
167149
} else {
168-
// foliage
169-
effects.e(vanillaBiomeProperties.getFoliageColor());
150+
effects.foliageColorOverride(vanillaBiomeProperties.getFoliageColor());
170151
}
171-
152+
172153
if(vanillaBiomeProperties.getGrassColor() == null) {
173-
vanilla.j().f().ifPresent(effects::f);
154+
vanilla.getSpecialEffects().getGrassColorOverride().ifPresent(effects::grassColorOverride);
174155
} else {
175-
// grass
176-
effects.f(vanillaBiomeProperties.getGrassColor());
156+
effects.grassColorOverride(vanillaBiomeProperties.getGrassColor());
177157
}
158+
159+
builder.specialEffects(effects.build());
178160

179-
builder.a(effects.a()); // build()
180-
181-
return builder.a(); // build()
161+
return builder.build(); // build()
182162
}
183163

184164
public static String createBiomeID(ConfigPack pack, com.dfsek.terra.api.registry.key.RegistryKey biomeID) {

0 commit comments

Comments
 (0)