Commit Graph
100 Commits
Author SHA1 Message Date
Nicolas F 6b0ccc1513 src/primitives/base: don't try to free nullpointer
If loading the grass and foliage biome colour fails, Overviewer doesn't
necessarily crash, it just renders everything gray, apart from one small
issue: in trying to call base_finish, it'd crash trying to decrease the
reference of a null pointer.
2019-07-06 23:15:55 +02:00
Nicolas F 0b4ad361c3 world: fix those pesky poi warnings 2019-07-06 21:24:58 +02:00
Nicolas F 204bcd0310 Add "center" config option
This option allows you to specify your own initial center for a
tileset, which is useful if your map is extremely asymmetric or
you don't really care about what's around the spawn.

Future work needs to be done on the JS side in order to fix the
fromWorldToLatLng and friends, as they're currently off by -24 in X
and +24 in Z direction.

Closes #1350.
2019-07-06 19:06:15 +02:00
Nicolas F 5b0430f94b textures: greatly simplify find_file and friends
find_file contained a lot of code for searching textures in ways that
haven't been relevant for years. For example, it had workarounds for
MCPatcher, a tool that hasn't been updated since 2015.

Instead of searching in multiple paths that will never succeed in a
resource pack and Minecraft version that actually work, just look
for the filename that the block functions ask for.

Also, if we already have a manually specified resource pack open,
we shouldn't repeatedly re-open it. Furthermore, it's best if
the very first thing find_file does is try to find the file in
the resource pack or client jar we've already opened previously.

We can now also remove chest.png, ender.png, foliage.png, grass.png
and normal_double.png because Minecraft ships them, so we don't
need to ship them ourselves too. Us shipping them actually hid the
whole find_file garbagefire.

Concerns issue #1604.
2019-07-04 18:24:57 +02:00
Nicolas F 864be71667 textures: cache when a texture couldn't be found
Previously, textures that couldn't be found the first time around
would not have this fact cached, so we'd run through the whole
slow path of find_file with each blockid and data entry.

This is what caused the chests texture generation function to take
almost 12 seconds on my system, as it is looking for "normal.png"
that hasn't existed in Minecraft textures for ages.

Shoving the exception, if one is encountered, into the cache, and
then re-raising it if we load it from the texture cache brings this
number down to about 2 seconds. That's six times as fast!

Concerns issue #1604.
2019-07-04 16:40:11 +02:00
Nicolas F 1e8735328e textures: try more than the most recent Minecraft
We can try each jar in descending order of versions until we actually
find one that works. This fixes #1328.

Future work might move the "if self.jar is not None" higher up in the
function so that we don't keep re-checking the overviewer dir and texture
path for files that we will then not use at all for some reason.
2019-07-04 15:27:58 +02:00
Nicolas F 7d1a04b0fe genPOI: hopefully fix binary string nonsense
Somebody reported that genPOI was throwing an exception in two
different places related to trying to read bytes as a string.

I personally could not reproduce (possibly needs some special player
names or something?) but I think this change should fix it either way.
2019-06-28 13:24:48 +02:00
Nicolas F b6a3c18b65 web_assets: update leaflet to 1.5.1 2019-06-25 19:40:42 +02:00
Nicolas F c34be9ca67 world: add __lt__ method to RegionSet
So turns out genPOI wants to use sorted() so it can use itertools.groupby.

Python 2 somehow just... sorted objects so that groupby (which is basically
the UNIX uniq) could group them properly. Python 3 no longer does this,
so as comparison method let's just compare regiondir strings since that
gives us the desired result.

Fixes #1597.
2019-06-25 19:19:28 +02:00
Nicolas F f58d7ae0a2 Merge Pull Request #1542 2019-06-25 18:21:27 +02:00
Nicolas F b20705e46a observer: use bytes fp for JSObserver
Unbuffered I/O requires a bytes fp, so I guess we now just send
utf-8 encoded strings into that instead.

Fixes #1596.
2019-06-25 18:17:45 +02:00
Nicolas F 50bd2a4303 observer: use bytes fp for JSObserver
Unbuffered I/O requires a bytes fp, so I guess we now just send
utf-8 encoded strings into that instead.

