251 Commits

Author SHA1 Message Date
Aikar
1b2830a3b3 SPIGOT-4441: Fix serializing Components to and from Legacy
While cfeef75cd97 might of semi helped being able to save black text
lore, it actually took a fundamental problem with the legacy serialization
code and expanded it to break even more aspects of the server when dealing
with Component to Legacy conversion.

This is causing data loss in Spigot with cases such as setting an item name
to white gets stripped resulting in it being italic.

Additionally, things such as book pages have been returning black formatting
codes for the end of the line even when the user doesn't have colors in the book.

The root issue is that the "Default Color" system is fundamentally wrong.

Components do not and should not care about what element of the game they
are being used by, and that's what the default color system did.

It results in components that if obtained from 1 source such as a Book
where the default / rendered color is black, is then copied to another
source such as an Entity name, the black is carried forward and shown
in the Entity name, when in reality it should have been white.

This commit reverts cfeef75cd97 and fixes the underlying serialization
issues when it comes to Legacy to and From conversions.

There was quite a number of issues with this code overall, in how
it handles inserting color codes, new line parsing and such.

Books was using mojangs own "getLegacyString" which doesn't match behavior.
We also do not want to use Mojangs method as there is no guarantee they don't
remove that in future.
Plus, everything about books uses the CB implementation anyways, and it should
be consistent (this was mandatory to avoid serialization format changes on old vs new)

These changes as is results in Item Stacks already serialized will not
change contents when they go to component and back, so this won't impact
any existing data.

Newly created books though for example will change behavior in that they
will no longer insert black color codes in the serialized data and will
only represent intentional color changes by the creator of the book.
This will result in cleaner data on them, and books are the only thing
I'm aware of that has a behavioral shift due to the likelyhood of the
default color system kicking in on other parts of the string.

A unit test has been added to verify integrity of serialization to
ensure that any legacy string that is converted into Components will
always re-encode back in the same way when going back to Legacy.
2020-06-01 19:19:42 +10:00
md_5
ce66f6937b Misc checkstyle fixes 2020-04-14 12:34:43 +10:00
SydMontague
aa3a2f2767 #645: Allow statistics to be accessed for offline players 2020-04-05 15:58:43 +10:00
anhcraft
b91ce1192a #601: Implement Player#sendExperienceChange 2020-01-21 10:32:16 +11:00
md_5
d208733e70 SPIGOT-5509: Sleeping player does not eject bed when teleported 2020-01-11 14:14:23 +11:00
md_5
de42aa13f3 Update to Minecraft 1.15 2019-12-11 09:00:00 +11:00
md_5
e73aabd666 Update to Minecraft 1.14.4 2019-07-20 09:00:00 +10:00
Yannick Lamprecht
8a3d3f4980 SPIGOT-5098: Add a method to allow colored sign changes 2019-06-23 11:00:08 +10:00
simpleauthority
649921e5ba Add Player#openBook(ItemStack) method
This PR adds the openBook(ItemStack) method to Player that allows opening a
Material.WRITTEN_BOOK for a player on demand.
2019-06-08 19:51:29 +10:00
md_5
8ad02cd9c7 SPIGOT-4900: Rearchitect multiworld support for better compat with new villager AI 2019-05-12 11:15:48 +10:00
md_5
e3df3d5cda Add Override annotations where appropriate 2019-04-28 11:38:01 +10:00
md_5
5fea790398 Apply import ordering rules to CraftBukkit classes 2019-04-23 14:56:58 +10:00
md_5
a2d787f6eb Update to Minecraft 1.14-pre5 2019-04-23 12:00:00 +10:00
blablubbabc
0e1cea5a4a Added Entity#setRotation.
Unlike Entity#teleport this can also be used while the entity is inside a vehicle.
2019-04-03 19:46:27 +11:00
Yannick Lamprecht
39a287b7da Don't ignore newlines in PlayerListHeader/Footer 2019-03-10 11:04:15 +11:00
md_5
b021230837 Cap Channel Registrations 2019-01-05 16:21:07 +11:00
md_5
8e65d8df6c SPIGOT-4560: Add HumanEntity.sleep and related APIs 2019-01-02 14:43:12 +11:00
md_5
79ded7a8ca SPIGOT-1811: Death message not shown on respawn screen 2018-12-27 11:37:19 +11:00
md_5
96c461b3a5 API to get client side view distance. 2018-11-02 21:24:14 +11:00
md_5
ce1af0c348 Update to Minecraft 1.13.1 2018-08-26 12:00:00 +10:00
md_5
15da706706 SPIGOT-4258: Add Player.updateCommands method 2018-08-12 09:41:00 +10:00
md_5
3b8f5be77b SPIGOT-1714: Draft API for player list header / footer 2018-07-29 21:30:31 +10:00
md_5
4e2f571337 Fix Player.playNote 2018-07-22 14:40:48 +10:00
md_5
421c1728c8 Update to Minecraft 1.13-pre7 2018-07-15 10:00:00 +10:00
md_5
ca6d2cf9dc Add validation checks to CraftPlayer.teleport 2018-07-11 09:06:48 +10:00
md_5
8bb4f6ccc1 SPIGOT-3813: Player.setHealth not reliable in conjunction with attribute API 2018-02-12 08:59:32 +11:00
md_5
9ab298de7b SPIGOT-3807: Improve getEyeHeight 2018-02-10 12:17:00 +11:00
md_5
e1fb9cb640 Send title timings before sending titles 2017-12-30 13:39:54 +11:00
Chris Cowan
558c5a348c SPIGOT-3663: Add plugin parameter to hidePlayer+showPlayer. 2017-12-05 09:37:47 +11:00
md_5
c15d869440 Use generics in health scaling methods 2017-11-17 11:08:26 +11:00
md_5
82f3b02c67 SPIGOT-1891: Player.playNote should use RECORDS category
This is what NoteBlock.play etc uses.
2017-11-14 09:57:46 +11:00
md_5
4670a84bd9 SPIGOT-3432: Add playNote support for new sounds 2017-07-24 17:44:44 +10:00
MiniDigger
274304b8ca SPIGOT-439: Add player locale related APIs. 2017-05-27 19:06:28 +10:00
md_5
5195487ec6 Update to Minecraft 1.12-pre2 2017-05-14 12:00:00 +10:00
Pokechu22
a2af8f0a73 SPIGOT-3207: Fix hiding players in a BukkitRunnable after joining
This happened because "joining" wasn't cleared until the player was ticked.  Runnables (presumably) ran _after_ the player list packet was sent, but before the player was ticked; thus, the player list packet was sent, but not cleared.  The fix is to replace joining with hasSentListPacket, which is set immediately before sending any player list packets (thus, if hidePlayer is called after, it sees that the list packet has been sent and sends a new one to reset it).  With this fix, the player is added to the list and then removed shortly afterwards.

