Commit Graph

1349 Commits

Author SHA1 Message Date
asofold 073220cc01 Clarify APIUtils methods meaning by renaming, deprecate former. 2018-01-15 23:19:41 +01:00
asofold adc0d16d73 Add a type for check types (future may have multiple levels). 2018-01-15 23:07:04 +01:00
asofold a25dc44501 [BLIND] Include other blocks in the multi protocol block patch, rename. 2018-01-15 22:16:09 +01:00
asofold e8cf861150 Disable the MultiClientProtocolWaterLilyPatch with unit tests. 2018-01-15 22:00:17 +01:00
asofold 01aaccbf54 Fixes and extension for Activation. (+)
(+) Always return Activation, not IActivation.
(+) Add unitTest() and notUnitTest().
2018-01-15 21:59:39 +01:00
asofold 30b293e735 Rename DummyNoCheatPlusAPI to UnitTestNoCheatPlusAPI for the prefix.
Allows determining the state of the system more easily.
2018-01-15 21:45:41 +01:00
asofold 13b00a6b8e Fix APIUtils not returning an unmodifiable collection. Change to Set.
Using the LinkedHashSet directly.
2018-01-15 21:20:50 +01:00
asofold 5cf2613f36 Should mention... 2018-01-15 13:10:44 +01:00
asofold def7d61bc5 Test for NPCs with the Inventory.Open check. (+)
(+) Note: If it's fired asynchronously, meta data isn't checked, due to
that not being thread-safe. In future extra checks for (demanded to be)
thread-safe external plugin APIs can be added (reflection only).
(+) Add comments to PlayerData, concerning future treatment of name-uuid
mappings and retaining data.
2018-01-15 13:02:30 +01:00
asofold 7fdd6a586b Register the ExemptionSettings instance in use as generic instance. 2018-01-15 12:31:00 +01:00
asofold dc4849f3a8 [BLEEDING] Do not delete PlayerData instances for online players. (+)
(+) Add getPlayerName for exact case name getting from internal storage.
2018-01-14 16:31:38 +01:00
asofold 8e11fe8184 removeDataPrecisely: Don't create ANY debug text if debug is false. (+)
(+) Add/alter comments with PlayerData removal.
(+) Remove comment to store PlayerData by UUID.
2018-01-14 14:39:12 +01:00
asofold 01f6db48b0 Correct javadocs. 2018-01-04 00:04:08 +01:00
asofold c6aec5ed09 Implement F_MIN_HEIGHT16_1 and F_MIN_HEIGHT16_15. Clarify javadocs.
Only applying with GROUND_HEIGHT set, these flags allow setting a
minimum height for passability and ground workarounds, covering two
typical cases.

Due to a range of hard coded workarounds being in place already, these
flags won't apply for all blocks. See getGroundMinHeight.
2018-01-03 23:57:12 +01:00
md_5 df3344409b Fix server version detection logic 2017-12-21 14:00:27 +11:00
asofold af44f13fbd [BREAKING] BlockCache: rename getTypeId to getType. 2017-12-18 01:19:49 +01:00
asofold ce98d2aa54 [BLEEDING] Fix native access modules. 2017-12-18 01:14:23 +01:00
asofold 7fb960275d [BLIND] Use MinecraftServer.getVersion, if no version was detected. 2017-12-16 16:51:46 +01:00
asofold 7c5d67b1d4 Fixes and adjustments with String ids.
* Start renaming methods internally (getType for getting Material) -
unfinished.
* Temporary fix for the NCPCompatbukkit/cbreflect module: fetch NMS
blocks by id until we have a mapping and/or something efficient and
future proof in place.
2017-12-16 16:14:41 +01:00
md_5 c564289ef3 Fix default message params 2017-12-08 14:59:55 +11:00
md_5 1e988f24a0 Fix import location 2017-12-06 21:45:58 +11:00
md_5 3a111dc4a5 Remove Block IDs 2017-12-06 16:55:29 +11:00
asofold 7e43deaa28 Cancel interaction for players who are not online. 2017-05-31 21:03:46 +02:00
asofold afe080f1c2 Use cancel.dead as id instead of canceldead. 2017-05-31 21:00:42 +02:00
asofold 0b2882c58b Revert allowing placing boats on ground.
Placing boats on ground is possible at least down to CraftBukkit
1.4.5-R1.0, thus the reason for having the boatsanywhere feature solely
is to prevent abuse. Thus allowing to place boats on ground does not
really provide a 'fix'. In order to allow placing boats anywhere, the
configuration flag has to be altered.

