290 Commits

Author SHA1 Message Date
Senmori
ec2095d9c6 SPIGOT-4223: Fix inventories using the same TileEntity instance. 2018-08-04 09:41:04 +10:00
md_5
dabb1b930b Potion particles should default to true 2018-08-03 20:01:12 +10:00
md_5
9331153551 SPIGOT-4217: Account for ShowIcon to allow custom tipped arrows to merge 2018-08-03 19:57:09 +10:00
blablubbabc
a0c7bcf02a Fix merchant inventories with custom titles 2018-08-01 08:50:08 +10:00
md_5
6a1dc5bb7d SPIGOT-4177: Change behaviour of item display names yet again 2018-07-29 09:24:42 +10:00
md_5
392108bf94 SPIGOT-4168: Patch up some legacy calls 2018-07-28 10:23:32 +10:00
Senmori
3599dbe3c2 SPIGOT-3981: Make custom inventories return specialised types where practical. 2018-07-25 18:03:37 +10:00
md_5
46e5eeb67e SPIGOT-4128: Skip hopeless entity conversion 2018-07-24 20:46:49 +10:00
md_5
19ff43d9e1 SPIGOT-4128: Greatly improve spawn egg deserialization 2018-07-24 10:49:48 +10:00
md_5
7357d7237a SPIGOT-4123: Fix display names cleared by plugins / serialization 2018-07-24 10:47:51 +10:00
md_5
f732acf24f Add map ID API 2018-07-24 10:18:06 +10:00
md_5
ea7b61290a SPIGOT-4122: Fix an instance of legacy item inequalities 2018-07-24 08:57:58 +10:00
md_5
6a109cf6bc SPIGOT-4124: Fix misplaced PISTON_HEAD 2018-07-24 08:25:13 +10:00
md_5
d4297cbe2d Just throw section signs into components a la Mojang 2018-07-23 10:48:28 +10:00
md_5
1a6b4f5392 Update to Minecraft 1.13 2018-07-22 12:00:00 +10:00
md_5
889e17f99d SPIGOT-4100: Ignore invalid item display names 2018-07-21 09:54:08 +10:00
md_5
80fefcf5ef SPIGOT-4047: Ignore non-existent potions 2018-07-19 11:35:12 +10:00
md_5
595ec64726 SPIGOT-4049: Books lose NBT data 2018-07-19 10:12:55 +10:00
md_5
65bc676ed0 SPIGOT-4041: Fix regressed item naming 2018-07-18 17:39:04 +10:00
md_5
15036eb75b Fix changes that got lost late in development cycle 2018-07-18 14:13:20 +10:00
md_5
f18d78282d SPIGOT-4028: Improve legacy ItemStack conversion 2018-07-18 14:01:15 +10:00
md_5
404d6e776e SPIGOT-4036: Handle regular/uncoloured shulker boxes 2018-07-18 09:45:27 +10:00
md_5
8c9dea83c3 SPIGOT-4030: Improve CraftItemStack.hasItemMeta 2018-07-17 17:13:55 +10:00
Hex
1526726b57 SPIGOT-4031: Improve bounds checking in CraftInventoryView. 2018-07-16 22:47:47 -06:00
md_5
b8ea9ec844 SPIGOT-4004: Fix banner pattern colouring 2018-07-15 23:30:00 +10:00
md_5
421c1728c8 Update to Minecraft 1.13-pre7 2018-07-15 10:00:00 +10:00
md_5
61ca7d92c1 SPIGOT-3923: Defer PlayerInventory ItemStack change to 1.13 2018-05-05 08:22:40 +10:00
md_5
ca057a3457 SPIGOT-3920: Make player inventories consistently return null for empty stacks 2018-05-04 17:09:46 +10:00
md_5
21d5f75d6c SPIGOT-3908: Fix signed books incorrect defaulting to unresolved 2018-04-19 08:03:39 +10:00
md_5
bea5a842bc SPIGOT-3904: Consolidate book handling code 2018-04-16 19:19:38 +10:00
md_5
49ecc7c7a2 SPIGOT-3812: Workbench from Bukkit.createInventory does not update 2018-02-12 08:43:11 +11:00
md_5
015bda4b7d SPIGOT-2911: Implement AbstractHorseInventory 2018-01-28 09:56:55 +11:00
md_5
595eaaa8be SPIGOT-3724: Make CraftMetaSkull work reliably for player skulls 2018-01-01 12:32:48 +11:00
md_5
fb4564cc37 SPIGOT-2892: Fix some clone implementations and add unit test 2017-12-16 10:18:34 +11:00
md_5
108fc362c0 CraftMetaFirework: AssertionError -> IllegalArgumentException 2017-11-17 10:23:20 +11:00
md_5
9ab758c7b6 SPIGOT-3605: Spawn eggs not saving internal data 2017-10-09 18:32:45 +11:00
md_5
9a1f5ee80a Update to Minecraft 1.12.2 2017-09-18 20:00:00 +10:00
md_5
9e3636d82a SPIGOT-3553: Add OfflinePlayer based methods to SkullMeta 2017-09-06 16:14:37 +10:00
Jannyboy11
79e55b6dcf SPIGOT-1107: Shift clicking and delegation for custom inventories
PR #398
2017-08-18 18:54:49 +10:00
Lukas Hennig
19507baf8b Improvements to BlockStates
* Actually capture all the data of TileEntities. This is done by creating a copy of the TileEntity. The methods of BlockState which currently directly access the TileEntity reference will modify the data of that TileEntity-snapshot instead.
* With the call to BlockState.update, the captured TileEntity data gets applied to the current TileEntity in the world.
* Methods which trigger block specific actions will use the current TileEntity from the world.
* CraftBlockState does not hand out the wrapped or the snapshot TileEntity directly. Instead, it provides an applyTo method to copy the data to a given TileEntity and a method to directly get a copy of the TileEntity NBT data represented by the BlockState. CraftMetaBlockState was updated to make use of that.
* Added #getSnapshotInventory() to bukkit which allows modifiying the captured inventory snapshots of containers.
* Tried to clarify which methods only work if the BlockState is placed, which methods require the block in the world to still be of the same type (methods which trigger actions), and that .getInventory() directly modifies the inventory of the block in the world if the BlockState is placed and becomes invalid if the block type is changed.

