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:
parent
b94e197f06
commit
6dc0907728
@ -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();
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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());
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
|
@ -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();
|
||||
|
||||
}
|
||||
|
@ -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);
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
@ -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();
|
||||
|
@ -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));
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
@ -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;
|
||||
}
|
||||
});
|
||||
|
@ -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() {
|
||||
|
@ -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})
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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"));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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<>();
|
||||
|
Loading…
Reference in New Issue
Block a user