It may be worth a discussion, if we want checks to prevent Minecraft
features at all. A proper fix for abuse would be more complicated,
involving checking the estimated bounding box of the placed boat not to
collide with blocks neither with entities while being on ground-.
Determining the bounding box and re-checking with entity spawn might be
the more complicated part, as for the rest API/Infrastructure exists.
2017-05-31 14:22:51 +02:00
asofold b441c1ea88 Allow placing boats on ground for MC 1.12 with protocol support plugins.
Allowing it with protocol support plugins is added, assuming that
they'll allow 1.12 too.

Missing:
* The vehicle.envelope check must be made (more) precise, as moving on
ground is possible with a boat since 1.12, specifically on ice they can
reach high speeds. Without more close modeling, they'll be able to use
this for speeding.
2017-05-28 21:30:44 +02:00
asofold 049a925fb3 Move multi protocol plugin activation to a utility. 2017-05-28 21:03:21 +02:00
asofold ddc0436e43 Fix boatsanywhere not recognizing other than oak boats.
Other:
* Add and use BlockProperties.isWater.
2017-05-26 14:13:02 +02:00
asofold 8b02a7ce4c Fix fastbreak/grace not being read correctly. 2017-05-17 11:11:44 +02:00
asofold 982eecbfcf Remove unused member. 2017-05-17 10:56:47 +02:00
asofold 135d3e812b Change usage to resemble the format of other descriptions and documents. 2017-05-14 14:34:17 +02:00
asofold 416a2d4ef3 Extend the capabilities of the 'ncp log stream ...' command.
* Allow specifying to remove color definitions (both Minecraft default
and with '&') and to replace color definitions that use '&'. Append
?color or ?nocolor after the level definition. (Shortcuts: c, col / nc,
noc, nocol, nocolor). Either of both can be set, not both.
* Log to multiple streams with individual levels and color flags by
separating stream definitions with '+'.
2017-05-14 14:07:30 +02:00
asofold 89ae23997d Fix CONCRETE_POWDER id. 2017-05-14 12:14:50 +02:00
asofold 8ea1d9e664 Detect Minecraft version with -pre suffix (MC 1.12-pre...). 2017-05-14 12:13:56 +02:00
asofold 9e763c2584 [BLIND] Add 1.12 blocks. 2017-05-14 12:07:49 +02:00
asofold b5b6e782ed Add cmdc action - like cmd just with replacing color codes. 2017-05-13 20:45:21 +02:00
asofold b0161dfac8 Don't use super.getMessage. Format/clarify. 2017-05-13 20:31:52 +02:00
asofold 620b5ea40b Add command: ncp log stream stream_id[@level] message....
Any registered stream id can be used (default streams are defined in
fr.neatmonster.nocheatplus.logging.Streams, in theory other plugins
might register their own ones).

Shortcuts are:
* ncp log stream notify message... (ingame notification, info level)
* ncp log stream debug message... (trace file, fine level)
* ncp log stream status message... (file + console, info level)
* ncp log stream init message... (file + console, info level)

Shortcuts do support setting the level, e.g. status@severe.

Due to string parsing these are not as efficient as hooking into the API
would be, naturally.
2017-05-13 13:22:50 +02:00
asofold 861ead1cac Set both NoFall and MC fall distance both on UNKNOWN teleport and ...
when appropriate.
2017-05-12 23:24:17 +02:00
asofold 076bf52e24 Fix undoing of cancelled set-back teleports. 2017-05-12 21:16:59 +02:00
asofold 9478daaa02 Prepare new block flags. Add comments.
To model differing behavior of fluids, i.e. half fall distance per
in-lava move vs. zero fall distance once in water, block flags will be
used. To really do this the NoFall check will be altered to account for
new flags. Once at it, the check should also treat from and to
independently of each other - there are some inconsistencies, such as
how oFallMaxY is set.

Further flags are reserved for MIN_HEIGHT..., indicating that
compatibility will be improved without compromising protection too much.
Thus instead of making a block entirely passable, you could set a
specific min height flag alongside ground_height (and possibly height
for max. height), in order to allow walking between level x and y but
not below (think of grass_path).
2017-05-12 21:11:41 +02:00
asofold 6347527c1c Set thisMove.flyCheck only when the/a check is run. 2017-05-09 23:30:25 +02:00
asofold 0c6cb6577d Use the lower eye height when gliding with elytra (selected checks).
* Block checks (interact/place/break): reach and direction.
* Random other places, like BlockProperties.getBreakingDuration.
2017-05-09 22:04:50 +02:00
asofold 344b032d49 Fix / "refine" elytra handling. Set all maxheight to 128.
* Lift-off side conditions.
* Force stop gliding for some side conditions, to avoid freezing.
* Set maxheight to 128 for elytra and levitation too (mods/plugins/etc)
- better refine checks to catch stuff.
* Fix special flags not getting set with initializing ModelFlying from
config.
* Debug log exceeding the maxheight setting.
* Mostly harmless: Add interfaces and access methods, including
convenience methods.
* Don't store methods in Bridge1_9.

