begin sponge impl

This commit is contained in:
dfsek
2021-07-30 15:23:39 -07:00
parent 2263e6722b
commit bea45ff030
8 changed files with 268 additions and 9 deletions

View File

@@ -1,5 +1,4 @@
plugins {
id("org.spongepowered.plugin").version("0.9.0")
id("org.spongepowered.gradle.vanilla").version("0.2")
}
@@ -9,16 +8,16 @@ repositories {
}
}
dependencies {
"shadedApi"(project(":common:implementation"))
annotationProcessor(implementation("org.spongepowered:spongeapi:9.0.0-SNAPSHOT")!!)
annotationProcessor("org.spongepowered:mixin:0.8.2:processor")
java {
sourceCompatibility = JavaVersion.VERSION_16
targetCompatibility = JavaVersion.VERSION_16
}
sponge {
plugin {
id = "terra"
}
dependencies {
"shadedApi"(project(":common:implementation"))
"annotationProcessor"("org.spongepowered:spongeapi:9.0.0-SNAPSHOT")
"shadedImplementation"("org.spongepowered:spongeapi:9.0.0-SNAPSHOT")
"annotationProcessor"("org.spongepowered:mixin:0.8.2:processor")
}
minecraft {

View File

@@ -0,0 +1,19 @@
package com.dfsek.terra.sponge;
import com.dfsek.terra.api.event.events.platform.PlatformInitializationEvent;
import org.spongepowered.api.Server;
import org.spongepowered.api.event.Listener;
import org.spongepowered.api.event.lifecycle.StartingEngineEvent;
public class SpongeListener {
private final TerraSpongePlugin plugin;
public SpongeListener(TerraSpongePlugin plugin) {
this.plugin = plugin;
}
@Listener
public void initialize(StartingEngineEvent<Server> event) {
plugin.getTerraPlugin().getEventManager().callEvent(new PlatformInitializationEvent());
}
}

View File

@@ -0,0 +1,65 @@
package com.dfsek.terra.sponge;
import com.dfsek.terra.AbstractTerraPlugin;
import com.dfsek.terra.api.Logger;
import com.dfsek.terra.api.handle.ItemHandle;
import com.dfsek.terra.api.handle.WorldHandle;
import com.dfsek.terra.sponge.handle.SpongeWorldHandle;
import org.spongepowered.api.Sponge;
import java.io.File;
public class TerraPluginImpl extends AbstractTerraPlugin {
private final TerraSpongePlugin plugin;
private final SpongeWorldHandle worldHandle = new SpongeWorldHandle();
public TerraPluginImpl(TerraSpongePlugin plugin) {
this.plugin = plugin;
load();
}
@Override
public WorldHandle getWorldHandle() {
return worldHandle;
}
@Override
public File getDataFolder() {
return Sponge.configManager().pluginConfig(plugin.getPluginContainer()).directory().toFile();
}
@Override
public boolean reload() {
return false;
}
@Override
public ItemHandle getItemHandle() {
return null;
}
@Override
public String platformName() {
return "Sponge";
}
@Override
protected Logger createLogger() {
return new Logger() {
@Override
public void info(String message) {
plugin.getPluginContainer().logger().info(message);
}
@Override
public void warning(String message) {
plugin.getPluginContainer().logger().warn(message);
}
@Override
public void severe(String message) {
plugin.getPluginContainer().logger().error(message);
}
};
}
}

View File

@@ -0,0 +1,24 @@
package com.dfsek.terra.sponge;
import com.google.inject.Inject;
import org.spongepowered.plugin.PluginContainer;
import org.spongepowered.plugin.jvm.Plugin;
@Plugin("terra")
public class TerraSpongePlugin {
private final PluginContainer plugin;
private final TerraPluginImpl terraPlugin;
@Inject
public TerraSpongePlugin(PluginContainer plugin) {
this.plugin = plugin;
this.terraPlugin = new TerraPluginImpl(this);
}
public PluginContainer getPluginContainer() {
return plugin;
}
public TerraPluginImpl getTerraPlugin() {
return terraPlugin;
}
}

View File

@@ -0,0 +1,64 @@
package com.dfsek.terra.sponge.block;
import com.dfsek.terra.api.block.BlockType;
import com.dfsek.terra.api.block.state.BlockState;
import com.dfsek.terra.api.block.state.properties.Property;
import org.spongepowered.api.block.BlockTypes;
public class SpongeBlockState implements BlockState {
private final org.spongepowered.api.block.BlockState delegate;
public SpongeBlockState(org.spongepowered.api.block.BlockState delegate) {
this.delegate = delegate;
}
@Override
public org.spongepowered.api.block.BlockState getHandle() {
return delegate;
}
@Override
public BlockType getBlockType() {
return new SpongeBlockType(delegate.type());
}
@Override
public boolean matches(BlockState other) {
return delegate.type().equals(((SpongeBlockType) other.getBlockType()).getHandle());
}
@Override
public BlockState clone() {
return this;
}
@Override
public String getAsString() {
return delegate.toString();
}
@Override
public boolean isAir() {
return delegate.type().equals(BlockTypes.AIR.get());
}
@Override
public boolean isStructureVoid() {
return delegate.type().equals(BlockTypes.STRUCTURE_VOID.get());
}
@Override
public <T> boolean has(Property<T> property) {
return false;
}
@Override
public <T> T get(Property<T> property) {
return null;
}
@Override
public <T> BlockState set(Property<T> property, T value) {
return this;
}
}

View File

@@ -0,0 +1,34 @@
package com.dfsek.terra.sponge.block;
import com.dfsek.terra.api.block.BlockType;
import com.dfsek.terra.api.block.state.BlockState;
import org.spongepowered.api.block.BlockTypes;
import org.spongepowered.api.data.Keys;
public class SpongeBlockType implements BlockType {
private final org.spongepowered.api.block.BlockType delegate;
public SpongeBlockType(org.spongepowered.api.block.BlockType delegate) {
this.delegate = delegate;
}
@Override
public org.spongepowered.api.block.BlockType getHandle() {
return delegate;
}
@Override
public BlockState getDefaultData() {
return new SpongeBlockState(delegate.defaultState());
}
@Override
public boolean isSolid() {
return !delegate.getOrElse(Keys.IS_SOLID, false);
}
@Override
public boolean isWater() {
return delegate.equals(BlockTypes.WATER.get());
}
}

View File

@@ -0,0 +1,30 @@
package com.dfsek.terra.sponge.handle;
import com.dfsek.terra.api.block.state.BlockState;
import com.dfsek.terra.api.entity.EntityType;
import com.dfsek.terra.api.handle.WorldHandle;
import com.dfsek.terra.sponge.block.SpongeBlockState;
import org.spongepowered.api.block.BlockTypes;
public class SpongeWorldHandle implements WorldHandle {
private final SpongeBlockState air;
public SpongeWorldHandle() {
air = new SpongeBlockState(BlockTypes.AIR.get().defaultState());
}
@Override
public BlockState createBlockData(String data) {
return new SpongeBlockState(org.spongepowered.api.block.BlockState.fromString(data));
}
@Override
public BlockState air() {
return air;
}
@Override
public EntityType getEntity(String id) {
return null;
}
}

View File

@@ -0,0 +1,24 @@
{
"plugins": [
{
"loader": "java_plain",
"id": "terra",
"name": "Terra",
"version": "@VERSION@",
"main-class": "com.dfsek.terra.sponge.TerraSpongePlugin",
"description": "@DESCRIPTION@",
"links": {
"source": "@SOURCE@",
"issues": "@ISSUES@"
},
"contributors": [
],
"dependencies": [
{
"id": "spongeapi",
"version": "9.0.0"
}
]
}
]
}