Commit Graph

1808 Commits

Author SHA1 Message Date
Wesley Wolfe
3307d489da Fix Future task waiting logic. Fixes BUKKIT-2408
Previously, the timeout would erroneously get converted to milliseconds
twice. The second conversion was removed.

Spurious wakeups were not handled properly, and would instead throw a
TimeoutException even if the waited time was not reached..
2012-08-26 10:25:11 -05:00
feildmaster
cb84d6b994 Fix empty chunks not sending biome properly and causing client side issues. Fixes BUKKIT-2396 2012-08-25 08:59:33 -05:00
Travis Watkins
b8cc862083 Update to 1.3.2 2012-08-25 00:54:21 -04:00
feildmaster
35cff16da5 Fix EmptyChunk's not sending to the Client correctly. Fixes BUKKIT-2206 2012-08-23 14:58:23 -05:00
Wesley Wolfe
dcd01bf0c0 Rewrite scheduler. Fixes BUKKIT-1831, and BUKKIT-845
The new scheduler uses a non-blocking methodology. Combining volatile
references to make a linked reference chain, with the atomic reference
handling the tail, tasks are queued without waiting for locks. The main
thread will no longer limit the length of time spend for scheduled tasks,
but no task will run twice in the same tick. Scheduling a new task inside of
a synchronous task will always run the new task during the same tick,
assuming there is no supplied delay > 0.

Asynchronous tasks are now run using a thread pool. Any thread-local
implemenation should now account for threads being reused between
executions.

Race conditions were carefully examined and the order of logic is now very
important. Each task is placed in a secondary collection before removal from
primary collections. Thus, by reading tasks from the collections in the same
order they travel, it retains state-safety. This does make modifications
less responsive in some situations, as the task may be transitioning before
the modifier accesses it. This cost outweighs the requirement to synchronize
on the scheduler; previously any conflict would be first-come-first-serve,
with the main thread backing out arbitrarily.
2012-08-22 16:41:46 -05:00
feildmaster
8fdb006143 Use constant Player for EnderPearls
Also make sure players are online before proceeding to each event
2012-08-22 14:32:10 -05:00
feildmaster
98c98d0f7a Fix entities not having valid "isValid" states. Addresses BUKKIT-2366 2012-08-22 14:16:51 -05:00
V10lator
e3ae188ed2 Fix instances where Signs have null lines. Addresses BUKKIT-684 2012-08-21 20:17:29 -05:00
EdGruberman
450edc3004 Use standard format function to format logs. Addresses BUKKIT-2246
Also fix "excess" Log Levels.
2012-08-21 19:17:29 -05:00
feildmaster
161ab5edc6 Implement API for Sound, and playing the sounds for Worlds and Players. Adds BUKKIT-1430, BUKKIT-1226 and BUKKIT-2019 2012-08-21 19:13:19 -05:00
Travis Watkins
ccc760d629 Use a dynamic pool size for the iterator cache
Many codepaths only end up with one iterator being used at a time and
most of the rest only get up to two being used so using a static pool of
three is wasteful. This also allows us to efficiently handle cases that
exceed 3 iterators in use. Overall this dramatically increases the hit rate
and results in less iterators being created.
2012-08-20 18:44:07 -05:00
feildmaster
e7e643d83a Implement API to retrieve and open EnderChests. Adds BUKKIT-2016 2012-08-20 16:00:53 -05:00
Travis Watkins
feb0327d22 Check unload queue so we don't accidentally leave a chunk loaded 2012-08-19 16:06:14 -05:00
Mike Primm
7dde6cc566 [Bleeding] Stub out MethodProfiler class
Instead of trying to track down every place this class is used we can
simply stub out the entire class so it has no extra overhead.
2012-08-19 09:51:09 -05:00
Mike Primm
e079d9457e [Bleeding] Strip out unused HashSet in IntHashMap 2012-08-19 09:51:07 -05:00
Mike Primm
eaa3154b0e [Bleeding] Cache packet ID instead of doing lookups each time it is needed 2012-08-19 09:51:04 -05:00
Mike Primm
627cf2ef8b [Bleeding] Remove redundant chunkList from ChunkProviderServer
This ArrayList duplicates part of the functionality of the much more
efficient chunk map so can be removed as the map can be used in the few
places this was needed.
2012-08-19 09:51:00 -05:00
Travis Watkins
97ac0a3f14 Add LongObjectHashMap and LongHashSet
Replace uses of LongHashtable and LongHashset with new implementations.
Remove EntryBase, LongBaseHashtable, LongHashset, and LongHashtable as they
are no longer used.

