adding Feedback when player uses compass to often

This commit is contained in:
Martin Olischläger 2023-04-28 18:58:47 +02:00 committed by Martin
parent 65e3195128
commit f02379515d
9 changed files with 35 additions and 60 deletions

View File

@ -1,12 +1,14 @@
package eu.mhsl.craftattack.worldmuseum; package eu.mhsl.craftattack.worldmuseum;
import eu.mhsl.craftattack.worldmuseum.commands.GamemodeCommand; import eu.mhsl.craftattack.worldmuseum.commands.GamemodeCommand;
import eu.mhsl.craftattack.worldmuseum.commands.GcCommand; import eu.mhsl.craftattack.worldmuseum.temp.GcCommand;
import eu.mhsl.craftattack.worldmuseum.commands.SpawnCommand; import eu.mhsl.craftattack.worldmuseum.commands.SpawnCommand;
import eu.mhsl.craftattack.worldmuseum.commands.TeleportCommand; import eu.mhsl.craftattack.worldmuseum.commands.TeleportCommand;
import eu.mhsl.craftattack.worldmuseum.listener.*; import eu.mhsl.craftattack.worldmuseum.listener.*;
import eu.mhsl.craftattack.worldmuseum.skins.SkinCache; import eu.mhsl.craftattack.worldmuseum.skins.SkinCache;
import eu.mhsl.craftattack.worldmuseum.temp.TablistUpdateTask;
import eu.mhsl.craftattack.worldmuseum.util.Config; import eu.mhsl.craftattack.worldmuseum.util.Config;
import eu.mhsl.craftattack.worldmuseum.util.NewPlayer;
import eu.mhsl.craftattack.worldmuseum.util.SignHandler; import eu.mhsl.craftattack.worldmuseum.util.SignHandler;
import eu.mhsl.craftattack.worldmuseum.worlds.World; import eu.mhsl.craftattack.worldmuseum.worlds.World;
import eu.mhsl.craftattack.worldmuseum.worlds.WorldManager; import eu.mhsl.craftattack.worldmuseum.worlds.WorldManager;
@ -28,8 +30,6 @@ public class Main {
// Initialization // Initialization
System.setProperty("minestom.chunk-view-distance", "8"); System.setProperty("minestom.chunk-view-distance", "8");
MinecraftServer minecraftServer = MinecraftServer.init(); MinecraftServer minecraftServer = MinecraftServer.init();
// MinecraftServer.setChunkViewDistance(8);
//temp //temp
MinecraftServer.getSchedulerManager().scheduleTask(new TablistUpdateTask(), TaskSchedule.tick(20), TaskSchedule.tick(20)); MinecraftServer.getSchedulerManager().scheduleTask(new TablistUpdateTask(), TaskSchedule.tick(20), TaskSchedule.tick(20));

View File

@ -1,12 +1,10 @@
package eu.mhsl.craftattack.worldmuseum.listener; package eu.mhsl.craftattack.worldmuseum.listener;
import eu.mhsl.craftattack.worldmuseum.NewPlayer; import eu.mhsl.craftattack.worldmuseum.util.NewPlayer;
import eu.mhsl.craftattack.worldmuseum.util.ChangeWorld; import eu.mhsl.craftattack.worldmuseum.util.ChangeWorld;
import eu.mhsl.craftattack.worldmuseum.worlds.World; import eu.mhsl.craftattack.worldmuseum.worlds.World;
import eu.mhsl.craftattack.worldmuseum.worlds.WorldManager; import eu.mhsl.craftattack.worldmuseum.worlds.WorldManager;
import net.minestom.server.entity.Player;
import net.minestom.server.event.inventory.InventoryPreClickEvent; import net.minestom.server.event.inventory.InventoryPreClickEvent;
import net.minestom.server.thread.MinestomThread;
import java.util.Objects; import java.util.Objects;
import java.util.function.Consumer; import java.util.function.Consumer;
@ -24,12 +22,9 @@ public class InventoryClickListener implements Consumer<InventoryPreClickEvent>
p.teleport(w.getSpawn()); p.teleport(w.getSpawn());
} else { } else {
p.closeInventory(); p.closeInventory();
Thread thread = new ChangeWorld(p, w); ChangeWorld.changeWorld(p, w);
thread.run();
} }
} }
inventoryPreClickEvent.setCancelled(true); inventoryPreClickEvent.setCancelled(true);
} }
} }

