Skip to content

Commit 57c4ec2

Browse files
authored
Merge pull request #128 from BentoBoxWorld/develop
Release 1.9.4
2 parents c73e5e0 + 3eb8202 commit 57c4ec2

File tree

30 files changed

+3550
-610
lines changed

30 files changed

+3550
-610
lines changed

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@
4747
<!-- Revision variable removes warning about dynamic version -->
4848
<revision>${build.version}-SNAPSHOT</revision>
4949
<!-- This allows to change between versions and snapshots. -->
50-
<build.version>1.9.3</build.version>
50+
<build.version>1.9.4</build.version>
5151
<build.number>-LOCAL</build.number>
5252
<sonar.projectKey>BentoBoxWorld_Greenhouses</sonar.projectKey>
5353
<sonar.organization>bentobox-world</sonar.organization>

src/main/java/world/bentobox/greenhouses/greenhouse/BiomeRecipe.java

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,7 @@ public boolean addMobs(EntityType mobType, double mobProbability, Material mobSp
153153
mobTree.put(lastProb + probability, new GreenhouseMob(mobType, mobSpawnOn, customizer));
154154
return true;
155155
} else {
156-
addon.logError("Mob chances add up to > 100% in " + type + " biome recipe! Skipping " + mobType);
156+
addon.logError("Mob chances add up to > 100% in " + type.name() + " biome recipe! Skipping " + mobType);
157157
return false;
158158
}
159159
}
@@ -179,7 +179,7 @@ public boolean addPlants(Material plantMaterial, double plantProbability, Materi
179179
// Add to probability tree
180180
map.put(lastProb + probability, new GreenhousePlant(plantMaterial, plantGrowOn));
181181
} else {
182-
addon.logError("Plant chances add up to > 100% in " + type + " biome recipe! Skipping "
182+
addon.logError("Plant chances add up to > 100% in " + type.name() + " biome recipe! Skipping "
183183
+ plantMaterial.toString());
184184
return false;
185185
}
@@ -403,8 +403,9 @@ public boolean spawnMob(Block b) {
403403
return getRandomMob()
404404
// Check if the spawn on block matches, if it exists
405405
.filter(m -> Optional.of(m.mobSpawnOn())
406-
.map(b.getRelative(BlockFace.DOWN).getType()::equals)
406+
.map(getEffectiveBlock(b.getRelative(BlockFace.DOWN))::equals)
407407
.orElse(true))
408+
408409
// If spawn occurs, check if it can fit inside greenhouse
409410
.map(m -> {
410411
Entity entity = b.getWorld().spawnEntity(spawnLoc, m.mobType());
@@ -425,6 +426,19 @@ public boolean spawnMob(Block b) {
425426
}).orElse(false);
426427
}
427428

429+
/**
430+
* Get the effective block material, allowing bubble columns to act as water.
431+
* @param b - block to check
432+
* @return the block
433+
*/
434+
private Material getEffectiveBlock(Block b) {
435+
// Treat Bubble Column as water
436+
if (b.getType() == Material.BUBBLE_COLUMN) {
437+
return Material.WATER;
438+
}
439+
return b.getType();
440+
}
441+
428442
/**
429443
* Prevent hoglins and piglins from zombifying if they spawn in the overworld
430444
* @param entity - spawned entity

src/main/java/world/bentobox/greenhouses/listeners/GreenhouseEvents.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@
1212
import org.bukkit.World;
1313
import org.bukkit.block.Biome;
1414
import org.bukkit.block.Block;
15+
import org.bukkit.block.data.BlockData;
16+
import org.bukkit.block.data.Waterlogged;
1517
import org.bukkit.event.EventHandler;
1618
import org.bukkit.event.EventPriority;
1719
import org.bukkit.event.Listener;
@@ -50,11 +52,17 @@ public void onPlayerInteractInNether(PlayerBucketEmptyEvent e) {
5052
if (!e.getBucket().equals(Material.WATER_BUCKET)) {
5153
return;
5254
}
55+
BlockData blockData = e.getBlockClicked().getBlockData();
5356
Block b = e.getBlockClicked().getRelative(e.getBlockFace());
5457
if (e.getPlayer().getWorld().getEnvironment().equals(World.Environment.NETHER)
5558
&& !addon.getManager().getMap().getGreenhouse(b.getLocation())
5659
.map(gh -> gh.getBiomeRecipe().getBiome()).map(NETHER_BIOMES::contains).orElse(true)) {
5760
// In Nether not a nether greenhouse
61+
if (blockData instanceof Waterlogged w) {
62+
w.setWaterlogged(true);
63+
e.getBlockClicked().setBlockData(w);
64+
return;
65+
}
5866
b.setType(Material.WATER);
5967
} else if (!e.getPlayer().getWorld().getEnvironment().equals(World.Environment.NETHER)
6068
&& addon.getManager().getMap().getGreenhouse(b.getLocation())

src/main/java/world/bentobox/greenhouses/managers/EcoSystemManager.java

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -241,16 +241,14 @@ protected List<GrowthBlock> getAvailableBlocks(Greenhouse gh, boolean ignoreLiqu
241241
for (double z = ibb.getMinZ(); z < ibb.getMaxZ(); z++) {
242242
for (double y = ibb.getMaxY() - 1; y >= bb.getMinY(); y--) {
243243
Block b = gh.getWorld().getBlockAt(NumberConversions.floor(x), NumberConversions.floor(y), NumberConversions.floor(z));
244-
if (checkBlock(result, b, ignoreLiquid)) {
245-
break;
246-
}
244+
checkBlock(result, b, ignoreLiquid);
247245
}
248246
}
249247
}
250248
return result;
251249
}
252250

253-
private boolean checkBlock(List<GrowthBlock> result, Block b, boolean ignoreLiquid) {
251+
private void checkBlock(List<GrowthBlock> result, Block b, boolean ignoreLiquid) {
254252
// Check floor blocks
255253
if (!ignoreLiquid) {
256254
// Check ceiling blocks
@@ -264,15 +262,12 @@ private boolean checkBlock(List<GrowthBlock> result, Block b, boolean ignoreLiqu
264262
)
265263
) {
266264
result.add(new GrowthBlock(b.getRelative(BlockFace.UP), true));
267-
return true;
268265
}
269266
} else {
270267
if (!b.isEmpty() && !b.isLiquid() && b.getRelative(BlockFace.UP).isLiquid()) {
271268
result.add(new GrowthBlock(b.getRelative(BlockFace.UP), true));
272-
return true;
273269
}
274270
}
275-
return false;
276271
}
277272

278273
private int getBoneMeal(Greenhouse gh) {

src/main/java/world/bentobox/greenhouses/ui/panel/Panel.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ public void showPanel(User user) {
3636
private List<String> getDescription(User user, BiomeRecipe br) {
3737
List<String> d = new ArrayList<>();
3838
// Make description
39-
d.add(user.getTranslation("greenhouses.recipe.title", "[biome]", Util.prettifyText(br.getBiome().toString())));
39+
d.add(user.getTranslation("greenhouses.recipe.title", "[biome]", Util.prettifyText(br.getBiome().getKey().getKey())));
4040
if (!br.getRecipeBlocks().isEmpty()) {
4141
d.add(user.getTranslation("greenhouses.recipe.minimumblockstitle"));
4242
br.getRecipeBlocks().forEach(b -> d.add(user.getTranslation("greenhouses.recipe.blockscolor") + b));

src/main/resources/biomes.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -339,9 +339,9 @@ biomes:
339339
HORSE: 18:GRASS_BLOCK
340340
DONKEY: 2:GRASS_BLOCK
341341
COW: 20:GRASS_BLOCK
342-
CHICKEN: 25:GRASS_BLOCK
343-
PIG: 25:GRASS_BLOCK
344-
SHEEP: 25:GRASS_BLOCK
342+
CHICKEN: 20:GRASS_BLOCK
343+
PIG: 20:GRASS_BLOCK
344+
SHEEP: 20:GRASS_BLOCK
345345
moblimit: 1
346346
# Maxmobs - this is the maximum number of greenhouse-spawed mobs allowed in
347347
# the greenhouse at once. Spawning will stop when this limit is reached.

src/main/resources/locales/cs.yml

Lines changed: 94 additions & 104 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ greenhouses:
2222
no-rank: "&cNa toto nemáš hodnost."
2323
notyours: "Toto není tvůj skleník!"
2424
not-inside: "&cNejsi ve skleníku!"
25-
tooexpensive: "Nemůžeš si dovolit [price]"
25+
tooexpensive: "Nemůžeš si dovolit [price]"
2626
alreadyexists: "Skleník již existuje!"
2727
norecipe: "Nelze vytvořit skleník!"
2828

@@ -38,154 +38,144 @@ greenhouses:
3838
icemustbe: "Ledové bloky > [coverage]% povrchu podlahy."
3939
lavamustbe: "Láva > [coverage]% povrchu podlahy."
4040
minimumblockstitle: "[Minimum bloků vyžadováno]"
41-
nootherblocks: "Žádné další bloky nejsou vyžadovány."
41+
nootherblocks: "Žádné další bloky již nejsou vyžadovány."
4242
missing: "Skleník chybí"
43-
43+
4444
commands:
4545
user:
46+
description: "Otevře GUI pro výběr skleníku"
4647
remove:
47-
description: "Odstraní skleník, ve kterém stojíš, jsi-li vlastníkem"
48+
description: "Odstraní skleník, ve kterém stojíš, pokud jsi jeho vlastník"
4849
make:
49-
description: "Pokusit se o výrobu skelníku"
50-
parameters: "<recipe>"
50+
description: "Pokusit se vytvořit skleník"
51+
parameters: "<recept>"
5152
error:
52-
already: "&cTady už je skleník!"
53+
already: "&cZde již skleník existuje!"
5354
FAIL_BAD_ROOF_BLOCKS: "&cStřecha obsahuje nepovolené bloky!"
54-
FAIL_BAD_WALL_BLOCKS: "&cStěny obsahují nepovolené bloky!"
55-
FAIL_BELOW: "&cMusíš být uvnitř skleníku, aby ses pokusis jej vytvořit"
56-
FAIL_BLOCKS_ABOVE: "&cNad skleníkem nesmí být žádné bloky! Bloky červeného skla by měly ukázat problémové bloky."
57-
FAIL_HOLE_IN_ROOF: "&cVe střeše je díra nebo není rovná! Bloky červeného skla by měly ukázat problém."
58-
FAIL_HOLE_IN_WALL: "&cVe stěně je díra!"
59-
FAIL_NO_ROOF: "&cVypadá to, že tu není žádná střecha!"
60-
FAIL_TOO_MANY_DOORS: "&cNemůžeš mít více, než 4 dveře ve skleníku!"
61-
FAIL_TOO_MANY_HOPPERS: "&cVe stěnách nebo střeše je povolena jen jedna násypka."
62-
FAIL_UNEVEN_WALLS: "&cStěny jsou nepravidelné. Bloky červeného skla by měly ukázat problémové bloky."
55+
FAIL_BAD_WALL_BLOCKS: "&cStěna obsahuje nepovolené bloky!"
56+
FAIL_BELOW: "&cMusíš být uvnitř skleníku, abys ho mohl zkusit vytvořit"
57+
FAIL_BLOCKS_ABOVE: "&cNad skleníkem nesmí být žádné bloky! Červené skleněné bloky by měly ukázat problematické bloky."
58+
FAIL_HOLE_IN_ROOF: |
59+
&cVe střeše je díra nebo není rovná!
60+
&cČervené skleněné bloky by měly ukázat problém.
61+
&cUjisti se, že jsi uvnitř skleníku, abys ho mohl vytvořit.
62+
FAIL_HOLE_IN_WALL: "&cVestěně je díra!"
63+
FAIL_NO_ROOF: "&cZdá se, že zde není střecha! Ujisti se, že jsi uvnitř skleníku, abys ho mohl vytvořit."
64+
FAIL_TOO_MANY_DOORS: "&cVe skleníku nemůžeš mít více než 4 dveře!"
65+
FAIL_TOO_MANY_HOPPERS: "&cVestěnách nebo střeše je povolen pouze jeden násypník (hopper)."
66+
FAIL_UNEVEN_WALLS: "&cStěny jsou nerovnoměrné. Červené skleněné bloky by měly ukázat problematické bloky."
6367
FAIL_INSUFFICIENT_ICE: "&cNedostatek ledu k vytvoření tohoto receptu"
6468
FAIL_INSUFFICIENT_LAVA: "&cNedostatek lávy k vytvoření tohoto receptu"
6569
FAIL_INSUFFICIENT_WATER: "&cNedostatek vody k vytvoření tohoto receptu"
66-
FAIL_NO_ICE: "&cLed je potřeba k vytvoření tohoto receptu"
67-
FAIL_NO_LAVA: "&cLáva je potřeba k vytvoření tohoto receptu"
68-
FAIL_NO_WATER: "&cVoda je potřeba k vytvoření tohoto receptu"
69-
FAIL_INSUFFICIENT_BLOCKS: "&cVíce bloků je potřeba k vytvoření tohoto receptu!"
70-
FAIL_OVERLAPPING: "&cPardon, skleníky nesmí sdílet stěny."
71-
success: "&2Úspěšně jsi vytvořil skleník biomu [biome]! Biom se synchronizuje s dalším teleportem nebo přihlášením."
70+
FAIL_NO_ICE: "&cK vytvoření tohoto receptu je vyžadován led"
71+
FAIL_NO_LAVA: "&cK vytvoření tohoto receptu je vyžadována láva"
72+
FAIL_NO_WATER: "&cK vytvoření tohoto receptu je vyžadována voda"
73+
FAIL_NO_RECIPE_FOUND: "&cNebyl nalezen žádný recept, který by odpovídal tomuto skleníku"
74+
FAIL_INSUFFICIENT_BLOCKS: "&cK vytvoření tohoto receptu je vyžadováno více bloků!"
75+
FAIL_OVERLAPPING: "&cSkleníky nemohou sdílet stěny, omlouváme se."
76+
success: "&2Úspěšně jsi vytvořil skleník s biomem [biome]! Biom se synchronizuje při příštím teleportu nebo přihlášení."
7277
missing-blocks: "&cChybí [material] x [number]"
7378
unknown-recipe: "&cNeznámý recept"
74-
try-these: "&cZkus něco z tohoto:"
79+
try-these: "&cZkus jeden z těchto:"
7580
recipe-format: "&3[name]"
7681
info:
77-
title: "&A[Jak postavit skleník]"
82+
title: "&a [Jak postavit skleník]"
7883
instructions: |
79-
&EUdělej kostku ze skla se 4 stěnami a rovnou skleněnou
80-
&Estřechou a přihoď k tomu &F4 dveře &Eve stěnách.
81-
&EPlácni &F1 násypku &Edo stěny nebo střechy a přidej kbelíky vody.
82-
&Epro sníh a/nebo kostní moučku pro automatický růst rostlin.
83-
&EPodívej se do receptů biomu pro typy bloků, které musí být
84-
&Euvnitř skleníku pro úspěšné vytvoření.
84+
&e Vyrob krabici ze skla se 4 stěnami a plochou skleněnou
85+
&e střechou a přidej do stěn až &f 4 dveře.
86+
&e Umísti &f 1 násypník (hopper) &e do stěny nebo střechy a přidej kbelíky s vodou,
87+
&e abys automaticky vyráběl sníh a/nebo kostní moučku pro růst rostlin.
88+
&e Podívej se na recepty biomů, jaké bloky musí být uvnitř skleníku,
89+
&e aby byl úspěšně vytvořen.
8590
86-
87-
######### Old locale for reference
8891
help:
89-
help: "nápověda"
90-
make: "Pokusí se vytvořit skleník"
91-
remove: "Odstraní skleník, ve kterém stojíš, pokud jsi vlastníkem"
92-
info: "Jak vytvořit skleník"
93-
list: "Vypíše seznam všech biomů, které lze použít ve skleníku"
94-
recipe: "Napoví, jak vytvořit skleník biomu"
95-
opengui: "Otevře GUI Skleníků"
92+
help: "nápověda"
93+
make: "Pokusí se vytvořit skleník"
94+
remove: "Odstraní skleník, ve kterém stojíš, pokud jsi vlastník"
95+
info: "Jak vyrobit skleník"
96+
list: "Seznam všech biomů skleníků, které lze vytvořit"
97+
recipe: "Řekne ti, jak vyrobit daný biom skleníku"
98+
opengui: "Otevře GUI skleníku"
9699

97100
list:
98-
title: "[Recepty biomů skleníku]"
99-
info: "Použij /greenhouse recipe <number> k zobrazení detailů, jak vytvořit jednotlivé skleníky"
100-
101+
title: "[Recepty biomů skleníků]"
102+
info: "Použij /greenhouse recipe <číslo> k zobrazení podrobností o každém skleníku"
101103

102-
################
103-
#General Errors#
104-
################
105104
error:
106-
greenhouseProtected: "Skleník je chráněn"
107-
move: "Nejdříve se přesuň do skleníku, který vlastníš."
108-
notowner: "Na toto musíš být vlastník tohoto skleníku."
109-
removing: "Odstraňuji skleník!"
110-
notyours: "Toto není tvůj skleník!"
111-
notinside: "Nejsi ve skleníku!"
112-
tooexpensive: "Nemůžeš si dovolit [price]"
113-
alreadyexists: "Skleník již existuje!"
114-
norecipe: "Nelze vytvořit skleník!"
105+
greenhouseProtected: "Skleník je chráněn"
106+
move: "Nejdříve se přesuň do skleníku, který vlastníš."
107+
notowner: "K provedení této akce musíš být vlastníkem tohoto skleníku."
108+
removing: "Odstraňování skleníku!"
109+
notyours: "Toto není tvůj skleník!"
110+
notinside: "Nejsi ve skleníku!"
111+
tooexpensive: "Nemůžeš si dovolit [price]"
112+
alreadyexists: "Skleník již existuje!"
113+
norecipe: "Nelze vytvořit skleník!"
115114

116115
messages:
117-
enter: "Vcházíš do [biome] skleníku [owner]!"
118-
leave: "Odcházíš ze skleníku [owner]."
119-
youarein: "Právě jsi v [biome] skleníku [owner]!"
120-
removed: "Tento skleník již neeexistuje..."
121-
removedmessage: "Tvůj [biome] skleník již neeistuje!"
122-
ecolost: "Tvůj skleník na [location] ztratil svůj ekosystém a byl odstraněn."
116+
enter: "Vstupuješ do skleníku [owner], biom [biome]!"
117+
leave: "Opouštíš skleník [owner]."
118+
youarein: "Nyní jsi ve skleníku [owner], biom [biome]!"
119+
removed: "Tento skleník již neexistuje..."
120+
removedmessage: "Tvůj skleník [biome] již neexistuje!"
121+
ecolost: "Tvůj skleník na [location] ztratil svůj ekosystém a byl odstraněn."
123122

124123
info:
125-
title: "&A[Jak postavit skleník]"
126-
instructions: |
127-
&EUdělej kostku ze skla se 4 stěnami a rovnou skleněnou
128-
&Estřechou a přihoď k tomu &F4 dveře &Eve stěnách.
129-
&EPlácni &F1 násypku &Edo stěny nebo střechy a přidej kbelíky vody.
130-
&Epro sníh a/nebo kostní moučku pro automatický růst rostlin.
131-
&EPodívej se do receptů biomu pro typy bloků, které musí být
132-
&Euvnitř skleníku pro úspěšné vytvoření.
133-
info: "[Info o skleníku]"
134-
none: "Žádné"
135-
nomore: "&4Nemůžeš postavit další skleníky!"
136-
onemore: "&6Můžeš postavit ještě jeden skleník."
137-
youcanbuild: "&AMůžeš postavit ještě [number] dalších skleníků!"
138-
unlimited: "&AMůžeš postavit bezpočet dalších skleníků!"
139-
welcome: "&BVítej! Klikni sem pro instrukce"
124+
title: "&A[Jak postavit skleník]"
125+
instructions: |
126+
&E Vyrob krabici ze skla se 4 stěnami a plochou skleněnou
127+
&E střechou a přidej do stěn až &F 4 dveře.
128+
&E Umísti &F 1 násypník &E do stěny nebo střechy a přidej kbelíky s vodou,
129+
&E abys automaticky vyráběl sníh a/nebo kostní moučku pro růst rostlin.
130+
&E Podívej se na recepty biomů, jaké bloky musí být uvnitř skleníku,
131+
&E aby byl úspěšně vytvořen.
132+
info: "[Informace o skleníku]"
133+
none: "Žádné"
134+
nomore: "&4 Nemůžeš postavit žádné další skleníky!"
135+
onemore: "&6 Můžeš postavit ještě jeden skleník."
136+
youcanbuild: "&A Můžeš postavit [number] dalších skleníků!"
137+
unlimited: "&A Můžeš postavit neomezený počet skleníků!"
138+
welcome: "&B Vítej! Klikni zde pro instrukce"
140139

141140
recipe:
142-
blockscolor: "&f"
143-
hint: "Použij /greenhouse list k zobrazení seznamu čísel receptů!"
144-
wrongnumber: "Číslo receptu musí být mezi 1 a [size]"
145-
title: "[Recept [biome]]"
146-
nowater: "Voda není povolena."
147-
noice: "Led není povolen."
148-
nolava: "Láva není povolena."
149-
watermustbe: "Voda > [coverage]% povrchu podlahy."
150-
icemustbe: "Ledové bloky > [coverage]% povrchu podlahy."
151-
lavamustbe: "Láva > [coverage]% povrchu podlahy."
152-
minimumblockstitle: "[Minimum bloků vyžadováno]"
153-
nootherblocks: "Žádné další bloky již nejsou vyžadovány."
154-
missing: "Skleník chybí"
141+
blockscolor: "&f"
142+
hint: "Použij /greenhouse list k zobrazení seznamu čísel receptů!"
143+
wrongnumber: "Číslo receptu musí být mezi 1 a [size]"
144+
title: "[Recept [biome]]"
145+
nowater: "Voda není povolena."
146+
noice: "Led není povolen."
147+
nolava: "Láva není povolena."
148+
watermustbe: "Voda > [coverage]% povrchu podlahy."
149+
icemustbe: "Ledové bloky > [coverage]% povrchu podlahy."
150+
lavamustbe: "Láva > [coverage]% povrchu podlahy."
151+
minimumblockstitle: "[Minimum bloků vyžadováno]"
152+
nootherblocks: "Žádné další bloky již nejsou vyžadovány."
153+
missing: "Skleník chybí"
155154

156155
event:
157156
broke: "Zničil jsi tento skleník! Vracím biom zpět na [biome]!"
158157
fix: "Oprav skleník a pak ho znovu vytvoř."
159158
cannotplace: "Nemůžeš položit bloky nad skleník!"
160159
pistonerror: "Píst nemůže posunout bloky nad skleník!"
161160

162-
163161
limits:
164162
noneallowed: "Nemáš oprávnění vytvářet žádné skleníky, takže jich bylo [number] smazáno."
165163
limitedto: "Máš oprávnění vytvořit jen [limit] skleníků, takže jich bylo [number] smazáno."
166-
167164

168-
##################################
169-
#Admin commands that use /gadmin #
170-
##################################
171-
172-
#Help
173165
adminHelp:
174166
reload: "obnovit konfiguraci ze souboru."
175-
info: "poskytuje info o skleníku, v němž se nacházíš"
167+
info: "poskytuje informace o skleníku, ve kterém se nacházíš"
176168

177-
#reload
178169
reload:
179-
configReloaded: "Obnovena konfigurace ze souboru."
170+
configReloaded: "Konfigurace byla znovu načtena ze souboru."
180171

181172
admininfo:
182-
error: "Info o skleníku je přístupné jen ve hře"
183-
error2: "Postav se do skleníku, abys viděl info."
184-
flags: "[Vlaječky skleníku]"
173+
error: "Informace o skleníku jsou dostupné pouze ve hře"
174+
error2: "Vstup do skleníku, abys viděl informace."
175+
flags: "[Vlajky skleníku]"
185176

186177
news:
187-
headline: "[Novinky skleníku]"
178+
headline: "[Novinky skleníků]"
188179

189180
controlpanel:
190-
title: "&ASkleníky"
191-
181+
title: "&ASkleníky"

0 commit comments

Comments
 (0)