Add Validator API & cleanup Fabric

This commit is contained in:
dfsek
2020-12-16 00:26:05 -07:00
parent 7a83584317
commit b12079694c
17 changed files with 110 additions and 59 deletions

View File

@@ -6,7 +6,7 @@ import com.dfsek.terra.api.generic.world.WorldHandle;
import com.dfsek.terra.api.generic.world.block.Block;
import com.dfsek.terra.api.generic.world.block.BlockData;
import com.dfsek.terra.api.generic.world.block.MaterialData;
import com.dfsek.terra.api.translator.Transformer;
import com.dfsek.terra.api.transform.Transformer;
import com.dfsek.terra.bukkit.world.block.BukkitBlockData;
import com.dfsek.terra.bukkit.world.block.BukkitMaterialData;
import com.dfsek.terra.bukkit.world.block.data.BukkitMultipleFacing;

View File

@@ -12,8 +12,8 @@ import com.dfsek.terra.api.generic.world.World;
import com.dfsek.terra.api.generic.world.WorldHandle;
import com.dfsek.terra.api.generic.world.block.BlockData;
import com.dfsek.terra.api.generic.world.block.MaterialData;
import com.dfsek.terra.api.translator.MapTransform;
import com.dfsek.terra.api.translator.Transformer;
import com.dfsek.terra.api.transform.MapTransform;
import com.dfsek.terra.api.transform.Transformer;
import com.dfsek.terra.bukkit.command.command.TerraCommand;
import com.dfsek.terra.bukkit.command.command.structure.LocateCommand;
import com.dfsek.terra.bukkit.generator.BukkitChunkGenerator;

View File

@@ -10,8 +10,10 @@ import com.dfsek.terra.api.generic.world.World;
import com.dfsek.terra.api.generic.world.WorldHandle;
import com.dfsek.terra.api.generic.world.block.BlockData;
import com.dfsek.terra.api.generic.world.block.MaterialData;
import com.dfsek.terra.api.translator.MapTransform;
import com.dfsek.terra.api.translator.Transformer;
import com.dfsek.terra.api.transform.MapTransform;
import com.dfsek.terra.api.transform.NotNullValidator;
import com.dfsek.terra.api.transform.Transformer;
import com.dfsek.terra.biome.UserDefinedBiome;
import com.dfsek.terra.config.base.PluginConfig;
import com.dfsek.terra.config.lang.LangUtil;
import com.dfsek.terra.fabric.inventory.FabricItemHandle;
@@ -29,9 +31,13 @@ import net.minecraft.util.Identifier;
import net.minecraft.util.registry.BuiltinRegistries;
import net.minecraft.util.registry.Registry;
import net.minecraft.world.biome.Biome;
import net.minecraft.world.biome.BiomeEffects;
import net.minecraft.world.biome.GenerationSettings;
import net.minecraft.world.biome.SpawnSettings;
import net.minecraft.world.gen.chunk.ChunkGenerator;
import net.minecraft.world.gen.chunk.ChunkGeneratorSettings;
import net.minecraft.world.gen.feature.ConfiguredFeature;
import net.minecraft.world.gen.feature.DefaultBiomeFeatures;
import net.minecraft.world.gen.feature.Feature;
import net.minecraft.world.gen.feature.HugeMushroomFeature;
import net.minecraft.world.gen.feature.TreeFeature;
@@ -139,19 +145,42 @@ public class TerraFabricPlugin implements TerraPlugin, ModInitializer {
}
}
Transformer<String, Biome> biomeFixer = new Transformer.Builder<String, Biome>()
.addTransform(id -> BuiltinRegistries.BIOME.get(Identifier.tryParse(id)), new NotNullValidator<>())
.addTransform(id -> BuiltinRegistries.BIOME.get(Identifier.tryParse("minecraft:" + id.toLowerCase())), new NotNullValidator<>()).build();
@Override
public void register(TypeRegistry registry) {
genericLoaders.register(registry);
registry
.registerLoader(BlockData.class, (t, o, l) -> worldHandle.createBlockData((String) o))
.registerLoader(MaterialData.class, (t, o, l) -> worldHandle.createMaterialData((String) o))
.registerLoader(com.dfsek.terra.api.generic.world.Biome.class, (t, o, l) -> {
String id = (String) o;
if(!id.contains(":")) id = "minecraft:" + id.toLowerCase();
Identifier identifier = new Identifier(id);
Biome biome = BuiltinRegistries.BIOME.get(identifier);
return new FabricBiome(biome);
});
.registerLoader(com.dfsek.terra.api.generic.world.Biome.class, (t, o, l) -> new FabricBiome(biomeFixer.translate((String) o)));
}
private Biome createBiome(UserDefinedBiome biome) {
SpawnSettings.Builder spawnSettings = new SpawnSettings.Builder();
DefaultBiomeFeatures.addFarmAnimals(spawnSettings);
DefaultBiomeFeatures.addMonsters(spawnSettings, 95, 5, 100);
GenerationSettings.Builder generationSettings = new GenerationSettings.Builder();
return (new Biome.Builder())
.precipitation(Biome.Precipitation.RAIN)
.category(Biome.Category.NONE)
.depth(0.125F)
.scale(0.05F)
.temperature(0.8F)
.downfall(0.4F)
.effects((new BiomeEffects.Builder())
.waterColor(0x3f76e4)
.waterFogColor(0x050533)
.fogColor(0xc0d8ff)
.skyColor(0x77adff)
.build())
.spawnSettings(spawnSettings.build())
.generationSettings(generationSettings.build())
.build();
}
@SuppressWarnings("unchecked")

