1
mirror of https://github.com/StarWishsama/Slimefun4.git synced 2024-09-20 03:35:51 +00:00

[CI skip] Reduced technical debt

This commit is contained in:
TheBusyBiscuit 2020-01-29 02:25:25 +01:00
parent b94e197f06
commit 6dc0907728
18 changed files with 240 additions and 164 deletions

View File

@ -21,12 +21,13 @@ public class ExplosionsListener implements Listener {
plugin.getServer().getPluginManager().registerEvents(this, plugin);
}
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
public void onEntityExplode(EntityExplodeEvent e) {
Iterator<Block> blocks = e.blockList().iterator();
while (blocks.hasNext()) {
Block block = blocks.next();
String id = BlockStorage.checkID(block);
if (id != null) {
blocks.remove();

View File

@ -31,12 +31,8 @@ public class GrapplingHookListener implements Listener {
@EventHandler
public void onArrowHit(ProjectileHitEvent e) {
Slimefun.runSync(() -> {
if (e.getEntity().isValid()) {
SlimefunPlugin.getUtilities().arrows.remove(e.getEntity().getUniqueId());
if (e.getEntity() instanceof Arrow) {
handleGrapplingHook((Arrow) e.getEntity());
}
if (e.getEntity().isValid() && e.getEntity() instanceof Arrow) {
handleGrapplingHook((Arrow) e.getEntity());
}
}, 4L);
}

View File

@ -1,5 +1,9 @@
package io.github.thebusybiscuit.slimefun4.implementation.listeners;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
import org.bukkit.entity.Arrow;
import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player;
@ -7,35 +11,56 @@ import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.EntityDamageByEntityEvent;
import org.bukkit.event.entity.EntityShootBowEvent;
import org.bukkit.event.entity.ProjectileHitEvent;
import me.mrCookieSlime.Slimefun.SlimefunPlugin;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunBow;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
import me.mrCookieSlime.Slimefun.Objects.handlers.BowShootHandler;
import me.mrCookieSlime.Slimefun.Objects.handlers.ItemHandler;
import me.mrCookieSlime.Slimefun.api.Slimefun;
public class SlimefunBowListener implements Listener {
private final Map<UUID, SlimefunBow> bows = new HashMap<>();
public SlimefunBowListener(SlimefunPlugin plugin) {
plugin.getServer().getPluginManager().registerEvents(this, plugin);
}
public Map<UUID, SlimefunBow> getBows() {
return bows;
}
@EventHandler
public void onBowUse(EntityShootBowEvent e) {
if (e.getEntity() instanceof Player && e.getProjectile() instanceof Arrow && SlimefunItem.getByItem(e.getBow()) != null) {
SlimefunPlugin.getUtilities().arrows.put(e.getProjectile().getUniqueId(), e.getBow());
if (e.getEntity() instanceof Player && e.getProjectile() instanceof Arrow) {
SlimefunItem bow = SlimefunItem.getByItem(e.getBow());
if (bow instanceof SlimefunBow) {
bows.put(e.getProjectile().getUniqueId(), (SlimefunBow) bow);
}
}
}
@EventHandler
public void onArrowHit(ProjectileHitEvent e) {
Slimefun.runSync(() -> {
if (e.getEntity().isValid() && e.getEntity() instanceof Arrow) {
bows.remove(e.getEntity().getUniqueId());
}
}, 4L);
}
@EventHandler
public void onArrowSuccessfulHit(EntityDamageByEntityEvent e) {
if (e.getDamager() instanceof Arrow && e.getEntity() instanceof LivingEntity && SlimefunPlugin.getUtilities().arrows.containsKey(e.getDamager().getUniqueId())) {
for (ItemHandler handler : SlimefunItem.getHandlers(BowShootHandler.class)) {
if (((BowShootHandler) handler).onHit(e, (LivingEntity) e.getEntity())) {
break;
}
}
if (e.getDamager() instanceof Arrow && e.getEntity() instanceof LivingEntity) {
SlimefunBow bow = bows.get(e.getDamager().getUniqueId());
SlimefunPlugin.getUtilities().arrows.remove(e.getDamager().getUniqueId());
if (bow != null) {
bow.callItemHandler(BowShootHandler.class, handler -> handler.onHit(e, (LivingEntity) e.getEntity()));
}
bows.remove(e.getDamager().getUniqueId());
}
}

View File

@ -9,7 +9,6 @@ import org.bukkit.entity.IronGolem;
import org.bukkit.entity.Player;
import org.bukkit.event.Event.Result;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.block.Action;
import org.bukkit.event.player.PlayerDropItemEvent;
@ -122,7 +121,8 @@ public class SlimefunItemListener implements Listener {
}
}
@EventHandler(priority = EventPriority.NORMAL)
@Deprecated
@EventHandler
public void onRightClick(ItemUseEvent e) {
if (e.getParentEvent() != null && e.getParentEvent().getHand() != EquipmentSlot.HAND) {
return;

View File

@ -27,7 +27,6 @@ import me.mrCookieSlime.Slimefun.Lists.SlimefunItems;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric.gps.GPSTransmitter;
import me.mrCookieSlime.Slimefun.api.BlockStorage;
import me.mrCookieSlime.Slimefun.api.Slimefun;
public class GPSNetwork {
@ -196,7 +195,7 @@ public class GPSNetwork {
return map;
}
public void addWaypoint(Player p, final Location l) {
public void addWaypoint(Player p, Location l) {
if ((getWaypoints(p.getUniqueId()).size() + 2) > inventory.length) {
SlimefunPlugin.getLocal().sendMessage(p, "gps.waypoint.max", true);
return;
@ -231,7 +230,7 @@ public class GPSNetwork {
return transmitters.getOrDefault(uuid, new HashSet<>());
}
public void openTeleporterGUI(Player p, UUID uuid, Block b, final int complexity) {
public void openTeleporterGUI(Player p, UUID uuid, Block b, int complexity) {
if (SlimefunPlugin.getUtilities().teleporterUsers.contains(p.getUniqueId())) {
return;
}
@ -252,14 +251,14 @@ public class GPSNetwork {
Location source = new Location(b.getWorld(), b.getX() + 0.5D, b.getY() + 2D, b.getZ() + 0.5D);
int index = 0;
for (Map.Entry<String, Location> entry : Slimefun.getGPSNetwork().getWaypoints(uuid).entrySet()) {
for (Map.Entry<String, Location> entry : SlimefunPlugin.getGPSNetwork().getWaypoints(uuid).entrySet()) {
if (index >= teleporterInventory.length) break;
int slot = teleporterInventory[index];
Location l = entry.getValue();
ItemStack globe = getIcon(entry);
menu.addItem(slot, new CustomItem(globe, entry.getKey(), "&8\u21E8 &7World: &r" + l.getWorld().getName(), "&8\u21E8 &7X: &r" + l.getX(), "&8\u21E8 &7Y: &r" + l.getY(), "&8\u21E8 &7Z: &r" + l.getZ(), "&8\u21E8 &7Estimated Teleportation Time: &r" + (50 / TeleportationSequence.getSpeed(Slimefun.getGPSNetwork().getNetworkComplexity(uuid), source, l)) + "s", "", "&8\u21E8 &cClick to select"));
menu.addItem(slot, new CustomItem(globe, entry.getKey(), "&8\u21E8 &7World: &r" + l.getWorld().getName(), "&8\u21E8 &7X: &r" + l.getX(), "&8\u21E8 &7Y: &r" + l.getY(), "&8\u21E8 &7Z: &r" + l.getZ(), "&8\u21E8 &7Estimated Teleportation Time: &r" + (50 / TeleportationSequence.getSpeed(SlimefunPlugin.getGPSNetwork().getNetworkComplexity(uuid), source, l)) + "s", "", "&8\u21E8 &cClick to select"));
menu.addMenuClickHandler(slot, (pl, slotn, item, action) -> {
pl.closeInventory();
TeleportationSequence.start(pl.getUniqueId(), complexity, source, l, false);

View File

@ -4,12 +4,21 @@ import org.bukkit.inventory.ItemStack;
import me.mrCookieSlime.Slimefun.Lists.Categories;
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
import me.mrCookieSlime.Slimefun.Objects.handlers.BowShootHandler;
import me.mrCookieSlime.Slimefun.api.SlimefunItemStack;
public class SlimefunBow extends SlimefunItem {
public abstract class SlimefunBow extends SlimefunItem {
public SlimefunBow(SlimefunItemStack item, ItemStack[] recipe) {
super(Categories.WEAPONS, item, RecipeType.MAGIC_WORKBENCH, recipe);
}
@Override
public void preRegister() {
super.preRegister();
addItemHandler(onShoot());
}
public abstract BowShootHandler onShoot();
}

View File

@ -0,0 +1,30 @@
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items;
import org.bukkit.Sound;
import org.bukkit.inventory.ItemStack;
import org.bukkit.util.Vector;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunBow;
import me.mrCookieSlime.Slimefun.Objects.handlers.BowShootHandler;
import me.mrCookieSlime.Slimefun.api.SlimefunItemStack;
public class ExplosiveBow extends SlimefunBow {
public ExplosiveBow(SlimefunItemStack item, ItemStack[] recipe) {
super(item, recipe);
}
@Override
public BowShootHandler onShoot() {
return (e, n) -> {
Vector vector = n.getVelocity();
vector.setY(0.6);
n.setVelocity(vector);
n.getWorld().createExplosion(n.getLocation(), 0F);
n.getWorld().playSound(n.getLocation(), Sound.ENTITY_GENERIC_EXPLODE, 1F, 1F);
};
}
}

View File

@ -71,7 +71,7 @@ public class GrapplingHook extends SimpleSlimefunItem<ItemUseHandler> {
// To fix issue #253
Slimefun.runSync(() -> {
if (utilities.jumpState.containsKey(uuid)) {
utilities.arrows.remove(uuid);
SlimefunPlugin.getBowListener().getBows().remove(uuid);
for (Entity n : utilities.remove.get(uuid)) {
if (n.isValid()) n.remove();

View File

@ -0,0 +1,31 @@
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items;
import org.bukkit.Effect;
import org.bukkit.Material;
import org.bukkit.inventory.ItemStack;
import org.bukkit.potion.PotionEffect;
import org.bukkit.potion.PotionEffectType;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunBow;
import me.mrCookieSlime.Slimefun.Objects.handlers.BowShootHandler;
import me.mrCookieSlime.Slimefun.api.SlimefunItemStack;
public class IcyBow extends SlimefunBow {
public IcyBow(SlimefunItemStack item, ItemStack[] recipe) {
super(item, recipe);
}
@Override
public BowShootHandler onShoot() {
return (e, n) -> {
n.getWorld().playEffect(n.getLocation(), Effect.STEP_SOUND, Material.ICE);
n.getWorld().playEffect(n.getEyeLocation(), Effect.STEP_SOUND, Material.ICE);
n.addPotionEffect(new PotionEffect(PotionEffectType.SLOW, 20 * 2, 10));
n.addPotionEffect(new PotionEffect(PotionEffectType.JUMP, 20 * 2, -10));
};
}
}

View File

@ -17,7 +17,6 @@ import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.UnregisterReason;
import me.mrCookieSlime.Slimefun.Objects.handlers.BlockTicker;
import me.mrCookieSlime.Slimefun.api.BlockStorage;
import me.mrCookieSlime.Slimefun.api.Slimefun;
import me.mrCookieSlime.Slimefun.api.SlimefunItemStack;
import me.mrCookieSlime.Slimefun.api.energy.ChargableBlock;
@ -35,7 +34,7 @@ public abstract class GPSTransmitter extends SimpleSlimefunItem<BlockTicker> {
@Override
public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) {
Slimefun.getGPSNetwork().updateTransmitter(b.getLocation(), UUID.fromString(BlockStorage.getLocationInfo(b.getLocation(), "owner")), NetworkStatus.OFFLINE);
SlimefunPlugin.getGPSNetwork().updateTransmitter(b.getLocation(), UUID.fromString(BlockStorage.getLocationInfo(b.getLocation(), "owner")), NetworkStatus.OFFLINE);
return true;
}
});

View File

@ -6,7 +6,7 @@ import org.bukkit.event.entity.EntityDamageByEntityEvent;
@FunctionalInterface
public interface BowShootHandler extends ItemHandler {
boolean onHit(EntityDamageByEntityEvent e, LivingEntity n);
void onHit(EntityDamageByEntityEvent e, LivingEntity n);
@Override
default Class<? extends ItemHandler> getIdentifier() {

View File

@ -18,14 +18,11 @@ import org.bukkit.block.BlockFace;
import org.bukkit.block.Chest;
import org.bukkit.block.CreatureSpawner;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player;
import org.bukkit.event.entity.EntityDamageByEntityEvent;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import org.bukkit.potion.PotionEffect;
import org.bukkit.potion.PotionEffectType;
import org.bukkit.util.Vector;
import io.github.thebusybiscuit.cscorelib2.inventory.InvUtils;
import io.github.thebusybiscuit.cscorelib2.inventory.ItemUtils;
@ -50,7 +47,6 @@ import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.ReplacingAlloy;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.ReplacingItem;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunArmorPiece;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunBackpack;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunBow;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunMachine;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SoulboundBackpack;
@ -67,6 +63,7 @@ import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.cargo.CargoOutputNode;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.Bandage;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.DietCookie;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.EnderBackpack;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.ExplosiveBow;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.ExplosivePickaxe;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.ExplosiveShovel;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.FortuneCookie;
@ -74,6 +71,7 @@ import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.GoldPan;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.GrapplingHook;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.HerculesPickaxe;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.HunterTalisman;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.IcyBow;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.InfernalBonemeal;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.KnowledgeFlask;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.KnowledgeTome;
@ -169,7 +167,6 @@ import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.multiblocks.PressureChambe
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.multiblocks.Smeltery;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.multiblocks.TableSaw;
import me.mrCookieSlime.Slimefun.Objects.handlers.BlockPlaceHandler;
import me.mrCookieSlime.Slimefun.Objects.handlers.BowShootHandler;
import me.mrCookieSlime.Slimefun.Objects.handlers.ItemUseHandler;
import me.mrCookieSlime.Slimefun.Objects.handlers.MultiBlockInteractionHandler;
import me.mrCookieSlime.Slimefun.Objects.tasks.RainbowTicker;
@ -1397,40 +1394,13 @@ public final class SlimefunSetup {
new ItemStack[] {null, SlimefunItems.ENDER_LUMP_3, SlimefunItems.MAGIC_EYE_OF_ENDER, SlimefunItems.ENDER_LUMP_3, SlimefunItems.MAGICAL_BOOK_COVER, SlimefunItems.ENDER_LUMP_3, SlimefunItems.MAGIC_EYE_OF_ENDER, SlimefunItems.ENDER_LUMP_3, null})
.register(true);
new SlimefunBow((SlimefunItemStack) SlimefunItems.EXPLOSIVE_BOW,
new ExplosiveBow((SlimefunItemStack) SlimefunItems.EXPLOSIVE_BOW,
new ItemStack[] {null, new ItemStack(Material.STICK), new ItemStack(Material.GUNPOWDER), SlimefunItems.STAFF_FIRE, null, SlimefunItems.SULFATE, null, new ItemStack(Material.STICK), new ItemStack(Material.GUNPOWDER)})
.register(true, new BowShootHandler() {
.register(true);
@Override
public boolean onHit(EntityDamageByEntityEvent e, LivingEntity n) {
if (SlimefunManager.isItemSimilar(SlimefunPlugin.getUtilities().arrows.get(e.getDamager().getUniqueId()), SlimefunItems.EXPLOSIVE_BOW, true)) {
Vector vector = n.getVelocity();
vector.setY(0.6);
n.setVelocity(vector);
n.getWorld().createExplosion(n.getLocation(), 0F);
n.getWorld().playSound(n.getLocation(), Sound.ENTITY_GENERIC_EXPLODE, 1F, 1F);
return true;
}
else return false;
}
});
new SlimefunBow((SlimefunItemStack) SlimefunItems.ICY_BOW,
new IcyBow((SlimefunItemStack) SlimefunItems.ICY_BOW,
new ItemStack[] {null, new ItemStack(Material.STICK), new ItemStack(Material.ICE), SlimefunItems.STAFF_WATER, null, new ItemStack(Material.PACKED_ICE), null, new ItemStack(Material.STICK), new ItemStack(Material.ICE)})
.register(true, new BowShootHandler() {
@Override
public boolean onHit(EntityDamageByEntityEvent e, LivingEntity n) {
if (SlimefunManager.isItemSimilar(SlimefunPlugin.getUtilities().arrows.get(e.getDamager().getUniqueId()), SlimefunItems.ICY_BOW, true)) {
n.getWorld().playEffect(n.getLocation(), Effect.STEP_SOUND, Material.ICE);
n.getWorld().playEffect(n.getEyeLocation(), Effect.STEP_SOUND, Material.ICE);
n.addPotionEffect(new PotionEffect(PotionEffectType.SLOW, 20 * 2, 10));
n.addPotionEffect(new PotionEffect(PotionEffectType.JUMP, 20 * 2, -10));
return true;
}
else return false;
}
});
.register(true);
new KnowledgeTome(Categories.MAGIC, (SlimefunItemStack) SlimefunItems.TOME_OF_KNOWLEDGE_SHARING, RecipeType.MAGIC_WORKBENCH,
new ItemStack[] {null, new ItemStack(Material.FEATHER), null, new ItemStack(Material.INK_SAC), SlimefunItems.MAGICAL_BOOK_COVER, new ItemStack(Material.GLASS_BOTTLE), null, new ItemStack(Material.WRITABLE_BOOK), null})

View File

@ -111,46 +111,15 @@ public final class SlimefunPlugin extends JavaPlugin {
private AncientAltarListener ancientAltarListener;
private BackpackListener backpackListener;
private SlimefunBowListener bowListener;
@Override
public void onEnable() {
if (getServer().getPluginManager().isPluginEnabled("CS-CoreLib")) {
String currentVersion = ReflectionUtils.getVersion();
if (currentVersion.startsWith("v")) {
boolean compatibleVersion = false;
StringBuilder versions = new StringBuilder();
int i = 0;
for (String version : supported) {
if (currentVersion.startsWith(version)) {
compatibleVersion = true;
}
String s = version.substring(1).replaceFirst("_", ".").replace("_", ".X");
if (i == 0) versions.append(s);
else if (i == supported.length - 1) versions.append(" or ").append(s);
else versions.append(", ").append(s);
i++;
}
// Looks like you are using an unsupported Minecraft Version
if (!compatibleVersion) {
getLogger().log(Level.SEVERE, "### Slimefun was not installed correctly!");
getLogger().log(Level.SEVERE, "###");
getLogger().log(Level.SEVERE, "### You are using the wrong Version of Minecraft!");
getLogger().log(Level.SEVERE, "###");
getLogger().log(Level.SEVERE, "### You are using Minecraft " + ReflectionUtils.getVersion());
getLogger().log(Level.SEVERE, "### but Slimefun v" + getDescription().getVersion() + " requires you to be using");
getLogger().log(Level.SEVERE, "### Minecraft {0}", versions);
getLogger().log(Level.SEVERE, "###");
getLogger().log(Level.SEVERE, "### Please use an older Version of Slimefun and disable auto-updating");
getLogger().log(Level.SEVERE, "### or consider updating your Server Software.");
getServer().getPluginManager().disablePlugin(this);
return;
}
if (isVersionUnsupported()) {
getServer().getPluginManager().disablePlugin(this);
return;
}
instance = this;
@ -197,7 +166,7 @@ public final class SlimefunPlugin extends JavaPlugin {
try {
SlimefunSetup.setupItems();
} catch (Exception x) {
getLogger().log(Level.SEVERE, "An Error occured while initializing SlimefunItems for Slimefun " + Slimefun.getVersion(), x);
getLogger().log(Level.SEVERE, "An Error occured while initializing SlimefunItems for Slimefun " + getVersion(), x);
}
getLogger().log(Level.INFO, "Loading Researches...");
@ -229,7 +198,6 @@ public final class SlimefunPlugin extends JavaPlugin {
new GearListener(this);
new AutonomousToolsListener(this);
new DamageListener(this);
new SlimefunBowListener(this);
new BlockListener(this);
new EnhancedFurnaceListener(this);
new TeleporterListener(this);
@ -241,6 +209,7 @@ public final class SlimefunPlugin extends JavaPlugin {
new DebugFishListener(this);
new VanillaMachinesListener(this);
bowListener = new SlimefunBowListener(this);
ancientAltarListener = new AncientAltarListener();
// Toggleable Listeners for performance
@ -299,7 +268,7 @@ public final class SlimefunPlugin extends JavaPlugin {
ticker.run();
}
catch(Exception x) {
getLogger().log(Level.SEVERE, "An Exception was caught while ticking the Block Tickers Task for Slimefun v" + Slimefun.getVersion(), x);
getLogger().log(Level.SEVERE, "An Exception was caught while ticking the Block Tickers Task for Slimefun v" + getVersion(), x);
ticker.abortTick();
}
}, 100L, config.getInt("URID.custom-ticker-delay"));
@ -331,6 +300,46 @@ public final class SlimefunPlugin extends JavaPlugin {
}
}
private boolean isVersionUnsupported() {
String currentVersion = ReflectionUtils.getVersion();
if (currentVersion.startsWith("v")) {
boolean compatibleVersion = false;
StringBuilder versions = new StringBuilder();
int i = 0;
for (String version : supported) {
if (currentVersion.startsWith(version)) {
compatibleVersion = true;
}
String s = version.substring(1).replaceFirst("_", ".").replace("_", ".X");
if (i == 0) versions.append(s);
else if (i == supported.length - 1) versions.append(" or ").append(s);
else versions.append(", ").append(s);
i++;
}
// Looks like you are using an unsupported Minecraft Version
if (!compatibleVersion) {
getLogger().log(Level.SEVERE, "### Slimefun was not installed correctly!");
getLogger().log(Level.SEVERE, "###");
getLogger().log(Level.SEVERE, "### You are using the wrong Version of Minecraft!");
getLogger().log(Level.SEVERE, "###");
getLogger().log(Level.SEVERE, "### You are using Minecraft " + ReflectionUtils.getVersion());
getLogger().log(Level.SEVERE, "### but Slimefun v" + getDescription().getVersion() + " requires you to be using");
getLogger().log(Level.SEVERE, "### Minecraft {0}", versions);
getLogger().log(Level.SEVERE, "###");
getLogger().log(Level.SEVERE, "### Please use an older Version of Slimefun and disable auto-updating");
getLogger().log(Level.SEVERE, "### or consider updating your Server Software.");
return true;
}
}
return false;
}
@Override
public void onDisable() {
// CS-CoreLib wasn't loaded, just disabling
@ -359,7 +368,7 @@ public final class SlimefunPlugin extends JavaPlugin {
getLogger().log(Level.SEVERE, "Could not save Slimefun Blocks for World \"" + world.getName() + "\"");
}
} catch (Exception x) {
getLogger().log(Level.SEVERE, "An Error occured while saving Slimefun-Blocks in World '" + world.getName() + "' for Slimefun " + Slimefun.getVersion(), x);
getLogger().log(Level.SEVERE, "An Error occured while saving Slimefun-Blocks in World '" + world.getName() + "' for Slimefun " + getVersion(), x);
}
}
@ -475,4 +484,8 @@ public final class SlimefunPlugin extends JavaPlugin {
return instance.backpackListener;
}
public static SlimefunBowListener getBowListener() {
return instance.bowListener;
}
}

View File

@ -487,9 +487,10 @@ public class BlockStorage {
if (destroy) {
if (storage.hasInventory(l)) storage.clearInventory(l);
if (storage.hasUniversalInventory(l)) {
storage.getUniversalInventory(l).close();
storage.getUniversalInventory(l).save();
UniversalBlockMenu universalInventory = getUniversalInventory(l);
if (universalInventory != null) {
universalInventory.close();
universalInventory.save();
}
String chunkString = locationToChunkString(l);
@ -660,7 +661,7 @@ public class BlockStorage {
if (menu != null) {
for (HumanEntity human : new ArrayList<>(menu.toInventory().getViewers())) {
// Prevents "java.lang.IllegalStateException: Asynchronous entity add!" when closing inventory while holding an item
Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunPlugin.instance, human::closeInventory);
Slimefun.runSync(human::closeInventory);
}
inventories.get(l).delete(l);

View File

@ -15,6 +15,8 @@ import java.util.logging.Level;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
import me.mrCookieSlime.Slimefun.SlimefunPlugin;
public final class SlimefunBackup {
private SlimefunBackup() {}
@ -118,7 +120,7 @@ public final class SlimefunBackup {
Slimefun.getLogger().log(Level.WARNING, "Could not create backup-file: " + file.getName());
}
} catch(IOException x) {
Slimefun.getLogger().log(Level.SEVERE, "An Error occured while creating a World-Backup for Slimefun " + Slimefun.getVersion(), x);
Slimefun.getLogger().log(Level.SEVERE, "An Error occured while creating a World-Backup for Slimefun " + SlimefunPlugin.getVersion(), x);
}
}
}

View File

@ -24,9 +24,9 @@ import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import io.github.thebusybiscuit.cscorelib2.chat.ChatColors;
import io.github.thebusybiscuit.cscorelib2.chat.json.ChatComponent;
import io.github.thebusybiscuit.cscorelib2.chat.json.HoverEvent;
import io.github.thebusybiscuit.slimefun4.api.ErrorReport;
import me.mrCookieSlime.CSCoreLibPlugin.general.Chat.TellRawMessage;
import me.mrCookieSlime.CSCoreLibPlugin.general.Chat.TellRawMessage.HoverAction;
import me.mrCookieSlime.Slimefun.SlimefunPlugin;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
import me.mrCookieSlime.Slimefun.Objects.handlers.BlockTicker;
@ -215,29 +215,31 @@ public class TickerTask implements Runnable {
.collect(Collectors.toList());
if (sender instanceof Player) {
TellRawMessage tellraw = new TellRawMessage();
tellraw.addText(" &7&oHover for more Info");
StringBuilder hover = new StringBuilder();
ChatComponent component = new ChatComponent(ChatColors.color(" &7&oHover for more Info"));
StringBuilder builder = new StringBuilder();
int hidden = 0;
for (Map.Entry<String, Long> entry : timings) {
int count = machineCount.get(entry.getKey());
if (entry.getValue() > 500_000)
hover.append("\n&c").append(entry.getKey()).append(" - ")
.append(count).append("x &7(").append(toMillis(entry.getValue())).append(", ")
.append(toMillis(entry.getValue() / count)).append(" avg/machine)");
else
hidden++;
if (entry.getValue() > 500_000) {
builder.append("\n&c")
.append(entry.getKey())
.append(" - ")
.append(count)
.append("x &7(")
.append(toMillis(entry.getValue()))
.append(", ")
.append(toMillis(entry.getValue() / count))
.append(" avg/machine)");
}
else hidden++;
}
hover.append("\n\n&c+ &4").append(hidden).append(" Hidden");
tellraw.addHoverEvent(HoverAction.SHOW_TEXT, hover.toString());
builder.append("\n\n&c+ &4").append(hidden).append(" Hidden");
component.setHoverEvent(new HoverEvent(builder.toString()));
try {
tellraw.send((Player) sender);
} catch (Exception x) {
Slimefun.getLogger().log(Level.SEVERE, "An Error occurred while sending a Timings Summary for Slimefun " + Slimefun.getVersion(), x);
}
component.sendMessage((Player) sender);
}
else {
int hidden = 0;
@ -261,33 +263,33 @@ public class TickerTask implements Runnable {
.collect(Collectors.toList());
if (sender instanceof Player) {
TellRawMessage tellraw = new TellRawMessage();
tellraw.addText(" &7&oHover for more Info");
StringBuilder hover = new StringBuilder();
ChatComponent component = new ChatComponent(ChatColors.color(" &7&oHover for more Info"));
StringBuilder builder = new StringBuilder();
int hidden = 0;
for (Map.Entry<String, Long> entry : timings) {
if (!chunksSkipped.contains(entry.getKey())) {
if (entry.getValue() > 0)
hover.append("\n&c").append(formatChunk(entry.getKey())).append(" - ")
.append(chunkItemCount.getOrDefault(entry.getKey(), 0))
.append("x &7(").append(toMillis(entry.getValue())).append(")");
else
hidden++;
if (entry.getValue() > 0) {
builder.append("\n&c")
.append(formatChunk(entry.getKey()))
.append(" - ")
.append(chunkItemCount.getOrDefault(entry.getKey(), 0))
.append("x &7(")
.append(toMillis(entry.getValue()))
.append(")");
}
else hidden++;
}
}
hover.append("\n\n&c+ &4").append(hidden).append(" Hidden");
tellraw.addHoverEvent(HoverAction.SHOW_TEXT, hover.toString());
builder.append("\n\n&c+ &4").append(hidden).append(" Hidden");
component.setHoverEvent(new HoverEvent(builder.toString()));
try {
tellraw.send((Player) sender);
} catch (Exception x) {
Slimefun.getLogger().log(Level.SEVERE, "An Error occurred while sending a Timings Summary for Slimefun " + Slimefun.getVersion(), x);
}
component.sendMessage((Player) sender);
}
else {
int hidden = 0;
for (Map.Entry<String, Long> entry : timings) {
if (!chunksSkipped.contains(entry.getKey())) {
if (entry.getValue() > 0) sender.sendMessage(" " + formatChunk(entry.getKey()) + " - "
@ -295,7 +297,8 @@ public class TickerTask implements Runnable {
else hidden++;
}
}
sender.sendMessage(ChatColor.translateAlternateColorCodes('&', "&c+ &4" + hidden + " Hidden"));
sender.sendMessage(ChatColors.color("&c+ &4" + hidden + " Hidden"));
}
}

View File

@ -61,6 +61,9 @@ public class CargoNet extends Network {
private final Set<Location> imports = new HashSet<>();
private final Set<Location> exports = new HashSet<>();
private final Map<Location, Integer> roundRobin = new HashMap<>();
private final Set<ItemRequest> itemRequests = new HashSet<>();
public static CargoNet getNetworkFromLocation(Location l) {
return SlimefunPlugin.getNetworkManager().getNetworkFromLocation(l, CargoNet.class);
}
@ -219,7 +222,7 @@ public class CargoNet extends Network {
}
if (menu.getItemInSlot(17) != null) {
SlimefunPlugin.getUtilities().itemRequests.add(new ItemRequest(bus, 17, menu.getItemInSlot(17), ItemTransportFlow.INSERT));
itemRequests.add(new ItemRequest(bus, 17, menu.getItemInSlot(17), ItemTransportFlow.INSERT));
}
}
@ -246,7 +249,7 @@ public class CargoNet extends Network {
if (index > (items.size() - 1)) index = 0;
BlockStorage.addBlockInfo(bus, "index", String.valueOf(index));
SlimefunPlugin.getUtilities().itemRequests.add(new ItemRequest(bus, 17, items.get(index), ItemTransportFlow.WITHDRAW));
itemRequests.add(new ItemRequest(bus, 17, items.get(index), ItemTransportFlow.WITHDRAW));
}
}
}
@ -256,11 +259,11 @@ public class CargoNet extends Network {
ItemStack sendingItem = menu.getItemInSlot(TERMINAL_OUT_SLOT);
if (sendingItem != null) {
SlimefunPlugin.getUtilities().itemRequests.add(new ItemRequest(terminal, TERMINAL_OUT_SLOT, sendingItem, ItemTransportFlow.INSERT));
itemRequests.add(new ItemRequest(terminal, TERMINAL_OUT_SLOT, sendingItem, ItemTransportFlow.INSERT));
}
}
Iterator<ItemRequest> iterator = SlimefunPlugin.getUtilities().itemRequests.iterator();
Iterator<ItemRequest> iterator = itemRequests.iterator();
while (iterator.hasNext()) {
ItemRequest request = iterator.next();
@ -367,7 +370,7 @@ public class CargoNet extends Network {
List<Location> outputlist = new ArrayList<>(outputs);
if (roundrobin) {
int cIndex = SlimefunPlugin.getUtilities().roundRobin.getOrDefault(input, 0);
int cIndex = roundRobin.getOrDefault(input, 0);
if (cIndex < outputlist.size()) {
for (int i = 0; i < cIndex; i++) {
@ -379,7 +382,7 @@ public class CargoNet extends Network {
}
else cIndex = 1;
SlimefunPlugin.getUtilities().roundRobin.put(input, cIndex);
roundRobin.put(input, cIndex);
}
for (Location out : outputlist) {
@ -418,7 +421,7 @@ public class CargoNet extends Network {
UniversalBlockMenu menu = BlockStorage.getUniversalInventory(target);
if (menu != null) {
for (int slot : menu.getPreset().getSlotsAccessedByItemTransport(menu, ItemTransportFlow.WITHDRAW, null)) {
for (int slot : menu.getPreset().getSlotsAccessedByItemTransport((DirtyChestMenu) menu, ItemTransportFlow.WITHDRAW, null)) {
ItemStack is = menu.getItemInSlot(slot);
filter(is, items, l);
}
@ -502,7 +505,7 @@ public class CargoNet extends Network {
menu.replaceExistingItem(slot, stack);
menu.addMenuClickHandler(slot, (p, sl, is, action) -> {
int amount = item.getAmount() > item.getItem().getMaxStackSize() ? item.getItem().getMaxStackSize() : item.getAmount();
SlimefunPlugin.getUtilities().itemRequests.add(new ItemRequest(l, 44, new CustomItem(item.getItem(), action.isRightClicked() ? amount : 1), ItemTransportFlow.WITHDRAW));
itemRequests.add(new ItemRequest(l, 44, new CustomItem(item.getItem(), action.isRightClicked() ? amount : 1), ItemTransportFlow.WITHDRAW));
return false;
});
@ -537,7 +540,7 @@ public class CargoNet extends Network {
return freq;
}
private void handleWithdraw(BlockMenu menu, List<StoredItem> items, Location l) {
private void handleWithdraw(DirtyChestMenu menu, List<StoredItem> items, Location l) {
for (int slot : menu.getPreset().getSlotsAccessedByItemTransport(menu, ItemTransportFlow.WITHDRAW, null)) {
filter(menu.getItemInSlot(slot), items, l);
}

View File

@ -27,7 +27,6 @@ import me.mrCookieSlime.Slimefun.Objects.SlimefunBlockHandler;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
import me.mrCookieSlime.Slimefun.Objects.handlers.ItemHandler;
import me.mrCookieSlime.Slimefun.Setup.PostSlimefunLoadingHandler;
import me.mrCookieSlime.Slimefun.ancient_altar.AltarRecipe;
import me.mrCookieSlime.Slimefun.api.BlockInfoConfig;
import me.mrCookieSlime.Slimefun.api.BlockStorage;
import me.mrCookieSlime.Slimefun.api.GuideHandler;
@ -35,7 +34,6 @@ import me.mrCookieSlime.Slimefun.api.PlayerProfile;
import me.mrCookieSlime.Slimefun.api.inventory.BlockMenuPreset;
import me.mrCookieSlime.Slimefun.api.inventory.UniversalBlockMenu;
import me.mrCookieSlime.Slimefun.api.item_transport.CargoTransportEvent;
import me.mrCookieSlime.Slimefun.api.item_transport.ItemRequest;
/**
* Really dirty way to store stuff, but you can dump
@ -79,9 +77,6 @@ public final class Utilities {
public final Set<String> energyNetStorage = new HashSet<>();
public final Set<String> energyNetOutput = new HashSet<>();
public final Map<Location, Integer> roundRobin = new HashMap<>();
public final Set<ItemRequest> itemRequests = new HashSet<>();
public final Map<String, BlockMenuPreset> blockMenuPresets = new HashMap<>();
public final Map<String, ItemStack> automatedCraftingChamberRecipes = new HashMap<>();
@ -100,7 +95,6 @@ public final class Utilities {
public final Map<EntityType, List<ItemStack>> drops = new EnumMap<>(EntityType.class);
public final Map<UUID, ItemStack> arrows = new HashMap<>();
public final Map<UUID, Boolean> jumpState = new HashMap<>();
public final Set<UUID> damage = new HashSet<>();
public final Map<UUID, Entity[]> remove = new HashMap<>();