View File

@ -1,8 +1,8 @@
package eu.mhsl.craftattack.worldmuseum.listener; package eu.mhsl.craftattack.worldmuseum.listener;
import eu.mhsl.craftattack.worldmuseum.NewPlayer; import eu.mhsl.craftattack.worldmuseum.util.NewPlayer;
import eu.mhsl.craftattack.worldmuseum.items.CompassManager; import eu.mhsl.craftattack.worldmuseum.items.CompassManager;
import net.minestom.server.entity.Player; import net.kyori.adventure.text.Component;
import net.minestom.server.event.player.PlayerUseItemEvent; import net.minestom.server.event.player.PlayerUseItemEvent;
import net.minestom.server.item.ItemStack; import net.minestom.server.item.ItemStack;
import java.util.function.Consumer; import java.util.function.Consumer;
@ -16,7 +16,11 @@ public class ItemUseListener implements Consumer<PlayerUseItemEvent> {
CompassManager compassManager = CompassManager.getInstance(); CompassManager compassManager = CompassManager.getInstance();
if (!usedItem.equals(compassManager.getCompass())) return; if (!usedItem.equals(compassManager.getCompass())) return;
if (!p.isAllowCompassUsage()) return; if (!p.isAllowCompassUsage()) {
long lastUsed = (System.currentTimeMillis() - p.getLastCompassUsage()) / 1000;
p.sendActionBar(Component.text("Du kannst den Kompass erst in " + (10 - lastUsed) + " Sekunden wieder benutzen."));
return;
}
p.update_lastCompassUsage(); p.update_lastCompassUsage();
p.openInventory(compassManager.getInventory()); p.openInventory(compassManager.getInventory());
playerUseItemEvent.setCancelled(true); playerUseItemEvent.setCancelled(true);

View File

@ -1,6 +1,6 @@
package eu.mhsl.craftattack.worldmuseum.listener; package eu.mhsl.craftattack.worldmuseum.listener;
import eu.mhsl.craftattack.worldmuseum.NewPlayer; import eu.mhsl.craftattack.worldmuseum.util.NewPlayer;
import net.minestom.server.event.player.PlayerMoveEvent; import net.minestom.server.event.player.PlayerMoveEvent;
import java.util.function.Consumer; import java.util.function.Consumer;

View File

@ -1,4 +1,4 @@
package eu.mhsl.craftattack.worldmuseum.commands; package eu.mhsl.craftattack.worldmuseum.temp;
import net.minestom.server.command.builder.Command; import net.minestom.server.command.builder.Command;

View File

@ -1,4 +1,4 @@
package eu.mhsl.craftattack.worldmuseum; package eu.mhsl.craftattack.worldmuseum.temp;
import net.kyori.adventure.text.Component; import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.format.NamedTextColor; import net.kyori.adventure.text.format.NamedTextColor;

View File

@ -1,15 +1,12 @@
package eu.mhsl.craftattack.worldmuseum.util; package eu.mhsl.craftattack.worldmuseum.util;
import eu.mhsl.craftattack.worldmuseum.NewPlayer;
import eu.mhsl.craftattack.worldmuseum.worlds.World; import eu.mhsl.craftattack.worldmuseum.worlds.World;
import net.minestom.server.potion.Potion; import net.minestom.server.potion.Potion;
import net.minestom.server.potion.PotionEffect; import net.minestom.server.potion.PotionEffect;
import net.minestom.server.thread.MinestomThread; public class ChangeWorld {
public static void changeWorld(NewPlayer player, World targetWorld) {
public class ChangeWorld extends MinestomThread {
public ChangeWorld(NewPlayer player, World targetWorld) {
super("load_world_for_player");
player.setAllowMovement(false); player.setAllowMovement(false);
player.setAllowCompassUsage(false);
player.addEffect(new Potion(PotionEffect.BLINDNESS, (byte) 0, 1000000)); player.addEffect(new Potion(PotionEffect.BLINDNESS, (byte) 0, 1000000));
player.setRespawnPoint(targetWorld.getSpawn()); player.setRespawnPoint(targetWorld.getSpawn());
@ -17,6 +14,7 @@ public class ChangeWorld extends MinestomThread {
player.setAllowMovement(true); player.setAllowMovement(true);
player.clearEffects(); player.clearEffects();
player.update_lastCompassUsage(); player.update_lastCompassUsage();
player.setAllowCompassUsage(true);
}); });
} }
} }

