Commit graph

4214 commits

Author SHA1 Message Date
EvilSeph
d23c97429f Updated version to 1.4.5-R0.2-SNAPSHOT for development towards next release. 2012-11-18 22:50:41 -05:00
EvilSeph
0f2913e30a Updated version to 1.4.5-R0.1 in pom.xml for Beta. 2012-11-18 22:40:13 -05:00
Travis Watkins
8f4cde24bd Don't add player to world if join event did it already.
On join we unconditionally add the player to the world they logged out in.
If a plugin teleports a player during PlayerJoinEvent in a way that adds
them to a world (cross-world teleport) we end up with one player in two
places. To avoid this we check to see if the player has changed worlds or
is already added to the world we have we skip adding them again.
2012-11-18 21:27:48 -05:00
EvilSeph
cc78e17312 Fix players losing experience when keepInventory is true. Fixes BUKKIT-2915 2012-11-18 17:45:29 -05:00
Travis Watkins
7ef9adc04e Fix missed rename making withers too cheaty. Fixes BUKKIT-2972 2012-11-18 16:14:08 -06:00
Travis Watkins
58636c2dd8 Don't do case lookups when we have the right case already.
This is a missed part of the original "[Bleeding] Use case from player data
for OfflinePlayer. Fixes BUKKIT-519" commit. It avoids doing (somewhat
expensive) lookups of player data to find the correct capitalization inside
getOfflinePlayers() as we're already loading their name from the player data
and thus have the correct capitalization.
2012-11-18 10:51:52 -06:00
Travis Watkins
1044c32a54 Lower compression level to avoid overloading the thread. Fixes BUKKIT-2963
When sending chunks to a player we use their writer thread to do chunk
compression to avoid blocking the main thread with this work. However,
after a teleport or respawn there are a large number of chunk packets to
process. This causes the thread to spend a long period handling compression
while we continue dumping more chunk packets on it to handle. The result of
this is a noticable delay in getting responses to commands and chat
immediately after teleporting.

Switching to a lower compression level reduces this load and makes our
behavior more like vanilla. We do, however, still give this thread more
work to do so there will likely still be some delay when comparing to
vanilla. The only way to avoid this would be to put chunk compression back
on the main thread and give everyone on the server a poorer experience
instead.
2012-11-18 09:16:50 -06:00
Karl Fritsche
028860399b Implement sound changes for Minecraft 1.4.2 changes. Fixes BUKKIT-2849 2012-11-17 15:06:18 -06:00
James Clarke
a575e6b075 Use correct itemstack for dispenser behavior chaining. Fixes BUKKIT-2886
When an event changes the item to be dispensed we check to see if the new
item has special behavior for dispensing and if so pass it on to that
behavior handler. However, we are actually checking the old itemstack and
passing the new itemstack so this check fails.
2012-11-17 15:06:18 -06:00
EdGruberman
293474d99b [Bleeding] Use case from player data for OfflinePlayer. Fixes BUKKIT-519
If a plugin looks up a player that is offline they may not know the correct
capitalization for the name. In this case they're likely to get it wrong
and since we cache the result even after the player joins the server all
future request for an OfflinePlayer will return one with incorrect case.