LongObjectHashMap does not use Entry or EntryBase classes internally for
storage so has much lower object churn and greater performance. LongHashSet
is not as much of performance win for our use case but for general use is
up to seventeen times faster than the old implementation and is in fact
faster than alternatives from "high performance" java libraries. This is
being added so that if someone tries to use it in the future in a place
unrelated to its current use they don't accidentally end up with something
slower than the Java collections HashSet implementation.
2012-08-19 09:51:00 -05:00
Travis Watkins
7b20caf8fe Use TrigMath in hotspots
Use our implementation of atan2 in AI routines as profiling shows these are
hotspots and (for these cases) our implementation is much faster.
2012-08-19 09:51:00 -05:00
Mike Primm
8219081385 [Bleeding] Change Vec3DPool to a stack based pool
Avoid overhead of using an ArrayList and resizing it. Also allows for reuse
of objects in the pool during the same tick by explicitly releasing them
back to the pool. This allows for much better cache performance as well
as reduced cache footprint.
2012-08-19 09:50:57 -05:00
Travis Watkins
d628c886d2 Optimize entity AI goal selector
Remove redundant ArrayList to avoid excessive object creation and CPU
overhead, the entries are added to the list then immediately iterated through
to run so just run them directly.

Swap order of some conditionals to perform the more efficient check first
as if it fails the list lookup will not be executed.