Issues left, not limited to:
* Boost not recognized on occasion.
* Gliding state kept when submerged in water and moving normally like
when not gliding, e.g. ascending (head in water / fully submerged).
* Elytra lift off not accepted: Gliding state set near the water
surface, but survivalfly check runs. Might be fixed already, though.
2017-05-09 15:31:13 +02:00
asofold 9505c0747d Use another special flag for ascension while gliding. Do/fix locking. 2017-05-07 21:45:47 +02:00
asofold 87374fe396 [BREAKING] Change ModelFlying to a more flexible method of setup.
Breaks what used ModelFlying in any other way than setting up by config.

Use setters with chaining and a lock() method to lock against changes,
provide copy-constructor.
2017-05-07 21:31:22 +02:00
asofold d306c32922 Adjust the vertical ascend speed for spectator mode. 2017-05-07 16:26:33 +02:00
asofold 7cd2303c45 Increase the default horizontal speed for spectator mode by 30. 2017-05-07 15:58:01 +02:00
asofold c87e878311 [BLEEDING] Adjust to the lowered height when gliding with elytra.
This is incomplete, as some pre-checks are still done with the full
bounds (flying just under web will put you to sf). Efficiency-wise there
could also be a more light-weight adjustment.

Attack areas are left too, e.g. flying (with or without boost) to
underwater, then end gliding to effectively clip with the head into
/through the block above. 

With the lowered height it's also possible to get into odd spots, so
after stopping to glide you'll not be able to get out anymore.
2017-05-07 14:20:54 +02:00
asofold c0b0a2fac3 Allow precise setting of all the height-related properties. 2017-05-07 14:16:43 +02:00
asofold bff58b83db Reduce false positives with elytra: lift off and boost.
Missing (false positives):
* Bounding box, eye height.

Missing (cheating):
* Better abort conditions (e.g. inside water / lava).
* Friction inside water / lava.
2017-05-06 22:38:23 +02:00
asofold 8c6ebbaad8 Elytra before levitation. 2017-05-06 17:38:28 +02:00
asofold bfaa71fa5b Use a common method for judging if gliding with elytra is valid. 2017-05-06 17:30:20 +02:00
asofold c59b4ac11a Hot fix: allow minecraft fall damage in lava. 2017-05-06 15:15:39 +02:00
asofold 7c11fcda9c Comments / format. 2017-05-05 09:35:22 +02:00
asofold 2f66eab079 Reach doesn't need to use the flyingQueue. 2017-05-05 09:24:44 +02:00
asofold b62f310717 Work around "server-side-only blocking after respawn". 2017-05-04 15:14:04 +02:00
asofold 6584398d21 Re-check with alternate axis order on collision.
This will not check all possibilities, if default=YXZ fails:
* X or Z collision: test YZX as alternative.
* Y collision: test XZY then ZXY as alternatives.

Would need to check client code, possible of multiple client versions,
considering widespread use of protocol support plugins.
2017-05-04 13:19:56 +02:00
asofold b38cb4da99 Passable: Prepare fixes. Remove legacy code and options.
New
* Define a couple of default lists for axis order.
* Allow setting axis order via a list.

Removed
* Configuration option to disable ray-tracing.
* Configuration option 'blockchangeonly' - there may be an equivalent
later on, where checking accounts for the entire bounding box(es).
* Legacy code option (things have stabilized and axis order switching
should fix false positives).