When looking up a player who has played on the server before we can
get the correct case from the player data file saved by the server. If
the player has never played before this point we cannot do anything and
will still have the same issue but this is not a solvable problem.
2012-11-17 15:06:18 -06:00
Travis Watkins
20c074ec6c Don't show a player on map if they're vanished. Fixes BUKKIT-1882 2012-11-17 15:06:06 -06:00
Travis Watkins
2d832bf148 Don't kick player when they travel too far. Fixes BUKKIT-2968
If a player travels past 32,000,000 blocks on the X or Z coordinates they
will be kicked for having an illegal position. On kick their player data
is saved which includes their (illegal) position. This means on join they
are immediately kicked again for the same reason and are stuck. Instead of
kicking at all in this case just teleport the player back to their previous
position just like the moved wrongly check does.
2012-11-17 15:00:14 -06:00
James Clarke
bd0868ae1e Implement API for Skeleton and Zombie types. Fixes BUKKIT-2818 2012-11-17 15:00:14 -06:00
Travis Watkins
dca54ff187 Fire BlockSpreadEvent for vine growth. Fixes BUKKIT-1097 2012-11-17 15:00:14 -06:00
Travis Watkins
0c78ce40e5 Add BlockVine.java from mc-dev for diff visibility. 2012-11-17 15:00:14 -06:00
Travis Watkins
9ab40b1ab3 Fire BlockFadeEvent when soil turns back to dirt. Fixes BUKKIT-1854 2012-11-17 14:59:41 -06:00
Travis Watkins
558411692a Don't wait for main thread when processing commands.
In order to correctly handle disconnects for invalid chat we setup a
Waitable and pass it to the main thread then wait for it to be processed.
However, commands are also chat packets and they are already on the main
thread. In this case, waiting will deadlock the server so we should just
do a normal disconnect.
2012-11-17 11:48:22 -06:00
Travis Watkins
9add7d3000 Don't create tile entity when block placement fails. Fixes BUKKIT-2924
End portals can only be placed in the end during the dragon's death.
Attempts to place them outside of this window causes the block to remove
itself. However, we still create the tile entity for the portal which
leads to exceptions spamming the console about a tile entity existing
without the appropriate block. In these cases we should not place the tile
entity at all.
2012-11-16 16:56:49 -06:00
Travis Watkins
d21c5f3871 Ignore empty custom payload packets. Fixes BUKKIT-2957 2012-11-16 16:15:41 -06:00
Wesley Wolfe
6466aa1d25 Use synchronous calls and wait for chat disconnect. Fixes BUKKIT-2946
When invalid chat is detected we currently drop the connection with no
hint as to why as anything else is not allowed while we're off the main
thread. To give valid disconnect reasons and fire proper events instead
pass these off to the main thread and wait for it to process them.
2012-11-16 15:56:13 -06:00
Travis Watkins
82c8cf4234 Update tile entity when interact event is cancelled.
If a plugin cancels a PlayerInteractEvent when left clicking a block the
client may have removed this block if they are in creative mode or if the
block breaks in a single hit. In this case, we need to update the client's
tile entity as well as telling it the block still exists.
2012-11-16 13:46:52 -06:00
Travis Watkins
6952ad1e59 Update CraftBukkit to Minecraft 1.4.5. 2012-11-16 10:13:34 -06:00
feildmaster
8e806550d7 Remove fire ticks if damage has been canceled. Fixes BUKKIT-2933 2012-11-15 19:26:39 -06:00
Travis Watkins
6149fc3e78 Don't thread single chunk compression. Fixes BUKKIT-2927
Packet 51 is used to send updates about large changes to single chunks
and to remove chunks from the client when they get out of range. In the
first case a single packet object is created and queued for all relevant
players. With our current chunk compression scheme this means the first
player to have the packet processed will start the compression and get the
packet correctly but the rest will get garbage.

Since this packet never contains much data it is better to simply handle
compression of it on the main thread like vanilla does instead of putting in
locks and dealing with their overhead and complexity.
2012-11-15 16:09:21 -06:00
Travis Watkins
e1afee008f Update tile entity on client on cancelled block break. Fixes BUKKIT-2935
When a client tries to break a block it assumes it has done so unless told
otherwise by the server. This means the client also wipes out any tile
entity data it has for the block as well. We do not send this data when
updating the client so clients lose things like text on signs, skull type,
etc when they aren't allowed to break the block.
2012-11-14 20:14:47 -06:00
Travis Watkins
df69ea8814 Rework skull dropping. Fixes BUKKIT-2930 and BUKKIT-2820
Skulls need their tile entity in order to create an item correctly when
broken unlike every other block. Instead of sprinkling special cases all
over the code just override dropNaturally for skulls to read from their
tile entity and make sure everything that wants to drop them calls this
method before removing the block. There is only one case where this wasn't
already true so we end up with much less special casing.
2012-11-14 20:14:47 -06:00
Wesley Wolfe
092800af26 Fixed some async tasks running synchronously. Fixes BUKKIT-2934
Additionally refactored cancel method to be more object-oriented.
2012-11-14 16:47:21 -06:00
Travis Watkins
c2bae0bebb Add crafting result slot for sheep breeding. Fixes BUKKIT-2926
Sheep now use the crafting system when breeding to determine what color
their baby should be. This triggers an event but the event wants the
crafting inventory to have a result slot which sheep do not have. This
event could be useful for plugins to control the output of sheep breeding
so instead of disabling it we add a result slot so the event fires without
issue.
2012-11-14 13:27:45 -06:00
Travis Watkins
188a71ad5b Clear out empty extended block ID array. Fixes BUKKIT-2923
If a chunk gets a block added to it that requires the extended block id
nibble array (block id greater than 255) the array is created and saved
with the chunk. When the blocks are verified to make sure they exist these
entries are erased but the extended block id array is not. This causes the
server and client to disagree about how much data a chunk has which makes
the client crash while trying to load the chunk for rendering.

