reuse old project

This commit is contained in:
Martin Olischläger 2023-04-15 23:22:10 +02:00
parent 78e8c35200
commit 1d79abd263
9 changed files with 253 additions and 20 deletions

1
.idea/gradle.xml generated
View File

@ -1,5 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="GradleMigrationSettings" migrationVersion="1" />
<component name="GradleSettings">
<option name="linkedExternalProjectsSettings">
<GradleProjectSettings>

2
.idea/vcs.xml generated
View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$" vcs="Git" />
<mapping directory="" vcs="Git" />
</component>
</project>

View File

@ -1,9 +1,11 @@
plugins {
id 'java'
id "com.github.johnrengelman.shadow" version "7.1.0"
}
group = 'eu.mhsl.craftattack.worldmuseum'
version = '1.0-SNAPSHOT'
group = '' +
''
version = '1.0'
repositories {
mavenCentral()
@ -11,11 +13,13 @@ repositories {
}
dependencies {
testImplementation platform('org.junit:junit-bom:5.9.1')
testImplementation 'org.junit.jupiter:junit-jupiter'
implementation 'com.github.Minestom:Minestom:8ad2c7701f'
}
test {
useJUnitPlatform()
jar {
manifest {
attributes 'Main-Class': 'eu.mhsl.craftattack.worldmuseum.Main',
"Multi-Release": true
}
}

View File

@ -1,13 +0,0 @@
import net.minestom.server.MinecraftServer;
public class Main {
public static void main(String[] args) {
// Initialize the server
MinecraftServer minecraftServer = MinecraftServer.init();
// REGISTER EVENTS (set spawn instance, teleport player at spawn)
// Start the server
minecraftServer.start("0.0.0.0", 25565);
}
}

View File

@ -0,0 +1,70 @@
package eu.mhsl.craftattack.worldmuseum;
import eu.mhsl.craftattack.worldmuseum.listener.ClickListener;
import eu.mhsl.craftattack.worldmuseum.worlds.WorldManager;
import net.minestom.server.MinecraftServer;
import net.minestom.server.coordinate.Pos;
import net.minestom.server.entity.GameMode;
import net.minestom.server.entity.Player;
import net.minestom.server.event.GlobalEventHandler;
import net.minestom.server.event.player.PlayerLoginEvent;
import net.minestom.server.event.player.PlayerUseItemEvent;
import net.minestom.server.instance.InstanceContainer;
import net.minestom.server.instance.InstanceManager;
import net.minestom.server.instance.block.Block;
import java.util.ArrayList;
import java.util.List;
public class Main {
static int PORT = 25565;
static String IP = "0.0.0.0";
static List<InstanceContainer> worlds = new ArrayList<>();
public static void main(String[] args) {
// Initialization
System.setProperty("minestom.chunk-view-distance", "16");
MinecraftServer minecraftServer = MinecraftServer.init();
InstanceManager instanceManager = MinecraftServer.getInstanceManager();
//load eu.mhsl.craftattack.worldmuseum.worlds / configExample file
WorldManager.getInstance().loadWorlds();
// Create starting-instance / world
InstanceContainer instanceContainer = instanceManager.createInstanceContainer();
instanceContainer.setBlock(0,0,0,Block.STONE);
// Add an event callback to specify the spawning instance (and the spawn position)
GlobalEventHandler globalEventHandler = MinecraftServer.getGlobalEventHandler();
globalEventHandler.addListener(PlayerLoginEvent.class, event -> {
final Player player = event.getPlayer();
event.setSpawningInstance(instanceContainer);
player.setRespawnPoint(new Pos(0.5,2,0.5));
player.setGameMode(GameMode.CREATIVE);
for (int i = 0; i< WorldManager.getInstance().getWorlds().size(); i++) {
if (WorldManager.getInstance().getWorlds().get(i).isEnabled()) {
player.getInventory().setItemStack(i, WorldManager.getInstance().getWorlds().get(i).getItem());
} else {
System.out.println("Es gibt nicht aktivierte Welten!");
}
}
});
globalEventHandler.addListener(PlayerUseItemEvent.class, new ClickListener());
try {
PORT = Integer.parseInt(args[0]);
} catch (Exception e) {
if (args.length != 0) System.out.println("Given port doesn't work.");
}
// Start the server on port default port 25565 if none is given
System.out.println("Running on " + IP + ":" + PORT);
minecraftServer.start(IP, PORT);
}
}

View File

@ -0,0 +1,37 @@
package eu.mhsl.craftattack.worldmuseum.listener;
import net.minestom.server.entity.Player;
import net.minestom.server.event.player.PlayerUseItemEvent;
import net.minestom.server.inventory.Inventory;
import net.minestom.server.inventory.InventoryType;
import net.minestom.server.item.ItemStack;
import net.minestom.server.item.Material;
import java.util.function.Consumer;
public class ClickListener implements Consumer<PlayerUseItemEvent> {
@Override
public void accept(PlayerUseItemEvent playerUseItemEvent) {
Player p = playerUseItemEvent.getPlayer();
ItemStack usedItem = playerUseItemEvent.getItemStack();
Inventory inventory = new Inventory(InventoryType.WINDOW_3X3, "asdasd");
inventory.setItemStack(0, ItemStack.builder(Material.GRASS_BLOCK).build());
p.openInventory(inventory);
// for (int i = 0; i < WorldManager.getInstance().getWorlds().size(); i++) {
// World world = WorldManager.getInstance().getWorlds().get(i);
//
// if (world.getItem().equals(usedItem)) {
// if (p.getInstance().equals(world)) return;
// p.setInstance(world, world.getSpawn());
// }
// }
}
}

View File

@ -0,0 +1,83 @@
package eu.mhsl.craftattack.worldmuseum.worlds;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import net.kyori.adventure.text.Component;
import net.minestom.server.MinecraftServer;
import net.minestom.server.coordinate.Pos;
import net.minestom.server.instance.AnvilLoader;
import net.minestom.server.instance.InstanceContainer;
import net.minestom.server.item.ItemStack;
import net.minestom.server.item.Material;
import net.minestom.server.utils.NamespaceID;
import net.minestom.server.world.DimensionType;
import java.io.*;
import java.util.UUID;
public class World extends InstanceContainer {
private static DimensionType dimension = DimensionType.builder(NamespaceID.from("mhsl:worldview_by_olischma")).height(400).ambientLight(2.0f).build();
private File file;
private ItemStack item;
private String name = "default";
private Pos spawn = new Pos(0,0,0);
private Material material = Material.GRASS_BLOCK;
private boolean enabled = false;
private String defaultConfig = "{\n" +
" \"enabled\": false,\n" +
" \"name\": \"DEFAULT_NAME\",\n" +
" \"material\": \"GRASS_BLOCK\",\n" +
" \"spawn\": {\n" +
" \"x\": 0,\n" +
" \"y\": 0,\n" +
" \"z\": 0\n" +
" },\n" +
" \"tags\": [\n" +
" \"RANDOM_TAG\"\n" +
" ]\n" +
"}";
static {
MinecraftServer.getDimensionTypeManager().addDimension(dimension);
}
public World(File file) {
super(UUID.randomUUID(), dimension, new AnvilLoader(file.getPath()));
MinecraftServer.getInstanceManager().registerInstance(this);
this.file = file;
try {
File checkFile = new File(file.getPath() + "/config.json");
if (checkFile.createNewFile()) {
FileWriter fileWriter = new FileWriter(file.getPath() + "/config.json");
fileWriter.write(defaultConfig);
fileWriter.close();
}
} catch (IOException e){
e.printStackTrace();
}
try {
JsonObject config = (JsonObject) JsonParser.parseReader(new FileReader(file.getPath() + "/config.json"));
this.name = config.get("name").getAsString();
JsonObject spawn = config.getAsJsonObject("spawn");
this.spawn = new Pos(spawn.get("x").getAsDouble(), spawn.get("y").getAsDouble(), spawn.get("z").getAsDouble());
this.material = Material.values().stream().filter(m -> m.name().equals(config.get("material").getAsString())).findFirst().orElse(Material.GRASS_BLOCK);
this.enabled = config.get("enabled").getAsBoolean();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
item = ItemStack.builder(material).displayName(Component.text(name)).build();
}
public ItemStack getItem() {
return item;
}
public Pos getSpawn() {
return spawn;
}
public boolean isEnabled() {
return enabled;
}
}

View File

@ -0,0 +1,38 @@
package eu.mhsl.craftattack.worldmuseum.worlds;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
public class WorldManager {
private static WorldManager instance;
private List<World> worlds = new ArrayList<>();
public static WorldManager getInstance() {
if (instance == null) {
instance = new WorldManager();
}
return instance;
}
public void loadWorlds() {
File saveDirectory = new File("saves");
List<File> worldFolders = getFolderNames(saveDirectory);
for (File f: worldFolders
) {
worlds.add(new World(f));
}
}
private List<File> getFolderNames(File curDir) {
File[] fileList = curDir.listFiles();
List<File> returnFolders = new ArrayList<>();
for (File f: fileList) {
if (f.isDirectory()) returnFolders.add(f);
}
return returnFolders;
}
public List<World> getWorlds() {
return worlds;
}
}

View File

@ -0,0 +1,13 @@
{
"enabled": false,
"name": "DEFAULT_NAME",
"material": "GRASS_BLOCK",
"spawn": {
"x": 0,
"y": 0,
"z": 0
},
"tags": [
"RANDOM_TAG"
]
}