Random
* Accidentally commit FastConsume (whitespace).
2017-05-04 13:17:36 +02:00
asofold e5f6370705 Integrate current look into flying queue checking. Include invalidation. 2017-05-03 15:42:12 +02:00
asofold 54f9d42ca1 Use unified actions for block reach/direction checks, use constants. 2017-05-03 14:59:56 +02:00
asofold b9a73ae801 Fix blockplace.against. Confine isInteractBlock by tick as well.
(+ Pass tick fetched in listener to other checks as well.)
2017-05-03 13:46:05 +02:00
asofold e852fb03d2 Fix elytra model not being used when in creative mode.
Levitation will now apply when a player is in creative but not flying -
trial and error!
2017-05-03 11:44:25 +02:00
asofold 73f420527c [BREAKING] Unify block (interact/place/break) direction checks.
Might break configurations.
2017-05-03 00:40:37 +02:00
asofold 2cca81f39a CreativeFly: Test if the player is gliding with elytra not just wearing.
While i can't use the elytra while in creative mode, others might be
able to do so with a plugin.
2017-05-02 21:50:47 +02:00
asofold bd370ba633 Skip redundant checks within BlockBreak and BlockPlace.
Reach and Direction are near-identical to the variants in BlockInteract
and will be
replaced by implementing an abstract class.
2017-05-02 21:10:18 +02:00
asofold 3ff207d487 Debug log relation with BlockInteract.
Currently typically blockbreak.direction will fail, if blockinteract
used a (the first) flying packet.

Other oddities: Block damage followed a cancelled interact event.
2017-05-02 14:29:17 +02:00
asofold e5458465ac Attempt to patch up VehicleEnvelope (in-air, boat).
* Issues remain with "moved too quickly" interfering (TP loop with
waterfall/alternating, possible to escape).
* Not sure the previous modeling makes sense at all with allowing
friction now.
2017-05-02 13:41:24 +02:00
asofold 442634793c Keep track of moving event count. Re-introduce morepackets-set-back-age.
Configurable, default to 40 moving events for now. Later to be adjusted
~ e.g. with force-fall set-back policy.
2017-05-02 01:28:39 +02:00
asofold 90d6ab97c5 Change to individual methods to override event resolution. Shuffle. 2017-05-01 13:14:38 +02:00
asofold c21f1075c9 Re-trigger against only if the last run failed.
This probably is too much of a special case (place without interact?),
might rather hit plugin features. Apart from that, consequently, other
checks should test for this too?
2017-05-01 13:01:57 +02:00
asofold 01b311bcd3 [BLEEDING] Typo.
[BLEEDING] just to note blockinteract changes may alter things.

Currently it looks like only blockplace.against is using the last move
of BlockInteractData - later other checks are intended to use that too,
in terms of a data source.
2017-05-01 12:54:01 +02:00
asofold d8ab00dfb0 More details for last block. Consumed checks. Don't skip item use.
* Store complete event result state for interact.
* Store consumed checks as well.
* Still run the speed check, if only using the item in hand is allowed.
2017-05-01 02:03:00 +02:00
asofold 51d24d1a39 Add option to debug log command actions. 2017-04-30 20:20:42 +02:00
asofold 9f1f3d1525 Add a simplified logOnce method. 2017-04-30 20:14:05 +02:00
asofold 8bf207c112 Log to counters where look came from (current, first/other flying). 2017-04-29 15:19:42 +02:00
asofold 4ab4ebd331 Extend by convenience methods. 2017-04-29 15:18:38 +02:00
asofold e6cc1bad05 Store passed checks with the last block. 2017-04-29 14:40:44 +02:00
asofold 9f3c10951d The last block is now private.
* Add methods for checking/testing vs. last block.
* TrigUtil.isSameBlock for a block.
* Reset last block on cancel.
2017-04-29 14:27:22 +02:00
asofold e8c4c11bb2 Also activate with ProtocolSupport being present. Adjust message. 2017-04-29 12:19:40 +02:00
asofold bdf5e7aa71 Extend functionality by adding conditions and allow set to AND/OR. 2017-04-29 12:19:08 +02:00
asofold d670d8066c Add protocol support plugins, NTAC and PNCP to the related plugins.
Shouldn't have to ask back all the time...
2017-04-29 12:17:38 +02:00
asofold 4c3a9f6378 Suppressed a warning. 2017-04-29 11:54:08 +02:00
asofold 6d16bcea00 Prepare having more of the kind. 2017-04-29 11:22:46 +02:00
asofold 04d5253732 [BLIND] Add a patch for WATER_LILY activating with ViaVersion. 2017-04-29 10:55:15 +02:00
asofold 8cecf92eff [BREAKING] Move Activation to the registry.activation sub-package. 2017-04-29 10:29:46 +02:00
asofold 9d4b88d96a Convenience method added. 2017-04-29 10:24:36 +02:00
asofold c7d72101c2 Make cancelling flying/waiting packets configurable. 2017-04-29 10:12:18 +02:00
asofold de0cabd1b8 Set structure void block to instantly breakable and air-like. 2017-04-28 21:53:01 +02:00
asofold 5a901e0f66 Add logDebugS. 2017-04-28 21:46:52 +02:00
asofold 53f534b3c6 Split off logOnce to StaticLog. 2017-04-28 21:44:17 +02:00
asofold 180cf8a3c3 Let blockinteract.direction check queued packets. Unify loop (visible).
* Add a class to loop the flying queue with a block as target (look
only).
* Pass the flyingHandle to sub checks (doesn't necessarily make sense
with reach - should probably re-check reach with the used flying queue
state, but that's more complicated due to the possibility of split pos
vs. look).
* Use the loop class both for visible and direction (not reach).

