Skip to content

Commit

Permalink
Add spawn module
Browse files Browse the repository at this point in the history
  • Loading branch information
Elikill58 committed Aug 21, 2022
1 parent 43804c3 commit 8ec30eb
Show file tree
Hide file tree
Showing 8 changed files with 136 additions and 9 deletions.
22 changes: 22 additions & 0 deletions .classpath
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" output="bin/main" path="src/main/java">
<attributes>
<attribute name="gradle_scope" value="main"/>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
<classpathentry kind="src" output="bin/main" path="src/main/resources">
<attributes>
<attribute name="gradle_scope" value="main"/>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER">
<attributes>
<attribute name="module" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="con" path="org.eclipse.buildship.core.gradleclasspathcontainer"/>
<classpathentry kind="output" path="bin/default"/>
</classpath>
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -113,4 +113,5 @@ gradle-app.setting
**/build/

# Avoid ignoring Gradle wrapper jar file (.jar files are usually ignored)
!gradle-wrapper.jar
!gradle-wrapper.jar
/bin/
23 changes: 23 additions & 0 deletions .project
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>Operadora</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.buildship.core.gradleprojectbuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.jdt.core.javanature</nature>
<nature>org.eclipse.buildship.core.gradleprojectnature</nature>
</natures>
</projectDescription>
2 changes: 2 additions & 0 deletions .settings/org.eclipse.buildship.core.prefs
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
connection.project.dir=
eclipse.preferences.version=1
15 changes: 15 additions & 0 deletions .settings/org.eclipse.jdt.core.prefs
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
eclipse.preferences.version=1
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
org.eclipse.jdt.core.compiler.codegen.targetPlatform=17
org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
org.eclipse.jdt.core.compiler.compliance=17
org.eclipse.jdt.core.compiler.debug.lineNumber=generate
org.eclipse.jdt.core.compiler.debug.localVariable=generate
org.eclipse.jdt.core.compiler.debug.sourceFile=generate
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning
org.eclipse.jdt.core.compiler.release=disabled
org.eclipse.jdt.core.compiler.source=17
Original file line number Diff line number Diff line change
@@ -1,22 +1,25 @@
package pink.zak.minestom.operadora.module;

import java.nio.file.Path;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.stream.Collectors;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.typesafe.config.Config;
import com.typesafe.config.ConfigFactory;
import com.typesafe.config.ConfigObject;
import com.typesafe.config.ConfigValue;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import pink.zak.minestom.operadora.Operadora;
import pink.zak.minestom.operadora.module.hostsupport.HostSupportModule;
import pink.zak.minestom.operadora.module.influx.InfluxMetricsModule;
import pink.zak.minestom.operadora.module.spawn.SpawnModule;
import pink.zak.minestom.operadora.utils.data.FileUtils;

import java.nio.file.Path;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.stream.Collectors;

public class ModuleManager {
private static final Logger LOGGER = LoggerFactory.getLogger(ModuleManager.class);
private final Map<String, Module> registeredModules = new HashMap<>();
Expand Down Expand Up @@ -53,6 +56,7 @@ public ModuleManager() {
private void createModules() {
this.registeredModules.put("host-support", new HostSupportModule());
this.registeredModules.put("influx-metrics", new InfluxMetricsModule());
this.registeredModules.put("spawn", new SpawnModule());
}

public Map<String, Module> getRegisteredModules() {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
package pink.zak.minestom.operadora.module.spawn;

import java.util.UUID;
import java.util.regex.Pattern;

import com.typesafe.config.Config;

import net.minestom.server.MinecraftServer;
import net.minestom.server.coordinate.Pos;
import net.minestom.server.event.player.PlayerLoginEvent;
import net.minestom.server.instance.Instance;
import net.minestom.server.instance.InstanceManager;
import net.minestom.server.instance.block.Block;
import pink.zak.minestom.operadora.Operadora;
import pink.zak.minestom.operadora.module.Module;

public class SpawnModule extends Module {

private Pos spawn;
private UUID instanceId;

public SpawnModule() {
super("spawn");
}

@Override
public void load(Config config) {
this.spawn = new Pos(config.getInt("x"), config.getInt("y"), config.getInt("z"));
this.instanceId = config.hasPath("world")
&& Pattern.compile("[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$")
.matcher(config.getString("world")).matches() ? UUID.fromString(config.getString("world"))
: null;

Operadora.getEventNode().addListener(PlayerLoginEvent.class, event -> {
InstanceManager im = MinecraftServer.getInstanceManager();
Instance instance = instanceId == null ? null : im.getInstance(instanceId);
if (instance == null) {
if (im.getInstances().isEmpty()) {
Instance i = im.createInstanceContainer();
i.setGenerator(unit -> unit.modifier().fillHeight(0, 40, Block.GRASS_BLOCK));
event.setSpawningInstance(i);
} else
event.setSpawningInstance(im.getInstances().iterator().next());
} else
event.setSpawningInstance(instance);
event.getPlayer().setRespawnPoint(spawn);
});
}

}
10 changes: 10 additions & 0 deletions src/main/resources/modules.conf
Original file line number Diff line number Diff line change
Expand Up @@ -15,4 +15,14 @@ influx-metrics: {
organisation = "operadora"
bucket = "test"
update-time = 10s # The time between pushing each set of metrics.
}

# Manage spawn of player
spawn: {
enabled = true

x = 0
y = 0
z = 0
world = "my-world-id" # will get first instance or create one if not found
}

0 comments on commit 8ec30eb

Please sign in to comment.