To resolve these issues we now clear the extended block id array on chunk
load if there is no valid data in it.
2012-11-14 11:36:06 -06:00
Travis Watkins
2b22ae2d45 Potentially fix glitch with falling entities.
When a block creates a falling entity the block is not immediately removed
from the world. Instead, the falling entity is responsible for removing it
but only if the block still exists. Due to certain piston mechanics it is
possible to move the block before this check happens and thus the block is
not removed. This should be fine as the entity will kill itself in this
situation. However, the code does not stop here and continues running the
rest of the entity logic which includes either placing a block in the world
or placing a block item in the world depending on the circumstances.
2012-11-13 23:34:43 -06:00
Travis Watkins
db43197ecf Add EntityFallingBlock from mc-dev 2012-11-13 23:23:04 -06:00
Travis Watkins
5a999a2660 Correct digging behavior. Fixes BUKKIT-2780
If a block is air we return immediately so miss the cleanup work that would
normally happen in this case in vanilla. This causes us to get in to a
situation where, due to odd packet sending from the client, we never
properly stop an attempt by the client to break a block and thus it
eventually breaks.

We also use our own variable for block damage and never sync it up with the
vanilla one so damage reporting to other clients is not always correct.
2012-11-13 21:42:36 -06:00
Travis Watkins
7f7192f8fd Update CraftBukkit to Minecraft 1.4.4. 2012-11-13 16:09:52 -06:00
EvilSeph
a0c3b4f9d1 Updated version to 1.4.2-R0.3-SNAPSHOT for development towards next release. 2012-11-03 01:08:15 -04:00
EvilSeph
cc668b2f8b Updated version to 1.4.2-R0.2 in pom.xml for Beta. 2012-11-03 00:51:40 -04:00
EvilSeph
f683d5568f Migrate world data with world when switching from vanilla Minecraft to
Bukkit. Fixes BUKKIT-2816 and BUKKIT-2760
2012-11-02 21:12:02 -04:00
md_5
53d24e2b22 [Bleeding] Fix mistranslation affecting time of the server vs time of day.
Fixes BUKKIT-2797
2012-11-02 16:36:43 -04:00
Wesley Wolfe
3dd0580d50 Improved the potion test to detect missing PotionType values. 2012-11-02 00:24:11 -05:00
Travis Watkins
87d25c4cc6 Fix compile issue with chunk generation. 2012-11-02 00:12:49 -05:00
feildmaster
a4892dfa72 Delegate recreateStructures to nms provider. Fixes BUKKIT-2760
This was a miss when updating to 1.4.2
2012-11-01 21:32:28 -05:00
Wesley Wolfe
1c14586c49 Add CraftArt mappings for Wither. Fixes BUKKIT-2667.
The static assertions are not normally evaluated in the JVM, and failed
to fail when the enums went from size 25 to size 26. This meant missing
values would not be detected at runtime and instead return null,
compounding problems later. The switches should never evaluate to null
so will instead throw runtime assertion errors.

Additional unit tests were added to detect new paintings and assure they
have proper, unique mappings. The test checks both that a mapping
exists, is not null, and does not duplicate another mapping.
2012-11-01 03:06:47 -05:00
Wesley Wolfe
9a88e615d4 Change ItemFrame to actually provide a defensive copy. Fixes BUKKIT-2784
If a defensive copy is not used in the API, changes to the item are
reflected in memory, but never updated to the client. It also goes
against the general contract provided in Bukkit, where setItem should be
the only way to change the underlying item frame.
2012-11-01 01:34:54 -05:00
EvilSeph
1fb3164a96 Updated version to 1.4.2-R0.2-SNAPSHOT for development towards next release. 2012-10-31 20:51:53 -04:00
EvilSeph
b9486da5c4 Updated version to 1.4.2-R0.1 in pom.xml for Beta. 2012-10-31 15:59:34 -04:00
EvilSeph
1623bf0f9b Fire HangingBreakEvent when explosions remove hanging entities. Fixes BUKKIT-2764 2012-10-31 14:24:03 -04:00
Travis Watkins
87a1cd3d43 Add inventory and slot types for new containers. Fixes BUKKIT-2741 2012-10-31 13:25:53 -04:00
Travis Watkins
347fd3cb6e Fix NPE when blowing up an item frame. Fixes BUKKIT-2763 2012-10-31 13:09:57 -04:00
Travis Watkins
f479aa84a4 Implement API for ambient mob spawn limit. Add spawn-limit.ambient to
bukkit.yml. Adds BUKKIT-2765
2012-10-31 13:01:48 -04:00
Travis Watkins
46d7cd1e05 Use BlockCommandSender for dispatching Command block commands
Also allow commands that don't start with a / to match vanilla behavior
2012-10-31 06:37:46 -05:00
feildmaster
9e4e2c62af Expose API for managing and using GameRules. Adds BUKKIT-2757 2012-10-31 03:40:43 -04:00