Likely similar has to be done with BlockPlace and BlockBreak - would be
good to find a skipping heuristic for blockbreak.direction etc., so we
know we have successfully checked that block from that exact position
for this player and nothing has happened between (and so on, or a more
relaxed heuristic).
2017-04-28 19:03:10 +02:00
asofold 970ed6b126 Remove ominous count - all that remainded from the original was...
skipping redundant checking (limiting the number of visited packets
doesn't work - instead 'good candidated' for packet inversion with dig
packets should be stored together, so it's easy to just check vs. the
first/last stored one).
2017-04-28 17:20:24 +02:00
asofold 956c7ca803 Pass a handle for the flying queue to sub checks of blockinteract.
To be done:
* Use yaw and pitch of past packjets for Direction and Reach.
* If block break mathes the last interacted block (+ moving sequence
indicates no change), skip some checks like direction and reach there,
possibly keep track if those were run at all.
2017-04-28 00:27:36 +02:00
asofold 1655a90b2b [BLEEDING] Make use of the 'confirm teleport' packet. Cancel WAITING.
If the teleport confirm packet is available, flying packets with
AckResolution.WAITING will be cancelled.

This is real bleeding edge and might need other adjustments not to
freeze players for to be discovered edge cases. The TeleportQueue
already does contain a timeout mechanism and should return
AckResolution.IDLE after some time.
2017-04-27 12:53:47 +02:00
asofold 6ea30131ca Reduce (player) morepackets data on confirmed set back teleport.
Distantly related: Often an extra flying packet is sent to confirm a
teleport.
Here: Reduce effect of set-back loops with morepackets involved.
2017-04-27 10:34:41 +02:00
asofold 7d7a0bf010 Add method to pass thread-indicator via an extra argument. 2017-04-26 18:45:28 +02:00
asofold 1c8c3a8c3a Count all flying packets and PlayerMoveEventS, simplify.
* Count all events/packets regardless of settings.
* MovingListener: Remove pos/look counting for move events.
* MovingFlying: Call the counter method according to primaryThread flag.
2017-04-26 18:21:24 +02:00
asofold 9339ccc0ef Error log the interpreted packet types (simplified). 2017-04-26 14:27:22 +02:00
asofold 0969a5c939 Log packets cancelled by FlyingFrequency. Adjust comments/log messages. 2017-04-26 14:02:21 +02:00
asofold 792bed452c [BREAKING] Ignore set-back override, if cancel is not set.
Seems better, cancel actions can be set manually.
2017-04-26 10:49:26 +02:00
asofold 34e3548ec5 [BLEEDING] Allow to override the set-back via MovingData.setTeleported.
This way, you can calculate a more interesting set-back location from
within a hook during violation handling. All you need to do to adjust
the set-back location is to call MovingData.setTeleported(newSetBack)
and NoCheatPlus should recognize this as the location to set back to.

Please do:
* Test if the check in question would set back at all
(IViolationData.wilCancel() returns true).

Please in such a case do not:
* Don't call setTeleported if IViolationData.willCancel() returns false
:).
* Cancel violation processing.
* Teleport the player.
* Do something complicated with MovingData otherwise :).
2017-04-25 23:58:48 +02:00
asofold 8fc9b1df91 [BREAKING] Change boolean mightBeMultipleMoves to int multiMoveCount.
Especially developers adding set-back alterations should have a look:
https://gist.github.com/asofold/b05c0a17c605e7c69bb30ee5e79a6e7b
2017-04-25 22:25:47 +02:00
asofold fe233d82ea Reorder the remainders of the previous draft. Keep an item array.
Store an extra array of items internally and allow fast fetching (for
fastest processing, where necessary). The sortedItemNodes array is kept
for future purpose.
2017-04-25 10:31:42 +02:00
asofold 2d25265588 Use an array for the output internally. 2017-04-25 09:51:48 +02:00
asofold 730d09aa78 [BLIND] Extend API further.
Despite having an interface yet, add things like unregister many objects
(items) and getting all registered items, e.g. for dealing with
sub-registries efficiently (at first code-wise).
2017-04-25 00:36:57 +02:00
asofold 2b51dfa8b8 [BLIND] Fixes for unregister + extend API.
Fix: Wrong object used for get, such.
Add: More convenience methods to remove items and types completely, clear, isRegistered variants.
2017-04-25 00:11:32 +02:00
asofold 190309e5f3 Add an auxiliary class, to delegate IRegisterWithOrder setup to. 2017-04-24 23:21:53 +02:00
asofold 6ce8e62e7e Support SetupOrder still (to be deprecated). 2017-04-24 20:16:49 +02:00
asofold f82d387a88 Don't create order twice. 2017-04-24 20:12:16 +02:00
asofold d2ed656409 Revert last minute change. 2017-04-24 20:09:25 +02:00
asofold be877c7e9b [BLIND] Sketch a registry helper for storing sorted lists by type.
Store items in lists by type, sort by RegistrationOrder either lazily on
fetch or upon request. Allow registering an item multiple times, but
only once per type.