Remove profiling hooks including some rather expensive calls to getSimpleName.
2012-08-19 09:50:57 -05:00
Travis Watkins
858d36efc9 Add iterator cache to UnsafeList and use it in hotspots
Adds a specialized iterator for the list and a pool of iterators to avoid
object churn. Also optimizes the clear() method to reduce object creation.
2012-08-19 09:50:57 -05:00
Mike Primm
6d777ade16 [Bleeding] Optimize chunk loading
ChunkSection.e() is called once per chunk section loaded and is quite
expensive (about 20% of CPU time for loading the chunk). This changes the
logic to add a fast path when extended block data is not being used and
reorganizes the loops for more optimal array traversal. Overall this saves
about 20-30% CPU time in this method.
2012-08-19 09:50:45 -05:00
Mike Primm
852602e430 Add files from mc-dev for diff visibility 2012-08-19 09:19:28 -05:00
Mike Primm
5254993510 Fix issues with chunk saving. Fixes BUKKIT-2158, BUKKIT-2018 and BUKKIT-2229 2012-08-19 08:36:47 -04:00
Wesley Wolfe
cacfc71b46 Add more detailed CrashReport for CraftBukkit. Addresses BUKKIT-2319 2012-08-17 23:18:22 -05:00
Wesley Wolfe
acedd049c5 Add CrashReport for diff visiblity 2012-08-17 22:22:20 -05:00
John Driscoll
0bde47a173 Don't extend pistons until data is set. Fixes BUKKIT-2153 2012-08-17 17:06:46 -05:00
Wesley Wolfe
050a9276bc Removed unneeded mc-dev imports. Fixes BUKKIT-682 2012-08-17 16:37:53 -05:00
Travis Watkins
add387dee3 Call PlayerQuitEvent in correct location. Fixes BUKKIT-2193 2012-08-15 12:22:52 -05:00
feildmaster
fc35d000e4 Use correct SlotType's for merchants. Fixes BUKKIT-2257 2012-08-15 06:00:55 -05:00
feildmaster
b059962a5c Implement methods for spawning FallingBlocks and add various FallingBlock methods. Adds BUKKIT-2282 2012-08-14 07:38:23 -05:00
feildmaster
8748c8c757 Enable hardcore support. Fixes BUKKIT-2259
- Hardcore requires a newly generated world
- You will be banned if you die in a hardcore world
- You will NOT be banned if you die in a non-vanilla world
- Your "heart container" will not change without logging back in. (Vanilla bug)
2012-08-12 16:50:00 -05:00
feildmaster
aa92f0e313 Update CreatureSpawner.setSpawnedType(EntityType) to 1.3
They can spawn any valid entities now. What is a "valid" entity? A "valid" entity is an EntityType with a non-null getName(). (for example: PRIMED_TNT, FALLING_BLOCK)
2012-08-12 14:11:36 -05:00
feildmaster
bfc5189818 Fix "block update packet" not being sent to the correct world. Fixes BUKKIT-2023 2012-08-12 14:11:34 -05:00
Wesley Wolfe
342f9c3bd3 Implement player speed API. Addresses BUKKIT-2205 2012-08-10 00:00:04 -05:00
Wesley Wolfe
77cda7e715 Add PlayerAbilities for diff visibility 2012-08-09 23:16:19 -05:00
feildmaster
27c1c85adb Implement BlockBreakEvent block experience. Adds BUKKIT-2033 2012-08-08 19:49:10 -05:00
feildmaster
8d946b88b3 Add BlockMobSpawner and BlockOre for diff visibility 2012-08-08 19:49:08 -05:00
Wesley Wolfe
a16e0b6323 Change socket traffic class try-catch. Fixes BUKKIT-2093 2012-08-08 07:00:41 -05:00
Wesley Wolfe
25fe93479f Restore port to the hostname. Fixes BUKKIT-2124 2012-08-08 07:00:29 -05:00
EvilSeph
24809ef986 Re-add support for full chunk saving so the server save-alls on stop. Fixes BUKKIT-2158 2012-08-08 03:08:46 -04:00
EvilSeph
a133bc7182 Make periodic chunk saving less aggressive and fixed double player data saving. Fixes BUKKIT-1994 and fixes BUKKIT-2144 2012-08-07 18:52:53 -04:00
Wesley Wolfe
2bb7a5f94d Implement new deprecated warning state configuration option 2012-08-06 23:52:49 -05:00
Travis Watkins
bfbdbbd05c Tripwire isn't redstone, only fire interact events. 2012-08-06 19:47:22 -05:00
Travis Watkins
7a3dfecba0 Don't force chunks to load again, causes chunk leaks with multiworld. 2012-08-06 17:31:03 -05:00
Wesley Wolfe
0792b15887 Pistons no longer extend before they are pistons. Fixes BUKKIT-1999 2012-08-06 09:55:38 -05:00
feildmaster
59aaa6a80a Fix dispenser removing data from items. Fixes BUKKIT-2045 2012-08-06 09:09:05 -05:00
THDigi
7dc47892a4 Don't rotate ShapedRecipes. Fixes BUKKIT-1334
ShapedRecipe's getShape() always returns a 90deg rotated shape of the original shape, this commit fixes it.
2012-08-06 07:11:35 -05:00
Travis Watkins
164c066453 Fix "moved too quickly" detection. 2012-08-05 23:57:22 -05:00
Travis Watkins
e1a4273957 Fire events for tripwire and hooks. 2012-08-05 23:57:22 -05:00
Travis Watkins
982efb8c24 Add BlockTripwire and BlockTripwireHook from mc-dev for diff visibility. 2012-08-05 23:57:22 -05:00
Travis Watkins
304cb019e4 Fire EntityDeathEvent for pigs. Fixes BUKKIT-2100 2012-08-05 23:57:22 -05:00
Wesley Wolfe
9cccb1c89e Fix Vec3DPool; don't pool objects indefinitely or O(n^2) clear() 2012-08-05 21:36:25 -05:00
Wesley Wolfe
f5777cc0b7 Add Vec3DPool for diff visibility 2012-08-05 21:36:09 -05:00
Wesley Wolfe
44234c47ce Cease execution if block is AIR. Fixes BUKKIT-2104 2012-08-05 21:32:01 -05:00
Travis Watkins
a574ec54cc Put forceChunkLoad back to its original value. 2012-08-05 20:03:12 -05:00
Travis Watkins
beb71069b7 Don't use Packet56 and clear client cache on world changes. 2012-08-05 18:42:03 -05:00
Wesley Wolfe
0e013fa4b0 Fixed PlayerManager ConcurrentModificationExceptions. Fixes BUKKIT-1972 2012-08-04 22:12:16 -05:00
Wesley Wolfe
9804665fec Fix bounding box pool to use a dynamic cache size
Also changed insane array copy routine. This should reduce server lag
spikes that occur periodically.
2012-08-04 21:11:28 -05:00
Wesley Wolfe
14a470985d Add AABBPool for diff visibility 2012-08-04 21:06:17 -05:00
Travis Watkins
e5acb6cf3a Don't tick chunks or entities on chunks that are queued for unload.
Treat chunks in the unload queue as if they are already unloaded to prevent
processing on them removing them from the unload queue and leaking.
2012-08-04 18:08:26 -05:00
Travis Watkins
fdd01feb8c Avoid CME when lightning strikes by making a copy. Fixes BUKKIT-2055 2012-08-04 18:02:30 -05:00
Wesley Wolfe
a5da834258 Fix chat not being cancellable when not using deprecated API. 2012-08-04 05:44:23 -05:00
feildmaster
9bed5272d3 Re-implement code missing from leaving the end. Fixes BUKKIT-2003 2012-08-04 04:11:21 -05:00
feildmaster
823e3fb0c6 Correctly detect invalid PistonExtension's to allow removal of StickyPistons. Fixes BUKKIT-2059 2012-08-04 04:10:55 -05:00
feildmaster
ab8b7c7e33 Potentially fix chunk leaking, needs further examination 2012-08-04 01:43:17 -05:00
Steve Anton
f90bd7e7cc Fix PlayerBucketEmptyEvent handling. Fixes BUKKIT-2002 and fixes BUKKIT-1997
The method this.a(world, d0, d1, d2, i, j, k) is responsible for
actually placing the lava or water source block in the world. The event
is currently called after this method, thus canceling the event will
cause the player to keep their water/lava bucket but the water/lava will
still appear where they attempted to place it.

