From a1b3680643789822312fd2cdef3e80af48776006 Mon Sep 17 00:00:00 2001 From: dfsek Date: Wed, 5 May 2021 15:22:02 -0700 Subject: [PATCH 01/12] initialize later --- .../dfsek/terra/fabric/TerraFabricPlugin.java | 61 ++++++++++--------- .../mixin/init/MinecraftClientMixin.java | 19 ++++++ .../mixin/init/MinecraftServerMixin.java | 33 ++++++++++ .../src/main/resources/terra.mixins.json | 7 ++- 4 files changed, 90 insertions(+), 30 deletions(-) create mode 100644 platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/init/MinecraftClientMixin.java create mode 100644 platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/init/MinecraftServerMixin.java 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 ca1ab5347..f53c0fc7a 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 @@ -37,13 +37,13 @@ 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.config.templates.BiomeTemplate; +import com.dfsek.terra.fabric.generation.FabricChunkGeneratorWrapper; +import com.dfsek.terra.fabric.generation.PopulatorFeature; +import com.dfsek.terra.fabric.generation.TerraBiomeSource; import com.dfsek.terra.fabric.handle.FabricItemHandle; import com.dfsek.terra.fabric.handle.FabricWorldHandle; import com.dfsek.terra.fabric.mixin.access.BiomeEffectsAccessor; import com.dfsek.terra.fabric.mixin.access.GeneratorTypeAccessor; -import com.dfsek.terra.fabric.generation.TerraBiomeSource; -import com.dfsek.terra.fabric.generation.PopulatorFeature; -import com.dfsek.terra.fabric.generation.FabricChunkGeneratorWrapper; import com.dfsek.terra.profiler.Profiler; import com.dfsek.terra.profiler.ProfilerImpl; import com.dfsek.terra.registry.exception.DuplicateEntryException; @@ -292,32 +292,11 @@ public class TerraFabricPlugin implements TerraPlugin, ModInitializer { .build(); } - @Override - public void onInitialize() { - instance = this; - - this.dataFolder = new File(FabricLoader.getInstance().getConfigDir().toFile(), "Terra"); - saveDefaultConfig(); - config.load(this); - LangUtil.load(config.getLanguage(), this); - logger.info("Initializing Terra..."); - - if(!addonRegistry.loadAll()) { - throw new IllegalStateException("Failed to load addons. Please correct addon installations to continue."); - } - logger.info("Loaded addons."); - + public void packInit() { + logger.info("Loading config packs..."); registry.loadAll(this); - logger.info("Loaded packs."); - - Registry.register(Registry.FEATURE, new Identifier("terra", "flora_populator"), POPULATOR_FEATURE); - RegistryKey> floraKey = RegistryKey.of(Registry.CONFIGURED_FEATURE_WORLDGEN, new Identifier("terra", "flora_populator")); - Registry.register(BuiltinRegistries.CONFIGURED_FEATURE, floraKey.getValue(), POPULATOR_CONFIGURED_FEATURE); - registry.forEach(pack -> pack.getBiomeRegistry().forEach((id, biome) -> Registry.register(BuiltinRegistries.BIOME, new Identifier("terra", createBiomeID(pack, id)), createBiome(biome)))); // Register all Terra biomes. - Registry.register(Registry.CHUNK_GENERATOR, new Identifier("terra:terra"), FabricChunkGeneratorWrapper.CODEC); - Registry.register(Registry.BIOME_SOURCE, new Identifier("terra:terra"), TerraBiomeSource.CODEC); if(FabricLoader.getInstance().getEnvironmentType() == EnvType.CLIENT) { registry.forEach(pack -> { @@ -333,6 +312,33 @@ public class TerraFabricPlugin implements TerraPlugin, ModInitializer { }); } + logger.info("Loaded packs."); + } + + @Override + public void onInitialize() { + instance = this; + + this.dataFolder = new File(FabricLoader.getInstance().getConfigDir().toFile(), "Terra"); + saveDefaultConfig(); + config.load(this); + LangUtil.load(config.getLanguage(), this); + logger.info("Initializing Terra..."); + + if(!addonRegistry.loadAll()) { + throw new IllegalStateException("Failed to load addons. Please correct addon installations to continue."); + } + logger.info("Loaded addons."); + + + + Registry.register(Registry.FEATURE, new Identifier("terra", "flora_populator"), POPULATOR_FEATURE); + RegistryKey> floraKey = RegistryKey.of(Registry.CONFIGURED_FEATURE_WORLDGEN, new Identifier("terra", "flora_populator")); + Registry.register(BuiltinRegistries.CONFIGURED_FEATURE, floraKey.getValue(), POPULATOR_CONFIGURED_FEATURE); + + Registry.register(Registry.CHUNK_GENERATOR, new Identifier("terra:terra"), FabricChunkGeneratorWrapper.CODEC); + Registry.register(Registry.BIOME_SOURCE, new Identifier("terra:terra"), TerraBiomeSource.CODEC); + CommandManager manager = new TerraCommandManager(this); try { CommandUtil.registerAll(manager); @@ -340,7 +346,6 @@ public class TerraFabricPlugin implements TerraPlugin, ModInitializer { e.printStackTrace(); // TODO do something here even though this should literally never happen } - CommandRegistrationCallback.EVENT.register((dispatcher, dedicated) -> { int max = manager.getMaxArgumentDepth(); RequiredArgumentBuilder arg = argument("arg" + (max - 1), StringArgumentType.word()); @@ -355,7 +360,7 @@ public class TerraFabricPlugin implements TerraPlugin, ModInitializer { //dispatcher.register(literal("te").redirect(root)); } ); - + logger.info("Finished initialization."); } private RequiredArgumentBuilder assemble(RequiredArgumentBuilder in, CommandManager manager) { diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/init/MinecraftClientMixin.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/init/MinecraftClientMixin.java new file mode 100644 index 000000000..4da836a97 --- /dev/null +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/init/MinecraftClientMixin.java @@ -0,0 +1,19 @@ +package com.dfsek.terra.fabric.mixin.init; + +import com.dfsek.terra.fabric.TerraFabricPlugin; +import net.minecraft.client.MinecraftClient; +import net.minecraft.client.RunArgs; +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(MinecraftClient.class) +public class MinecraftClientMixin { + @Inject(method = "", at = @At(value = "INVOKE", + target = "Lnet/minecraft/client/util/WindowProvider;createWindow(Lnet/minecraft/client/WindowSettings;Ljava/lang/String;Ljava/lang/String;)Lnet/minecraft/client/util/Window;", // sorta arbitrary position, after mod init, before window opens + shift = At.Shift.BEFORE)) + public void injectConstructor(RunArgs args, CallbackInfo callbackInfo) { + TerraFabricPlugin.getInstance().packInit(); // Load during MinecraftClient construction, after other mods have registered blocks and stuff + } +} diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/init/MinecraftServerMixin.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/init/MinecraftServerMixin.java new file mode 100644 index 000000000..3eb2dc6aa --- /dev/null +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/init/MinecraftServerMixin.java @@ -0,0 +1,33 @@ +package com.dfsek.terra.fabric.mixin.init; + +import com.dfsek.terra.fabric.TerraFabricPlugin; +import com.mojang.authlib.GameProfileRepository; +import com.mojang.authlib.minecraft.MinecraftSessionService; +import com.mojang.datafixers.DataFixer; +import net.minecraft.resource.ResourcePackManager; +import net.minecraft.resource.ServerResourceManager; +import net.minecraft.server.MinecraftServer; +import net.minecraft.server.WorldGenerationProgressListenerFactory; +import net.minecraft.util.UserCache; +import net.minecraft.util.registry.DynamicRegistryManager; +import net.minecraft.world.SaveProperties; +import net.minecraft.world.level.storage.LevelStorage; +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; + +import java.net.Proxy; + +@Mixin(MinecraftServer.class) +public class MinecraftServerMixin { + @Inject(method = "", at = @At("RETURN")) + public void injectConstructor(Thread thread, DynamicRegistryManager.Impl impl, LevelStorage.Session session, + SaveProperties saveProperties, ResourcePackManager resourcePackManager, Proxy proxy, + DataFixer dataFixer, ServerResourceManager serverResourceManager, + MinecraftSessionService minecraftSessionService, GameProfileRepository gameProfileRepository, + UserCache userCache, WorldGenerationProgressListenerFactory worldGenerationProgressListenerFactory, + CallbackInfo callbackInfo) { + TerraFabricPlugin.getInstance().packInit(); // Load during MinecraftServer construction, after other mods have registered blocks and stuff + } +} diff --git a/platforms/fabric/src/main/resources/terra.mixins.json b/platforms/fabric/src/main/resources/terra.mixins.json index 394dd3742..8db745b86 100644 --- a/platforms/fabric/src/main/resources/terra.mixins.json +++ b/platforms/fabric/src/main/resources/terra.mixins.json @@ -33,9 +33,12 @@ "implementations.world.ServerWorldMixin" ], "client": [ - "access.GeneratorTypeAccessor" + "access.GeneratorTypeAccessor", + "init.MinecraftClientMixin" + ], + "server": [ + "init.MinecraftServerMixin" ], - "server": [], "injectors": { "defaultRequire": 1 }, From 1186fc6624b20937ac4c9d0960cb3256bfdf2477 Mon Sep 17 00:00:00 2001 From: dfsek Date: Wed, 5 May 2021 15:24:55 -0700 Subject: [PATCH 02/12] bump version --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 3f6b6d2e0..30da85bca 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,6 +1,6 @@ import com.dfsek.terra.getGitHash -val versionObj = Version("5", "3", "0", true) +val versionObj = Version("5", "3", "1", true) allprojects { version = versionObj From 5376f7e22e08a3dccae0730dd189d235ac652d85 Mon Sep 17 00:00:00 2001 From: dfsek Date: Mon, 10 May 2021 01:03:13 -0700 Subject: [PATCH 03/12] fix server init --- .../mixin/init/MinecraftServerMixin.java | 33 ------------------- .../fabric/mixin/init/ServerMainMixin.java | 16 +++++++++ .../src/main/resources/terra.mixins.json | 2 +- 3 files changed, 17 insertions(+), 34 deletions(-) delete mode 100644 platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/init/MinecraftServerMixin.java create mode 100644 platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/init/ServerMainMixin.java diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/init/MinecraftServerMixin.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/init/MinecraftServerMixin.java deleted file mode 100644 index 3eb2dc6aa..000000000 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/init/MinecraftServerMixin.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.dfsek.terra.fabric.mixin.init; - -import com.dfsek.terra.fabric.TerraFabricPlugin; -import com.mojang.authlib.GameProfileRepository; -import com.mojang.authlib.minecraft.MinecraftSessionService; -import com.mojang.datafixers.DataFixer; -import net.minecraft.resource.ResourcePackManager; -import net.minecraft.resource.ServerResourceManager; -import net.minecraft.server.MinecraftServer; -import net.minecraft.server.WorldGenerationProgressListenerFactory; -import net.minecraft.util.UserCache; -import net.minecraft.util.registry.DynamicRegistryManager; -import net.minecraft.world.SaveProperties; -import net.minecraft.world.level.storage.LevelStorage; -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; - -import java.net.Proxy; - -@Mixin(MinecraftServer.class) -public class MinecraftServerMixin { - @Inject(method = "", at = @At("RETURN")) - public void injectConstructor(Thread thread, DynamicRegistryManager.Impl impl, LevelStorage.Session session, - SaveProperties saveProperties, ResourcePackManager resourcePackManager, Proxy proxy, - DataFixer dataFixer, ServerResourceManager serverResourceManager, - MinecraftSessionService minecraftSessionService, GameProfileRepository gameProfileRepository, - UserCache userCache, WorldGenerationProgressListenerFactory worldGenerationProgressListenerFactory, - CallbackInfo callbackInfo) { - TerraFabricPlugin.getInstance().packInit(); // Load during MinecraftServer construction, after other mods have registered blocks and stuff - } -} diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/init/ServerMainMixin.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/init/ServerMainMixin.java new file mode 100644 index 000000000..99cc5cfcb --- /dev/null +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/init/ServerMainMixin.java @@ -0,0 +1,16 @@ +package com.dfsek.terra.fabric.mixin.init; + +import com.dfsek.terra.fabric.TerraFabricPlugin; +import net.minecraft.server.Main; +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(Main.class) +public class ServerMainMixin { + @Inject(method = "main([Ljava/lang/String;)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/util/registry/DynamicRegistryManager;create()Lnet/minecraft/util/registry/DynamicRegistryManager$Impl;")) + private static void injectConstructor(String[] args, CallbackInfo ci) { + TerraFabricPlugin.getInstance().packInit(); // Load during MinecraftServer construction, after other mods have registered blocks and stuff + } +} diff --git a/platforms/fabric/src/main/resources/terra.mixins.json b/platforms/fabric/src/main/resources/terra.mixins.json index 8db745b86..f87894d87 100644 --- a/platforms/fabric/src/main/resources/terra.mixins.json +++ b/platforms/fabric/src/main/resources/terra.mixins.json @@ -37,7 +37,7 @@ "init.MinecraftClientMixin" ], "server": [ - "init.MinecraftServerMixin" + "init.ServerMainMixin" ], "injectors": { "defaultRequire": 1 From 37e441206a2367e119c6a29551e4a763c9c84b98 Mon Sep 17 00:00:00 2001 From: dfsek Date: Mon, 10 May 2021 01:11:22 -0700 Subject: [PATCH 04/12] fix getHandle overwrite conflicts and annotate getHandle methods as @Intrinsic. --- .../dfsek/terra/fabric/mixin/implementations/BiomeMixin.java | 2 ++ .../fabric/mixin/implementations/ChunkGeneratorMixin.java | 2 ++ .../fabric/mixin/implementations/block/BlockEntityMixin.java | 2 ++ .../terra/fabric/mixin/implementations/block/BlockMixin.java | 2 ++ .../block/state/LootableContainerBlockEntityMixin.java | 2 ++ .../fabric/mixin/implementations/chunk/ChunkRegionMixin.java | 4 +--- .../fabric/mixin/implementations/chunk/WorldChunkMixin.java | 2 ++ .../mixin/implementations/chunk/data/ProtoChunkMixin.java | 2 ++ .../fabric/mixin/implementations/entity/EntityMixin.java | 2 ++ .../fabric/mixin/implementations/entity/EntityTypeMixin.java | 2 ++ .../implementations/entity/ServerCommandSourceMixin.java | 2 ++ .../inventory/LockableContainerBlockEntityMixin.java | 2 ++ .../mixin/implementations/inventory/item/ItemMixin.java | 2 ++ .../mixin/implementations/inventory/item/ItemStackMixin.java | 1 + .../implementations/inventory/meta/EnchantmentMixin.java | 2 ++ .../implementations/inventory/meta/ItemStackMetaMixin.java | 1 + .../fabric/mixin/implementations/world/ChunkRegionMixin.java | 1 + .../fabric/mixin/implementations/world/ServerWorldMixin.java | 1 + 18 files changed, 31 insertions(+), 3 deletions(-) diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/BiomeMixin.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/BiomeMixin.java index ab3bff88a..4a928cbb6 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/BiomeMixin.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/BiomeMixin.java @@ -3,11 +3,13 @@ package com.dfsek.terra.fabric.mixin.implementations; import net.minecraft.world.biome.Biome; import org.spongepowered.asm.mixin.Implements; import org.spongepowered.asm.mixin.Interface; +import org.spongepowered.asm.mixin.Intrinsic; import org.spongepowered.asm.mixin.Mixin; @Mixin(Biome.class) @Implements(@Interface(iface = com.dfsek.terra.api.platform.world.Biome.class, prefix = "terra$", remap = Interface.Remap.NONE)) public abstract class BiomeMixin { + @Intrinsic public Object terra$getHandle() { return this; } diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/ChunkGeneratorMixin.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/ChunkGeneratorMixin.java index b766f4692..cc7b82e80 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/ChunkGeneratorMixin.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/ChunkGeneratorMixin.java @@ -3,11 +3,13 @@ package com.dfsek.terra.fabric.mixin.implementations; import net.minecraft.world.gen.chunk.ChunkGenerator; import org.spongepowered.asm.mixin.Implements; import org.spongepowered.asm.mixin.Interface; +import org.spongepowered.asm.mixin.Intrinsic; import org.spongepowered.asm.mixin.Mixin; @Mixin(ChunkGenerator.class) @Implements(@Interface(iface = com.dfsek.terra.api.platform.world.generator.ChunkGenerator.class, prefix = "terra$", remap = Interface.Remap.NONE)) public abstract class ChunkGeneratorMixin { + @Intrinsic public Object terra$getHandle() { return this; } diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/block/BlockEntityMixin.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/block/BlockEntityMixin.java index 8672f444d..1450344a8 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/block/BlockEntityMixin.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/block/BlockEntityMixin.java @@ -11,6 +11,7 @@ import net.minecraft.world.World; import org.jetbrains.annotations.Nullable; import org.spongepowered.asm.mixin.Implements; import org.spongepowered.asm.mixin.Interface; +import org.spongepowered.asm.mixin.Intrinsic; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -29,6 +30,7 @@ public abstract class BlockEntityMixin { @Shadow public abstract boolean hasWorld(); + @Intrinsic public Object terra$getHandle() { return this; } diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/block/BlockMixin.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/block/BlockMixin.java index 0875cab40..4e77e28ea 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/block/BlockMixin.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/block/BlockMixin.java @@ -8,6 +8,7 @@ import net.minecraft.block.BlockState; import net.minecraft.block.Blocks; import org.spongepowered.asm.mixin.Implements; import org.spongepowered.asm.mixin.Interface; +import org.spongepowered.asm.mixin.Intrinsic; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -17,6 +18,7 @@ public abstract class BlockMixin { @Shadow private BlockState defaultState; + @Intrinsic public Object terra$getHandle() { return this; } diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/block/state/LootableContainerBlockEntityMixin.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/block/state/LootableContainerBlockEntityMixin.java index 9bb319856..f72957753 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/block/state/LootableContainerBlockEntityMixin.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/block/state/LootableContainerBlockEntityMixin.java @@ -6,6 +6,7 @@ import com.dfsek.terra.fabric.mixin.implementations.block.BlockEntityMixin; import net.minecraft.block.entity.LootableContainerBlockEntity; import org.spongepowered.asm.mixin.Implements; import org.spongepowered.asm.mixin.Interface; +import org.spongepowered.asm.mixin.Intrinsic; import org.spongepowered.asm.mixin.Mixin; @Mixin(LootableContainerBlockEntity.class) @@ -15,6 +16,7 @@ public abstract class LootableContainerBlockEntityMixin extends BlockEntityMixin return (Inventory) this; } + @Intrinsic public Object terra$getHandle() { return this; } diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/chunk/ChunkRegionMixin.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/chunk/ChunkRegionMixin.java index 55ebe0576..7b12e34d9 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/chunk/ChunkRegionMixin.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/chunk/ChunkRegionMixin.java @@ -51,7 +51,5 @@ public abstract class ChunkRegionMixin { ((ChunkRegion) (Object) this).setBlockState(new BlockPos(x + (centerChunkX << 4), y, z + (centerChunkZ << 4)), ((FabricBlockData) blockData).getHandle(), 0); } - public Object terra$getHandle() { - return this; - } + // getHandle already added in world/ChunkRegionMixin. } diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/chunk/WorldChunkMixin.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/chunk/WorldChunkMixin.java index c09e52dc3..56681d0ab 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/chunk/WorldChunkMixin.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/chunk/WorldChunkMixin.java @@ -12,6 +12,7 @@ import org.jetbrains.annotations.NotNull; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Implements; import org.spongepowered.asm.mixin.Interface; +import org.spongepowered.asm.mixin.Intrinsic; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -47,6 +48,7 @@ public abstract class WorldChunkMixin { ((net.minecraft.world.chunk.Chunk) this).setBlockState(new BlockPos(x, y, z), ((FabricBlockData) blockData).getHandle(), false); } + @Intrinsic public Object terra$getHandle() { return this; } diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/chunk/data/ProtoChunkMixin.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/chunk/data/ProtoChunkMixin.java index 15a862bed..2b2b87eb4 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/chunk/data/ProtoChunkMixin.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/chunk/data/ProtoChunkMixin.java @@ -9,6 +9,7 @@ import net.minecraft.world.chunk.ProtoChunk; import org.jetbrains.annotations.NotNull; import org.spongepowered.asm.mixin.Implements; import org.spongepowered.asm.mixin.Interface; +import org.spongepowered.asm.mixin.Intrinsic; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -26,6 +27,7 @@ public abstract class ProtoChunkMixin { ((net.minecraft.world.chunk.Chunk) this).setBlockState(new BlockPos(x, y, z), ((FabricBlockData) blockData).getHandle(), false); } + @Intrinsic public Object terra$getHandle() { return this; } diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/entity/EntityMixin.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/entity/EntityMixin.java index 88d6bfbb6..1f255e1a6 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/entity/EntityMixin.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/entity/EntityMixin.java @@ -9,6 +9,7 @@ import net.minecraft.text.Text; import net.minecraft.util.math.BlockPos; import org.spongepowered.asm.mixin.Implements; import org.spongepowered.asm.mixin.Interface; +import org.spongepowered.asm.mixin.Intrinsic; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -29,6 +30,7 @@ public abstract class EntityMixin { @Shadow public abstract void sendSystemMessage(Text message, UUID senderUuid); + @Intrinsic public Object terra$getHandle() { return this; } diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/entity/EntityTypeMixin.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/entity/EntityTypeMixin.java index ee0cbc0cf..85ffb4c25 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/entity/EntityTypeMixin.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/entity/EntityTypeMixin.java @@ -3,11 +3,13 @@ package com.dfsek.terra.fabric.mixin.implementations.entity; import net.minecraft.entity.EntityType; import org.spongepowered.asm.mixin.Implements; import org.spongepowered.asm.mixin.Interface; +import org.spongepowered.asm.mixin.Intrinsic; import org.spongepowered.asm.mixin.Mixin; @Mixin(EntityType.class) @Implements(@Interface(iface = com.dfsek.terra.api.platform.entity.EntityType.class, prefix = "terra$", remap = Interface.Remap.NONE)) public abstract class EntityTypeMixin { + @Intrinsic public Object terra$getHandle() { return this; } diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/entity/ServerCommandSourceMixin.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/entity/ServerCommandSourceMixin.java index caf9b91f1..9b0593521 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/entity/ServerCommandSourceMixin.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/entity/ServerCommandSourceMixin.java @@ -6,6 +6,7 @@ import net.minecraft.text.LiteralText; import net.minecraft.text.Text; import org.spongepowered.asm.mixin.Implements; import org.spongepowered.asm.mixin.Interface; +import org.spongepowered.asm.mixin.Intrinsic; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -19,6 +20,7 @@ public abstract class ServerCommandSourceMixin { sendFeedback(new LiteralText(message), true); } + @Intrinsic public Object terra$getHandle() { return this; } diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/inventory/LockableContainerBlockEntityMixin.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/inventory/LockableContainerBlockEntityMixin.java index 1c14e2ab5..cff0892bb 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/inventory/LockableContainerBlockEntityMixin.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/inventory/LockableContainerBlockEntityMixin.java @@ -6,11 +6,13 @@ import net.minecraft.block.entity.LockableContainerBlockEntity; import net.minecraft.item.Items; import org.spongepowered.asm.mixin.Implements; import org.spongepowered.asm.mixin.Interface; +import org.spongepowered.asm.mixin.Intrinsic; import org.spongepowered.asm.mixin.Mixin; @Mixin(LockableContainerBlockEntity.class) @Implements(@Interface(iface = Inventory.class, prefix = "terra$", remap = Interface.Remap.NONE)) public class LockableContainerBlockEntityMixin { + @Intrinsic public Object terra$getHandle() { return this; } diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/inventory/item/ItemMixin.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/inventory/item/ItemMixin.java index b8f7a9be1..b14939c1c 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/inventory/item/ItemMixin.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/inventory/item/ItemMixin.java @@ -4,6 +4,7 @@ import com.dfsek.terra.api.platform.inventory.ItemStack; import net.minecraft.item.Item; import org.spongepowered.asm.mixin.Implements; import org.spongepowered.asm.mixin.Interface; +import org.spongepowered.asm.mixin.Intrinsic; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -13,6 +14,7 @@ public abstract class ItemMixin { @Shadow public abstract int getMaxDamage(); + @Intrinsic public Object terra$getHandle() { return this; } diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/inventory/item/ItemStackMixin.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/inventory/item/ItemStackMixin.java index 55fe05f26..2ae18cdbd 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/inventory/item/ItemStackMixin.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/inventory/item/ItemStackMixin.java @@ -50,6 +50,7 @@ public abstract class ItemStackMixin { setTag(((ItemStack) (Object) meta).getTag()); } + @Intrinsic public Object terra$getHandle() { return this; } diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/inventory/meta/EnchantmentMixin.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/inventory/meta/EnchantmentMixin.java index 5fd30638d..eb47a6498 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/inventory/meta/EnchantmentMixin.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/inventory/meta/EnchantmentMixin.java @@ -5,6 +5,7 @@ import net.minecraft.enchantment.Enchantment; import net.minecraft.util.registry.Registry; import org.spongepowered.asm.mixin.Implements; import org.spongepowered.asm.mixin.Interface; +import org.spongepowered.asm.mixin.Intrinsic; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -19,6 +20,7 @@ public abstract class EnchantmentMixin { @Shadow public abstract boolean canCombine(Enchantment other); + @Intrinsic public Object terra$getHandle() { return this; } diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/inventory/meta/ItemStackMetaMixin.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/inventory/meta/ItemStackMetaMixin.java index 56efedc53..23950f944 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/inventory/meta/ItemStackMetaMixin.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/inventory/meta/ItemStackMetaMixin.java @@ -28,6 +28,7 @@ public abstract class ItemStackMetaMixin { @Shadow public abstract void addEnchantment(net.minecraft.enchantment.Enchantment enchantment, int level); + @Intrinsic public Object terra$getHandle() { return this; } diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/world/ChunkRegionMixin.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/world/ChunkRegionMixin.java index d87799f57..427a7ae85 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/world/ChunkRegionMixin.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/world/ChunkRegionMixin.java @@ -67,6 +67,7 @@ public abstract class ChunkRegionMixin { return 0; } + @Intrinsic public Object terra$getHandle() { return this; } diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/world/ServerWorldMixin.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/world/ServerWorldMixin.java index 15a5c8138..ee5b7755e 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/world/ServerWorldMixin.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/world/ServerWorldMixin.java @@ -58,6 +58,7 @@ public abstract class ServerWorldMixin { return 0; } + @Intrinsic public Object terra$getHandle() { return this; } From 76bf245e1664fb7a79e3437ff26f2619b39219eb Mon Sep 17 00:00:00 2001 From: dfsek Date: Mon, 10 May 2021 22:52:34 -0700 Subject: [PATCH 05/12] type check ChunkGenerator in PopulatorFeature --- .../com/dfsek/terra/fabric/generation/PopulatorFeature.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/generation/PopulatorFeature.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/generation/PopulatorFeature.java index c58fad225..5b009ae1f 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/generation/PopulatorFeature.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/generation/PopulatorFeature.java @@ -2,7 +2,6 @@ package com.dfsek.terra.fabric.generation; import com.dfsek.terra.api.platform.world.Chunk; import com.dfsek.terra.api.platform.world.World; -import com.dfsek.terra.fabric.generation.FabricChunkGeneratorWrapper; import com.mojang.serialization.Codec; import net.minecraft.util.math.BlockPos; import net.minecraft.world.StructureWorldAccess; @@ -22,6 +21,7 @@ public class PopulatorFeature extends Feature { @Override public boolean generate(StructureWorldAccess world, ChunkGenerator chunkGenerator, Random random, BlockPos pos, DefaultFeatureConfig config) { + if(!(chunkGenerator instanceof FabricChunkGeneratorWrapper)) return true; FabricChunkGeneratorWrapper gen = (FabricChunkGeneratorWrapper) chunkGenerator; gen.getHandle().getPopulators().forEach(populator -> populator.populate((World) world, (Chunk) world)); return true; From 808aa50f5f76ad119b45b554c2edcf1752682c5d Mon Sep 17 00:00:00 2001 From: dfsek Date: Tue, 11 May 2021 09:02:59 -0700 Subject: [PATCH 06/12] update config.yml --- common/src/main/resources/config.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/common/src/main/resources/config.yml b/common/src/main/resources/config.yml index adb7d8522..e7572c935 100644 --- a/common/src/main/resources/config.yml +++ b/common/src/main/resources/config.yml @@ -7,7 +7,6 @@ cache: carver: 512 structure: 32 sampler: 128 -master-disable: - caves: false + biome-provider: 32 script: max-recursion: 1000 \ No newline at end of file From 96de1554f1f4ebe875f06679af19f3ed30f17309 Mon Sep 17 00:00:00 2001 From: dfsek Date: Tue, 11 May 2021 15:56:53 -0700 Subject: [PATCH 07/12] disable configureondemand --- gradle.properties | 1 - 1 file changed, 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 1fca82ba1..048aff2f8 100644 --- a/gradle.properties +++ b/gradle.properties @@ -7,4 +7,3 @@ org.gradle.parallel=true org.gradle.caching=true org.gradle.warning.mode=all #org.gradle.logging.level=info -org.gradle.configureondemand=true From 2bfaa95a81aee94ecb18fe9fe971803ba934ffa0 Mon Sep 17 00:00:00 2001 From: dfsek Date: Tue, 11 May 2021 16:03:32 -0700 Subject: [PATCH 08/12] add forge disclaimer to README --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 8986ce6b7..dabb6dd73 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ to your specifications, with no knowledge of Java required. * Paper+ servers (Paper, Tuinity, Purpur, etc): [SpigotMC](https://www.spigotmc.org/resources/85151/) * Fabric: [Modrinth](https://modrinth.com/mod/terra) / [CurseForge](https://www.curseforge.com/minecraft/mc-mods/terra-world-generator) -* Forge: [Modrinth](https://modrinth.com/mod/terra) / [CurseForge](https://www.curseforge.com/minecraft/mc-mods/terra-world-generator) +* Forge **(ALPHA - NOT PRODUCTION-READY)**: [Modrinth](https://modrinth.com/mod/terra) / [CurseForge](https://www.curseforge.com/minecraft/mc-mods/terra-world-generator) ## Building and Running Terra @@ -43,4 +43,4 @@ submit a PR! Join the discord [here](https://discord.gg/PXUEbbF) if you would like to talk more about the project! ## Beta -Terra is still in beta! While it is stable, it is not feature-complete. There is a lot to be added! \ No newline at end of file +Terra is still in beta! While it is stable, it is not feature-complete. There is a lot to be added! From 0ab949174ae8bc2fef1a7f2e57c435459c3e4796 Mon Sep 17 00:00:00 2001 From: dfsek Date: Tue, 11 May 2021 16:06:37 -0700 Subject: [PATCH 09/12] Update README.md --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index dabb6dd73..0b0eb8b93 100644 --- a/README.md +++ b/README.md @@ -32,11 +32,11 @@ To run Minecraft with Terra in the IDE (for testing) use the following tasks: * `runPaper` - Run the Paper test server with Terra (`installPaper` must have been run previously). * `runPurpur` - Run the Purpur test server with Terra (`installPurpur` must have been run previously). * Fabric - * `runClient` - Run a Minecraft client with Terra installed. - * `runServer` - Run a Minecraft server with Terra installed. + * `runClient` - Run a Minecraft Fabric client with Terra installed. + * `runServer` - Run a Minecraft Fabric server with Terra installed. * Forge - * `runClient` - Run a Minecraft client with Terra installed. - * `runServer` - Run a Minecraft server with Terra installed. + * `runClient` - Run a Minecraft Forge client with Terra installed. + * `runServer` - Run a Minecraft Forge server with Terra installed. ## Contributing Contributions are welcome! If you want to see a feature in Terra, please, open an issue, or implement it yourself and submit a PR! From 97d7ccacbf5384237e2ba15adbb874b0810008a1 Mon Sep 17 00:00:00 2001 From: dfsek Date: Thu, 13 May 2021 18:13:10 -0700 Subject: [PATCH 10/12] add worldedit dependency --- platforms/fabric/build.gradle.kts | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/platforms/fabric/build.gradle.kts b/platforms/fabric/build.gradle.kts index 38aafb791..25bd6118a 100644 --- a/platforms/fabric/build.gradle.kts +++ b/platforms/fabric/build.gradle.kts @@ -28,6 +28,14 @@ dependencies { "modImplementation"("net.fabricmc:fabric-loader:0.11.2") "modImplementation"("net.fabricmc.fabric-api:fabric-api:0.31.0+1.16") + + "modImplementation"("com.sk89q.worldedit:worldedit-fabric-mc1.16:7.2.0-SNAPSHOT") { + exclude(group = "com.google.guava", module = "guava") + exclude(group = "com.google.code.gson", module = "gson") + exclude(group = "it.unimi.dsi", module = "fastutil") + exclude(group = "org.apache.logging.log4j", module = "log4j-api") + exclude(group = "org.apache.logging.log4j", module = "log4j-core") + } } From 5fd2fc59f4e4b018b81b320e99752a285ccbe1f3 Mon Sep 17 00:00:00 2001 From: dfsek Date: Thu, 13 May 2021 21:28:49 -0700 Subject: [PATCH 11/12] worldedit integration on Fabric --- platforms/fabric/build.gradle.kts | 2 +- .../dfsek/terra/fabric/block/FabricBlock.java | 2 +- .../fabric/block/data/FabricDirectional.java | 2 +- .../fabric/block/data/FabricOrientable.java | 2 +- .../terra/fabric/block/data/FabricSlab.java | 2 +- .../terra/fabric/block/data/FabricStairs.java | 2 +- .../FabricChunkGeneratorWrapper.java | 2 +- .../fabric/handle/FabricWorldHandle.java | 16 +++++++++- .../block/BlockEntityMixin.java | 2 +- .../implementations/block/BlockMixin.java | 2 +- .../implementations/entity/EntityMixin.java | 2 +- .../fabric/{ => util}/FabricAdapter.java | 2 +- .../terra/fabric/util/WorldEditUtil.java | 29 +++++++++++++++++++ 13 files changed, 55 insertions(+), 12 deletions(-) rename platforms/fabric/src/main/java/com/dfsek/terra/fabric/{ => util}/FabricAdapter.java (99%) create mode 100644 platforms/fabric/src/main/java/com/dfsek/terra/fabric/util/WorldEditUtil.java diff --git a/platforms/fabric/build.gradle.kts b/platforms/fabric/build.gradle.kts index 25bd6118a..fbdf2b8ac 100644 --- a/platforms/fabric/build.gradle.kts +++ b/platforms/fabric/build.gradle.kts @@ -29,7 +29,7 @@ dependencies { "modImplementation"("net.fabricmc.fabric-api:fabric-api:0.31.0+1.16") - "modImplementation"("com.sk89q.worldedit:worldedit-fabric-mc1.16:7.2.0-SNAPSHOT") { + "modCompileOnly"("com.sk89q.worldedit:worldedit-fabric-mc1.16:7.2.0-SNAPSHOT") { exclude(group = "com.google.guava", module = "guava") exclude(group = "com.google.code.gson", module = "gson") exclude(group = "it.unimi.dsi", module = "fastutil") diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/block/FabricBlock.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/block/FabricBlock.java index b53bff68f..78c1211b5 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/block/FabricBlock.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/block/FabricBlock.java @@ -7,7 +7,7 @@ import com.dfsek.terra.api.platform.block.BlockFace; import com.dfsek.terra.api.platform.block.BlockType; import com.dfsek.terra.api.platform.block.state.BlockState; import com.dfsek.terra.api.platform.world.World; -import com.dfsek.terra.fabric.FabricAdapter; +import com.dfsek.terra.fabric.util.FabricAdapter; import net.minecraft.block.FluidBlock; import net.minecraft.util.math.BlockPos; import net.minecraft.world.WorldAccess; diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/block/data/FabricDirectional.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/block/data/FabricDirectional.java index 4d15d1c16..be4eb316b 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/block/data/FabricDirectional.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/block/data/FabricDirectional.java @@ -2,8 +2,8 @@ package com.dfsek.terra.fabric.block.data; import com.dfsek.terra.api.platform.block.BlockFace; import com.dfsek.terra.api.platform.block.data.Directional; -import com.dfsek.terra.fabric.FabricAdapter; import com.dfsek.terra.fabric.block.FabricBlockData; +import com.dfsek.terra.fabric.util.FabricAdapter; import net.minecraft.block.BlockState; import net.minecraft.state.property.DirectionProperty; diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/block/data/FabricOrientable.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/block/data/FabricOrientable.java index 1633df9ab..d8e88d566 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/block/data/FabricOrientable.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/block/data/FabricOrientable.java @@ -2,8 +2,8 @@ package com.dfsek.terra.fabric.block.data; import com.dfsek.terra.api.platform.block.Axis; import com.dfsek.terra.api.platform.block.data.Orientable; -import com.dfsek.terra.fabric.FabricAdapter; import com.dfsek.terra.fabric.block.FabricBlockData; +import com.dfsek.terra.fabric.util.FabricAdapter; import net.minecraft.block.BlockState; import net.minecraft.state.property.EnumProperty; import net.minecraft.util.math.Direction; diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/block/data/FabricSlab.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/block/data/FabricSlab.java index 390702582..cf0d0c277 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/block/data/FabricSlab.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/block/data/FabricSlab.java @@ -1,7 +1,7 @@ package com.dfsek.terra.fabric.block.data; import com.dfsek.terra.api.platform.block.data.Slab; -import com.dfsek.terra.fabric.FabricAdapter; +import com.dfsek.terra.fabric.util.FabricAdapter; import net.minecraft.block.BlockState; import net.minecraft.state.property.Properties; diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/block/data/FabricStairs.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/block/data/FabricStairs.java index 098cd75d6..d18ec13da 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/block/data/FabricStairs.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/block/data/FabricStairs.java @@ -2,7 +2,7 @@ package com.dfsek.terra.fabric.block.data; import com.dfsek.terra.api.platform.block.BlockFace; import com.dfsek.terra.api.platform.block.data.Stairs; -import com.dfsek.terra.fabric.FabricAdapter; +import com.dfsek.terra.fabric.util.FabricAdapter; import net.minecraft.block.BlockState; import net.minecraft.state.property.Properties; diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/generation/FabricChunkGeneratorWrapper.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/generation/FabricChunkGeneratorWrapper.java index efac7ee53..78ab7f8a2 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/generation/FabricChunkGeneratorWrapper.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/generation/FabricChunkGeneratorWrapper.java @@ -7,8 +7,8 @@ import com.dfsek.terra.api.util.FastRandom; import com.dfsek.terra.api.world.generation.TerraChunkGenerator; import com.dfsek.terra.api.world.locate.AsyncStructureFinder; import com.dfsek.terra.config.pack.ConfigPack; -import com.dfsek.terra.fabric.FabricAdapter; import com.dfsek.terra.fabric.TerraFabricPlugin; +import com.dfsek.terra.fabric.util.FabricAdapter; import com.dfsek.terra.world.TerraWorld; import com.dfsek.terra.world.generation.generators.DefaultChunkGenerator3D; import com.dfsek.terra.world.generation.math.samplers.Sampler; diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/handle/FabricWorldHandle.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/handle/FabricWorldHandle.java index 219968106..1f801f1d0 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/handle/FabricWorldHandle.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/handle/FabricWorldHandle.java @@ -1,9 +1,13 @@ package com.dfsek.terra.fabric.handle; +import com.dfsek.terra.api.math.vector.Location; import com.dfsek.terra.api.platform.entity.EntityType; +import com.dfsek.terra.api.platform.entity.Player; import com.dfsek.terra.api.platform.handle.WorldHandle; -import com.dfsek.terra.fabric.FabricAdapter; +import com.dfsek.terra.api.util.generic.pair.Pair; import com.dfsek.terra.fabric.block.FabricBlockData; +import com.dfsek.terra.fabric.util.FabricAdapter; +import com.dfsek.terra.fabric.util.WorldEditUtil; import com.mojang.brigadier.StringReader; import com.mojang.brigadier.exceptions.CommandSyntaxException; import net.minecraft.block.BlockState; @@ -33,4 +37,14 @@ public class FabricWorldHandle implements WorldHandle { if(identifier == null) identifier = Identifier.tryParse("minecraft:" + id.toLowerCase(Locale.ROOT)); return (EntityType) Registry.ENTITY_TYPE.get(identifier); } + + @Override + public Pair getSelectedLocation(Player player) { + try { + Class.forName("com.sk89q.worldedit.WorldEdit"); + } catch(ClassNotFoundException e) { + throw new IllegalStateException("WorldEdit is not installed."); + } + return WorldEditUtil.getSelection(player); + } } diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/block/BlockEntityMixin.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/block/BlockEntityMixin.java index 1450344a8..74c5ccd23 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/block/BlockEntityMixin.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/block/BlockEntityMixin.java @@ -3,8 +3,8 @@ package com.dfsek.terra.fabric.mixin.implementations.block; import com.dfsek.terra.api.platform.block.Block; import com.dfsek.terra.api.platform.block.BlockData; import com.dfsek.terra.api.platform.block.state.BlockState; -import com.dfsek.terra.fabric.FabricAdapter; import com.dfsek.terra.fabric.block.FabricBlock; +import com.dfsek.terra.fabric.util.FabricAdapter; import net.minecraft.block.entity.BlockEntity; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/block/BlockMixin.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/block/BlockMixin.java index 4e77e28ea..579b404f8 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/block/BlockMixin.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/block/BlockMixin.java @@ -2,7 +2,7 @@ package com.dfsek.terra.fabric.mixin.implementations.block; import com.dfsek.terra.api.platform.block.BlockData; import com.dfsek.terra.api.platform.block.BlockType; -import com.dfsek.terra.fabric.FabricAdapter; +import com.dfsek.terra.fabric.util.FabricAdapter; import net.minecraft.block.Block; import net.minecraft.block.BlockState; import net.minecraft.block.Blocks; diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/entity/EntityMixin.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/entity/EntityMixin.java index 1f255e1a6..d829f7fe3 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/entity/EntityMixin.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/entity/EntityMixin.java @@ -2,7 +2,7 @@ package com.dfsek.terra.fabric.mixin.implementations.entity; import com.dfsek.terra.api.math.vector.Location; import com.dfsek.terra.api.platform.world.World; -import com.dfsek.terra.fabric.FabricAdapter; +import com.dfsek.terra.fabric.util.FabricAdapter; import net.minecraft.entity.Entity; import net.minecraft.text.LiteralText; import net.minecraft.text.Text; diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/FabricAdapter.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/util/FabricAdapter.java similarity index 99% rename from platforms/fabric/src/main/java/com/dfsek/terra/fabric/FabricAdapter.java rename to platforms/fabric/src/main/java/com/dfsek/terra/fabric/util/FabricAdapter.java index 62037173c..8c197d573 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/FabricAdapter.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/util/FabricAdapter.java @@ -1,4 +1,4 @@ -package com.dfsek.terra.fabric; +package com.dfsek.terra.fabric.util; import com.dfsek.terra.api.math.vector.Vector3; import com.dfsek.terra.api.platform.block.Axis; diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/util/WorldEditUtil.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/util/WorldEditUtil.java new file mode 100644 index 000000000..159e4fbc8 --- /dev/null +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/util/WorldEditUtil.java @@ -0,0 +1,29 @@ +package com.dfsek.terra.fabric.util; + +import com.dfsek.terra.api.math.vector.Location; +import com.dfsek.terra.api.platform.entity.Player; +import com.dfsek.terra.api.util.generic.pair.Pair; +import com.sk89q.worldedit.IncompleteRegionException; +import com.sk89q.worldedit.WorldEdit; +import com.sk89q.worldedit.math.BlockVector3; +import com.sk89q.worldedit.regions.Region; +import net.minecraft.server.network.ServerPlayerEntity; +import net.minecraft.world.World; + +public final class WorldEditUtil { + public static Pair getSelection(Player player) { + WorldEdit worldEdit = WorldEdit.getInstance(); + try { + Region selection = worldEdit.getSessionManager() + .get(com.sk89q.worldedit.fabric.FabricAdapter.adaptPlayer((ServerPlayerEntity) player)) + .getSelection(com.sk89q.worldedit.fabric.FabricAdapter.adapt((World) player.getWorld())); + BlockVector3 min = selection.getMinimumPoint(); + BlockVector3 max = selection.getMaximumPoint(); + Location l1 = new Location(player.getWorld(), min.getBlockX(), min.getBlockY(), min.getBlockZ()); + Location l2 = new Location(player.getWorld(), max.getBlockX(), max.getBlockY(), max.getBlockZ()); + return Pair.of(l1, l2); + } catch(IncompleteRegionException e) { + throw new IllegalStateException("No selection has been made", e); + } + } +} From cddf7c20e42285a5de2d0b07c6c099060308417f Mon Sep 17 00:00:00 2001 From: dfsek Date: Thu, 13 May 2021 22:10:35 -0700 Subject: [PATCH 12/12] bump version --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 30da85bca..db0ed685b 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,6 +1,6 @@ import com.dfsek.terra.getGitHash -val versionObj = Version("5", "3", "1", true) +val versionObj = Version("5", "3", "2", true) allprojects { version = versionObj