start working on mixins

This commit is contained in:
dfsek 2021-06-05 00:49:38 -07:00
parent 74fdf9a18e
commit eca46a7c64
7 changed files with 77 additions and 1 deletions

View File

@ -17,6 +17,10 @@ repositories {
dependencies {
"compileOnly"("org.spongepowered:spongeapi:8.0.0-SNAPSHOT")
"annotationProcessor"("org.spongepowered:mixin:0.8.2:processor")
"compileOnly"("org.spongepowered:mixin:0.8.2")
"shadedApi"(project(":common"))
"shadedImplementation"("org.yaml:snakeyaml:1.27")
"shadedImplementation"("com.googlecode.json-simple:json-simple:1.1.1")
@ -35,3 +39,11 @@ minecraft {
client()
}
}
tasks.named<Jar>("jar") {
manifest {
attributes(
mapOf("MixinConfigs" to "terra.mixins.json")
)
}
}

View File

@ -192,6 +192,10 @@ public class TerraSpongePlugin implements TerraPlugin {
return profiler;
}
public Map<DimensionType,Pair<ServerWorld, TerraWorld>> getWorldMap() {
return worldMap;
}
@Addon("Terra-Sponge")
@Author("Terra")
@Version("1.0.0")

View File

@ -3,7 +3,7 @@ package com.dfsek.terra.sponge.handle;
import com.dfsek.terra.api.platform.block.BlockData;
import com.dfsek.terra.api.platform.entity.EntityType;
import com.dfsek.terra.api.platform.handle.WorldHandle;
import com.dfsek.terra.sponge.SpongeAdapter;
import com.dfsek.terra.sponge.intern.util.SpongeAdapter;
import org.spongepowered.api.Sponge;
import org.spongepowered.api.block.BlockState;

View File

@ -0,0 +1,35 @@
package com.dfsek.terra.sponge.intern.mixin;
import com.dfsek.terra.api.util.generic.pair.Pair;
import com.dfsek.terra.sponge.TerraSpongePlugin;
import com.dfsek.terra.sponge.intern.SpongeChunkGeneratorWrapper;
import com.dfsek.terra.world.TerraWorld;
import net.minecraft.server.level.ServerChunkCache;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.dimension.DimensionType;
import org.spongepowered.api.world.server.ServerWorld;
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.Redirect;
@Mixin(ServerLevel.class)
public abstract class ServerLevelMixin {
@Shadow
@Final
private ServerChunkCache chunkSource;
@Redirect(method = "<init>", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/level/Level;updateSkyBrightness()V"))
public void injectConstructor(Level level) {
if(chunkSource.getGenerator() instanceof SpongeChunkGeneratorWrapper) {
SpongeChunkGeneratorWrapper chunkGeneratorWrapper = (SpongeChunkGeneratorWrapper) chunkSource.getGenerator();
DimensionType dimensionType = ((Level) (Object) this).dimensionType();
TerraSpongePlugin.getInstance().getWorldMap().put(dimensionType, Pair.of((ServerWorld) this, new TerraWorld((com.dfsek.terra.api.platform.world.World) this, chunkGeneratorWrapper.getPack(), TerraSpongePlugin.getInstance())));
chunkGeneratorWrapper.setDimensionType(dimensionType);
TerraSpongePlugin.getInstance().logger().info("Registered world " + this + " to dimension type " + dimensionType);
}
((Level) (Object) this).updateSkyBrightness();
}
}

View File

@ -1,7 +1,10 @@
package com.dfsek.terra.sponge.intern.util;
import com.dfsek.terra.api.math.vector.Vector3;
import com.dfsek.terra.api.platform.block.BlockData;
import com.dfsek.terra.sponge.world.block.data.SpongeBlockData;
import net.minecraft.core.BlockPos;
import org.spongepowered.api.block.BlockState;
public final class SpongeAdapter {
public static Vector3 adapt(BlockPos pos) {
@ -11,4 +14,8 @@ public final class SpongeAdapter {
public static BlockPos adapt(Vector3 vec) {
return new BlockPos(vec.getBlockX(), vec.getBlockY(), vec.getBlockZ());
}
public static BlockData adapt(BlockState state) {
return new SpongeBlockData(state);
}
}

View File

@ -0,0 +1 @@
MixinConfigs: terra.mixins.json

View File

@ -0,0 +1,17 @@
{
"required": true,
"package": "com.dfsek.terra.sponge.intern.mixin",
"compatibilityLevel": "JAVA_8",
"refmap": "terra-refmap.json",
"mixins": [
"ServerLevelMixin"
],
"client": [
],
"server": [
],
"injectors": {
"defaultRequire": 1
},
"minVersion": "0.8"
}