mirror of
https://github.com/songoda/FabledSkyBlock.git
synced 2024-12-24 01:27:33 +01:00
Wildstacker support, better EpicSpawners support. Spawners in /is level
This commit is contained in:
parent
25fdc33b4c
commit
a37df2001a
5
pom.xml
5
pom.xml
@ -49,6 +49,11 @@
|
||||
<artifactId>epicspawners</artifactId>
|
||||
<version>5.7.1</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.bgsoftware</groupId>
|
||||
<artifactId>wildstacker-api</artifactId>
|
||||
<version>b14</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.spigotmc</groupId>
|
||||
<artifactId>spigot</artifactId>
|
||||
|
@ -152,6 +152,11 @@ public class SkyBlock extends JavaPlugin {
|
||||
pluginManager.registerEvents(new Spawner(this), this);
|
||||
pluginManager.registerEvents(new Food(this), this);
|
||||
|
||||
if (pluginManager.isPluginEnabled("EpicSpawners"))
|
||||
pluginManager.registerEvents(new EpicSpawners(this), this);
|
||||
if (pluginManager.isPluginEnabled("WildStacker"))
|
||||
pluginManager.registerEvents(new WildStacker(this), this);
|
||||
|
||||
pluginManager.registerEvents(new Rollback(), this);
|
||||
pluginManager.registerEvents(new Levelling(), this);
|
||||
pluginManager.registerEvents(new Generator(), this);
|
||||
|
@ -89,9 +89,10 @@ public class CommandManager implements CommandExecutor, TabCompleter {
|
||||
new me.goodandevil.skyblock.command.commands.admin.GeneratorCommand(),
|
||||
new me.goodandevil.skyblock.command.commands.admin.LevelCommand(),
|
||||
new me.goodandevil.skyblock.command.commands.admin.OwnerCommand(),
|
||||
new me.goodandevil.skyblock.command.commands.admin.RefreshHologramsCommand(),
|
||||
new me.goodandevil.skyblock.command.commands.admin.ReloadCommand(),
|
||||
new me.goodandevil.skyblock.command.commands.admin.RemoveHologramCommand(),
|
||||
new me.goodandevil.skyblock.command.commands.admin.RemoveUpgradeCommand(),
|
||||
new me.goodandevil.skyblock.command.commands.admin.ReloadCommand(),
|
||||
new me.goodandevil.skyblock.command.commands.admin.SetHologramCommand(),
|
||||
new me.goodandevil.skyblock.command.commands.admin.SetSizeCommand(),
|
||||
new me.goodandevil.skyblock.command.commands.admin.SetSpawnCommand(),
|
||||
|
@ -0,0 +1,73 @@
|
||||
package me.goodandevil.skyblock.command.commands.admin;
|
||||
|
||||
import me.goodandevil.skyblock.command.SubCommand;
|
||||
import me.goodandevil.skyblock.config.FileManager;
|
||||
import me.goodandevil.skyblock.config.FileManager.Config;
|
||||
import me.goodandevil.skyblock.hologram.Hologram;
|
||||
import me.goodandevil.skyblock.hologram.HologramManager;
|
||||
import me.goodandevil.skyblock.hologram.HologramType;
|
||||
import me.goodandevil.skyblock.leaderboard.LeaderboardManager;
|
||||
import me.goodandevil.skyblock.message.MessageManager;
|
||||
import me.goodandevil.skyblock.sound.SoundManager;
|
||||
import me.goodandevil.skyblock.utils.version.Sounds;
|
||||
import org.apache.commons.lang3.text.WordUtils;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.command.ConsoleCommandSender;
|
||||
import org.bukkit.configuration.file.FileConfiguration;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
|
||||
public class RefreshHologramsCommand extends SubCommand {
|
||||
|
||||
@Override
|
||||
public void onCommandByPlayer(Player player, String[] args) {
|
||||
onCommand(player, args);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCommandByConsole(ConsoleCommandSender sender, String[] args) {
|
||||
onCommand(sender, args);
|
||||
}
|
||||
|
||||
public void onCommand(CommandSender sender, String[] args) {
|
||||
MessageManager messageManager = skyblock.getMessageManager();
|
||||
SoundManager soundManager = skyblock.getSoundManager();
|
||||
FileManager fileManager = skyblock.getFileManager();
|
||||
|
||||
Config config = fileManager.getConfig(new File(skyblock.getDataFolder(), "language.yml"));
|
||||
FileConfiguration configLoad = config.getFileConfiguration();
|
||||
|
||||
LeaderboardManager leaderboardManager = skyblock.getLeaderboardManager();
|
||||
leaderboardManager.clearLeaderboard();
|
||||
leaderboardManager.resetLeaderboard();
|
||||
leaderboardManager.setupLeaderHeads();
|
||||
|
||||
skyblock.getHologramManager().resetHologram();
|
||||
|
||||
messageManager.sendMessage(sender, configLoad.getString("Command.Island.Admin.RefreshHolograms.Refreshed.Message"));
|
||||
soundManager.playSound(sender, Sounds.NOTE_PLING.bukkitSound(), 1.0F, 1.0F);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return "refreshholograms";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getInfoMessagePath() {
|
||||
return "Command.Island.Admin.RefreshHolograms.Info.Message";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String[] getAliases() {
|
||||
return new String[0];
|
||||
}
|
||||
|
||||
@Override
|
||||
public String[] getArguments() {
|
||||
return new String[0];
|
||||
}
|
||||
}
|
@ -39,8 +39,8 @@ public class ReloadCommand extends SubCommand {
|
||||
SoundManager soundManager = skyblock.getSoundManager();
|
||||
FileManager fileManager = skyblock.getFileManager();
|
||||
|
||||
messageManager.sendMessage(sender, "&cPlease note that this command is not supported and may" +
|
||||
"cause issues that will make the status of the plugin unrecoverable. " +
|
||||
messageManager.sendMessage(sender, "&cPlease note that this command is not supported and may " +
|
||||
"cause issues that could put the plugin in an unstable state. " +
|
||||
"If you encounter any issues please stop your server, edit the configuration files, " +
|
||||
"and then start your server again. This command does NOT reload all the plugin files, only " +
|
||||
"the config.yml, language.yml, generators.yml, and levelling.yml.");
|
||||
@ -86,18 +86,15 @@ public class ReloadCommand extends SubCommand {
|
||||
levellingManager.unregisterMaterials();
|
||||
levellingManager.registerMaterials();
|
||||
|
||||
Bukkit.getServer().getScheduler().runTask(skyblock, new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
for (HologramType hologramTypeList : HologramType.values()) {
|
||||
Hologram hologram = hologramManager.getHologram(hologramTypeList);
|
||||
Bukkit.getServer().getScheduler().runTask(skyblock, () -> {
|
||||
for (HologramType hologramTypeList : HologramType.values()) {
|
||||
Hologram hologram = hologramManager.getHologram(hologramTypeList);
|
||||
|
||||
if (hologram != null) {
|
||||
hologramManager.removeHologram(hologram);
|
||||
}
|
||||
|
||||
hologramManager.spawnHologram(hologramTypeList);
|
||||
if (hologram != null) {
|
||||
hologramManager.removeHologram(hologram);
|
||||
}
|
||||
|
||||
hologramManager.spawnHologram(hologramTypeList);
|
||||
}
|
||||
});
|
||||
|
||||
|
@ -13,7 +13,9 @@ import me.goodandevil.skyblock.utils.version.NMSUtil;
|
||||
import me.goodandevil.skyblock.utils.version.Sounds;
|
||||
import me.goodandevil.skyblock.world.WorldManager;
|
||||
import org.bukkit.*;
|
||||
import org.bukkit.block.CreatureSpawner;
|
||||
import org.bukkit.configuration.file.FileConfiguration;
|
||||
import org.bukkit.entity.EntityType;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.scheduler.BukkitRunnable;
|
||||
|
||||
@ -65,6 +67,9 @@ public class LevellingManager {
|
||||
}
|
||||
}
|
||||
|
||||
boolean isEpicSpawnersEnabled = Bukkit.getPluginManager().isPluginEnabled("EpicSpawners");
|
||||
boolean isWildStackerEnabled = Bukkit.getPluginManager().isPluginEnabled("WildStacker");
|
||||
|
||||
Map<LevellingData, Long> levellingData = new HashMap<>();
|
||||
|
||||
for (ChunkSnapshot chunkSnapshotList : chunk.getChunkSnapshots()) {
|
||||
@ -74,6 +79,7 @@ public class LevellingManager {
|
||||
try {
|
||||
org.bukkit.Material blockMaterial = org.bukkit.Material.AIR;
|
||||
int blockData = 0;
|
||||
EntityType spawnerType = null;
|
||||
|
||||
if (NMSVersion > 12) {
|
||||
if (getBlockTypeMethod == null) {
|
||||
@ -109,26 +115,54 @@ public class LevellingManager {
|
||||
continue;
|
||||
|
||||
long amount = 1;
|
||||
if (blockMaterial == Materials.SPAWNER.parseMaterial()
|
||||
&& Bukkit.getPluginManager().isPluginEnabled("EpicSpawners")) {
|
||||
|
||||
if (blockMaterial == Materials.SPAWNER.parseMaterial()) {
|
||||
World world = Bukkit.getWorld(chunkSnapshotList.getWorldName());
|
||||
com.songoda.epicspawners.api.EpicSpawners epicSpawners =
|
||||
com.songoda.epicspawners.api.EpicSpawnersAPI.getImplementation();
|
||||
Location location = new Location(world, chunkSnapshotList.getX() * 16 + x, y, chunkSnapshotList.getZ() * 16 + z);
|
||||
if (epicSpawners.getSpawnerManager().isSpawner(location)) {
|
||||
amount = epicSpawners.getSpawnerManager()
|
||||
.getSpawnerFromWorld(location).getSpawnerDataCount();
|
||||
|
||||
if (isEpicSpawnersEnabled) {
|
||||
com.songoda.epicspawners.api.EpicSpawners epicSpawners = com.songoda.epicspawners.api.EpicSpawnersAPI.getImplementation();
|
||||
if (epicSpawners.getSpawnerManager().isSpawner(location)) {
|
||||
com.songoda.epicspawners.api.spawner.Spawner spawner = epicSpawners.getSpawnerManager().getSpawnerFromWorld(location);
|
||||
amount = spawner.getSpawnerDataCount();
|
||||
spawnerType = spawner.getCreatureSpawner().getSpawnedType();
|
||||
}
|
||||
} else if (isWildStackerEnabled) {
|
||||
com.bgsoftware.wildstacker.api.handlers.SystemManager wildStacker = com.bgsoftware.wildstacker.api.WildStackerAPI.getWildStacker().getSystemManager();
|
||||
if (wildStacker.isStackedSpawner(location.getBlock())) {
|
||||
com.bgsoftware.wildstacker.api.objects.StackedSpawner spawner = wildStacker.getStackedSpawner(location);
|
||||
amount = spawner.getStackAmount();
|
||||
spawnerType = spawner.getSpawnedType();
|
||||
}
|
||||
} else {
|
||||
spawnerType = ((CreatureSpawner) location.getBlock().getState()).getSpawnedType();
|
||||
}
|
||||
} else if (stackableManager != null && stackableManager.getStackableMaterials().contains(blockMaterial)) {
|
||||
World world = Bukkit.getWorld(chunkSnapshotList.getWorldName());
|
||||
Location location = new Location(world, chunkSnapshotList.getX() * 16 + x, y, chunkSnapshotList.getZ() * 16 + z);
|
||||
if (stackableManager.isStacked(location)) {
|
||||
Stackable stackable = stackableManager.getStack(location, blockMaterial);
|
||||
amount = stackable.getSize();
|
||||
} else {
|
||||
if (isWildStackerEnabled) {
|
||||
World world = Bukkit.getWorld(chunkSnapshotList.getWorldName());
|
||||
Location location = new Location(world, chunkSnapshotList.getX() * 16 + x, y, chunkSnapshotList.getZ() * 16 + z);
|
||||
com.bgsoftware.wildstacker.api.handlers.SystemManager wildStacker = com.bgsoftware.wildstacker.api.WildStackerAPI.getWildStacker().getSystemManager();
|
||||
if (wildStacker.isStackedBarrel(location.getBlock())) {
|
||||
com.bgsoftware.wildstacker.api.objects.StackedBarrel barrel = wildStacker.getStackedBarrel(location.getBlock());
|
||||
amount = barrel.getStackAmount();
|
||||
blockMaterial = barrel.getType();
|
||||
blockData = barrel.getData();
|
||||
if (NMSUtil.getVersionNumber() > 12 && blockMaterial.name().startsWith("LEGACY_")) {
|
||||
blockMaterial = Material.matchMaterial(blockMaterial.name().replace("LEGACY_", ""));
|
||||
blockData = 0;
|
||||
}
|
||||
}
|
||||
} else if (stackableManager != null && stackableManager.getStackableMaterials().contains(blockMaterial)) {
|
||||
World world = Bukkit.getWorld(chunkSnapshotList.getWorldName());
|
||||
Location location = new Location(world, chunkSnapshotList.getX() * 16 + x, y, chunkSnapshotList.getZ() * 16 + z);
|
||||
if (stackableManager.isStacked(location)) {
|
||||
Stackable stackable = stackableManager.getStack(location, blockMaterial);
|
||||
amount = stackable.getSize();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
LevellingData data = new LevellingData(blockMaterial, (byte)blockData);
|
||||
LevellingData data = new LevellingData(blockMaterial, (byte)blockData, spawnerType);
|
||||
Long totalAmountInteger = levellingData.get(data);
|
||||
long totalAmount = totalAmountInteger == null ? amount : totalAmountInteger + amount;
|
||||
levellingData.put(data, totalAmount);
|
||||
@ -233,10 +267,12 @@ public class LevellingManager {
|
||||
private class LevellingData {
|
||||
private final Material material;
|
||||
private final byte data;
|
||||
private final EntityType spawnerType;
|
||||
|
||||
private LevellingData(Material material, byte data) {
|
||||
private LevellingData(Material material, byte data, EntityType spawnerType) {
|
||||
this.material = material;
|
||||
this.data = data;
|
||||
this.spawnerType = spawnerType;
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -244,15 +280,19 @@ public class LevellingManager {
|
||||
if (!(obj instanceof LevellingData)) return false;
|
||||
LevellingData data = (LevellingData)obj;
|
||||
if (this == obj) return true;
|
||||
return this.material == data.material && this.data == data.data;
|
||||
return this.material == data.material && this.data == data.data && this.spawnerType == data.spawnerType;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return Objects.hash(this.material, this.data);
|
||||
return Objects.hash(this.material, this.data, this.spawnerType);
|
||||
}
|
||||
|
||||
private Materials getMaterials() {
|
||||
if (this.spawnerType != null) {
|
||||
return Materials.fromString("SPAWNER_" + this.spawnerType.name());
|
||||
}
|
||||
|
||||
if (NMSUtil.getVersionNumber() > 12) {
|
||||
try {
|
||||
return Materials.fromString(material.name());
|
||||
|
@ -0,0 +1,93 @@
|
||||
package me.goodandevil.skyblock.listeners;
|
||||
|
||||
import com.songoda.epicspawners.api.events.SpawnerBreakEvent;
|
||||
import com.songoda.epicspawners.api.events.SpawnerPlaceEvent;
|
||||
import me.goodandevil.skyblock.SkyBlock;
|
||||
import me.goodandevil.skyblock.config.FileManager;
|
||||
import me.goodandevil.skyblock.island.Island;
|
||||
import me.goodandevil.skyblock.island.IslandLevel;
|
||||
import me.goodandevil.skyblock.island.IslandManager;
|
||||
import me.goodandevil.skyblock.utils.version.Materials;
|
||||
import me.goodandevil.skyblock.world.WorldManager;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.configuration.file.FileConfiguration;
|
||||
import org.bukkit.entity.EntityType;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
public class EpicSpawners implements Listener {
|
||||
|
||||
private final SkyBlock skyblock;
|
||||
|
||||
public EpicSpawners(SkyBlock skyblock) {
|
||||
this.skyblock = skyblock;
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onSpawnerPlace(SpawnerPlaceEvent event) {
|
||||
IslandManager islandManager = skyblock.getIslandManager();
|
||||
WorldManager worldManager = skyblock.getWorldManager();
|
||||
|
||||
Location location = event.getSpawner().getLocation();
|
||||
if (!worldManager.isIslandWorld(location.getWorld())) return;
|
||||
|
||||
Island island = islandManager.getIslandAtLocation(location);
|
||||
|
||||
int amount = event.getSpawner().getFirstStack().getStackSize();
|
||||
EntityType spawnerType = event.getSpawner().getCreatureSpawner().getSpawnedType();
|
||||
|
||||
FileManager.Config config = skyblock.getFileManager().getConfig(new File(skyblock.getDataFolder(), "config.yml"));
|
||||
FileConfiguration configLoad = config.getFileConfiguration();
|
||||
|
||||
if (configLoad.getBoolean("Island.Block.Level.Enable")) {
|
||||
Materials materials = Materials.getSpawner(spawnerType);
|
||||
if (materials != null) {
|
||||
IslandLevel level = island.getLevel();
|
||||
|
||||
long materialAmount = 0;
|
||||
if (level.hasMaterial(materials.name())) {
|
||||
materialAmount = level.getMaterialAmount(materials.name());
|
||||
}
|
||||
|
||||
level.setMaterialAmount(materials.name(), materialAmount + amount);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onSpawnerBreak(SpawnerBreakEvent event) {
|
||||
IslandManager islandManager = skyblock.getIslandManager();
|
||||
WorldManager worldManager = skyblock.getWorldManager();
|
||||
|
||||
Location location = event.getSpawner().getLocation();
|
||||
if (!worldManager.isIslandWorld(location.getWorld())) return;
|
||||
|
||||
Island island = islandManager.getIslandAtLocation(location);
|
||||
|
||||
int amount = event.getSpawner().getFirstStack().getStackSize();
|
||||
EntityType spawnerType = event.getSpawner().getCreatureSpawner().getSpawnedType();
|
||||
|
||||
FileManager.Config config = skyblock.getFileManager().getConfig(new File(skyblock.getDataFolder(), "config.yml"));
|
||||
FileConfiguration configLoad = config.getFileConfiguration();
|
||||
|
||||
if (configLoad.getBoolean("Island.Block.Level.Enable")) {
|
||||
Materials materials = Materials.getSpawner(spawnerType);
|
||||
if (materials != null) {
|
||||
IslandLevel level = island.getLevel();
|
||||
|
||||
if (level.hasMaterial(materials.name())) {
|
||||
long materialAmount = level.getMaterialAmount(materials.name());
|
||||
|
||||
if (materialAmount - amount <= 0) {
|
||||
level.removeMaterial(materials.name());
|
||||
} else {
|
||||
level.setMaterialAmount(materials.name(), materialAmount - amount);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
150
src/main/java/me/goodandevil/skyblock/listeners/WildStacker.java
Normal file
150
src/main/java/me/goodandevil/skyblock/listeners/WildStacker.java
Normal file
@ -0,0 +1,150 @@
|
||||
package me.goodandevil.skyblock.listeners;
|
||||
|
||||
import com.bgsoftware.wildstacker.api.events.BarrelUnstackEvent;
|
||||
import com.bgsoftware.wildstacker.api.events.SpawnerUnstackEvent;
|
||||
import me.goodandevil.skyblock.SkyBlock;
|
||||
import me.goodandevil.skyblock.config.FileManager;
|
||||
import me.goodandevil.skyblock.island.Island;
|
||||
import me.goodandevil.skyblock.island.IslandLevel;
|
||||
import me.goodandevil.skyblock.island.IslandManager;
|
||||
import me.goodandevil.skyblock.utils.version.Materials;
|
||||
import me.goodandevil.skyblock.utils.version.NMSUtil;
|
||||
import me.goodandevil.skyblock.world.WorldManager;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.configuration.file.FileConfiguration;
|
||||
import org.bukkit.entity.EntityType;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
public class WildStacker implements Listener {
|
||||
|
||||
private final SkyBlock skyblock;
|
||||
|
||||
public WildStacker(SkyBlock skyblock) {
|
||||
this.skyblock = skyblock;
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onBarrelUnstack(BarrelUnstackEvent event) {
|
||||
IslandManager islandManager = skyblock.getIslandManager();
|
||||
WorldManager worldManager = skyblock.getWorldManager();
|
||||
|
||||
Location location = event.getBarrel().getLocation();
|
||||
if (!worldManager.isIslandWorld(location.getWorld())) return;
|
||||
|
||||
Island island = islandManager.getIslandAtLocation(location);
|
||||
|
||||
Material material = event.getBarrel().getType();
|
||||
byte data = (byte) event.getBarrel().getData();
|
||||
|
||||
if (NMSUtil.getVersionNumber() > 12 && material.name().startsWith("LEGACY_")) {
|
||||
material = Material.matchMaterial(material.name().replace("LEGACY_", ""));
|
||||
data = 0;
|
||||
}
|
||||
|
||||
FileManager.Config config = skyblock.getFileManager().getConfig(new File(skyblock.getDataFolder(), "config.yml"));
|
||||
FileConfiguration configLoad = config.getFileConfiguration();
|
||||
|
||||
if (configLoad.getBoolean("Island.Block.Level.Enable")) {
|
||||
Materials materials = Materials.getMaterials(material, data);
|
||||
if (materials != null) {
|
||||
IslandLevel level = island.getLevel();
|
||||
|
||||
if (level.hasMaterial(materials.name())) {
|
||||
long materialAmount = level.getMaterialAmount(materials.name());
|
||||
|
||||
if (materialAmount - event.getAmount() <= 0) {
|
||||
level.removeMaterial(materials.name());
|
||||
} else {
|
||||
level.setMaterialAmount(materials.name(), materialAmount - event.getAmount());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onSpawnerUnstack(SpawnerUnstackEvent event) {
|
||||
IslandManager islandManager = skyblock.getIslandManager();
|
||||
WorldManager worldManager = skyblock.getWorldManager();
|
||||
|
||||
Location location = event.getSpawner().getLocation();
|
||||
if (!worldManager.isIslandWorld(location.getWorld())) return;
|
||||
|
||||
Island island = islandManager.getIslandAtLocation(location);
|
||||
|
||||
EntityType spawnerType = event.getSpawner().getSpawnedType();
|
||||
|
||||
FileManager.Config config = skyblock.getFileManager().getConfig(new File(skyblock.getDataFolder(), "config.yml"));
|
||||
FileConfiguration configLoad = config.getFileConfiguration();
|
||||
|
||||
if (configLoad.getBoolean("Island.Block.Level.Enable")) {
|
||||
Materials materials = Materials.getSpawner(spawnerType);
|
||||
if (materials != null) {
|
||||
IslandLevel level = island.getLevel();
|
||||
|
||||
if (level.hasMaterial(materials.name())) {
|
||||
long materialAmount = level.getMaterialAmount(materials.name());
|
||||
|
||||
if (materialAmount - event.getAmount() <= 0) {
|
||||
level.removeMaterial(materials.name());
|
||||
} else {
|
||||
level.setMaterialAmount(materials.name(), materialAmount - event.getAmount());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// TODO: Readd after WildStacker 2.7.4 is released. A feature is being added that will let us multiply the drops by 2x.
|
||||
// @EventHandler
|
||||
// public void onMobStack(EntityStackEvent event) {
|
||||
// LivingEntity livingEntity = event.getEntity().getLivingEntity();
|
||||
//
|
||||
// // Certain entities shouldn't drop twice the amount
|
||||
// if (livingEntity instanceof Player ||
|
||||
// livingEntity instanceof ArmorStand ||
|
||||
// livingEntity instanceof Horse) {
|
||||
// return;
|
||||
// }
|
||||
//
|
||||
// if (NMSUtil.getVersionNumber() > 8) {
|
||||
// if (livingEntity instanceof Donkey || livingEntity instanceof Mule)
|
||||
// return;
|
||||
// }
|
||||
//
|
||||
// if (livingEntity.hasMetadata("SkyBlock")) {
|
||||
// return;
|
||||
// }
|
||||
//
|
||||
// IslandManager islandManager = skyblock.getIslandManager();
|
||||
//
|
||||
// if (skyblock.getWorldManager().isIslandWorld(livingEntity.getWorld())) {
|
||||
// Island island = islandManager.getIslandAtLocation(livingEntity.getLocation());
|
||||
//
|
||||
// if (island != null) {
|
||||
// List<Upgrade> upgrades = skyblock.getUpgradeManager().getUpgrades(Upgrade.Type.Drops);
|
||||
//
|
||||
// if (upgrades != null && upgrades.size() > 0 && upgrades.get(0).isEnabled()
|
||||
// && island.isUpgrade(Upgrade.Type.Drops)) {
|
||||
// StackedEntity entity = event.getEntity();
|
||||
// StackedEntity target = event.getTarget();
|
||||
//
|
||||
// List<ItemStack> drops = target.getDrops(0);
|
||||
// for (ItemStack item : drops) {
|
||||
// item.setAmount(item.getAmount() * 2);
|
||||
// }
|
||||
//
|
||||
// List<ItemStack> newDrops = entity.getDrops(0);
|
||||
// newDrops.addAll(drops);
|
||||
//
|
||||
// entity.setTempLootTable(newDrops);
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
|
||||
}
|
@ -2,8 +2,10 @@ package me.goodandevil.skyblock.menus;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.HashMap;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import org.apache.commons.lang3.text.WordUtils;
|
||||
import org.bukkit.Bukkit;
|
||||
@ -194,30 +196,34 @@ public class Levelling {
|
||||
IslandLevel level = island.getLevel();
|
||||
|
||||
Map<String, Long> testIslandMaterials = level.getMaterials();
|
||||
Map<String, Long> islandMaterials = new HashMap<>();
|
||||
List<String> testIslandMaterialKeysOrdered = testIslandMaterials.keySet().stream().sorted().collect(Collectors.toList());
|
||||
LinkedHashMap<String, Long> islandMaterials = new LinkedHashMap<>();
|
||||
|
||||
Config mainConfig = fileManager.getConfig(new File(skyblock.getDataFolder(), "levelling.yml"));
|
||||
Config settingsConfig = fileManager.getConfig(new File(skyblock.getDataFolder(), "config.yml"));
|
||||
|
||||
// Filter out ItemStacks that can't be displayed in the inventory
|
||||
Inventory testInventory = Bukkit.createInventory(null, 9);
|
||||
for (String materialName : testIslandMaterials.keySet()) {
|
||||
for (String materialName : testIslandMaterialKeysOrdered) {
|
||||
if (mainConfig.getFileConfiguration().getString("Materials." + materialName + ".Points") == null)
|
||||
continue;
|
||||
if (!settingsConfig.getFileConfiguration().getBoolean("Island.Levelling.IncludeEmptyPointsInList") &&
|
||||
mainConfig.getFileConfiguration().getInt("Materials." + materialName + ".Points") <= 0)
|
||||
continue;
|
||||
|
||||
long value = testIslandMaterials.get(materialName);
|
||||
Materials materials = Materials.fromString(materialName);
|
||||
ItemStack is = materials.parseItem();
|
||||
is.setAmount(Math.min(Math.toIntExact(testIslandMaterials.get(materialName)), 64));
|
||||
|
||||
if (is == null || is.getItemMeta() == null) continue;
|
||||
|
||||
is.setAmount(Math.min(Math.toIntExact(value), 64));
|
||||
is.setType(MaterialUtil.correctMaterial(is.getType()));
|
||||
|
||||
if (is == null || is.getItemMeta() == null) continue;
|
||||
testInventory.clear();
|
||||
testInventory.setItem(0, is);
|
||||
if (testInventory.getItem(0) != null) {
|
||||
islandMaterials.put(materialName, testIslandMaterials.get(materialName));
|
||||
islandMaterials.put(materialName, value);
|
||||
}
|
||||
}
|
||||
|
||||
@ -285,18 +291,23 @@ public class Levelling {
|
||||
is.setAmount(Math.min(Math.toIntExact(materialAmount), 64));
|
||||
is.setType(MaterialUtil.correctMaterial(is.getType()));
|
||||
|
||||
String name;
|
||||
if (materials.isSpawner() && materials != Materials.SPAWNER) {
|
||||
name = "Spawner: " + WordUtils.capitalize(material.replace("SPAWNER_", "").toLowerCase().replace("_", " ")).trim();
|
||||
} else {
|
||||
name = WordUtils.capitalize(material.toLowerCase().replace("_", " ")).trim();
|
||||
}
|
||||
|
||||
List<String> lore = configLoad.getStringList("Menu.Levelling.Item.Material.Lore");
|
||||
lore.replaceAll(x -> x.replace("%points", NumberUtil.formatNumberByDecimal(pointsEarned))
|
||||
.replace("%blocks", NumberUtil.formatNumberByDecimal(materialAmount))
|
||||
.replace("%material",
|
||||
WordUtils.capitalize(material.toLowerCase().replace("_", " ")).trim()));
|
||||
.replace("%material", name));
|
||||
|
||||
nInv.addItem(nInv.createItem(is, configLoad
|
||||
.getString("Menu.Levelling.Item.Material.Displayname")
|
||||
.replace("%points", NumberUtil.formatNumberByDecimal(pointsEarned))
|
||||
.replace("%blocks", NumberUtil.formatNumberByDecimal(materialAmount))
|
||||
.replace("%material",
|
||||
WordUtils.capitalize(material.toLowerCase().replace("_", " ")).trim()),
|
||||
.replace("%material", name),
|
||||
lore, null, null, null), inventorySlot);
|
||||
}
|
||||
}
|
||||
|
@ -5,6 +5,7 @@ import java.util.HashMap;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.entity.EntityType;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
public enum Materials {
|
||||
@ -767,6 +768,63 @@ public enum Materials {
|
||||
SNOW_BLOCK("SNOW_BLOCK", 0),
|
||||
SOUL_SAND("SOUL_SAND", 0),
|
||||
SPAWNER("MOB_SPAWNER", 0),
|
||||
SPAWNER_BAT(null, -1),
|
||||
SPAWNER_BLAZE(null, -1),
|
||||
SPAWNER_CAVE_SPIDER(null, -1),
|
||||
SPAWNER_CHICKEN(null, -1),
|
||||
SPAWNER_COD(null, -1),
|
||||
SPAWNER_COW(null, -1),
|
||||
SPAWNER_CREEPER(null, -1),
|
||||
SPAWNER_DOLPHIN(null, -1),
|
||||
SPAWNER_DONKEY(null, -1),
|
||||
SPAWNER_DROWNED(null, -1),
|
||||
SPAWNER_ELDER_GUARDIAN(null, -1),
|
||||
SPAWNER_ENDER_DRAGON(null, -1),
|
||||
SPAWNER_ENDERMAN(null, -1),
|
||||
SPAWNER_ENDERMITE(null, -1),
|
||||
SPAWNER_EVOKER(null, -1),
|
||||
SPAWNER_GHAST(null, -1),
|
||||
SPAWNER_GIANT(null, -1),
|
||||
SPAWNER_GUARDIAN(null, -1),
|
||||
SPAWNER_HORSE(null, -1),
|
||||
SPAWNER_HUSK(null, -1),
|
||||
SPAWNER_ILLUSIONER(null, -1),
|
||||
SPAWNER_IRON_GOLEM(null, -1),
|
||||
SPAWNER_LLAMA(null, -1),
|
||||
SPAWNER_MAGMA_CUBE(null, -1),
|
||||
SPAWNER_MULE(null, -1),
|
||||
SPAWNER_MUSHROOM_COW(null, -1),
|
||||
SPAWNER_OCELOT(null, -1),
|
||||
SPAWNER_PARROT(null, -1),
|
||||
SPAWNER_PHANTOM(null, -1),
|
||||
SPAWNER_PIG(null, -1),
|
||||
SPAWNER_PIG_ZOMBIE(null, -1),
|
||||
SPAWNER_POLAR_BEAR(null, -1),
|
||||
SPAWNER_PUFFERFISH(null, -1),
|
||||
SPAWNER_RABBIT(null, -1),
|
||||
SPAWNER_SALMON(null, -1),
|
||||
SPAWNER_SHEEP(null, -1),
|
||||
SPAWNER_SHULKER(null, -1),
|
||||
SPAWNER_SILVERFISH(null, -1),
|
||||
SPAWNER_SKELETON(null, -1),
|
||||
SPAWNER_SKELETON_HORSE(null, -1),
|
||||
SPAWNER_SLIME(null, -1),
|
||||
SPAWNER_SNOWMAN(null, -1),
|
||||
SPAWNER_SPIDER(null, -1),
|
||||
SPAWNER_SQUID(null, -1),
|
||||
SPAWNER_STRAY(null, -1),
|
||||
SPAWNER_TROPICAL_FISH(null, -1),
|
||||
SPAWNER_TURTLE(null, -1),
|
||||
SPAWNER_VEX(null, -1),
|
||||
SPAWNER_VILLAGER(null, -1),
|
||||
SPAWNER_VINDICATOR(null, -1),
|
||||
SPAWNER_WITCH(null, -1),
|
||||
SPAWNER_WITHER(null, -1),
|
||||
SPAWNER_WITHER_SKELETON(null, -1),
|
||||
SPAWNER_WOLF(null, -1),
|
||||
SPAWNER_ZOMBIE(null, -1),
|
||||
SPAWNER_ZOMBIE_HORSE(null, -1),
|
||||
SPAWNER_ZOMBIE_VILLAGER(null, -1),
|
||||
SPECTRAL_ARROW("SPECTRAL_ARROW", 0),
|
||||
SPIDER_EYE("SPIDER_EYE", 0),
|
||||
SPIDER_SPAWN_EGG("MONSTER_EGG", 0),
|
||||
@ -942,6 +1000,14 @@ public enum Materials {
|
||||
* @return True if the Material exists
|
||||
*/
|
||||
public boolean isAvailable() {
|
||||
if (this.isSpawner() && this != Materials.SPAWNER) {
|
||||
String spawnerType = this.name().replace("SPAWNER_", "");
|
||||
for (EntityType entityType : EntityType.values())
|
||||
if (entityType.name().equalsIgnoreCase(spawnerType))
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
return isNewVersion() || !this.is13only;
|
||||
}
|
||||
|
||||
@ -974,6 +1040,14 @@ public enum Materials {
|
||||
return null;
|
||||
}
|
||||
|
||||
public boolean isSpawner() {
|
||||
return this.name().startsWith("SPAWNER");
|
||||
}
|
||||
|
||||
public static Materials getSpawner(EntityType spawnerType) {
|
||||
return fromString("SPAWNER_" + spawnerType.name());
|
||||
}
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
public boolean isSameMaterial(ItemStack comp) {
|
||||
if (isNewVersion()) {
|
||||
@ -1066,6 +1140,9 @@ public enum Materials {
|
||||
}
|
||||
|
||||
public Material parseMaterial() {
|
||||
if (this.isSpawner() && this != Materials.SPAWNER)
|
||||
return Materials.SPAWNER.parseMaterial();
|
||||
|
||||
Material mat = Material.matchMaterial(this.toString());
|
||||
|
||||
if (mat != null) {
|
||||
|
@ -773,6 +773,11 @@ Command:
|
||||
Message: "&bSkyBlock &8| &cError&8: &eA location for that hologram has not been set."
|
||||
Removed:
|
||||
Message: "&bSkyBlock &8| &aInfo&8: &eYou have removed the '&b%type&e' hologram."
|
||||
RefreshHolograms:
|
||||
Info:
|
||||
Message: "&f&oRefreshes any existing holograms."
|
||||
Refreshed:
|
||||
Message: "&bSkyBlock &8| &aInfo&8: &eRefreshed holograms."
|
||||
SetSize:
|
||||
Info:
|
||||
Message: "&f&oSets the size of a players Island."
|
||||
|
@ -25,7 +25,6 @@ Materials:
|
||||
ACACIA_STAIRS:
|
||||
Points: 2
|
||||
ACACIA_TRAPDOOR:
|
||||
Points: 3
|
||||
ACACIA_WOOD:
|
||||
Points: 1
|
||||
ACTIVATOR_RAIL:
|
||||
@ -1010,6 +1009,120 @@ Materials:
|
||||
Points: 1
|
||||
SPAWNER:
|
||||
Points: 10
|
||||
SPAWNER_BAT:
|
||||
Points: 10
|
||||
SPAWNER_BLAZE:
|
||||
Points: 10
|
||||
SPAWNER_CAVE_SPIDER:
|
||||
Points: 10
|
||||
SPAWNER_CHICKEN:
|
||||
Points: 10
|
||||
SPAWNER_COD:
|
||||
Points: 10
|
||||
SPAWNER_COW:
|
||||
Points: 10
|
||||
SPAWNER_CREEPER:
|
||||
Points: 10
|
||||
SPAWNER_DOLPHIN:
|
||||
Points: 10
|
||||
SPAWNER_DONKEY:
|
||||
Points: 10
|
||||
SPAWNER_DROWNED:
|
||||
Points: 10
|
||||
SPAWNER_ELDER_GUARDIAN:
|
||||
Points: 10
|
||||
SPAWNER_ENDER_DRAGON:
|
||||
Points: 10
|
||||
SPAWNER_ENDERMAN:
|
||||
Points: 10
|
||||
SPAWNER_ENDERMITE:
|
||||
Points: 10
|
||||
SPAWNER_EVOKER:
|
||||
Points: 10
|
||||
SPAWNER_GHAST:
|
||||
Points: 10
|
||||
SPAWNER_GIANT:
|
||||
Points: 10
|
||||
SPAWNER_GUARDIAN:
|
||||
Points: 10
|
||||
SPAWNER_HORSE:
|
||||
Points: 10
|
||||
SPAWNER_HUSK:
|
||||
Points: 10
|
||||
SPAWNER_ILLUSIONER:
|
||||
Points: 10
|
||||
SPAWNER_IRON_GOLEM:
|
||||
Points: 10
|
||||
SPAWNER_LLAMA:
|
||||
Points: 10
|
||||
SPAWNER_MAGMA_CUBE:
|
||||
Points: 10
|
||||
SPAWNER_MULE:
|
||||
Points: 10
|
||||
SPAWNER_MUSHROOM_COW:
|
||||
Points: 10
|
||||
SPAWNER_OCELOT:
|
||||
Points: 10
|
||||
SPAWNER_PARROT:
|
||||
Points: 10
|
||||
SPAWNER_PHANTOM:
|
||||
Points: 10
|
||||
SPAWNER_PIG:
|
||||
Points: 10
|
||||
SPAWNER_PIG_ZOMBIE:
|
||||
Points: 10
|
||||
SPAWNER_POLAR_BEAR:
|
||||
Points: 10
|
||||
SPAWNER_PUFFERFISH:
|
||||
Points: 10
|
||||
SPAWNER_RABBIT:
|
||||
Points: 10
|
||||
SPAWNER_SALMON:
|
||||
Points: 10
|
||||
SPAWNER_SHEEP:
|
||||
Points: 10
|
||||
SPAWNER_SHULKER:
|
||||
Points: 10
|
||||
SPAWNER_SILVERFISH:
|
||||
Points: 10
|
||||
SPAWNER_SKELETON:
|
||||
Points: 10
|
||||
SPAWNER_SKELETON_HORSE:
|
||||
Points: 10
|
||||
SPAWNER_SLIME:
|
||||
Points: 10
|
||||
SPAWNER_SNOWMAN:
|
||||
Points: 10
|
||||
SPAWNER_SPIDER:
|
||||
Points: 10
|
||||
SPAWNER_SQUID:
|
||||
Points: 10
|
||||
SPAWNER_STRAY:
|
||||
Points: 10
|
||||
SPAWNER_TROPICAL_FISH:
|
||||
Points: 10
|
||||
SPAWNER_TURTLE:
|
||||
Points: 10
|
||||
SPAWNER_VEX:
|
||||
Points: 10
|
||||
SPAWNER_VILLAGER:
|
||||
Points: 10
|
||||
SPAWNER_VINDICATOR:
|
||||
Points: 10
|
||||
SPAWNER_WITCH:
|
||||
Points: 10
|
||||
SPAWNER_WITHER:
|
||||
Points: 10
|
||||
SPAWNER_WITHER_SKELETON:
|
||||
Points: 10
|
||||
SPAWNER_WOLF:
|
||||
Points: 10
|
||||
SPAWNER_ZOMBIE:
|
||||
Points: 10
|
||||
SPAWNER_ZOMBIE_HORSE:
|
||||
Points: 10
|
||||
SPAWNER_ZOMBIE_VILLAGER:
|
||||
Points: 10
|
||||
SPONGE:
|
||||
Points: 10
|
||||
SPRUCE_BUTTON:
|
||||
|
@ -4,12 +4,11 @@ version: maven-version-number
|
||||
api-version: 1.13
|
||||
description: A unique SkyBlock plugin
|
||||
author: Songoda
|
||||
softdepend: [PlaceholderAPI, MVdWPlaceholderAPI, Vault, LeaderHeads]
|
||||
softdepend: [PlaceholderAPI, MVdWPlaceholderAPI, Vault, LeaderHeads, WildStacker]
|
||||
loadbefore: [Multiverse-Core]
|
||||
commands:
|
||||
island:
|
||||
description: Island command
|
||||
aliases: [is]
|
||||
|
||||
skyblock:
|
||||
description: Skyblock info command.
|
||||
description: Skyblock info command.
|
||||
|
Loading…
Reference in New Issue
Block a user