Skip to content

Commit 1ef55a2

Browse files
committed
Fix issue where seed worlds lost generators with Multiverse on restart
1 parent b2f5a44 commit 1ef55a2

File tree

4 files changed

+130
-86
lines changed

4 files changed

+130
-86
lines changed

src/main/java/world/bentobox/bentobox/api/panels/Panel.java

+30-23
Original file line numberDiff line numberDiff line change
@@ -32,16 +32,24 @@ public class Panel implements HeadRequester, InventoryHolder {
3232
private World world;
3333

3434
/**
35-
* Various types of Panel that can be created.
35+
* Various types of Panels that can be created that use InventoryTypes.
36+
* <br>
37+
* The current list of inventories that cannot be created are:<br>
38+
* <blockquote>
39+
* {@link Type#INVENTORY}, {@link Type#HOPPER} and
40+
* {@link Type#DROPPER}
41+
* </blockquote>
42+
*
43+
* These relate to the Bukkit inventories with INVENTORY being the standard CHEST inventory.
44+
* See {@link org.bukkit.event.inventory.InventoryType}.
3645
* @since 1.7.0
3746
*/
3847
public enum Type {
39-
INVENTORY,
40-
HOPPER,
41-
DROPPER
48+
INVENTORY, HOPPER, DROPPER
4249
}
4350

44-
public Panel() {}
51+
public Panel() {
52+
}
4553

4654
public Panel(String name, Map<Integer, PanelItem> items, int size, User user, PanelListener listener) {
4755
this(name, items, size, user, listener, Type.INVENTORY);
@@ -65,28 +73,27 @@ public Panel(PanelBuilder pb) {
6573
pb.getUser(), pb.getListener(), pb.getPanelType());
6674
}
6775

68-
protected void makePanel(String name, Map<Integer, PanelItem> items, int size, User user,
69-
PanelListener listener) {
76+
protected void makePanel(String name, Map<Integer, PanelItem> items, int size, User user, PanelListener listener) {
7077
this.makePanel(name, items, size, user, listener, Type.INVENTORY);
7178
}
7279

7380
/**
7481
* @since 1.7.0
7582
*/
76-
protected void makePanel(String name, Map<Integer, PanelItem> items, int size, User user,
77-
PanelListener listener, Type type) {
83+
protected void makePanel(String name, Map<Integer, PanelItem> items, int size, User user, PanelListener listener,
84+
Type type) {
7885
this.name = name;
7986
this.items = items;
8087

8188
// Create panel
8289
switch (type) {
83-
case INVENTORY -> inventory = Bukkit.createInventory(null, fixSize(size), name);
84-
case HOPPER -> inventory = Bukkit.createInventory(null, InventoryType.HOPPER, name);
85-
case DROPPER -> inventory = Bukkit.createInventory(null, InventoryType.DROPPER, name);
90+
case INVENTORY -> inventory = Bukkit.createInventory(null, fixSize(size), name);
91+
case HOPPER -> inventory = Bukkit.createInventory(null, InventoryType.HOPPER, name);
92+
case DROPPER -> inventory = Bukkit.createInventory(null, InventoryType.DROPPER, name);
8693
}
8794

8895
// Fill the inventory and return
89-
for (Map.Entry<Integer, PanelItem> en: items.entrySet()) {
96+
for (Map.Entry<Integer, PanelItem> en : items.entrySet()) {
9097
if (en.getKey() < 54) {
9198
inventory.setItem(en.getKey(), en.getValue().getItem());
9299
// Get player head async
@@ -97,11 +104,13 @@ protected void makePanel(String name, Map<Integer, PanelItem> items, int size, U
97104
}
98105
this.listener = listener;
99106
// If the listener is defined, then run setup
100-
if (listener != null) listener.setup();
107+
if (listener != null)
108+
listener.setup();
101109

102110
// If the user is defined, then open panel immediately
103111
this.user = user;
104-
if (user != null) this.open(user);
112+
if (user != null)
113+
this.open(user);
105114
}
106115

107116
private int fixSize(int size) {
@@ -113,7 +122,8 @@ private int fixSize(int size) {
113122
// Make sure size is a multiple of 9 and is 54 max.
114123
size = size + 8;
115124
size -= (size % 9);
116-
if (size > 54) size = 54;
125+
if (size > 54)
126+
size = 54;
117127
} else {
118128
return 9;
119129
}
@@ -194,12 +204,10 @@ public void setUser(User user) {
194204
public void setHead(PanelItem item) {
195205
// Update the panel item
196206
// Find panel item index in items and replace it once more in inventory to update it.
197-
this.items.entrySet().stream().
198-
filter(entry -> entry.getValue() == item).
199-
mapToInt(Map.Entry::getKey).findFirst()
200-
.ifPresent(index ->
201-
// Update item inside inventory to change icon only if item is inside panel.
202-
this.inventory.setItem(index, item.getItem()));
207+
this.items.entrySet().stream().filter(entry -> entry.getValue() == item).mapToInt(Map.Entry::getKey).findFirst()
208+
.ifPresent(index ->
209+
// Update item inside inventory to change icon only if item is inside panel.
210+
this.inventory.setItem(index, item.getItem()));
203211
}
204212

205213
/**
@@ -226,5 +234,4 @@ public void setWorld(World world) {
226234
this.world = world;
227235
}
228236

229-
230237
}

src/main/java/world/bentobox/bentobox/hooks/MultiverseCoreHook.java

+8-3
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,12 @@ public MultiverseCoreHook() {
3232
public void registerWorld(World world, boolean islandWorld) {
3333
if (islandWorld) {
3434
// Only register generator if one is defined in the addon (is not null)
35-
String generator = BentoBox.getInstance().getIWM().getAddon(world).map(gm -> gm.getDefaultWorldGenerator(world.getName(), "") != null).orElse(false) ? " -g " + BentoBox.getInstance().getName() : "";
36-
String cmd1 = MULTIVERSE_IMPORT + world.getName() + " " + world.getEnvironment().name().toLowerCase(Locale.ENGLISH) + generator;
35+
String generator = BentoBox.getInstance().getIWM().getAddon(world)
36+
.map(gm -> gm.getDefaultWorldGenerator(world.getName(), "") != null).orElse(false)
37+
? " -g " + BentoBox.getInstance().getName()
38+
: "";
39+
String cmd1 = MULTIVERSE_IMPORT + world.getName() + " "
40+
+ world.getEnvironment().name().toLowerCase(Locale.ENGLISH) + generator;
3741
String cmd2 = MULTIVERSE_SET_GENERATOR + BentoBox.getInstance().getName() + " " + world.getName();
3842
Bukkit.getServer().dispatchCommand(Bukkit.getServer().getConsoleSender(), cmd1);
3943
if (!generator.isEmpty()) {
@@ -42,7 +46,8 @@ public void registerWorld(World world, boolean islandWorld) {
4246
}
4347
} else {
4448
// Set the generator to null - this will remove any previous registration
45-
String cmd1 = MULTIVERSE_IMPORT + world.getName() + " " + world.getEnvironment().name().toLowerCase(Locale.ENGLISH);
49+
String cmd1 = MULTIVERSE_IMPORT + world.getName() + " "
50+
+ world.getEnvironment().name().toLowerCase(Locale.ENGLISH);
4651
String cmd2 = MULTIVERSE_SET_GENERATOR + "null " + world.getName();
4752
Bukkit.getServer().dispatchCommand(Bukkit.getServer().getConsoleSender(), cmd1);
4853
Bukkit.getServer().dispatchCommand(Bukkit.getServer().getConsoleSender(), cmd2);

src/main/java/world/bentobox/bentobox/managers/AddonsManager.java

+2
Original file line numberDiff line numberDiff line change
@@ -378,6 +378,8 @@ private void seedWorld(GameModeAddon gameMode, @NonNull World world) {
378378
World w = gameMode.getWorldSettings().isUseOwnGenerator() ? wc.createWorld()
379379
: wc.generator(world.getGenerator()).createWorld();
380380
w.setDifficulty(Difficulty.PEACEFUL);
381+
// Register seed world
382+
plugin.getIWM().addWorld(w, gameMode);
381383
}
382384

383385
/**

0 commit comments

Comments
 (0)