In addition, the check for whether a player has creative inventory is
short circuiting before the event fires, so the event will not be called
for these players.

This moves the event call and cancelled check above these two calls to
ensure it always fires and the results of it are honored.

Closes GH-835.
2012-08-03 23:44:45 -05:00
Wesley Wolfe
02d6703da7 Implement new AsyncPlayerChatEvent. Addresses BUKKIT-2064
Added two utility collections for use with PlayerChatEvents allowing lazier
initialization of events and less need to synchronize against the player
list.

Provided a hidden queue system for similar logic to pre-1.3 chat. When a
plugin is listening for the deprecated PlayerChatEvent, all chat will be
delayed to be mirror executed from the main thread. All developers are
encouraged to immediately update to the developmental Bukkit chat API as a
minimum transition for server stability.

Additionally, changes were required to bring thread-safety to the flow
logic. CopyOnWriteArrayList is the only viable means to produce thread
safety with minimal diff; using a sane pre-implemented collection would
require reworking of sections of NMS logic.

As a minor change, implemented expected functionality for
PlayerCommandPreProcessEvent. Setting the player should now change the
player executing the command.
2012-08-03 23:44:45 -05:00
Travis Watkins
4942f5184a Don't merge items with enchantments. Fixes BUKKIT-2050 2012-08-03 19:30:04 -05:00
feildmaster
8834d1423e Fix 1.3 changes that prevent nether and the_end to save level data. 2012-08-03 18:58:47 -05:00
md_5
07794300d0 [Bleeding] Fire inventory close event. Fixes BUKKIT-2036 2012-08-03 02:41:48 -05:00
Mike Primm
fe8fc6b90e Process entity ticks on worlds without players. Fixes BUKKIT-2031
Both the CB 1.3.1 code, and vanilla 1.3.1 code, have modified the
behavior of entity tick processing in a way that can lead to disabling
of entity cleanup. Specifically, the tickEntities() call in n.m.s.World,
which processes both the entity cleanup (removing from the world entity
list) and tile entity tick processing (furnaces and such) does not get
called by n.m.s.MinecraftServer's q() method (which drives tick
processing calls in general) when no players are on the given world.
This causes a serious memory leak when automation processes, like dynmap
mapping, load and unload chunks - as entities on unloaded chunks are
only cleaned up during entity tick processing. It also will cause issues
with any mods that use persistent chunk loading (that is, keeping chunks
loaded so that tile entities will continue being processed), since such
processing will no longer function without at least one player on the
given world.

