Skip to content

Commit 12adc55

Browse files
committed
feat: spawner auto discovery, fixed upgrade shop config
1 parent 132e237 commit 12adc55

File tree

2 files changed

+71
-34
lines changed

2 files changed

+71
-34
lines changed

plugin/common/src/main/java/org/screamingsandals/bedwars/inventories/ShopInventory.java

Lines changed: 36 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import org.screamingsandals.bedwars.api.PurchaseType;
2929
import org.screamingsandals.bedwars.api.config.GameConfigurationContainer;
3030
import org.screamingsandals.bedwars.api.events.OpenShopEvent;
31+
import org.screamingsandals.bedwars.api.game.ItemSpawner;
3132
import org.screamingsandals.bedwars.api.game.StoreManager;
3233
import org.screamingsandals.bedwars.api.player.BWPlayer;
3334
import org.screamingsandals.bedwars.commands.DumpCommand;
@@ -679,10 +680,42 @@ private void handleUpgrade(@NotNull OnTradeEvent event) {
679680
String customName = spawnerNameNode.getString();
680681
upgrades = upgradeStorage.findItemSpawnerUpgrades(game, customName);
681682
} else if (!spawnerTypeNode.empty()) {
682-
String mapSpawnerType = spawnerTypeNode.getString();
683-
ItemSpawnerType spawnerType = game.getGameVariant().getItemSpawnerType(mapSpawnerType);
683+
List<ItemSpawnerType> types = new ArrayList<>();
684+
if (spawnerTypeNode.isList()) {
685+
for (var child : spawnerTypeNode.childrenList()) {
686+
String mapSpawnerType = child.getString();
687+
ItemSpawnerType spawnerType = game.getGameVariant().getItemSpawnerType(mapSpawnerType);
688+
types.add(spawnerType);
689+
690+
upgrades.addAll(upgradeStorage.findItemSpawnerUpgrades(game, team, spawnerType));
691+
}
692+
} else {
693+
String mapSpawnerType = spawnerTypeNode.getString();
694+
ItemSpawnerType spawnerType = game.getGameVariant().getItemSpawnerType(mapSpawnerType);
695+
types.add(spawnerType);
696+
697+
upgrades = upgradeStorage.findItemSpawnerUpgrades(game, team, spawnerType);
698+
}
699+
700+
if (upgrades.isEmpty() && entity.node("auto-discover-spawners-if-not-linked").getBoolean()) {
701+
for (var spawnerType : types) {
702+
double closestDistance = Double.MAX_VALUE;
703+
ItemSpawner closestSpawner = null;
704+
for (var spawner : game.getItemSpawners()) {
705+
if (spawner.getItemSpawnerType().toSpawnerType(game) == spawnerType) {
706+
double distance = team.getRandomSpawn().getDistanceSquared(spawner.getLocation());
707+
if (distance < closestDistance) {
708+
closestDistance = distance;
709+
closestSpawner = spawner;
710+
}
684711

685-
upgrades = upgradeStorage.findItemSpawnerUpgrades(game, team, spawnerType);
712+
}
713+
}
714+
if (closestSpawner != null) {
715+
upgrades.add(closestSpawner);
716+
}
717+
}
718+
}
686719
} else if (!teamUpgradeNode.empty()) {
687720
boolean upgradeAllSpawnersInTeam = teamUpgradeNode.getBoolean();
688721

plugin/common/src/main/resources/shop/certain-popular-server/upgrade-shop.yml

Lines changed: 35 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -17,66 +17,70 @@
1717
# along with Screaming BedWars. If not, see <https://www.gnu.org/licenses/>.
1818
#
1919

20-
# TODO: change properties to be more specific (maybe certain_popular_server prefix??)
2120
data:
2221
- stack: "IRON_CHESTPLATE;1;Protection;Click here to get more resistance to damage!"
2322
column: 2
2423
price: 4 of diamond
2524
properties:
26-
upgrade:
27-
entities:
28-
- type: team
29-
upgrade-name: protection
25+
name: upgrade
26+
entities:
27+
- type: team
28+
upgrade-name: protection
3029

3130
- stack: "IRON_SWORD;1;Sharpness;Kill players quicker!."
3231
column: 1
3332
price: 4 of diamond
3433
properties:
35-
upgrade:
36-
entities:
37-
- type: team
38-
upgrade-name: sharpness
34+
name: upgrade
35+
entities:
36+
- type: team
37+
upgrade-name: sharpness
3938

4039
- stack: "GOLDEN_PICKAXE;1;Efficiency;Break Blocks quicker!."
4140
price: 4 of diamond
4241
column: 3
4342
properties:
44-
upgrade:
45-
entities:
46-
- type: team
47-
upgrade-name: efficiency
43+
name: upgrade
44+
entities:
45+
- type: team
46+
upgrade-name: efficiency
4847

4948
- price: 4 of iron
49+
properties:
50+
name: upgrade
51+
entities:
52+
- type: spawner
53+
add-levels: 0.2
54+
max-level: 2
55+
spawner-type:
56+
- iron
57+
- gold
58+
auto-discover-spawners-if-not-linked: true
5059
stack:
5160
type: FURNACE
5261
amount: 1
53-
display-name: "Forge Upgrade, Unconfigured"
54-
# TODO: configure
62+
display-name: "Forge Upgrade"
5563

5664
- stack: "BEACON;1;§bHeal Pool;§7Triggers a pool around the base that heals you!"
5765
column: 5
5866
row: 1
5967
properties:
60-
upgrade:
61-
entities:
62-
- type: team
63-
upgrade-name: healpool
68+
name: upgrade
69+
entities:
70+
- type: team
71+
upgrade-name: healpool
6472
price: 8 of diamond
6573

66-
- stack: "DRAGON_EGG;1;Ender Dragon;Get A Bonus Dragon when Dragons get summoned!"
67-
column: 6
68-
row: 1
69-
7074
- stack: "LEATHER;1;TRAPS;TRAP YOUR ENEMY"
7175
column: 7
7276
items:
7377
- price: 2 of diamond
7478
skip: 1
7579
properties:
76-
upgrade:
77-
entities:
78-
- type: team
79-
upgrade-name: blindtrap
80+
name: upgrade
81+
entities:
82+
- type: team
83+
upgrade-name: blindtrap
8084
stack:
8185
type: STRING
8286
display-name: "§bBlindess trap"
@@ -87,10 +91,10 @@ data:
8791
- price: 2 of diamond
8892
skip: 1
8993
properties:
90-
upgrade:
91-
entities:
92-
- type: team
93-
upgrade-name: minertrap
94+
name: upgrade
95+
entities:
96+
- type: team
97+
upgrade-name: minertrap
9498
stack:
9599
type: STRING
96100
display-name: "§bMining Fatigue trap"

0 commit comments

Comments
 (0)