diff --git a/src/main/java/net/minestom/server/chat/ColoredText.java b/src/main/java/net/minestom/server/chat/ColoredText.java index b67c9585b..faacaab7e 100644 --- a/src/main/java/net/minestom/server/chat/ColoredText.java +++ b/src/main/java/net/minestom/server/chat/ColoredText.java @@ -96,6 +96,7 @@ public class ColoredText extends JsonMessage { * Gets the raw text. * * @return the raw text + * @see #toString() for the Json representation */ public String getMessage() { return message; @@ -104,7 +105,7 @@ public class ColoredText extends JsonMessage { /** * Gets the Json representation of this colored text. *

- * Used to send a message. + * Used to "compile" the message, retrieved with {@link #toString()}. * * @return the Json representation of the text */ @@ -129,7 +130,6 @@ public class ColoredText extends JsonMessage { mainObject.add("extra", extraArray); } - return mainObject; } diff --git a/src/main/java/net/minestom/server/chat/JsonMessage.java b/src/main/java/net/minestom/server/chat/JsonMessage.java index 4cf43b835..867ba3ceb 100644 --- a/src/main/java/net/minestom/server/chat/JsonMessage.java +++ b/src/main/java/net/minestom/server/chat/JsonMessage.java @@ -33,7 +33,9 @@ public abstract class JsonMessage { } /** - * Gets the string json representation. + * Gets the Json representation. + *

+ * Used to send messages. * * @return the string json representation */ diff --git a/src/main/java/net/minestom/server/command/builder/arguments/minecraft/ArgumentNbtTag.java b/src/main/java/net/minestom/server/command/builder/arguments/minecraft/ArgumentNbtTag.java index abca88fd7..981be0efe 100644 --- a/src/main/java/net/minestom/server/command/builder/arguments/minecraft/ArgumentNbtTag.java +++ b/src/main/java/net/minestom/server/command/builder/arguments/minecraft/ArgumentNbtTag.java @@ -8,8 +8,9 @@ import org.jglrxavpok.hephaistos.nbt.SNBTParser; import java.io.StringReader; /** - * Argument used to retrieve a {@link NBT} based object, can be a - * {@link org.jglrxavpok.hephaistos.nbt.NBTCompound} or {@link org.jglrxavpok.hephaistos.nbt.NBTList} + * Argument used to retrieve a {@link NBT} based object, can be any kind of tag like + * {@link org.jglrxavpok.hephaistos.nbt.NBTCompound}, {@link org.jglrxavpok.hephaistos.nbt.NBTList}, + * {@link org.jglrxavpok.hephaistos.nbt.NBTInt}, etc... *

* Example: {display:{Name:"{\"text\":\"Sword of Power\"}"}} or [{display:{Name:"{\"text\":\"Sword of Power\"}"}}] */ diff --git a/src/main/java/net/minestom/server/data/Data.java b/src/main/java/net/minestom/server/data/Data.java index 536a6cf6e..93e853f34 100644 --- a/src/main/java/net/minestom/server/data/Data.java +++ b/src/main/java/net/minestom/server/data/Data.java @@ -4,7 +4,7 @@ import java.util.Collections; import java.util.Set; /** - * Represents an object which contain key/value based data. + * Represents an object which contains key/value based data. *

* See {@link DataImpl} for the default implementation. */ @@ -47,7 +47,7 @@ public interface Data { }; /** - * Sets a value to a specific key. + * Assigns a value to a specific key. * * @param key the key * @param value the value object @@ -86,7 +86,7 @@ public interface Data { /** * Gets the list of data keys. * - * @return an unmodifiable {@link Set} containing all keys + * @return an unmodifiable {@link Set} containing all the keys */ Set getKeys(); diff --git a/src/main/java/net/minestom/server/data/DataImpl.java b/src/main/java/net/minestom/server/data/DataImpl.java index 2cf741fa4..6adcc2edd 100644 --- a/src/main/java/net/minestom/server/data/DataImpl.java +++ b/src/main/java/net/minestom/server/data/DataImpl.java @@ -5,7 +5,7 @@ import java.util.Set; import java.util.concurrent.ConcurrentHashMap; /** - * {@link Data} implementation which use a {@link ConcurrentHashMap} + * {@link Data} implementation which uses a {@link ConcurrentHashMap}. */ public class DataImpl implements Data { diff --git a/src/main/java/net/minestom/server/event/player/PlayerChunkUnloadEvent.java b/src/main/java/net/minestom/server/event/player/PlayerChunkUnloadEvent.java index b06d9d50b..c7b047b45 100644 --- a/src/main/java/net/minestom/server/event/player/PlayerChunkUnloadEvent.java +++ b/src/main/java/net/minestom/server/event/player/PlayerChunkUnloadEvent.java @@ -5,6 +5,7 @@ import net.minestom.server.event.Event; /** * Called after a chunk being unload to a certain player. + *

* Could be used to unload the chunk internally in order to save memory. */ public class PlayerChunkUnloadEvent extends Event { diff --git a/src/main/java/net/minestom/server/instance/block/CustomBlock.java b/src/main/java/net/minestom/server/instance/block/CustomBlock.java index 926e1b4c9..5a5367bec 100644 --- a/src/main/java/net/minestom/server/instance/block/CustomBlock.java +++ b/src/main/java/net/minestom/server/instance/block/CustomBlock.java @@ -41,7 +41,7 @@ public abstract class CustomBlock { private final Map instanceBreakDataMap = new HashMap<>(); public int getBreakEntityId(Player firstBreaker) { - return firstBreaker.getEntityId() + 1; + return -firstBreaker.getEntityId(); } private final short defaultBlockStateId; diff --git a/src/main/java/net/minestom/server/item/ItemStack.java b/src/main/java/net/minestom/server/item/ItemStack.java index a24dac889..05f435c96 100644 --- a/src/main/java/net/minestom/server/item/ItemStack.java +++ b/src/main/java/net/minestom/server/item/ItemStack.java @@ -149,11 +149,11 @@ public class ItemStack implements DataContainer { synchronized (ItemStack.class) { final ColoredText itemDisplayName = itemStack.getDisplayName(); final boolean displayNameCheck = (displayName == null && itemDisplayName == null) || - (displayName != null && itemDisplayName != null && displayName.equals(itemDisplayName)); + (displayName != null && displayName.equals(itemDisplayName)); final Data itemData = itemStack.getData(); final boolean dataCheck = (data == null && itemData == null) || - (data != null && itemData != null && data.equals(itemData)); + (data != null && data.equals(itemData)); final boolean sameMeta = (itemStack.itemMeta == null && itemMeta == null) || (itemStack.itemMeta != null && itemMeta != null && (itemStack.itemMeta.isSimilar(itemMeta))); @@ -215,7 +215,7 @@ public class ItemStack implements DataContainer { /** * Gets the special meta object for this item. *

- * Can be null if not any + * Can be null if not any. * * @return the item meta */ @@ -550,7 +550,7 @@ public class ItemStack implements DataContainer { } /** - * Gets the nbt consumer called when the item is serialized into a packet. + * Gets the {@link NBTConsumer} called when the item is serialized into a packet. * * @return the item nbt consumer, null if not any */ @@ -559,7 +559,7 @@ public class ItemStack implements DataContainer { } /** - * Changes the item nbt consumer. + * Changes the item {@link NBTConsumer}. * * @param nbtConsumer the new item nbt consumer */ diff --git a/src/test/java/demo/PlayerInit.java b/src/test/java/demo/PlayerInit.java index a846c591c..cc2fe75b0 100644 --- a/src/test/java/demo/PlayerInit.java +++ b/src/test/java/demo/PlayerInit.java @@ -1,41 +1,31 @@ package demo; -import demo.blocks.StoneBlock; import demo.generator.ChunkGeneratorDemo; import demo.generator.NoiseTestGenerator; import net.minestom.server.MinecraftServer; -import net.minestom.server.attribute.Attribute; -import net.minestom.server.attribute.AttributeOperation; import net.minestom.server.benchmark.BenchmarkManager; import net.minestom.server.chat.ColoredText; import net.minestom.server.data.Data; +import net.minestom.server.data.DataImpl; import net.minestom.server.entity.*; import net.minestom.server.entity.damage.DamageType; import net.minestom.server.event.entity.EntityAttackEvent; import net.minestom.server.event.item.ItemDropEvent; -import net.minestom.server.event.item.ItemUpdateStateEvent; import net.minestom.server.event.item.PickupItemEvent; import net.minestom.server.event.player.*; import net.minestom.server.instance.Chunk; import net.minestom.server.instance.Instance; import net.minestom.server.instance.InstanceContainer; -import net.minestom.server.instance.WorldBorder; import net.minestom.server.instance.block.Block; -import net.minestom.server.instance.block.CustomBlock; import net.minestom.server.inventory.Inventory; import net.minestom.server.inventory.InventoryType; import net.minestom.server.item.Enchantment; import net.minestom.server.item.ItemStack; import net.minestom.server.item.Material; -import net.minestom.server.item.attribute.AttributeSlot; -import net.minestom.server.item.attribute.ItemAttribute; -import net.minestom.server.item.metadata.MapMeta; import net.minestom.server.network.ConnectionManager; import net.minestom.server.ping.ResponseDataConsumer; -import net.minestom.server.scoreboard.Sidebar; import net.minestom.server.storage.StorageLocation; import net.minestom.server.storage.StorageOptions; -import net.minestom.server.utils.BlockPosition; import net.minestom.server.utils.Position; import net.minestom.server.utils.Vector; import net.minestom.server.utils.time.TimeUnit; @@ -44,9 +34,10 @@ import net.minestom.server.world.DimensionType; import java.util.UUID; public class PlayerInit { - private static volatile InstanceContainer instanceContainer; - private static volatile Inventory inventory; + private static final InstanceContainer instanceContainer; + + private static final Inventory inventory; static { StorageLocation storageLocation = MinecraftServer.getStorageManager().getLocation("instance_data", new StorageOptions().setCompression(true)); @@ -81,9 +72,9 @@ public class PlayerInit { long ramUsage = benchmarkManager.getUsedMemory(); ramUsage /= 1e6; // bytes to MB + final ColoredText header = ColoredText.of("RAM USAGE: " + ramUsage + " MB"); + final ColoredText footer = ColoredText.of(benchmarkManager.getCpuMonitoringMessage()); for (Player player : connectionManager.getOnlinePlayers()) { - ColoredText header = ColoredText.of("RAM USAGE: " + ramUsage + " MB"); - ColoredText footer = ColoredText.of(benchmarkManager.getCpuMonitoringMessage()); player.sendHeaderFooter(header, footer); } }).repeat(10, TimeUnit.TICK).schedule(); @@ -128,34 +119,6 @@ public class PlayerInit { if (block == Block.TORCH) { event.setCustomBlock((short) 3); // custom torch block } - /*for (Player p : player.getInstance().getPlayers()) { - if (p != player) - p.teleport(player.getPosition()); - }*/ - - /*for (int i = 0; i < 100; i++) { - ChickenCreature chickenCreature = new ChickenCreature(player.getPosition()); - chickenCreature.setInstance(player.getInstance()); - }*/ - - /*EntityZombie zombie = new EntityZombie(player.getPosition()); - zombie.setAttribute(Attribute.MOVEMENT_SPEED, 0.25f); - zombie.setInstance(player.getInstance());*/ - - /*FakePlayer.initPlayer(UUID.randomUUID(), "test", fakePlayer -> { - //fakePlayer.setInstance(player.getInstance()); - fakePlayer.teleport(player.getPosition()); - fakePlayer.setSkin(PlayerSkin.fromUsername("TheMode911")); - - fakePlayer.addEventCallback(EntityDeathEvent.class, e -> { - fakePlayer.getController().respawn(); - }); - - fakePlayer.setArrowCount(25); - FakePlayerController controller = fakePlayer.getController(); - controller.sendChatMessage("I am a bot!"); - });*/ - //Hologram hologram = new Hologram(player.getInstance(), player.getPosition(), "Hey guy"); }); @@ -163,17 +126,6 @@ public class PlayerInit { if (event.getHand() != Player.Hand.MAIN) return; - final Instance instance = player.getInstance(); - final BlockPosition blockPosition = event.getBlockPosition(); - - final CustomBlock customBlock = instance.getCustomBlock(blockPosition); - if (customBlock instanceof StoneBlock) { - final Data data = instance.getBlockData(blockPosition); - if (data != null) { - player.sendMessage("test: " + data.get("test")); - } - } - final short blockStateId = player.getInstance().getBlockStateId(event.getBlockPosition()); final Block block = Block.fromStateId(blockStateId); player.sendMessage("You clicked at the block " + block); @@ -200,9 +152,6 @@ public class PlayerInit { }); player.addEventCallback(PlayerLoginEvent.class, event -> { - //final String url = "https://download.mc-packs.net/pack/a83a04f5d78061e0890e13519fea925550461c74.zip"; - //final String hash = "a83a04f5d78061e0890e13519fea925550461c74"; - //player.setResourcePack(new ResourcePack(url, hash)); event.setSpawningInstance(instanceContainer); player.setEnableRespawnScreen(false); @@ -210,19 +159,16 @@ public class PlayerInit { player.setPermissionLevel(4); player.getInventory().addInventoryCondition((p, slot, clickType, inventoryConditionResult) -> { - player.sendMessage("CLICK PLAYER INVENTORY"); - System.out.println("slot player: " + slot); + if (slot == -999) + return; + ItemStack itemStack = p.getInventory().getItemStack(slot); + Data data = itemStack.getData(); + if (data != null) { + System.out.println("DATA: " + data.get("test")); + } + System.out.println("slot player: " + slot + " : " + itemStack.getMaterial() + " : " + (itemStack.getData() != null)); }); - /*Sidebar scoreboard = new Sidebar("Scoreboard Title"); - for (int i = 0; i < 15; i++) { - scoreboard.createLine(new Sidebar.ScoreboardLine("id" + i, "Hey guys " + i, i)); - } - scoreboard.addViewer(player); - scoreboard.updateLineContent("id3", "I HAVE BEEN UPDATED"); - - scoreboard.setTitle("test");*/ - { /*AdvancementManager advancementManager = MinecraftServer.getAdvancementManager(); AdvancementRoot root = new AdvancementRoot(ColoredText.of("title"), ColoredText.of(ChatColor.BLUE + "description"), @@ -248,100 +194,21 @@ public class PlayerInit { }); player.addEventCallback(PlayerSpawnEvent.class, event -> { - player.setGameMode(GameMode.CREATIVE); + player.setGameMode(GameMode.SURVIVAL); player.teleport(new Position(0, 73f, 0)); - player.getInventory().addItemStack(new ItemStack(Material.STONE, (byte) 1)); - - player.setGlowing(true); - ItemStack stone = new ItemStack(Material.DIAMOND_SWORD, (byte) 127); - stone.setEnchantment(Enchantment.AQUA_AFFINITY, (short) 1); - stone.addAttribute(new ItemAttribute(UUID.randomUUID(), - "test_name", - Attribute.ATTACK_DAMAGE, AttributeOperation.ADDITION, 50, AttributeSlot.MAINHAND)); - player.getInventory().addItemStack(stone); - /*for (int i = 0; i < 9; i++) { - player.getInventory().setItemStack(i, new ItemStack(Material.STONE, (byte) 127)); - }*/ - - { - Sidebar sidebar = new Sidebar("title"); - sidebar.createLine(new Sidebar.ScoreboardLine("id1", ColoredText.of("text"), 1)); - sidebar.addViewer(player); - } - - { - ItemStack map = new ItemStack(Material.FILLED_MAP, (byte) 1); - MapMeta mapMeta = (MapMeta) map.getItemMeta(); - mapMeta.setMapId(1); - //player.getInventory().setItemStack(0, map); - - } - - - ItemStack item = new ItemStack(Material.STONE_SWORD, (byte) 1); - item.setDisplayName(ColoredText.of("Item name")); - item.setDamage(5); - //item.getLore().add(ColoredText.of(ChatColor.RED + "a lore line " + ChatColor.BLACK + " BLACK")); - //item.addItemFlags(ItemFlag.HIDE_ENCHANTS); - //item.setEnchantment(Enchantment.SHARPNESS, (short) 50); - //player.getInventory().addItemStack(item); - - //player.setHelmet(new ItemStack(Material.DIAMOND_HELMET, (byte) 1)); - - //inventory.addItemStack(item.clone()); - //player.openInventory(inventory); - - //player.getInventory().addItemStack(new ItemStack(Material.STONE, (byte) 100)); - - { - /*EntityItemFrame entityItemFrame = new EntityItemFrame(new Position(-5, 36, 9, 0, 180), EntityItemFrame.ItemFrameOrientation.DOWN); - entityItemFrame.setNoGravity(true); - entityItemFrame.setInstance(player.getInstance()); - entityItemFrame.setItemStack(item);*/ - } - - Instance instance = player.getInstance(); - WorldBorder worldBorder = instance.getWorldBorder(); - //worldBorder.setDiameter(30); - - //EntityBoat entityBoat = new EntityBoat(player.getPosition()); - //entityBoat.setInstance(player.getInstance()); - //entityBoat.addPassenger(player); - - //player.getInventory().addItemStack(new ItemStack(Material.DIAMOND_CHESTPLATE, (byte) 1)); - - /*TeamManager teamManager = Main.getTeamManager(); - Team team = teamManager.createTeam(getUsername()); - team.setTeamDisplayName("display"); - team.setPrefix("[Test] "); - team.setTeamColor(ChatColor.RED); - setTeam(team); - - setAttribute(Attribute.MAX_HEALTH, 10); - heal(); - - BelowNameScoreboard belowNameScoreboard = new BelowNameScoreboard(); - setBelowNameScoreboard(belowNameScoreboard); - belowNameScoreboard.updateScore(this, 50);*/ - - //player.sendLegacyMessage("&aIm &bHere", '&'); - //player.sendMessage(ColoredText.of("{#ff55ff}" + ChatColor.RESET + "test")); - + Data data = new DataImpl(); + data.set("test", 5, Integer.class); + ItemStack itemStack = new ItemStack(Material.NETHERITE_PICKAXE, (byte) 1); + itemStack.setEnchantment(Enchantment.EFFICIENCY, (short) 5); + itemStack.setData(data); + player.getInventory().addItemStack(itemStack); }); player.addEventCallback(PlayerRespawnEvent.class, event -> { event.setRespawnPosition(new Position(0f, 75f, 0f)); }); - player.addEventCallback(PlayerStartDiggingEvent.class, event -> { - //event.setCancelled(true); - }); - - player.addEventCallback(PlayerCommandEvent.class, event -> { - System.out.println("COMMAND EVENT"); - }); - player.addEventCallback(PlayerUseItemEvent.class, useEvent -> { player.sendMessage("Using item in air: " + useEvent.getItemStack().getMaterial()); }); @@ -351,20 +218,6 @@ public class PlayerInit { player.sendMessage("Using item on block: " + useEvent.getItemStack().getMaterial() + " at " + useEvent.getPosition() + " on face " + useEvent.getBlockFace()); }); - player.addEventCallback(ItemUpdateStateEvent.class, event -> { - System.out.println("ITEM UPDATE STATE"); - }); - - player.addEventCallback(PlayerPreEatEvent.class, event -> { - ItemStack itemStack = event.getFoodItem(); - Material material = itemStack.getMaterial(); - event.setEatingTime(material == Material.PORKCHOP ? 100 : 1000); - }); - - player.addEventCallback(PlayerEatEvent.class, event -> { - System.out.println("PLAYER EAT EVENT"); - }); - player.addEventCallback(PlayerChunkUnloadEvent.class, event -> { Instance instance = player.getInstance(); diff --git a/src/test/java/demo/commands/ShutdownCommand.java b/src/test/java/demo/commands/ShutdownCommand.java index cecb9f284..ef54e5d12 100644 --- a/src/test/java/demo/commands/ShutdownCommand.java +++ b/src/test/java/demo/commands/ShutdownCommand.java @@ -6,7 +6,7 @@ import net.minestom.server.command.CommandSender; import net.minestom.server.entity.Player; /** - * A simple shutdown command + * A simple shutdown command. */ public class ShutdownCommand implements CommandProcessor { @@ -28,6 +28,6 @@ public class ShutdownCommand implements CommandProcessor { @Override public boolean hasAccess(Player player) { - return player.getPermissionLevel() >= 4; + return true; } } diff --git a/src/test/java/demo/commands/TestCommand.java b/src/test/java/demo/commands/TestCommand.java index fb1d39abe..fde72a9f7 100644 --- a/src/test/java/demo/commands/TestCommand.java +++ b/src/test/java/demo/commands/TestCommand.java @@ -4,8 +4,7 @@ import net.minestom.server.command.CommandSender; import net.minestom.server.command.builder.Arguments; import net.minestom.server.command.builder.Command; import net.minestom.server.command.builder.arguments.Argument; -import net.minestom.server.command.builder.arguments.ArgumentType; -import net.minestom.server.item.ItemStack; +import net.minestom.server.command.builder.arguments.minecraft.ArgumentNbtTag; public class TestCommand extends Command { @@ -18,12 +17,11 @@ public class TestCommand extends Command { //addSyntax(this::execute, dynamicWord); } - Argument test = ArgumentType.ItemStack("test"); + Argument test = new ArgumentNbtTag("test"); addSyntax((source, args) -> { + System.out.println("arg: "+args.getNBT("test").getClass()); System.out.println("SUCCESS"); - ItemStack itemStack = args.getItemStack("test"); - source.asPlayer().getInventory().addItemStack(itemStack); }, test); }