Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
Original file line number Diff line number Diff line change
Expand Up @@ -295,11 +295,11 @@ public void openSpawnerListGUI(Player player, String worldName, int page, Filter
// Apply filtering
if (filter == FilterOption.ACTIVE) {
worldSpawners = worldSpawners.stream()
.filter(spawner -> !spawner.getSpawnerStop())
.filter(spawner -> !spawner.getSpawnerStop().get())
.collect(Collectors.toList());
} else if (filter == FilterOption.INACTIVE) {
worldSpawners = worldSpawners.stream()
.filter(SpawnerData::getSpawnerStop)
.filter(spawner -> spawner.getSpawnerStop().get())
.collect(Collectors.toList());
}

Expand Down Expand Up @@ -477,7 +477,7 @@ private ItemStack createSpawnerInfoItem(SpawnerData spawner) {
placeholders.put("size", String.valueOf(spawner.getStackSize()));

// Add status
if (spawner.getSpawnerStop()) {
if (spawner.getSpawnerStop().get()) {
placeholders.put("status_color", "&#ff6b6b");
placeholders.put("status_text", "Inactive");
} else {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ public AdminStackerHandler(SmartSpawner plugin, SpawnerManagementGUI managementG

@EventHandler
public void onAdminStackerClick(InventoryClickEvent event) {
if (!(event.getInventory().getHolder() instanceof AdminStackerHolder holder)) return;
if (!(event.getInventory().getHolder(false) instanceof AdminStackerHolder holder)) return;
if (!(event.getWhoClicked() instanceof Player player)) return;

event.setCancelled(true);
Expand Down Expand Up @@ -116,4 +116,4 @@ private void handleStackChange(Player player, SpawnerData spawner, String worldN
AdminStackerUI adminStackerUI = new AdminStackerUI(plugin);
adminStackerUI.openAdminStackerGui(player, spawner, worldName, listPage);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ public SpawnerManagementHandler(SmartSpawner plugin, ListSubCommand listSubComma

@EventHandler
public void onSpawnerManagementClick(InventoryClickEvent event) {
if (!(event.getInventory().getHolder() instanceof SpawnerManagementHolder holder)) return;
if (!(event.getInventory().getHolder(false) instanceof SpawnerManagementHolder holder)) return;
if (!(event.getWhoClicked() instanceof Player player)) return;

event.setCancelled(true);
Expand Down Expand Up @@ -109,7 +109,7 @@ private void handleRemoveSpawner(Player player, SpawnerData spawner, String worl
Location loc = spawner.getSpawnerLocation();
plugin.getSpawnerGuiViewManager().closeAllViewersInventory(spawner);
String spawnerId = spawner.getSpawnerId();
spawner.setSpawnerStop(true);
spawner.getSpawnerStop().set(true);
if (loc.getBlock().getType() == Material.SPAWNER) {
loc.getBlock().setType(Material.AIR);
}
Expand Down Expand Up @@ -150,4 +150,4 @@ private boolean isBedrockPlayer(Player player) {
}
return plugin.getIntegrationManager().getFloodgateHook().isBedrockPlayer(player);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -1266,7 +1266,7 @@ private long calculateTimeUntilNextSpawn(SpawnerData spawner) {
// This mirrors the logic from SpawnerMenuUI.calculateInitialTimerValue() to ensure consistency
// between initial display and ongoing timer updates
boolean isSpawnerInactive = !spawner.getSpawnerActive() ||
(spawner.getSpawnerStop() && timeElapsed > cachedDelay * 2); // Only inactive if stopped for more than 2 cycles
(spawner.getSpawnerStop().get() && timeElapsed > cachedDelay * 2); // Only inactive if stopped for more than 2 cycles

if (isSpawnerInactive) {
return -1;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,13 @@
import github.nighter.smartspawner.SmartSpawner;
import github.nighter.smartspawner.hooks.protections.CheckOpenMenu;
import github.nighter.smartspawner.language.MessageService;
import github.nighter.smartspawner.nms.ParticleWrapper;
import github.nighter.smartspawner.spawner.gui.main.SpawnerMenuUI;
import github.nighter.smartspawner.spawner.gui.main.SpawnerMenuFormUI;
import github.nighter.smartspawner.spawner.interactions.stack.SpawnerStackHandler;
import github.nighter.smartspawner.spawner.interactions.type.SpawnEggHandler;
import github.nighter.smartspawner.spawner.properties.SpawnerData;
import github.nighter.smartspawner.spawner.properties.SpawnerManager;
import github.nighter.smartspawner.Scheduler;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.block.CreatureSpawner;
Expand Down Expand Up @@ -169,7 +167,7 @@ private void handleSpawnerInteraction(Player player, Block block, ItemStack held

// Handle spawn egg usage
if (isSpawnEgg(itemType)) {
spawnEggHandler.handleSpawnEggUse(player, (CreatureSpawner) block.getState(), spawner, heldItem);
spawnEggHandler.handleSpawnEggUse(player, (CreatureSpawner) block.getState(false), spawner, heldItem);
return;
}

Expand All @@ -193,7 +191,7 @@ private void handleInactiveSpawnerInteraction(Player player, Block block, Spawne

// Handle spawn egg usage
if (isSpawnEgg(itemType)) {
spawnEggHandler.handleSpawnEggUse(player, (CreatureSpawner) block.getState(), spawner, heldItem);
spawnEggHandler.handleSpawnEggUse(player, (CreatureSpawner) block.getState(false), spawner, heldItem);
return;
}

Expand Down Expand Up @@ -251,4 +249,4 @@ public void cleanupCooldowns() {
public void cleanup() {
playerCooldowns.clear();
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,7 @@ public void onSpawnerBreak(BlockBreakEvent event) {
handleSmartSpawnerBreak(block, spawner, player);
plugin.getRangeChecker().stopSpawnerTask(spawner);
} else {
CreatureSpawner creatureSpawner = (CreatureSpawner) block.getState();
CreatureSpawner creatureSpawner = (CreatureSpawner) block.getState(false);
if(callAPIEvent(player, block.getLocation(), 1)) {
event.setCancelled(true);
return;
Expand Down Expand Up @@ -277,7 +277,7 @@ private void reduceDurability(ItemStack tool, Player player, int durabilityLoss)
}

private void cleanupSpawner(Block block, SpawnerData spawner) {
spawner.setSpawnerStop(true);
spawner.getSpawnerStop().set(true);
block.setType(Material.AIR);

String spawnerId = spawner.getSpawnerId();
Expand Down Expand Up @@ -374,4 +374,4 @@ public void onSpawnerDamage(BlockDamageEvent event) {
messageService.sendMessage(player, "spawner_break_required_tools");
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@
import github.nighter.smartspawner.spawner.properties.SpawnerManager;
import github.nighter.smartspawner.spawner.properties.SpawnerData;
import github.nighter.smartspawner.spawner.utils.SpawnerFileHandler;
import github.nighter.smartspawner.spawner.limits.ChunkSpawnerLimiter;
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.block.Block;
Expand Down Expand Up @@ -59,7 +58,7 @@ private void handleExplosion(List<Block> blockList) {
e = new SpawnerExplodeEvent(null, spawnerData.getSpawnerLocation(), 1, false);
}
} else {
spawnerData.setSpawnerStop(true);
spawnerData.getSpawnerStop().set(true);
String spawnerId = spawnerData.getSpawnerId();
int stackSize = spawnerData.getStackSize();

Expand Down Expand Up @@ -124,4 +123,4 @@ private void cleanupAssociatedHopper(Block block) {
hopperHandler.stopHopperTask(blockBelow.getLocation());
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -232,7 +232,7 @@ private void handleSpawnerSetup(Block block, Player player, EntityType entityTyp
return;
}

CreatureSpawner spawner = (CreatureSpawner) block.getState();
CreatureSpawner spawner = (CreatureSpawner) block.getState(false);

if (isVanillaSpawner) {
spawner.setSpawnedType(entityType);
Expand All @@ -245,7 +245,7 @@ private void handleSpawnerSetup(Block block, Player player, EntityType entityTyp
return;
}

CreatureSpawner delayedSpawner = (CreatureSpawner) block.getState();
CreatureSpawner delayedSpawner = (CreatureSpawner) block.getState(false);
EntityType finalEntityType = getEntityType(entityType, delayedSpawner);

delayedSpawner.setSpawnedType(finalEntityType);
Expand All @@ -272,7 +272,7 @@ private EntityType getEntityType(EntityType storedEntityType, CreatureSpawner pl
private void createSmartSpawner(Block block, Player player, EntityType entityType, int stackSize) {
String spawnerId = UUID.randomUUID().toString().substring(0, 8);

BlockState state = block.getState();
BlockState state = block.getState(false);
if (state instanceof CreatureSpawner spawner) {
spawner.setSpawnedType(entityType);
spawner.update(true, false);
Expand Down Expand Up @@ -322,4 +322,4 @@ public void cleanupPlayer(UUID playerId) {
lastPlacementTime.remove(playerId);
playerItemCounts.remove(playerId);
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
package github.nighter.smartspawner.spawner.lootgen;

import github.nighter.smartspawner.spawner.properties.SpawnerData;
import lombok.Getter;
import org.bukkit.GameMode;
import org.bukkit.Location;
import org.bukkit.entity.Player;

import java.util.ArrayList;
import java.util.List;

public class RangeMath {

private final List<Player> players;
private final List<SpawnerData> spawners;
private final List<Location> playerLocations = new ArrayList<>();
private final boolean[] playerIsConnectedAndAlive;
@Getter
private final boolean[] activeSpawners;

public RangeMath(List<Player> players, List<SpawnerData> spawners) {
this.players = players;
this.spawners = spawners;

this.activeSpawners = new boolean[spawners.size()];
this.playerIsConnectedAndAlive = new boolean[players.size()];

// Huge allocation improvement
for (int i = 0; i < players.size(); i++) {
this.playerLocations.add(players.get(i).getLocation());
this.playerIsConnectedAndAlive[i] = players.get(i).isConnected() && !players.get(i).isDead();
}
}

public void updateActiveSpawners() {
int i = 0, j;
boolean playerFound;
Location playerLoc;

for (SpawnerData s : spawners) {
final Location spawnerLoc = s.getSpawnerLocation();
if (spawnerLoc == null) continue;

j = 0;

playerFound = false;

final double rangeSq = s.getSpawnerRange() * s.getSpawnerRange();

for (Player p : players) {
if (p == null || !playerIsConnectedAndAlive[j]) continue;
if (p.getGameMode() == GameMode.SPECTATOR) continue;

playerLoc = playerLocations.get(j);

if (playerLoc.getWorld() == null || playerLoc.getWorld() != spawnerLoc.getWorld()) continue;

if (this.distanceSquared(spawnerLoc, playerLoc) <= rangeSq) {
playerFound = true;
break;
}

j++;
}

activeSpawners[i++] = playerFound;
}
}

private double distanceSquared(Location loc1, Location loc2) {
double dx = loc1.getX() - loc2.getX();
double dy = loc1.getY() - loc2.getY();
double dz = loc1.getZ() - loc2.getZ();
return dx * dx + dy * dy + dz * dz;
}

}
Loading