Impl homes

This commit is contained in:
DaTTV 2025-02-19 12:26:16 +01:00
parent fcb2ca8496
commit a2c1eb155d
5 changed files with 148 additions and 5 deletions

View file

@ -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...");

View file

@ -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();
}
}

View file

@ -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.
*/ */

View file

@ -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--;
}
}