Fixes #1596.
2019-06-25 18:13:57 +02:00
Nicolas F e28c2e9284 docs/installing: remove CentOS 6 section
Hopelessly outdated distro release that not even EPEL can save, so
there's no way we can support it with prebuilt packages.
2019-05-20 15:35:49 +02:00
Nicolas F 522ee28219 overviewer: add warning for CentOS/RHEL 6
If you're using CentOS/RHEL 6, you probably already can't run
Overviewer due to our dependency on argparse breaking python2.6
compatibility. However, if you somehow managed to get python2.7
working on CentOS 6, you now get a nice warning telling you to
finally get off your butt and use something else.

This warning can be dropped once we move to Python 3, which is why
this code was added in the first place: CentOS 6 has no Python 3
package that is still supported by upstream, not even in EPEL.
2019-05-20 15:21:07 +02:00
Nicolas F f1c7ab93f1 world: remove lit chunk check
Apparently not even chunks of that data version can be relied upon
to have that flag mean anything at all, as the --forceUpgrade and
--eraseCache switches result in a world where chunks are flagged
as not being lit but seemingly do have SkyLight and BlockLight keys.

Concerns #1570.
2019-05-05 15:17:43 +02:00
Nicolas F 9479ac59b4 world: make the chunk populated code even uglier
Fixes #1568.
Fixes #1566.
2019-05-03 15:13:18 +02:00
Nicolas F c77fcc5fb3 world: fix snowy grass check
pro tip: 'false' == True.
2019-04-30 21:08:00 +02:00
Nicolas F 0d10211d1b world: fix rendering of 1.13 worlds
Fixes #1563.
2019-04-30 19:41:35 +02:00
Nicolas F 0004540a57 world: only render fully formed and lit chunks
Minecraft notes various stages of fetal development that chunks are
in, with the complete ones being "full". Previously, we'd check
against a list of states that are not full to skip a chunk, which
is obviously not future proof, and broke as Mojang updated their
possible range of values for the status field. It's better to
just bail if the status is anything other than "full".

Additionally, a key called "isLightOn" is in the chunk now. This
seemingly determines whether a chunk has been lit. We're also going
to check for this, and bail if it's not. In my tests, I have not yet
seen a single "full" chunk that does not have "isLightOn" set.

Fixes #1558.
2019-04-28 13:41:17 +02:00
Nicolas F 7b523c447a .gitignore: add the docs build dir to ignore 2019-04-28 12:58:13 +02:00
Nicolas F 3fc97d131e Add fletching, cartography and smithing tables 2019-04-28 12:55:14 +02:00
Nicolas FandGitHub 1f7dc762aa Merge pull request #1561 from IncredibleHolg/new-slabs-1.14
added new 1.14 slabs, fixing issue #1560
2019-04-28 12:14:20 +02:00
Nicolas F a20d09fd82 docs/running: update texture install instructions 2019-04-26 04:17:50 +02:00
Nicolas F 04302025ca travis: test with 1.14 assets 2019-04-26 04:11:49 +02:00
Nicolas F e25557d257 textures: fix stone slabs for 1.14 2019-04-26 04:11:20 +02:00
Nicolas F 8760b040c6 world: ignore poi directory in world dir
This is a new directory added in 1.14 which contains .mca files too.

Since we scan for directories with .mca files to use as RegionSets,
and we don't know how to handle these, just skip them.

Fixes some warnings during rendering.
2019-04-23 14:03:25 +02:00
Nicolas F bc322fa3e4 world: fix for chunk parsing for 1.14
If there's missing light data, just make up some with an empty array.
2019-04-23 14:03:25 +02:00
Nicolas F 6f680aa287 Revert "web: fix goToHash on layer change"
This reverts commit 2186d08c32.