In any case, the tickEntities() call should be called in the same
fashion as under 1.2.x (each tick, independent of player population, as
opposed to being suspended indefinitely when no players are on the given
world). The specific memory leak observed, with removing the unloaded
entites from the world, requires this call be made regularly (or, at
least, whenever the entity unload queue (world.g) is not empty.

Closes GH-832
2012-08-03 01:19:10 -05:00
Travis Watkins
f5794937a9 Print short message on exception to avoid spamming console. Fixes BUKKIT-2018 2012-08-03 01:04:16 -05:00
Travis Watkins
dcf83bc1b5 Restore configurable connection throttle. 2012-08-03 01:04:10 -05:00
Travis Watkins
e156354a60 Add DedicatedServerConnectionThread from mc-dev for diff visibility. 2012-08-03 00:48:07 -05:00
EvilSeph
d5fea5fd0d Fixed translation issue breaking custom world generation. Fixes BUKKIT-1975 2012-08-02 23:47:41 -04:00
Mike Primm
c711827e94 Fix mapping of ChunkSection nibble data to snapshot. Fixes BUKKIT-1977 2012-08-02 21:45:54 -05:00
Luke Granger-Brown
35a3d701a9 Add trailing / to BukkitDL URLs. Fixes BUKKIT-2015.
Also adds CraftBukkit version number to user agent when communicating with
BukkitDL.
2012-08-02 21:38:32 -05:00
Travis Watkins
8dc52123bf Fix dispenser event handling 2012-08-02 17:55:13 -05:00
feildmaster
d18972eca2 Fix Nether and The End having the same world names. 2012-08-02 11:02:14 -05:00
feildmaster
402b177be4 Add missing callWorldInitEvent on startup. 2012-08-02 10:14:01 -05:00
feildmaster
a43d621c01 Update CraftBukkit to Minecraft 1.3.1 2012-08-02 04:58:50 -05:00
Wesley Wolfe
a4d7691299 Detect and disconnect 1.3 clients properly. Fixes BUKKIT-1952 2012-07-26 01:17:09 -05:00
Wesley Wolfe
b00de5f176 Cleaned up CraftBukkit comments in NMS.
Added newlines at the end of files
Fixed improper line endings on some files
Matched start - end comments
Added some missing comments for diffs
Fixed syntax on some spots
Minimized some diff
Removed some no longer used files
Added comment on some required files with no changes
Fixed imports of items used once
Added imports for items used more than once
2012-07-23 23:55:31 -05:00
Steve Anton
8b9aad8c2b Add remaining missing setLastDamageCause's 2012-07-14 17:57:31 -05:00
feildmaster
79189c1c13 Add missing setLastDamageCause. Thanks MonsieurApple 2012-07-13 22:57:42 -05:00
feildmaster
46125dc6cf Implement getExpToLevel method. Fixes BUKKIT-1906 2012-07-11 17:14:07 -05:00
feildmaster
cf9544c1d9 Reuse ItemInWorldManager, and stop applying ability changes. Fixes BUKKIT-1811 2012-07-09 18:07:53 -05:00
Mike Primm
08740d7f91 [Bleeding] Include chunk biome data for refresh chunk. Fixes BUKKIT-1166 2012-07-08 19:11:51 -05:00
feildmaster
dba9349ed4 Factor invulnerableTicks into getNoDamageTicks. Fixes BUKKIT-1324 2012-07-04 15:12:29 -05:00
feildmaster
d7272f42ef Implement getMotd, and reload the motd. Adds BUKKIT-1799 2012-07-03 18:00:37 -05:00
feildmaster
00efc8c464 Apply setLastDamageCause after processing events and the event has not been canceled. Fixes BUKKIT-1881
This allows previous causes to be available during the event, as well as making the damage cause a valid one. If EntityDamageEvent is canceled, then it's not the last DamageCause.

Also prevents setting DamageCause involuntarily through construction.
2012-07-02 22:22:03 -05:00
feildmaster
e4e994f710 Treat ComplexParts as proxies for setLastDamageCause. Fixes BUKKIT-1821 2012-07-02 22:22:03 -05:00
feildmaster
0a0d5ebf20 Clean entity.damage functions. Fixes BUKKIT-1822 2012-07-02 22:22:03 -05:00
Wesley Wolfe
ff09ff07f9 Fix deprecated spawnCreature. Fixes BUKKIT-1880 2012-07-02 15:36:49 -05:00
H31IX
6093bcc445 Fix client crash on InventoryClick cancel. Fixes BUKKIT-1841 2012-06-28 19:34:51 -05:00
Travis Watkins
a21f038fc3 Mark entities as invalid when they get despawned. Addresses BUKKIT-810 2012-06-28 19:34:31 -05:00
Wesley Wolfe
f5b6abfae1 Fix double overflow/underflow calculations with explosions. Fixes BUKKIT-1865 2012-06-27 21:17:20 -05:00
TomyLobo
412b7eaa12 Implement LivingEntity.hasLineOfSight. Addresses BUKKIT-1255 2012-06-23 10:48:08 -05:00