Fixes a bug where newly created dropper arenas had a null reference to the handler

This commit is contained in:
Kristian Knarvik 2023-03-31 23:20:11 +02:00
parent e5a3f9206d
commit f852de7309
3 changed files with 20 additions and 14 deletions

View File

@ -1,6 +1,5 @@
package net.knarcraft.dropper.arena; package net.knarcraft.dropper.arena;
import net.knarcraft.dropper.Dropper;
import net.knarcraft.dropper.property.ArenaGameMode; import net.knarcraft.dropper.property.ArenaGameMode;
import net.knarcraft.dropper.util.StringSanitizer; import net.knarcraft.dropper.util.StringSanitizer;
import org.bukkit.Location; import org.bukkit.Location;
@ -61,7 +60,7 @@ public class DropperArena {
*/ */
private final DropperArenaData dropperArenaData; private final DropperArenaData dropperArenaData;
private static DropperArenaHandler dropperArenaHandler = null; private final DropperArenaHandler dropperArenaHandler;
/** /**
* Instantiates a new dropper arena * Instantiates a new dropper arena
@ -74,10 +73,12 @@ public class DropperArena {
* @param playerHorizontalVelocity <p>The velocity to use for players' horizontal velocity (-1 to 1)</p> * @param playerHorizontalVelocity <p>The velocity to use for players' horizontal velocity (-1 to 1)</p>
* @param winBlockType <p>The material of the block players have to hit to win this dropper arena</p> * @param winBlockType <p>The material of the block players have to hit to win this dropper arena</p>
* @param dropperArenaData <p>The arena data keeping track of which players have done what in this arena</p> * @param dropperArenaData <p>The arena data keeping track of which players have done what in this arena</p>
* @param arenaHandler <p>The arena handler used for saving any changes</p>
*/ */
public DropperArena(@NotNull UUID arenaId, @NotNull String arenaName, @NotNull Location spawnLocation, public DropperArena(@NotNull UUID arenaId, @NotNull String arenaName, @NotNull Location spawnLocation,
@Nullable Location exitLocation, double playerVerticalVelocity, float playerHorizontalVelocity, @Nullable Location exitLocation, double playerVerticalVelocity, float playerHorizontalVelocity,
@NotNull Material winBlockType, @NotNull DropperArenaData dropperArenaData) { @NotNull Material winBlockType, @NotNull DropperArenaData dropperArenaData,
@NotNull DropperArenaHandler arenaHandler) {
this.arenaId = arenaId; this.arenaId = arenaId;
this.arenaName = arenaName; this.arenaName = arenaName;
this.spawnLocation = spawnLocation; this.spawnLocation = spawnLocation;
@ -86,10 +87,7 @@ public class DropperArena {
this.playerHorizontalVelocity = playerHorizontalVelocity; this.playerHorizontalVelocity = playerHorizontalVelocity;
this.winBlockType = winBlockType; this.winBlockType = winBlockType;
this.dropperArenaData = dropperArenaData; this.dropperArenaData = dropperArenaData;
this.dropperArenaHandler = arenaHandler;
if (dropperArenaHandler == null) {
dropperArenaHandler = Dropper.getInstance().getArenaHandler();
}
} }
/** /**
@ -100,8 +98,10 @@ public class DropperArena {
* *
* @param arenaName <p>The name of the arena</p> * @param arenaName <p>The name of the arena</p>
* @param spawnLocation <p>The location players spawn in when entering the arena</p> * @param spawnLocation <p>The location players spawn in when entering the arena</p>
* @param arenaHandler <p>The arena handler used for saving any changes</p>
*/ */
public DropperArena(@NotNull String arenaName, @NotNull Location spawnLocation) { public DropperArena(@NotNull String arenaName, @NotNull Location spawnLocation,
@NotNull DropperArenaHandler arenaHandler) {
this.arenaId = UUID.randomUUID(); this.arenaId = UUID.randomUUID();
this.arenaName = arenaName; this.arenaName = arenaName;
this.spawnLocation = spawnLocation; this.spawnLocation = spawnLocation;
@ -116,6 +116,7 @@ public class DropperArena {
this.dropperArenaData = new DropperArenaData(this.arenaId, recordRegistries, new HashMap<>()); this.dropperArenaData = new DropperArenaData(this.arenaId, recordRegistries, new HashMap<>());
this.winBlockType = Material.WATER; this.winBlockType = Material.WATER;
this.dropperArenaHandler = arenaHandler;
} }
/** /**

View File

@ -2,6 +2,7 @@ package net.knarcraft.dropper.command;
import net.knarcraft.dropper.Dropper; import net.knarcraft.dropper.Dropper;
import net.knarcraft.dropper.arena.DropperArena; import net.knarcraft.dropper.arena.DropperArena;
import net.knarcraft.dropper.arena.DropperArenaHandler;
import net.knarcraft.dropper.util.StringSanitizer; import net.knarcraft.dropper.util.StringSanitizer;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandExecutor;
@ -35,14 +36,16 @@ public class CreateArenaCommand implements CommandExecutor {
return false; return false;
} }
DropperArena existingArena = Dropper.getInstance().getArenaHandler().getArena(arenaName); DropperArenaHandler arenaHandler = Dropper.getInstance().getArenaHandler();
DropperArena existingArena = arenaHandler.getArena(arenaName);
if (existingArena != null) { if (existingArena != null) {
commandSender.sendMessage("There already exists a dropper arena with that name!"); commandSender.sendMessage("There already exists a dropper arena with that name!");
return false; return false;
} }
DropperArena arena = new DropperArena(arenaName, player.getLocation()); DropperArena arena = new DropperArena(arenaName, player.getLocation(), arenaHandler);
Dropper.getInstance().getArenaHandler().addArena(arena); arenaHandler.addArena(arena);
commandSender.sendMessage("The arena was successfully created!"); commandSender.sendMessage("The arena was successfully created!");
return true; return true;
} }

View File

@ -24,6 +24,7 @@ import java.util.Map;
import java.util.Set; import java.util.Set;
import java.util.UUID; import java.util.UUID;
import java.util.logging.Level; import java.util.logging.Level;
import java.util.logging.Logger;
/** /**
* A helper class for saving and loading arenas * A helper class for saving and loading arenas
@ -152,9 +153,10 @@ public final class ArenaStorageHelper {
ArenaStorageKey.PLAYER_HORIZONTAL_VELOCITY.getKey())); ArenaStorageKey.PLAYER_HORIZONTAL_VELOCITY.getKey()));
SerializableMaterial winBlockType = (SerializableMaterial) configurationSection.get( SerializableMaterial winBlockType = (SerializableMaterial) configurationSection.get(
ArenaStorageKey.WIN_BLOCK_TYPE.getKey()); ArenaStorageKey.WIN_BLOCK_TYPE.getKey());
Logger logger = Dropper.getInstance().getLogger();
if (arenaName == null || spawnLocation == null) { if (arenaName == null || spawnLocation == null) {
Dropper.getInstance().getLogger().log(Level.SEVERE, "Could not load the arena at configuration " + logger.log(Level.SEVERE, "Could not load the arena at configuration " +
"section " + configurationSection.getName() + ". Please check the arenas storage file for issues."); "section " + configurationSection.getName() + ". Please check the arenas storage file for issues.");
return null; return null;
} }
@ -164,7 +166,7 @@ public final class ArenaStorageHelper {
DropperArenaData arenaData = loadArenaData(arenaId); DropperArenaData arenaData = loadArenaData(arenaId);
if (arenaData == null) { if (arenaData == null) {
Dropper.getInstance().getLogger().log(Level.SEVERE, "Unable to load arena data for " + arenaId); logger.log(Level.SEVERE, "Unable to load arena data for " + arenaId);
Map<ArenaGameMode, DropperArenaRecordsRegistry> recordRegistries = new HashMap<>(); Map<ArenaGameMode, DropperArenaRecordsRegistry> recordRegistries = new HashMap<>();
for (ArenaGameMode arenaGameMode : ArenaGameMode.values()) { for (ArenaGameMode arenaGameMode : ArenaGameMode.values()) {
@ -174,7 +176,7 @@ public final class ArenaStorageHelper {
} }
return new DropperArena(arenaId, arenaName, spawnLocation, exitLocation, verticalVelocity, horizontalVelocity, return new DropperArena(arenaId, arenaName, spawnLocation, exitLocation, verticalVelocity, horizontalVelocity,
winBlockType.material(), arenaData); winBlockType.material(), arenaData, Dropper.getInstance().getArenaHandler());
} }
/** /**