Fixes #1553.
2019-04-21 18:02:19 +02:00
Nicolas FandGitHub 7d5f3009e7 Merge pull request #1556 from SteadBytes/python3-popen-bytes
Decode Popen stdout bytes to utf-8
2019-04-20 16:45:46 +02:00
Nicolas F 134d6063bf primitives: misc char -> short fixes 2019-04-07 20:25:53 +02:00
Nicolas F 6a1906445c world: space comments correctly 2019-04-07 20:23:32 +02:00
Nicolas F bd40aeda3d textures: set prismarine slabs to transparent
This fixes upper slabs removing the block below them.
2019-04-07 20:21:45 +02:00
Nicolas F e05a4f1083 Merge pull request #1550 from InrcedibleHolg/master
Rebased to clean the git history a little.
2019-04-07 20:19:56 +02:00
Nicolas FandGitHub f512492ed7 Merge pull request #1545 from SteadBytes/contrib-python3
Move Contrib Scripts to Python3
2019-04-07 14:27:59 +02:00
Nicolas F 98e197d64c docs/installing: update CenturyOldOS instructions
Imagine not having Python 3 in 2019 LMAO
2019-04-06 21:15:50 +02:00
Nicolas F 1ab66dddea fix prismarine stairs
Sorry for the noise in mc_id.h, but somebody decided they want DOS
line endings and I couldn't allow that to happen. When not doing that
put the whole thing into diff, I decided to just fix the indentation
too while I was at it.

Needed bugfixing of some overlooked unsigned char usages for block IDs,
as otherwise the lighting would be scuffed.

Concerns issue #1486.
2019-03-31 19:20:10 +02:00
Nicolas F be69712ca0 docs/signs.rst: fix filter function ids for 1.13 2019-03-29 17:05:31 +01:00
Nicolas F f93bc28230 world: fix stair orientations
Concerns issue #1486.

Inner/outer corners apparently have their data from ancil data instead
of Minecraft's stuff, so we might need to fix that in the future.
2019-03-28 16:02:53 +01:00
Nicolas F 58f73d8f81 docs/building.rst: clean up macOS instructions
I've had to fight rst a lot to get this right, somehow the code
block after the last bullet point breaks if you explicitly number
the enumerated list instead of using auto-enumeration. Like legit,
change `#.` to `12.` and it'll break. No clue why.
2019-03-27 15:15:07 +01:00
Nicolas F 3c4d8e34e6 docs: move last mentions of Python 2 to Python 3
I've adjusted the macOS instructions slightly to be more general,
e.g. do not advise symlinking a specific Python executable of a
specific version, just tell people they should make sure it's in
their environment.

And yes, on Windows, python.exe is whatever version you have installed,
so if you install Python 3, python.exe is going to be Python 3.

I've removed the FreeBSD instructions because they only talk about
working around ports potentially using Python 2.6, which is no longer
relevant. If somebody here uses FreeBSD and has anything to add to the
instructions not already covered by the Linux instructions, let me know.
2019-03-27 15:14:01 +01:00
Nicolas F 79754b367c world: bandaid fix for double stone brick slabs
This code badly needs a rewrite, we're just altering code path and
data all over the place and this isn't okay.
2019-03-25 21:42:08 +01:00
Nicolas FandGitHub ed9a9930db Merge pull request #1547 from InrcedibleHolg/master
added missing cut_red_sandstone and chiseled_red_sandstone
2019-03-24 22:20:19 +01:00
Nicolas F fb63788dc7 mailmap: more adding of myself, sheesh 2019-03-22 19:22:46 +01:00
Nicolas F 477bd701a3 mailmap: add myself 2019-03-22 19:16:34 +01:00
Nicolas F 4c3e0bfb6e docs: update mingw build instructions (untested) 2019-03-22 17:19:47 +01:00
Nicolas F 316b8099e9 docs: update Linux build instructions for Python 3 2019-03-22 17:18:12 +01:00
Nicolas F dc7d1cd208 genPOI: replace optparse with argparse
Maybe one day we'll use actual subparsers but today is not that day.
2019-03-22 17:10:52 +01:00
Nicolas F 4c78a05e91 travis: switch to xenial and test for python 3.7
Python 3.7 requires using the xenial images in Travis-CI. It appears
that they do not yet have newer distro version images available, so
that's the best we can get for now.
2019-03-21 15:29:41 +01:00
Nicolas F a23682fec8 docs: update optimizeimages instructions for py3 2019-03-21 15:21:43 +01:00
Nicolas FandGitHub 2c4b0d40b5 Merge pull request #1541 from Wunkolo/block_class
Add block_class to accelerate block-conditionals
2019-03-19 00:52:36 +01:00
Nicolas F 11aa232141 genPOI: port to Python 3
There's some stuff left to do, like properly do the functools.partial
stuff, and check that the uuidcache is actually working. But hey,
player markers work at least, and so does --skip-scan.

