mirror of
https://github.com/Freezy-Studios/BlazeSMP.git
synced 2025-04-21 14:54:05 +02:00
Impl homes
This commit is contained in:
parent
fcb2ca8496
commit
a2c1eb155d
5 changed files with 148 additions and 5 deletions
Binary file not shown.
|
@ -3,6 +3,7 @@ package me.freezy.plugins.papermc.blazesmp;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import me.freezy.plugins.papermc.blazesmp.command.ClaimCommand;
|
import me.freezy.plugins.papermc.blazesmp.command.ClaimCommand;
|
||||||
import me.freezy.plugins.papermc.blazesmp.command.ClanCommand;
|
import me.freezy.plugins.papermc.blazesmp.command.ClanCommand;
|
||||||
|
import me.freezy.plugins.papermc.blazesmp.command.HomeCommand;
|
||||||
import me.freezy.plugins.papermc.blazesmp.command.ReportCommand;
|
import me.freezy.plugins.papermc.blazesmp.command.ReportCommand;
|
||||||
import me.freezy.plugins.papermc.blazesmp.listener.*;
|
import me.freezy.plugins.papermc.blazesmp.listener.*;
|
||||||
import me.freezy.plugins.papermc.blazesmp.module.manager.Clans;
|
import me.freezy.plugins.papermc.blazesmp.module.manager.Clans;
|
||||||
|
@ -30,11 +31,6 @@ public final class BlazeSMP extends JavaPlugin {
|
||||||
|
|
||||||
this.log.info("Loading BlazeSMP...");
|
this.log.info("Loading BlazeSMP...");
|
||||||
|
|
||||||
this.log.info("Loading Homes...");
|
|
||||||
this.homes=new Homes();
|
|
||||||
this.homes.load();
|
|
||||||
this.log.info("Loaded Homes!");
|
|
||||||
|
|
||||||
this.log.info("Loading ProtectedBlocks...");
|
this.log.info("Loading ProtectedBlocks...");
|
||||||
this.protectedBlocks=new ProtectedBlocks();
|
this.protectedBlocks=new ProtectedBlocks();
|
||||||
this.protectedBlocks.load();
|
this.protectedBlocks.load();
|
||||||
|
@ -60,10 +56,16 @@ public final class BlazeSMP extends JavaPlugin {
|
||||||
|
|
||||||
this.log.info("Enabling BlazeSMP...");
|
this.log.info("Enabling BlazeSMP...");
|
||||||
|
|
||||||
|
this.log.info("Loading Homes...");
|
||||||
|
this.homes=new Homes();
|
||||||
|
this.homes.load();
|
||||||
|
this.log.info("Loaded Homes!");
|
||||||
|
|
||||||
this.log.info("Registering Commands...");
|
this.log.info("Registering Commands...");
|
||||||
new ClanCommand().register();
|
new ClanCommand().register();
|
||||||
new ReportCommand().register();
|
new ReportCommand().register();
|
||||||
new ClaimCommand().register();
|
new ClaimCommand().register();
|
||||||
|
new HomeCommand().register();
|
||||||
this.log.info("Registered Commands!");
|
this.log.info("Registered Commands!");
|
||||||
|
|
||||||
this.log.info("Registering EventListeners...");
|
this.log.info("Registering EventListeners...");
|
||||||
|
|
|
@ -0,0 +1,52 @@
|
||||||
|
package me.freezy.plugins.papermc.blazesmp.command;
|
||||||
|
|
||||||
|
import me.freezy.plugins.papermc.blazesmp.BlazeSMP;
|
||||||
|
import me.freezy.plugins.papermc.blazesmp.command.util.SimpleCommand;
|
||||||
|
import me.freezy.plugins.papermc.blazesmp.module.manager.Homes;
|
||||||
|
import me.freezy.plugins.papermc.blazesmp.tasks.PlayerTeleportHomeTimer;
|
||||||
|
import net.kyori.adventure.text.minimessage.MiniMessage;
|
||||||
|
import org.bukkit.command.Command;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class HomeCommand extends SimpleCommand {
|
||||||
|
public HomeCommand() {
|
||||||
|
super("home", List.of("sethome", "delhome"));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) {
|
||||||
|
if (!(sender instanceof Player player)) {
|
||||||
|
sender.sendMessage(MiniMessage.miniMessage().deserialize("<red>You must be a player to use this command!</red>"));
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
Homes homes = BlazeSMP.getInstance().getHomes();
|
||||||
|
|
||||||
|
if (label.equalsIgnoreCase("sethome")) {
|
||||||
|
homes.setHome(player);
|
||||||
|
player.sendMessage(MiniMessage.miniMessage().deserialize("<green>Home set!</green>"));
|
||||||
|
} else if (label.equalsIgnoreCase("delhome")) {
|
||||||
|
homes.removeHome(player);
|
||||||
|
player.sendMessage(MiniMessage.miniMessage().deserialize("<red>Home removed!</red>"));
|
||||||
|
} else {
|
||||||
|
if (homes.hasHome(player)) {
|
||||||
|
// Informiere den Spieler, dass der Teleport-Vorgang gestartet wird
|
||||||
|
player.sendMessage(MiniMessage.miniMessage().deserialize("<yellow>Teleporting to home!</yellow>"));
|
||||||
|
new PlayerTeleportHomeTimer(player).runTaskTimer(BlazeSMP.getInstance(), 0, 1);
|
||||||
|
} else {
|
||||||
|
homes.setHome(player);
|
||||||
|
player.sendMessage(MiniMessage.miniMessage().deserialize("<green>Home set!</green>"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @Nullable List<String> onTabComplete(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) {
|
||||||
|
return List.of();
|
||||||
|
}
|
||||||
|
}
|
|
@ -7,6 +7,7 @@ import lombok.Getter;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.FileReader;
|
import java.io.FileReader;
|
||||||
|
@ -112,6 +113,24 @@ public class Homes {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean hasHome(Player player) {
|
||||||
|
return homes.containsKey(player.getUniqueId());
|
||||||
|
}
|
||||||
|
|
||||||
|
public Location getHome(Player player) {
|
||||||
|
return homes.get(player.getUniqueId());
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setHome(Player player) {
|
||||||
|
homes.put(player.getUniqueId(), player.getLocation());
|
||||||
|
save();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void removeHome(Player player) {
|
||||||
|
homes.remove(player.getUniqueId());
|
||||||
|
save();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Inner class representing the JSON structure for a location.
|
* Inner class representing the JSON structure for a location.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -0,0 +1,70 @@
|
||||||
|
package me.freezy.plugins.papermc.blazesmp.tasks;
|
||||||
|
|
||||||
|
import me.freezy.plugins.papermc.blazesmp.BlazeSMP;
|
||||||
|
import net.kyori.adventure.text.minimessage.MiniMessage;
|
||||||
|
import org.bukkit.Location;
|
||||||
|
import org.bukkit.Particle;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.scheduler.BukkitRunnable;
|
||||||
|
|
||||||
|
public class PlayerTeleportHomeTimer extends BukkitRunnable {
|
||||||
|
private final Player player;
|
||||||
|
private final double origX;
|
||||||
|
private final double origY;
|
||||||
|
private final double origZ;
|
||||||
|
// Countdown in Ticks (5 Sekunden * 20 Ticks pro Sekunde)
|
||||||
|
private int ticksRemaining = 5 * 20;
|
||||||
|
|
||||||
|
// Felder für den Spiraleneffekt
|
||||||
|
private double angle = 0;
|
||||||
|
|
||||||
|
public PlayerTeleportHomeTimer(Player player) {
|
||||||
|
this.player = player;
|
||||||
|
// Speichere die ursprüngliche Position, um Bewegungen zu erkennen
|
||||||
|
origX = player.getLocation().getX();
|
||||||
|
origY = player.getLocation().getY();
|
||||||
|
origZ = player.getLocation().getZ();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
// Abbruch, falls sich der Spieler bewegt hat
|
||||||
|
if (player.getLocation().getX() != origX ||
|
||||||
|
player.getLocation().getY() != origY ||
|
||||||
|
player.getLocation().getZ() != origZ) {
|
||||||
|
player.sendMessage(MiniMessage.miniMessage().deserialize("<red>Teleporting cancelt you moved!</red>"));
|
||||||
|
cancel();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Berechne, wie viele Ticks bereits vergangen sind
|
||||||
|
int ticksElapsed = (5 * 20) - ticksRemaining;
|
||||||
|
|
||||||
|
// Erzeuge den Spiraleneffekt
|
||||||
|
Location baseLoc = player.getLocation();
|
||||||
|
double radius = 1.5;
|
||||||
|
double offsetX = Math.cos(angle) * radius;
|
||||||
|
double offsetZ = Math.sin(angle) * radius;
|
||||||
|
// Inkrementiere den Y-Wert, sodass die Spirale nach oben steigt
|
||||||
|
double offsetY = 0.2 + ticksElapsed * 0.05;
|
||||||
|
Location particleLoc = baseLoc.clone().add(offsetX, offsetY, offsetZ);
|
||||||
|
player.getWorld().spawnParticle(Particle.FLAME, particleLoc, 1, 0, 0, 0, 0);
|
||||||
|
|
||||||
|
// Erhöhe den Winkel schneller, sodass sich die Spirale schneller dreht
|
||||||
|
double angleIncrement = Math.PI / 4;
|
||||||
|
angle += angleIncrement;
|
||||||
|
|
||||||
|
// Teleport-Countdown und Nachrichten
|
||||||
|
if (ticksRemaining <= 0) {
|
||||||
|
player.teleportAsync(BlazeSMP.getInstance().getHomes().getHome(player));
|
||||||
|
player.sendMessage(MiniMessage.miniMessage().deserialize("<green>Teleported!</green>"));
|
||||||
|
cancel();
|
||||||
|
} else if (ticksRemaining % 20 == 0) {
|
||||||
|
int secondsLeft = ticksRemaining / 20;
|
||||||
|
String message = String.format("<yellow>Teleporting to home in %s seconds!</yellow>", secondsLeft);
|
||||||
|
player.sendMessage(MiniMessage.miniMessage().deserialize(message));
|
||||||
|
}
|
||||||
|
|
||||||
|
ticksRemaining--;
|
||||||
|
}
|
||||||
|
}
|
Loading…
Add table
Add a link
Reference in a new issue