summaryrefslogtreecommitdiffstats
path: root/src
Commit message (Collapse)AuthorAgeLines
* Fix cancellation for InventoryDragEvent. Fixes BUKKIT-4332Nate Mortensen2013-06-13-0/+2
| | | | | | | | | | | Cancelling InventoryDragEvent causes the placed items to be lost. This is because the cursor is set to the result prior to the event taking place, so the items are removed from the cursor. When the event is cancelled, the items removed from the cursor aren't placed in the inventory, and are just lost. This change sets the cursor back to the original cursor when the event is cancelled.
* Correct cancellation of InventoryClickEvent. Fixes BUKKIT-4331Nate Mortensen2013-06-13-2/+2
| | | | | | | | | | | | | Cancelling an InventoryClickEvent for a single click causes the click not to be processed by the clicked inventory. The server then doesn't correctly identify their second click as being a double click, causing an inconsistency between what the Player believes the inventory to be and what the server believes the inventory to be. This change forces an updateInventory call whenever an InventoryClickEvent whose action is NOTHING is cancelled. Both clicks are considered PICKUP_ALL, so updating the inventory after the second click fixes any inconsistencies that could arise between the client and the server.
* Fix negative damage from Zombies. Fixes BUKKIT-4193ST-DDT2013-06-13-1/+3
| | | | | | | | | | | | | | | Currently, the method used for calculating the damage of zombies is scaled to their health, but it uses the default max health rather than the real max health value. If zombies have more health than the default max health value, the amount of damage they deal becomes negative. This is caused by EntityZombie.getMaxHealth() returning a hardcoded value of 20, which is the vanilla max health for zombies. Rather than using this value when calculating zombie damage, the call is changed to instead use ((CraftLivingEntity) this.bukkitEntity).getMaxHealth(). This uses the true maximum health of the Entity. "this.maxHealth" could be used instead of the aforementioned method, however that creates a very unclear diff, and a confusing change.
* Implement PlayerBookEditEvent. Adds BUKKIT-1995Des Herriott2013-06-10-9/+32
|
* Update blaze breathe sound. Fixes BUKKIT-4286mbax2013-06-05-1/+1
|
* Fix creative ArrayIndexOutOfBoundsException. Fixes BUKKIT-4305Nate Mortensen2013-06-04-35/+31
| | | | | | | | | | | | | When a Player drops an ItemStack while in creative mode by placing it outside of their inventory window, the slot number in the packet is -1. The check that was added to avoid throwing InventoryCreativeEvent excessively didn't take this into account, and would cause an ArrayIndexOutOfBoundsException to be thrown when attempting to get the slot specified by the packet. This change shorts the invocation of player.defaultContainer.getSlot( packet107setcreativeslot.b) to only occur if the slot id is within the range of the Inventory. This prevents attempting to get the slot from a location that is actually outside of the Inventory.
* Improve events for new inventory features. Adds BUKKIT-3859riking2013-06-03-72/+326
| | | | | | | | | | | | | | | | | | | | | | | | | This commit brings the InventoryClickEvent up to date with the new Minecraft changes in 1.5. InventoryDragEvent (thanks to @YLivay for his PR) is added to represent the new "dragging" or "painting" functionality, where if you hold an itemstack and click-drag over several slots, the items will be split evenly (left click) or 1 each (right click). The ClickType enum is used to represent what the client did to trigger the event. The InventoryAction enum is reserved for future expansion, but will be used to indicate the approximate result of the action. Additionally, handling of creative inventory editing is improved with the new InventoryCreativeEvent, and handling of numberkey presses is also improved within InventoryClickEvent and CraftItemEvent. Also, cancelling a creative click now displays properly on the client. Adresses BUKKIT-3692, BUKKIT-4035, BUKKIT-3859 (new 1.5 events), BUKKIT-2659, BUKKIT-3043, BUKKIT-2659, and BUKKIT-2897 (creative click events).
* Pass correct block when dispensing empty buckets. Fixes BUKKIT-3668Travis Watkins2013-05-03-2/+2
|
* Correct event handling for dispensing filled buckets. Fixes BUKKIT-4046Travis Watkins2013-05-03-1/+1
| | | | | | | | We only go through event creation and calling when dispensing filled buckets if the bucket is able to place its liquid. However, the check for this is incorrect so the event is not called when a block liquids can destroy is in front of the dispenser. This commit fixes the check to match the checks vanilla does when actually using the bucket.
* Send block updates even when applyPhysics is false. Fixes BUKKIT-3971Des Herriott2013-05-02-3/+3
| | | | | | The CraftBlock class is setting bit 0x4 of the update flag when bit 0x2 should in fact be set here. Bit 0x2 means "do updates"; bit 0x4 means "don't do updates if the world is static, even when bit 0x2 is set".
* Fix typo/logic error in previous commitTravis Watkins2013-05-02-1/+1
|
* Fix animal spawning ignoring limits. Fixes BUKKIT-4180Travis Watkins2013-05-02-1/+10
| | | | | | | | | Minecraft 1.5.2 changed mob spawning by ignoring persistent mobs from the mob count. In CraftBukkit all mobs that previously used a separate hard coded persistence system were ported to instead use this one. This causes all animals to be persistent by default and thus never be counted. To correct this issue we consider if the mob would be considered persistent in the hard coded system as well when deciding if a mob should count.
* Improve InventoryCloseEvent handling. Fixes BUKKIT-3286Travis Watkins2013-05-02-12/+18
| | | | | | | | | | Currently there are several cases where a player will have their inventory screen closed client side but we will not call an event. To correct this we call the event when the server is the cause of the inventory closing instead of just when the client is the cause. We also ensure the server is closing the inventory reliably so we get the events. Additionally this commit also calls the event when a player disconnects which will handle kicks, quits, and server shutdown.
* Move world generator warning to CraftBukkit. Fixes BUKKIT-2565Score_Under2013-04-30-1/+4
|
* Always process movement for vehicles and passengers. Fixes BUKKIT-4142Travis Watkins2013-04-30-1/+1
| | | | | | | | | As an optimization we don't do any movement processing on entities that have not moved. However, players in minecarts trigger this condition when the minecart is moving on its own. This causes issues with things that rely on player collision like tripwires. To correct this and any future related issues we always handle movement for passengers and their vehicles even if one of the two hasn't moved since they are linked.
* Revert "Add delay to hopper even if it doesn't do anything."Travis Watkins2013-04-27-4/+1
| | | | This reverts commit f5388e8f94e2cbab76c2255fd872c289e83100a0.
* Fix things using wall time running too fast. Fixes BUKKIT-4155Travis Watkins2013-04-27-154/+4
| | | | | | | | | | | | | | When converting things in Minecraft to use wall time instead of ticks I realized we'd run into integer division rounding issues and could have updates that end up counting as zero ticks. To compensate for this the code ensures we always process at least one tick. However, every time we end up with zero ticks the next time we have an extra tick due to rounding the other way with the leftovers. This means we are going far too fast and should not have this at least one tick logic at all. On top of this some potions rely on the number of ticks they run and not just the amount of time they last and so potions were put back to running with ticks entirely.
* Update CraftBukkit to Minecraft 1.5.2Travis Watkins2013-04-27-265/+314
|
* Rework EntityExplodeEvent. Fixes BUKKIT-4140. Adds BUKKIT-4141Wesley Wolfe2013-04-24-22/+24
|
* Don't do physics updates in world generation. Fixes BUKKIT-3747Travis Watkins2013-04-16-1/+7
|
* Validate chunk data array lengths. Fixes BUKKIT-4093Mike Primm2013-04-15-5/+27
| | | | | | | If a chunk has somehow managed to save with arrays that are not 4096 entries long when reading them again we will get exceptions. Checking the array length and resizing if needed is cheap so we should do this to help avoid crashing servers due to this error.
* When moving a misplaced chunk move tile entities too. Fixes BUKKIT-4092Travis Watkins2013-04-15-0/+14
| | | | | | | | | | | | | | | | | | When a chunk is being loaded the server checks to ensure the chunk's idea of where it is located matches where it was located in the region file. If these two values do not match the chunk's idea of its position is updated and the chunk is reloaded. In vanilla minecraft this loading involves the chunk's tile entities as well. With the change to loading player chunks asynchronously we split loading tile entities to a separate step that takes place after this check. Because of this tile entities are loaded with invalid locations that result in trying to fetch block data from negative or too large positions in the chunk's internal block storage arrays. Because loading the tile entities is not thread safe we cannot return to vanilla behavior here. Instead when we detect a misplaced chunk we just edit the NBT data for the chunk to relocate the tile entities. This results in them moving correctly with the chunk without having to actually load them first.
* Make Slimes fire EntityTarget events. Fixes BUKKIT-1408GJ2013-04-15-2/+23
|
* Don't apply fall damage when cancelled. Fixes BUKKIT-4065Travis Watkins2013-04-13-5/+7
|
* Add delay to hopper even if it doesn't do anything. Fixes BUKKIT-4061Travis Watkins2013-04-13-1/+4
| | | | | | | | If a hopper is unable to perform any action during a tick it attempts to do so every tick from then on. Once it is able to do so it then sets a delay before attempting to do something again. To avoid excessive CPU usage for hoppers sitting idle we now apply this delay regardless of the success of the action.
* Perform anvil calculations when using 1.5 drop feature.riking2013-04-13-1/+1
| | | | | | When using the new feature in 1.5 to drop the item in any highlighted slot, the anvil result slot does not apply the full anvil calculation that picking up the item does, including the experience calculation.
* Use wall time instead of ticks for several things. Fixes BUKKIT-4059Travis Watkins2013-04-13-17/+37
| | | | | | | | | | | | | | | | | | | | | | | | Currently furnace smelting and the item pickup delay timer use wall time (aka actual time passed) to emulate a constant tick rate so run at the same speed regardless of the server's actual tick rate. There are several other places this makes sense so this commit converts them. The item despawn timer is converted so now always takes 5 minutes. Users know this 5 minute number well so keeping this constant helps to avoid confusion. This also helps alleviate lag because if a large number of item drops is the reason your server is running slowly having them stay around longer just means your server is slow longer. Potion brewing and the zombie villager conversion timer are now constant. These match the furnace criteria of being useful for hiding lag and not having a detrimental effect on gameplay. Potion effects are now also using wall time. The client is told about effect times in ticks and displays this information to the user as minutes and seconds assuming a solid 20 ticks per second. The server does have code for updating the client with the current time remaining to help avoid skew due to differing tick rates but making this a constant makes sense due to this display.
* Add MobEffect from mc-dev for diff visibilityTravis Watkins2013-04-13-0/+143
|
* Various minor performance improvementsTravis Watkins2013-04-13-2/+15
| | | | | | | | | | | | | | | | | | | | | | | | | | | Add a check to avoid doing movement work if an entity doesn't move. This usually will not ever happen in the current server but is useful when it does and will be more useful in the future. Only process mob on mob (non-player) collisions every other tick. Players tend to pack a lot of mobs into a small space (sheep farm, mob grinder, etc) so they do a lot of work processing collisions. To help alleviate some of this we only run these calculations every other tick. This has no visible effect on the client but can be a huge win on the server depending on circumstances. Use generic entity inWater checking for squids. Squids have their own logic currently for determining if they are in water. This check is almost identical to the generic entity checking which is run anyway. To avoid doing duplicate work we just remove the squid version. This does not have any noticeable effect on gameplay since the checks are so similar. Use HashSet for tile entities instead of ArrayList. Using an ArrayList for storing tile entities in a world means we have very expensive inserts and removes that aren't at the end of the array due to the array copy this causes. This is most noticeable during chunk unload when a large number of tile entities are removed from the world at once. Using a HashSet here uses a little more memory but is O(1) for all operations so removes this bottleneck.
* Correct vehicle movement issues. Fixes BUKKIT-2993, BUKKIT-4056Travis Watkins2013-04-13-4/+8
| | | | | | | | | | | | | | When a player comes into range of an entity in a vehicle they will often be sent the spawn packet for the rider before receiving one for the vehicle. This causes the attachment packet to fail client side because it attempts to attach the rider to a vehicle that doesn't exist on the client. To correct this we account for both possible orderings and send the attachment packet appropriately. Vanilla also sends an new attach packet every 60 ticks even if the vehicle has not changed. As this packet is a toggle this resulting in players teleporting around randomly. Since we handle attachments properly now we simply revert this section to use the 1.4 logic.
* Fetch tile entities from chunks instead of world. Fixes BUKKIT-4055Travis Watkins2013-04-13-9/+19
| | | | | | | | | | | | | When looking up tile entities for a chunk to send to a player we currently loop through every tile entity in the world checking if it is within the bounds of the relevant chunk. Instead of doing this we can just use the tile entities list stored in the chunk to avoid this costly searching. As a further optimization, we also modify the generic range-based lookup to use chunks as well. For most lookups this will give a smaller search pool which will result in faster lookups. Thanks to @mikeprimm for the idea and most of the implementation.
* Boats can only die once.Travis Watkins2013-04-13-1/+1
| | | | | | In certain scenarios a boat can be killed multiple ways in a single tick. Due to improper guards this can cause the death code to run multiple times creating item drops. To correct this we insert the appropriate death check.
* Check connection status before setting scoreboard. Fixes BUKKIT-4064Wesley Wolfe2013-04-12-0/+8
| | | | | | | | | Two connection status checks were added to setting a scoreboard for a player. The first checks to see if a player has logged in yet, which implicates the ability to receive packets. The second checks to affirm that the CraftPlayer reference is still to a logged in player; setting it while not logged in would maintain a stale player reference in the scoreboard manager.
* Change perspective of team checking. Fixes BUKKIT-4044Wesley Wolfe2013-04-11-9/+10
| | | | | | The method's return value was being incorrectly calculated from the perspective of this.canHurt(that), where it's actually used from the this.canBeHurtBy(that) perspective.
* Use correct method for getting player's team. Fixes BUKKIT-4050Wesley Wolfe2013-04-11-1/+1
| | | | | | | The method getTeam gets the team from name of, as opposed to getting the team a player belongs to. This also addresses BUKKIT-4002 and partially BUKKIT-4044
* Refactor EntityDamageEvents. Adds BUKKIT-1944 & BUKKIT-3684feildmaster2013-04-10-155/+116
|
* Make auxiliary worlds use the main scoreboard. Addresses BUKKIT-3984Wesley Wolfe2013-04-04-2/+3
| | | | | | | | | | | When a world is created using our API, it does not use secondary world server and will maintain a reference to its own scoreboard. In vanilla, this is not an issue as there is only ever one world. Similarly to maps, an overwrite to the scoreboard reference has been added for when another world has been created. This should also address BUKKIT-3982 and BUKKIT-3985
* Handle large chests correctly for hopper events. Fixes BUKKIT-3979Travis Watkins2013-04-04-2/+16
| | | | | | | In commit 7710efc5f9 we corrected the handling of large chests as the destination for hoppers moving items but did not apply the same fix for large chests being the source or for droppers. This commit updates these to have the same fix.
* We compile for 1.5Wesley Wolfe2013-04-04-3/+0
|
* Implement Scoreboard API. Adds BUKKIT-3776mbax2013-04-04-32/+756
| | | | | | | | | | | | | | | | | | This implementation facilitates the correspondence of the Bukkit Scoreboard API to the internal minecraft implementation. When the first scoreboard is loaded, the scoreboard manager will be created. It uses the newly added WeakCollection for handling plugin scoreboard references to update the respective objectives. When a scoreboard contains no more active references, it should be garbage collected. An active reference can be held by a still registered objective, team, and transitively a score for a still registered objective. An internal reference will also be kept if a player's specific scoreboard has been set, and will remain persistent until that player logs out. A player's specific scoreboard becomes the scoreboard used when determining team structure for the player's attacking damage and the player's vision.
* Add a WeakCollection utility class.Wesley Wolfe2013-04-04-0/+173
| | | | | | | | | | This class is designed to be an invisible layer between a normal collection, and one that silently loses entries because they are only weakly referencable. Some operations have additional overhead to be semantically correct, but it maintains the equals contract for all entries, as opposed to identity. It does not support the equals or hash code method as it cannot easily have the transitive and commutative properties.
* Add ScoreboardServer from mc-dev for diff visibilitymbax2013-04-04-0/+204
|
* Add missing calls to BlockRedstoneEvent. Adds BUKKIT-3926gjmcferrin@gmail.com2013-04-03-0/+27
| | | | | | | This adds calls to BlockRedstoneEvent for the new daylight sensor and trapped chest blocks. Note that the redstone level for trapped chests cannot be modified, as it is based on the number of players currently viewing the chest's inventory.
* Add BlockDaylightDetector from mc-dev for diff visibilitygjmcferrin@gmail.com2013-04-03-0/+71
|
* Properly return contents of Inventory. Fixes BUKKIT-3930h31ix2013-04-02-1/+2
| | | | | | When an array of an inventory's contents is requested, we loop through the contents of the NMS inventory's ItemStacks in order to return Bukkit ItemStacks that can be used through the API. However, the NMS ItemStack can, in some cases, be larger than the physical size of the inventory. Using the size of the NMS array as a limit on the loop that follows can result in an ArrayIndexOutOfBoundsException because the Bukkit array's length is the actual size of the inventory, and thus will be smaller. With this commit we use the smaller of the two arrays' length as the limit in the loop, thus eliminating the possibility that the smaller array will be asked for an index higher than its length.
* Set world on fixed tile entity to avoid NPE. Addresses BUKKIT-3949Travis Watkins2013-04-01-0/+1
|
* Fix mismatched tile entities for new blocks. Fixes BUKKIT-3949Travis Watkins2013-03-31-0/+16
|
* Don't update physics when block place is cancelled. Fixes BUKKIT-3939Travis Watkins2013-03-31-25/+29
| | | | | | | | | When a block placement happens we currently update physics on the attempted placement and update again if the placement is cancelled. To correct the first one we simply set the block without applying physics. To correct the second we have to add a new method to BlockState that lets us update without applying physics and use this method method when putting the block back.
* Correct slot types for brewing stand. Fixes BUKKIT-3937Travis Watkins2013-03-31-1/+1
|
* Throw exception for disabled plugin tasks. Fixes BUKKIT-3951Wesley Wolfe2013-03-31-0/+4
| | | | | | | | | | | Without this check, any non-null reference to a plugin is considered 'valid' for registering a task in the scheduler. This is obviously unintentional behavior and has been changed to throw an IllegalPluginAccessException. It is now consistent with the SimplePluginManager event registration contract. This in affect also addresses BUKKIT-3950 for uninitialized plugin references (ones without a description).