13
0
geforkt von Mirrors/Paper
Commit graph

1517 Commits

Autor SHA1 Nachricht Datum
Aikar
e0374d0ada Fix pathfinding NPE - Fixes #1435 2018-09-12 21:17:59 -04:00
Aikar
0b5eace455 ensure world is set for pathfinders 2018-09-11 19:10:14 -04:00
Zach Brown
f9d11c8af7 Merge branch 'master' into pre/1.13 2018-09-11 17:48:17 -04:00
Zach Brown
463e6dac06 Ensure entity is always dying before Death Event
Prior to this it was possible for plugins to put the server into a never
ending recursive loop until it eventually killed itself.

Fixes GH-1432
2018-09-11 17:38:57 -04:00
Aikar
36848f4949 Prevent pathfinding and zombie AI from loading chunks 2018-09-11 00:07:19 -04:00
Aikar
0631cf3192 Prevent fluids from loading chunks - major performance boost 2018-09-10 23:38:16 -04:00
Aikar
6711724fae Updated Upstream (CraftBukkit/Spigot)
Upstream has released updates that appears to apply and compile correctly.
This update has not been tested by PaperMC and as with ANY update, please do your own testing

CraftBukkit Changes:
7033f180 Hoist out synchronisation from ChunkRegionLoader

Spigot Changes:
500ff5d4 Rebuild patches

Additional Paper changes:
Fixed Versioned World Folders to not synchronize on ChunkRegionLoader
Optimized Save Queue even more to use a Long2ObjectOpenHashmap for save map
Add World#getXIfLoaded to IWorldReader to expose it to more places
2018-09-10 22:38:42 -04:00
Aikar
b86056bae2 Mob Pathfinding API
Adds an API to allow plugins to instruct a Mob to Pathfind to a Location or Entity

This does not do anything to stop other AI rules from changing the location, so
it is still up to the plugin to control that or override after another goal changed
the location.
2018-09-09 21:50:12 -04:00
Aikar
14d6ee0495 Rename some methods per discussion in channel 2018-09-09 21:45:54 -04:00
Zach Brown
366d300450 Stop using transaction id in tab completions
Fixes GH-1417, GH-1424 (probably).

There are other issues in this area, including just how much a mess it
is but we will get to those when we get to those.
2018-09-09 17:51:25 -04:00
Aikar
d039f43117 Forgot to rebuild patches after I fixed things in upstream update 2018-09-09 15:29:22 -04:00
Aikar
2041815962 Updated Upstream (Bukkit/CraftBukkit/Spigot)
Upstream has released updates that appears to apply and compile correctly.
This update has not been tested by PaperMC and as with ANY update, please do your own testing

Bukkit Changes:
3e2858f6 SPIGOT-4352: MoistureChangeEvent
5466e281 Add BlockDispenseArmorEvent

CraftBukkit Changes:
3123a069 SPIGOT-4352: MoistureChangeEvent
226db0ea Add BlockDispenseArmorEvent
cd367fa4 Fix bad thread safety in ChunkRegionLoader
3f5ca5f2 SPIGOT-4355: Improve cancelling VehicleEnterEvent

