mirror of
https://github.com/Minestom/Minestom.git
synced 2025-03-02 11:21:15 +01:00
Use negative entity id for the custom breaking system
This commit is contained in:
parent
32d13dcbd1
commit
b2e3d3e78d
@ -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.
|
||||
* <p>
|
||||
* 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;
|
||||
}
|
||||
|
||||
|
@ -33,7 +33,9 @@ public abstract class JsonMessage {
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the string json representation.
|
||||
* Gets the Json representation.
|
||||
* <p>
|
||||
* Used to send messages.
|
||||
*
|
||||
* @return the string json representation
|
||||
*/
|
||||
|
@ -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...
|
||||
* <p>
|
||||
* Example: {display:{Name:"{\"text\":\"Sword of Power\"}"}} or [{display:{Name:"{\"text\":\"Sword of Power\"}"}}]
|
||||
*/
|
||||
|
@ -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.
|
||||
* <p>
|
||||
* 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<String> getKeys();
|
||||
|
||||
|
@ -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 {
|
||||
|
||||
|
@ -5,6 +5,7 @@ import net.minestom.server.event.Event;
|
||||
|
||||
/**
|
||||
* Called after a chunk being unload to a certain player.
|
||||
* <p>
|
||||
* Could be used to unload the chunk internally in order to save memory.
|
||||
*/
|
||||
public class PlayerChunkUnloadEvent extends Event {
|
||||
|
@ -41,7 +41,7 @@ public abstract class CustomBlock {
|
||||
private final Map<Instance, InstanceBreakData> instanceBreakDataMap = new HashMap<>();
|
||||
|
||||
public int getBreakEntityId(Player firstBreaker) {
|
||||
return firstBreaker.getEntityId() + 1;
|
||||
return -firstBreaker.getEntityId();
|
||||
}
|
||||
|
||||
private final short defaultBlockStateId;
|
||||
|
@ -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.
|
||||
* <p>
|
||||
* 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
|
||||
*/
|
||||
|
@ -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();
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user