Still needs a port to argparse though.
2019-03-18 19:45:22 +01:00
Nicolas F 7085b048de overviewer: fix shell quoting check in edge case
If you supply an option that can't possibly be a world or an output
but isn't recognised, Overviewer would barf.
2019-03-18 19:36:24 +01:00
Nicolas F a533f3a396 contribManager: Python 3 compatibility 2019-03-18 18:52:32 +01:00
Nicolas F a709dbccf5 Merge branch 'contribManager-management' into python3-fun-times 2019-03-18 18:50:23 +01:00
Nicolas FandGitHub 00b4e83822 Merge pull request #1539 from Wunkolo/mc_id
Convert block ids into mc_block_id enum
2019-03-17 21:10:38 +01:00
Nicolas F 0072eae3f0 world: fix reading old biomes
Some older maps store biomes differently, and we should use this as
a bytes object, not a str object.
2019-03-17 18:13:26 +01:00
Nicolas F 137797cd51 travis: move to Python 3 2019-03-17 18:08:03 +01:00
Nicolas F e348a548b6 Initial Python 3 port
Many things work, some don't. Notably, genPOI doesn't work, and
there's some signedness comparison stuff going on in the C extension.

This also completely drops support for Python 2, as maintaining a C
extension for both Python 2 and 3 is a pain and not worth it for the
9 months that Python 2 is still going to be supported upstream.

The documentation needs to be adjusted as well.

All of the few tests we have pass, and rendering a map works, both
with a configuration file and without. We can also use optimizeimages.

Concerns #1528.
2019-03-17 17:57:07 +01:00
Nicolas F 99eebd5b69 world: fix potatoes and carrots growth stages
Concerns #1486

Also get rid of an obviously broken leftover wheat elif.
2019-03-16 17:47:49 +01:00
Nicolas F f7ab92917f world: fix seed growth stages
Concerns #1486
2019-03-16 17:40:05 +01:00
Nicolas F 061406ca55 world: fix mossy cobblestone block/wall rendering
Concerns #1486

I need some high-proof alcohol.
2019-03-16 17:07:35 +01:00
Nicolas F dd6e69189f world: fix petrified_oak_slab rendering
Concerns #1486
2019-03-16 16:50:15 +01:00
Nicolas F 6aaf680c8c settingsValidators: fix code style, adjust strings
Some absolute thonkers in here like two-spaces indent code. Yikes
my man.
2019-03-15 16:48:08 +01:00
Nicolas F d6ed0bd416 overviewer: use print_function
PYTHON 3 SOON POGGERS
2019-03-14 16:03:35 +01:00
Nicolas F 4082c8ed05 contrib/playerInspect: add usage output 2019-03-14 13:57:29 +01:00
Nicolas F 05f031fbb9 contrib/playerInspect: fix code style
Also use the print function.
2019-03-14 13:48:53 +01:00
Nicolas F 75f2bc1dfc contribManager: fix imports, use print_function
We don't need to import nbt from overviewer_core at all so we
can remove the silly fix to do that. Why was that ever there? It's
a mystery!
2019-03-14 13:40:27 +01:00
Nicolas F 4be0f07156 contribManager: fix code style 2019-03-14 13:30:22 +01:00
Nicolas FandGitHub daa25d80fd Merge pull request #1533 from CounterPillow/png-it-modernisation
Modernise png-it.py and make it less weird
2019-03-13 17:09:27 +01:00
Nicolas FandGitHub d742c15a1c Merge pull request #1534 from NPCtom/patch-2
Replace OSX with macOS
2019-03-12 05:58:15 +01:00
Nicolas F 2c1ce0d522 contrib/png-it: allow saving to stdout with -
Following the same convention as some other tools, - as output
filename means stdout now.
2019-03-12 00:41:57 +01:00
Nicolas F e6d4ed8068 contrib/png-it: use the print function
This also allows us to print to stderr, which is handy and means
all program text output (i.e. argument parser and script messages)
will be on stderr.
2019-03-12 00:33:02 +01:00
Nicolas F eee196623f contrib/png-it: switch from optparse to argparse
In the process, we can clean up some of the command line argument
handling. Sadly, argparse's mutually exclusive groups are too
primitive to get rid of the autocrop/manual crop conflict checking,
but we'll have to live with those two lines I guess.