The reason why running /hideall in the example wouldn't fix the invisibility is because the server already thinks the player's been removed from the list (as they're hidden), and thus doesn't want to send another hide packet.  This is correct behavior assuming that they get hidden correctly the first time, which they now do.
2017-04-28 15:27:57 +10:00
md_5
b5f7b6d69f SPIGOT-3157: Use Vanilla gamemode change code 2017-03-31 21:21:11 +11:00
Parker Hawke
b80055abfb Properly validate player experience bar progress 2017-03-19 18:31:40 -04:00
Max Lee
4c8d895513 SPIGOT-2152: Method to set resource pack + hash. 2017-02-15 10:05:56 +11:00
md_5
0a6a5cb4ad SPIGOT-1036: Add API to manipulate sendTitle timings. 2016-12-16 09:48:14 +11:00
md_5
d7cce99f01 Fix possible leaks in vanish API 2016-11-28 10:02:40 +11:00
md_5
7564d60241 Add stopSound for specific sound category & unit test for SoundCategory 2016-11-19 14:27:18 +11:00
LukBukkit
63c13c5e62 Implement SoundCategory for playing sounds. 2016-11-19 14:20:13 +11:00
md_5
c25ddf063a Update to Minecraft 1.11 2016-11-17 12:41:03 +11:00
md_5
cb2749768e SPIGOT-2757: Player#stopSound Stops All Sounds 2016-11-06 10:36:38 +11:00
md_5
9558f31ebb SPIGOT-2711: CraftPlayer.getPlayerListName removes black colour 2016-10-05 19:33:33 +11:00
md_5
d3507d2818 SPIGOT-1364: sendMap should update entire map 2016-07-01 11:24:11 +10:00
md_5
45038571f9 SPIGOT-1341: Cancelled cake interact decreases client hunger 2016-07-01 11:20:31 +10:00
md_5
4c43856621 SPIGOT-1599: Allow teleporting disconnected players 2016-06-30 13:01:37 +10:00
md_5
46233ffa8f Add Player.stopSound 2016-06-12 10:28:09 +10:00
md_5
a8a4bedd2a Update to Minecraft 1.10 2016-06-09 11:43:49 +10:00