View File

@@ -1,25 +0,0 @@
package com.dfsek.terra.fabric.mixin;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.font.TextRenderer;
import net.minecraft.client.gui.screen.world.CreateWorldScreen;
import net.minecraft.client.gui.screen.world.MoreOptionsDialog;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
@Mixin(MoreOptionsDialog.class)
public class MoreOptionsDialogMixin {
@Inject(at = @At("HEAD"), method = "method_28092(Lnet/minecraft/client/gui/screen/world/CreateWorldScreen;Lnet/minecraft/client/MinecraftClient;Lnet/minecraft/client/font/TextRenderer;)V")
private void draw(final CreateWorldScreen parent, MinecraftClient client, TextRenderer textRenderer, CallbackInfo info) {
System.out.println("More options opened");
}
/*@Inject(at = @At("RETURN"), method = "setVisible(B)V")
private void setVisible(boolean visible, CallbackInfo info) {
System.out.println("redraw");
}
*/
}

View File

@@ -5,7 +5,7 @@ import com.dfsek.terra.api.generic.world.WorldHandle;
import com.dfsek.terra.api.generic.world.block.Block;
import com.dfsek.terra.api.generic.world.block.BlockData;
import com.dfsek.terra.api.generic.world.block.MaterialData;
import com.dfsek.terra.api.translator.Transformer;
import com.dfsek.terra.api.transform.Transformer;
import com.dfsek.terra.fabric.world.block.FabricBlockData;
import com.dfsek.terra.fabric.world.block.FabricMaterialData;
import com.dfsek.terra.fabric.world.block.data.FabricMultipleFacing;

View File

@@ -0,0 +1,21 @@
package com.dfsek.terra.fabric.world.features;
import com.mojang.serialization.Codec;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.StructureWorldAccess;
import net.minecraft.world.gen.chunk.ChunkGenerator;
import net.minecraft.world.gen.feature.DefaultFeatureConfig;
import net.minecraft.world.gen.feature.Feature;
import java.util.Random;
public class FloraFeature extends Feature<DefaultFeatureConfig> {
public FloraFeature(Codec<DefaultFeatureConfig> codec) {
super(codec);
}
@Override
public boolean generate(StructureWorldAccess world, ChunkGenerator chunkGenerator, Random random, BlockPos pos, DefaultFeatureConfig config) {
return false;
}
}

View File

@@ -8,7 +8,9 @@ import com.dfsek.terra.api.generic.world.World;
import com.dfsek.terra.api.generic.world.block.Block;
import com.dfsek.terra.api.generic.world.vector.Location;
import com.dfsek.terra.fabric.world.block.FabricBlock;
import com.dfsek.terra.fabric.world.generator.FabricChunkGenerator;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.ServerWorldAccess;
import net.minecraft.world.StructureWorldAccess;
import net.minecraft.world.WorldAccess;
@@ -35,12 +37,12 @@ public class FabricWorldAccess implements World {
@Override
public ChunkGenerator getGenerator() {
return null;
return new FabricChunkGenerator(((ServerWorldAccess) delegate).toServerWorld().getChunkManager().getChunkGenerator());
}
@Override
public String getName() {
return delegate.toString();
return ((ServerWorldAccess) delegate).toServerWorld().worldProperties.getLevelName();
}
@Override

View File

@@ -1,4 +1,5 @@
accessWidener v1 named
extendable method net/minecraft/client/world/GeneratorType <init> (Ljava/lang/String;)V
accessible field net/minecraft/server/world/ServerWorld Lnet/minecraft/world/level/ServerWorldProperties worldProperties
accessible field net/minecraft/server/world/ServerWorld worldProperties Lnet/minecraft/world/level/ServerWorldProperties;
mutable field net/minecraft/server/world/ServerWorld worldProperties Lnet/minecraft/world/level/ServerWorldProperties;

View File

@@ -5,8 +5,7 @@
"compatibilityLevel": "JAVA_8",
"mixins": [],
"client": [
"GeneratorTypeAccessor",
"MoreOptionsDialogMixin"
"GeneratorTypeAccessor"
],
"server": [],
"injectors": {