This script apparently also works with Python 3 now, which is neat.
2019-03-12 00:26:51 +01:00
Nicolas F 88c056b6b7 contrib/png-it: clean up code, grammar
This took several years off my life expectancy, and there's still
ways to go.
2019-03-12 00:26:45 +01:00
Nicolas FandGitHub 4e08859f0e Merge pull request #1532 from jsmienk/patch-2
Simplify finding spawn Y
2019-03-11 19:16:03 +01:00
Nicolas F 57a55b68e1 contribManager: get rid of removed scripts 2019-03-11 18:05:20 +01:00
Nicolas F 9f50e0fb2f contrib: delete scripts that are no longer useful
dtt-c has been a thing for 8 years now, I think it's safe to say
people have deleted their old caches in the meantime.

findSigns has also been superseded by genPOI ever since genPOI
has been a thing, which has probably been since anvil.
2019-03-10 18:09:09 +01:00
Nicolas F c9b506a58c genPOI: fix code style
One code style error can't really be fixed because despite
has_key being deprecated, "in" doesn't work on "super" for objects
that derive from dict, at least not in Python 2.7. Thanks Guido.

Also, I don't know which one of you it is that keeps putting semicolons
at the end of your statements but you seriously need to stop.
2019-03-10 18:05:32 +01:00
Nicolas FandGitHub 6f5730d40a Merge pull request #1529 from CounterPillow/arrrgparse
overviewer: replace optparse with argparse
2019-03-10 17:39:54 +01:00
Nicolas F 3a923c2932 overviewer: warn about shell quoting issues
This reimplements the warning about missing quotes on the command
line that was removed with the previous commit.
2019-03-09 18:47:49 +01:00
Nicolas F 25f0907d05 overviewer: replace optparse with argparse
optparse is deprecated, and switching to argparse is mostly but not
entirely trivial. Nicely telling the user about shell quoting had
to be removed because I didn't see an easy way to do that with
argparse.
2019-03-08 16:48:31 +01:00
Nicolas F 849e5d690e overviewer: fix git hash being after line break
Apparently that comma had its reasons for being there because
Python2's print works in weird ways. We can do this better though
by using string concatenation.
2019-03-07 16:04:56 +01:00
Nicolas F e4924c3d73 overviewer: misc style fixes
except as instead of comma, get rid of strange superfluous comma
after print.
2019-03-07 16:02:14 +01:00
Nicolas F a551795969 optimizeimages: fix code style 2019-03-07 15:50:59 +01:00
Nicolas F ec63aa55b6 util: fix code style 2019-03-07 15:49:37 +01:00
Nicolas F fc88572aa3 cache: fix code style 2019-03-07 15:43:01 +01:00
Nicolas F 94aa49019c logger: code style fixes 2019-03-07 15:33:28 +01:00
Nicolas F ef66efd140 overviewer: code style and consistency fixes
A good sprinkling of PEP8 fixes. We're also getting rid of some
odd manual linebreaks in the output messages, and making sure to
end sentences with a period where appropriate. Help messages have
also been made more consistent, e.g. "Tries" -> "Try" and so forth.
2019-03-06 14:27:04 +01:00
Nicolas FandGitHub 4ffa0be456 Merge pull request #1526 from CounterPillow/webp-support
Add WebP image format support
2019-03-06 13:54:21 +01:00
Nicolas F 61ebd35240 Add WebP image format support
Since Firefox 65 added support for WebP, users may be interested
in having maps that use WebP images. Support for this is added in
this commit, along with documentation for it.

A new option, "imglossless", controls whether we write out lossless
or lossy WebP images. The generic name "imglossless" as opposed to
a more specific "webplossless" was chosen in case future image
formats we also implement also support lossless/lossy modes in the
same format (JPEG-XL? AV1 image format?).

It's an okay meme but lossy mode really falls apart on our sorts
of images on the more zoomed out composite tiles, resulting in
pretty blurry messes. Might be due to a PSNR bias in the encoder,
which is to be expected from Google.
2019-03-04 17:04:09 +01:00
Nicolas F 7f63dfe315 tileset: drastic code style fixes
We've also added a setup.cfg to specify what rules we want for
pycodestyle. We'll be ignoring some dumb ones that make no sense
and probably shouldn't exist, like both W503 and W504 being an
issue somehow???????