Tests, adaption of signatures, additions and variants should follow.
2017-04-24 19:40:22 +02:00
asofold d0c42ab061 [BLEEDING] Prepare internal registry lists overhaul to support sorting.
* Add RegistrationOrder for order.
* Add sorting functionality with some tests. (See
RegistrationOrder.AbstractRegisTrationOrderSort.)
* (Except for test cases, all this is not yet in use.)

(Perhaps the sorting should be changed to use an array for output
instead of iterators, this just represents a quick way in.)

Further direction:
* Replace all the registry lists like for INotifyReload and
IDisableListener and so on within registries by a generic storage that
uses this for sorting. This way every such thing will support both
priority-based and tag-based order at the same time.
* To support different order definitions depending on what type an
interface like IRegisterWithOrder might be supported by a registry.
* Later generic event listeners might also use this, simply.
2017-04-24 18:58:36 +02:00
asofold f02a11e404 Move stray tests to a test sub package. Reduce tests in TestCoordMap.
TestCoordMap: Use less samples with extra testing not being set.
2017-04-24 17:27:06 +02:00
asofold 2ff5415601 Have a RegistryException super class. 2017-04-21 18:45:53 +02:00
asofold bb96f63f7d Quick config notify overhaul.
* Reduce details and only send a configurable amount of lines in
notify/chat, default to 5, just state to check logs in the end,
instead of lengthy hints.
* Log detailed output to STATUS (file/s).
* Fix wrong build number printed to set configversion.created to.
2017-04-19 12:34:06 +02:00
asofold 563ce080c6 [BLEEDING] Make improbable check configurable for inventory.instantbow.
feedonly: allow to only feed, instead of check
weight: allow to alter the weight and disable altering improbable (0.0).
2017-04-18 19:21:22 +02:00
asofold ca2d2398e4 [BLEEDING] Model (noob) tower with lost-ground only.
* lostGroundAscend: new condition.
* lostGroundStill: some precondition checks moved inside, new condition.
* vdistrel: Extra case with decreased lift-off gain, but second move as
if normal lift off.
* With from being on ground, and last move not having touched ground,
setSetBack(from).
2017-04-18 18:13:46 +02:00
asofold 6a4c75460a enoughFrictionEnvelope: Compare with the absolute change of distance. 2017-04-18 16:14:53 +02:00
asofold a5b0bd0fae Account for null blocks in PlayerInteractEvent handling.
Before elytra boost these events had been ignored for most, now instead
of an early return, just the checks/logging using the block are skipped.
2017-04-15 17:04:37 +02:00
asofold 0262ac4ccd Fix .silent permissions set up wrongly.
* The construction routine for ActionListS is to by passed the silent
permission already, so getting optimized copies will not add another
'.silent' to the already passed permission. (Correct me if i am
mistaken). 
* Clarified javadocs/names.
* Further null permissions are handled, even if not (yet) necessary.

Still to be called with the ordinary check bypass permission:
* ConfigFileWithActions: The convenience methods to obtain
(Optimized)ActionListS from the
configuration.
* AbstractActionFactory.createNewActionList: will then create actual
lists, extending the permission by '.silent', unless the permission is
null.

(Stumbled onto, while looking for optimization potential with log action
execution.)
2017-04-14 20:45:36 +02:00
asofold f262a831b0 Support setting values for any ParameterName key explicitly.
Previously the "dynamically" evaluated result would always have been
used, even if a value had been set explicitly before execution of
actions.
2017-04-14 19:56:38 +02:00
asofold 23f9ac5689 [BREAKING] Enable more precise sub check data removal (see details).
[BREAKING]
* Due to adding a method to CheckDataFactory.
* Might alter data removal (less is removed, might've overlooked
something).