View File

@ -1,24 +0,0 @@
package eu.mhsl.craftattack.worldmuseum.util;
import eu.mhsl.craftattack.worldmuseum.worlds.World;
import net.minestom.server.MinecraftServer;
import net.minestom.server.coordinate.Point;
import net.minestom.server.instance.Chunk;
import net.minestom.server.utils.chunk.ChunkUtils;
import java.util.ArrayList;
import java.util.stream.Stream;
public class ChunkLoadUtil {
public static boolean areNearbyChunksLoaded(Point point, World world) {
ArrayList<Chunk> chunks = new ArrayList<>();
ChunkUtils.forChunksInRange(point, MinecraftServer.getChunkViewDistance(), (x , z) -> {
chunks.add(world.getChunk(x, z));
});
// Stream.of(new Conditional(point, world, () -> {world.getChunkAt(point).sendChunk();}))
return false;
}
}

View File

@ -1,8 +1,5 @@
package eu.mhsl.craftattack.worldmuseum; package eu.mhsl.craftattack.worldmuseum.util;
import eu.mhsl.craftattack.worldmuseum.worlds.World;
import net.minestom.server.coordinate.Point;
import net.minestom.server.coordinate.Pos;
import net.minestom.server.entity.Player; import net.minestom.server.entity.Player;
import net.minestom.server.network.player.PlayerConnection; import net.minestom.server.network.player.PlayerConnection;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
@ -10,35 +7,40 @@ import org.jetbrains.annotations.Nullable;
import java.time.Duration; import java.time.Duration;
import java.util.UUID; import java.util.UUID;
import java.util.concurrent.CompletableFuture;
public class NewPlayer extends Player { public class NewPlayer extends Player {
private boolean allowMovemenrt = true;
private long lastCompassUsage = System.currentTimeMillis(); private boolean allowMovement = true;
private long lastCompassUsage = 0;
private boolean allowCompassUsage = true;
public NewPlayer(@NotNull UUID uuid, @NotNull String username, @NotNull PlayerConnection playerConnection) { public NewPlayer(@NotNull UUID uuid, @NotNull String username, @NotNull PlayerConnection playerConnection) {
super(uuid, username, playerConnection); super(uuid, username, playerConnection);
} }
public void setSyncCooldown(@Nullable Duration cooldown) { public void setSyncCooldown(@Nullable Duration cooldown) {
this.setCustomSynchronizationCooldown(cooldown); this.setCustomSynchronizationCooldown(cooldown);
} }
public boolean isAllowMovement() { public boolean isAllowMovement() {
return allowMovemenrt; return allowMovement;
} }
public void update_lastCompassUsage() { public void update_lastCompassUsage() {
lastCompassUsage = System.currentTimeMillis(); lastCompassUsage = System.currentTimeMillis();
} }
public boolean isAllowCompassUsage() { public boolean isAllowCompassUsage() {
long UsageDifference = System.currentTimeMillis() - lastCompassUsage; long UsageDifference = System.currentTimeMillis() - lastCompassUsage;
System.out.println(UsageDifference); long difference = 10000; //in Milisec
long DIFFERENCE = 10000; //in Milisec return UsageDifference >= difference && allowCompassUsage;
if (UsageDifference >= DIFFERENCE) return true;
return false;
} }
public void setAllowMovement(boolean allowMovement) { public void setAllowMovement(boolean allowMovement) {
this.allowMovemenrt = allowMovement; this.allowMovement = allowMovement;
} }
public void setAllowCompassUsage(boolean allowCompassUsage) {
this.allowCompassUsage = allowCompassUsage;
}
public long getLastCompassUsage() {
return lastCompassUsage;
}
} }