Backwards compatibility

* If the BlockState acts as InventoryHolder, getInventory() will still return the inventory directly backed by the TileEntity in the world (like before), and not the snapshot inventory. This compromise should reduce the potential of these changes to break existing plugins, or craftbukkit's own use of BlockState.
* The snapshot's inventory can be accessed by a new method getSnapshotInventory()
* In case the BlockState is not placed (if it was retrieved from the MetaBlockState of an item), the getInventory() method will however return the snapshot inventory. So that when the BlockState gets applied back to the item, the inventory changes are properly included.
* With the changes to CraftMetaBlockState it is no longer required to call the update method before passing a modified BlockState to the CraftMetaBlockState. For backwards compatibility the update method will simply return true for a non-placed BlockState, without actually doing anything.

Impact on plugins
* Restoring blocks now actually works as expected, properly restoring the TileEntity data, reglardless if the block changed its type in the meantime.
* Plugins are now consistently required to call the update method in order to apply changes to blocks. Though, regarding the Javadoc they should have been required to do so anyways.
* New feature: Plugins can take and modify inventory snapshots.
* Breaking change: If a plugin gets the BlockState of a block in the world, modifies the inventory returned by .getInventory(), and then tries to use the same BlockState to apply the TileEntity data to an ItemStack block meta, the ItemStack will use the snapshot inventory, disregarding the changes made to the inventory returned by .getInventory(). This is the compromise of .getInventory() returning the inventory directly backed by the TileEntity in the world.

Other fixes related to BlockState:
* TileEntityContainer#getLocation() will run into a NPE if the TileEntity is non-placed (ex. when getting the BlockState from a CraftMetaBlockState).
* Beacon.getEntitiesInRange() would previously throw a NPE if called for a non-placed BlockState. It was changed to now require to be placed and use the current TileEntity in the world. If the TileEntity in the world is no longer a beacon, it will return an empty list.
* EndGateway now supports setting and getting the exit location even for non-placed EndGateways (inside BlockStateMeta) by using / returning a location with world being null.
2017-08-05 14:37:19 +10:00
md_5
2a927e8638 Update to Minecraft 1.12.1 2017-08-03 23:00:00 +10:00
md_5
9a82fa7785 SPIGOT-3428: Recover from invalid firework data 2017-07-19 09:56:35 +10:00
md_5
70be90e168 SPIGOT-3425: Correct slot type calculation 2017-07-16 11:03:19 +10:00
md_5
b5df1f59f7 SPIGOT-3423: Don't treat technical piston block as BlockStateMeta 2017-07-16 10:48:21 +10:00
BlackHole
d603539842 SPIGOT-3387: Prevent null enchantments in ItemMeta 2017-06-29 10:52:33 +10:00
md_5
477fb2bb72 SPIGOT-3381: Save older serialized enchants 2017-06-26 09:49:28 +10:00
Jeremy Wood
1314229dc2 SPIGOT-3336: HideFlags will now serialize as a List rather than a Set.
HideFlags will be serialized as a list and deserialized as an Iterable.
This will allow maximum flexibility on both the formats it can be
serialized into and formats it can be deserialized from.
2017-06-23 12:48:15 +10:00
md_5
885da43758 SPIGOT-3342: Fix invalid usage of null in InventoryWrapper 2017-06-15 20:25:06 +10:00
Pokechu22
44dd60ac27 SPIGOT-3272: Fix duplicate creative inventory
This change properly identifies the creative inventory as one with 5 crafting slots (as that's the default set in ContainerPlayer, and handled properly in other containers), instead of having the same inventory twice (which breaks slot identification).
2017-05-28 10:32:31 +10:00
md_5
1004352990 Update to Minecraft 1.12-pre5 2017-05-19 21:00:13 +10:00