Fix null owner

This commit is contained in:
ceze88 2023-09-22 12:49:04 +02:00
parent 6413d74253
commit d4737640a7
8 changed files with 32 additions and 21 deletions

View File

@ -6,6 +6,7 @@ import com.craftaro.epichoppers.hopper.teleport.TeleportTrigger;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.block.Block; import org.bukkit.block.Block;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import java.util.List; import java.util.List;
@ -23,7 +24,7 @@ public interface Hopper extends Data {
@Nullable UUID getLastPlayerOpened(); @Nullable UUID getLastPlayerOpened();
@Nullable UUID getPlacedBy(); @NotNull UUID getPlacedBy();
void setPlacedBy(UUID placedBy); void setPlacedBy(UUID placedBy);

View File

@ -11,12 +11,12 @@ import java.util.UUID;
public class HopperBuilder { public class HopperBuilder {
private final HopperImpl hopper; private final HopperImpl hopper;
public HopperBuilder(Location location) { public HopperBuilder(Location location, UUID owner) {
this.hopper = new HopperImpl(location); this.hopper = new HopperImpl(location, owner);
} }
public HopperBuilder(Block block) { public HopperBuilder(Block block, UUID owner) {
this(block.getLocation()); this(block.getLocation(), owner);
} }
public HopperBuilder setId(int id) { public HopperBuilder setId(int id) {

View File

@ -33,6 +33,7 @@ import org.bukkit.inventory.InventoryHolder;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import org.bukkit.util.io.BukkitObjectInputStream; import org.bukkit.util.io.BukkitObjectInputStream;
import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.ApiStatus;
import org.jetbrains.annotations.NotNull;
import org.yaml.snakeyaml.external.biz.base64Coder.Base64Coder; import org.yaml.snakeyaml.external.biz.base64Coder.Base64Coder;
import java.io.ByteArrayInputStream; import java.io.ByteArrayInputStream;
@ -55,7 +56,7 @@ public class HopperImpl implements Hopper {
private final Location location; private final Location location;
private Level level = getLevelManager().getLowestLevel(); private Level level = getLevelManager().getLowestLevel();
private UUID lastPlayerOpened = null; private UUID lastPlayerOpened = null;
private UUID placedBy = null; private UUID placedBy;
private final List<Location> linkedBlocks = new ArrayList<>(); private final List<Location> linkedBlocks = new ArrayList<>();
private Filter filter = new Filter(); private Filter filter = new Filter();
private TeleportTrigger teleportTrigger = TeleportTrigger.DISABLED; private TeleportTrigger teleportTrigger = TeleportTrigger.DISABLED;
@ -74,7 +75,8 @@ public class HopperImpl implements Hopper {
this.location = null; this.location = null;
} }
public HopperImpl(Location location) { public HopperImpl(Location location, UUID placedBy) {
this.placedBy = placedBy;
this.location = location; this.location = location;
this.id = EpicHoppers.getPlugin(EpicHoppers.class).getDataManager().getNextId("placed_hoppers"); this.id = EpicHoppers.getPlugin(EpicHoppers.class).getDataManager().getNextId("placed_hoppers");
} }
@ -340,7 +342,7 @@ public class HopperImpl implements Hopper {
this.level = level; this.level = level;
} }
public UUID getPlacedBy() { public @NotNull UUID getPlacedBy() {
return this.placedBy; return this.placedBy;
} }

View File

@ -11,6 +11,7 @@ import java.util.Collection;
import java.util.Collections; import java.util.Collections;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import java.util.UUID;
public class HopperManager { public class HopperManager {
private final Map<Location, HopperImpl> registeredHoppers = new HashMap<>(); private final Map<Location, HopperImpl> registeredHoppers = new HashMap<>();
@ -75,13 +76,17 @@ public class HopperManager {
return removed; return removed;
} }
public HopperImpl getHopper(Location location) { public HopperImpl getHopper(Location location, UUID createForIfNotExists) {
if (!this.registeredHoppers.containsKey(location = roundLocation(location))) { if (!this.registeredHoppers.containsKey(location = roundLocation(location))) {
if (!this.ready) { if (!this.ready) {
throw new IllegalStateException("Hoppers are still being loaded"); throw new IllegalStateException("Hoppers are still being loaded");
} }
HopperImpl hopper = addHopper(new HopperImpl(location)); if (createForIfNotExists == null) {
return null;
}
HopperImpl hopper = addHopper(new HopperImpl(location, createForIfNotExists));
this.plugin.getDataManager().save(hopper); this.plugin.getDataManager().save(hopper);
this.registeredHoppers.put(location, hopper); this.registeredHoppers.put(location, hopper);
return hopper; return hopper;
@ -89,8 +94,8 @@ public class HopperManager {
return this.registeredHoppers.get(location); return this.registeredHoppers.get(location);
} }
public HopperImpl getHopper(Block block) { public HopperImpl getHopper(Block block, UUID createForIfNotExists) {
return getHopper(block.getLocation()); return getHopper(block.getLocation(), createForIfNotExists);
} }
/** /**

View File

@ -65,7 +65,11 @@ public class TeleportHandlerImpl implements TeleportHandler {
continue; continue;
} }
HopperImpl hopper = this.plugin.getHopperManager().getHopper(location); HopperImpl hopper = this.plugin.getHopperManager().getHopper(location, null);
if (hopper == null) {
continue;
}
if (hopper.getTeleportTrigger() != TeleportTrigger.WALK_ON) { if (hopper.getTeleportTrigger() != TeleportTrigger.WALK_ON) {
continue; continue;
@ -98,7 +102,7 @@ public class TeleportHandlerImpl implements TeleportHandler {
for (Location nextHopperLocation : lastHopper.getLinkedBlocks()) { for (Location nextHopperLocation : lastHopper.getLinkedBlocks()) {
if (nextHopperLocation.getBlock().getState() instanceof org.bukkit.block.Hopper) { if (nextHopperLocation.getBlock().getState() instanceof org.bukkit.block.Hopper) {
Hopper hopper = this.plugin.getHopperManager().getHopper(nextHopperLocation); Hopper hopper = this.plugin.getHopperManager().getHopper(nextHopperLocation, null);
if (hopper != null) { if (hopper != null) {
return this.getChain(hopper, currentChainLength + 1); return this.getChain(hopper, currentChainLength + 1);
} }

View File

@ -69,9 +69,8 @@ public class BlockListeners implements Listener {
} }
HopperImpl hopper = this.plugin.getHopperManager().addHopper( HopperImpl hopper = this.plugin.getHopperManager().addHopper(
new HopperBuilder(e.getBlock()) new HopperBuilder(e.getBlock(), player.getUniqueId())
.setLevel(this.plugin.getLevelManager().getLevel(item)) .setLevel(this.plugin.getLevelManager().getLevel(item))
.setPlacedBy(player)
.setLastPlayerOpened(player).build()); .setLastPlayerOpened(player).build());
HopperPlaceEvent hopperPlaceEvent = new HopperPlaceEvent(player, hopper); HopperPlaceEvent hopperPlaceEvent = new HopperPlaceEvent(player, hopper);
@ -130,7 +129,7 @@ public class BlockListeners implements Listener {
return; return;
} }
HopperImpl hopper = this.plugin.getHopperManager().getHopper(block); HopperImpl hopper = this.plugin.getHopperManager().getHopper(block, player.getUniqueId());
GUIFilter.compileOpenGuiFilter(hopper); GUIFilter.compileOpenGuiFilter(hopper);
GUIAutoSellFilter.compileOpenAutoSellFilter(hopper); GUIAutoSellFilter.compileOpenAutoSellFilter(hopper);

View File

@ -73,7 +73,7 @@ public class HopperListeners implements Listener {
return; return;
} }
HopperImpl toHopper = this.plugin.getHopperManager().getHopper(destinationLocation); HopperImpl toHopper = this.plugin.getHopperManager().getHopper(destinationLocation, null);
// minecraft 1.8 doesn't have a method to get the hopper's location from the inventory, so we use the holder instead // minecraft 1.8 doesn't have a method to get the hopper's location from the inventory, so we use the holder instead
final ItemStack toMove = event.getItem(); final ItemStack toMove = event.getItem();

View File

@ -38,12 +38,12 @@ public class InteractListeners implements Listener {
Location location = player.getLocation().getBlock().getRelative(BlockFace.SELF).getLocation(); Location location = player.getLocation().getBlock().getRelative(BlockFace.SELF).getLocation();
Location down = location.getBlock().getRelative(BlockFace.DOWN).getLocation(); Location down = location.getBlock().getRelative(BlockFace.DOWN).getLocation();
if (this.plugin.getHopperManager().isHopper(down)) { if (this.plugin.getHopperManager().isHopper(down)) {
HopperImpl hopper = this.plugin.getHopperManager().getHopper(down); HopperImpl hopper = this.plugin.getHopperManager().getHopper(down, player.getUniqueId());
if (hopper.getTeleportTrigger() == TeleportTrigger.SNEAK) { if (hopper.getTeleportTrigger() == TeleportTrigger.SNEAK) {
this.plugin.getTeleportHandler().tpEntity(player, hopper); this.plugin.getTeleportHandler().tpEntity(player, hopper);
} }
} else if (this.plugin.getHopperManager().isHopper(location)) { } else if (this.plugin.getHopperManager().isHopper(location)) {
HopperImpl hopper = this.plugin.getHopperManager().getHopper(location); HopperImpl hopper = this.plugin.getHopperManager().getHopper(location, player.getUniqueId());
if (hopper.getTeleportTrigger() == TeleportTrigger.SNEAK) { if (hopper.getTeleportTrigger() == TeleportTrigger.SNEAK) {
this.plugin.getTeleportHandler().tpEntity(player, hopper); this.plugin.getTeleportHandler().tpEntity(player, hopper);
} }
@ -90,7 +90,7 @@ public class InteractListeners implements Listener {
return; return;
} }
HopperImpl hopper = this.plugin.getHopperManager().getHopper(event.getClickedBlock()); HopperImpl hopper = this.plugin.getHopperManager().getHopper(event.getClickedBlock(), player.getUniqueId());
if (!player.getInventory().getItemInHand().getType().name().contains("PICKAXE")) { if (!player.getInventory().getItemInHand().getType().name().contains("PICKAXE")) {
if (hopper.prepareForOpeningOverviewGui(player)) { if (hopper.prepareForOpeningOverviewGui(player)) {
this.plugin.getGuiManager().showGUI(player, new GUIOverview(this.plugin, hopper, player)); this.plugin.getGuiManager().showGUI(player, new GUIOverview(this.plugin, hopper, player));