For MOVING, FIGHT, COMBINED, data removal for sub checks now is
possible, allowing for more precise resetting via commands. Other check
groups may follow on request / randomly.

Data removal for check data is logged now (only CheckData, not
IRemoveData in general), in case the debug flag is set in the data.

Later, a more flexible method may get implemented, accepting a String
id, so not only check type related data, but also any type of special
data can be removed (e.g. moving.locationtrace would not be a check
type, but allow resetting the location trace of a player).
2017-04-14 15:48:03 +02:00
asofold f5d2cbc880 Add COMBINED_YAWRATE (allows exemption, later: remove data precisely).
No bypass permission is set. The yawrate part depends on multiple other
checks. Checking for exemption is a hack within feedYawRate, fastest way
to implement.
2017-04-14 14:14:16 +02:00
asofold 32589987c9 Spaces + some formatting. 2017-04-14 14:02:34 +02:00
asofold 8077b4a0dc Extend HashMapLOW interface. Put PlayerData FCFS under lock.
HashMapLOW
* Add a constructor for using an external lock.
* Add putIfAbsent.

DataManager
* Use playerDataMap.putIfAbsent, return the PlayerData instance that has
been there first.
2017-04-13 12:39:18 +02:00
asofold c53d3f1521 Fix NullpointerException. 2017-04-13 11:02:32 +02:00
asofold eb5db36dfd Fix survivalfly and creativefly actions.
Could bugs possibly fit in between?
2017-04-12 21:13:52 +02:00
asofold 83887a7836 Remove the prehistoric global build number reference.
Switch all to per-path build number references.
2017-04-12 21:10:42 +02:00
asofold 3d73a54fcd Fix faulty config notifications.
The per-config-path notifications would keep showing up, even if you
removed the paths, then run 'ncp reload', then alter any of them and run
'ncp reload'.

To fix this, the configversion.created value is set to the current
build, if no config warnings are there - which is the same, as what the
notification suggests as an alternative to removing the paths and
running 'ncp reload'.

To do this, isConfigUpToDate had to be moved from Updates to
ConfigManager, which makes more sense anyway. In addition the 'created'
and saved 'values' are set to the biggest thing found, instead of the
prehistoric static value.

Further a negative 'created' value will not be overridden anymore,
allowing to silence the config notifications forever. Not necessarily
recommended for the general case, but it can be useful/necessary with
maintained blueprints, e.g. with administering multiple servers.

One of the next steps will be to remove the DefaultConfig.buildNumber in
favor of setting a build number for each and every path added. All
provided we don't run into nasty issues here.

Another follow up could be to create an extra registry/config log file
and write all the values there, and only print the first 5 in ingame
chat.
2017-04-12 20:44:26 +02:00
asofold 4b9e7c9fe3 Extend PlayerSetBackMethod (allow to skip risk, specify default ids).
A NO_RISK flag has been added, to allow skipping workarounds such as
packet level ack for skipping a set-back teleport. This remains
so-and-so, because in this case the set-back still would stay 'to be
done' and moves setting off from elsewhere would get cancelled, leading
to re-scheduling it, still:
* There could remain potential with micro moves, intentionally getting
set back.
* There remains an uncertainty with the telported logic initially not
having been made for a set-back location getting kept 'to be done' over
multiple server side ticks potentially.
* Having the ability to turn off this rare (?) case, allows faster
reaction, if issues should arise.

The default settings can be referenced by their ids:
* default.legacy for pre-1.9.
* default.cautious for not taking risks (such as packet level workaround
disabled, otherwise it's currently post-1.9 handling, working but not
optimal on pre-1.9).
* default.modern for the latest thing (currently post-1.9).

The defaults have been adjusted, according to so far experience:
* default.cautious contains flags SCHEDULE and NO_RISK now.
* default.modern is the default now, and contains SCHEDULE (but not
NO_RISK). This is used if nothing is specified in the configuration.
2017-04-12 12:51:09 +02:00
asofold 53649f9001 Add containsAsynchronous, move to NCPCommons into utilities.ds.corw.
It's some kind of copy on read/write (+ delete after read).
2017-04-11 12:32:16 +02:00
asofold 4b5cca3fe4 Reduce calls to Bukkit.isPrimaryThread(). Provide optimized methods.
Where it's known that it's the primary thread, that test should be
omitted.