Spigot Changes:
145a37ae Rebuild patches
3f2423cc Rebuild patches
2018-09-09 15:26:56 -04:00
Rick
e730505bf0 Fix view distance API (#1419) 2018-09-09 20:38:27 +02:00
Aikar
75d51d6f9f getextPointIndex was not needing to be boxed/nullable 2018-09-09 14:36:51 -04:00
Aikar
0ae2903d8a Mob Pathfinding API
Adds an API to allow plugins to instruct a Mob to Pathfind to a Location or Entity

This does not do anything to stop other AI rules from changing the location, so
it is still up to the plugin to control that or override after another goal changed
the location.
2018-09-09 12:58:47 -04:00
BillyGalbreath
d28aadb2bd Allow chests to be placed with NBT (#1425)
This restores vanilla behavior of allowing placed chests to retain any Block Entity Tag data.

Upstream added filtering to chests, breaking vanilla behavior, and preventing use of loot table chests as a reward mechanism.

Upon review, we can find no security risk in allowing players to place a chest with NBT data, as Spawn Eggs, Minecarts, command blocks etc all have their own checks.

Additionally, survival mode players, non op players can not create these items anyways. If a player has Creative or Op, they already have high levels of access.

Plus, Chests aren't the only inventory that could have free form items, so this filter was insufficient anyways.
2018-09-09 11:53:23 -05:00
Aikar
68b25624d8 Remove deadlock risk in firing async events
The PluginManager incorrectly used synchronization on firing any event
that was marked as synchronous.

This synchronized did not even protect any concurrency risk as
handlers were already thread safe in terms of mutations during event
dispatch.

The way it was used, has commonly led to deadlocks on the server,
which results in a hard crash.

This change removes the synchronize and adds some protection around enable/disable
2018-09-09 01:04:29 -04:00
Zach Brown
09ca94cb13 Merge branch 'master' into pre/1.13 2018-09-08 19:12:58 -04:00
Automated
97de438dd2 [Auto] Updated Upstream (Bukkit/CraftBukkit)
Upstream has released updates that appears to apply and compile correctly.
This update has not been tested by PaperMC and as with ANY update, please do your own testing

Bukkit Changes:
310dc809 Add ServerLoadEvent

CraftBukkit Changes:
19d654bd Add ServerLoadEvent
2018-09-07 23:49:37 -04:00
Max Lee
4ff931a021 Improve death events (#1362)
* Improve death events

This adds the ability to cancel the events and to specify the sound.
2018-09-08 02:14:48 +02:00
Automated
21bbd524c5 [CI-SKIP] [Auto] Rebuild Patches
A recent commit has been made that caused patches to be out of order, rebuilding
2018-09-07 20:06:35 -04:00
BillyGalbreath
3d3333ff23 Fix #1420 (#1421) 2018-09-07 19:03:38 -05:00
Aikar
5ae4306581 Updated Upstream (CraftBukkit)
Upstream has released updates that appears to apply and compile correctly.
This update has not been tested by PaperMC and as with ANY update, please do your own testing

CraftBukkit Changes:
632449b6 SPIGOT-4349: End portal has wrong TeleportCause
3eb8af23 SPIGOT-4348: Use online player for setting skull owner if possible
2018-09-06 22:08:35 -04:00
Zach Brown
3d0c4bd860 MC-2025 - Save entity AABB to prevent fp wobble
This work is largely a result of the analysis done on the Mojang issue
tracker. See patch header for additional information.
2018-09-04 19:18:06 -04:00
Aikar
a1590d9769 Fix yet another issue with concurrency with datafixers 2018-09-04 01:50:14 -04:00
Aikar
e24d823e5f Fix another case of concurrency issue in data fixers 2018-09-04 00:02:38 -04:00
Aikar
0753080fe7 Fix concurrency issues in DataFixers
We are seeing issues with DataFixers being not thread safe in async chunks
and even in some spigot packet sending code.

There are a few more global objects that are mutated that need to
be synchronized to be safe for use over multiple threads.

There may be more cases, but these are extremely obvious ones.
2018-09-03 22:36:41 -04:00
BillyGalbreath
1ee368448e Add ray tracing methods to LivingEntity (#1410)
This method will return the Block a player is looking at while taking into consideration the AABB of each block in the path.

For example, you can look through the 1/4 space of air in a Stair block and get the block behind it instead of the Stair block you are looking past.
2018-09-03 18:59:54 -05:00
Aikar
62c2210d6c Check that phantom spawned uuid is set for save/load
Fixes #1408

Spawn eggs wont have a player set
2018-09-03 15:22:41 -04:00
Automated
f100b5d921 [CI-SKIP] [Auto] Rebuild Patches
A recent commit has been made that caused patches to be out of order, rebuilding
2018-09-03 12:31:32 -04:00
Aikar
f5e95be322 Remove Pass World Tile Entities patch
Some things break from this, while this was trying to fix other things
since the thing this patch tried to fix still had problems and required
yet another fix, just going to remove this patch.
2018-09-03 12:23:25 -04:00
Aikar
d76de615d5 fix typo in patch file 2018-09-03 10:38:28 -04:00
Aikar
06787e40db Merge remote-tracking branch 'origin/master' into pre/1.13 2018-09-03 10:32:30 -04:00
Automated
a0e356e9ae [CI-SKIP] [Auto] Rebuild Patches
A recent commit has been made that caused patches to be out of order, rebuilding
2018-09-03 10:11:35 -04:00
willies952002
18aaaa150c Add Force-Loaded Chunk API (#1387) 2018-09-03 10:05:55 -04:00
Gergely Sarkozi
4e4a4dbf5e Cached, local-class-supporting task names (#1409)
Fixes issue #1177 

`MapMaker#weakKeys()` makes the `Map` use identity comparison for the keys, while also enabling the automatical removal of dropped classes from the cache.

The changes are the same as in #1399, except now the original patch is modified instead of a new one being created.
2018-09-03 16:04:50 +02:00
Automated
86798d2ec5 [Auto] Updated Upstream (Bukkit/CraftBukkit/Spigot)
Upstream has released updates that appears to apply and compile correctly.
This update has not been tested by PaperMC and as with ANY update, please do your own testing

Bukkit Changes:
8ab814cd Add getFacing method to get the current cardinal direction an entity is facing.

CraftBukkit Changes:
ee5efeb0 Add getFacing method to get the current cardinal direction an entity is facing.

Spigot Changes:
0ede7d0e Rebuild patches
2018-09-03 04:14:40 -04:00
Spottedleaf
2375f1fef2 Make CraftWorld#loadChunk(int, int, false) load unconverted chunks (#1407) 2018-09-02 20:40:14 -07:00
Automated
b9e235e5d2 [Auto] Updated Upstream (CraftBukkit)
Upstream has released updates that appears to apply and compile correctly.
This update has not been tested by PaperMC and as with ANY update, please do your own testing

CraftBukkit Changes:
3037eb3e BlockSpreadEvent for Kelp
6cf60193 SPIGOT-4340: Improve client bug workaround
2018-09-02 21:44:27 -04:00
Shane Freeder
84993e3fca fix newlines in spigot tab list API
Spigots implementation around the header/footer strips newlines from the
header/footer, this patch allows the tab list header/footer to retain newlines.
2018-09-01 11:33:50 +01:00
Shane Freeder
1294a18cf9 fix paper tab list API 2018-09-01 11:09:13 +01:00
Aikar
e45e15cfb0 Updated Upstream (CraftBukkit)
Upstream has released updates that appears to apply and compile correctly.
This update has not been tested by PaperMC and as with ANY update, please do your own testing

CraftBukkit Changes:
dc69d2b3 Fix unbound shaped recipe ingredients
2018-09-01 00:30:04 -04:00
Aikar
e82ef9ec05 Switch to using ForgeFlower for Paper Only mc-dev imports
ForgeFlower is better than Spigots FernFlower at decompiling the source.

However, in order to maintain the CraftBukkit patches, we must keep
using spigots for the primary.

However, for any file that we import on top of Spigots imported files
there is nothing stopping us from using better decompiled files.

So these changes will use ForgeFlower to maintain a better set of
decomped files, so anything we add on top of Paper can start off
in a better spot.
2018-08-31 18:56:57 -04:00
Aikar
c832bed57d Pull the last upstream updates 2018-08-31 11:51:41 -04:00
Aikar
f942c53fd8 Don't double add golems to world - Fixes #1385
spawnCreature adds to world now
2018-08-30 20:57:22 -04:00
Zach Brown
8eef3b43f3 Ensure Creeper fuseTicks are still incremented
Fixes GH-1389

Because we are no longer enabling creepers to rapidly change status
every tick, in order to prevent event spam, their datawatcher value
ends up negative.

This datawatcher value is used to increment the fuseTicks within the
creeper tick. Because the value is negative, it is constantly zero'd
and therefore never incremented, instead acting the same as creepers
that aren't ignited.

We can just as easily increment this ourselves when the creeper is
ignited, so that's what we'll do.
2018-08-29 22:55:21 -04:00
Aikar
137a05af75 Optimize getChunkIfLoaded type calls
Uses optimized check to avoid major locks and large method.

Will improve inlining across many hot methods.

Improve getBrightness to not do double chunk map lookups.
2018-08-29 22:12:17 -04:00
Zach Brown
34033480d7 Add Inventory#removeItemAnySlot
Closes GH-1360

This behaves identically to Inventory#removeItem, except it
searches all slots rather than just the storage contents.
2018-08-29 21:41:39 -04:00
Shane Freeder
b39ff2b12d Update CB 2018-08-29 17:26:24 +01:00
Automated
fe8c056c26 [Auto] Updated Upstream (Bukkit/CraftBukkit)
Upstream has released updates that appears to apply and compile correctly.
This update has not been tested by PaperMC and as with ANY update, please do your own testing

Bukkit Changes:
9ca2772d API to prevent PlayerBedLeaveEvent from changing a player's spawn location

CraftBukkit Changes:
1486c295 API to prevent PlayerBedLeaveEvent from changing a player's spawn location
2018-08-29 05:19:27 -04:00
Automated
07d004a3c9 [CI-SKIP] [Auto] Rebuild Patches
A recent commit has been made that caused patches to be out of order, rebuilding
2018-08-28 23:16:31 -04:00
Shane Freeder
fb13965fbf Merge branch 'master' into pre/1.13 2018-08-29 04:07:50 +01:00
Aikar
7466082302 Optimize Chunk Height Maps
Use an EnumMap for fast key access
2018-08-28 22:12:27 -04:00
Aikar
e9937293f8 Optimize Chunk#getPos
get rid of object creation
2018-08-28 21:36:42 -04:00
Automated
8ac070c78d [Auto] Updated Upstream (Bukkit/CraftBukkit)
Upstream has released updates that appears to apply and compile correctly.
This update has not been tested by PaperMC and as with ANY update, please do your own testing

Bukkit Changes:
97368963 Update ChunkSnapshot docs about valid coordinates

CraftBukkit Changes:
3831ae62 SPIGOT-4325: Validate coordinate arguments in Chunk/ChunkSnapshot
2018-08-28 17:49:36 -04:00
Shane Freeder
db5a924b1c Fixup AsyncTabCompletionEvent handling 2018-08-28 19:45:14 +01:00
Automated
dc88835ee3 [Auto] Updated Upstream (CraftBukkit)
Upstream has released updates that appears to apply and compile correctly.
This update has not been tested by PaperMC and as with ANY update, please do your own testing

CraftBukkit Changes:
9636bb8d SPIGOT-4319: Conduit damage should be a block event
2018-08-28 07:09:44 -04:00
Daniel Bethel
9952257225 Add timings support to command functions (#1379) 2018-08-27 18:30:58 -04:00
BillyGalbreath
7bc21c03e9 Fix explosions not doing damage to entities (#1380) 2018-08-27 12:59:07 -05:00
Zach Brown
4cc2b3eea5 Update upstream CB 2018-08-27 11:07:22 -04:00
BillyGalbreath
f692535133 Add More Creeper API (#1372) 2018-08-27 02:01:09 -05:00
BillyGalbreath
f2e8288481 Add PhantomSpawnEvent (#1375) 2018-08-27 01:51:20 -05:00
Aikar
09d1dd17a0 Disable Vanilla last chunk access cache, use ours
Also fixes some bugs in ours

Ultimately they both are near the same, but ours is behind the synchronized gate.

Mojangs is mixed behind 2 different synchronization contexts (chunks can lock 2 different objects)

Mojang also blindly unsets the ref on any chunk unload, not just if its the one being pointed to.
2018-08-27 00:15:12 -04:00
Aikar
b3f8279528 MC-134668: Remove bad synchronized block from FileIOThread
This is causing the main thread to be blocked still.
2018-08-26 22:09:10 -04:00
Aikar
1fa9e325c1 Fix mob spawn limits 2018-08-26 21:21:28 -04:00
Aikar
05dfa62d32 Paper 1.13.1 Update
Updated Upstream (Bukkit/CraftBukkit/Spigot)

Bukkit Changes:
2dcc44dc SPIGOT-4307: Fix hacky API for banners on shields
e0fc6572 SPIGOT-4309: Add "forced" display of particles
efeeab2f Add index to README.md for easier navigation
f502bc6f Update to Minecraft 1.13.1

CraftBukkit Changes:
d0bb0a1d Fix some tests randomly failing
997d378d Fix client stall in specific teleportation scenarios
b3dc2366 SPIGOT-4307: Fix hacky API for banners on shields
2a271162 SPIGOT-4301: Fix more invalid enchants
5d0d83bb SPIGOT-4309: Add "forced" display of particles
a6772578 Add additional tests for CraftBlockData
ce1af0c3 Update to Minecraft 1.13.1

Spigot Changes:
2440e189 Rebuild patches
4ecffced Update to Minecraft 1.13.1
2018-08-26 14:11:49 -04:00
Automated
338c730c10 [Auto] Updated Upstream (CraftBukkit)
Upstream has released updates that appears to apply and compile correctly.
This update has not been tested by PaperMC and as with ANY update, please do your own testing

CraftBukkit Changes:
162bda93 Add note about 1.13.1
2018-08-26 00:04:29 -04:00
Colin Godsey
ae2508995d Re-add Configurable speed for water flowing over lava
Closes GH-1227
2018-08-25 22:57:30 -04:00
Zach Brown
00b551913b Rebuild and simplify map call 2018-08-25 22:48:24 -04:00
Automated
c57bfef1e9 [CI-SKIP] [Auto] Rebuild Patches
A recent commit has been made that caused patches to be out of order, rebuilding
2018-08-25 22:41:32 -04:00
stonar96
eb26c054f7 1.13: Readd Anti-Xray (#1366)
* Decompile fixes for ProtoChunk and DataPaletteBlock

* Do changes

* final change

* more changes

* First Anti-Xray build

* Fixes and cleanups

* Cleanups and renamings

* Cleanups renamings and move OBFHELPERs to 0004-MC-Utils.patch

* Implement obfuscation for newly generated chunks

* Implement chunk edge mode

* Implement block updates

* Cleanups

* Rebuild patches
2018-08-26 04:37:58 +02:00
Aikar
6124bde288 Updated Upstream (CraftBukkit)
Upstream has released updates that appears to apply and compile correctly.
This update has not been tested by PaperMC and as with ANY update, please do your own testing

CraftBukkit Changes:
f41aae40 Remove reflection from CraftBlockData
2018-08-25 00:20:58 -04:00
Zach Brown
438e10fb48 Merge branch 'master' into pre/1.13 2018-08-24 11:57:11 -04:00
BillyGalbreath
67eef6701b 1.13: Slime Patherfinder Events (#1246)
Replaces PR #1161 for 1.13

Resolves #930 

Adds new slime pathfinder related events. All events can be cancelled.
- `SlimePathfindEvent` is the base event of all added events. Cancelling this event will cancel all pathfinders.
- `SlimeWanderEvent` is called when slimes wander around by either swimming or moving/jumping forward. Cancelling this event will prevent slimes from moving around and jumping, but they will still look around and target players.
- `SlimeSwimEvent`is called when slimes are swimming in water/lava. Cancelling will prevent the slimes from moving/jumping in water/lava.
- `SlimeChangeDirectionEvent` is called when a slime changes directions. It contains the new `yaw` position the slime wants to change to, and it can be set to another value. Cancelling this event will prevent slimes from changing directions (except for when targeting players).
- `SlimeTargetLivingEntityEvent` is called when a slime targets a player. NMS uses EntityLiving here so it is named this. Contains the LivingEntity the slime has targeted. Cancelling this event will prevent the slime from targeting the entity and will make it lose current focus.

Adds `Slime#canWander()` and `Slime#setWander(boolean)` for a more persistent control (does not persist server restarts) over all 4 pathfinder types without the spammy event having to be cancelled a bajillion times a second.

Video demonstration: https://youtu.be/8hcLqazmO28

Test plugin: https://pastebin.com/cFgcgdWV
2018-08-24 09:40:14 -05:00
cakoyo
067cd73889 Add source block to BlockPhysicsEvent (#1364)
Resolves #1275 

For plants, the source block is itself, because the `changed` type is itself.
2018-08-24 22:38:31 +08:00
MicleBrick
86d8218430 Cached IBlockData to CraftBlockData conversion (#1368)
Avoid using reflection to create CraftBlockData instances. 

Computes the class to use on IBlockData creation and clones it when needed.
2018-08-23 16:44:41 -04:00
Zach Brown
fdef57b439 Allow ProtoChunks to be loaded
Reverts 62d26bf1d2
Fixes GH-1348
2018-08-23 15:40:00 -04:00
BillyGalbreath
7d3b4f409c Fix MC-124320 (#1369) 2018-08-23 12:02:57 -05:00
Christopher White
314acb5d8f Add isChunkGenerated API (#1363)
Resolves #1329
2018-08-22 18:13:03 -07:00
Aikar
4312faeee5 Merge branch 'master' into pre/1.13
* master:
  Fix some false positive warnings printing that shouldnt be
2018-08-20 20:23:06 -04:00
Aikar
bcb9bb64f0 Fix some false positive warnings printing that shouldnt be
reduces some log spam
2018-08-20 20:20:40 -04:00
Aikar
7156bc2260 Merge branch 'master' into pre/1.13
* master:
  Fix false positive on Chunk Entity slice messages #1302
2018-08-20 00:58:08 -04:00
Aikar
0f2aaa4364 Fix false positive on Chunk Entity slice messages #1302
Update links too
2018-08-20 00:54:03 -04:00
Automated
937423506d [Auto] Updated Upstream (CraftBukkit)
Upstream has released updates that appears to apply and compile correctly.
This update has not been tested by PaperMC and as with ANY update, please do your own testing

CraftBukkit Changes:
82f4b3b1 SPIGOT-4292: Ignore itemstacks with invalid enchants
2018-08-19 22:54:42 -04:00
Aikar
d99223b6e6 Restore Optimized Hoppers patch
Mojang changed behavior of .cloneItemStack() so that if you clone while
count = 0, it clones as AIR instead of original Item type.

So we needed a flag to keep old behavior.
2018-08-18 18:15:17 -04:00
Aikar
9cfdc487e4 restore vanilla default mob-spawn-range 2018-08-18 12:43:44 -04:00
Aikar
7d5a5ed52f Fix some performance regression in last patch 2018-08-18 12:42:17 -04:00
Aikar
c0ea8846b6 Merge pull request #1315, Closes #1207
Cache Counts by Entity type to optimize mob spawning
2018-08-18 11:12:06 -04:00
Zach Brown
ce5d16d58d Merge branch 'master' into pre/1.13 2018-08-18 03:59:57 -05:00
Zach Brown
9920287a0f Don't iterate twice - Fixes GH-1346 2018-08-18 03:58:53 -05:00
Mystiflow
eb8312e4f9 Send nearby packets from world list instead of server list (#1196) 2018-08-17 23:05:00 +01:00
Automated
72d0717d5d [CI-SKIP] [Auto] Rebuild Patches
A recent commit has been made that caused patches to be out of order, rebuilding
2018-08-17 18:01:37 -04:00
BillyGalbreath
66d52954dc 1.13: Player launch projectile event (#1249)
Replaces PR #1193 for 1.13

I'm pretty sure I got all player launched projectiles (except arrows). Let me know if I missed any.

This fixes a use-case specific issue that was discovered [here](https://www.spigotmc.org/threads/projectilehitevent-doesnt-work-in-survival-mode.327097/page-2#post-3059433). I have a use-case example a few posts down, [here](https://www.spigotmc.org/threads/projectilehitevent-doesnt-work-in-survival-mode.327097/page-2#post-3060204).
2018-08-17 16:55:40 -05:00
searchndstroy
93e3a60a2f Optimize BlockPosition helper methods (#1339)
Resolves #1338
2018-08-17 14:51:56 -07:00
Aikar
dea0ab1e71 Merge remote-tracking branch 'origin/master' into pre/1.13
* origin/master:
  Fix watchdog restarting on short timeout (#1344)
2018-08-17 12:14:56 -04:00
searchndstroy
093dd0a9b9 Fix watchdog restarting on short timeout (#1344) 2018-08-17 09:09:08 -07:00
Aikar
0f8bab7109 Merge branch 'master' into pre/1.13
* master:
  Fix bug in last patch
  Ensure chunks are always loaded on hard position sets
  Improve Watchdog Early Warning Feature - Closes #1319
  Allow disabling armour stand ticking
2018-08-16 18:11:35 -04:00
Aikar
609d6bba6a Fix bug in last patch 2018-08-16 17:52:24 -04:00
Aikar
0661cf198e Ensure chunks are always loaded on hard position sets
Player Movement, Entity Creation and Teleportation move
entities with a very "You are here, no debate" change, making
the server register them as there, regardless if that chunk was
loaded or not.

It appears possible that with hack clients and lag, a player
may be able to move fast enough to move into an unloaded
chunk and get into a buggy state.

To prevent this, we will ensure a chunk is always loaded,
guaranteeing that the entity will be properly registered
into its new home comfortably.

Closes #1316
2018-08-16 17:46:38 -04:00
Colin Godsey
67fb7e9f66 pr changes, flat array 2018-08-15 15:07:30 -06:00