From e4c1a056ae81b83723de67bc82d3ca1ef2e3cc77 Mon Sep 17 00:00:00 2001 From: dfsek Date: Mon, 1 Mar 2021 17:20:19 -0700 Subject: [PATCH 1/5] fix server issues --- platforms/fabric/build.gradle.kts | 10 +++--- .../dfsek/terra/fabric/TerraFabricPlugin.java | 26 +++++++++------- .../fabric/mixin/BiomeEffectsAccessor.java | 31 +++++++++++++++++++ .../fabric/mixin/GeneratorTypeAccessor.java | 24 ++++++++++++++ .../fabric/src/main/resources/fabric.mod.json | 1 + .../src/main/resources/terra.accesswidener | 10 +----- .../src/main/resources/terra.mixins.json | 16 ++++++++++ 7 files changed, 94 insertions(+), 24 deletions(-) create mode 100644 platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/BiomeEffectsAccessor.java create mode 100644 platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/GeneratorTypeAccessor.java create mode 100644 platforms/fabric/src/main/resources/terra.mixins.json diff --git a/platforms/fabric/build.gradle.kts b/platforms/fabric/build.gradle.kts index 73dc69a3e..35078842a 100644 --- a/platforms/fabric/build.gradle.kts +++ b/platforms/fabric/build.gradle.kts @@ -37,10 +37,12 @@ configure { } tasks.register("remapShadedJar") { - dependsOn("shadowJar") - setProperty("input", file("build/libs/Terra-fabric-${version}-shaded.jar")) - setProperty("addNestedDependencies", false) - setProperty("remapAccessWidener", true) + val shadowJar = tasks.getByName("shadowJar") + dependsOn(shadowJar) + input.set(shadowJar.archiveFile) + archiveFileName.set(shadowJar.archiveFileName.get().replace(Regex("-shaded\\.jar$"), "shaded-mapped.jar")) + addNestedDependencies.set(true) + remapAccessWidener.set(true) } dependencies { diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/TerraFabricPlugin.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/TerraFabricPlugin.java index 181472590..ce0cd677c 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/TerraFabricPlugin.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/TerraFabricPlugin.java @@ -30,6 +30,8 @@ import com.dfsek.terra.config.lang.LangUtil; import com.dfsek.terra.config.lang.Language; import com.dfsek.terra.config.pack.ConfigPack; import com.dfsek.terra.fabric.inventory.FabricItemHandle; +import com.dfsek.terra.fabric.mixin.BiomeEffectsAccessor; +import com.dfsek.terra.fabric.mixin.GeneratorTypeAccessor; import com.dfsek.terra.fabric.world.FabricBiome; import com.dfsek.terra.fabric.world.FabricTree; import com.dfsek.terra.fabric.world.FabricWorldHandle; @@ -234,17 +236,19 @@ public class TerraFabricPlugin implements TerraPlugin, ModInitializer { generationSettings.surfaceBuilder(SurfaceBuilder.DEFAULT.withConfig(new TernarySurfaceConfig(Blocks.GRASS_BLOCK.getDefaultState(), Blocks.DIRT.getDefaultState(), Blocks.GRAVEL.getDefaultState()))); // It needs a surfacebuilder, even though we dont use it. generationSettings.feature(GenerationStep.Feature.VEGETAL_DECORATION, POPULATOR_CONFIGURED_FEATURE); + BiomeEffectsAccessor biomeEffectsAccessor = (BiomeEffectsAccessor) vanilla.getEffects(); + BiomeEffects.Builder effects = new BiomeEffects.Builder() - .waterColor(vanilla.getWaterColor()) - .waterFogColor(vanilla.getWaterFogColor()) - .fogColor(vanilla.getFogColor()) - .skyColor(vanilla.getSkyColor()) - .grassColorModifier(vanilla.getEffects().getGrassColorModifier()); - if(vanilla.getEffects().getGrassColor().isPresent()) { - effects.grassColor(vanilla.getEffects().getGrassColor().get()); + .waterColor(biomeEffectsAccessor.getWaterColor()) + .waterFogColor(biomeEffectsAccessor.getWaterFogColor()) + .fogColor(biomeEffectsAccessor.getFogColor()) + .skyColor(biomeEffectsAccessor.getSkyColor()) + .grassColorModifier(biomeEffectsAccessor.getGrassColorModifier()); + if(biomeEffectsAccessor.getGrassColor().isPresent()) { + effects.grassColor(biomeEffectsAccessor.getGrassColor().get()); } - if(vanilla.getEffects().getFoliageColor().isPresent()) { - effects.foliageColor(vanilla.getEffects().getFoliageColor().get()); + if(biomeEffectsAccessor.getFoliageColor().isPresent()) { + effects.foliageColor(biomeEffectsAccessor.getFoliageColor().get()); } return (new Biome.Builder()) @@ -296,8 +300,8 @@ public class TerraFabricPlugin implements TerraPlugin, ModInitializer { } }; //noinspection ConstantConditions - generatorType.translationKey = (new LiteralText("Terra:" + pack.getTemplate().getID())); - GeneratorType.VALUES.add(generatorType); + ((GeneratorTypeAccessor) generatorType).setTranslationKey(new LiteralText("Terra:" + pack.getTemplate().getID())); + GeneratorTypeAccessor.getVALUES().add(generatorType); }); } diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/BiomeEffectsAccessor.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/BiomeEffectsAccessor.java new file mode 100644 index 000000000..a21d77e9d --- /dev/null +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/BiomeEffectsAccessor.java @@ -0,0 +1,31 @@ +package com.dfsek.terra.fabric.mixin; + +import net.minecraft.world.biome.BiomeEffects; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; + +import java.util.Optional; + +@Mixin(BiomeEffects.class) +public interface BiomeEffectsAccessor { + @Accessor + int getFogColor(); + + @Accessor + int getWaterColor(); + + @Accessor + int getWaterFogColor(); + + @Accessor + int getSkyColor(); + + @Accessor + Optional getFoliageColor(); + + @Accessor + Optional getGrassColor(); + + @Accessor + BiomeEffects.GrassColorModifier getGrassColorModifier(); +} diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/GeneratorTypeAccessor.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/GeneratorTypeAccessor.java new file mode 100644 index 000000000..7af215e73 --- /dev/null +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/GeneratorTypeAccessor.java @@ -0,0 +1,24 @@ +package com.dfsek.terra.fabric.mixin; + +import net.minecraft.client.world.GeneratorType; +import net.minecraft.text.Text; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Mutable; +import org.spongepowered.asm.mixin.gen.Accessor; + +import java.util.List; + +@Mixin(GeneratorType.class) +public interface GeneratorTypeAccessor { + @Accessor + static List getVALUES() { + throw new UnsupportedOperationException(); + } + + @Accessor + Text getTranslationKey(); + + @Mutable + @Accessor + void setTranslationKey(Text translationKey); +} diff --git a/platforms/fabric/src/main/resources/fabric.mod.json b/platforms/fabric/src/main/resources/fabric.mod.json index 0468f1530..d86abc872 100644 --- a/platforms/fabric/src/main/resources/fabric.mod.json +++ b/platforms/fabric/src/main/resources/fabric.mod.json @@ -20,6 +20,7 @@ ] }, "mixins": [ + "terra.mixins.json" ], "depends": { "fabricloader": ">=0.7.4", diff --git a/platforms/fabric/src/main/resources/terra.accesswidener b/platforms/fabric/src/main/resources/terra.accesswidener index c501a7abb..9f2064838 100644 --- a/platforms/fabric/src/main/resources/terra.accesswidener +++ b/platforms/fabric/src/main/resources/terra.accesswidener @@ -2,16 +2,8 @@ accessWidener v1 named extendable method net/minecraft/client/world/GeneratorType (Ljava/lang/String;)V -accessible field net/minecraft/client/world/GeneratorType translationKey Lnet/minecraft/text/Text; -mutable field net/minecraft/client/world/GeneratorType translationKey Lnet/minecraft/text/Text; - -accessible field net/minecraft/client/world/GeneratorType VALUES Ljava/util/List; - accessible field net/minecraft/server/world/ServerWorld worldProperties Lnet/minecraft/world/level/ServerWorldProperties; accessible method net/minecraft/world/MobSpawnerLogic getEntityId ()Lnet/minecraft/util/Identifier; -accessible field net/minecraft/state/State PROPERTY_MAP_PRINTER Ljava/util/function/Function; - -accessible method net/minecraft/block/entity/LootableContainerBlockEntity setInvStackList (Lnet/minecraft/util/collection/DefaultedList;)V -accessible method net/minecraft/block/entity/LootableContainerBlockEntity getInvStackList ()Lnet/minecraft/util/collection/DefaultedList; \ No newline at end of file +accessible field net/minecraft/state/State PROPERTY_MAP_PRINTER Ljava/util/function/Function; \ No newline at end of file diff --git a/platforms/fabric/src/main/resources/terra.mixins.json b/platforms/fabric/src/main/resources/terra.mixins.json new file mode 100644 index 000000000..1020b1459 --- /dev/null +++ b/platforms/fabric/src/main/resources/terra.mixins.json @@ -0,0 +1,16 @@ +{ + "required": true, + "minVersion": "0.8", + "package": "com.dfsek.terra.fabric.mixin", + "compatibilityLevel": "JAVA_8", + "mixins": [ + "BiomeEffectsAccessor" + ], + "client": [ + "GeneratorTypeAccessor" + ], + "server": [], + "injectors": { + "defaultRequire": 1 + } +} \ No newline at end of file From 7828de74aab39e6f0fd7d872d7ec4363742bc1cb Mon Sep 17 00:00:00 2001 From: dfsek Date: Tue, 2 Mar 2021 00:30:26 -0700 Subject: [PATCH 2/5] work on loom stuff --- platforms/fabric/build.gradle.kts | 62 +++++++++---------- .../dfsek/terra/fabric/TerraFabricPlugin.java | 20 +++--- .../fabric/mixin/BiomeEffectsAccessor.java | 31 ---------- .../fabric/mixin/GeneratorTypeAccessor.java | 3 - .../src/main/resources/terra.accesswidener | 12 +++- .../src/main/resources/terra.mixins.json | 1 - 6 files changed, 48 insertions(+), 81 deletions(-) delete mode 100644 platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/BiomeEffectsAccessor.java diff --git a/platforms/fabric/build.gradle.kts b/platforms/fabric/build.gradle.kts index 35078842a..da1591bb5 100644 --- a/platforms/fabric/build.gradle.kts +++ b/platforms/fabric/build.gradle.kts @@ -11,39 +11,18 @@ buildscript { url = uri("https://maven.fabricmc.net/") } } -// dependencies { -// classpath("net.fabricmc:fabric-loom:+") -// } + dependencies { + classpath("net.fabricmc:fabric-loom:0.6-SNAPSHOT") + } } -plugins { - id("fabric-loom").version("0.5.9") - `java-library` -} -//apply(plugin = "fabric-loom") +apply(plugin = "fabric-loom") +apply(plugin = "java-library") configureCommon() -tasks.named("shadowJar") { - relocate("org.json", "com.dfsek.terra.lib.json") - relocate("org.yaml", "com.dfsek.terra.lib.yaml") -} - -group = "com.dfsek.terra.fabric" - - -configure { - accessWidener("src/main/resources/terra.accesswidener") -} - -tasks.register("remapShadedJar") { - val shadowJar = tasks.getByName("shadowJar") - dependsOn(shadowJar) - input.set(shadowJar.archiveFile) - archiveFileName.set(shadowJar.archiveFileName.get().replace(Regex("-shaded\\.jar$"), "shaded-mapped.jar")) - addNestedDependencies.set(true) - remapAccessWidener.set(true) -} +val mixinVersion = "0.8.1+build.21" +val loomVersion = "0.6-SNAPSHOT" dependencies { "shadedApi"(project(":common")) @@ -59,7 +38,26 @@ dependencies { // Fabric API. This is technically optional, but you probably want it anyway. "modImplementation"("net.fabricmc.fabric-api:fabric-api:0.31.0+1.16") - "compileOnly"("net.fabricmc:sponge-mixin:+") - "annotationProcessor"("net.fabricmc:sponge-mixin:+") - "annotationProcessor"("net.fabricmc:fabric-loom:+") -} \ No newline at end of file + "compileOnly"("net.fabricmc:sponge-mixin:${mixinVersion}") + "annotationProcessor"("net.fabricmc:sponge-mixin:${mixinVersion}") + "annotationProcessor"("net.fabricmc:fabric-loom:${loomVersion}") +} + +tasks.named("shadowJar") { + relocate("org.json", "com.dfsek.terra.lib.json") + relocate("org.yaml", "com.dfsek.terra.lib.yaml") +} + + +configure { + accessWidener("src/main/resources/terra.accesswidener") +} + +tasks.register("remapShadedJar") { + val shadowJar = tasks.getByName("shadowJar") + dependsOn(shadowJar) + input.set(shadowJar.archiveFile) + archiveFileName.set(shadowJar.archiveFileName.get().replace(Regex("-shaded\\.jar$"), "-shaded-mapped.jar")) + addNestedDependencies.set(true) + remapAccessWidener.set(true) +} diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/TerraFabricPlugin.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/TerraFabricPlugin.java index ce0cd677c..8f83ecea1 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/TerraFabricPlugin.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/TerraFabricPlugin.java @@ -30,7 +30,6 @@ import com.dfsek.terra.config.lang.LangUtil; import com.dfsek.terra.config.lang.Language; import com.dfsek.terra.config.pack.ConfigPack; import com.dfsek.terra.fabric.inventory.FabricItemHandle; -import com.dfsek.terra.fabric.mixin.BiomeEffectsAccessor; import com.dfsek.terra.fabric.mixin.GeneratorTypeAccessor; import com.dfsek.terra.fabric.world.FabricBiome; import com.dfsek.terra.fabric.world.FabricTree; @@ -236,20 +235,15 @@ public class TerraFabricPlugin implements TerraPlugin, ModInitializer { generationSettings.surfaceBuilder(SurfaceBuilder.DEFAULT.withConfig(new TernarySurfaceConfig(Blocks.GRASS_BLOCK.getDefaultState(), Blocks.DIRT.getDefaultState(), Blocks.GRAVEL.getDefaultState()))); // It needs a surfacebuilder, even though we dont use it. generationSettings.feature(GenerationStep.Feature.VEGETAL_DECORATION, POPULATOR_CONFIGURED_FEATURE); - BiomeEffectsAccessor biomeEffectsAccessor = (BiomeEffectsAccessor) vanilla.getEffects(); BiomeEffects.Builder effects = new BiomeEffects.Builder() - .waterColor(biomeEffectsAccessor.getWaterColor()) - .waterFogColor(biomeEffectsAccessor.getWaterFogColor()) - .fogColor(biomeEffectsAccessor.getFogColor()) - .skyColor(biomeEffectsAccessor.getSkyColor()) - .grassColorModifier(biomeEffectsAccessor.getGrassColorModifier()); - if(biomeEffectsAccessor.getGrassColor().isPresent()) { - effects.grassColor(biomeEffectsAccessor.getGrassColor().get()); - } - if(biomeEffectsAccessor.getFoliageColor().isPresent()) { - effects.foliageColor(biomeEffectsAccessor.getFoliageColor().get()); - } + .waterColor(vanilla.getEffects().waterColor) + .waterFogColor(vanilla.getEffects().waterFogColor) + .fogColor(vanilla.getEffects().fogColor) + .skyColor(vanilla.getEffects().skyColor) + .grassColorModifier(vanilla.getEffects().grassColorModifier); + vanilla.getEffects().grassColor.ifPresent(effects::grassColor); + vanilla.getEffects().foliageColor.ifPresent(effects::foliageColor); return (new Biome.Builder()) .precipitation(vanilla.getPrecipitation()) diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/BiomeEffectsAccessor.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/BiomeEffectsAccessor.java deleted file mode 100644 index a21d77e9d..000000000 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/BiomeEffectsAccessor.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.dfsek.terra.fabric.mixin; - -import net.minecraft.world.biome.BiomeEffects; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.gen.Accessor; - -import java.util.Optional; - -@Mixin(BiomeEffects.class) -public interface BiomeEffectsAccessor { - @Accessor - int getFogColor(); - - @Accessor - int getWaterColor(); - - @Accessor - int getWaterFogColor(); - - @Accessor - int getSkyColor(); - - @Accessor - Optional getFoliageColor(); - - @Accessor - Optional getGrassColor(); - - @Accessor - BiomeEffects.GrassColorModifier getGrassColorModifier(); -} diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/GeneratorTypeAccessor.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/GeneratorTypeAccessor.java index 7af215e73..07449ae3a 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/GeneratorTypeAccessor.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/GeneratorTypeAccessor.java @@ -15,9 +15,6 @@ public interface GeneratorTypeAccessor { throw new UnsupportedOperationException(); } - @Accessor - Text getTranslationKey(); - @Mutable @Accessor void setTranslationKey(Text translationKey); diff --git a/platforms/fabric/src/main/resources/terra.accesswidener b/platforms/fabric/src/main/resources/terra.accesswidener index 9f2064838..fcf59a730 100644 --- a/platforms/fabric/src/main/resources/terra.accesswidener +++ b/platforms/fabric/src/main/resources/terra.accesswidener @@ -6,4 +6,14 @@ accessible field net/minecraft/server/world/ServerWorld worldProperties Lnet/min accessible method net/minecraft/world/MobSpawnerLogic getEntityId ()Lnet/minecraft/util/Identifier; -accessible field net/minecraft/state/State PROPERTY_MAP_PRINTER Ljava/util/function/Function; \ No newline at end of file +accessible field net/minecraft/state/State PROPERTY_MAP_PRINTER Ljava/util/function/Function; + + +accessible field net/minecraft/world/biome/BiomeEffects fogColor I +accessible field net/minecraft/world/biome/BiomeEffects waterColor I +accessible field net/minecraft/world/biome/BiomeEffects waterFogColor I +accessible field net/minecraft/world/biome/BiomeEffects skyColor I + +accessible field net/minecraft/world/biome/BiomeEffects foliageColor Ljava/util/Optional; +accessible field net/minecraft/world/biome/BiomeEffects grassColor Ljava/util/Optional; +accessible field net/minecraft/world/biome/BiomeEffects grassColorModifier Lnet/minecraft/world/biome/BiomeEffects$GrassColorModifier; diff --git a/platforms/fabric/src/main/resources/terra.mixins.json b/platforms/fabric/src/main/resources/terra.mixins.json index 1020b1459..486efc32b 100644 --- a/platforms/fabric/src/main/resources/terra.mixins.json +++ b/platforms/fabric/src/main/resources/terra.mixins.json @@ -4,7 +4,6 @@ "package": "com.dfsek.terra.fabric.mixin", "compatibilityLevel": "JAVA_8", "mixins": [ - "BiomeEffectsAccessor" ], "client": [ "GeneratorTypeAccessor" From c8c3ab312b7008c03217be68cf9868823f899878 Mon Sep 17 00:00:00 2001 From: dfsek Date: Sat, 6 Mar 2021 10:04:25 -0700 Subject: [PATCH 3/5] separate generator and GeneratorWrapper --- .../platform/world/generator/GeneratorWrapper.java | 9 +++++++++ .../com/dfsek/terra/config/dummy/DummyWorld.java | 5 +++-- .../main/java/com/dfsek/terra/world/TerraWorld.java | 10 +++++----- .../generator/BukkitChunkGeneratorWrapper.java | 3 ++- .../generator/FabricChunkGeneratorWrapper.java | 13 ++++++++----- 5 files changed, 27 insertions(+), 13 deletions(-) create mode 100644 common/src/main/java/com/dfsek/terra/api/platform/world/generator/GeneratorWrapper.java diff --git a/common/src/main/java/com/dfsek/terra/api/platform/world/generator/GeneratorWrapper.java b/common/src/main/java/com/dfsek/terra/api/platform/world/generator/GeneratorWrapper.java new file mode 100644 index 000000000..127f9e5bf --- /dev/null +++ b/common/src/main/java/com/dfsek/terra/api/platform/world/generator/GeneratorWrapper.java @@ -0,0 +1,9 @@ +package com.dfsek.terra.api.platform.world.generator; + +import com.dfsek.terra.api.platform.Handle; +import com.dfsek.terra.api.world.generation.TerraChunkGenerator; + +public interface GeneratorWrapper extends Handle { + @Override + TerraChunkGenerator getHandle(); +} diff --git a/common/src/main/java/com/dfsek/terra/config/dummy/DummyWorld.java b/common/src/main/java/com/dfsek/terra/config/dummy/DummyWorld.java index d55d813ff..a71cb0867 100644 --- a/common/src/main/java/com/dfsek/terra/config/dummy/DummyWorld.java +++ b/common/src/main/java/com/dfsek/terra/config/dummy/DummyWorld.java @@ -7,6 +7,7 @@ import com.dfsek.terra.api.platform.entity.EntityType; import com.dfsek.terra.api.platform.world.Chunk; import com.dfsek.terra.api.platform.world.World; import com.dfsek.terra.api.platform.world.generator.ChunkGenerator; +import com.dfsek.terra.api.platform.world.generator.GeneratorWrapper; import java.io.File; import java.util.UUID; @@ -24,12 +25,12 @@ public class DummyWorld implements World { @Override public int getMaxHeight() { - return 155; + return 255; } @Override public ChunkGenerator getGenerator() { - return () -> (ChunkGenerator) () -> null; + return () -> (GeneratorWrapper) () -> null; } @Override diff --git a/common/src/main/java/com/dfsek/terra/world/TerraWorld.java b/common/src/main/java/com/dfsek/terra/world/TerraWorld.java index cfec49efe..d173d12f2 100644 --- a/common/src/main/java/com/dfsek/terra/world/TerraWorld.java +++ b/common/src/main/java/com/dfsek/terra/world/TerraWorld.java @@ -6,7 +6,7 @@ import com.dfsek.terra.api.math.vector.Location; import com.dfsek.terra.api.math.vector.Vector3; import com.dfsek.terra.api.platform.block.BlockData; import com.dfsek.terra.api.platform.world.World; -import com.dfsek.terra.api.platform.world.generator.ChunkGenerator; +import com.dfsek.terra.api.platform.world.generator.GeneratorWrapper; import com.dfsek.terra.api.world.biome.UserDefinedBiome; import com.dfsek.terra.api.world.biome.provider.BiomeProvider; import com.dfsek.terra.api.world.generation.TerraChunkGenerator; @@ -37,16 +37,16 @@ public class TerraWorld { safe = true; } - public TerraChunkGenerator getGenerator() { - return (TerraChunkGenerator) ((ChunkGenerator) world.getGenerator().getHandle()).getHandle(); + public static boolean isTerraWorld(World w) { + return w.getGenerator().getHandle() instanceof GeneratorWrapper; } public World getWorld() { return world; } - public static boolean isTerraWorld(World w) { - return w.getGenerator().getHandle() instanceof ChunkGenerator; + public TerraChunkGenerator getGenerator() { + return ((GeneratorWrapper) world.getGenerator().getHandle()).getHandle(); } public BiomeProvider getBiomeProvider() { diff --git a/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/generator/BukkitChunkGeneratorWrapper.java b/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/generator/BukkitChunkGeneratorWrapper.java index 278583560..092b486f2 100644 --- a/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/generator/BukkitChunkGeneratorWrapper.java +++ b/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/generator/BukkitChunkGeneratorWrapper.java @@ -2,6 +2,7 @@ package com.dfsek.terra.bukkit.generator; import com.dfsek.terra.api.TerraPlugin; import com.dfsek.terra.api.platform.world.Chunk; +import com.dfsek.terra.api.platform.world.generator.GeneratorWrapper; import com.dfsek.terra.api.world.generation.TerraBlockPopulator; import com.dfsek.terra.api.world.generation.TerraChunkGenerator; import com.dfsek.terra.bukkit.population.PopulationManager; @@ -29,7 +30,7 @@ import java.util.Map; import java.util.Random; import java.util.stream.Collectors; -public class BukkitChunkGeneratorWrapper extends ChunkGenerator implements com.dfsek.terra.api.platform.world.generator.ChunkGenerator { +public class BukkitChunkGeneratorWrapper extends ChunkGenerator implements GeneratorWrapper { private static final Map popMap = new HashMap<>(); diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/generator/FabricChunkGeneratorWrapper.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/generator/FabricChunkGeneratorWrapper.java index dad4cba8f..b1d769cef 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/generator/FabricChunkGeneratorWrapper.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/generator/FabricChunkGeneratorWrapper.java @@ -1,6 +1,8 @@ package com.dfsek.terra.fabric.world.generator; +import com.dfsek.terra.api.platform.world.generator.GeneratorWrapper; import com.dfsek.terra.api.util.FastRandom; +import com.dfsek.terra.api.world.generation.TerraChunkGenerator; import com.dfsek.terra.config.pack.ConfigPack; import com.dfsek.terra.fabric.TerraFabricPlugin; import com.dfsek.terra.fabric.world.TerraBiomeSource; @@ -30,7 +32,7 @@ import net.minecraft.world.gen.chunk.ChunkGenerator; import net.minecraft.world.gen.chunk.StructuresConfig; import net.minecraft.world.gen.chunk.VerticalBlockSample; -public class FabricChunkGeneratorWrapper extends ChunkGenerator implements com.dfsek.terra.api.platform.world.generator.ChunkGenerator { +public class FabricChunkGeneratorWrapper extends ChunkGenerator implements GeneratorWrapper { private final long seed; private final DefaultChunkGenerator3D delegate; private final TerraBiomeSource biomeSource; @@ -85,10 +87,6 @@ public class FabricChunkGeneratorWrapper extends ChunkGenerator implements com.d this.seed = seed; } - @Override - public DefaultChunkGenerator3D getHandle() { - return delegate; - } @Override protected Codec getCodec() { @@ -149,4 +147,9 @@ public class FabricChunkGeneratorWrapper extends ChunkGenerator implements com.d return new VerticalBlockSample(array); } + + @Override + public TerraChunkGenerator getHandle() { + return delegate; + } } From f989e4dc89310ce0fba126cb9d8f6b9f6525fe88 Mon Sep 17 00:00:00 2001 From: dfsek Date: Sat, 6 Mar 2021 11:37:28 -0700 Subject: [PATCH 4/5] fix fabric mixin stuff --- platforms/fabric/build.gradle.kts | 6 +++--- platforms/fabric/gradle.properties | 1 + 2 files changed, 4 insertions(+), 3 deletions(-) create mode 100644 platforms/fabric/gradle.properties diff --git a/platforms/fabric/build.gradle.kts b/platforms/fabric/build.gradle.kts index 73dc69a3e..2aea53e83 100644 --- a/platforms/fabric/build.gradle.kts +++ b/platforms/fabric/build.gradle.kts @@ -39,7 +39,7 @@ configure { tasks.register("remapShadedJar") { dependsOn("shadowJar") setProperty("input", file("build/libs/Terra-fabric-${version}-shaded.jar")) - setProperty("addNestedDependencies", false) + setProperty("addNestedDependencies", true) setProperty("remapAccessWidener", true) } @@ -57,7 +57,7 @@ dependencies { // Fabric API. This is technically optional, but you probably want it anyway. "modImplementation"("net.fabricmc.fabric-api:fabric-api:0.31.0+1.16") - "compileOnly"("net.fabricmc:sponge-mixin:+") - "annotationProcessor"("net.fabricmc:sponge-mixin:+") + "compileOnly"("net.fabricmc:sponge-mixin:0.8.1") + "annotationProcessor"("net.fabricmc:sponge-mixin:0.8.1") "annotationProcessor"("net.fabricmc:fabric-loom:+") } \ No newline at end of file diff --git a/platforms/fabric/gradle.properties b/platforms/fabric/gradle.properties new file mode 100644 index 000000000..95b4763a8 --- /dev/null +++ b/platforms/fabric/gradle.properties @@ -0,0 +1 @@ +org.gradle.jvmargs=-Xmx4G From c44d26cc18218496e9d00f18bf7c8106993e1492 Mon Sep 17 00:00:00 2001 From: dfsek Date: Sun, 7 Mar 2021 21:41:13 -0700 Subject: [PATCH 5/5] loom is pain --- .../fabric/inventory/meta/FabricItemMeta.java | 3 +- .../fabric/mixin/MixinGeneratorOptions.java | 62 +++++++++++++++++++ 2 files changed, 64 insertions(+), 1 deletion(-) create mode 100644 platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/MixinGeneratorOptions.java diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/inventory/meta/FabricItemMeta.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/inventory/meta/FabricItemMeta.java index 13a0431e2..2c4d9d079 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/inventory/meta/FabricItemMeta.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/inventory/meta/FabricItemMeta.java @@ -5,6 +5,7 @@ import com.dfsek.terra.api.platform.inventory.item.ItemMeta; import com.dfsek.terra.fabric.world.FabricAdapter; import net.minecraft.item.ItemStack; import net.minecraft.nbt.CompoundTag; +import net.minecraft.util.registry.Registry; import java.util.Collections; import java.util.HashMap; @@ -29,7 +30,7 @@ public class FabricItemMeta implements ItemMeta { delegate.getEnchantments().forEach(enchantment -> { CompoundTag eTag = (CompoundTag) enchantment; - map.put(FabricAdapter.adapt(net.minecraft.enchantment.Enchantment.byRawId(eTag.getInt("id"))), eTag.getInt("lvl")); + map.put(FabricAdapter.adapt(Registry.ENCHANTMENT.get(eTag.getInt("id"))), eTag.getInt("lvl")); }); return map; } diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/MixinGeneratorOptions.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/MixinGeneratorOptions.java new file mode 100644 index 000000000..aa588249a --- /dev/null +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/MixinGeneratorOptions.java @@ -0,0 +1,62 @@ +package com.dfsek.terra.fabric.mixin; + +import com.dfsek.terra.config.pack.ConfigPack; +import com.dfsek.terra.fabric.TerraFabricPlugin; +import com.dfsek.terra.fabric.world.TerraBiomeSource; +import com.dfsek.terra.fabric.world.generator.FabricChunkGeneratorWrapper; +import com.google.common.base.MoreObjects; +import net.minecraft.util.registry.DynamicRegistryManager; +import net.minecraft.util.registry.Registry; +import net.minecraft.util.registry.SimpleRegistry; +import net.minecraft.world.biome.Biome; +import net.minecraft.world.dimension.DimensionOptions; +import net.minecraft.world.dimension.DimensionType; +import net.minecraft.world.gen.GeneratorOptions; +import net.minecraft.world.gen.chunk.ChunkGeneratorSettings; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +import java.util.Properties; +import java.util.Random; + +// Mixins commented out until loom fixes multi-project builds. + +//@Mixin(GeneratorOptions.class) +public class MixinGeneratorOptions { + //@Inject(method = "fromProperties(Lnet/minecraft/util/registry/DynamicRegistryManager;Ljava/util/Properties;)Lnet/minecraft/world/gen/GeneratorOptions;", at = @At("HEAD"), cancellable = true) + private static void fromProperties(DynamicRegistryManager dynamicRegistryManager, Properties properties, CallbackInfoReturnable cir) { + if(properties.get("level-type") == null) { + return; + } + + String prop = properties.get("level-type").toString().trim(); + if(prop.startsWith("Terra")) { + String seed = (String) MoreObjects.firstNonNull(properties.get("level-seed"), ""); + long l = new Random().nextLong(); + if(!seed.isEmpty()) { + try { + long m = Long.parseLong(seed); + if(m != 0L) { + l = m; + } + } catch(NumberFormatException exception) { + l = seed.hashCode(); + } + } + + String generate_structures = (String) properties.get("generate-structures"); + boolean generateStructures = generate_structures == null || Boolean.parseBoolean(generate_structures); + Registry dimensionTypes = dynamicRegistryManager.get(Registry.DIMENSION_TYPE_KEY); + Registry biomes = dynamicRegistryManager.get(Registry.BIOME_KEY); + Registry chunkGeneratorSettings = dynamicRegistryManager.get(Registry.NOISE_SETTINGS_WORLDGEN); + SimpleRegistry dimensionOptions = DimensionType.createDefaultDimensionOptions(dimensionTypes, biomes, chunkGeneratorSettings, l); + + prop = prop.substring(prop.indexOf(":") + 1); + + ConfigPack pack = TerraFabricPlugin.getInstance().getConfigRegistry().get(prop); + + if(pack == null) throw new IllegalArgumentException("No such pack " + prop); + + cir.setReturnValue(new GeneratorOptions(l, generateStructures, false, GeneratorOptions.method_28608(dimensionTypes, dimensionOptions, new FabricChunkGeneratorWrapper(new TerraBiomeSource(biomes, l, pack), l, pack)))); + } + } +}