255 Commits

Author SHA1 Message Date
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
md_5
45102fcf28 Misc advancement / recipe reload fixes including SPIGOT-3240 2017-05-16 21:22:07 +10:00
md_5
5195487ec6 Update to Minecraft 1.12-pre2 2017-05-14 12:00:00 +10:00
md_5
6e3cec8bc7 Change book limit to allow for automatically generated colour codes 2017-05-14 11:19:38 +10:00
md_5
fecf4b4137 SPIGOT-3214: Allow book titles up to 32 even though they can't be created by a Vanilla client. 2017-04-30 13:20:43 +10:00
md_5
28d993ccec Skip invalid enchants in CraftMetaItem 2017-04-26 15:45:52 +10:00
Senmori
c19c2932bf Create NBT TypeId helper class 2017-04-22 15:50:30 +10:00
md_5
4acd0f49e0 Enforce proper limits on books. 2017-04-20 21:45:42 +10:00
Lukas Hennig
e04a1793ae Inventory getContents Cleanup 2017-04-17 18:09:15 +10:00
md_5
962ffda1a8 Add more notch inventory conversions 2017-03-10 20:03:31 +11:00
md_5
d6aa73d16c SPIGOT-3114: Initialize custom SHULKER_BOX slots 2017-03-10 20:01:31 +11:00
md_5
4316a8c246 SPIGOT-3110: SHULKER_BOX InventoryType 2017-03-08 17:56:08 +11:00
md_5
7fce67144d SPIGOT-3108: Hack around mirroring empty item stacks 2017-03-08 14:35:34 +11:00
md_5
4448a7efa4 SPIGOT-3068: API for localized item names 2017-02-16 11:49:46 +11:00
md_5
775f1e1f7f SPIGOT-3003: Fix custom dropper / beacons. 2017-01-11 09:53:16 +11:00
md_5
613be0d841 SPIGOT-2980: Improve SpawnEgg NBT application and ItemStack conversion. 2017-01-02 16:13:25 +11:00
md_5
a6d8fa2eac Recover spawn egg data from UNSPECIFIC meta. 2017-01-02 15:29:11 +11:00
md_5
5715b3a6d9 SPIGOT-2977: Pass setAmount(0) through to wrapped ItemStack.
This class needs to be rewritten with more consistent semantics and alignment with Minecraft losing null, but that is probably a job for 1.12
2017-01-02 10:04:19 +11:00
md_5
0fa1ad23ed SPIGOT-2894: Preserve unreadable spawn egg data in memory 2016-12-07 10:44:57 +11:00
Matthew
04202c0ace SPIGOT-1592: Implement ItemMeta for Spawn Eggs
The Minecraft implementation of spawn eggs is able to construct an entity using all data that is present in the save format, however since the Bukkit API has no such way to construct an entity unattached to a world, and it appears creating such a way is a very challenging task, the decision was instead made to add this API now that 1.11 has entities which may not be represented by data values.
In the future it may be possible to implement a more expanded API cognate with this one.
2016-12-06 21:15:34 +11:00
Jacob Martin
b64d852496 #326: Convert BlockMeta to handle older serialized items. 2016-12-03 10:58:18 +11:00
md_5
b6ad714e85 SPIGOT-2871: Improve BlockStates + BlockStateMeta 2016-12-02 09:29:33 +11:00
Xor Boole
eb6c1bf31a Add some expansions to Anvil Inventory API 2016-11-30 16:40:40 +11:00
md_5
ad0e4b31bf SPIGOT-2850: NPE in CraftInventoryCrafting 2016-11-27 17:03:28 +11:00
md_5
b5b0a97d44 SPIGOT-2822: Droppers are droppers 2016-11-22 20:21:19 +11:00
md_5
a64b99c95a Add Unbreakable to ItemMeta 2016-11-22 14:35:54 +11:00
md_5
6220b5c542 SPIGOT-2817: Custom Merchant title omits color 2016-11-22 10:30:01 +11:00
Lukas Hennig
0b154b1852 SPIGOT-2272: Add API for virtual Merchants 2016-11-21 15:29:36 +11:00
md_5
0f7c385941 SPIGOT-2801: Missing break in CraftMetaBlockState 2016-11-19 21:11:54 +11:00
md_5
1d01e41570 SPIGOT-2798: Fix ShulkerBox BlockStateMeta 2016-11-19 15:59:04 +11:00
md_5
93b8244115 SPIGOT-2787: Keep performing getter null conversion at call sites 2016-11-18 11:07:02 +11:00
md_5
4f63973ebb SPIGOT-2782: Custom Colors for Potions 2016-11-18 09:49:54 +11:00
md_5
d8c6364c4c Remove more redundant code 2016-11-18 09:28:11 +11:00
md_5
162e961326 SPIGOT-2772, SPIGOT-2780: Improve empty ItemStack handling 2016-11-18 09:04:07 +11:00
md_5
0dedba43d1 SPIGOT-2773: More fully implement ShulkerBox meta 2016-11-18 08:50:38 +11:00
md_5
54450b727e SPIGOT-2768: Fully implement map color 2016-11-17 17:32:50 +11:00