diff --git a/README.md b/README.md index cdb0e2e..f953c08 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ Cubiomes Viewer provides a graphical interface for the efficient and flexible seed-finding utilities provided by [cubiomes](https://github.com/Cubitect/cubiomes) and a map viewer for the Minecraft biomes and structure generation. -The tool is designed for high performance and currently supports Minecraft Java Edition 1.6 - 1.17. +The tool is designed for high performance and supports Minecraft Java Edition main releases 1.0 - 1.17. ## Download diff --git a/cubiomes b/cubiomes index e61f4f1..b94c12e 160000 --- a/cubiomes +++ b/cubiomes @@ -1 +1 @@ -Subproject commit e61f4f1ebf0bda93d16309ca45a216d632c23acc +Subproject commit b94c12e98227504a74270ab9b5fa3d91d132b7dc diff --git a/src/aboutdialog.h b/src/aboutdialog.h index 71b02ad..7ca3193 100644 --- a/src/aboutdialog.h +++ b/src/aboutdialog.h @@ -5,7 +5,7 @@ #define VERS_MAJOR 1 #define VERS_MINOR 9 -#define VERS_PATCH -1 // negative patch number designates a development version +#define VERS_PATCH 0 // negative patch number designates a development version // returns +1 if newer, -1 if older and 0 if equal inline int cmpVers(int major, int minor, int patch) diff --git a/src/filterdialog.cpp b/src/filterdialog.cpp index c7c04c6..7d727b3 100644 --- a/src/filterdialog.cpp +++ b/src/filterdialog.cpp @@ -10,6 +10,7 @@ #include #include #include +#include #define SETUP_BIOME_CHECKBOX(B) do {\ @@ -50,6 +51,10 @@ FilterDialog::FilterDialog(FormConditions *parent, int mcversion, QListWidgetIte memset(&cond, 0, sizeof(cond)); ui->setupUi(this); + textDescription = new QTextEdit(this); + textDescription->setSizeAdjustPolicy(QAbstractScrollArea::AdjustToContents); + ui->collapseDescription->init("Description", textDescription, true); + QString mcs = "MC "; mcs += (mc2str(mc) ? mc2str(mc) : "?"); ui->labelMC->setText(mcs); @@ -360,8 +365,8 @@ void FilterDialog::updateMode() ui->lineEditZ1->setToolTip(lowtip); ui->lineEditX2->setToolTip(uptip); ui->lineEditZ2->setToolTip(uptip); - ui->textDescription->setText(ft.desription); ui->buttonOk->setEnabled(filterindex != F_SELECT); + textDescription->setText(ft.description); } void FilterDialog::enableSet(const int *ids, int n) @@ -610,19 +615,34 @@ void FilterDialog::on_comboBoxCat_currentIndexChanged(int idx) int slot = 0; ui->comboBoxType->insertItem(slot, "Select filter", QVariant::fromValue((int)F_SELECT)); + const FilterInfo *ft_list[FILTER_MAX] = {}; + const FilterInfo *ft; + + for (int i = 1; i < FILTER_MAX; i++) + { + ft = &g_filterinfo.list[i]; + if (ft->cat == idx) + ft_list[ft->disp] = ft; + } + for (int i = 1; i < FILTER_MAX; i++) { - const FilterInfo &ft = g_filterinfo.list[i]; - if (ft.cat != idx) + ft = ft_list[i]; + if (!ft) continue; slot++; - if (ft.icon) - ui->comboBoxType->insertItem(slot, QIcon(ft.icon), ft.name, i); + QVariant vidx = QVariant::fromValue((int)(ft - g_filterinfo.list)); + if (ft->icon) + ui->comboBoxType->insertItem(slot, QIcon(ft->icon), ft->name, vidx); else - ui->comboBoxType->insertItem(slot, ft.name, i); + ui->comboBoxType->insertItem(slot, ft->name, vidx); - if (mc < ft.mcmin) + if (mc < ft->mcmin) ui->comboBoxType->setItemData(slot, false, Qt::UserRole-1); // deactivate + if (ft == g_filterinfo.list + F_FORTRESS) + ui->comboBoxType->insertSeparator(slot++); + if (ft == g_filterinfo.list + F_ENDCITY) + ui->comboBoxType->insertSeparator(slot++); } updateMode(); diff --git a/src/filterdialog.h b/src/filterdialog.h index 04cfa13..c7a1a85 100644 --- a/src/filterdialog.h +++ b/src/filterdialog.h @@ -6,6 +6,7 @@ #include #include #include +#include #include "search.h" #include "formconditions.h" @@ -46,18 +47,12 @@ class SpinExclude : public QSpinBox public slots: void change(int v) { + const char *style = ""; if (v < 0) - { - setStyleSheet("background: #28ff0000"); - } - else if (v > 0) - { - setStyleSheet("background: #2800ff00"); - } - else - { - setStyleSheet(""); - } + style = "background: #28ff0000"; + if (v > 0) + style = "background: #2800ff00"; + setStyleSheet(style); findChild()->deselect(); } }; @@ -102,6 +97,8 @@ private slots: private: Ui::FilterDialog *ui; + QTextEdit *textDescription; + QCheckBox *biomecboxes[256]; SpinExclude *tempsboxes[9]; bool custom; diff --git a/src/filterdialog.ui b/src/filterdialog.ui index d7b954f..10c4951 100644 --- a/src/filterdialog.ui +++ b/src/filterdialog.ui @@ -15,12 +15,109 @@ + + + 0 + + + false + + + + Biomes + + + + + + + + uncheck all + + + + + + + include all + + + + + + + exclude all + + + + + + + + + true + + + + + 0 + 0 + 570 + 315 + + + + + QLayout::SetMinAndMaxSize + + + + + + + + + + + + + Temperature Categories + + + + + + Select how many entries of each temperature category are required. + + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + Location - + Location is relative to: @@ -37,7 +134,7 @@ - + @@ -189,42 +286,7 @@ - - - - Description - - - - - - - 0 - 0 - - - - - 16777215 - 80 - - - - Qt::NoTextInteraction - - - - - - - - - - Filter type: - - - - + @@ -261,7 +323,7 @@ - :/icons/village.png:/icons/village.png + :/icons/stronghold.png:/icons/stronghold.png @@ -302,14 +364,14 @@ - + false - 240 + 260 0 @@ -332,9 +394,19 @@ + + + + Filter type: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + - + @@ -356,7 +428,8 @@ - .. + + @@ -367,115 +440,31 @@ - .. + + - - - - 0 - - - false - - - - Biomes - - - - - - - - uncheck all - - - - - - - include all - - - - - - - exclude all - - - - - - - - - true - - - - - 0 - 0 - 562 - 188 - - - - - QLayout::SetMinAndMaxSize - - - - - - - - - - - - - Temperature Categories - - - - - - Select how many entries of each temperature category are required. - - - - - - - - - - Qt::Vertical - - - - 20 - 40 - - - - - - - + + + + + Collapsible + QWidget +
src/collapsible.h
+ 1 +
+
buttonOk buttonCancel - textDescription + comboBoxCat + comboBoxType spinBox lineRadius buttonArea @@ -487,6 +476,7 @@ tabWidget buttonUncheck buttonInclude + buttonExclude scrollArea diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 0b88a72..022bed6 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -139,22 +139,21 @@ MainWindow::MainWindow(QWidget *parent) saction.resize(STRUCT_NUM); addMapAction(D_GRID, "grid", "Show grid"); addMapAction(D_SLIME, "slime", "Show slime chunks"); - ui->toolBar->addSeparator(); + addMapAction(D_SPAWN, "spawn", "Show world spawn"); + addMapAction(D_STRONGHOLD, "stronghold", "Show strongholds"); + addMapAction(D_VILLAGE, "village", "Show villages"); + addMapAction(D_MINESHAFT, "mineshaft", "Show abandoned mineshafts"); addMapAction(D_DESERT, "desert", "Show desert pyramid"); addMapAction(D_JUNGLE, "jungle", "Show jungle temples"); - addMapAction(D_IGLOO, "igloo", "Show igloos"); addMapAction(D_HUT, "hut", "Show swamp huts"); - addMapAction(D_VILLAGE, "village", "Show villages"); - addMapAction(D_MANSION, "mansion", "Show woodland mansions"); addMapAction(D_MONUMENT, "monument", "Show ocean monuments"); + addMapAction(D_IGLOO, "igloo", "Show igloos"); + addMapAction(D_MANSION, "mansion", "Show woodland mansions"); addMapAction(D_RUINS, "ruins", "Show ocean ruins"); addMapAction(D_SHIPWRECK, "shipwreck", "Show shipwrecks"); addMapAction(D_TREASURE, "treasure", "Show buried treasures"); - addMapAction(D_MINESHAFT, "mineshaft", "Show abandoned mineshafts"); addMapAction(D_OUTPOST, "outpost", "Show illager outposts"); addMapAction(D_PORTAL, "portal", "Show ruined portals"); - addMapAction(D_SPAWN, "spawn", "Show world spawn"); - addMapAction(D_STRONGHOLD, "stronghold", "Show strongholds"); ui->toolBar->addSeparator(); addMapAction(D_FORTESS, "fortress", "Show nether fortresses"); addMapAction(D_BASTION, "bastion", "Show bastions"); diff --git a/src/mainwindow.ui b/src/mainwindow.ui index ca55797..4eb6455 100644 --- a/src/mainwindow.ui +++ b/src/mainwindow.ui @@ -26,16 +26,7 @@ - - 0 - - - 0 - - - 0 - - + 0 @@ -154,6 +145,36 @@ 1.6
+ + + 1.5 + + + + + 1.4 + + + + + 1.3 + + + + + 1.2 + + + + + 1.1 + + + + + 1.0 + + @@ -174,16 +195,7 @@ Search - - 0 - - - 0 - - - 0 - - + 0 @@ -229,8 +241,8 @@ QToolButton { 0 0 - 1232 - 699 + 1233 + 705 @@ -529,16 +541,7 @@ QSplitter { QFrame::Raised - - 0 - - - 0 - - - 0 - - + 0 @@ -605,7 +608,7 @@ QToolButton:checked { 0 0 1280 - 22 + 23 diff --git a/src/quadlistdialog.cpp b/src/quadlistdialog.cpp index da18185..ecc03b4 100644 --- a/src/quadlistdialog.cpp +++ b/src/quadlistdialog.cpp @@ -26,6 +26,17 @@ QuadListDialog::QuadListDialog(MainWindow *mainwindow) ui->listQuadStruct->setColumnWidth(2, 160); ui->listQuadStruct->setColumnWidth(3, 120); + for (int i = 0, n = ui->comboBoxMC->count(); i < n; i++) + { + const std::string& mcs = ui->comboBoxMC->itemText(i).toStdString(); + int mc = str2mc(mcs.c_str()); + if (mc < 0) + qDebug() << "Unknown MC version: " << mcs.c_str(); + ui->comboBoxMC->setItemData(i, QVariant::fromValue(mc), Qt::UserRole); + if (mc < MC_1_4) + ui->comboBoxMC->setItemData(i, false, Qt::UserRole-1); + } + loadSeed(); refresh(); } @@ -59,8 +70,7 @@ bool QuadListDialog::getSeed(WorldInfo *wi) { // init using mainwindow bool ok = mainwindow->getSeed(wi, false); - const std::string& mcs = ui->comboBoxMC->currentText().toStdString(); - wi->mc = str2mc(mcs.c_str()); + wi->mc = ui->comboBoxMC->currentData(Qt::UserRole).toInt(); if (wi->mc < 0) { wi->mc = MC_NEWEST; diff --git a/src/quadlistdialog.ui b/src/quadlistdialog.ui index 2d28556..f3c1b7e 100644 --- a/src/quadlistdialog.ui +++ b/src/quadlistdialog.ui @@ -59,6 +59,9 @@ Structure + + qype of quad-structure + AlignLeft|AlignVCenter @@ -101,7 +104,7 @@ Spawn area - horizontal area in a 128 block range + horizontal bounding box area inside a 128 block range AlignLeft|AlignVCenter @@ -226,6 +229,36 @@ 1.6 + + + 1.5 + + + + + 1.4 + + + + + 1.3 + + + + + 1.2 + + + + + 1.1 + + + + + 1.0 + + diff --git a/src/search.h b/src/search.h index 10d1f03..2475b47 100644 --- a/src/search.h +++ b/src/search.h @@ -31,9 +31,10 @@ struct FilterInfo int count; // int mcmin; // minimum version int dim; // dimension + int disp; // display order const char *icon; const char *name; - const char *desription; + const char *description; }; enum @@ -92,15 +93,17 @@ static const struct FilterList FilterList() : list{} { + int disp = 0; // display order + list[F_SELECT] = FilterInfo{ - CAT_NONE, 0, 0, 0, 0, 0, 0, MC_1_0, 0, + CAT_NONE, 0, 0, 0, 0, 0, 0, MC_1_0, 0, disp++, NULL, "", "" }; list[F_QH_IDEAL] = FilterInfo{ - CAT_QUAD, 1, 1, 0, Swamp_Hut, 512, 0, MC_1_4, 0, + CAT_QUAD, 1, 1, 0, Swamp_Hut, 512, 0, MC_1_4, 0, disp++, ":icons/quad.png", "Quad-hut (ideal)", "The lower 48-bits provide potential for four swamp huts in " @@ -108,7 +111,7 @@ static const struct FilterList }; list[F_QH_CLASSIC] = FilterInfo{ - CAT_QUAD, 1, 1, 0, Swamp_Hut, 512, 0, MC_1_4, 0, + CAT_QUAD, 1, 1, 0, Swamp_Hut, 512, 0, MC_1_4, 0, disp++, ":icons/quad.png", "Quad-hut (classic)", "The lower 48-bits provide potential for four swamp huts in " @@ -118,7 +121,7 @@ static const struct FilterList }; list[F_QH_NORMAL] = FilterInfo{ - CAT_QUAD, 1, 1, 0, Swamp_Hut, 512, 0, MC_1_4, 0, + CAT_QUAD, 1, 1, 0, Swamp_Hut, 512, 0, MC_1_4, 0, disp++, ":icons/quad.png", "Quad-hut (normal)", "The lower 48-bits provide potential for four swamp huts in " @@ -128,7 +131,7 @@ static const struct FilterList }; list[F_QH_BARELY] = FilterInfo{ - CAT_QUAD, 1, 1, 0, Swamp_Hut, 512, 0, MC_1_4, 0, + CAT_QUAD, 1, 1, 0, Swamp_Hut, 512, 0, MC_1_4, 0, disp++, ":icons/quad.png", "Quad-hut (barely)", "The lower 48-bits provide potential for four swamp huts in " @@ -137,7 +140,7 @@ static const struct FilterList }; list[F_QM_95] = FilterInfo{ - CAT_QUAD, 1, 1, 0, Monument, 512, 0, MC_1_8, 0, + CAT_QUAD, 1, 1, 0, Monument, 512, 0, MC_1_8, 0, disp++, ":icons/quad.png", "Quad-ocean-monument (>95%)", "The lower 48-bits provide potential for 95% of the area of " @@ -146,7 +149,7 @@ static const struct FilterList }; list[F_QM_90] = FilterInfo{ - CAT_QUAD, 1, 1, 0, Monument, 512, 0, MC_1_8, 0, + CAT_QUAD, 1, 1, 0, Monument, 512, 0, MC_1_8, 0, disp++, ":icons/quad.png", "Quad-ocean-monument (>90%)", "The lower 48-bits provide potential for 90% of the area of " @@ -155,7 +158,7 @@ static const struct FilterList }; list[F_BIOME] = FilterInfo{ - CAT_BIOMES, 1, 1, L_VORONOI_1, 0, 1, 0, MC_1_0, 0, + CAT_BIOMES, 1, 1, L_VORONOI_1, 0, 1, 0, MC_1_0, 0, disp++, ":icons/map.png", "Biome filter 1:1", "Only seeds with the included (+) biomes in the specified area and " @@ -163,7 +166,7 @@ static const struct FilterList }; list[F_BIOME_4_RIVER] = FilterInfo{ - CAT_BIOMES, 1, 1, L_RIVER_MIX_4, 0, 4, 0, MC_1_0, 0, + CAT_BIOMES, 1, 1, L_RIVER_MIX_4, 0, 4, 0, MC_1_0, 0, disp++, ":icons/map.png", "Biome filter 1:4 RIVER", "Only seeds with the included (+) biomes in the specified area and " @@ -172,7 +175,7 @@ static const struct FilterList }; list[F_BIOME_16_SHORE] = FilterInfo{ - CAT_BIOMES, 1, 1, L_SHORE_16, 0, 16, 0, MC_1_0, 0, + CAT_BIOMES, 1, 1, L_SHORE_16, 0, 16, 0, MC_1_1, 0, disp++, ":icons/map.png", "Biome filter 1:16 SHORE", "Only seeds with the included (+) biomes in the specified area and " @@ -181,7 +184,7 @@ static const struct FilterList }; list[F_BIOME_64_RARE] = FilterInfo{ - CAT_BIOMES, 1, 1, L_SUNFLOWER_64, 0, 64, 0, MC_1_7, 0, + CAT_BIOMES, 1, 1, L_SUNFLOWER_64, 0, 64, 0, MC_1_7, 0, disp++, ":icons/map.png", "Biome filter 1:64 RARE", "Only seeds with the included (+) biomes in the specified area and " @@ -190,7 +193,7 @@ static const struct FilterList }; list[F_BIOME_256_BIOME] = FilterInfo{ - CAT_BIOMES, 1, 1, L_BIOME_256, 0, 256, 0, MC_1_0, 0, + CAT_BIOMES, 1, 1, L_BIOME_256, 0, 256, 0, MC_1_0, 0, disp++, ":icons/map.png", "Biome filter 1:256 BIOME", "Only seeds with the included (+) biomes in the specified area and " @@ -199,7 +202,7 @@ static const struct FilterList }; list[F_BIOME_256_OTEMP] = FilterInfo{ - CAT_BIOMES, 1, 1, L_OCEAN_TEMP_256, 0, 256, 0, MC_1_13, 0, + CAT_BIOMES, 1, 1, L_OCEAN_TEMP_256, 0, 256, 0, MC_1_13, 0, disp++, ":icons/map.png", "Biome filter 1:256 O.TEMP", "Only seeds with the included (+) biomes in the specified area and " @@ -209,34 +212,34 @@ static const struct FilterList }; list[F_TEMPS] = FilterInfo{ - CAT_BIOMES, 1, 1, 0, 0, 1024, 0, MC_1_7, 0, + CAT_BIOMES, 1, 1, 0, 0, 1024, 0, MC_1_7, 0, disp++, ":icons/tempcat.png", "Temperature categories", "Checks that the area has a minimum of all the required temperature categories." }; list[F_BIOME_NETHER_1] = FilterInfo{ - CAT_NETHER, 1, 1, 0, 0, 1, 0, MC_1_16, -1, + CAT_NETHER, 1, 1, 0, 0, 1, 0, MC_1_16, -1, disp++, ":icons/nether.png", "Nether biome filter 1:1", "Nether biomes after voronoi scaling to 1:1. (height: y = 0)" }; list[F_BIOME_NETHER_4] = FilterInfo{ - CAT_NETHER, 1, 1, 0, 0, 4, 0, MC_1_16, -1, + CAT_NETHER, 1, 1, 0, 0, 4, 0, MC_1_16, -1, disp++, ":icons/nether.png", "Nether biome filter 1:4", "Nether biomes with normal noise sampling at scale 1:4. (height: y = 0) " "(The Nether and End depend only on the lower 48-bits of the seed.)" }; list[F_BIOME_NETHER_16] = FilterInfo{ - CAT_NETHER, 1, 1, 0, 0, 16, 0, MC_1_16, -1, + CAT_NETHER, 1, 1, 0, 0, 16, 0, MC_1_16, -1, disp++, ":icons/nether.png", "Nether biome filter 1:16", "Nether biomes, but only sampled at scale 1:16. (height: y = 0) " "(The Nether and End depend only on the lower 48-bits of the seed.)" }; list[F_BIOME_NETHER_64] = FilterInfo{ - CAT_NETHER, 1, 1, 0, 0, 64, 0, MC_1_16, -1, + CAT_NETHER, 1, 1, 0, 0, 64, 0, MC_1_16, -1, disp++, ":icons/nether.png", "Nether biome filter 1:64", "Nether biomes, but only sampled at scale 1:64, (height: y = 0) " @@ -244,175 +247,175 @@ static const struct FilterList }; list[F_BIOME_END_1] = FilterInfo{ - CAT_END, 1, 1, 0, 0, 1, 0, MC_1_9, +1, + CAT_END, 1, 1, 0, 0, 1, 0, MC_1_9, +1, disp++, ":icons/the_end.png", "End biome filter 1:1", "End biomes after voronoi scaling to 1:1." }; list[F_BIOME_END_4] = FilterInfo{ - CAT_END, 1, 1, 0, 0, 4, 0, MC_1_9, +1, + CAT_END, 1, 1, 0, 0, 4, 0, MC_1_9, +1, disp++, ":icons/the_end.png", "End biome filter 1:4", "End biomes sampled at scale 1:4. Note this is just a simple upscale of 1:16. " "(The Nether and End depend only on the lower 48-bits of the seed.)" }; list[F_BIOME_END_16] = FilterInfo{ - CAT_END, 1, 1, 0, 0, 16, 0, MC_1_9, +1, + CAT_END, 1, 1, 0, 0, 16, 0, MC_1_9, +1, disp++, ":icons/the_end.png", "End biome filter 1:16", "End biomes with normal sampling at scale 1:16. " "(The Nether and End depend only on the lower 48-bits of the seed.)" }; list[F_BIOME_END_64] = FilterInfo{ - CAT_END, 1, 1, 0, 0, 64, 0, MC_1_9, +1, + CAT_END, 1, 1, 0, 0, 64, 0, MC_1_9, +1, disp++, ":icons/the_end.png", "End biome filter 1:64", "End biomes with lossy sampling at scale 1:64. " "(The Nether and End depend only on the lower 48-bits of the seed.)" }; - list[F_SLIME] = FilterInfo{ - CAT_OTHER, 1, 1, 0, 0, 16, 1, MC_1_0, 0, - ":icons/slime.png", - "Slime chunk", - "" - }; - list[F_SPAWN] = FilterInfo{ - CAT_OTHER, 1, 1, 0, 0, 1, 0, MC_1_0, 0, + CAT_OTHER, 1, 1, 0, 0, 1, 0, MC_1_0, 0, disp++, ":icons/spawn.png", "Spawn", "" }; + list[F_SLIME] = FilterInfo{ + CAT_OTHER, 1, 1, 0, 0, 16, 1, MC_1_0, 0, disp++, + ":icons/slime.png", + "Slime chunk", + "" + }; + list[F_STRONGHOLD] = FilterInfo{ - CAT_STRUCT, 1, 1, 0, 0, 1, 1, MC_1_0, 0, + CAT_STRUCT, 1, 1, 0, 0, 1, 1, MC_1_0, 0, disp++, ":icons/stronghold.png", "Stronghold", "" }; + list[F_VILLAGE] = FilterInfo{ + CAT_STRUCT, 1, 1, 0, Village, 1, 1, MC_1_0, 0, disp++, + ":icons/village.png", + "Village", + "" + }; + + list[F_MINESHAFT] = FilterInfo{ + CAT_STRUCT, 1, 1, 0, Mineshaft, 1, 1, MC_1_0, 0, disp++, + ":icons/mineshaft.png", + "Abandoned mineshaft", + "" + }; + list[F_DESERT] = FilterInfo{ - CAT_STRUCT, 1, 1, 0, Desert_Pyramid, 1, 1, MC_1_3, 0, + CAT_STRUCT, 1, 1, 0, Desert_Pyramid, 1, 1, MC_1_3, 0, disp++, ":icons/desert.png", "Desert pyramid", "" }; list[F_JUNGLE] = FilterInfo{ - CAT_STRUCT, 1, 1, 0, Jungle_Pyramid, 1, 1, MC_1_3, 0, + CAT_STRUCT, 1, 1, 0, Jungle_Pyramid, 1, 1, MC_1_3, 0, disp++, ":icons/jungle.png", "Jungle temple", "" }; list[F_HUT] = FilterInfo{ - CAT_STRUCT, 1, 1, 0, Swamp_Hut, 1, 1, MC_1_4, 0, + CAT_STRUCT, 1, 1, 0, Swamp_Hut, 1, 1, MC_1_4, 0, disp++, ":icons/hut.png", "Swamp hut", "" }; - list[F_IGLOO] = FilterInfo{ - CAT_STRUCT, 1, 1, 0, Igloo, 1, 1, MC_1_9, 0, - ":icons/igloo.png", - "Igloo", - "" - }; - list[F_MONUMENT] = FilterInfo{ - CAT_STRUCT, 1, 1, 0, Monument, 1, 1, MC_1_8, 0, + CAT_STRUCT, 1, 1, 0, Monument, 1, 1, MC_1_8, 0, disp++, ":icons/monument.png", "Ocean monument", "" }; - list[F_VILLAGE] = FilterInfo{ - CAT_STRUCT, 1, 1, 0, Village, 1, 1, MC_1_0, 0, - ":icons/village.png", - "Village", - "" - }; - - list[F_OUTPOST] = FilterInfo{ - CAT_STRUCT, 1, 1, 0, Outpost, 1, 1, MC_1_14, 0, - ":icons/outpost.png", - "Pillager outpost", + list[F_IGLOO] = FilterInfo{ + CAT_STRUCT, 1, 1, 0, Igloo, 1, 1, MC_1_9, 0, disp++, + ":icons/igloo.png", + "Igloo", "" }; list[F_MANSION] = FilterInfo{ - CAT_STRUCT, 1, 1, 0, Mansion, 1, 1, MC_1_11, 0, + CAT_STRUCT, 1, 1, 0, Mansion, 1, 1, MC_1_11, 0, disp++, ":icons/mansion.png", "Woodland mansion", "" }; - list[F_TREASURE] = FilterInfo{ - CAT_STRUCT, 1, 1, 0, Treasure, 1, 1, MC_1_13, 0, - ":icons/treasure.png", - "Buried treasure", - "" - }; - - list[F_MINESHAFT] = FilterInfo{ - CAT_STRUCT, 1, 1, 0, Mineshaft, 1, 1, MC_1_0, 0, - ":icons/mineshaft.png", - "Abandoned mineshaft", - "" - }; - list[F_RUINS] = FilterInfo{ - CAT_STRUCT, 1, 1, 0, Ocean_Ruin, 1, 1, MC_1_13, 0, + CAT_STRUCT, 1, 1, 0, Ocean_Ruin, 1, 1, MC_1_13, 0, disp++, ":icons/ruins.png", "Ocean ruins", "" }; list[F_SHIPWRECK] = FilterInfo{ - CAT_STRUCT, 1, 1, 0, Shipwreck, 1, 1, MC_1_13, 0, + CAT_STRUCT, 1, 1, 0, Shipwreck, 1, 1, MC_1_13, 0, disp++, ":icons/shipwreck.png", "Shipwreck", "" }; + list[F_TREASURE] = FilterInfo{ + CAT_STRUCT, 1, 1, 0, Treasure, 1, 1, MC_1_13, 0, disp++, + ":icons/treasure.png", + "Buried treasure", + "" + }; + + list[F_OUTPOST] = FilterInfo{ + CAT_STRUCT, 1, 1, 0, Outpost, 1, 1, MC_1_14, 0, disp++, + ":icons/outpost.png", + "Pillager outpost", + "" + }; + list[F_PORTAL] = FilterInfo{ - CAT_STRUCT, 1, 1, 0, Ruined_Portal, 1, 1, MC_1_16, 0, + CAT_STRUCT, 1, 1, 0, Ruined_Portal, 1, 1, MC_1_16, 0, disp++, ":icons/portal.png", "Ruined portal (overworld)", "" }; list[F_PORTALN] = FilterInfo{ - CAT_STRUCT, 1, 1, 0, Ruined_Portal_N, 1, 1, MC_1_16, -1, + CAT_STRUCT, 1, 1, 0, Ruined_Portal_N, 1, 1, MC_1_16, -1, disp++, ":icons/portal.png", "Ruined portal (nether)", "(The Nether and End depend only on the lower 48-bits of the seed.)" }; list[F_FORTRESS] = FilterInfo{ - CAT_STRUCT, 1, 1, 0, Fortress, 1, 1, MC_1_0, -1, + CAT_STRUCT, 1, 1, 0, Fortress, 1, 1, MC_1_0, -1, disp++, ":icons/fortress.png", "Nether fortress", "(The Nether and End depend only on the lower 48-bits of the seed.)" }; list[F_BASTION] = FilterInfo{ - CAT_STRUCT, 1, 1, 0, Bastion, 1, 1, MC_1_16, -1, + CAT_STRUCT, 1, 1, 0, Bastion, 1, 1, MC_1_16, -1, disp++, ":icons/bastion.png", "Bastion remnant", "(The Nether and End depend only on the lower 48-bits of the seed.)" }; list[F_ENDCITY] = FilterInfo{ - CAT_STRUCT, 1, 1, 0, End_City, 1, 1, MC_1_9, +1, + CAT_STRUCT, 1, 1, 0, End_City, 1, 1, MC_1_9, +1, disp++, ":icons/endcity.png", "End city", "(The Nether and End depend only on the lower 48-bits of the seed.)" }; list[F_GATEWAY] = FilterInfo{ - CAT_STRUCT, 1, 1, 0, End_Gateway, 1, 1, MC_1_13, +1, + CAT_STRUCT, 1, 1, 0, End_Gateway, 1, 1, MC_1_13, +1, disp++, ":icons/gateway.png", "End gateway", "Scattered end gateway return portals, not including those "