diff --git a/src/main/java/eu/mhsl/craftattack/spawn/appliances/spawnpoint/FirstSpawnPlayerListener.java b/src/main/java/eu/mhsl/craftattack/spawn/appliances/spawnpoint/FirstSpawnPlayerListener.java new file mode 100644 index 0000000..a29d5ff --- /dev/null +++ b/src/main/java/eu/mhsl/craftattack/spawn/appliances/spawnpoint/FirstSpawnPlayerListener.java @@ -0,0 +1,12 @@ +package eu.mhsl.craftattack.spawn.appliances.spawnpoint; + +import eu.mhsl.craftattack.spawn.appliance.ApplianceListener; +import org.bukkit.event.EventHandler; +import org.bukkit.event.player.PlayerJoinEvent; + +public class FirstSpawnPlayerListener extends ApplianceListener { + @EventHandler + public void onSpawn(PlayerJoinEvent event) { + this.getAppliance().handlePlayerLogin(event.getPlayer()); + } +} diff --git a/src/main/java/eu/mhsl/craftattack/spawn/appliances/spawnpoint/SetSpawnpointCommand.java b/src/main/java/eu/mhsl/craftattack/spawn/appliances/spawnpoint/SetSpawnpointCommand.java new file mode 100644 index 0000000..88af683 --- /dev/null +++ b/src/main/java/eu/mhsl/craftattack/spawn/appliances/spawnpoint/SetSpawnpointCommand.java @@ -0,0 +1,20 @@ +package eu.mhsl.craftattack.spawn.appliances.spawnpoint; + +import eu.mhsl.craftattack.spawn.appliance.ApplianceCommand; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.jetbrains.annotations.NotNull; + +public class SetSpawnpointCommand extends ApplianceCommand.PlayerChecked { + public SetSpawnpointCommand() { + super("setSpawnpoint"); + } + + @Override + protected void execute(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) throws Exception { + this.getAppliance().setSpawnpoint(this.getPlayer().getLocation()); + sender.sendMessage(Component.text("Spawnpoint updated!", NamedTextColor.GREEN)); + } +} diff --git a/src/main/java/eu/mhsl/craftattack/spawn/appliances/spawnpoint/Spawnpoint.java b/src/main/java/eu/mhsl/craftattack/spawn/appliances/spawnpoint/Spawnpoint.java new file mode 100644 index 0000000..9a3c0f7 --- /dev/null +++ b/src/main/java/eu/mhsl/craftattack/spawn/appliances/spawnpoint/Spawnpoint.java @@ -0,0 +1,50 @@ +package eu.mhsl.craftattack.spawn.appliances.spawnpoint; + +import eu.mhsl.craftattack.spawn.appliance.Appliance; +import eu.mhsl.craftattack.spawn.appliance.ApplianceCommand; +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.NamespacedKey; +import org.bukkit.entity.Player; +import org.bukkit.event.Listener; +import org.bukkit.persistence.PersistentDataContainer; +import org.bukkit.persistence.PersistentDataType; +import org.jetbrains.annotations.NotNull; + +import java.util.List; +import java.util.Locale; + +public class Spawnpoint extends Appliance { + private static final String namespace = Spawnpoint.class.getSimpleName().toLowerCase(Locale.ROOT); + public static NamespacedKey alreadySpawned = new NamespacedKey(namespace, "editable"); + private static final String position = "position"; + + private Location spawnPoint; + + public Spawnpoint() { + super("spawnpoint"); + this.spawnPoint = this.localConfig().getLocation(position, new Location(Bukkit.getWorlds().getFirst(), 0, 100, 0)); + } + + public void setSpawnpoint(Location location) { + this.localConfig().set("position", location); + this.spawnPoint = location; + } + + public void handlePlayerLogin(Player player) { + PersistentDataContainer dataContainer = player.getPersistentDataContainer(); + if(dataContainer.has(alreadySpawned)) return; + player.teleportAsync(this.spawnPoint); + dataContainer.set(alreadySpawned, PersistentDataType.BOOLEAN, true); + } + + @Override + protected @NotNull List> commands() { + return List.of(new SetSpawnpointCommand()); + } + + @Override + protected @NotNull List listeners() { + return List.of(new FirstSpawnPlayerListener()); + } +} diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 28704b9..cb8870b 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -26,7 +26,6 @@ countdown: start-permission: admin countdown: 60 worldborder-before: 37 - worldborder-after: 0 event: api: http://10.20.6.5:8080/ @@ -71,5 +70,4 @@ packselect: endPrevent: endDisabled: true -feedback: - api: https://mhsl.eu/craftattack/api/feedback \ No newline at end of file +spawnpoint: diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index c837b8c..0f1ba62 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -51,4 +51,5 @@ commands: infobar: endPrevent: feedback: - requestFeedback: \ No newline at end of file + requestFeedback: + setSpawnpoint: \ No newline at end of file