Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Release 2.0.0 #2204

Merged
merged 134 commits into from
Jan 31, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
134 commits
Select commit Hold shift + click to select a range
1b2748f
Version 1.24.2
tastybento Aug 1, 2023
397f9e4
Added more JavaDoc for API usage
tastybento Aug 1, 2023
fd91ab5
Update ADDON.md - added Parkour
tastybento Aug 6, 2023
768988e
Revert "Update ADDON.md - added Parkour"
tastybento Aug 6, 2023
06ccb8a
Fixed issue with demoting or promoting above yourself.
tastybento Aug 11, 2023
08d73f2
Adds a config section in BentoBox to run commands when it is loaded
tastybento Aug 16, 2023
1228da1
Merge pull request #2167 from BentoBoxWorld/ready_commands
tastybento Aug 16, 2023
aed7803
Fix issue with NPE when Op does Command Ranks and does not own island
tastybento Aug 18, 2023
da2daae
Fixes a bug with incorrectly indexed pages +1 (#2178)
BONNe Aug 29, 2023
0f6d5af
Update ru.yml
tastybento Sep 1, 2023
e23207d
Merge pull request #2181 from BentoBoxWorld/ru-translation
tastybento Sep 1, 2023
d6978ce
Translate ru.yml via GitLocalize
tastybento Sep 1, 2023
6a5ea17
Merge pull request #2182 from BentoBoxWorld/gitlocalize-26016
tastybento Sep 1, 2023
33a694c
Translate ja.yml via GitLocalize
mt-gitlocalize Sep 1, 2023
a6f47e5
Translate ja.yml via GitLocalize
tastybento Sep 1, 2023
b2bdce4
Merge pull request #2183 from BentoBoxWorld/gitlocalize-26028
tastybento Sep 1, 2023
bcf569c
Indonesian translation (#2184)
gitlocalize-app[bot] Sep 1, 2023
a7b791f
Fixes #2173. Copies the correct range of blocks. Added test class.
tastybento Sep 2, 2023
ba31dd7
Ignoring sculk sensor test for now.
tastybento Sep 3, 2023
8d3be9c
Added island member placeholders
tastybento Sep 3, 2023
b276c07
Fix reference for home list syntax in IslandDeletehomeCommand
tastybento Sep 4, 2023
503107a
Fix test
tastybento Sep 4, 2023
a4bef15
2 0 0 multi island (#2185)
tastybento Sep 16, 2023
2bc82dd
Add checking for enchantment table inventory (#2191)
tastybento Sep 20, 2023
5c3ebc8
Add 1.20.2 compatibility.
tastybento Oct 7, 2023
8b78aff
Update NMS to 1.20.2
tastybento Oct 7, 2023
e6ccce4
Added flags for Loom, stonecutter, cartography, smithing, grinding
tastybento Oct 7, 2023
6d2f798
Fixes getOwner and getIslands to properly return islands in the world
tastybento Oct 7, 2023
7fbd041
Check passengers of jockeys when spawned. #2195
tastybento Oct 7, 2023
2b65543
Adds InvincibleVisitorFlagDamageRemovalEvent and tests.
tastybento Oct 8, 2023
dc51bd8
Fix code to have a default entry on the switch, which is now required.
tastybento Oct 12, 2023
9f8a6bc
Remove players from the island and cache.
tastybento Oct 12, 2023
a2f1054
PotionTypes have changed and now are explicitly named
tastybento Oct 12, 2023
c8b2e1d
Changed some tests for ItemParsing.
tastybento Oct 12, 2023
489a1e3
Remove unregistration of MV worlds workaround.
tastybento Oct 15, 2023
ea5529f
Enables permissions to set how many islands a play can create. (#2201)
tastybento Oct 16, 2023
af3b0bb
Fixes missing locale text
BONNe Oct 20, 2023
e4836b9
Remove island number check for owner transfer.
tastybento Oct 21, 2023
8d0dbcd
Fix erroneous code that got pasted in...
tastybento Oct 21, 2023
5ccaadb
Fix tests.
tastybento Oct 21, 2023
2c49e6d
Hungarian translationrian (#2205)
gitlocalize-app[bot] Oct 21, 2023
9e8df5c
Chinese translation (#2206)
gitlocalize-app[bot] Oct 21, 2023
b380833
Translate ja.yml via GitLocalize (#2207)
gitlocalize-app[bot] Oct 21, 2023
c195baf
Czech translation (#2208)
gitlocalize-app[bot] Oct 21, 2023
4e0e3d2
Portuguese translation (#2209)
gitlocalize-app[bot] Oct 21, 2023
39882cb
German Translation WIP (#2210)
gitlocalize-app[bot] Oct 21, 2023
c4fa6cf
French translation WIP (#2211)
gitlocalize-app[bot] Oct 21, 2023
7f50073
Croatian translation WIP (#2212)
gitlocalize-app[bot] Oct 21, 2023
fd99da6
Fix double trapped (redstone) chest protection. #2215
tastybento Oct 24, 2023
d903e57
Remove the deprecated classes for 2.0 (#2216)
tastybento Oct 29, 2023
4a6bf31
This changes the loading to not be on STARTUP (#2214)
tastybento Oct 29, 2023
4200fe4
Fixes a bug that removed old owner from island (#2218)
BONNe Oct 30, 2023
6d09a5a
Fixes #2219. Island homes were set incorrectly with a new island.
tastybento Nov 4, 2023
5503ce0
Fixes #2221
tastybento Nov 5, 2023
285205f
Fixes a bug with EntityTeleportListener (#2222)
BONNe Nov 10, 2023
4481881
Fix tests
tastybento Nov 10, 2023
24148f3
Rank Management (#2220)
tastybento Nov 10, 2023
c63de27
Revert "This changes the loading to not be on STARTUP (#2214)"
tastybento Nov 10, 2023
19d7e2f
Fix island resetting. #2223
tastybento Nov 11, 2023
63d092d
Multi island api update (#2224)
tastybento Nov 12, 2023
a35353a
Fixes an issue with entity teleportation if nether/end worlds are dis…
BONNe Nov 15, 2023
26dc5c5
IslandsManager#isOwner correction and JavaDoc update
tastybento Nov 18, 2023
d95727f
Fix French - coffre, not poitrine. Chest not human chest!
tastybento Nov 18, 2023
70e4ae1
Fix gender
tastybento Nov 18, 2023
2818ac8
Correct French
tastybento Nov 18, 2023
0ecbd91
Even more French fixing...
tastybento Nov 18, 2023
defb1c7
Better French, maybe... (#2228)
tastybento Nov 19, 2023
1cf7ccb
Fix bug where players couldn't invite other players.
tastybento Nov 19, 2023
5de7302
Switch to Spigot's PlayerProfile on HeadGetter (#2231)
HSGamer Nov 24, 2023
13c339e
- Fixed separators to also work on Windows (#2233)
Baterka Nov 25, 2023
59c8499
Adds a method that can return a different default value than 0 (#2234)
tastybento Nov 25, 2023
9075122
Better constants
tastybento Nov 25, 2023
4547232
Better constants
tastybento Nov 25, 2023
625b70d
Simplify fillBorder
tastybento Nov 26, 2023
9fe5212
Added AddonEvent test class.
tastybento Nov 26, 2023
ea6b5dd
Add Ukrainian locale (#2236)
gitlocalize-app[bot] Nov 26, 2023
187ae1c
Add Ukrainian locale (#2235)
gitlocalize-app[bot] Nov 26, 2023
f80cf23
Fixes end portal finding issue when entering from side (#2238)
BONNe Nov 28, 2023
26e6310
Merge branch 'develop' of https://github.com/BentoBoxWorld/BentoBox.g…
tastybento Dec 2, 2023
54ebf2d
Fix issue where players with more than one island couldn't leave a team
tastybento Dec 2, 2023
f256c3a
Fixes #2240 Makes locations default to island center in IslandBaseEvent
tastybento Dec 3, 2023
22f398f
Fix deletion of islands when chunks are not deleted. Fixes #2241
tastybento Dec 4, 2023
12bf37d
No tabs (#2243)
tastybento Dec 5, 2023
6964f8c
Fix MV compatibility. Fixes #2244
tastybento Dec 6, 2023
af861f2
Update to 1.20.3
tastybento Dec 6, 2023
79b95af
Try to avoid test error with Material class (which is now bigger)
tastybento Dec 6, 2023
1942f5f
Revert to 1.20.2 for now until 1.20.3 is more stable
tastybento Dec 7, 2023
1ab2ff2
Revert "Revert to 1.20.2 for now until 1.20.3 is more stable"
tastybento Dec 7, 2023
5a193cd
Rewrote PanelItemTest to avoid null check errors in Bukkit class
tastybento Dec 9, 2023
55e94b4
Revert "Rewrote PanelItemTest to avoid null check errors in Bukkit cl…
tastybento Dec 10, 2023
8dce036
Workaround to avoid massive test failures.
tastybento Dec 10, 2023
b2f5a44
Added 1.20.4 compatibility.
tastybento Dec 10, 2023
1ef55a2
Fix issue where seed worlds lost generators with Multiverse on restart
tastybento Dec 19, 2023
f6e26aa
Fix admin register command to handle worlds correctly
tastybento Dec 19, 2023
b260cf1
Add backward compatibility handleing for GRASS
tastybento Dec 22, 2023
96499f3
Improves obsidian platform generation (#2246)
BONNe Dec 24, 2023
86d8d14
Delete slimefun chunks/blocks when island is deleted. (#2247)
tastybento Dec 24, 2023
cc5c8aa
Adds an ItemAdder hook to delete any blocks when island is deleted. (…
tastybento Dec 28, 2023
0352cfd
Lower Spigot version back to 1.20.3 because 1.20.4 doesn't exist?
tastybento Jan 2, 2024
e8e1d61
Material Type adapter (#2253)
tastybento Jan 2, 2024
3be034b
Customizable Language Selection Panel (#2254)
BONNe Jan 4, 2024
bfb4873
Customizable Island Creation Panel (#2255)
BONNe Jan 4, 2024
38d845d
Fixes issue with file exporting in Windows system. (#2256)
BONNe Jan 4, 2024
31fb106
Fixes merge conflicts.
BONNe Jan 4, 2024
caade1a
Fixes ItemParser. (#2257)
BONNe Jan 4, 2024
fc658ca
Fixes warning about already existing file saving. (#2260)
BONNe Jan 5, 2024
29a6a51
Up to 1.20.4 in POM
tastybento Jan 5, 2024
c62d4f6
Add island object to Panel for context. (#2263)
tastybento Jan 8, 2024
68da898
Optimize CopyWorldRegenerator#copyChunkDataToChunk to reduce performa…
rchomczyk Jan 8, 2024
0e0c502
Team gui (#2251)
tastybento Jan 8, 2024
54a7b8b
Fix to avoid admins becoming subowners when registering an island.
tastybento Jan 8, 2024
ca2976c
Test clean up.
tastybento Jan 8, 2024
26e5d75
Clarify creeper damage. Active means creepers can damage.
tastybento Jan 9, 2024
be9b429
Faster teleports (#2267)
tastybento Jan 11, 2024
edd7bcf
Fix settings panel bug NPE.
tastybento Jan 11, 2024
98d336f
Fix admin settings NPE.
tastybento Jan 11, 2024
f1001b1
Do not allow invite clicks if they have been removed from the panel
tastybento Jan 12, 2024
76a36e6
Enable template to determine what is shown/clickable. (#2269)
tastybento Jan 12, 2024
4bfbe41
World context settings (#2271)
tastybento Jan 13, 2024
cc7b1eb
Require panel to have a world.
tastybento Jan 13, 2024
ce4d8a3
JavaDoc fixes
tastybento Jan 15, 2024
2d44c5d
Adds protection for berries #2272
tastybento Jan 15, 2024
7c3056b
Add ability to place glowberry cave vines if planting allowed.
tastybento Jan 15, 2024
b672755
Use a different method to grab the DataObject classes. (#2277)
tastybento Jan 20, 2024
ffcda52
Use latest form of icon format for TIPPED ARROWS in panels
tastybento Jan 20, 2024
90a53e9
Fixes #2274 hanging signs protection (#2278)
tastybento Jan 20, 2024
5d38210
Fix for #2279 on-island placeholder for nether and end (#2280)
tastybento Jan 21, 2024
13bd1bb
Fix for #2281 (#2282)
tastybento Jan 22, 2024
787424b
Check for SHORT_GRASS before using it. #2283
tastybento Jan 23, 2024
b25c65b
Center default home (#2287)
tastybento Jan 28, 2024
c9b7074
Fix test
tastybento Jan 28, 2024
6bf12d5
Fixes EXP reset for players onJoin and onLeave (#2286)
BONNe Jan 31, 2024
b255088
Add optimization for Slimefun deletion. #2289
tastybento Jan 31, 2024
c100fe0
Merge branch 'develop' of https://github.com/BentoBoxWorld/BentoBox.g…
tastybento Jan 31, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
97 changes: 53 additions & 44 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -73,10 +73,10 @@
<postgresql.version>42.2.18</postgresql.version>
<hikaricp.version>5.0.1</hikaricp.version>
<!-- More visible way to change dependency versions -->
<spigot.version>1.20.1-R0.1-SNAPSHOT</spigot.version>
<spigot.version>1.20.4-R0.1-SNAPSHOT</spigot.version>
<!-- Might differ from the last Spigot release for short periods
of time -->
<paper.version>1.20.1-R0.1-SNAPSHOT</paper.version>
<paper.version>1.20.4-R0.1-SNAPSHOT</paper.version>
<bstats.version>3.0.0</bstats.version>
<vault.version>1.7.1</vault.version>
<placeholderapi.version>2.10.9</placeholderapi.version>
Expand All @@ -88,7 +88,7 @@
<!-- Do not change unless you want different name for local builds. -->
<build.number>-LOCAL</build.number>
<!-- This allows to change between versions. -->
<build.version>1.24.1</build.version>
<build.version>2.0.0</build.version>
<sonar.organization>bentobox-world</sonar.organization>
<sonar.host.url>https://sonarcloud.io</sonar.host.url>
<server.jars>${project.basedir}/lib</server.jars>
Expand Down Expand Up @@ -192,7 +192,32 @@
</repositories>

<dependencies>
<!-- Spigot API -->
<!-- Mockito (Unit testing) This goes at the top to ensure the dependencies are accurate. -->
<!-- This is required for PowerMockito to work and must be placed before it -->
<dependency>
<groupId>org.javassist</groupId>
<artifactId>javassist</artifactId>
<version>3.30.2-GA</version>
</dependency>
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-module-junit4</artifactId>
<version>${powermock.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-api-mockito2</artifactId>
<version>${powermock.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<version>3.11.1</version>
<scope>test</scope>
</dependency>
<!-- Spigot API -->
<dependency>
<groupId>org.spigotmc</groupId>
<artifactId>spigot-api</artifactId>
Expand All @@ -206,38 +231,12 @@
<version>${paper.version}</version>
<scope>provided</scope>
</dependency>
<!-- AuthLib. Used for Head Getter. -->
<dependency>
<groupId>com.mojang</groupId>
<artifactId>authlib</artifactId>
<version>3.16.29</version>
<scope>provided</scope>
</dependency>
<!-- Metrics -->
<dependency>
<groupId>org.bstats</groupId>
<artifactId>bstats-bukkit</artifactId>
<version>${bstats.version}</version>
</dependency>
<!-- Mockito (Unit testing) -->
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<version>3.11.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-module-junit4</artifactId>
<version>${powermock.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-api-mockito2</artifactId>
<version>${powermock.version}</version>
<scope>test</scope>
</dependency>
<!-- Database -->
<dependency>
<groupId>org.mongodb</groupId>
Expand Down Expand Up @@ -321,6 +320,20 @@
<version>${spigot.version}</version>
<scope>provided</scope>
</dependency>
<!-- Slimefun -->
<dependency>
<groupId>com.github.Slimefun</groupId>
<artifactId>Slimefun4</artifactId>
<version>RC-36</version>
<scope>provided</scope>
</dependency>
<!-- ItemsAdder -->
<dependency>
<groupId>com.github.LoneDev6</groupId>
<artifactId>api-itemsadder</artifactId>
<version>3.6.1</version>
<scope>provided</scope>
</dependency>
</dependencies>

<build>
Expand Down Expand Up @@ -378,29 +391,23 @@
--add-opens java.base/java.math=ALL-UNNAMED
--add-opens java.base/java.io=ALL-UNNAMED
--add-opens java.base/java.util=ALL-UNNAMED
--add-opens
java.base/java.util.stream=ALL-UNNAMED
--add-opens java.base/java.util.stream=ALL-UNNAMED
--add-opens java.base/java.text=ALL-UNNAMED
--add-opens
java.base/java.util.regex=ALL-UNNAMED
--add-opens
java.base/java.nio.channels.spi=ALL-UNNAMED
--add-opens java.base/java.util.regex=ALL-UNNAMED
--add-opens java.base/java.nio.channels.spi=ALL-UNNAMED
--add-opens java.base/sun.nio.ch=ALL-UNNAMED
--add-opens java.base/java.net=ALL-UNNAMED
--add-opens
java.base/java.util.concurrent=ALL-UNNAMED
--add-opens java.base/java.util.concurrent=ALL-UNNAMED
--add-opens java.base/sun.nio.fs=ALL-UNNAMED
--add-opens java.base/sun.nio.cs=ALL-UNNAMED
--add-opens java.base/java.nio.file=ALL-UNNAMED
--add-opens
java.base/java.nio.charset=ALL-UNNAMED
--add-opens
java.base/java.lang.reflect=ALL-UNNAMED
--add-opens
java.logging/java.util.logging=ALL-UNNAMED
--add-opens java.base/java.nio.charset=ALL-UNNAMED
--add-opens java.base/java.lang.reflect=ALL-UNNAMED
--add-opens java.logging/java.util.logging=ALL-UNNAMED
--add-opens java.base/java.lang.ref=ALL-UNNAMED
--add-opens java.base/java.util.jar=ALL-UNNAMED
--add-opens java.base/java.util.zip=ALL-UNNAMED
--add-opens=java.base/java.security=ALL-UNNAMED
</argLine>
</configuration>
</plugin>
Expand Down Expand Up @@ -514,6 +521,8 @@
<!-- This is required to prevent Jacoco from adding
synthetic fields to a JavaBean class (causes errors in testing) -->
<exclude>**/*Names*</exclude>
<!-- Prevents the Material is too large to mock error -->
<exclude>org/bukkit/Material*</exclude>
</excludes>
</configuration>
<executions>
Expand Down
40 changes: 35 additions & 5 deletions src/main/java/world/bentobox/bentobox/BentoBox.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package world.bentobox.bentobox;

import java.nio.file.Files;
import java.nio.file.Path;
import java.util.List;
import java.util.Optional;

Expand All @@ -22,15 +24,18 @@
import world.bentobox.bentobox.api.user.User;
import world.bentobox.bentobox.commands.BentoBoxCommand;
import world.bentobox.bentobox.database.DatabaseSetup;
import world.bentobox.bentobox.hooks.ItemsAdderHook;
import world.bentobox.bentobox.hooks.MultiverseCoreHook;
import world.bentobox.bentobox.hooks.MyWorldsHook;
import world.bentobox.bentobox.hooks.SlimefunHook;
import world.bentobox.bentobox.hooks.VaultHook;
import world.bentobox.bentobox.hooks.placeholders.PlaceholderAPIHook;
import world.bentobox.bentobox.listeners.BannedCommands;
import world.bentobox.bentobox.listeners.BlockEndDragon;
import world.bentobox.bentobox.listeners.DeathListener;
import world.bentobox.bentobox.listeners.JoinLeaveListener;
import world.bentobox.bentobox.listeners.PanelListenerManager;
import world.bentobox.bentobox.listeners.PrimaryIslandListener;
import world.bentobox.bentobox.listeners.StandardSpawnProtectionListener;
import world.bentobox.bentobox.listeners.teleports.EntityTeleportListener;
import world.bentobox.bentobox.listeners.teleports.PlayerTeleportListener;
Expand Down Expand Up @@ -68,7 +73,6 @@ public class BentoBox extends JavaPlugin implements Listener {
private AddonsManager addonsManager;
private FlagsManager flagsManager;
private IslandWorldManager islandWorldManager;
private RanksManager ranksManager;
private BlueprintsManager blueprintsManager;
private HooksManager hooksManager;
private PlaceholdersManager placeholdersManager;
Expand Down Expand Up @@ -136,7 +140,6 @@ public void onEnable(){
return;
}
islandsManager = new IslandsManager(this);
ranksManager = new RanksManager();

// Start head getter
headGetter = new HeadGetter(this);
Expand Down Expand Up @@ -230,6 +233,12 @@ private void completeSetup(long loadTime) {
hooksManager.registerHook(new MyWorldsHook());
islandWorldManager.registerWorldsToMultiverse(true);

// Register Slimefun
hooksManager.registerHook(new SlimefunHook());

// Register ItemsAdder
hooksManager.registerHook(new ItemsAdderHook(this));

// TODO: re-enable after implementation
//hooksManager.registerHook(new DynmapHook());
// TODO: re-enable after rework
Expand All @@ -251,6 +260,8 @@ private void completeSetup(long loadTime) {
// Tell all addons that everything is loaded
isLoaded = true;
this.addonsManager.allLoaded();
// Run ready commands
settings.getReadyCommands().forEach(cmd -> Bukkit.getServer().dispatchCommand(getServer().getConsoleSender(), cmd));
// Fire plugin ready event - this should go last after everything else
Bukkit.getPluginManager().callEvent(new BentoBoxReadyEvent());
instance.log("All blueprints loaded.");
Expand Down Expand Up @@ -306,6 +317,8 @@ private void registerListeners() {
// Island Delete Manager
islandDeletionManager = new IslandDeletionManager(this);
manager.registerEvents(islandDeletionManager, this);
// Primary Island Listener
manager.registerEvents(new PrimaryIslandListener(this), this);
}

@Override
Expand All @@ -328,10 +341,14 @@ public void onDisable() {

@EventHandler
public void onServerStop(ServerCommandEvent e) {
/* This is no longer needed as with https://github.com/Multiverse/Multiverse-Core/releases/tag/4.3.12 (or maybe earlier) the issue
* is fixed where the generator was not remembered across reboots.
*/
/*
if (islandWorldManager != null && (e.getCommand().equalsIgnoreCase("stop") || e.getCommand().equalsIgnoreCase("restart"))) {
// Unregister any MV worlds if () {
islandWorldManager.registerWorldsToMultiverse(false);
}
//islandWorldManager.registerWorldsToMultiverse(false);
}*/
}

/**
Expand Down Expand Up @@ -410,9 +427,11 @@ public FlagsManager getFlagsManager() {

/**
* @return the ranksManager
* @deprecated Just use {@code RanksManager.getInstance()}
*/
@Deprecated(since = "2.0.0")
public RanksManager getRanksManager() {
return ranksManager;
return RanksManager.getInstance();
}

/**
Expand Down Expand Up @@ -446,6 +465,17 @@ public boolean loadSettings() {
getPluginLoader().disablePlugin(this);
return false;
}

log("Saving default panels...");
if (!Files.exists(Path.of(this.getDataFolder().getPath(), "panels", "island_creation_panel.yml"))) {
log("Saving default island_creation_panel...");
this.saveResource("panels/island_creation_panel.yml", false);
}

if (!Files.exists(Path.of(this.getDataFolder().getPath(), "panels", "language_panel.yml"))) {
log("Saving default language_panel...");
this.saveResource("panels/language_panel.yml", false);
}
return true;
}

Expand Down
Loading
Loading