A remaining problem is the Check class, where the convenience methods
all will lead to testing for Bukkit.isPrimaryThread(). This needs to be
done differently.

It'll be hard/impossible to work around, if we have to check permissions
and meta data. For permissions we could do some kind of bulk/context
dependent caching and updating policy and check via PlayerData, but meta
data needs the Bukkit API to state thread safety. Future design could
also do without knowledge of the thread, if permissions are cached and
exemption by meta data is turned off (or also cached, but this only
works if other plugins don't use it for temporary exemption), a lazy
approach could pass on an AlmostBoolean isPrimaryThread.

For now, at least some of the frequently run moving checks use the
optimized approach.
2017-04-11 12:07:12 +02:00
asofold def24ac1f1 Headers missed. 2017-04-11 00:06:35 +02:00
asofold b41c267b15 Random. 2017-04-10 23:03:57 +02:00
asofold b11ae340b5 Fix wrong precondition for handling cancelled moves.
Mostly affected moves cancelled by other plugins.
2017-04-10 18:10:35 +02:00
asofold 73a62a1e13 Add DualCollection, for future use. 2017-04-10 14:19:11 +02:00
asofold f221086729 Distinguish method by Minecraft version. Skip packet level pre-1.9. 2017-04-08 23:54:53 +02:00
asofold 5be2f45ba7 [BLEEDING] Switch to HashMapLOW for PlayerData storage. Fix removal.
* HashMapLOW for thread-safe access to PlayerData instances.
* PlayerData removal now used the UUID. More changes pending for storing
the UUID for reference rather.
* Use bulk removal for expiration of entries (one time lock).
2017-04-08 17:55:34 +02:00
asofold 2f59297621 Do data.resetTeleported(), if the player is there on tick.
Can't do much better than being there already. Thinkable trouble could
be with high latency and multiple teleports to different locations in
quick succession, so that cancelling the teleport will lead to the
player violating survivalfly again in the future, which means longer
freezing/rubberbanding than if we teleport now. However, current
assumption is, that it's better not to keep teleporting players around.
2017-04-08 15:50:56 +02:00
asofold 9a4b3f6f91 [BLEEDING][BREAKING] Store PlayerData by UUID, use a PlayerTickListener.
Instead of maps for each individual purpose, and the rather expensive
TickListener adding and removing, player specific task will be done via
one PlayerTickListener that can be registered with the TickTask. Thus
PlayerData has the access methods requestUpdateInventory and
requestPlayerSetBack, and so on, later more. For the
DataManager.playerData map it'll be UUID first now.

Consequently some calls have been altered to prefer passing Player or
UUID for PlayerData getting.
2017-04-08 15:47:06 +02:00
asofold 0cd0d508d1 [BREAKING] Add UUID to PlayerData creation. Outlook on data.
Breaks: DataManager.getPlayerData(String, boolean) has been removed, new
methods added to do the same without boolean or with UUID passed extra.

Following changes may repeatedly/randomly break PlayerData and check
data access (unless you use CheckType.getDataFactory), this may not
follow directly, but more or less soon. Even Later, CheckType will get
broken too :), in favor of class instances with dynamic registration
ability.

Basic direction is to concentrate stuff in PlayerData, getting rid of
all the static data stores, but also making access to shared data
more efficient (e.g. store last world id + name and permission cache in
PlayerData). Access will be more thread safe (only for PlayerData,
permissions cache, likely for fetching check data too, however returned
objects may have their own contracts).
2017-04-08 13:49:39 +02:00
asofold bf6c3ff753 Comment on a possible step forward. 2017-04-08 02:05:54 +02:00
asofold 19e5e6f154 Remove deprecated method: clear(CheckType) 2017-04-08 00:49:00 +02:00
asofold 4f1573c83d Better name for onLeave, INotifyConfig extends INotifyReload. 2017-04-08 00:36:25 +02:00
asofold 87621f7d28 Old arrows. 2017-04-07 22:21:26 +02:00
asofold 1b79889dd4 Fix pre-horse. 2017-04-07 22:17:59 +02:00
asofold 464e374c10 Add capability to mostly ignore certain vehicle types (default: arrows).
Configuration setting is hidden for now.
2017-04-07 22:11:21 +02:00
asofold 718f991832 More skipping conditions for "set back on tick".
* The player is at the coordinates.
* The last received ACK for an outgoing teleport has been received on
packet level. This is experimental, to be confirmed to a) do something
b) not allow abuse.
2017-04-07 16:37:38 +02:00
asofold d06e658c7a Demand the minimally needed type for isSamePos variants. 2017-04-07 16:23:00 +02:00