We're using a line length limit of 100. If you're on an 80 character
terminal and incredibly upset about this, then that's the nursing
home staff's problem, not ours.
2019-03-03 16:47:35 +01:00
Nicolas F 0499f8d168 docs: update copyright year, version, release
Bump version and release to 0.13, update the copyright date from
2017 (!!!) to 2019.
2019-03-02 16:35:23 +01:00
Nicolas F 846b7ab8f8 nbt: code style fixes
We're ignoring E221 and E741 since I disagree with them; I think extra
whitespace around operators to align repeated operations can aid
readability and help spot bugs.

This was mostly whitespace issues, e.g. trailing whitespace and
a single space on blank lines.
2019-03-02 15:47:13 +01:00
Nicolas F 336850ea04 observer: drastic code style fixes
I've used pycodestyle to find pep8 violations, and isort to fix import
sorting.

Currently we're looking at a max line length of 80, but I think we may
want to raise this to 100 because 80 is a pain in the butt.
2019-03-02 15:32:25 +01:00
Nicolas F 715b3a2d43 progressbar: actually flush the fd on update
A young software tinkerer from Switzerland noticed an issue with
an application he was working on one day. The progress bar it
was rendering only updated very rarely. This perplexed the teenager,
but never bugged him enough to investigate further. Nobody else seemed
to notice this, so maybe it was his system?

Fast forward a few years. The young man is now a 24 year old fully
grown manchild. The progress bar was still updating only very rarely.
On this rainy afternoon, the tinkerer had nothing else to do than
finally get to the bottom of this perplexing behaviour.

Much investigating was done. Did the Observer have a logic bug? No,
if we check in the update function by appending a line to a file,
we can see that it works properly. Besides, the logic of this piece
of code surely hasn't been changed for years.

Did maxvalue get set to 100 instead of the number of tiles? No, it
correctly overrode the right method to not just set max_value but
also maxvalue. (Great naming there, aheadley.)

Was it the polymorphic inheritance causing issues then? No, even the
parent class correctly behaved in its update function. Well, almost.
That is when the developer came upon a shocking revelation. His hands
trempled as his fingers moved across the laptop's keyboard, nearly
accidentally entering the "nuclear missile launch" mode in Kate's
Vi-Input editing. The developer added one line to the file.

self.fd.flush()

The progress bar finally worked as intended.
2019-03-01 14:36:28 +01:00
Nicolas FandGitHub 45fa7552c0 Merge pull request #1524 from CounterPillow/overlay-fix
web: fix overlays showing up for all base layers
2019-02-28 13:39:31 +01:00
Nicolas F 311d3eacc2 web: add layer fallback to goToHash
With the changes to things being indexed by path instead of name,
old hashes would stop working. To make this a bit less jarring, we
can fall back to the default tileset of a world, which means the
map would still load.
2019-02-28 13:37:19 +01:00
Nicolas F b57db703ae web: fix overlays showing up for all base layers
Overlays should only show up for the base layers they apply to,
however, we've had them show up for all base layers in a world.

To fix this, we first change things to be indexed by the unique path,
not the human-readable name (which is not supposed to be always unique).

Then, we remove and add overlay layers to the layerCtrl as needed on a
baselayerchange event.
2019-02-27 14:22:18 +01:00
Nicolas F b70f1a012f Fix C extension build warnings the painful way
Some bad distributions (Debian) apparently are not good enough to
have a Pillow version from this decade packaged.

Therefore, we need to do it the painful way of prefixing our
symbols and refactoring everything to use them.

A new header file called "utils.h" has been added for this purpose,
and it is included in "overviewer.h".

The following macros have been prefixed with "OV_":
- MIN
- MAX
- CLAMP
- BLEND
- MULDIV255

Additionally, the C extension version was bumped to 56 because 55
was reverted back to 54.
2019-02-22 12:53:47 +01:00
Nicolas F bc71ad7a8f web: fix white rectangle behind markers 2019-02-21 18:25:50 +01:00