diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/FabricEntryPoint.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/FabricEntryPoint.java index 66348ed53..d85b330e0 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/FabricEntryPoint.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/FabricEntryPoint.java @@ -28,11 +28,10 @@ import net.fabricmc.api.ModInitializer; import net.minecraft.server.command.ServerCommandSource; import net.minecraft.util.Identifier; import net.minecraft.util.registry.Registry; -import net.minecraft.world.gen.WorldPresets; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.dfsek.terra.fabric.data.Codecs; +import com.dfsek.terra.mod.data.Codecs; public class FabricEntryPoint implements ModInitializer { @@ -46,7 +45,7 @@ public class FabricEntryPoint implements ModInitializer { } public static void register() { // register the things - Registry.register(Registry.CHUNK_GENERATOR, new Identifier("terra:terra"), Codecs.FABRIC_CHUNK_GENERATOR_WRAPPER); + Registry.register(Registry.CHUNK_GENERATOR, new Identifier("terra:terra"), Codecs.MINECRAFT_CHUNK_GENERATOR_WRAPPER); Registry.register(Registry.BIOME_SOURCE, new Identifier("terra:terra"), Codecs.TERRA_BIOME_SOURCE); } diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/PlatformImpl.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/PlatformImpl.java index 2ba5701f0..efa3bfe17 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/PlatformImpl.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/PlatformImpl.java @@ -20,17 +20,14 @@ package com.dfsek.terra.fabric; import ca.solostudios.strata.Versions; import ca.solostudios.strata.parser.tokenizer.ParseException; import ca.solostudios.strata.version.Version; -import com.dfsek.tectonic.api.TypeRegistry; -import com.dfsek.tectonic.api.depth.DepthTracker; -import com.dfsek.tectonic.api.exception.LoadException; + import com.dfsek.terra.fabric.util.BiomeUtil; +import com.dfsek.terra.mod.CommonPlatform; +import com.dfsek.terra.mod.ModPlatform; + import net.fabricmc.loader.api.FabricLoader; import net.minecraft.MinecraftVersion; import net.minecraft.server.MinecraftServer; -import net.minecraft.util.Identifier; -import net.minecraft.util.registry.BuiltinRegistries; -import net.minecraft.world.biome.Biome.Precipitation; -import net.minecraft.world.biome.BiomeEffects.GrassColorModifier; import org.jetbrains.annotations.NotNull; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -38,29 +35,26 @@ import org.slf4j.LoggerFactory; import java.io.File; import java.util.ArrayList; import java.util.List; -import java.util.Locale; -import com.dfsek.terra.AbstractPlatform; import com.dfsek.terra.addon.EphemeralAddon; import com.dfsek.terra.api.addon.BaseAddon; import com.dfsek.terra.api.handle.ItemHandle; import com.dfsek.terra.api.handle.WorldHandle; import com.dfsek.terra.api.util.generic.Lazy; -import com.dfsek.terra.api.world.biome.PlatformBiome; -import com.dfsek.terra.fabric.generation.FabricChunkGeneratorWrapper; -import com.dfsek.terra.fabric.handle.FabricItemHandle; +import com.dfsek.terra.mod.generation.MinecraftChunkGeneratorWrapper; +import com.dfsek.terra.mod.handle.MinecraftItemHandle; import com.dfsek.terra.mod.handle.MinecraftWorldHandle; -import com.dfsek.terra.fabric.util.ProtoPlatformBiome; -public class PlatformImpl extends AbstractPlatform { +public class PlatformImpl extends ModPlatform { private static final Logger LOGGER = LoggerFactory.getLogger(PlatformImpl.class); - private final ItemHandle itemHandle = new FabricItemHandle(); + private final ItemHandle itemHandle = new MinecraftItemHandle(); private final WorldHandle worldHandle = new MinecraftWorldHandle(); private final Lazy dataFolder = Lazy.lazy(() -> new File(FabricLoader.getInstance().getConfigDir().toFile(), "Terra")); private MinecraftServer server; public PlatformImpl() { + CommonPlatform.initialize(this); load(); } @@ -68,6 +62,7 @@ public class PlatformImpl extends AbstractPlatform { this.server = server; } + @Override public MinecraftServer getServer() { return server; } @@ -86,7 +81,7 @@ public class PlatformImpl extends AbstractPlatform { }).join(); BiomeUtil.registerBiomes(); server.getWorlds().forEach(world -> { - if(world.getChunkManager().getChunkGenerator() instanceof FabricChunkGeneratorWrapper chunkGeneratorWrapper) { + if(world.getChunkManager().getChunkGenerator() instanceof MinecraftChunkGeneratorWrapper chunkGeneratorWrapper) { getConfigRegistry().get(chunkGeneratorWrapper.getPack().getRegistryKey()).ifPresent(pack -> { chunkGeneratorWrapper.setPack(pack); LOGGER.info("Replaced pack in chunk generator for world {}", world); @@ -101,7 +96,7 @@ public class PlatformImpl extends AbstractPlatform { protected Iterable platformAddon() { List addons = new ArrayList<>(); - addons.add(new FabricAddon(this)); + super.platformAddon().forEach(addons::add); String mcVersion = MinecraftVersion.CURRENT.getReleaseTarget(); try { @@ -150,27 +145,4 @@ public class PlatformImpl extends AbstractPlatform { public @NotNull ItemHandle getItemHandle() { return itemHandle; } - - @Override - public void register(TypeRegistry registry) { - super.register(registry); - registry.registerLoader(PlatformBiome.class, (type, o, loader, depthTracker) -> parseBiome((String) o, depthTracker)) - .registerLoader(Identifier.class, (type, o, loader, depthTracker) -> { - Identifier identifier = Identifier.tryParse((String) o); - if(identifier == null) - throw new LoadException("Invalid identifier: " + o, depthTracker); - return identifier; - }) - .registerLoader(Precipitation.class, (type, o, loader, depthTracker) -> Precipitation.valueOf(((String) o).toUpperCase( - Locale.ROOT))) - .registerLoader(GrassColorModifier.class, (type, o, loader, depthTracker) -> GrassColorModifier.valueOf(((String) o).toUpperCase( - Locale.ROOT))); - } - - - private ProtoPlatformBiome parseBiome(String id, DepthTracker tracker) throws LoadException { - Identifier identifier = Identifier.tryParse(id); - if(BuiltinRegistries.BIOME.get(identifier) == null) throw new LoadException("Invalid Biome ID: " + identifier, tracker); // failure. - return new ProtoPlatformBiome(identifier); - } } diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/config/PostLoadCompatibilityOptions.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/config/PostLoadCompatibilityOptions.java deleted file mode 100644 index 9a13e0029..000000000 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/config/PostLoadCompatibilityOptions.java +++ /dev/null @@ -1,28 +0,0 @@ -/* - * This file is part of Terra. - * - * Terra is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Terra is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Terra. If not, see . - */ - -package com.dfsek.terra.fabric.config; - -import com.dfsek.tectonic.api.config.template.ConfigTemplate; - -import com.dfsek.terra.api.properties.Properties; - - -@SuppressWarnings("FieldMayBeFinal") -public class PostLoadCompatibilityOptions implements ConfigTemplate, Properties { - -} diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/config/VanillaBiomeProperties.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/config/VanillaBiomeProperties.java deleted file mode 100644 index 889c9148f..000000000 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/config/VanillaBiomeProperties.java +++ /dev/null @@ -1,76 +0,0 @@ -package com.dfsek.terra.fabric.config; - -import com.dfsek.tectonic.api.config.template.ConfigTemplate; -import com.dfsek.tectonic.api.config.template.annotations.Default; -import com.dfsek.tectonic.api.config.template.annotations.Value; -import net.minecraft.world.biome.Biome.Precipitation; -import net.minecraft.world.biome.BiomeEffects.GrassColorModifier; - -import com.dfsek.terra.api.properties.Properties; - - -public class VanillaBiomeProperties implements ConfigTemplate, Properties { - @Value("colors.grass") - @Default - private Integer grassColor = null; - - @Value("colors.fog") - @Default - private Integer fogColor = null; - - @Value("colors.water") - @Default - private Integer waterColor = null; - - @Value("colors.water-fog") - @Default - private Integer waterFogColor = null; - - @Value("colors.foliage") - @Default - private Integer foliageColor = null; - - @Value("colors.sky") - @Default - private Integer skyColor = null; - - @Value("colors.modifier") - @Default - private GrassColorModifier modifier = null; - - @Value("climate.precipitation") - @Default - private Precipitation precipitation = null; - - public Integer getFogColor() { - return fogColor; - } - - public Integer getFoliageColor() { - return foliageColor; - } - - public Integer getGrassColor() { - return grassColor; - } - - public Integer getWaterColor() { - return waterColor; - } - - public Integer getWaterFogColor() { - return waterFogColor; - } - - public Integer getSkyColor() { - return skyColor; - } - - public Precipitation getPrecipitation() { - return precipitation; - } - - public GrassColorModifier getModifier() { - return modifier; - } -} diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/handle/FabricItemHandle.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/handle/FabricItemHandle.java deleted file mode 100644 index beb2ee7a2..000000000 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/handle/FabricItemHandle.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - * This file is part of Terra. - * - * Terra is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Terra is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Terra. If not, see . - */ - -package com.dfsek.terra.fabric.handle; - -import com.dfsek.terra.fabric.FabricEntryPoint; - -import com.mojang.brigadier.StringReader; -import com.mojang.brigadier.exceptions.CommandSyntaxException; -import net.minecraft.command.CommandRegistryAccess; -import net.minecraft.command.argument.ItemStackArgumentType; -import net.minecraft.util.Identifier; -import net.minecraft.util.registry.Registry; - -import java.util.Set; -import java.util.stream.Collectors; - -import com.dfsek.terra.api.handle.ItemHandle; -import com.dfsek.terra.api.inventory.Item; -import com.dfsek.terra.api.inventory.item.Enchantment; - - -public class FabricItemHandle implements ItemHandle { - - @Override - public Item createItem(String data) { - try { - return (Item) new ItemStackArgumentType(new CommandRegistryAccess(FabricEntryPoint.getPlatform().getServer().getRegistryManager())).parse(new StringReader(data)).getItem(); - } catch(CommandSyntaxException e) { - throw new IllegalArgumentException("Invalid item data \"" + data + "\"", e); - } - } - - @Override - public Enchantment getEnchantment(String id) { - return (Enchantment) (Registry.ENCHANTMENT.get(Identifier.tryParse(id))); - } - - @Override - public Set getEnchantments() { - return Registry.ENCHANTMENT.stream().map(enchantment -> (Enchantment) enchantment).collect(Collectors.toSet()); - } -} diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/fix/BeeMoveGoalsUnsynchronizedRandomAccessFix.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/fix/BeeMoveGoalsUnsynchronizedRandomAccessFix.java deleted file mode 100644 index ced25c46b..000000000 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/fix/BeeMoveGoalsUnsynchronizedRandomAccessFix.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.dfsek.terra.fabric.mixin.fix; - -import net.minecraft.entity.passive.BeeEntity.MoveToFlowerGoal; -import net.minecraft.entity.passive.BeeEntity.MoveToHiveGoal; -import net.minecraft.util.math.random.CheckedRandom; -import net.minecraft.util.math.random.Random; -import net.minecraft.world.World; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Redirect; - -import com.dfsek.terra.fabric.FabricEntryPoint; - - -/** - * Bees spawning uses world.random without synchronization. This causes issues when spawning bees during world generation. - */ -@Mixin({ - MoveToHiveGoal.class, - MoveToFlowerGoal.class -}) -public class BeeMoveGoalsUnsynchronizedRandomAccessFix { - @Redirect(method = "", at = @At(value = "FIELD", target = "Lnet/minecraft/world/World;random:Lnet/minecraft/util/math/random/Random;")) - public Random redirectRandomAccess(World instance) { - return new CheckedRandom(FabricEntryPoint.getPlatform().getServer().getTicks()); // replace with new random seeded by tick time. - } -} diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/fix/NetherFossilOptimization.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/fix/NetherFossilOptimization.java deleted file mode 100644 index 770b042dd..000000000 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/fix/NetherFossilOptimization.java +++ /dev/null @@ -1,42 +0,0 @@ -package com.dfsek.terra.fabric.mixin.fix; - -import com.dfsek.terra.fabric.generation.FabricChunkGeneratorWrapper; - -import net.minecraft.block.BlockState; -import net.minecraft.block.Blocks; -import net.minecraft.structure.NetherFossilGenerator; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Direction; -import net.minecraft.util.math.random.ChunkRandom; -import net.minecraft.world.EmptyBlockView; -import net.minecraft.world.gen.HeightContext; -import net.minecraft.world.gen.chunk.VerticalBlockSample; -import net.minecraft.world.gen.heightprovider.HeightProvider; -import net.minecraft.world.gen.structure.NetherFossilStructure; -import net.minecraft.world.gen.structure.Structure; -import net.minecraft.world.gen.structure.Structure.Context; -import net.minecraft.world.gen.structure.Structure.StructurePosition; -import org.spongepowered.asm.mixin.Final; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; - -import java.util.Optional; - - -/** - * Disable fossil generation in Terra worlds, as they are very expensive due to consistently triggering cache misses. - * - * Currently, on Fabric, Terra cannot be specified as a Nether generator. TODO: logic to turn fossils back on if chunk generator is in nether. - */ -@Mixin(NetherFossilStructure.class) -public class NetherFossilOptimization { - @Inject(method = "getStructurePosition", at = @At("HEAD"), cancellable = true) - public void injectFossilPositions(Context context, CallbackInfoReturnable> cir) { - if(context.chunkGenerator() instanceof FabricChunkGeneratorWrapper) { - cir.setReturnValue(Optional.empty()); - } - } -} diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/compat/GenerationSettingsFloraFeaturesMixin.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/compat/GenerationSettingsFloraFeaturesMixin.java deleted file mode 100644 index 39236239f..000000000 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/compat/GenerationSettingsFloraFeaturesMixin.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.dfsek.terra.fabric.mixin.implementations.compat; - -import com.dfsek.terra.fabric.mixin_ifaces.FloraFeatureHolder; - -import net.minecraft.world.biome.GenerationSettings; -import net.minecraft.world.gen.feature.ConfiguredFeature; -import org.spongepowered.asm.mixin.Implements; -import org.spongepowered.asm.mixin.Interface; -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.CallbackInfoReturnable; - -import java.util.List; - - -@Mixin(GenerationSettings.class) -@Implements(@Interface(iface = FloraFeatureHolder.class, prefix = "terra$")) -public class GenerationSettingsFloraFeaturesMixin { - private List> flora; - - public void terra$setFloraFeatures(List> features) { - this.flora = features; - } - - @Inject(method = "getFlowerFeatures", cancellable = true, at = @At("HEAD")) - public void inject(CallbackInfoReturnable>> cir) { - if(flora != null) { - cir.setReturnValue(flora); - } - } -} diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/terra/BiomeMixin.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/terra/BiomeMixin.java deleted file mode 100644 index 7ad40e91f..000000000 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/terra/BiomeMixin.java +++ /dev/null @@ -1,31 +0,0 @@ -/* - * This file is part of Terra. - * - * Terra is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Terra is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Terra. If not, see . - */ - -package com.dfsek.terra.fabric.mixin.implementations.terra; - -import net.minecraft.world.biome.Biome; -import org.spongepowered.asm.mixin.Implements; -import org.spongepowered.asm.mixin.Interface; -import org.spongepowered.asm.mixin.Mixin; - -import com.dfsek.terra.api.world.biome.PlatformBiome; - - -@Mixin(Biome.class) -@Implements(@Interface(iface = PlatformBiome.class, prefix = "terra$")) -public abstract class BiomeMixin { -} diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/terra/HandleImplementationMixin.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/terra/HandleImplementationMixin.java deleted file mode 100644 index 09ddf21a7..000000000 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/terra/HandleImplementationMixin.java +++ /dev/null @@ -1,61 +0,0 @@ -package com.dfsek.terra.fabric.mixin.implementations.terra; - -import net.minecraft.block.Block; -import net.minecraft.block.BlockState; -import net.minecraft.block.entity.BlockEntity; -import net.minecraft.block.entity.LockableContainerBlockEntity; -import net.minecraft.block.entity.LootableContainerBlockEntity; -import net.minecraft.enchantment.Enchantment; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityType; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.server.command.ServerCommandSource; -import net.minecraft.server.world.ServerWorld; -import net.minecraft.world.ChunkRegion; -import net.minecraft.world.biome.Biome; -import net.minecraft.world.chunk.ProtoChunk; -import net.minecraft.world.chunk.WorldChunk; -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 com.dfsek.terra.api.Handle; - - -/** - * A ton of Minecraft classes must implement Handle identically, we can just take care of it here - */ -@Mixin({ - ServerWorld.class, - ChunkRegion.class, - - Block.class, - BlockState.class, - - BlockEntity.class, - LootableContainerBlockEntity.class, - LockableContainerBlockEntity.class, - - ProtoChunk.class, - WorldChunk.class, - - Entity.class, - EntityType.class, - - ServerCommandSource.class, - - Item.class, - ItemStack.class, - Enchantment.class, - - Biome.class -}) -@Implements(@Interface(iface = Handle.class, prefix = "terra$")) -public class HandleImplementationMixin { - @Intrinsic - public Object terra$getHandle() { - return this; - } -} diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/terra/block/BlockMixin.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/terra/block/BlockMixin.java deleted file mode 100644 index 271615c01..000000000 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/terra/block/BlockMixin.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * This file is part of Terra. - * - * Terra is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Terra is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Terra. If not, see . - */ - -package com.dfsek.terra.fabric.mixin.implementations.terra.block; - -import net.minecraft.block.Block; -import net.minecraft.block.Blocks; -import org.spongepowered.asm.mixin.Implements; -import org.spongepowered.asm.mixin.Interface; -import org.spongepowered.asm.mixin.Mixin; - -import com.dfsek.terra.api.block.BlockType; - - -@Mixin(Block.class) -@Implements(@Interface(iface = BlockType.class, prefix = "terra$")) -public abstract class BlockMixin { - public com.dfsek.terra.api.block.state.BlockState terra$getDefaultState() { - return (com.dfsek.terra.api.block.state.BlockState) ((Block) (Object) this).getDefaultState(); - } - - public boolean terra$isSolid() { - return ((Block) (Object) this).getDefaultState().isOpaque(); - } - - @SuppressWarnings("ConstantConditions") - public boolean terra$isWater() { - return ((Object) this) == Blocks.WATER; - } -} diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/terra/block/entity/BlockEntityMixin.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/terra/block/entity/BlockEntityMixin.java deleted file mode 100644 index a8fc2a580..000000000 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/terra/block/entity/BlockEntityMixin.java +++ /dev/null @@ -1,54 +0,0 @@ -/* - * This file is part of Terra. - * - * Terra is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Terra is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Terra. If not, see . - */ - -package com.dfsek.terra.fabric.mixin.implementations.terra.block.entity; - -import org.spongepowered.asm.mixin.Implements; -import org.spongepowered.asm.mixin.Interface; -import org.spongepowered.asm.mixin.Mixin; - -import com.dfsek.terra.api.block.entity.BlockEntity; -import com.dfsek.terra.api.block.state.BlockState; - - -@Mixin(net.minecraft.block.entity.BlockEntity.class) -@Implements(@Interface(iface = BlockEntity.class, prefix = "terra$")) -public abstract class BlockEntityMixin { - public boolean terra$update(boolean applyPhysics) { - if(((net.minecraft.block.entity.BlockEntity) (Object) this).hasWorld()) //noinspection ConstantConditions - ((net.minecraft.block.entity.BlockEntity) (Object) this).getWorld().getChunk( - ((net.minecraft.block.entity.BlockEntity) (Object) this).getPos()).setBlockEntity( - (net.minecraft.block.entity.BlockEntity) (Object) this); - return true; - } - - public int terra$getX() { - return ((net.minecraft.block.entity.BlockEntity) (Object) this).getPos().getX(); - } - - public int terra$getY() { - return ((net.minecraft.block.entity.BlockEntity) (Object) this).getPos().getY(); - } - - public int terra$getZ() { - return ((net.minecraft.block.entity.BlockEntity) (Object) this).getPos().getZ(); - } - - public BlockState terra$getBlockState() { - return (BlockState) ((net.minecraft.block.entity.BlockEntity) (Object) this).getCachedState(); - } -} diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/terra/block/entity/LootableContainerBlockEntityMixin.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/terra/block/entity/LootableContainerBlockEntityMixin.java deleted file mode 100644 index 40755991e..000000000 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/terra/block/entity/LootableContainerBlockEntityMixin.java +++ /dev/null @@ -1,35 +0,0 @@ -/* - * This file is part of Terra. - * - * Terra is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Terra is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Terra. If not, see . - */ - -package com.dfsek.terra.fabric.mixin.implementations.terra.block.entity; - -import net.minecraft.block.entity.LootableContainerBlockEntity; -import org.spongepowered.asm.mixin.Implements; -import org.spongepowered.asm.mixin.Interface; -import org.spongepowered.asm.mixin.Mixin; - -import com.dfsek.terra.api.block.entity.Container; -import com.dfsek.terra.api.inventory.Inventory; - - -@Mixin(LootableContainerBlockEntity.class) -@Implements(@Interface(iface = Container.class, prefix = "terra$")) -public abstract class LootableContainerBlockEntityMixin extends BlockEntityMixin { - public Inventory terra$getInventory() { - return (Inventory) this; - } -} diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/terra/block/entity/SignBlockEntityMixin.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/terra/block/entity/SignBlockEntityMixin.java deleted file mode 100644 index 2006246d8..000000000 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/terra/block/entity/SignBlockEntityMixin.java +++ /dev/null @@ -1,65 +0,0 @@ -/* - * This file is part of Terra. - * - * Terra is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Terra is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Terra. If not, see . - */ - -package com.dfsek.terra.fabric.mixin.implementations.terra.block.entity; - -import net.minecraft.block.entity.SignBlockEntity; -import net.minecraft.text.Text; -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.Mixin; -import org.spongepowered.asm.mixin.Shadow; - -import com.dfsek.terra.api.block.entity.SerialState; -import com.dfsek.terra.api.block.entity.Sign; - - -@Mixin(SignBlockEntity.class) -@Implements(@Interface(iface = Sign.class, prefix = "terra$")) -public abstract class SignBlockEntityMixin { - @Shadow - @Final - private Text[] texts; - - @Shadow - public abstract void setTextOnRow(int row, Text text); - - public void terra$setLine(int index, @NotNull String line) throws IndexOutOfBoundsException { - setTextOnRow(index, Text.literal(line)); - } - - public @NotNull String[] terra$getLines() { - String[] lines = new String[texts.length]; - for(int i = 0; i < texts.length; i++) { - lines[i] = texts[i].getString(); - } - return lines; - } - - public @NotNull String terra$getLine(int index) throws IndexOutOfBoundsException { - return texts[index].getString(); - } - - public void terra$applyState(String state) { - SerialState.parse(state).forEach((k, v) -> { - if(!k.startsWith("text")) throw new IllegalArgumentException("Invalid property: " + k); - terra$setLine(Integer.parseInt(k.substring(4)), v); - }); - } -} diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/terra/block/state/PropertyMixin.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/terra/block/state/PropertyMixin.java deleted file mode 100644 index 7665662be..000000000 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/terra/block/state/PropertyMixin.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.dfsek.terra.fabric.mixin.implementations.terra.block.state; - -import org.spongepowered.asm.mixin.Final; -import org.spongepowered.asm.mixin.Implements; -import org.spongepowered.asm.mixin.Interface; -import org.spongepowered.asm.mixin.Interface.Remap; -import org.spongepowered.asm.mixin.Intrinsic; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; - -import java.util.Collection; - -import com.dfsek.terra.api.block.state.properties.Property; - - -@Mixin(net.minecraft.state.property.Property.class) -@Implements(@Interface(iface = Property.class, prefix = "terra$", remap = Remap.NONE)) -public abstract class PropertyMixin { - @Shadow - @Final - private Class type; - @Shadow - @Final - private String name; - - @Shadow - public abstract Collection getValues(); - - @Intrinsic - public Collection terra$values() { - return getValues(); - } - - @Intrinsic - public Class terra$getType() { - return type; - } - - @Intrinsic - public String terra$getID() { - return name; - } -} diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/terra/chunk/ChunkRegionMixin.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/terra/chunk/ChunkRegionMixin.java deleted file mode 100644 index 4da5c28cf..000000000 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/terra/chunk/ChunkRegionMixin.java +++ /dev/null @@ -1,58 +0,0 @@ -/* - * This file is part of Terra. - * - * Terra is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Terra is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Terra. If not, see . - */ - -package com.dfsek.terra.fabric.mixin.implementations.terra.chunk; - -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.ChunkRegion; -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.Mixin; -import org.spongepowered.asm.mixin.Shadow; - -import com.dfsek.terra.api.block.state.BlockState; -import com.dfsek.terra.api.world.chunk.Chunk; - - -@Mixin(ChunkRegion.class) -@Implements(@Interface(iface = Chunk.class, prefix = "terraChunk$")) -public abstract class ChunkRegionMixin { - - @Shadow - @Final - private net.minecraft.world.chunk.Chunk centerPos; - - public void terraChunk$setBlock(int x, int y, int z, @NotNull BlockState blockState, boolean physics) { - ((ChunkRegion) (Object) this).setBlockState(new BlockPos(x + (centerPos.getPos().x << 4), y, z + (centerPos.getPos().z << 4)), - (net.minecraft.block.BlockState) blockState, 0); - } - - public @NotNull BlockState terraChunk$getBlock(int x, int y, int z) { - return (BlockState) ((ChunkRegion) (Object) this).getBlockState( - new BlockPos(x + (centerPos.getPos().x << 4), y, z + (centerPos.getPos().z << 4))); - } - - public int terraChunk$getX() { - return centerPos.getPos().x; - } - - public int terraChunk$getZ() { - return centerPos.getPos().z; - } -} diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/terra/chunk/WorldChunkMixin.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/terra/chunk/WorldChunkMixin.java deleted file mode 100644 index 885d0aae2..000000000 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/terra/chunk/WorldChunkMixin.java +++ /dev/null @@ -1,75 +0,0 @@ -/* - * This file is part of Terra. - * - * Terra is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Terra is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Terra. If not, see . - */ - -package com.dfsek.terra.fabric.mixin.implementations.terra.chunk; - -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.chunk.WorldChunk; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; -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; - -import com.dfsek.terra.api.block.state.BlockState; -import com.dfsek.terra.api.world.ServerWorld; -import com.dfsek.terra.api.world.chunk.Chunk; - - -@Mixin(WorldChunk.class) -@Implements(@Interface(iface = Chunk.class, prefix = "terra$")) -public abstract class WorldChunkMixin { - @Final - @Shadow - net.minecraft.world.World world; - - @Shadow - public abstract net.minecraft.block.BlockState getBlockState(BlockPos pos); - - @Shadow - @Nullable - public abstract net.minecraft.block.BlockState setBlockState(BlockPos pos, net.minecraft.block.BlockState state, boolean moved); - - public void terra$setBlock(int x, int y, int z, BlockState data, boolean physics) { - setBlockState(new BlockPos(x, y, z), (net.minecraft.block.BlockState) data, false); - } - - public void terra$setBlock(int x, int y, int z, @NotNull BlockState blockState) { - ((net.minecraft.world.chunk.Chunk) (Object) this).setBlockState(new BlockPos(x, y, z), (net.minecraft.block.BlockState) blockState, - false); - } - - @Intrinsic - public @NotNull BlockState terra$getBlock(int x, int y, int z) { - return (BlockState) getBlockState(new BlockPos(x, y, z)); - } - - public int terra$getX() { - return ((net.minecraft.world.chunk.Chunk) (Object) this).getPos().x; - } - - public int terra$getZ() { - return ((net.minecraft.world.chunk.Chunk) (Object) this).getPos().z; - } - - public ServerWorld terra$getWorld() { - return (ServerWorld) world; - } -} diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/terra/chunk/data/ProtoChunkMixin.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/terra/chunk/data/ProtoChunkMixin.java deleted file mode 100644 index afae72689..000000000 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/terra/chunk/data/ProtoChunkMixin.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * This file is part of Terra. - * - * Terra is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Terra is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Terra. If not, see . - */ - -package com.dfsek.terra.fabric.mixin.implementations.terra.chunk.data; - -import com.dfsek.terra.api.block.state.BlockState; -import com.dfsek.terra.api.world.chunk.generation.ProtoChunk; - -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.HeightLimitView; -import org.jetbrains.annotations.NotNull; -import org.spongepowered.asm.mixin.Implements; -import org.spongepowered.asm.mixin.Interface; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; - - -@Mixin(net.minecraft.world.chunk.ProtoChunk.class) -@Implements(@Interface(iface = ProtoChunk.class, prefix = "terra$")) -public abstract class ProtoChunkMixin { - @Shadow - public abstract net.minecraft.block.BlockState getBlockState(BlockPos pos); - - @Shadow - public abstract HeightLimitView getHeightLimitView(); - - public void terra$setBlock(int x, int y, int z, @NotNull BlockState blockState) { - ((net.minecraft.world.chunk.Chunk) (Object) this).setBlockState(new BlockPos(x, y, z), (net.minecraft.block.BlockState) blockState, - false); - } - - public @NotNull BlockState terra$getBlock(int x, int y, int z) { - return (BlockState) getBlockState(new BlockPos(x, y, z)); - } - - public int terra$getMaxHeight() { - return getHeightLimitView().getTopY(); - } -} diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/terra/entity/EntityMixin.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/terra/entity/EntityMixin.java deleted file mode 100644 index beeaf0d57..000000000 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/terra/entity/EntityMixin.java +++ /dev/null @@ -1,55 +0,0 @@ -/* - * This file is part of Terra. - * - * Terra is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Terra is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Terra. If not, see . - */ - -package com.dfsek.terra.fabric.mixin.implementations.terra.entity; - -import net.minecraft.entity.Entity; -import net.minecraft.util.math.BlockPos; -import org.spongepowered.asm.mixin.Implements; -import org.spongepowered.asm.mixin.Interface; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; - -import com.dfsek.terra.api.util.vector.Vector3; -import com.dfsek.terra.api.world.ServerWorld; -import com.dfsek.terra.fabric.util.FabricAdapter; - - -@Mixin(Entity.class) -@Implements(@Interface(iface = com.dfsek.terra.api.entity.Entity.class, prefix = "terra$")) -public abstract class EntityMixin { - @Shadow - public net.minecraft.world.World world; - - @Shadow - private BlockPos blockPos; - - @Shadow - public abstract void teleport(double destX, double destY, double destZ); - - public Vector3 terra$position() { - return FabricAdapter.adapt(blockPos); - } - - public void terra$position(Vector3 location) { - teleport(location.getX(), location.getY(), location.getZ()); - } - - public ServerWorld terra$world() { - return (ServerWorld) world; - } -} diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/terra/entity/EntityTypeMixin.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/terra/entity/EntityTypeMixin.java deleted file mode 100644 index 27ea5a462..000000000 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/terra/entity/EntityTypeMixin.java +++ /dev/null @@ -1,29 +0,0 @@ -/* - * This file is part of Terra. - * - * Terra is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Terra is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Terra. If not, see . - */ - -package com.dfsek.terra.fabric.mixin.implementations.terra.entity; - -import net.minecraft.entity.EntityType; -import org.spongepowered.asm.mixin.Implements; -import org.spongepowered.asm.mixin.Interface; -import org.spongepowered.asm.mixin.Mixin; - - -@Mixin(EntityType.class) -@Implements(@Interface(iface = com.dfsek.terra.api.entity.EntityType.class, prefix = "terra$")) -public abstract class EntityTypeMixin { -} diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/terra/entity/PlayerEntityMixin.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/terra/entity/PlayerEntityMixin.java deleted file mode 100644 index 8298cb4e7..000000000 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/terra/entity/PlayerEntityMixin.java +++ /dev/null @@ -1,31 +0,0 @@ -/* - * This file is part of Terra. - * - * Terra is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Terra is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Terra. If not, see . - */ - -package com.dfsek.terra.fabric.mixin.implementations.terra.entity; - -import net.minecraft.entity.player.PlayerEntity; -import org.spongepowered.asm.mixin.Implements; -import org.spongepowered.asm.mixin.Interface; -import org.spongepowered.asm.mixin.Mixin; - -import com.dfsek.terra.api.entity.Player; - - -@Mixin(PlayerEntity.class) -@Implements(@Interface(iface = Player.class, prefix = "terra$")) -public abstract class PlayerEntityMixin extends EntityMixin { -} diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/terra/entity/ServerCommandSourceMixin.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/terra/entity/ServerCommandSourceMixin.java deleted file mode 100644 index a8fdb8958..000000000 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/terra/entity/ServerCommandSourceMixin.java +++ /dev/null @@ -1,66 +0,0 @@ -/* - * This file is part of Terra. - * - * Terra is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Terra is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Terra. If not, see . - */ - -package com.dfsek.terra.fabric.mixin.implementations.terra.entity; - -import com.mojang.brigadier.exceptions.CommandSyntaxException; -import net.minecraft.server.command.ServerCommandSource; -import net.minecraft.server.network.ServerPlayerEntity; -import net.minecraft.text.Text; -import org.jetbrains.annotations.Nullable; -import org.spongepowered.asm.mixin.Implements; -import org.spongepowered.asm.mixin.Interface; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; - -import java.util.Optional; - -import com.dfsek.terra.api.command.CommandSender; -import com.dfsek.terra.api.entity.Entity; -import com.dfsek.terra.api.entity.Player; - - -@Mixin(ServerCommandSource.class) -@Implements(@Interface(iface = CommandSender.class, prefix = "terra$")) -public abstract class ServerCommandSourceMixin { - @Shadow - public abstract void sendFeedback(Text message, boolean broadcastToOps); - - @Shadow - public abstract ServerPlayerEntity getPlayer() throws CommandSyntaxException; - - @Shadow - @Nullable - public abstract net.minecraft.entity.@Nullable Entity getEntity(); - - public void terra$sendMessage(String message) { - sendFeedback(Text.literal(message), true); - } - - @Nullable - public Optional terra$getEntity() { - return Optional.ofNullable((Entity) getEntity()); - } - - public Optional terra$getPlayer() { - try { - return Optional.ofNullable((Player) getPlayer()); - } catch(CommandSyntaxException e) { - return Optional.empty(); - } - } -} diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/terra/inventory/LockableContainerBlockEntityMixin.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/terra/inventory/LockableContainerBlockEntityMixin.java deleted file mode 100644 index e888e511a..000000000 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/terra/inventory/LockableContainerBlockEntityMixin.java +++ /dev/null @@ -1,47 +0,0 @@ -/* - * This file is part of Terra. - * - * Terra is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Terra is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Terra. If not, see . - */ - -package com.dfsek.terra.fabric.mixin.implementations.terra.inventory; - -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.Mixin; - -import com.dfsek.terra.api.inventory.Inventory; -import com.dfsek.terra.api.inventory.ItemStack; - - -@Mixin(LockableContainerBlockEntity.class) -@Implements(@Interface(iface = Inventory.class, prefix = "terra$")) -public class LockableContainerBlockEntityMixin { - @SuppressWarnings("ConstantConditions") - public void terra$setItem(int slot, ItemStack newStack) { - ((LockableContainerBlockEntity) (Object) this).setStack(slot, (net.minecraft.item.ItemStack) (Object) newStack); - } - - public int terra$getSize() { - return ((LockableContainerBlockEntity) (Object) this).size(); - } - - @SuppressWarnings("ConstantConditions") - public ItemStack terra$getItem(int slot) { - net.minecraft.item.ItemStack itemStack = ((LockableContainerBlockEntity) (Object) this).getStack(slot); - return itemStack.getItem() == Items.AIR ? null : (ItemStack) (Object) itemStack; - } -} diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/terra/inventory/item/ItemMixin.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/terra/inventory/item/ItemMixin.java deleted file mode 100644 index 111aa95fa..000000000 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/terra/inventory/item/ItemMixin.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * This file is part of Terra. - * - * Terra is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Terra is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Terra. If not, see . - */ - -package com.dfsek.terra.fabric.mixin.implementations.terra.inventory.item; - -import net.minecraft.item.Item; -import org.spongepowered.asm.mixin.Implements; -import org.spongepowered.asm.mixin.Interface; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; - -import com.dfsek.terra.api.inventory.ItemStack; - - -@Mixin(Item.class) -@Implements(@Interface(iface = com.dfsek.terra.api.inventory.Item.class, prefix = "terra$")) -public abstract class ItemMixin { - @Shadow - public abstract int getMaxDamage(); - - @SuppressWarnings("ConstantConditions") - public ItemStack terra$newItemStack(int amount) { - return (ItemStack) (Object) new net.minecraft.item.ItemStack((Item) (Object) this, amount); - } - - public double terra$getMaxDurability() { - return getMaxDamage(); - } -} diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/terra/inventory/item/ItemStackMixin.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/terra/inventory/item/ItemStackMixin.java deleted file mode 100644 index 3dafd81be..000000000 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/terra/inventory/item/ItemStackMixin.java +++ /dev/null @@ -1,76 +0,0 @@ -/* - * This file is part of Terra. - * - * Terra is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Terra is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Terra. If not, see . - */ - -package com.dfsek.terra.fabric.mixin.implementations.terra.inventory.item; - -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NbtCompound; -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; - -import com.dfsek.terra.api.inventory.Item; -import com.dfsek.terra.api.inventory.item.ItemMeta; - - -@Mixin(ItemStack.class) -@Implements(@Interface(iface = com.dfsek.terra.api.inventory.ItemStack.class, prefix = "terra$")) -public abstract class ItemStackMixin { - @Shadow - public abstract int getCount(); - - @Shadow - public abstract void setCount(int count); - - @Shadow - public abstract net.minecraft.item.Item getItem(); - - @Shadow - public abstract boolean isDamageable(); - - @Shadow - public abstract void setNbt(@Nullable NbtCompound tag); - - public int terra$getAmount() { - return getCount(); - } - - public void terra$setAmount(int i) { - setCount(i); - } - - public Item terra$getType() { - return (Item) getItem(); - } - - public ItemMeta terra$getItemMeta() { - return (ItemMeta) this; - } - - @SuppressWarnings("ConstantConditions") - public void terra$setItemMeta(ItemMeta meta) { - setNbt(((ItemStack) (Object) meta).getNbt()); - } - - @Intrinsic - public boolean terra$isDamageable() { - return isDamageable(); - } -} diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/terra/inventory/meta/EnchantmentMixin.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/terra/inventory/meta/EnchantmentMixin.java deleted file mode 100644 index ddc2e6936..000000000 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/terra/inventory/meta/EnchantmentMixin.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * This file is part of Terra. - * - * Terra is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Terra is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Terra. If not, see . - */ - -package com.dfsek.terra.fabric.mixin.implementations.terra.inventory.meta; - -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.Mixin; -import org.spongepowered.asm.mixin.Shadow; - -import java.util.Objects; - -import com.dfsek.terra.api.inventory.ItemStack; - - -@Mixin(Enchantment.class) -@Implements(@Interface(iface = com.dfsek.terra.api.inventory.item.Enchantment.class, prefix = "terra$")) -public abstract class EnchantmentMixin { - @Shadow - public abstract boolean isAcceptableItem(net.minecraft.item.ItemStack stack); - - @Shadow - public abstract boolean canCombine(Enchantment other); - - @SuppressWarnings("ConstantConditions") - public boolean terra$canEnchantItem(ItemStack itemStack) { - return isAcceptableItem((net.minecraft.item.ItemStack) (Object) itemStack); - } - - public boolean terra$conflictsWith(com.dfsek.terra.api.inventory.item.Enchantment other) { - return !canCombine((Enchantment) other); - } - - public String terra$getID() { - return Objects.requireNonNull(Registry.ENCHANTMENT.getId((Enchantment) (Object) this)).toString(); - } -} diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/terra/inventory/meta/ItemStackDamageableMixin.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/terra/inventory/meta/ItemStackDamageableMixin.java deleted file mode 100644 index 4749b8b4d..000000000 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/terra/inventory/meta/ItemStackDamageableMixin.java +++ /dev/null @@ -1,55 +0,0 @@ -/* - * This file is part of Terra. - * - * Terra is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Terra is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Terra. If not, see . - */ - -package com.dfsek.terra.fabric.mixin.implementations.terra.inventory.meta; - -import net.minecraft.item.ItemStack; -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; - -import com.dfsek.terra.api.inventory.item.Damageable; - - -@Mixin(ItemStack.class) -@Implements(@Interface(iface = Damageable.class, prefix = "terra$")) -public abstract class ItemStackDamageableMixin { - @Shadow - public abstract boolean isDamaged(); - - @Shadow - public abstract int getDamage(); - - @Shadow - public abstract void setDamage(int damage); - - @Intrinsic - public int terra$getDamage() { - return getDamage(); - } - - @Intrinsic - public void terra$setDamage(int damage) { - setDamage(damage); - } - - public boolean terra$hasDamage() { - return isDamaged(); - } -} diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/terra/inventory/meta/ItemStackMetaMixin.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/terra/inventory/meta/ItemStackMetaMixin.java deleted file mode 100644 index 0fe8f7686..000000000 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/terra/inventory/meta/ItemStackMetaMixin.java +++ /dev/null @@ -1,65 +0,0 @@ -/* - * This file is part of Terra. - * - * Terra is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Terra is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Terra. If not, see . - */ - -package com.dfsek.terra.fabric.mixin.implementations.terra.inventory.meta; - -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NbtCompound; -import net.minecraft.nbt.NbtList; -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; - -import java.util.Collections; -import java.util.HashMap; -import java.util.Map; - -import com.dfsek.terra.api.inventory.item.Enchantment; -import com.dfsek.terra.api.inventory.item.ItemMeta; - - -@Mixin(ItemStack.class) -@Implements(@Interface(iface = ItemMeta.class, prefix = "terra$")) -public abstract class ItemStackMetaMixin { - @Shadow - public abstract boolean hasEnchantments(); - - @Shadow - public abstract NbtList getEnchantments(); - - @Shadow - public abstract void addEnchantment(net.minecraft.enchantment.Enchantment enchantment, int level); - - public void terra$addEnchantment(Enchantment enchantment, int level) { - addEnchantment((net.minecraft.enchantment.Enchantment) enchantment, level); - } - - @Intrinsic(displace = true) - public Map terra$getEnchantments() { - if(!hasEnchantments()) return Collections.emptyMap(); - Map map = new HashMap<>(); - - getEnchantments().forEach(enchantment -> { - NbtCompound eTag = (NbtCompound) enchantment; - map.put((Enchantment) Registry.ENCHANTMENT.get(eTag.getInt("id")), eTag.getInt("lvl")); - }); - return map; - } -} diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/terra/package-info.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/terra/package-info.java deleted file mode 100644 index 64552f11a..000000000 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/terra/package-info.java +++ /dev/null @@ -1,23 +0,0 @@ -/* - * This file is part of Terra. - * - * Terra is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Terra is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Terra. If not, see . - */ - -/** - * Mixins in this package implement Terra - * interfaces in Minecraft classes. - */ - -package com.dfsek.terra.fabric.mixin.implementations.terra; \ No newline at end of file diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin_ifaces/FloraFeatureHolder.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin_ifaces/FloraFeatureHolder.java deleted file mode 100644 index 5f4697d99..000000000 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin_ifaces/FloraFeatureHolder.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.dfsek.terra.fabric.mixin_ifaces; - -import net.minecraft.world.gen.feature.ConfiguredFeature; - -import java.util.List; - - -public interface FloraFeatureHolder { - void setFloraFeatures(List> features); -} diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/util/BiomeUtil.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/util/BiomeUtil.java index 421b321f4..678d7777a 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/util/BiomeUtil.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/util/BiomeUtil.java @@ -3,10 +3,13 @@ package com.dfsek.terra.fabric.util; import com.dfsek.terra.api.config.ConfigPack; import com.dfsek.terra.api.world.biome.Biome; import com.dfsek.terra.fabric.FabricEntryPoint; -import com.dfsek.terra.fabric.config.PreLoadCompatibilityOptions; -import com.dfsek.terra.fabric.config.VanillaBiomeProperties; +import com.dfsek.terra.mod.config.PreLoadCompatibilityOptions; +import com.dfsek.terra.mod.config.VanillaBiomeProperties; + +import com.dfsek.terra.mod.mixin_ifaces.FloraFeatureHolder; +import com.dfsek.terra.mod.config.ProtoPlatformBiome; +import com.dfsek.terra.mod.util.MinecraftUtil; -import com.dfsek.terra.fabric.mixin_ifaces.FloraFeatureHolder; import net.minecraft.util.Identifier; import net.minecraft.util.registry.BuiltinRegistries; import net.minecraft.util.registry.Registry; @@ -66,10 +69,10 @@ public final class BiomeUtil { Identifier identifier = new Identifier("terra", createBiomeID(pack, id)); if(registry.containsId(identifier)) { - ((ProtoPlatformBiome) biome.getPlatformBiome()).setDelegate(FabricUtil.getEntry(registry, identifier) - .orElseThrow() - .getKey() - .orElseThrow()); + ((ProtoPlatformBiome) biome.getPlatformBiome()).setDelegate(MinecraftUtil.getEntry(registry, identifier) + .orElseThrow() + .getKey() + .orElseThrow()); } else { ((ProtoPlatformBiome) biome.getPlatformBiome()).setDelegate(BuiltinRegistries.add(registry, registerKey(identifier).getValue(), diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/util/FabricAdapter.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/util/FabricAdapter.java deleted file mode 100644 index da6c3f6f8..000000000 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/util/FabricAdapter.java +++ /dev/null @@ -1,185 +0,0 @@ -/* - * This file is part of Terra. - * - * Terra is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Terra is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Terra. If not, see . - */ - -package com.dfsek.terra.fabric.util; - -import net.minecraft.block.enums.BlockHalf; -import net.minecraft.block.enums.WallShape; -import net.minecraft.block.enums.WireConnection; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Direction; -import net.minecraft.world.HeightLimitView; - -import com.dfsek.terra.api.block.state.properties.enums.Axis; -import com.dfsek.terra.api.block.state.properties.enums.Half; -import com.dfsek.terra.api.block.state.properties.enums.RailShape; -import com.dfsek.terra.api.block.state.properties.enums.RedstoneConnection; -import com.dfsek.terra.api.block.state.properties.enums.WallHeight; -import com.dfsek.terra.api.util.vector.Vector3; -import com.dfsek.terra.api.world.info.WorldProperties; - - -public final class FabricAdapter { - public static BlockPos adapt(Vector3 v) { - return new BlockPos(v.getBlockX(), v.getBlockY(), v.getBlockZ()); - } - - public static Vector3 adapt(BlockPos pos) { - return Vector3.of(pos.getX(), pos.getY(), pos.getZ()); - } - - public static Direction adapt(com.dfsek.terra.api.block.state.properties.enums.Direction direction) { - return switch(direction) { - case SOUTH -> Direction.SOUTH; - case NORTH -> Direction.NORTH; - case WEST -> Direction.WEST; - case EAST -> Direction.EAST; - case UP -> Direction.UP; - case DOWN -> Direction.DOWN; - }; - } - - public static WorldProperties adapt(HeightLimitView height, long seed) { - return new WorldProperties() { - @Override - public long getSeed() { - return seed; - } - - @Override - public int getMaxHeight() { - return height.getTopY(); - } - - @Override - public int getMinHeight() { - return height.getBottomY(); - } - - @Override - public Object getHandle() { - return height; - } - }; - } - - public static com.dfsek.terra.api.block.state.properties.enums.Direction adapt(Direction direction) { - return switch(direction) { - case SOUTH -> com.dfsek.terra.api.block.state.properties.enums.Direction.SOUTH; - case NORTH -> com.dfsek.terra.api.block.state.properties.enums.Direction.NORTH; - case WEST -> com.dfsek.terra.api.block.state.properties.enums.Direction.WEST; - case EAST -> com.dfsek.terra.api.block.state.properties.enums.Direction.EAST; - case UP -> com.dfsek.terra.api.block.state.properties.enums.Direction.UP; - case DOWN -> com.dfsek.terra.api.block.state.properties.enums.Direction.DOWN; - }; - } - - public static WallHeight adapt(WallShape shape) { - return switch(shape) { - case LOW -> WallHeight.LOW; - case NONE -> WallHeight.NONE; - case TALL -> WallHeight.TALL; - }; - } - - public static WallShape adapt(WallHeight shape) { - return switch(shape) { - case LOW -> WallShape.LOW; - case NONE -> WallShape.NONE; - case TALL -> WallShape.TALL; - }; - } - - public static RedstoneConnection adapt(WireConnection connection) { - return switch(connection) { - case NONE -> RedstoneConnection.NONE; - case UP -> RedstoneConnection.UP; - case SIDE -> RedstoneConnection.SIDE; - }; - } - - public static WireConnection adapt(RedstoneConnection connection) { - return switch(connection) { - case NONE -> WireConnection.NONE; - case UP -> WireConnection.UP; - case SIDE -> WireConnection.SIDE; - }; - } - - - public static Half adapt(BlockHalf half) { - return switch(half) { - case BOTTOM -> Half.BOTTOM; - case TOP -> Half.TOP; - }; - } - - public static BlockHalf adapt(Half half) { - return switch(half) { - case TOP -> BlockHalf.TOP; - case BOTTOM -> BlockHalf.BOTTOM; - default -> throw new IllegalStateException(); - }; - } - - public static RailShape adapt(net.minecraft.block.enums.RailShape railShape) { - return switch(railShape) { - case EAST_WEST -> RailShape.EAST_WEST; - case NORTH_EAST -> RailShape.NORTH_EAST; - case NORTH_WEST -> RailShape.NORTH_WEST; - case SOUTH_EAST -> RailShape.SOUTH_EAST; - case SOUTH_WEST -> RailShape.SOUTH_WEST; - case NORTH_SOUTH -> RailShape.NORTH_SOUTH; - case ASCENDING_EAST -> RailShape.ASCENDING_EAST; - case ASCENDING_NORTH -> RailShape.ASCENDING_NORTH; - case ASCENDING_SOUTH -> RailShape.ASCENDING_SOUTH; - case ASCENDING_WEST -> RailShape.ASCENDING_WEST; - }; - } - - public static net.minecraft.block.enums.RailShape adapt(RailShape railShape) { - return switch(railShape) { - case EAST_WEST -> net.minecraft.block.enums.RailShape.EAST_WEST; - case NORTH_EAST -> net.minecraft.block.enums.RailShape.NORTH_EAST; - case NORTH_WEST -> net.minecraft.block.enums.RailShape.NORTH_WEST; - case SOUTH_EAST -> net.minecraft.block.enums.RailShape.SOUTH_EAST; - case SOUTH_WEST -> net.minecraft.block.enums.RailShape.SOUTH_WEST; - case NORTH_SOUTH -> net.minecraft.block.enums.RailShape.NORTH_SOUTH; - case ASCENDING_EAST -> net.minecraft.block.enums.RailShape.ASCENDING_EAST; - case ASCENDING_NORTH -> net.minecraft.block.enums.RailShape.ASCENDING_NORTH; - case ASCENDING_SOUTH -> net.minecraft.block.enums.RailShape.ASCENDING_SOUTH; - case ASCENDING_WEST -> net.minecraft.block.enums.RailShape.ASCENDING_WEST; - }; - } - - - public static Axis adapt(Direction.Axis axis) { - return switch(axis) { - case X -> Axis.X; - case Y -> Axis.Y; - case Z -> Axis.Z; - }; - } - - public static Direction.Axis adapt(Axis axis) { - return switch(axis) { - case Z -> Direction.Axis.Z; - case Y -> Direction.Axis.Y; - case X -> Direction.Axis.X; - }; - } -} diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/util/FabricUtil.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/util/FabricUtil.java deleted file mode 100644 index 7e00aa900..000000000 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/util/FabricUtil.java +++ /dev/null @@ -1,61 +0,0 @@ -/* - * This file is part of Terra. - * - * Terra is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Terra is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Terra. If not, see . - */ - -package com.dfsek.terra.fabric.util; - -import net.minecraft.block.entity.LootableContainerBlockEntity; -import net.minecraft.block.entity.MobSpawnerBlockEntity; -import net.minecraft.block.entity.SignBlockEntity; -import net.minecraft.util.Identifier; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.registry.Registry; -import net.minecraft.util.registry.RegistryEntry; -import net.minecraft.world.WorldAccess; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.util.Optional; - -import com.dfsek.terra.api.block.entity.BlockEntity; -import com.dfsek.terra.api.block.entity.Container; -import com.dfsek.terra.api.block.entity.MobSpawner; -import com.dfsek.terra.api.block.entity.Sign; - - -public final class FabricUtil { - private FabricUtil() { - - } - - public static BlockEntity createState(WorldAccess worldAccess, BlockPos pos) { - net.minecraft.block.entity.BlockEntity entity = worldAccess.getBlockEntity(pos); - if(entity instanceof SignBlockEntity) { - return (Sign) entity; - } else if(entity instanceof MobSpawnerBlockEntity) { - return (MobSpawner) entity; - } else if(entity instanceof LootableContainerBlockEntity) { - return (Container) entity; - } - return null; - } - - public static Optional> getEntry(Registry registry, Identifier identifier) { - return registry.getOrEmpty(identifier) - .flatMap(registry::getKey) - .map(registry::getOrCreateEntry); - } -} diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/util/LifecycleUtil.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/util/LifecycleUtil.java index 2e935d889..d91d4e263 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/util/LifecycleUtil.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/util/LifecycleUtil.java @@ -2,8 +2,8 @@ package com.dfsek.terra.fabric.util; import com.dfsek.terra.api.event.events.platform.PlatformInitializationEvent; import com.dfsek.terra.fabric.FabricEntryPoint; -import com.dfsek.terra.fabric.generation.FabricChunkGeneratorWrapper; -import com.dfsek.terra.fabric.generation.TerraBiomeSource; +import com.dfsek.terra.mod.generation.MinecraftChunkGeneratorWrapper; +import com.dfsek.terra.mod.generation.TerraBiomeSource; import net.minecraft.structure.StructureSet; import net.minecraft.util.Identifier; @@ -78,7 +78,7 @@ public class LifecycleUtil { PRESETS.add(generatorID); TerraBiomeSource biomeSource = new TerraBiomeSource(biomeRegistry, pack); - ChunkGenerator generator = new FabricChunkGeneratorWrapper(structureSetRegistry, biomeSource, pack, overworld); + ChunkGenerator generator = new MinecraftChunkGeneratorWrapper(structureSetRegistry, biomeSource, pack, overworld); DimensionOptions dimensionOptions = new DimensionOptions(overworldDimensionType, generator); WorldPreset preset = new WorldPreset( diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/util/TagUtil.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/util/TagUtil.java index 7a52ff376..78759c4f4 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/util/TagUtil.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/util/TagUtil.java @@ -1,5 +1,7 @@ package com.dfsek.terra.fabric.util; +import com.dfsek.terra.mod.util.MinecraftUtil; + import com.google.common.collect.ImmutableMap; import net.minecraft.tag.TagKey; import net.minecraft.tag.WorldPresetTags; @@ -38,7 +40,7 @@ public final class TagUtil { LifecycleUtil .getPresets() - .forEach(id -> FabricUtil + .forEach(id -> MinecraftUtil .getEntry(registry, id) .ifPresentOrElse( preset -> collect @@ -57,11 +59,11 @@ public final class TagUtil { BiomeUtil .getTerraBiomeMap() .forEach((vb, terraBiomes) -> - FabricUtil + MinecraftUtil .getEntry(registry, vb) .ifPresentOrElse( vanilla -> terraBiomes - .forEach(tb -> FabricUtil + .forEach(tb -> MinecraftUtil .getEntry(registry, tb) .ifPresentOrElse( terra -> { diff --git a/platforms/fabric/src/main/resources/terra.fabric.mixins.json b/platforms/fabric/src/main/resources/terra.fabric.mixins.json index f18482bf5..d28c0541c 100644 --- a/platforms/fabric/src/main/resources/terra.fabric.mixins.json +++ b/platforms/fabric/src/main/resources/terra.fabric.mixins.json @@ -4,33 +4,6 @@ "package": "com.dfsek.terra.fabric.mixin", "compatibilityLevel": "JAVA_17", "mixins": [ - "fix.BeeMoveGoalsUnsynchronizedRandomAccessFix", - "fix.NetherFossilOptimization", - "implementations.compat.GenerationSettingsFloraFeaturesMixin", - "implementations.terra.BiomeMixin", - "implementations.terra.HandleImplementationMixin", - "implementations.terra.block.BlockMixin", - "implementations.terra.block.entity.BlockEntityMixin", - "implementations.terra.block.entity.LootableContainerBlockEntityMixin", - "implementations.terra.block.entity.MobSpawnerBlockEntityMixin", - "implementations.terra.block.entity.SignBlockEntityMixin", - "implementations.terra.block.state.BlockStateMixin", - "implementations.terra.block.state.PropertyMixin", - "implementations.terra.chunk.ChunkRegionMixin", - "implementations.terra.chunk.WorldChunkMixin", - "implementations.terra.chunk.data.ProtoChunkMixin", - "implementations.terra.entity.EntityMixin", - "implementations.terra.entity.EntityTypeMixin", - "implementations.terra.entity.PlayerEntityMixin", - "implementations.terra.entity.ServerCommandSourceMixin", - "implementations.terra.inventory.LockableContainerBlockEntityMixin", - "implementations.terra.inventory.item.ItemMixin", - "implementations.terra.inventory.item.ItemStackMixin", - "implementations.terra.inventory.meta.EnchantmentMixin", - "implementations.terra.inventory.meta.ItemStackDamageableMixin", - "implementations.terra.inventory.meta.ItemStackMetaMixin", - "implementations.terra.world.ChunkRegionMixin", - "implementations.terra.world.ServerWorldMixin", "lifecycle.DataPackContentsMixin", "lifecycle.MinecraftServerMixin", "lifecycle.NoiseConfigMixin", diff --git a/platforms/forge/src/main/java/com/dfsek/terra/forge/ForgeAddon.java b/platforms/forge/src/main/java/com/dfsek/terra/forge/ForgeAddon.java deleted file mode 100644 index 499ae6533..000000000 --- a/platforms/forge/src/main/java/com/dfsek/terra/forge/ForgeAddon.java +++ /dev/null @@ -1,80 +0,0 @@ -/* - * This file is part of Terra. - * - * Terra is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Terra is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Terra. If not, see . - */ - -package com.dfsek.terra.forge; - -import ca.solostudios.strata.Versions; -import ca.solostudios.strata.version.Version; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import com.dfsek.terra.api.addon.BaseAddon; -import com.dfsek.terra.api.event.events.config.ConfigurationLoadEvent; -import com.dfsek.terra.api.event.events.config.pack.ConfigPackPostLoadEvent; -import com.dfsek.terra.api.event.events.config.pack.ConfigPackPreLoadEvent; -import com.dfsek.terra.api.event.functional.FunctionalEventHandler; -import com.dfsek.terra.api.world.biome.Biome; -import com.dfsek.terra.forge.config.PostLoadCompatibilityOptions; -import com.dfsek.terra.forge.config.PreLoadCompatibilityOptions; -import com.dfsek.terra.forge.config.VanillaBiomeProperties; - - -public final class ForgeAddon implements BaseAddon { - private static final Version VERSION = Versions.getVersion(1, 0, 0); - private static final Logger logger = LoggerFactory.getLogger(ForgeAddon.class); - private final PlatformImpl terraForgePlugin; - - public ForgeAddon(PlatformImpl terraForgePlugin) { - this.terraForgePlugin = terraForgePlugin; - } - - @Override - public void initialize() { - terraForgePlugin.getEventManager() - .getHandler(FunctionalEventHandler.class) - .register(this, ConfigPackPreLoadEvent.class) - .then(event -> event.getPack().getContext().put(event.loadTemplate(new PreLoadCompatibilityOptions()))) - .global(); - - terraForgePlugin.getEventManager() - .getHandler(FunctionalEventHandler.class) - .register(this, ConfigPackPostLoadEvent.class) - .then(event -> event.getPack().getContext().put(event.loadTemplate(new PostLoadCompatibilityOptions()))) - .priority(100) - .global(); - - terraForgePlugin.getEventManager() - .getHandler(FunctionalEventHandler.class) - .register(this, ConfigurationLoadEvent.class) - .then(event -> { - if(event.is(Biome.class)) { - event.getLoadedObject(Biome.class).getContext().put(event.load(new VanillaBiomeProperties())); - } - }) - .global(); - } - - @Override - public Version getVersion() { - return VERSION; - } - - @Override - public String getID() { - return "terra-forge"; - } -} diff --git a/platforms/forge/src/main/java/com/dfsek/terra/forge/ForgeEntryPoint.java b/platforms/forge/src/main/java/com/dfsek/terra/forge/ForgeEntryPoint.java index e8f701fd0..5208f01ec 100644 --- a/platforms/forge/src/main/java/com/dfsek/terra/forge/ForgeEntryPoint.java +++ b/platforms/forge/src/main/java/com/dfsek/terra/forge/ForgeEntryPoint.java @@ -17,9 +17,6 @@ package com.dfsek.terra.forge; -import com.dfsek.terra.forge.AwfulForgeHacks.RegistrySanityCheck; -import com.dfsek.terra.forge.AwfulForgeHacks.RegistryStep; - import net.minecraft.util.Identifier; import net.minecraft.util.registry.Registry; import net.minecraftforge.eventbus.api.EventPriority; @@ -34,8 +31,10 @@ import net.minecraftforge.registries.RegisterEvent; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.dfsek.terra.forge.data.Codecs; +import com.dfsek.terra.forge.AwfulForgeHacks.RegistrySanityCheck; +import com.dfsek.terra.forge.AwfulForgeHacks.RegistryStep; import com.dfsek.terra.forge.util.LifecycleUtil; +import com.dfsek.terra.mod.data.Codecs; @Mod("terra") @@ -70,7 +69,7 @@ public class ForgeEntryPoint { event.register(Registry.WORLD_PRESET_KEY, helper -> sanityCheck.progress(RegistryStep.WORLD_TYPE, () -> LifecycleUtil.registerWorldTypes(helper))); - event.register(Registry.CHUNK_GENERATOR_KEY, helper -> helper.register(new Identifier("terra:terra"), Codecs.FORGE_CHUNK_GENERATOR_WRAPPER)); + event.register(Registry.CHUNK_GENERATOR_KEY, helper -> helper.register(new Identifier("terra:terra"), Codecs.MINECRAFT_CHUNK_GENERATOR_WRAPPER)); event.register(Registry.BIOME_SOURCE_KEY, helper -> helper.register(new Identifier("terra:terra"), Codecs.TERRA_BIOME_SOURCE)); } } diff --git a/platforms/forge/src/main/java/com/dfsek/terra/forge/PlatformImpl.java b/platforms/forge/src/main/java/com/dfsek/terra/forge/PlatformImpl.java index 2b414715a..294fa01d9 100644 --- a/platforms/forge/src/main/java/com/dfsek/terra/forge/PlatformImpl.java +++ b/platforms/forge/src/main/java/com/dfsek/terra/forge/PlatformImpl.java @@ -20,15 +20,8 @@ package com.dfsek.terra.forge; import ca.solostudios.strata.Versions; import ca.solostudios.strata.parser.tokenizer.ParseException; import ca.solostudios.strata.version.Version; -import com.dfsek.tectonic.api.TypeRegistry; -import com.dfsek.tectonic.api.depth.DepthTracker; -import com.dfsek.tectonic.api.exception.LoadException; import net.minecraft.MinecraftVersion; import net.minecraft.server.MinecraftServer; -import net.minecraft.util.Identifier; -import net.minecraft.util.registry.BuiltinRegistries; -import net.minecraft.world.biome.Biome.Precipitation; -import net.minecraft.world.biome.BiomeEffects.GrassColorModifier; import net.minecraftforge.fml.loading.FMLLoader; import net.minecraftforge.server.ServerLifecycleHooks; import org.jetbrains.annotations.NotNull; @@ -38,31 +31,31 @@ import org.slf4j.LoggerFactory; import java.io.File; import java.util.ArrayList; import java.util.List; -import java.util.Locale; -import com.dfsek.terra.AbstractPlatform; import com.dfsek.terra.addon.EphemeralAddon; import com.dfsek.terra.api.addon.BaseAddon; import com.dfsek.terra.api.handle.ItemHandle; import com.dfsek.terra.api.handle.WorldHandle; import com.dfsek.terra.api.util.generic.Lazy; -import com.dfsek.terra.api.world.biome.PlatformBiome; -import com.dfsek.terra.forge.generation.ForgeChunkGeneratorWrapper; -import com.dfsek.terra.forge.handle.ForgeItemHandle; -import com.dfsek.terra.forge.util.ProtoPlatformBiome; +import com.dfsek.terra.mod.CommonPlatform; +import com.dfsek.terra.mod.ModPlatform; +import com.dfsek.terra.mod.generation.MinecraftChunkGeneratorWrapper; +import com.dfsek.terra.mod.handle.MinecraftItemHandle; import com.dfsek.terra.mod.handle.MinecraftWorldHandle; -public class PlatformImpl extends AbstractPlatform { +public class PlatformImpl extends ModPlatform { private static final Logger LOGGER = LoggerFactory.getLogger(PlatformImpl.class); - private final ItemHandle itemHandle = new ForgeItemHandle(); + private final ItemHandle itemHandle = new MinecraftItemHandle(); private final WorldHandle worldHandle = new MinecraftWorldHandle(); private final Lazy dataFolder = Lazy.lazy(() -> new File("./config/Terra")); public PlatformImpl() { + CommonPlatform.initialize(this); load(); } + @Override public MinecraftServer getServer() { return ServerLifecycleHooks.getCurrentServer(); } @@ -82,7 +75,7 @@ public class PlatformImpl extends AbstractPlatform { }).join(); //BiomeUtil.registerBiomes(); server.getWorlds().forEach(world -> { - if(world.getChunkManager().getChunkGenerator() instanceof ForgeChunkGeneratorWrapper chunkGeneratorWrapper) { + if(world.getChunkManager().getChunkGenerator() instanceof MinecraftChunkGeneratorWrapper chunkGeneratorWrapper) { getConfigRegistry().get(chunkGeneratorWrapper.getPack().getRegistryKey()).ifPresent(pack -> { chunkGeneratorWrapper.setPack(pack); LOGGER.info("Replaced pack in chunk generator for world {}", world); @@ -96,8 +89,8 @@ public class PlatformImpl extends AbstractPlatform { @Override protected Iterable platformAddon() { List addons = new ArrayList<>(); - - addons.add(new ForgeAddon(this)); + + super.platformAddon().forEach(addons::add); String mcVersion = MinecraftVersion.CURRENT.getReleaseTarget(); try { @@ -139,27 +132,4 @@ public class PlatformImpl extends AbstractPlatform { public @NotNull ItemHandle getItemHandle() { return itemHandle; } - - @Override - public void register(TypeRegistry registry) { - super.register(registry); - registry.registerLoader(PlatformBiome.class, (type, o, loader, depthTracker) -> parseBiome((String) o, depthTracker)) - .registerLoader(Identifier.class, (type, o, loader, depthTracker) -> { - Identifier identifier = Identifier.tryParse((String) o); - if(identifier == null) - throw new LoadException("Invalid identifier: " + o, depthTracker); - return identifier; - }) - .registerLoader(Precipitation.class, (type, o, loader, depthTracker) -> Precipitation.valueOf(((String) o).toUpperCase( - Locale.ROOT))) - .registerLoader(GrassColorModifier.class, (type, o, loader, depthTracker) -> GrassColorModifier.valueOf(((String) o).toUpperCase( - Locale.ROOT))); - } - - - private ProtoPlatformBiome parseBiome(String id, DepthTracker tracker) throws LoadException { - Identifier identifier = Identifier.tryParse(id); - if(BuiltinRegistries.BIOME.get(identifier) == null) throw new LoadException("Invalid Biome ID: " + identifier, tracker); // failure. - return new ProtoPlatformBiome(identifier); - } } diff --git a/platforms/forge/src/main/java/com/dfsek/terra/forge/config/PreLoadCompatibilityOptions.java b/platforms/forge/src/main/java/com/dfsek/terra/forge/config/PreLoadCompatibilityOptions.java deleted file mode 100644 index 1b8acf3ae..000000000 --- a/platforms/forge/src/main/java/com/dfsek/terra/forge/config/PreLoadCompatibilityOptions.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * This file is part of Terra. - * - * Terra is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Terra is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Terra. If not, see . - */ - -package com.dfsek.terra.forge.config; - -import com.dfsek.tectonic.api.config.template.ConfigTemplate; -import com.dfsek.tectonic.api.config.template.annotations.Default; -import com.dfsek.tectonic.api.config.template.annotations.Value; - -import com.dfsek.terra.api.properties.Properties; - - -@SuppressWarnings("FieldMayBeFinal") -public class PreLoadCompatibilityOptions implements ConfigTemplate, Properties { - @Value("forge.use-vanilla-biomes") - @Default - private boolean vanillaBiomes = false; - - @Value("forge.beard.enable") - @Default - private boolean beard = true; - - @Value("forge.beard.threshold") - @Default - private double beardThreshold = 0.5; - - @Value("forge.beard.air-threshold") - @Default - private double airThreshold = -0.5; - - public boolean useVanillaBiomes() { - return vanillaBiomes; - } - - public boolean isBeard() { - return beard; - } - - public double getBeardThreshold() { - return beardThreshold; - } - - public double getAirThreshold() { - return airThreshold; - } -} diff --git a/platforms/forge/src/main/java/com/dfsek/terra/forge/data/Codecs.java b/platforms/forge/src/main/java/com/dfsek/terra/forge/data/Codecs.java deleted file mode 100644 index f30006e12..000000000 --- a/platforms/forge/src/main/java/com/dfsek/terra/forge/data/Codecs.java +++ /dev/null @@ -1,65 +0,0 @@ -package com.dfsek.terra.forge.data; - -import com.dfsek.terra.api.config.ConfigPack; -import com.dfsek.terra.api.registry.key.RegistryKey; -import com.dfsek.terra.forge.ForgeEntryPoint; -import com.dfsek.terra.forge.generation.ForgeChunkGeneratorWrapper; -import com.dfsek.terra.forge.generation.TerraBiomeSource; - -import com.mojang.serialization.Codec; -import com.mojang.serialization.codecs.RecordCodecBuilder; -import net.minecraft.util.dynamic.RegistryOps; -import net.minecraft.util.registry.Registry; -import net.minecraft.world.gen.chunk.ChunkGeneratorSettings; - - -public final class Codecs { - public static final Codec TERRA_REGISTRY_KEY = RecordCodecBuilder - .create(registryKey -> registryKey.group(Codec.STRING.fieldOf("namespace") - .stable() - .forGetter(RegistryKey::getNamespace), - Codec.STRING.fieldOf("id") - .stable() - .forGetter(RegistryKey::getID)) - .apply(registryKey, registryKey.stable(RegistryKey::of))); - - public static final Codec CONFIG_PACK = RecordCodecBuilder - .create(config -> config.group(TERRA_REGISTRY_KEY.fieldOf("pack") - .stable() - .forGetter(ConfigPack::getRegistryKey)) - .apply(config, config.stable(id -> ForgeEntryPoint.getPlatform() - .getConfigRegistry() - .get(id) - .orElseThrow(() -> new IllegalArgumentException( - "No such config pack " + - id))))); - - public static final Codec TERRA_BIOME_SOURCE = RecordCodecBuilder - .create(instance -> instance.group(RegistryOps.createRegistryCodec(Registry.BIOME_KEY) - .fieldOf("biome_registry") - .stable() - .forGetter(TerraBiomeSource::getBiomeRegistry), - CONFIG_PACK.fieldOf("pack") - .stable() - .forGetter(TerraBiomeSource::getPack)) - .apply(instance, instance.stable(TerraBiomeSource::new))); - - public static final Codec FORGE_CHUNK_GENERATOR_WRAPPER = RecordCodecBuilder - .create( - instance -> instance.group( - RegistryOps.createRegistryCodec(Registry.STRUCTURE_SET_KEY) - .fieldOf("structure_registry") - .stable() - .forGetter(ForgeChunkGeneratorWrapper::getNoiseRegistry), - TERRA_BIOME_SOURCE.fieldOf("biome_source") - .stable() - .forGetter(ForgeChunkGeneratorWrapper::getBiomeSource), - CONFIG_PACK.fieldOf("pack") - .stable() - .forGetter(ForgeChunkGeneratorWrapper::getPack), - ChunkGeneratorSettings.REGISTRY_CODEC.fieldOf("settings") - .stable() - .forGetter(ForgeChunkGeneratorWrapper::getSettings) - ).apply(instance, instance.stable(ForgeChunkGeneratorWrapper::new)) - ); -} diff --git a/platforms/forge/src/main/java/com/dfsek/terra/forge/generation/ForgeChunkGeneratorWrapper.java b/platforms/forge/src/main/java/com/dfsek/terra/forge/generation/ForgeChunkGeneratorWrapper.java deleted file mode 100644 index ce649eba0..000000000 --- a/platforms/forge/src/main/java/com/dfsek/terra/forge/generation/ForgeChunkGeneratorWrapper.java +++ /dev/null @@ -1,246 +0,0 @@ -/* - * This file is part of Terra. - * - * Terra is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Terra is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Terra. If not, see . - */ - -package com.dfsek.terra.forge.generation; - -import com.mojang.serialization.Codec; -import net.minecraft.block.BlockState; -import net.minecraft.block.Blocks; -import net.minecraft.structure.StructureSet; -import net.minecraft.util.Util; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.ChunkPos; -import net.minecraft.util.math.random.CheckedRandom; -import net.minecraft.util.math.random.ChunkRandom; -import net.minecraft.util.math.random.RandomSeed; -import net.minecraft.util.registry.Registry; -import net.minecraft.util.registry.RegistryEntry; -import net.minecraft.world.ChunkRegion; -import net.minecraft.world.HeightLimitView; -import net.minecraft.world.Heightmap.Type; -import net.minecraft.world.SpawnHelper; -import net.minecraft.world.StructureWorldAccess; -import net.minecraft.world.biome.Biome; -import net.minecraft.world.biome.source.BiomeAccess; -import net.minecraft.world.chunk.Chunk; -import net.minecraft.world.gen.GenerationStep.Carver; -import net.minecraft.world.gen.StructureAccessor; -import net.minecraft.world.gen.StructureWeightSampler; -import net.minecraft.world.gen.chunk.Blender; -import net.minecraft.world.gen.chunk.ChunkGeneratorSettings; -import net.minecraft.world.gen.chunk.VerticalBlockSample; -import net.minecraft.world.gen.densityfunction.DensityFunction.UnblendedNoisePos; -import net.minecraft.world.gen.noise.NoiseConfig; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.util.List; -import java.util.Optional; -import java.util.concurrent.CompletableFuture; -import java.util.concurrent.Executor; - -import com.dfsek.terra.api.config.ConfigPack; -import com.dfsek.terra.api.world.biome.generation.BiomeProvider; -import com.dfsek.terra.api.world.chunk.generation.ChunkGenerator; -import com.dfsek.terra.api.world.chunk.generation.ProtoChunk; -import com.dfsek.terra.api.world.chunk.generation.ProtoWorld; -import com.dfsek.terra.api.world.chunk.generation.stage.Chunkified; -import com.dfsek.terra.api.world.chunk.generation.util.GeneratorWrapper; -import com.dfsek.terra.api.world.info.WorldProperties; -import com.dfsek.terra.forge.config.PreLoadCompatibilityOptions; -import com.dfsek.terra.forge.data.Codecs; -import com.dfsek.terra.forge.mixin.access.StructureAccessorAccessor; -import com.dfsek.terra.forge.util.ForgeAdapter; - - -public class ForgeChunkGeneratorWrapper extends net.minecraft.world.gen.chunk.ChunkGenerator implements GeneratorWrapper { - private static final Logger logger = LoggerFactory.getLogger(ForgeChunkGeneratorWrapper.class); - - private final TerraBiomeSource biomeSource; - private final Registry noiseRegistry; - private final RegistryEntry settings; - private ChunkGenerator delegate; - private ConfigPack pack; - - public ForgeChunkGeneratorWrapper(Registry noiseRegistry, TerraBiomeSource biomeSource, ConfigPack configPack, - RegistryEntry settingsSupplier) { - super(noiseRegistry, Optional.empty(), biomeSource); - this.noiseRegistry = noiseRegistry; - this.pack = configPack; - this.settings = settingsSupplier; - - this.delegate = pack.getGeneratorProvider().newInstance(pack); - logger.info("Loading world with config pack {}", pack.getID()); - this.biomeSource = biomeSource; - } - - public Registry getNoiseRegistry() { - return noiseRegistry; - } - - @Override - protected Codec getCodec() { - return Codecs.FORGE_CHUNK_GENERATOR_WRAPPER; - } - - @Override - public void buildSurface(ChunkRegion region, StructureAccessor structures, NoiseConfig noiseConfig, Chunk chunk) { - // no op - } - - @Override - public void populateEntities(ChunkRegion region) { - if(!this.settings.value().mobGenerationDisabled()) { - ChunkPos chunkPos = region.getCenterPos(); - RegistryEntry registryEntry = region.getBiome(chunkPos.getStartPos().withY(region.getTopY() - 1)); - ChunkRandom chunkRandom = new ChunkRandom(new CheckedRandom(RandomSeed.getSeed())); - chunkRandom.setPopulationSeed(region.getSeed(), chunkPos.getStartX(), chunkPos.getStartZ()); - SpawnHelper.populateEntities(region, registryEntry, chunkPos, chunkRandom); - } - } - - @Override - public int getWorldHeight() { - return settings.value().generationShapeConfig().height(); - } - - - @Override - public CompletableFuture populateNoise(Executor executor, Blender blender, NoiseConfig noiseConfig, - StructureAccessor structureAccessor, Chunk chunk) { - return CompletableFuture.supplyAsync(() -> { - ProtoWorld world = (ProtoWorld) ((StructureAccessorAccessor) structureAccessor).getWorld(); - BiomeProvider biomeProvider = pack.getBiomeProvider(); - delegate.generateChunkData((ProtoChunk) chunk, world, biomeProvider, chunk.getPos().x, chunk.getPos().z); - - PreLoadCompatibilityOptions compatibilityOptions = pack.getContext().get(PreLoadCompatibilityOptions.class); - if(compatibilityOptions.isBeard()) { - beard(structureAccessor, chunk, world, biomeProvider, compatibilityOptions); - } - return chunk; - }, Util.getMainWorkerExecutor()); - } - - private void beard(StructureAccessor structureAccessor, Chunk chunk, WorldProperties world, BiomeProvider biomeProvider, - PreLoadCompatibilityOptions compatibilityOptions) { - StructureWeightSampler structureWeightSampler = StructureWeightSampler.method_42695(structureAccessor, chunk.getPos()); - double threshold = compatibilityOptions.getBeardThreshold(); - double airThreshold = compatibilityOptions.getAirThreshold(); - int xi = chunk.getPos().x << 4; - int zi = chunk.getPos().z << 4; - for(int x = 0; x < 16; x++) { - for(int z = 0; z < 16; z++) { - int depth = 0; - for(int y = world.getMaxHeight(); y >= world.getMinHeight(); y--) { - double noise = structureWeightSampler.sample(new UnblendedNoisePos(x + xi, y, z + zi)); - if(noise > threshold) { - chunk.setBlockState(new BlockPos(x, y, z), (BlockState) delegate - .getPalette(x + xi, y, z + zi, world, biomeProvider) - .get(depth, x + xi, y, z + zi, world.getSeed()), false); - depth++; - } else if(noise < airThreshold) { - chunk.setBlockState(new BlockPos(x, y, z), Blocks.AIR.getDefaultState(), false); - } else { - depth = 0; - } - } - } - } - } - - @Override - public void generateFeatures(StructureWorldAccess world, Chunk chunk, StructureAccessor structureAccessor) { - super.generateFeatures(world, chunk, structureAccessor); - pack.getStages().forEach(populator -> { - if(!(populator instanceof Chunkified)) { - populator.populate((ProtoWorld) world); - } - }); - } - - @Override - public int getSeaLevel() { - return settings.value().seaLevel(); - } - - @Override - public int getMinimumY() { - return settings.value().generationShapeConfig().minimumY(); - } - - - @Override - public int getHeight(int x, int z, Type heightmap, HeightLimitView height, NoiseConfig noiseConfig) { - WorldProperties properties = ForgeAdapter.adapt(height, noiseConfig.getLegacyWorldSeed()); - BiomeProvider biomeProvider = pack.getBiomeProvider(); - int min = height.getBottomY(); - for(int y = height.getTopY() - 1; y >= min; y--) { - if(heightmap - .getBlockPredicate() - .test((BlockState) delegate.getBlock(properties, x, y, z, biomeProvider))) return y + 1; - } - return min; - } - - @Override - public VerticalBlockSample getColumnSample(int x, int z, HeightLimitView height, NoiseConfig noiseConfig) { - BlockState[] array = new BlockState[height.getHeight()]; - WorldProperties properties = ForgeAdapter.adapt(height, noiseConfig.getLegacyWorldSeed()); - BiomeProvider biomeProvider = pack.getBiomeProvider(); - for(int y = height.getTopY() - 1; y >= height.getBottomY(); y--) { - array[y - height.getBottomY()] = (BlockState) delegate.getBlock(properties, x, y, z, biomeProvider); - } - return new VerticalBlockSample(height.getBottomY(), array); - } - - @Override - public void getDebugHudText(List text, NoiseConfig noiseConfig, BlockPos pos) { - - } - - public ConfigPack getPack() { - return pack; - } - - public void setPack(ConfigPack pack) { - this.pack = pack; - this.delegate = pack.getGeneratorProvider().newInstance(pack); - biomeSource.setPack(pack); - - logger.debug("Loading world with config pack {}", pack.getID()); - } - - @Override - public void carve(ChunkRegion chunkRegion, long seed, NoiseConfig noiseConfig, BiomeAccess world, StructureAccessor structureAccessor, - Chunk chunk, Carver carverStep) { - // no op - } - - @Override - public ChunkGenerator getHandle() { - return delegate; - } - - public RegistryEntry getSettings() { - return settings; - } - - @Override - public TerraBiomeSource getBiomeSource() { - return biomeSource; - } -} diff --git a/platforms/forge/src/main/java/com/dfsek/terra/forge/generation/TerraBiomeSource.java b/platforms/forge/src/main/java/com/dfsek/terra/forge/generation/TerraBiomeSource.java deleted file mode 100644 index b43b38ce8..000000000 --- a/platforms/forge/src/main/java/com/dfsek/terra/forge/generation/TerraBiomeSource.java +++ /dev/null @@ -1,86 +0,0 @@ -/* - * This file is part of Terra. - * - * Terra is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Terra is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Terra. If not, see . - */ - -package com.dfsek.terra.forge.generation; - -import com.dfsek.terra.api.config.ConfigPack; -import com.dfsek.terra.api.world.biome.generation.BiomeProvider; -import com.dfsek.terra.forge.data.Codecs; -import com.dfsek.terra.forge.util.ProtoPlatformBiome; - -import com.dfsek.terra.forge.util.SeedHack; - -import com.mojang.serialization.Codec; -import net.minecraft.util.registry.Registry; -import net.minecraft.util.registry.RegistryEntry; -import net.minecraft.world.biome.source.BiomeSource; -import net.minecraft.world.biome.source.util.MultiNoiseUtil.MultiNoiseSampler; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.util.stream.StreamSupport; - - -public class TerraBiomeSource extends BiomeSource { - - private static final Logger LOGGER = LoggerFactory.getLogger(TerraBiomeSource.class); - private final Registry biomeRegistry; - private ConfigPack pack; - - public TerraBiomeSource(Registry biomes, ConfigPack pack) { - super(StreamSupport - .stream(pack.getBiomeProvider() - .getBiomes() - .spliterator(), false) - .map(b -> biomes.getOrCreateEntry(((ProtoPlatformBiome) b.getPlatformBiome()).getDelegate()))); - this.biomeRegistry = biomes; - this.pack = pack; - - LOGGER.debug("Biomes: " + getBiomes()); - } - - @Override - protected Codec getCodec() { - return Codecs.TERRA_BIOME_SOURCE; - } - - @Override - public RegistryEntry getBiome(int biomeX, int biomeY, int biomeZ, MultiNoiseSampler noiseSampler) { - return biomeRegistry - .entryOf(((ProtoPlatformBiome) pack - .getBiomeProvider() - .getBiome(biomeX << 2, biomeY << 2, biomeZ << 2, SeedHack.getSeed(noiseSampler)) - .getPlatformBiome()).getDelegate() - ); - } - - public BiomeProvider getProvider() { - return pack.getBiomeProvider(); - } - - public Registry getBiomeRegistry() { - return biomeRegistry; - } - - public ConfigPack getPack() { - return pack; - } - - public void setPack(ConfigPack pack) { - this.pack = pack; - } -} diff --git a/platforms/forge/src/main/java/com/dfsek/terra/forge/mixin/access/MobSpawnerLogicAccessor.java b/platforms/forge/src/main/java/com/dfsek/terra/forge/mixin/access/MobSpawnerLogicAccessor.java deleted file mode 100644 index 20a900005..000000000 --- a/platforms/forge/src/main/java/com/dfsek/terra/forge/mixin/access/MobSpawnerLogicAccessor.java +++ /dev/null @@ -1,30 +0,0 @@ -/* - * This file is part of Terra. - * - * Terra is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Terra is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Terra. If not, see . - */ - -package com.dfsek.terra.forge.mixin.access; - -import net.minecraft.world.MobSpawnerEntry; -import net.minecraft.world.MobSpawnerLogic; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.gen.Accessor; - - -@Mixin(MobSpawnerLogic.class) -public interface MobSpawnerLogicAccessor { - @Accessor("spawnEntry") - MobSpawnerEntry getSpawnEntry(); -} diff --git a/platforms/forge/src/main/java/com/dfsek/terra/forge/mixin/access/StateAccessor.java b/platforms/forge/src/main/java/com/dfsek/terra/forge/mixin/access/StateAccessor.java deleted file mode 100644 index 947118da9..000000000 --- a/platforms/forge/src/main/java/com/dfsek/terra/forge/mixin/access/StateAccessor.java +++ /dev/null @@ -1,35 +0,0 @@ -/* - * This file is part of Terra. - * - * Terra is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Terra is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Terra. If not, see . - */ - -package com.dfsek.terra.forge.mixin.access; - -import net.minecraft.state.State; -import net.minecraft.state.property.Property; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.gen.Accessor; - -import java.util.Map; -import java.util.function.Function; - - -@Mixin(State.class) -public interface StateAccessor { - @Accessor("PROPERTY_MAP_PRINTER") - static Function, Comparable>, String> getPropertyMapPrinter() { - throw new UnsupportedOperationException(); - } -} diff --git a/platforms/forge/src/main/java/com/dfsek/terra/forge/mixin/access/StructureAccessorAccessor.java b/platforms/forge/src/main/java/com/dfsek/terra/forge/mixin/access/StructureAccessorAccessor.java deleted file mode 100644 index 12ca75c9d..000000000 --- a/platforms/forge/src/main/java/com/dfsek/terra/forge/mixin/access/StructureAccessorAccessor.java +++ /dev/null @@ -1,30 +0,0 @@ -/* - * This file is part of Terra. - * - * Terra is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Terra is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Terra. If not, see . - */ - -package com.dfsek.terra.forge.mixin.access; - -import net.minecraft.world.WorldAccess; -import net.minecraft.world.gen.StructureAccessor; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.gen.Accessor; - - -@Mixin(StructureAccessor.class) -public interface StructureAccessorAccessor { - @Accessor - WorldAccess getWorld(); -} diff --git a/platforms/forge/src/main/java/com/dfsek/terra/forge/mixin/implementations/terra/block/entity/MobSpawnerBlockEntityMixin.java b/platforms/forge/src/main/java/com/dfsek/terra/forge/mixin/implementations/terra/block/entity/MobSpawnerBlockEntityMixin.java deleted file mode 100644 index 60bafaefb..000000000 --- a/platforms/forge/src/main/java/com/dfsek/terra/forge/mixin/implementations/terra/block/entity/MobSpawnerBlockEntityMixin.java +++ /dev/null @@ -1,131 +0,0 @@ -/* - * This file is part of Terra. - * - * Terra is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Terra is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Terra. If not, see . - */ - -package com.dfsek.terra.forge.mixin.implementations.terra.block.entity; - -import com.dfsek.terra.forge.ForgeEntryPoint; -import com.dfsek.terra.forge.mixin.access.MobSpawnerLogicAccessor; -import net.minecraft.block.BlockState; -import net.minecraft.block.entity.BlockEntity; -import net.minecraft.block.entity.BlockEntityType; -import net.minecraft.block.entity.MobSpawnerBlockEntity; -import net.minecraft.util.Identifier; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.registry.Registry; -import net.minecraft.world.MobSpawnerLogic; -import org.jetbrains.annotations.NotNull; -import org.spongepowered.asm.mixin.Implements; -import org.spongepowered.asm.mixin.Interface; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; - -import com.dfsek.terra.api.block.entity.MobSpawner; -import com.dfsek.terra.api.block.entity.SerialState; -import com.dfsek.terra.api.entity.EntityType; - - -@Mixin(MobSpawnerBlockEntity.class) -@Implements(@Interface(iface = MobSpawner.class, prefix = "terra$")) -public abstract class MobSpawnerBlockEntityMixin extends BlockEntity { - private MobSpawnerBlockEntityMixin(BlockEntityType type, BlockPos pos, BlockState state) { - super(type, pos, state); - } - - @Shadow - public abstract MobSpawnerLogic getLogic(); - - public EntityType terra$getSpawnedType() { - return (EntityType) Registry.ENTITY_TYPE.get( - Identifier.tryParse(((MobSpawnerLogicAccessor) getLogic()).getSpawnEntry().getNbt().getString("id"))); - } - - public void terra$setSpawnedType(@NotNull EntityType creatureType) { - getLogic().setEntityId((net.minecraft.entity.EntityType) creatureType); - } - - public int terra$getDelay() { - return 0; - } - - public void terra$setDelay(int delay) { - - } - - public int terra$getMinSpawnDelay() { - return 0; - } - - public void terra$setMinSpawnDelay(int delay) { - - } - - public int terra$getMaxSpawnDelay() { - return 0; - } - - public void terra$setMaxSpawnDelay(int delay) { - - } - - public int terra$getSpawnCount() { - return 0; - } - - public void terra$setSpawnCount(int spawnCount) { - - } - - public int terra$getMaxNearbyEntities() { - return 0; - } - - public void terra$setMaxNearbyEntities(int maxNearbyEntities) { - - } - - public int terra$getRequiredPlayerRange() { - return 0; - } - - public void terra$setRequiredPlayerRange(int requiredPlayerRange) { - - } - - public int terra$getSpawnRange() { - return 0; - } - - public void terra$setSpawnRange(int spawnRange) { - - } - - public void terra$applyState(String state) { - SerialState.parse(state).forEach((k, v) -> { - switch(k) { - case "type" -> terra$setSpawnedType(ForgeEntryPoint.getPlatform().getWorldHandle().getEntity(v)); - case "delay" -> terra$setDelay(Integer.parseInt(v)); - case "min_delay" -> terra$setMinSpawnDelay(Integer.parseInt(v)); - case "max_delay" -> terra$setMaxSpawnDelay(Integer.parseInt(v)); - case "spawn_count" -> terra$setSpawnCount(Integer.parseInt(v)); - case "spawn_range" -> terra$setSpawnRange(Integer.parseInt(v)); - case "max_nearby" -> terra$setMaxNearbyEntities(Integer.parseInt(v)); - case "required_player_range" -> terra$setRequiredPlayerRange(Integer.parseInt(v)); - default -> throw new IllegalArgumentException("Invalid property: " + k); - } - }); - } -} diff --git a/platforms/forge/src/main/java/com/dfsek/terra/forge/mixin/implementations/terra/block/state/BlockStateMixin.java b/platforms/forge/src/main/java/com/dfsek/terra/forge/mixin/implementations/terra/block/state/BlockStateMixin.java deleted file mode 100644 index c0076820c..000000000 --- a/platforms/forge/src/main/java/com/dfsek/terra/forge/mixin/implementations/terra/block/state/BlockStateMixin.java +++ /dev/null @@ -1,83 +0,0 @@ -package com.dfsek.terra.forge.mixin.implementations.terra.block.state; - - -import com.dfsek.terra.forge.mixin.access.StateAccessor; -import com.google.common.collect.ImmutableMap; -import com.mojang.serialization.MapCodec; -import net.minecraft.block.AbstractBlock.AbstractBlockState; -import net.minecraft.block.Block; -import net.minecraft.state.State; -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; - -import java.util.stream.Collectors; - -import com.dfsek.terra.api.block.BlockType; -import com.dfsek.terra.api.block.state.BlockState; -import com.dfsek.terra.api.block.state.properties.Property; - - -@Mixin(AbstractBlockState.class) -@Implements(@Interface(iface = BlockState.class, prefix = "terra$")) -public abstract class BlockStateMixin extends State { - private BlockStateMixin(Block owner, ImmutableMap, Comparable> entries, - MapCodec codec) { - super(owner, entries, codec); - } - - @Shadow - public abstract Block getBlock(); - - @Shadow - public abstract boolean isAir(); - - public boolean terra$matches(BlockState other) { - return getBlock() == ((net.minecraft.block.BlockState) other).getBlock(); - } - - @Intrinsic - public > boolean terra$has(Property property) { - if(property instanceof net.minecraft.state.property.Property minecraftProperty) { - return contains(minecraftProperty); - } - return false; - } - - @SuppressWarnings("unchecked") - @Intrinsic - public > T terra$get(Property property) { - return get((net.minecraft.state.property.Property) property); - } - - @SuppressWarnings("unchecked") - @Intrinsic - public > BlockState terra$set(Property property, T value) { - return (BlockState) with((net.minecraft.state.property.Property) property, value); - } - - @Intrinsic - public BlockType terra$getBlockType() { - return (BlockType) getBlock(); - } - - @Intrinsic - public String terra$getAsString(boolean properties) { - StringBuilder data = new StringBuilder(Registry.BLOCK.getId(getBlock()).toString()); - if(properties && !getEntries().isEmpty()) { - data.append('['); - data.append( - getEntries().entrySet().stream().map(StateAccessor.getPropertyMapPrinter()).collect(Collectors.joining(","))); - data.append(']'); - } - return data.toString(); - } - - @Intrinsic - public boolean terra$isAir() { - return isAir(); - } -} diff --git a/platforms/forge/src/main/java/com/dfsek/terra/forge/mixin/implementations/terra/world/ChunkRegionMixin.java b/platforms/forge/src/main/java/com/dfsek/terra/forge/mixin/implementations/terra/world/ChunkRegionMixin.java deleted file mode 100644 index 22f3733a0..000000000 --- a/platforms/forge/src/main/java/com/dfsek/terra/forge/mixin/implementations/terra/world/ChunkRegionMixin.java +++ /dev/null @@ -1,149 +0,0 @@ -/* - * This file is part of Terra. - * - * Terra is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Terra is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Terra. If not, see . - */ - -package com.dfsek.terra.forge.mixin.implementations.terra.world; - -import com.dfsek.terra.forge.generation.ForgeChunkGeneratorWrapper; -import net.minecraft.block.FluidBlock; -import net.minecraft.fluid.Fluid; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.ChunkRegion; -import net.minecraft.world.WorldAccess; -import net.minecraft.world.chunk.Chunk; -import net.minecraft.world.chunk.ChunkStatus; -import net.minecraft.world.tick.MultiTickScheduler; -import net.minecraft.world.tick.OrderedTick; -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; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -import java.util.List; - -import com.dfsek.terra.api.block.entity.BlockEntity; -import com.dfsek.terra.api.block.state.BlockState; -import com.dfsek.terra.api.config.ConfigPack; -import com.dfsek.terra.api.entity.Entity; -import com.dfsek.terra.api.entity.EntityType; -import com.dfsek.terra.api.world.ServerWorld; -import com.dfsek.terra.api.world.biome.generation.BiomeProvider; -import com.dfsek.terra.api.world.chunk.generation.ChunkGenerator; -import com.dfsek.terra.api.world.chunk.generation.ProtoWorld; -import com.dfsek.terra.forge.util.ForgeUtil; - - -@Mixin(ChunkRegion.class) -@Implements(@Interface(iface = ProtoWorld.class, prefix = "terraWorld$")) -public abstract class ChunkRegionMixin { - private ConfigPack terra$config; - - - @Shadow - @Final - private net.minecraft.server.world.ServerWorld world; - - @Shadow - @Final - private long seed; - @Shadow - @Final - private Chunk centerPos; - - @Shadow - @Final - private MultiTickScheduler fluidTickScheduler; - - - @Inject(at = @At("RETURN"), - method = "(Lnet/minecraft/server/world/ServerWorld;Ljava/util/List;Lnet/minecraft/world/chunk/ChunkStatus;I)V") - public void injectConstructor(net.minecraft.server.world.ServerWorld world, List list, - ChunkStatus chunkStatus, int i, - CallbackInfo ci) { - this.terra$config = ((ServerWorld) world).getPack(); - } - - - @Intrinsic(displace = true) - public void terraWorld$setBlockState(int x, int y, int z, BlockState data, boolean physics) { - BlockPos pos = new BlockPos(x, y, z); - ((ChunkRegion) (Object) this).setBlockState(pos, (net.minecraft.block.BlockState) data, physics ? 3 : 1042); - if(physics && ((net.minecraft.block.BlockState) data).getBlock() instanceof FluidBlock) { - fluidTickScheduler.scheduleTick( - OrderedTick.create(((FluidBlock) ((net.minecraft.block.BlockState) data).getBlock()).getFluidState( - (net.minecraft.block.BlockState) data).getFluid(), pos)); - } - } - - @Intrinsic - public long terraWorld$getSeed() { - return seed; - } - - public int terraWorld$getMaxHeight() { - return world.getTopY(); - } - - @Intrinsic(displace = true) - public BlockState terraWorld$getBlockState(int x, int y, int z) { - BlockPos pos = new BlockPos(x, y, z); - return (BlockState) ((ChunkRegion) (Object) this).getBlockState(pos); - } - - public BlockEntity terraWorld$getBlockEntity(int x, int y, int z) { - return ForgeUtil.createState((WorldAccess) this, new BlockPos(x, y, z)); - } - - public int terraWorld$getMinHeight() { - return world.getBottomY(); - } - - public ChunkGenerator terraWorld$getGenerator() { - return ((ForgeChunkGeneratorWrapper) world.getChunkManager().getChunkGenerator()).getHandle(); - } - - public BiomeProvider terraWorld$getBiomeProvider() { - return terra$config.getBiomeProvider(); - } - - public Entity terraWorld$spawnEntity(double x, double y, double z, EntityType entityType) { - net.minecraft.entity.Entity entity = ((net.minecraft.entity.EntityType) entityType).create(world); - entity.setPos(x, y, z); - ((ChunkRegion) (Object) this).spawnEntity(entity); - return (Entity) entity; - } - - public int terraWorld$centerChunkX() { - return centerPos.getPos().x; - } - - public int terraWorld$centerChunkZ() { - return centerPos.getPos().z; - } - - public ServerWorld terraWorld$getWorld() { - return (ServerWorld) world; - } - - public ConfigPack terraWorld$getPack() { - return terra$config; - } -} diff --git a/platforms/forge/src/main/java/com/dfsek/terra/forge/mixin/implementations/terra/world/ServerWorldMixin.java b/platforms/forge/src/main/java/com/dfsek/terra/forge/mixin/implementations/terra/world/ServerWorldMixin.java deleted file mode 100644 index 698d49bfe..000000000 --- a/platforms/forge/src/main/java/com/dfsek/terra/forge/mixin/implementations/terra/world/ServerWorldMixin.java +++ /dev/null @@ -1,102 +0,0 @@ -/* - * This file is part of Terra. - * - * Terra is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Terra is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Terra. If not, see . - */ - -package com.dfsek.terra.forge.mixin.implementations.terra.world; - -import com.dfsek.terra.forge.generation.ForgeChunkGeneratorWrapper; -import com.dfsek.terra.forge.generation.TerraBiomeSource; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.WorldAccess; -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 com.dfsek.terra.api.block.entity.BlockEntity; -import com.dfsek.terra.api.block.state.BlockState; -import com.dfsek.terra.api.config.ConfigPack; -import com.dfsek.terra.api.entity.Entity; -import com.dfsek.terra.api.entity.EntityType; -import com.dfsek.terra.api.world.ServerWorld; -import com.dfsek.terra.api.world.biome.generation.BiomeProvider; -import com.dfsek.terra.api.world.chunk.Chunk; -import com.dfsek.terra.api.world.chunk.generation.ChunkGenerator; -import com.dfsek.terra.forge.util.ForgeUtil; - - -@Mixin(net.minecraft.server.world.ServerWorld.class) -@Implements(@Interface(iface = ServerWorld.class, prefix = "terra$")) -public abstract class ServerWorldMixin { - public Entity terra$spawnEntity(double x, double y, double z, EntityType entityType) { - net.minecraft.entity.Entity entity = ((net.minecraft.entity.EntityType) entityType).create(null); - entity.setPos(x, y, z); - ((net.minecraft.server.world.ServerWorld) (Object) this).spawnEntity(entity); - return (Entity) entity; - } - - public void terra$setBlockState(int x, int y, int z, BlockState data, boolean physics) { - BlockPos pos = new BlockPos(x, y, z); - ((net.minecraft.server.world.ServerWorld) (Object) this).setBlockState(pos, (net.minecraft.block.BlockState) data, - physics ? 3 : 1042); - } - - @Intrinsic - public long terra$getSeed() { - return ((net.minecraft.server.world.ServerWorld) (Object) this).getSeed(); - } - - public int terra$getMaxHeight() { - return (((net.minecraft.server.world.ServerWorld) (Object) this).getBottomY()) + - ((net.minecraft.server.world.ServerWorld) (Object) this).getHeight(); - } - - public Chunk terra$getChunkAt(int x, int z) { - return (Chunk) ((net.minecraft.server.world.ServerWorld) (Object) this).getChunk(x, z); - } - - public BlockState terra$getBlockState(int x, int y, int z) { - return (BlockState) ((net.minecraft.server.world.ServerWorld) (Object) this).getBlockState(new BlockPos(x, y, z)); - } - - public BlockEntity terra$getBlockEntity(int x, int y, int z) { - return ForgeUtil.createState((WorldAccess) this, new BlockPos(x, y, z)); - } - - public int terra$getMinHeight() { - return ((net.minecraft.server.world.ServerWorld) (Object) this).getBottomY(); - } - - public ChunkGenerator terra$getGenerator() { - return ((ForgeChunkGeneratorWrapper) ((net.minecraft.server.world.ServerWorld) (Object) this).getChunkManager() - .getChunkGenerator()).getHandle(); - } - - public BiomeProvider terra$getBiomeProvider() { - return ((TerraBiomeSource) ((net.minecraft.server.world.ServerWorld) (Object) this).getChunkManager() - .getChunkGenerator() - .getBiomeSource()).getProvider(); - } - - public ConfigPack terra$getPack() { - net.minecraft.world.gen.chunk.ChunkGenerator generator = - (((net.minecraft.server.world.ServerWorld) (Object) this).getChunkManager()).getChunkGenerator(); - if(generator instanceof ForgeChunkGeneratorWrapper forgeChunkGeneratorWrapper) { - return forgeChunkGeneratorWrapper.getPack(); - } - return null; - } -} diff --git a/platforms/forge/src/main/java/com/dfsek/terra/forge/util/BiomeUtil.java b/platforms/forge/src/main/java/com/dfsek/terra/forge/util/BiomeUtil.java index 5612372b4..c42db1143 100644 --- a/platforms/forge/src/main/java/com/dfsek/terra/forge/util/BiomeUtil.java +++ b/platforms/forge/src/main/java/com/dfsek/terra/forge/util/BiomeUtil.java @@ -1,12 +1,6 @@ package com.dfsek.terra.forge.util; -import com.dfsek.terra.api.config.ConfigPack; -import com.dfsek.terra.api.world.biome.Biome; -import com.dfsek.terra.forge.ForgeEntryPoint; -import com.dfsek.terra.forge.config.PreLoadCompatibilityOptions; -import com.dfsek.terra.forge.config.VanillaBiomeProperties; - -import com.dfsek.terra.forge.mixin_ifaces.FloraFeatureHolder; +import com.dfsek.terra.mod.config.ProtoPlatformBiome; import net.minecraft.util.Identifier; import net.minecraft.util.registry.BuiltinRegistries; @@ -21,7 +15,19 @@ import net.minecraftforge.registries.RegisterEvent.RegisterHelper; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.util.*; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.Objects; + +import com.dfsek.terra.api.config.ConfigPack; +import com.dfsek.terra.api.world.biome.Biome; +import com.dfsek.terra.forge.ForgeEntryPoint; +import com.dfsek.terra.mod.config.PreLoadCompatibilityOptions; +import com.dfsek.terra.mod.config.VanillaBiomeProperties; +import com.dfsek.terra.mod.mixin_ifaces.FloraFeatureHolder; public final class BiomeUtil { @@ -57,7 +63,7 @@ public final class BiomeUtil { */ private static void registerBiome(Biome biome, ConfigPack pack, com.dfsek.terra.api.registry.key.RegistryKey id, RegisterHelper helper) { - RegistryKey vanilla = ((ProtoPlatformBiome) biome.getPlatformBiome()).get(ForgeRegistries.BIOMES); + RegistryKey vanilla = ((ProtoPlatformBiome) biome.getPlatformBiome()).get(BuiltinRegistries.BIOME); if(pack.getContext().get(PreLoadCompatibilityOptions.class).useVanillaBiomes()) { diff --git a/platforms/forge/src/main/java/com/dfsek/terra/forge/util/LifecycleUtil.java b/platforms/forge/src/main/java/com/dfsek/terra/forge/util/LifecycleUtil.java index ac0efc605..abaabaa0e 100644 --- a/platforms/forge/src/main/java/com/dfsek/terra/forge/util/LifecycleUtil.java +++ b/platforms/forge/src/main/java/com/dfsek/terra/forge/util/LifecycleUtil.java @@ -1,10 +1,5 @@ package com.dfsek.terra.forge.util; -import com.dfsek.terra.api.event.events.platform.PlatformInitializationEvent; -import com.dfsek.terra.forge.ForgeEntryPoint; -import com.dfsek.terra.forge.generation.ForgeChunkGeneratorWrapper; -import com.dfsek.terra.forge.generation.TerraBiomeSource; - import net.minecraft.structure.StructureSet; import net.minecraft.util.Identifier; import net.minecraft.util.math.noise.DoublePerlinNoiseSampler.NoiseParameters; @@ -30,6 +25,11 @@ import java.util.List; import java.util.Locale; import java.util.Map; +import com.dfsek.terra.api.event.events.platform.PlatformInitializationEvent; +import com.dfsek.terra.forge.ForgeEntryPoint; +import com.dfsek.terra.mod.generation.MinecraftChunkGeneratorWrapper; +import com.dfsek.terra.mod.generation.TerraBiomeSource; + public class LifecycleUtil { private static final Logger LOGGER = LoggerFactory.getLogger(LifecycleUtil.class); @@ -80,7 +80,7 @@ public class LifecycleUtil { PRESETS.add(generatorID); TerraBiomeSource biomeSource = new TerraBiomeSource(biomeRegistry, pack); - ChunkGenerator generator = new ForgeChunkGeneratorWrapper(structureSetRegistry, biomeSource, pack, overworld); + ChunkGenerator generator = new MinecraftChunkGeneratorWrapper(structureSetRegistry, biomeSource, pack, overworld); DimensionOptions dimensionOptions = new DimensionOptions(overworldDimensionType, generator); WorldPreset preset = new WorldPreset( diff --git a/platforms/forge/src/main/java/com/dfsek/terra/forge/util/ProtoPlatformBiome.java b/platforms/forge/src/main/java/com/dfsek/terra/forge/util/ProtoPlatformBiome.java deleted file mode 100644 index e06ebf0f8..000000000 --- a/platforms/forge/src/main/java/com/dfsek/terra/forge/util/ProtoPlatformBiome.java +++ /dev/null @@ -1,61 +0,0 @@ -/* - * This file is part of Terra. - * - * Terra is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Terra is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Terra. If not, see . - */ - -package com.dfsek.terra.forge.util; - -import net.minecraft.util.Identifier; -import net.minecraft.util.registry.Registry; -import net.minecraft.util.registry.RegistryKey; -import net.minecraft.world.biome.Biome; - -import java.util.Objects; - -import com.dfsek.terra.api.world.biome.PlatformBiome; - -import net.minecraftforge.registries.IForgeRegistry; - - -public class ProtoPlatformBiome implements PlatformBiome { - private final Identifier identifier; - - private RegistryKey delegate; - - public ProtoPlatformBiome(Identifier identifier) { - this.identifier = identifier; - } - - public RegistryKey get(Registry registry) { - return ForgeUtil.getEntry(registry, identifier).orElseThrow().getKey().orElseThrow(); - } - - public RegistryKey get(IForgeRegistry registry) { - return registry.getHolder(identifier).orElseThrow().getKey().orElseThrow(); - } - - @Override - public Object getHandle() { - return identifier; - } - - public RegistryKey getDelegate() { - return delegate; - } - - public void setDelegate(RegistryKey delegate) { - this.delegate = Objects.requireNonNull(delegate); - } -} diff --git a/platforms/forge/src/main/java/com/dfsek/terra/forge/util/TagUtil.java b/platforms/forge/src/main/java/com/dfsek/terra/forge/util/TagUtil.java index 4486aad0b..42f001e8e 100644 --- a/platforms/forge/src/main/java/com/dfsek/terra/forge/util/TagUtil.java +++ b/platforms/forge/src/main/java/com/dfsek/terra/forge/util/TagUtil.java @@ -1,5 +1,7 @@ package com.dfsek.terra.forge.util; +import com.dfsek.terra.mod.util.MinecraftUtil; + import com.google.common.collect.ImmutableMap; import net.minecraft.tag.TagKey; import net.minecraft.tag.WorldPresetTags; @@ -38,7 +40,7 @@ public final class TagUtil { LifecycleUtil .getPresets() - .forEach(id -> ForgeUtil + .forEach(id -> MinecraftUtil .getEntry(registry, id) .ifPresentOrElse( preset -> collect @@ -57,11 +59,11 @@ public final class TagUtil { BiomeUtil .getTerraBiomeMap() .forEach((vb, terraBiomes) -> - ForgeUtil + MinecraftUtil .getEntry(registry, vb) .ifPresentOrElse( vanilla -> terraBiomes - .forEach(tb -> ForgeUtil + .forEach(tb -> MinecraftUtil .getEntry(registry, tb) .ifPresentOrElse( terra -> { diff --git a/platforms/forge/src/main/resources/terra.forge.mixins.json b/platforms/forge/src/main/resources/terra.forge.mixins.json index 33af22478..a1316f288 100644 --- a/platforms/forge/src/main/resources/terra.forge.mixins.json +++ b/platforms/forge/src/main/resources/terra.forge.mixins.json @@ -4,36 +4,6 @@ "package": "com.dfsek.terra.forge.mixin", "compatibilityLevel": "JAVA_17", "mixins": [ - "access.MobSpawnerLogicAccessor", - "access.StateAccessor", - "access.StructureAccessorAccessor", - "fix.BeeMoveGoalsUnsynchronizedRandomAccessFix", - "fix.NetherFossilOptimization", - "implementations.compat.GenerationSettingsFloraFeaturesMixin", - "implementations.terra.BiomeMixin", - "implementations.terra.HandleImplementationMixin", - "implementations.terra.block.BlockMixin", - "implementations.terra.block.entity.BlockEntityMixin", - "implementations.terra.block.entity.LootableContainerBlockEntityMixin", - "implementations.terra.block.entity.MobSpawnerBlockEntityMixin", - "implementations.terra.block.entity.SignBlockEntityMixin", - "implementations.terra.block.state.BlockStateMixin", - "implementations.terra.block.state.PropertyMixin", - "implementations.terra.chunk.ChunkRegionMixin", - "implementations.terra.chunk.WorldChunkMixin", - "implementations.terra.chunk.data.ProtoChunkMixin", - "implementations.terra.entity.EntityMixin", - "implementations.terra.entity.EntityTypeMixin", - "implementations.terra.entity.PlayerEntityMixin", - "implementations.terra.entity.ServerCommandSourceMixin", - "implementations.terra.inventory.LockableContainerBlockEntityMixin", - "implementations.terra.inventory.item.ItemMixin", - "implementations.terra.inventory.item.ItemStackMixin", - "implementations.terra.inventory.meta.EnchantmentMixin", - "implementations.terra.inventory.meta.ItemStackDamageableMixin", - "implementations.terra.inventory.meta.ItemStackMetaMixin", - "implementations.terra.world.ChunkRegionMixin", - "implementations.terra.world.ServerWorldMixin", "lifecycle.DataPackContentsMixin", "lifecycle.NoiseConfigMixin" ], diff --git a/platforms/mod-common/src/main/java/com/dfsek/terra/mod/CommonPlatform.java b/platforms/mod-common/src/main/java/com/dfsek/terra/mod/CommonPlatform.java new file mode 100644 index 000000000..97534c8b1 --- /dev/null +++ b/platforms/mod-common/src/main/java/com/dfsek/terra/mod/CommonPlatform.java @@ -0,0 +1,24 @@ +package com.dfsek.terra.mod; + +import java.util.concurrent.atomic.AtomicReference; + + +public final class CommonPlatform { + private static final AtomicReference platform = new AtomicReference<>(); + + public static ModPlatform get() { + ModPlatform modPlatform = platform.get(); + + if(modPlatform == null) { + throw new IllegalStateException("Platform is not yet initialised!"); + } + + return modPlatform; + } + + public static void initialize(ModPlatform modPlatform) { + if(!platform.compareAndSet(null, modPlatform)) { + throw new IllegalStateException("Platform has already been initialized to " + platform.get()); + } + } +} diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/FabricAddon.java b/platforms/mod-common/src/main/java/com/dfsek/terra/mod/MinecraftAddon.java similarity index 55% rename from platforms/fabric/src/main/java/com/dfsek/terra/fabric/FabricAddon.java rename to platforms/mod-common/src/main/java/com/dfsek/terra/mod/MinecraftAddon.java index 347244a54..76b13b137 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/FabricAddon.java +++ b/platforms/mod-common/src/main/java/com/dfsek/terra/mod/MinecraftAddon.java @@ -15,7 +15,7 @@ * along with Terra. If not, see . */ -package com.dfsek.terra.fabric; +package com.dfsek.terra.mod; import ca.solostudios.strata.Versions; import ca.solostudios.strata.version.Version; @@ -28,44 +28,44 @@ import com.dfsek.terra.api.event.events.config.pack.ConfigPackPostLoadEvent; import com.dfsek.terra.api.event.events.config.pack.ConfigPackPreLoadEvent; import com.dfsek.terra.api.event.functional.FunctionalEventHandler; import com.dfsek.terra.api.world.biome.Biome; -import com.dfsek.terra.fabric.config.PostLoadCompatibilityOptions; -import com.dfsek.terra.fabric.config.PreLoadCompatibilityOptions; -import com.dfsek.terra.fabric.config.VanillaBiomeProperties; +import com.dfsek.terra.mod.config.PostLoadCompatibilityOptions; +import com.dfsek.terra.mod.config.PreLoadCompatibilityOptions; +import com.dfsek.terra.mod.config.VanillaBiomeProperties; -public final class FabricAddon implements BaseAddon { +public final class MinecraftAddon implements BaseAddon { private static final Version VERSION = Versions.getVersion(1, 0, 0); - private static final Logger logger = LoggerFactory.getLogger(FabricAddon.class); - private final PlatformImpl terraFabricPlugin; + private static final Logger logger = LoggerFactory.getLogger(MinecraftAddon.class); + private final ModPlatform modPlatform; - public FabricAddon(PlatformImpl terraFabricPlugin) { - this.terraFabricPlugin = terraFabricPlugin; + public MinecraftAddon(ModPlatform modPlatform) { + this.modPlatform = modPlatform; } @Override public void initialize() { - terraFabricPlugin.getEventManager() - .getHandler(FunctionalEventHandler.class) - .register(this, ConfigPackPreLoadEvent.class) - .then(event -> event.getPack().getContext().put(event.loadTemplate(new PreLoadCompatibilityOptions()))) - .global(); + modPlatform.getEventManager() + .getHandler(FunctionalEventHandler.class) + .register(this, ConfigPackPreLoadEvent.class) + .then(event -> event.getPack().getContext().put(event.loadTemplate(new PreLoadCompatibilityOptions()))) + .global(); - terraFabricPlugin.getEventManager() - .getHandler(FunctionalEventHandler.class) - .register(this, ConfigPackPostLoadEvent.class) - .then(event -> event.getPack().getContext().put(event.loadTemplate(new PostLoadCompatibilityOptions()))) - .priority(100) - .global(); + modPlatform.getEventManager() + .getHandler(FunctionalEventHandler.class) + .register(this, ConfigPackPostLoadEvent.class) + .then(event -> event.getPack().getContext().put(event.loadTemplate(new PostLoadCompatibilityOptions()))) + .priority(100) + .global(); - terraFabricPlugin.getEventManager() - .getHandler(FunctionalEventHandler.class) - .register(this, ConfigurationLoadEvent.class) - .then(event -> { + modPlatform.getEventManager() + .getHandler(FunctionalEventHandler.class) + .register(this, ConfigurationLoadEvent.class) + .then(event -> { if(event.is(Biome.class)) { event.getLoadedObject(Biome.class).getContext().put(event.load(new VanillaBiomeProperties())); } }) - .global(); + .global(); } @Override diff --git a/platforms/mod-common/src/main/java/com/dfsek/terra/mod/ModPlatform.java b/platforms/mod-common/src/main/java/com/dfsek/terra/mod/ModPlatform.java new file mode 100644 index 000000000..48fa219c2 --- /dev/null +++ b/platforms/mod-common/src/main/java/com/dfsek/terra/mod/ModPlatform.java @@ -0,0 +1,56 @@ +package com.dfsek.terra.mod; + +import com.dfsek.tectonic.api.TypeRegistry; + +import com.dfsek.tectonic.api.depth.DepthTracker; +import com.dfsek.tectonic.api.exception.LoadException; + +import com.dfsek.terra.AbstractPlatform; + +import com.dfsek.terra.api.addon.BaseAddon; +import com.dfsek.terra.api.world.biome.PlatformBiome; + +import com.dfsek.terra.mod.config.ProtoPlatformBiome; + +import net.minecraft.command.CommandSource; +import net.minecraft.server.MinecraftServer; +import net.minecraft.util.Identifier; +import net.minecraft.util.registry.BuiltinRegistries; +import net.minecraft.world.biome.Biome; +import net.minecraft.world.biome.Biome.Precipitation; +import net.minecraft.world.biome.BiomeEffects.GrassColorModifier; + +import java.util.List; +import java.util.Locale; + + +public abstract class ModPlatform extends AbstractPlatform { + public abstract MinecraftServer getServer(); + + @Override + public void register(TypeRegistry registry) { + super.register(registry); + registry.registerLoader(PlatformBiome.class, (type, o, loader, depthTracker) -> parseBiome((String) o, depthTracker)) + .registerLoader(Identifier.class, (type, o, loader, depthTracker) -> { + Identifier identifier = Identifier.tryParse((String) o); + if(identifier == null) + throw new LoadException("Invalid identifier: " + o, depthTracker); + return identifier; + }) + .registerLoader(Precipitation.class, (type, o, loader, depthTracker) -> Precipitation.valueOf(((String) o).toUpperCase( + Locale.ROOT))) + .registerLoader(GrassColorModifier.class, (type, o, loader, depthTracker) -> GrassColorModifier.valueOf(((String) o).toUpperCase( + Locale.ROOT))); + } + + private ProtoPlatformBiome parseBiome(String id, DepthTracker tracker) throws LoadException { + Identifier identifier = Identifier.tryParse(id); + if(BuiltinRegistries.BIOME.get(identifier) == null) throw new LoadException("Invalid Biome ID: " + identifier, tracker); // failure. + return new ProtoPlatformBiome(identifier); + } + + @Override + protected Iterable platformAddon() { + return List.of(new MinecraftAddon(this)); + } +} diff --git a/platforms/forge/src/main/java/com/dfsek/terra/forge/config/PostLoadCompatibilityOptions.java b/platforms/mod-common/src/main/java/com/dfsek/terra/mod/config/PostLoadCompatibilityOptions.java similarity index 95% rename from platforms/forge/src/main/java/com/dfsek/terra/forge/config/PostLoadCompatibilityOptions.java rename to platforms/mod-common/src/main/java/com/dfsek/terra/mod/config/PostLoadCompatibilityOptions.java index 1a8ad12ba..a8b457bf5 100644 --- a/platforms/forge/src/main/java/com/dfsek/terra/forge/config/PostLoadCompatibilityOptions.java +++ b/platforms/mod-common/src/main/java/com/dfsek/terra/mod/config/PostLoadCompatibilityOptions.java @@ -15,7 +15,7 @@ * along with Terra. If not, see . */ -package com.dfsek.terra.forge.config; +package com.dfsek.terra.mod.config; import com.dfsek.tectonic.api.config.template.ConfigTemplate; diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/config/PreLoadCompatibilityOptions.java b/platforms/mod-common/src/main/java/com/dfsek/terra/mod/config/PreLoadCompatibilityOptions.java similarity index 88% rename from platforms/fabric/src/main/java/com/dfsek/terra/fabric/config/PreLoadCompatibilityOptions.java rename to platforms/mod-common/src/main/java/com/dfsek/terra/mod/config/PreLoadCompatibilityOptions.java index 8533ef1a0..00825bc5f 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/config/PreLoadCompatibilityOptions.java +++ b/platforms/mod-common/src/main/java/com/dfsek/terra/mod/config/PreLoadCompatibilityOptions.java @@ -15,7 +15,7 @@ * along with Terra. If not, see . */ -package com.dfsek.terra.fabric.config; +package com.dfsek.terra.mod.config; import com.dfsek.tectonic.api.config.template.ConfigTemplate; import com.dfsek.tectonic.api.config.template.annotations.Default; @@ -26,19 +26,19 @@ import com.dfsek.terra.api.properties.Properties; @SuppressWarnings("FieldMayBeFinal") public class PreLoadCompatibilityOptions implements ConfigTemplate, Properties { - @Value("fabric.use-vanilla-biomes") + @Value("minecraft.use-vanilla-biomes") @Default private boolean vanillaBiomes = false; - @Value("fabric.beard.enable") + @Value("minecraft.beard.enable") @Default private boolean beard = true; - @Value("fabric.beard.threshold") + @Value("minecraft.beard.threshold") @Default private double beardThreshold = 0.5; - @Value("fabric.beard.air-threshold") + @Value("minecraft.beard.air-threshold") @Default private double airThreshold = -0.5; diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/util/ProtoPlatformBiome.java b/platforms/mod-common/src/main/java/com/dfsek/terra/mod/config/ProtoPlatformBiome.java similarity index 89% rename from platforms/fabric/src/main/java/com/dfsek/terra/fabric/util/ProtoPlatformBiome.java rename to platforms/mod-common/src/main/java/com/dfsek/terra/mod/config/ProtoPlatformBiome.java index b8262893a..78542fabe 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/util/ProtoPlatformBiome.java +++ b/platforms/mod-common/src/main/java/com/dfsek/terra/mod/config/ProtoPlatformBiome.java @@ -15,7 +15,9 @@ * along with Terra. If not, see . */ -package com.dfsek.terra.fabric.util; +package com.dfsek.terra.mod.config; + +import com.dfsek.terra.mod.util.MinecraftUtil; import net.minecraft.util.Identifier; import net.minecraft.util.registry.Registry; @@ -37,7 +39,7 @@ public class ProtoPlatformBiome implements PlatformBiome { } public RegistryKey get(Registry registry) { - return FabricUtil.getEntry(registry, identifier).orElseThrow().getKey().orElseThrow(); + return MinecraftUtil.getEntry(registry, identifier).orElseThrow().getKey().orElseThrow(); } @Override diff --git a/platforms/forge/src/main/java/com/dfsek/terra/forge/config/VanillaBiomeProperties.java b/platforms/mod-common/src/main/java/com/dfsek/terra/mod/config/VanillaBiomeProperties.java similarity index 97% rename from platforms/forge/src/main/java/com/dfsek/terra/forge/config/VanillaBiomeProperties.java rename to platforms/mod-common/src/main/java/com/dfsek/terra/mod/config/VanillaBiomeProperties.java index b4baa1882..b37266230 100644 --- a/platforms/forge/src/main/java/com/dfsek/terra/forge/config/VanillaBiomeProperties.java +++ b/platforms/mod-common/src/main/java/com/dfsek/terra/mod/config/VanillaBiomeProperties.java @@ -1,4 +1,4 @@ -package com.dfsek.terra.forge.config; +package com.dfsek.terra.mod.config; import com.dfsek.tectonic.api.config.template.ConfigTemplate; import com.dfsek.tectonic.api.config.template.annotations.Default; diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/data/Codecs.java b/platforms/mod-common/src/main/java/com/dfsek/terra/mod/data/Codecs.java similarity index 79% rename from platforms/fabric/src/main/java/com/dfsek/terra/fabric/data/Codecs.java rename to platforms/mod-common/src/main/java/com/dfsek/terra/mod/data/Codecs.java index a2d2222c7..643ced594 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/data/Codecs.java +++ b/platforms/mod-common/src/main/java/com/dfsek/terra/mod/data/Codecs.java @@ -1,10 +1,7 @@ -package com.dfsek.terra.fabric.data; +package com.dfsek.terra.mod.data; -import com.dfsek.terra.api.config.ConfigPack; -import com.dfsek.terra.api.registry.key.RegistryKey; -import com.dfsek.terra.fabric.FabricEntryPoint; -import com.dfsek.terra.fabric.generation.FabricChunkGeneratorWrapper; -import com.dfsek.terra.fabric.generation.TerraBiomeSource; +import com.dfsek.terra.mod.generation.MinecraftChunkGeneratorWrapper; +import com.dfsek.terra.mod.generation.TerraBiomeSource; import com.mojang.serialization.Codec; import com.mojang.serialization.codecs.RecordCodecBuilder; @@ -12,6 +9,10 @@ import net.minecraft.util.dynamic.RegistryOps; import net.minecraft.util.registry.Registry; import net.minecraft.world.gen.chunk.ChunkGeneratorSettings; +import com.dfsek.terra.api.config.ConfigPack; +import com.dfsek.terra.api.registry.key.RegistryKey; +import com.dfsek.terra.mod.CommonPlatform; + public final class Codecs { public static final Codec TERRA_REGISTRY_KEY = RecordCodecBuilder @@ -27,10 +28,10 @@ public final class Codecs { .create(config -> config.group(TERRA_REGISTRY_KEY.fieldOf("pack") .stable() .forGetter(ConfigPack::getRegistryKey)) - .apply(config, config.stable(id -> FabricEntryPoint.getPlatform() - .getConfigRegistry() - .get(id) - .orElseThrow(() -> new IllegalArgumentException( + .apply(config, config.stable(id -> CommonPlatform.get() + .getConfigRegistry() + .get(id) + .orElseThrow(() -> new IllegalArgumentException( "No such config pack " + id))))); @@ -44,22 +45,22 @@ public final class Codecs { .forGetter(TerraBiomeSource::getPack)) .apply(instance, instance.stable(TerraBiomeSource::new))); - public static final Codec FABRIC_CHUNK_GENERATOR_WRAPPER = RecordCodecBuilder + public static final Codec MINECRAFT_CHUNK_GENERATOR_WRAPPER = RecordCodecBuilder .create( instance -> instance.group( RegistryOps.createRegistryCodec(Registry.STRUCTURE_SET_KEY) .fieldOf("structure_registry") .stable() - .forGetter(FabricChunkGeneratorWrapper::getNoiseRegistry), + .forGetter(MinecraftChunkGeneratorWrapper::getNoiseRegistry), TERRA_BIOME_SOURCE.fieldOf("biome_source") .stable() - .forGetter(FabricChunkGeneratorWrapper::getBiomeSource), + .forGetter(MinecraftChunkGeneratorWrapper::getBiomeSource), CONFIG_PACK.fieldOf("pack") .stable() - .forGetter(FabricChunkGeneratorWrapper::getPack), + .forGetter(MinecraftChunkGeneratorWrapper::getPack), ChunkGeneratorSettings.REGISTRY_CODEC.fieldOf("settings") .stable() - .forGetter(FabricChunkGeneratorWrapper::getSettings) - ).apply(instance, instance.stable(FabricChunkGeneratorWrapper::new)) + .forGetter(MinecraftChunkGeneratorWrapper::getSettings) + ).apply(instance, instance.stable(MinecraftChunkGeneratorWrapper::new)) ); } diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/generation/FabricChunkGeneratorWrapper.java b/platforms/mod-common/src/main/java/com/dfsek/terra/mod/generation/MinecraftChunkGeneratorWrapper.java similarity index 91% rename from platforms/fabric/src/main/java/com/dfsek/terra/fabric/generation/FabricChunkGeneratorWrapper.java rename to platforms/mod-common/src/main/java/com/dfsek/terra/mod/generation/MinecraftChunkGeneratorWrapper.java index 8ae3c3afe..1b8af7852 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/generation/FabricChunkGeneratorWrapper.java +++ b/platforms/mod-common/src/main/java/com/dfsek/terra/mod/generation/MinecraftChunkGeneratorWrapper.java @@ -15,7 +15,7 @@ * along with Terra. If not, see . */ -package com.dfsek.terra.fabric.generation; +package com.dfsek.terra.mod.generation; import com.dfsek.terra.mod.mixin.access.StructureAccessorAccessor; @@ -63,13 +63,13 @@ import com.dfsek.terra.api.world.chunk.generation.ProtoWorld; import com.dfsek.terra.api.world.chunk.generation.stage.Chunkified; import com.dfsek.terra.api.world.chunk.generation.util.GeneratorWrapper; import com.dfsek.terra.api.world.info.WorldProperties; -import com.dfsek.terra.fabric.config.PreLoadCompatibilityOptions; -import com.dfsek.terra.fabric.data.Codecs; -import com.dfsek.terra.fabric.util.FabricAdapter; +import com.dfsek.terra.mod.config.PreLoadCompatibilityOptions; +import com.dfsek.terra.mod.data.Codecs; +import com.dfsek.terra.mod.util.MinecraftAdapter; -public class FabricChunkGeneratorWrapper extends net.minecraft.world.gen.chunk.ChunkGenerator implements GeneratorWrapper { - private static final Logger logger = LoggerFactory.getLogger(FabricChunkGeneratorWrapper.class); +public class MinecraftChunkGeneratorWrapper extends net.minecraft.world.gen.chunk.ChunkGenerator implements GeneratorWrapper { + private static final Logger logger = LoggerFactory.getLogger(MinecraftChunkGeneratorWrapper.class); private final TerraBiomeSource biomeSource; private final Registry noiseRegistry; @@ -77,8 +77,8 @@ public class FabricChunkGeneratorWrapper extends net.minecraft.world.gen.chunk.C private ChunkGenerator delegate; private ConfigPack pack; - public FabricChunkGeneratorWrapper(Registry noiseRegistry, TerraBiomeSource biomeSource, ConfigPack configPack, - RegistryEntry settingsSupplier) { + public MinecraftChunkGeneratorWrapper(Registry noiseRegistry, TerraBiomeSource biomeSource, ConfigPack configPack, + RegistryEntry settingsSupplier) { super(noiseRegistry, Optional.empty(), biomeSource); this.noiseRegistry = noiseRegistry; this.pack = configPack; @@ -95,7 +95,7 @@ public class FabricChunkGeneratorWrapper extends net.minecraft.world.gen.chunk.C @Override protected Codec getCodec() { - return Codecs.FABRIC_CHUNK_GENERATOR_WRAPPER; + return Codecs.MINECRAFT_CHUNK_GENERATOR_WRAPPER; } @Override @@ -186,7 +186,7 @@ public class FabricChunkGeneratorWrapper extends net.minecraft.world.gen.chunk.C @Override public int getHeight(int x, int z, Type heightmap, HeightLimitView height, NoiseConfig noiseConfig) { - WorldProperties properties = FabricAdapter.adapt(height, noiseConfig.getLegacyWorldSeed()); + WorldProperties properties = MinecraftAdapter.adapt(height, noiseConfig.getLegacyWorldSeed()); BiomeProvider biomeProvider = pack.getBiomeProvider(); int min = height.getBottomY(); for(int y = height.getTopY() - 1; y >= min; y--) { @@ -200,7 +200,7 @@ public class FabricChunkGeneratorWrapper extends net.minecraft.world.gen.chunk.C @Override public VerticalBlockSample getColumnSample(int x, int z, HeightLimitView height, NoiseConfig noiseConfig) { BlockState[] array = new BlockState[height.getHeight()]; - WorldProperties properties = FabricAdapter.adapt(height, noiseConfig.getLegacyWorldSeed()); + WorldProperties properties = MinecraftAdapter.adapt(height, noiseConfig.getLegacyWorldSeed()); BiomeProvider biomeProvider = pack.getBiomeProvider(); for(int y = height.getTopY() - 1; y >= height.getBottomY(); y--) { array[y - height.getBottomY()] = (BlockState) delegate.getBlock(properties, x, y, z, biomeProvider); diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/generation/TerraBiomeSource.java b/platforms/mod-common/src/main/java/com/dfsek/terra/mod/generation/TerraBiomeSource.java similarity index 95% rename from platforms/fabric/src/main/java/com/dfsek/terra/fabric/generation/TerraBiomeSource.java rename to platforms/mod-common/src/main/java/com/dfsek/terra/mod/generation/TerraBiomeSource.java index dec7784ff..7f1f1d6dd 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/generation/TerraBiomeSource.java +++ b/platforms/mod-common/src/main/java/com/dfsek/terra/mod/generation/TerraBiomeSource.java @@ -15,12 +15,12 @@ * along with Terra. If not, see . */ -package com.dfsek.terra.fabric.generation; +package com.dfsek.terra.mod.generation; import com.dfsek.terra.api.config.ConfigPack; import com.dfsek.terra.api.world.biome.generation.BiomeProvider; -import com.dfsek.terra.fabric.data.Codecs; -import com.dfsek.terra.fabric.util.ProtoPlatformBiome; +import com.dfsek.terra.mod.data.Codecs; +import com.dfsek.terra.mod.config.ProtoPlatformBiome; import com.dfsek.terra.mod.util.SeedHack; diff --git a/platforms/forge/src/main/java/com/dfsek/terra/forge/handle/ForgeItemHandle.java b/platforms/mod-common/src/main/java/com/dfsek/terra/mod/handle/MinecraftItemHandle.java similarity index 87% rename from platforms/forge/src/main/java/com/dfsek/terra/forge/handle/ForgeItemHandle.java rename to platforms/mod-common/src/main/java/com/dfsek/terra/mod/handle/MinecraftItemHandle.java index b68ad4478..5d26b6c43 100644 --- a/platforms/forge/src/main/java/com/dfsek/terra/forge/handle/ForgeItemHandle.java +++ b/platforms/mod-common/src/main/java/com/dfsek/terra/mod/handle/MinecraftItemHandle.java @@ -15,9 +15,7 @@ * along with Terra. If not, see . */ -package com.dfsek.terra.forge.handle; - -import com.dfsek.terra.forge.ForgeEntryPoint; +package com.dfsek.terra.mod.handle; import com.mojang.brigadier.StringReader; import com.mojang.brigadier.exceptions.CommandSyntaxException; @@ -32,15 +30,16 @@ import java.util.stream.Collectors; import com.dfsek.terra.api.handle.ItemHandle; import com.dfsek.terra.api.inventory.Item; import com.dfsek.terra.api.inventory.item.Enchantment; +import com.dfsek.terra.mod.CommonPlatform; -public class ForgeItemHandle implements ItemHandle { +public class MinecraftItemHandle implements ItemHandle { @Override public Item createItem(String data) { try { return (Item) new ItemStackArgumentType(new CommandRegistryAccess( - ForgeEntryPoint.getPlatform().getServer().getRegistryManager())).parse(new StringReader(data)).getItem(); + CommonPlatform.get().getServer().getRegistryManager())).parse(new StringReader(data)).getItem(); } catch(CommandSyntaxException e) { throw new IllegalArgumentException("Invalid item data \"" + data + "\"", e); } diff --git a/platforms/forge/src/main/java/com/dfsek/terra/forge/mixin/fix/BeeMoveGoalsUnsynchronizedRandomAccessFix.java b/platforms/mod-common/src/main/java/com/dfsek/terra/mod/mixin/fix/BeeMoveGoalsUnsynchronizedRandomAccessFix.java similarity index 79% rename from platforms/forge/src/main/java/com/dfsek/terra/forge/mixin/fix/BeeMoveGoalsUnsynchronizedRandomAccessFix.java rename to platforms/mod-common/src/main/java/com/dfsek/terra/mod/mixin/fix/BeeMoveGoalsUnsynchronizedRandomAccessFix.java index 53b2ac21d..ba73ff960 100644 --- a/platforms/forge/src/main/java/com/dfsek/terra/forge/mixin/fix/BeeMoveGoalsUnsynchronizedRandomAccessFix.java +++ b/platforms/mod-common/src/main/java/com/dfsek/terra/mod/mixin/fix/BeeMoveGoalsUnsynchronizedRandomAccessFix.java @@ -1,6 +1,4 @@ -package com.dfsek.terra.forge.mixin.fix; - -import com.dfsek.terra.forge.ForgeEntryPoint; +package com.dfsek.terra.mod.mixin.fix; import net.minecraft.entity.passive.BeeEntity.MoveToFlowerGoal; import net.minecraft.entity.passive.BeeEntity.MoveToHiveGoal; @@ -11,6 +9,8 @@ import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; +import com.dfsek.terra.mod.CommonPlatform; + /** * Bees spawning uses world.random without synchronization. This causes issues when spawning bees during world generation. @@ -22,6 +22,6 @@ import org.spongepowered.asm.mixin.injection.Redirect; public class BeeMoveGoalsUnsynchronizedRandomAccessFix { @Redirect(method = "", at = @At(value = "FIELD", target = "Lnet/minecraft/world/World;random:Lnet/minecraft/util/math/random/Random;")) public Random redirectRandomAccess(World instance) { - return new CheckedRandom(ForgeEntryPoint.getPlatform().getServer().getTicks()); // replace with new random seeded by tick time. + return new CheckedRandom(CommonPlatform.get().getServer().getTicks()); // replace with new random seeded by tick time. } } diff --git a/platforms/forge/src/main/java/com/dfsek/terra/forge/mixin/fix/NetherFossilOptimization.java b/platforms/mod-common/src/main/java/com/dfsek/terra/mod/mixin/fix/NetherFossilOptimization.java similarity index 73% rename from platforms/forge/src/main/java/com/dfsek/terra/forge/mixin/fix/NetherFossilOptimization.java rename to platforms/mod-common/src/main/java/com/dfsek/terra/mod/mixin/fix/NetherFossilOptimization.java index d72e59761..f0eb245b8 100644 --- a/platforms/forge/src/main/java/com/dfsek/terra/forge/mixin/fix/NetherFossilOptimization.java +++ b/platforms/mod-common/src/main/java/com/dfsek/terra/mod/mixin/fix/NetherFossilOptimization.java @@ -1,6 +1,6 @@ -package com.dfsek.terra.forge.mixin.fix; +package com.dfsek.terra.mod.mixin.fix; -import com.dfsek.terra.forge.generation.ForgeChunkGeneratorWrapper; +import com.dfsek.terra.mod.generation.MinecraftChunkGeneratorWrapper; import net.minecraft.world.gen.structure.NetherFossilStructure; import net.minecraft.world.gen.structure.Structure.Context; @@ -16,13 +16,13 @@ import java.util.Optional; /** * Disable fossil generation in Terra worlds, as they are very expensive due to consistently triggering cache misses. * - * Currently, on Forge, Terra cannot be specified as a Nether generator. TODO: logic to turn fossils back on if chunk generator is in nether. + * Currently, on Fabric, Terra cannot be specified as a Nether generator. TODO: logic to turn fossils back on if chunk generator is in nether. */ @Mixin(NetherFossilStructure.class) public class NetherFossilOptimization { @Inject(method = "getStructurePosition", at = @At("HEAD"), cancellable = true) public void injectFossilPositions(Context context, CallbackInfoReturnable> cir) { - if(context.chunkGenerator() instanceof ForgeChunkGeneratorWrapper) { + if(context.chunkGenerator() instanceof MinecraftChunkGeneratorWrapper) { cir.setReturnValue(Optional.empty()); } } diff --git a/platforms/forge/src/main/java/com/dfsek/terra/forge/mixin/implementations/compat/GenerationSettingsFloraFeaturesMixin.java b/platforms/mod-common/src/main/java/com/dfsek/terra/mod/mixin/implementations/compat/GenerationSettingsFloraFeaturesMixin.java similarity index 89% rename from platforms/forge/src/main/java/com/dfsek/terra/forge/mixin/implementations/compat/GenerationSettingsFloraFeaturesMixin.java rename to platforms/mod-common/src/main/java/com/dfsek/terra/mod/mixin/implementations/compat/GenerationSettingsFloraFeaturesMixin.java index 19639e48a..df71e733f 100644 --- a/platforms/forge/src/main/java/com/dfsek/terra/forge/mixin/implementations/compat/GenerationSettingsFloraFeaturesMixin.java +++ b/platforms/mod-common/src/main/java/com/dfsek/terra/mod/mixin/implementations/compat/GenerationSettingsFloraFeaturesMixin.java @@ -1,6 +1,6 @@ -package com.dfsek.terra.forge.mixin.implementations.compat; +package com.dfsek.terra.mod.mixin.implementations.compat; -import com.dfsek.terra.forge.mixin_ifaces.FloraFeatureHolder; +import com.dfsek.terra.mod.mixin_ifaces.FloraFeatureHolder; import net.minecraft.world.biome.GenerationSettings; import net.minecraft.world.gen.feature.ConfiguredFeature; diff --git a/platforms/forge/src/main/java/com/dfsek/terra/forge/mixin/implementations/terra/BiomeMixin.java b/platforms/mod-common/src/main/java/com/dfsek/terra/mod/mixin/implementations/terra/BiomeMixin.java similarity index 94% rename from platforms/forge/src/main/java/com/dfsek/terra/forge/mixin/implementations/terra/BiomeMixin.java rename to platforms/mod-common/src/main/java/com/dfsek/terra/mod/mixin/implementations/terra/BiomeMixin.java index 3bf07cffc..893921e8e 100644 --- a/platforms/forge/src/main/java/com/dfsek/terra/forge/mixin/implementations/terra/BiomeMixin.java +++ b/platforms/mod-common/src/main/java/com/dfsek/terra/mod/mixin/implementations/terra/BiomeMixin.java @@ -15,7 +15,7 @@ * along with Terra. If not, see . */ -package com.dfsek.terra.forge.mixin.implementations.terra; +package com.dfsek.terra.mod.mixin.implementations.terra; import net.minecraft.world.biome.Biome; import org.spongepowered.asm.mixin.Implements; diff --git a/platforms/forge/src/main/java/com/dfsek/terra/forge/mixin/implementations/terra/HandleImplementationMixin.java b/platforms/mod-common/src/main/java/com/dfsek/terra/mod/mixin/implementations/terra/HandleImplementationMixin.java similarity index 96% rename from platforms/forge/src/main/java/com/dfsek/terra/forge/mixin/implementations/terra/HandleImplementationMixin.java rename to platforms/mod-common/src/main/java/com/dfsek/terra/mod/mixin/implementations/terra/HandleImplementationMixin.java index 936af09b3..0257421ca 100644 --- a/platforms/forge/src/main/java/com/dfsek/terra/forge/mixin/implementations/terra/HandleImplementationMixin.java +++ b/platforms/mod-common/src/main/java/com/dfsek/terra/mod/mixin/implementations/terra/HandleImplementationMixin.java @@ -1,4 +1,4 @@ -package com.dfsek.terra.forge.mixin.implementations.terra; +package com.dfsek.terra.mod.mixin.implementations.terra; import net.minecraft.block.Block; import net.minecraft.block.BlockState; diff --git a/platforms/forge/src/main/java/com/dfsek/terra/forge/mixin/implementations/terra/block/BlockMixin.java b/platforms/mod-common/src/main/java/com/dfsek/terra/mod/mixin/implementations/terra/block/BlockMixin.java similarity index 95% rename from platforms/forge/src/main/java/com/dfsek/terra/forge/mixin/implementations/terra/block/BlockMixin.java rename to platforms/mod-common/src/main/java/com/dfsek/terra/mod/mixin/implementations/terra/block/BlockMixin.java index 8df67e40a..480e4a86d 100644 --- a/platforms/forge/src/main/java/com/dfsek/terra/forge/mixin/implementations/terra/block/BlockMixin.java +++ b/platforms/mod-common/src/main/java/com/dfsek/terra/mod/mixin/implementations/terra/block/BlockMixin.java @@ -15,7 +15,7 @@ * along with Terra. If not, see . */ -package com.dfsek.terra.forge.mixin.implementations.terra.block; +package com.dfsek.terra.mod.mixin.implementations.terra.block; import net.minecraft.block.Block; import net.minecraft.block.Blocks; diff --git a/platforms/forge/src/main/java/com/dfsek/terra/forge/mixin/implementations/terra/block/entity/BlockEntityMixin.java b/platforms/mod-common/src/main/java/com/dfsek/terra/mod/mixin/implementations/terra/block/entity/BlockEntityMixin.java similarity index 96% rename from platforms/forge/src/main/java/com/dfsek/terra/forge/mixin/implementations/terra/block/entity/BlockEntityMixin.java rename to platforms/mod-common/src/main/java/com/dfsek/terra/mod/mixin/implementations/terra/block/entity/BlockEntityMixin.java index 272c18812..cfb7b795b 100644 --- a/platforms/forge/src/main/java/com/dfsek/terra/forge/mixin/implementations/terra/block/entity/BlockEntityMixin.java +++ b/platforms/mod-common/src/main/java/com/dfsek/terra/mod/mixin/implementations/terra/block/entity/BlockEntityMixin.java @@ -15,7 +15,7 @@ * along with Terra. If not, see . */ -package com.dfsek.terra.forge.mixin.implementations.terra.block.entity; +package com.dfsek.terra.mod.mixin.implementations.terra.block.entity; import org.spongepowered.asm.mixin.Implements; import org.spongepowered.asm.mixin.Interface; diff --git a/platforms/forge/src/main/java/com/dfsek/terra/forge/mixin/implementations/terra/block/entity/LootableContainerBlockEntityMixin.java b/platforms/mod-common/src/main/java/com/dfsek/terra/mod/mixin/implementations/terra/block/entity/LootableContainerBlockEntityMixin.java similarity index 94% rename from platforms/forge/src/main/java/com/dfsek/terra/forge/mixin/implementations/terra/block/entity/LootableContainerBlockEntityMixin.java rename to platforms/mod-common/src/main/java/com/dfsek/terra/mod/mixin/implementations/terra/block/entity/LootableContainerBlockEntityMixin.java index 123541696..ad237b3b8 100644 --- a/platforms/forge/src/main/java/com/dfsek/terra/forge/mixin/implementations/terra/block/entity/LootableContainerBlockEntityMixin.java +++ b/platforms/mod-common/src/main/java/com/dfsek/terra/mod/mixin/implementations/terra/block/entity/LootableContainerBlockEntityMixin.java @@ -15,7 +15,7 @@ * along with Terra. If not, see . */ -package com.dfsek.terra.forge.mixin.implementations.terra.block.entity; +package com.dfsek.terra.mod.mixin.implementations.terra.block.entity; import net.minecraft.block.entity.LootableContainerBlockEntity; import org.spongepowered.asm.mixin.Implements; diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/terra/block/entity/MobSpawnerBlockEntityMixin.java b/platforms/mod-common/src/main/java/com/dfsek/terra/mod/mixin/implementations/terra/block/entity/MobSpawnerBlockEntityMixin.java similarity index 94% rename from platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/terra/block/entity/MobSpawnerBlockEntityMixin.java rename to platforms/mod-common/src/main/java/com/dfsek/terra/mod/mixin/implementations/terra/block/entity/MobSpawnerBlockEntityMixin.java index 0bb1b6120..f28c27a62 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/terra/block/entity/MobSpawnerBlockEntityMixin.java +++ b/platforms/mod-common/src/main/java/com/dfsek/terra/mod/mixin/implementations/terra/block/entity/MobSpawnerBlockEntityMixin.java @@ -15,9 +15,7 @@ * along with Terra. If not, see . */ -package com.dfsek.terra.fabric.mixin.implementations.terra.block.entity; - -import com.dfsek.terra.mod.mixin.access.MobSpawnerLogicAccessor; +package com.dfsek.terra.mod.mixin.implementations.terra.block.entity; import net.minecraft.block.BlockState; import net.minecraft.block.entity.BlockEntity; @@ -36,7 +34,8 @@ import org.spongepowered.asm.mixin.Shadow; import com.dfsek.terra.api.block.entity.MobSpawner; import com.dfsek.terra.api.block.entity.SerialState; import com.dfsek.terra.api.entity.EntityType; -import com.dfsek.terra.fabric.FabricEntryPoint; +import com.dfsek.terra.mod.CommonPlatform; +import com.dfsek.terra.mod.mixin.access.MobSpawnerLogicAccessor; @Mixin(MobSpawnerBlockEntity.class) @@ -117,7 +116,7 @@ public abstract class MobSpawnerBlockEntityMixin extends BlockEntity { public void terra$applyState(String state) { SerialState.parse(state).forEach((k, v) -> { switch(k) { - case "type" -> terra$setSpawnedType(FabricEntryPoint.getPlatform().getWorldHandle().getEntity(v)); + case "type" -> terra$setSpawnedType(CommonPlatform.get().getWorldHandle().getEntity(v)); case "delay" -> terra$setDelay(Integer.parseInt(v)); case "min_delay" -> terra$setMinSpawnDelay(Integer.parseInt(v)); case "max_delay" -> terra$setMaxSpawnDelay(Integer.parseInt(v)); diff --git a/platforms/forge/src/main/java/com/dfsek/terra/forge/mixin/implementations/terra/block/entity/SignBlockEntityMixin.java b/platforms/mod-common/src/main/java/com/dfsek/terra/mod/mixin/implementations/terra/block/entity/SignBlockEntityMixin.java similarity index 96% rename from platforms/forge/src/main/java/com/dfsek/terra/forge/mixin/implementations/terra/block/entity/SignBlockEntityMixin.java rename to platforms/mod-common/src/main/java/com/dfsek/terra/mod/mixin/implementations/terra/block/entity/SignBlockEntityMixin.java index 400a176ca..e32d7e053 100644 --- a/platforms/forge/src/main/java/com/dfsek/terra/forge/mixin/implementations/terra/block/entity/SignBlockEntityMixin.java +++ b/platforms/mod-common/src/main/java/com/dfsek/terra/mod/mixin/implementations/terra/block/entity/SignBlockEntityMixin.java @@ -15,7 +15,7 @@ * along with Terra. If not, see . */ -package com.dfsek.terra.forge.mixin.implementations.terra.block.entity; +package com.dfsek.terra.mod.mixin.implementations.terra.block.entity; import net.minecraft.block.entity.SignBlockEntity; import net.minecraft.text.Text; diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/terra/block/state/BlockStateMixin.java b/platforms/mod-common/src/main/java/com/dfsek/terra/mod/mixin/implementations/terra/block/state/BlockStateMixin.java similarity index 97% rename from platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/terra/block/state/BlockStateMixin.java rename to platforms/mod-common/src/main/java/com/dfsek/terra/mod/mixin/implementations/terra/block/state/BlockStateMixin.java index 86552bda4..86272efd9 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/terra/block/state/BlockStateMixin.java +++ b/platforms/mod-common/src/main/java/com/dfsek/terra/mod/mixin/implementations/terra/block/state/BlockStateMixin.java @@ -1,4 +1,4 @@ -package com.dfsek.terra.fabric.mixin.implementations.terra.block.state; +package com.dfsek.terra.mod.mixin.implementations.terra.block.state; import com.dfsek.terra.mod.mixin.access.StateAccessor; diff --git a/platforms/forge/src/main/java/com/dfsek/terra/forge/mixin/implementations/terra/block/state/PropertyMixin.java b/platforms/mod-common/src/main/java/com/dfsek/terra/mod/mixin/implementations/terra/block/state/PropertyMixin.java similarity index 93% rename from platforms/forge/src/main/java/com/dfsek/terra/forge/mixin/implementations/terra/block/state/PropertyMixin.java rename to platforms/mod-common/src/main/java/com/dfsek/terra/mod/mixin/implementations/terra/block/state/PropertyMixin.java index ce7d41e20..2dd6100d6 100644 --- a/platforms/forge/src/main/java/com/dfsek/terra/forge/mixin/implementations/terra/block/state/PropertyMixin.java +++ b/platforms/mod-common/src/main/java/com/dfsek/terra/mod/mixin/implementations/terra/block/state/PropertyMixin.java @@ -1,4 +1,4 @@ -package com.dfsek.terra.forge.mixin.implementations.terra.block.state; +package com.dfsek.terra.mod.mixin.implementations.terra.block.state; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Implements; diff --git a/platforms/forge/src/main/java/com/dfsek/terra/forge/mixin/implementations/terra/chunk/ChunkRegionMixin.java b/platforms/mod-common/src/main/java/com/dfsek/terra/mod/mixin/implementations/terra/chunk/ChunkRegionMixin.java similarity index 97% rename from platforms/forge/src/main/java/com/dfsek/terra/forge/mixin/implementations/terra/chunk/ChunkRegionMixin.java rename to platforms/mod-common/src/main/java/com/dfsek/terra/mod/mixin/implementations/terra/chunk/ChunkRegionMixin.java index 96bbe0715..7224f25d1 100644 --- a/platforms/forge/src/main/java/com/dfsek/terra/forge/mixin/implementations/terra/chunk/ChunkRegionMixin.java +++ b/platforms/mod-common/src/main/java/com/dfsek/terra/mod/mixin/implementations/terra/chunk/ChunkRegionMixin.java @@ -15,7 +15,7 @@ * along with Terra. If not, see . */ -package com.dfsek.terra.forge.mixin.implementations.terra.chunk; +package com.dfsek.terra.mod.mixin.implementations.terra.chunk; import net.minecraft.util.math.BlockPos; import net.minecraft.world.ChunkRegion; diff --git a/platforms/forge/src/main/java/com/dfsek/terra/forge/mixin/implementations/terra/chunk/WorldChunkMixin.java b/platforms/mod-common/src/main/java/com/dfsek/terra/mod/mixin/implementations/terra/chunk/WorldChunkMixin.java similarity index 97% rename from platforms/forge/src/main/java/com/dfsek/terra/forge/mixin/implementations/terra/chunk/WorldChunkMixin.java rename to platforms/mod-common/src/main/java/com/dfsek/terra/mod/mixin/implementations/terra/chunk/WorldChunkMixin.java index b6aecff61..3fb01104d 100644 --- a/platforms/forge/src/main/java/com/dfsek/terra/forge/mixin/implementations/terra/chunk/WorldChunkMixin.java +++ b/platforms/mod-common/src/main/java/com/dfsek/terra/mod/mixin/implementations/terra/chunk/WorldChunkMixin.java @@ -15,7 +15,7 @@ * along with Terra. If not, see . */ -package com.dfsek.terra.forge.mixin.implementations.terra.chunk; +package com.dfsek.terra.mod.mixin.implementations.terra.chunk; import net.minecraft.util.math.BlockPos; import net.minecraft.world.chunk.WorldChunk; diff --git a/platforms/forge/src/main/java/com/dfsek/terra/forge/mixin/implementations/terra/chunk/data/ProtoChunkMixin.java b/platforms/mod-common/src/main/java/com/dfsek/terra/mod/mixin/implementations/terra/chunk/data/ProtoChunkMixin.java similarity index 96% rename from platforms/forge/src/main/java/com/dfsek/terra/forge/mixin/implementations/terra/chunk/data/ProtoChunkMixin.java rename to platforms/mod-common/src/main/java/com/dfsek/terra/mod/mixin/implementations/terra/chunk/data/ProtoChunkMixin.java index 918df4f42..f90e5a3b3 100644 --- a/platforms/forge/src/main/java/com/dfsek/terra/forge/mixin/implementations/terra/chunk/data/ProtoChunkMixin.java +++ b/platforms/mod-common/src/main/java/com/dfsek/terra/mod/mixin/implementations/terra/chunk/data/ProtoChunkMixin.java @@ -15,7 +15,7 @@ * along with Terra. If not, see . */ -package com.dfsek.terra.forge.mixin.implementations.terra.chunk.data; +package com.dfsek.terra.mod.mixin.implementations.terra.chunk.data; import com.dfsek.terra.api.block.state.BlockState; import com.dfsek.terra.api.world.chunk.generation.ProtoChunk; diff --git a/platforms/forge/src/main/java/com/dfsek/terra/forge/mixin/implementations/terra/entity/EntityMixin.java b/platforms/mod-common/src/main/java/com/dfsek/terra/mod/mixin/implementations/terra/entity/EntityMixin.java similarity index 90% rename from platforms/forge/src/main/java/com/dfsek/terra/forge/mixin/implementations/terra/entity/EntityMixin.java rename to platforms/mod-common/src/main/java/com/dfsek/terra/mod/mixin/implementations/terra/entity/EntityMixin.java index a300693b7..dce95cf19 100644 --- a/platforms/forge/src/main/java/com/dfsek/terra/forge/mixin/implementations/terra/entity/EntityMixin.java +++ b/platforms/mod-common/src/main/java/com/dfsek/terra/mod/mixin/implementations/terra/entity/EntityMixin.java @@ -15,9 +15,8 @@ * along with Terra. If not, see . */ -package com.dfsek.terra.forge.mixin.implementations.terra.entity; +package com.dfsek.terra.mod.mixin.implementations.terra.entity; -import com.dfsek.terra.forge.util.ForgeAdapter; import net.minecraft.entity.Entity; import net.minecraft.util.math.BlockPos; import org.spongepowered.asm.mixin.Implements; @@ -27,6 +26,7 @@ import org.spongepowered.asm.mixin.Shadow; import com.dfsek.terra.api.util.vector.Vector3; import com.dfsek.terra.api.world.ServerWorld; +import com.dfsek.terra.mod.util.MinecraftAdapter; @Mixin(Entity.class) @@ -42,7 +42,7 @@ public abstract class EntityMixin { public abstract void teleport(double destX, double destY, double destZ); public Vector3 terra$position() { - return ForgeAdapter.adapt(blockPos); + return MinecraftAdapter.adapt(blockPos); } public void terra$position(Vector3 location) { diff --git a/platforms/forge/src/main/java/com/dfsek/terra/forge/mixin/implementations/terra/entity/EntityTypeMixin.java b/platforms/mod-common/src/main/java/com/dfsek/terra/mod/mixin/implementations/terra/entity/EntityTypeMixin.java similarity index 93% rename from platforms/forge/src/main/java/com/dfsek/terra/forge/mixin/implementations/terra/entity/EntityTypeMixin.java rename to platforms/mod-common/src/main/java/com/dfsek/terra/mod/mixin/implementations/terra/entity/EntityTypeMixin.java index 1c73c1efb..a79d4fb0d 100644 --- a/platforms/forge/src/main/java/com/dfsek/terra/forge/mixin/implementations/terra/entity/EntityTypeMixin.java +++ b/platforms/mod-common/src/main/java/com/dfsek/terra/mod/mixin/implementations/terra/entity/EntityTypeMixin.java @@ -15,7 +15,7 @@ * along with Terra. If not, see . */ -package com.dfsek.terra.forge.mixin.implementations.terra.entity; +package com.dfsek.terra.mod.mixin.implementations.terra.entity; import net.minecraft.entity.EntityType; import org.spongepowered.asm.mixin.Implements; diff --git a/platforms/forge/src/main/java/com/dfsek/terra/forge/mixin/implementations/terra/entity/PlayerEntityMixin.java b/platforms/mod-common/src/main/java/com/dfsek/terra/mod/mixin/implementations/terra/entity/PlayerEntityMixin.java similarity index 94% rename from platforms/forge/src/main/java/com/dfsek/terra/forge/mixin/implementations/terra/entity/PlayerEntityMixin.java rename to platforms/mod-common/src/main/java/com/dfsek/terra/mod/mixin/implementations/terra/entity/PlayerEntityMixin.java index f08df6293..ec60c9f69 100644 --- a/platforms/forge/src/main/java/com/dfsek/terra/forge/mixin/implementations/terra/entity/PlayerEntityMixin.java +++ b/platforms/mod-common/src/main/java/com/dfsek/terra/mod/mixin/implementations/terra/entity/PlayerEntityMixin.java @@ -15,7 +15,7 @@ * along with Terra. If not, see . */ -package com.dfsek.terra.forge.mixin.implementations.terra.entity; +package com.dfsek.terra.mod.mixin.implementations.terra.entity; import net.minecraft.entity.player.PlayerEntity; import org.spongepowered.asm.mixin.Implements; diff --git a/platforms/forge/src/main/java/com/dfsek/terra/forge/mixin/implementations/terra/entity/ServerCommandSourceMixin.java b/platforms/mod-common/src/main/java/com/dfsek/terra/mod/mixin/implementations/terra/entity/ServerCommandSourceMixin.java similarity index 97% rename from platforms/forge/src/main/java/com/dfsek/terra/forge/mixin/implementations/terra/entity/ServerCommandSourceMixin.java rename to platforms/mod-common/src/main/java/com/dfsek/terra/mod/mixin/implementations/terra/entity/ServerCommandSourceMixin.java index ce91be261..f11ee5f73 100644 --- a/platforms/forge/src/main/java/com/dfsek/terra/forge/mixin/implementations/terra/entity/ServerCommandSourceMixin.java +++ b/platforms/mod-common/src/main/java/com/dfsek/terra/mod/mixin/implementations/terra/entity/ServerCommandSourceMixin.java @@ -15,7 +15,7 @@ * along with Terra. If not, see . */ -package com.dfsek.terra.forge.mixin.implementations.terra.entity; +package com.dfsek.terra.mod.mixin.implementations.terra.entity; import com.mojang.brigadier.exceptions.CommandSyntaxException; import net.minecraft.server.command.ServerCommandSource; diff --git a/platforms/forge/src/main/java/com/dfsek/terra/forge/mixin/implementations/terra/inventory/LockableContainerBlockEntityMixin.java b/platforms/mod-common/src/main/java/com/dfsek/terra/mod/mixin/implementations/terra/inventory/LockableContainerBlockEntityMixin.java similarity index 96% rename from platforms/forge/src/main/java/com/dfsek/terra/forge/mixin/implementations/terra/inventory/LockableContainerBlockEntityMixin.java rename to platforms/mod-common/src/main/java/com/dfsek/terra/mod/mixin/implementations/terra/inventory/LockableContainerBlockEntityMixin.java index 40f6111db..90c0275dc 100644 --- a/platforms/forge/src/main/java/com/dfsek/terra/forge/mixin/implementations/terra/inventory/LockableContainerBlockEntityMixin.java +++ b/platforms/mod-common/src/main/java/com/dfsek/terra/mod/mixin/implementations/terra/inventory/LockableContainerBlockEntityMixin.java @@ -15,7 +15,7 @@ * along with Terra. If not, see . */ -package com.dfsek.terra.forge.mixin.implementations.terra.inventory; +package com.dfsek.terra.mod.mixin.implementations.terra.inventory; import net.minecraft.block.entity.LockableContainerBlockEntity; import net.minecraft.item.Items; diff --git a/platforms/forge/src/main/java/com/dfsek/terra/forge/mixin/implementations/terra/inventory/item/ItemMixin.java b/platforms/mod-common/src/main/java/com/dfsek/terra/mod/mixin/implementations/terra/inventory/item/ItemMixin.java similarity index 95% rename from platforms/forge/src/main/java/com/dfsek/terra/forge/mixin/implementations/terra/inventory/item/ItemMixin.java rename to platforms/mod-common/src/main/java/com/dfsek/terra/mod/mixin/implementations/terra/inventory/item/ItemMixin.java index e48b5341c..51687c45a 100644 --- a/platforms/forge/src/main/java/com/dfsek/terra/forge/mixin/implementations/terra/inventory/item/ItemMixin.java +++ b/platforms/mod-common/src/main/java/com/dfsek/terra/mod/mixin/implementations/terra/inventory/item/ItemMixin.java @@ -15,7 +15,7 @@ * along with Terra. If not, see . */ -package com.dfsek.terra.forge.mixin.implementations.terra.inventory.item; +package com.dfsek.terra.mod.mixin.implementations.terra.inventory.item; import net.minecraft.item.Item; import org.spongepowered.asm.mixin.Implements; diff --git a/platforms/forge/src/main/java/com/dfsek/terra/forge/mixin/implementations/terra/inventory/item/ItemStackMixin.java b/platforms/mod-common/src/main/java/com/dfsek/terra/mod/mixin/implementations/terra/inventory/item/ItemStackMixin.java similarity index 96% rename from platforms/forge/src/main/java/com/dfsek/terra/forge/mixin/implementations/terra/inventory/item/ItemStackMixin.java rename to platforms/mod-common/src/main/java/com/dfsek/terra/mod/mixin/implementations/terra/inventory/item/ItemStackMixin.java index 7bb42595a..f41bce58d 100644 --- a/platforms/forge/src/main/java/com/dfsek/terra/forge/mixin/implementations/terra/inventory/item/ItemStackMixin.java +++ b/platforms/mod-common/src/main/java/com/dfsek/terra/mod/mixin/implementations/terra/inventory/item/ItemStackMixin.java @@ -15,7 +15,7 @@ * along with Terra. If not, see . */ -package com.dfsek.terra.forge.mixin.implementations.terra.inventory.item; +package com.dfsek.terra.mod.mixin.implementations.terra.inventory.item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NbtCompound; diff --git a/platforms/forge/src/main/java/com/dfsek/terra/forge/mixin/implementations/terra/inventory/meta/EnchantmentMixin.java b/platforms/mod-common/src/main/java/com/dfsek/terra/mod/mixin/implementations/terra/inventory/meta/EnchantmentMixin.java similarity index 96% rename from platforms/forge/src/main/java/com/dfsek/terra/forge/mixin/implementations/terra/inventory/meta/EnchantmentMixin.java rename to platforms/mod-common/src/main/java/com/dfsek/terra/mod/mixin/implementations/terra/inventory/meta/EnchantmentMixin.java index 358cd7a95..d5394870c 100644 --- a/platforms/forge/src/main/java/com/dfsek/terra/forge/mixin/implementations/terra/inventory/meta/EnchantmentMixin.java +++ b/platforms/mod-common/src/main/java/com/dfsek/terra/mod/mixin/implementations/terra/inventory/meta/EnchantmentMixin.java @@ -15,7 +15,7 @@ * along with Terra. If not, see . */ -package com.dfsek.terra.forge.mixin.implementations.terra.inventory.meta; +package com.dfsek.terra.mod.mixin.implementations.terra.inventory.meta; import net.minecraft.enchantment.Enchantment; import net.minecraft.util.registry.Registry; diff --git a/platforms/forge/src/main/java/com/dfsek/terra/forge/mixin/implementations/terra/inventory/meta/ItemStackDamageableMixin.java b/platforms/mod-common/src/main/java/com/dfsek/terra/mod/mixin/implementations/terra/inventory/meta/ItemStackDamageableMixin.java similarity index 95% rename from platforms/forge/src/main/java/com/dfsek/terra/forge/mixin/implementations/terra/inventory/meta/ItemStackDamageableMixin.java rename to platforms/mod-common/src/main/java/com/dfsek/terra/mod/mixin/implementations/terra/inventory/meta/ItemStackDamageableMixin.java index d70b1732d..599dd232d 100644 --- a/platforms/forge/src/main/java/com/dfsek/terra/forge/mixin/implementations/terra/inventory/meta/ItemStackDamageableMixin.java +++ b/platforms/mod-common/src/main/java/com/dfsek/terra/mod/mixin/implementations/terra/inventory/meta/ItemStackDamageableMixin.java @@ -15,7 +15,7 @@ * along with Terra. If not, see . */ -package com.dfsek.terra.forge.mixin.implementations.terra.inventory.meta; +package com.dfsek.terra.mod.mixin.implementations.terra.inventory.meta; import net.minecraft.item.ItemStack; import org.spongepowered.asm.mixin.Implements; diff --git a/platforms/forge/src/main/java/com/dfsek/terra/forge/mixin/implementations/terra/inventory/meta/ItemStackMetaMixin.java b/platforms/mod-common/src/main/java/com/dfsek/terra/mod/mixin/implementations/terra/inventory/meta/ItemStackMetaMixin.java similarity index 96% rename from platforms/forge/src/main/java/com/dfsek/terra/forge/mixin/implementations/terra/inventory/meta/ItemStackMetaMixin.java rename to platforms/mod-common/src/main/java/com/dfsek/terra/mod/mixin/implementations/terra/inventory/meta/ItemStackMetaMixin.java index 17bf068a1..39974ed26 100644 --- a/platforms/forge/src/main/java/com/dfsek/terra/forge/mixin/implementations/terra/inventory/meta/ItemStackMetaMixin.java +++ b/platforms/mod-common/src/main/java/com/dfsek/terra/mod/mixin/implementations/terra/inventory/meta/ItemStackMetaMixin.java @@ -15,7 +15,7 @@ * along with Terra. If not, see . */ -package com.dfsek.terra.forge.mixin.implementations.terra.inventory.meta; +package com.dfsek.terra.mod.mixin.implementations.terra.inventory.meta; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NbtCompound; diff --git a/platforms/forge/src/main/java/com/dfsek/terra/forge/mixin/implementations/terra/package-info.java b/platforms/mod-common/src/main/java/com/dfsek/terra/mod/mixin/implementations/terra/package-info.java similarity index 92% rename from platforms/forge/src/main/java/com/dfsek/terra/forge/mixin/implementations/terra/package-info.java rename to platforms/mod-common/src/main/java/com/dfsek/terra/mod/mixin/implementations/terra/package-info.java index 0899793d3..0d7e843de 100644 --- a/platforms/forge/src/main/java/com/dfsek/terra/forge/mixin/implementations/terra/package-info.java +++ b/platforms/mod-common/src/main/java/com/dfsek/terra/mod/mixin/implementations/terra/package-info.java @@ -20,4 +20,4 @@ * interfaces in Minecraft classes. */ -package com.dfsek.terra.forge.mixin.implementations.terra; \ No newline at end of file +package com.dfsek.terra.mod.mixin.implementations.terra; \ No newline at end of file diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/terra/world/ChunkRegionMixin.java b/platforms/mod-common/src/main/java/com/dfsek/terra/mod/mixin/implementations/terra/world/ChunkRegionMixin.java similarity index 93% rename from platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/terra/world/ChunkRegionMixin.java rename to platforms/mod-common/src/main/java/com/dfsek/terra/mod/mixin/implementations/terra/world/ChunkRegionMixin.java index 7a5ebf822..c17a8c1ee 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/terra/world/ChunkRegionMixin.java +++ b/platforms/mod-common/src/main/java/com/dfsek/terra/mod/mixin/implementations/terra/world/ChunkRegionMixin.java @@ -15,8 +15,9 @@ * along with Terra. If not, see . */ -package com.dfsek.terra.fabric.mixin.implementations.terra.world; +package com.dfsek.terra.mod.mixin.implementations.terra.world; +import com.dfsek.terra.mod.util.MinecraftUtil; import net.minecraft.block.FluidBlock; import net.minecraft.fluid.Fluid; import net.minecraft.util.math.BlockPos; @@ -47,8 +48,7 @@ import com.dfsek.terra.api.world.ServerWorld; import com.dfsek.terra.api.world.biome.generation.BiomeProvider; import com.dfsek.terra.api.world.chunk.generation.ChunkGenerator; import com.dfsek.terra.api.world.chunk.generation.ProtoWorld; -import com.dfsek.terra.fabric.generation.FabricChunkGeneratorWrapper; -import com.dfsek.terra.fabric.util.FabricUtil; +import com.dfsek.terra.mod.generation.MinecraftChunkGeneratorWrapper; @Mixin(ChunkRegion.class) @@ -109,7 +109,7 @@ public abstract class ChunkRegionMixin { } public BlockEntity terraWorld$getBlockEntity(int x, int y, int z) { - return FabricUtil.createState((WorldAccess) this, new BlockPos(x, y, z)); + return MinecraftUtil.createState((WorldAccess) this, new BlockPos(x, y, z)); } public int terraWorld$getMinHeight() { @@ -117,7 +117,7 @@ public abstract class ChunkRegionMixin { } public ChunkGenerator terraWorld$getGenerator() { - return ((FabricChunkGeneratorWrapper) world.getChunkManager().getChunkGenerator()).getHandle(); + return ((MinecraftChunkGeneratorWrapper) world.getChunkManager().getChunkGenerator()).getHandle(); } public BiomeProvider terraWorld$getBiomeProvider() { diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/terra/world/ServerWorldMixin.java b/platforms/mod-common/src/main/java/com/dfsek/terra/mod/mixin/implementations/terra/world/ServerWorldMixin.java similarity index 85% rename from platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/terra/world/ServerWorldMixin.java rename to platforms/mod-common/src/main/java/com/dfsek/terra/mod/mixin/implementations/terra/world/ServerWorldMixin.java index 048b38d8e..f219db0a1 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/terra/world/ServerWorldMixin.java +++ b/platforms/mod-common/src/main/java/com/dfsek/terra/mod/mixin/implementations/terra/world/ServerWorldMixin.java @@ -15,8 +15,9 @@ * along with Terra. If not, see . */ -package com.dfsek.terra.fabric.mixin.implementations.terra.world; +package com.dfsek.terra.mod.mixin.implementations.terra.world; +import com.dfsek.terra.mod.util.MinecraftUtil; import net.minecraft.util.math.BlockPos; import net.minecraft.world.WorldAccess; import org.spongepowered.asm.mixin.Implements; @@ -33,9 +34,8 @@ import com.dfsek.terra.api.world.ServerWorld; import com.dfsek.terra.api.world.biome.generation.BiomeProvider; import com.dfsek.terra.api.world.chunk.Chunk; import com.dfsek.terra.api.world.chunk.generation.ChunkGenerator; -import com.dfsek.terra.fabric.generation.FabricChunkGeneratorWrapper; -import com.dfsek.terra.fabric.generation.TerraBiomeSource; -import com.dfsek.terra.fabric.util.FabricUtil; +import com.dfsek.terra.mod.generation.MinecraftChunkGeneratorWrapper; +import com.dfsek.terra.mod.generation.TerraBiomeSource; @Mixin(net.minecraft.server.world.ServerWorld.class) @@ -73,7 +73,7 @@ public abstract class ServerWorldMixin { } public BlockEntity terra$getBlockEntity(int x, int y, int z) { - return FabricUtil.createState((WorldAccess) this, new BlockPos(x, y, z)); + return MinecraftUtil.createState((WorldAccess) this, new BlockPos(x, y, z)); } public int terra$getMinHeight() { @@ -81,8 +81,8 @@ public abstract class ServerWorldMixin { } public ChunkGenerator terra$getGenerator() { - return ((FabricChunkGeneratorWrapper) ((net.minecraft.server.world.ServerWorld) (Object) this).getChunkManager() - .getChunkGenerator()).getHandle(); + return ((MinecraftChunkGeneratorWrapper) ((net.minecraft.server.world.ServerWorld) (Object) this).getChunkManager() + .getChunkGenerator()).getHandle(); } public BiomeProvider terra$getBiomeProvider() { @@ -94,8 +94,8 @@ public abstract class ServerWorldMixin { public ConfigPack terra$getPack() { net.minecraft.world.gen.chunk.ChunkGenerator generator = (((net.minecraft.server.world.ServerWorld) (Object) this).getChunkManager()).getChunkGenerator(); - if(generator instanceof FabricChunkGeneratorWrapper fabricChunkGeneratorWrapper) { - return fabricChunkGeneratorWrapper.getPack(); + if(generator instanceof MinecraftChunkGeneratorWrapper minecraftChunkGeneratorWrapper) { + return minecraftChunkGeneratorWrapper.getPack(); } return null; } diff --git a/platforms/forge/src/main/java/com/dfsek/terra/forge/mixin_ifaces/FloraFeatureHolder.java b/platforms/mod-common/src/main/java/com/dfsek/terra/mod/mixin_ifaces/FloraFeatureHolder.java similarity index 81% rename from platforms/forge/src/main/java/com/dfsek/terra/forge/mixin_ifaces/FloraFeatureHolder.java rename to platforms/mod-common/src/main/java/com/dfsek/terra/mod/mixin_ifaces/FloraFeatureHolder.java index 2797691f4..4e7c38dec 100644 --- a/platforms/forge/src/main/java/com/dfsek/terra/forge/mixin_ifaces/FloraFeatureHolder.java +++ b/platforms/mod-common/src/main/java/com/dfsek/terra/mod/mixin_ifaces/FloraFeatureHolder.java @@ -1,4 +1,4 @@ -package com.dfsek.terra.forge.mixin_ifaces; +package com.dfsek.terra.mod.mixin_ifaces; import net.minecraft.world.gen.feature.ConfiguredFeature; diff --git a/platforms/forge/src/main/java/com/dfsek/terra/forge/util/ForgeAdapter.java b/platforms/mod-common/src/main/java/com/dfsek/terra/mod/util/MinecraftAdapter.java similarity index 95% rename from platforms/forge/src/main/java/com/dfsek/terra/forge/util/ForgeAdapter.java rename to platforms/mod-common/src/main/java/com/dfsek/terra/mod/util/MinecraftAdapter.java index 469b80349..2f43913e2 100644 --- a/platforms/forge/src/main/java/com/dfsek/terra/forge/util/ForgeAdapter.java +++ b/platforms/mod-common/src/main/java/com/dfsek/terra/mod/util/MinecraftAdapter.java @@ -15,7 +15,7 @@ * along with Terra. If not, see . */ -package com.dfsek.terra.forge.util; +package com.dfsek.terra.mod.util; import net.minecraft.util.math.BlockPos; import net.minecraft.world.HeightLimitView; @@ -24,7 +24,7 @@ import com.dfsek.terra.api.util.vector.Vector3; import com.dfsek.terra.api.world.info.WorldProperties; -public final class ForgeAdapter { +public final class MinecraftAdapter { public static Vector3 adapt(BlockPos pos) { return Vector3.of(pos.getX(), pos.getY(), pos.getZ()); diff --git a/platforms/forge/src/main/java/com/dfsek/terra/forge/util/ForgeUtil.java b/platforms/mod-common/src/main/java/com/dfsek/terra/mod/util/MinecraftUtil.java similarity index 64% rename from platforms/forge/src/main/java/com/dfsek/terra/forge/util/ForgeUtil.java rename to platforms/mod-common/src/main/java/com/dfsek/terra/mod/util/MinecraftUtil.java index cb577de6f..9f7a36712 100644 --- a/platforms/forge/src/main/java/com/dfsek/terra/forge/util/ForgeUtil.java +++ b/platforms/mod-common/src/main/java/com/dfsek/terra/mod/util/MinecraftUtil.java @@ -1,21 +1,9 @@ -/* - * This file is part of Terra. - * - * Terra is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Terra is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Terra. If not, see . - */ +package com.dfsek.terra.mod.util; -package com.dfsek.terra.forge.util; +import com.dfsek.terra.api.block.entity.BlockEntity; +import com.dfsek.terra.api.block.entity.Container; +import com.dfsek.terra.api.block.entity.MobSpawner; +import com.dfsek.terra.api.block.entity.Sign; import net.minecraft.block.entity.LootableContainerBlockEntity; import net.minecraft.block.entity.MobSpawnerBlockEntity; @@ -28,17 +16,18 @@ import net.minecraft.world.WorldAccess; import java.util.Optional; -import com.dfsek.terra.api.block.entity.BlockEntity; -import com.dfsek.terra.api.block.entity.Container; -import com.dfsek.terra.api.block.entity.MobSpawner; -import com.dfsek.terra.api.block.entity.Sign; - -public final class ForgeUtil { - private ForgeUtil() { +public final class MinecraftUtil { + private MinecraftUtil() { } + public static Optional> getEntry(Registry registry, Identifier identifier) { + return registry.getOrEmpty(identifier) + .flatMap(registry::getKey) + .map(registry::getOrCreateEntry); + } + public static BlockEntity createState(WorldAccess worldAccess, BlockPos pos) { net.minecraft.block.entity.BlockEntity entity = worldAccess.getBlockEntity(pos); if(entity instanceof SignBlockEntity) { @@ -50,10 +39,4 @@ public final class ForgeUtil { } return null; } - - public static Optional> getEntry(Registry registry, Identifier identifier) { - return registry.getOrEmpty(identifier) - .flatMap(registry::getKey) - .map(registry::getOrCreateEntry); - } } diff --git a/platforms/mod-common/src/main/resources/terra.common.mixins.json b/platforms/mod-common/src/main/resources/terra.common.mixins.json index ee399c73e..c8142c28a 100644 --- a/platforms/mod-common/src/main/resources/terra.common.mixins.json +++ b/platforms/mod-common/src/main/resources/terra.common.mixins.json @@ -6,7 +6,34 @@ "mixins": [ "access.MobSpawnerLogicAccessor", "access.StateAccessor", - "access.StructureAccessorAccessor" + "access.StructureAccessorAccessor", + "fix.BeeMoveGoalsUnsynchronizedRandomAccessFix", + "fix.NetherFossilOptimization", + "implementations.compat.GenerationSettingsFloraFeaturesMixin", + "implementations.terra.BiomeMixin", + "implementations.terra.HandleImplementationMixin", + "implementations.terra.block.BlockMixin", + "implementations.terra.block.entity.BlockEntityMixin", + "implementations.terra.block.entity.LootableContainerBlockEntityMixin", + "implementations.terra.block.entity.MobSpawnerBlockEntityMixin", + "implementations.terra.block.entity.SignBlockEntityMixin", + "implementations.terra.block.state.BlockStateMixin", + "implementations.terra.block.state.PropertyMixin", + "implementations.terra.chunk.ChunkRegionMixin", + "implementations.terra.chunk.WorldChunkMixin", + "implementations.terra.chunk.data.ProtoChunkMixin", + "implementations.terra.entity.EntityMixin", + "implementations.terra.entity.EntityTypeMixin", + "implementations.terra.entity.PlayerEntityMixin", + "implementations.terra.entity.ServerCommandSourceMixin", + "implementations.terra.inventory.LockableContainerBlockEntityMixin", + "implementations.terra.inventory.item.ItemMixin", + "implementations.terra.inventory.item.ItemStackMixin", + "implementations.terra.inventory.meta.EnchantmentMixin", + "implementations.terra.inventory.meta.ItemStackDamageableMixin", + "implementations.terra.inventory.meta.ItemStackMetaMixin", + "implementations.terra.world.ChunkRegionMixin", + "implementations.terra.world.ServerWorldMixin" ], "client": [ ],