summaryrefslogtreecommitdiffstats
path: root/src/main/java/net
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-7/+4
|
* 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.
* 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/+11
| | | | | | | | | | 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.
* 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-251/+296
|
* Rework EntityExplodeEvent. Fixes BUKKIT-4140. Adds BUKKIT-4141Wesley Wolfe2013-04-24-5/+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.
* 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.
* Refactor EntityDamageEvents. Adds BUKKIT-1944 & BUKKIT-3684feildmaster2013-04-10-143/+31
|
* Make auxiliary worlds use the main scoreboard. Addresses BUKKIT-3984Wesley Wolfe2013-04-04-1/+1
| | | | | | | | | | | 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.
* Implement Scoreboard API. Adds BUKKIT-3776mbax2013-04-04-29/+59
| | | | | | | | | | | | | | | | | | 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 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
|
* 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-2/+2
| | | | | | | | | 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.
* Limit hopper to valid directions. Fixes BUKKIT-3940Travis Watkins2013-03-31-1/+1
|
* Add BlockHopper from mc-dev for diff visibility.Travis Watkins2013-03-31-0/+166
|
* Include anvil result in inventory size. Fixes BUKKIT-3741Travis Watkins2013-03-30-1/+1
|
* Only call event when turning pressure plate on. Fixes BUKKIT-3881Travis Watkins2013-03-29-15/+17
|
* Special case large chests for hopper events. Fixes BUKKIT-3916Travis Watkins2013-03-29-1/+8
| | | | | | | | Large chests work in a different fashion as they are a combination of two other inventories. This causes their getOwner method to always return null as their is no correct return. To compensate for this for the hopper events we special case them to use their CraftBukkit counterpart that has the information we need for the event.
* Add Beacon block state for hopper events. Fixes BUKKIT-3932Travis Watkins2013-03-29-1/+1
|
* Call PotionSplashEvent even for no effects. Fixes BUKKIT-3618EdGruberman2013-03-28-2/+2
| | | | | | | | | | When a splash potion has no applicable effects we currently do not call PotionSplashEvent. This means plugins are unable to make custom potions with reliable splash handling as they have to relicate the functionality themselves. With this commit we simply make the event fire regardless of the effects on the potion.
* Call appropriate event for zombies igniting players. Adds BUKKIT-3915gjmcferrin@gmail.com2013-03-28-2/+12
|
* Correct missed diff on skeletons. Fixes BUKKIT-3912Travis Watkins2013-03-28-1/+1
|
* Improve calling of ProjectileHitEvent. Fixes BUKKIT-3872Andre LeBlanc2013-03-26-15/+4
|