1
mirror of https://github.com/StarWishsama/Slimefun4.git synced 2024-09-19 19:25:48 +00:00

Several changes, won't list em all

This commit is contained in:
TheBusyBiscuit 2019-12-29 14:14:51 +01:00
parent b8d420545c
commit e2d58f7f50
31 changed files with 351 additions and 272 deletions

View File

@ -52,6 +52,7 @@ https://thebusybiscuit.github.io/builds/TheBusyBiscuit/Slimefun4/stable/#4
* More performance improvements
* Improved Cargo performance
* Removed Nether Drill
* Tweaked Enhanced Furnace Recipes
### Fixes
* Fixed Research Titles
@ -78,6 +79,7 @@ https://thebusybiscuit.github.io/builds/TheBusyBiscuit/Slimefun4/stable/#4
* Fixed #1298
* Fixed #1325
* Fixed #1295
* Fixed MultiBlocks not accepting different fence types
## Release Candidate 3 (21 Nov 2019)
https://thebusybiscuit.github.io/builds/TheBusyBiscuit/Slimefun4/stable/#3

View File

@ -1,11 +1,10 @@
package me.mrCookieSlime.Slimefun.listeners;
package io.github.thebusybiscuit.slimefun4.implementation.listeners;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.concurrent.ThreadLocalRandom;
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.entity.Entity;
import org.bukkit.entity.EntityType;
@ -19,6 +18,7 @@ import org.bukkit.inventory.ItemStack;
import me.mrCookieSlime.Slimefun.SlimefunPlugin;
import me.mrCookieSlime.Slimefun.androids.AndroidEntity;
import me.mrCookieSlime.Slimefun.api.Slimefun;
public class AndroidKillingListener implements Listener {
@ -27,11 +27,11 @@ public class AndroidKillingListener implements Listener {
}
@EventHandler(priority = EventPriority.HIGHEST)
public void onDeath(final EntityDeathEvent e) {
public void onDeath(EntityDeathEvent e) {
if (e.getEntity().hasMetadata("android_killer")) {
final AndroidEntity obj = (AndroidEntity) e.getEntity().getMetadata("android_killer").get(0).value();
AndroidEntity obj = (AndroidEntity) e.getEntity().getMetadata("android_killer").get(0).value();
Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunPlugin.instance, () -> {
Slimefun.runSync(() -> {
List<ItemStack> items = new ArrayList<>();
for (Entity n : e.getEntity().getNearbyEntities(0.5D, 0.5D, 0.5D)) {
@ -41,28 +41,32 @@ public class AndroidKillingListener implements Listener {
}
}
Random random = ThreadLocalRandom.current();
switch (e.getEntityType()) {
case BLAZE:
items.add(new ItemStack(Material.BLAZE_ROD, 1 + random.nextInt(2)));
break;
case PIG_ZOMBIE:
items.add(new ItemStack(Material.GOLD_NUGGET, 1 + random.nextInt(3)));
break;
case WITHER_SKELETON:
if (random.nextInt(250) < 2) {
items.add(new ItemStack(Material.WITHER_SKELETON_SKULL));
}
break;
default:
break;
}
addExtraDrops(items, e.getEntityType());
obj.getAndroid().addItems(obj.getBlock(), items.toArray(new ItemStack[0]));
ExperienceOrb exp = (ExperienceOrb) e.getEntity().getWorld().spawnEntity(e.getEntity().getLocation(), EntityType.EXPERIENCE_ORB);
exp.setExperience(1 + random.nextInt(6));
exp.setExperience(1 + ThreadLocalRandom.current().nextInt(6));
}, 1L);
}
}
private void addExtraDrops(List<ItemStack> items, EntityType entityType) {
Random random = ThreadLocalRandom.current();
switch (entityType) {
case BLAZE:
items.add(new ItemStack(Material.BLAZE_ROD, 1 + random.nextInt(2)));
break;
case PIG_ZOMBIE:
items.add(new ItemStack(Material.GOLD_NUGGET, 1 + random.nextInt(3)));
break;
case WITHER_SKELETON:
if (random.nextInt(250) < 2) {
items.add(new ItemStack(Material.WITHER_SKELETON_SKULL));
}
break;
default:
break;
}
}
}

View File

@ -1,4 +1,4 @@
package me.mrCookieSlime.Slimefun.listeners;
package io.github.thebusybiscuit.slimefun4.implementation.listeners;
import org.bukkit.Material;
import org.bukkit.block.Block;
@ -12,7 +12,6 @@ import org.bukkit.event.block.BlockDispenseEvent;
import me.mrCookieSlime.Slimefun.SlimefunPlugin;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
import me.mrCookieSlime.Slimefun.Objects.handlers.AutonomousMachineHandler;
import me.mrCookieSlime.Slimefun.Objects.handlers.ItemHandler;
import me.mrCookieSlime.Slimefun.api.BlockStorage;
public class AutonomousToolsListener implements Listener {
@ -22,21 +21,19 @@ public class AutonomousToolsListener implements Listener {
}
@EventHandler
public void onBlockDispensing(final BlockDispenseEvent e) {
public void onBlockDispensing(BlockDispenseEvent e) {
Block dispenser = e.getBlock();
if (dispenser.getType() == Material.DISPENSER) {
final Dispenser d = (Dispenser) dispenser.getState();
Dispenser d = (Dispenser) dispenser.getState();
BlockFace face = ((Directional)dispenser.getBlockData()).getFacing();
BlockFace face = ((Directional) dispenser.getBlockData()).getFacing();
Block block = dispenser.getRelative(face);
Block chest = dispenser.getRelative(face.getOppositeFace());
SlimefunItem machine = BlockStorage.check(dispenser);
if (machine != null) {
for (ItemHandler handler : SlimefunItem.getHandlers("AutonomousMachineHandler")) {
if (((AutonomousMachineHandler) handler).onBlockDispense(e, dispenser, d, block, chest, machine)) break;
}
machine.callItemHandler(AutonomousMachineHandler.class, handler -> handler.onBlockDispense(e, dispenser, d, block, chest, machine));
}
}
}

View File

@ -1,4 +1,4 @@
package me.mrCookieSlime.Slimefun.listeners;
package io.github.thebusybiscuit.slimefun4.implementation.listeners;
import java.util.List;
@ -89,6 +89,7 @@ public class BackpackListener implements Listener {
private static void openBackpack(ItemStack item, PlayerProfile profile, int size) {
Player p = profile.getPlayer();
for (int line = 0; line < item.getItemMeta().getLore().size(); line++) {
if (item.getItemMeta().getLore().get(line).equals(ChatColor.translateAlternateColorCodes('&', "&7ID: <ID>"))) {
BackpackInventory backpack = profile.createBackpack(size);

View File

@ -0,0 +1,55 @@
package io.github.thebusybiscuit.slimefun4.implementation.listeners;
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.entity.FallingBlock;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.BlockPistonExtendEvent;
import org.bukkit.event.block.BlockPistonRetractEvent;
import org.bukkit.event.entity.EntityChangeBlockEvent;
import org.bukkit.inventory.ItemStack;
import me.mrCookieSlime.Slimefun.SlimefunPlugin;
import me.mrCookieSlime.Slimefun.api.BlockStorage;
public class BlockListener implements Listener {
public BlockListener(SlimefunPlugin plugin) {
plugin.getServer().getPluginManager().registerEvents(this, plugin);
}
@EventHandler
public void onBlockFall(EntityChangeBlockEvent event) {
if (event.getEntity() instanceof FallingBlock && BlockStorage.hasBlockInfo(event.getBlock())) {
event.setCancelled(true);
FallingBlock fb = (FallingBlock) event.getEntity();
if (fb.getDropItem()) {
fb.getWorld().dropItemNaturally(fb.getLocation(), new ItemStack(fb.getBlockData().getMaterial(), 1));
}
}
}
@EventHandler
public void onPistonExtend(BlockPistonExtendEvent e) {
for (Block b : e.getBlocks()) {
if (BlockStorage.hasBlockInfo(b) || b.getRelative(e.getDirection()).getType() == Material.AIR && BlockStorage.hasBlockInfo(b.getRelative(e.getDirection()))) {
e.setCancelled(true);
return;
}
}
}
@EventHandler
public void onPistonRetract(BlockPistonRetractEvent e) {
if (e.isSticky()) {
for (Block b : e.getBlocks()) {
if (BlockStorage.hasBlockInfo(b) || b.getRelative(e.getDirection()).getType() == Material.AIR && BlockStorage.hasBlockInfo(b.getRelative(e.getDirection()))) {
e.setCancelled(true);
return;
}
}
}
}
}

View File

@ -1,4 +1,4 @@
package me.mrCookieSlime.Slimefun.listeners;
package io.github.thebusybiscuit.slimefun4.implementation.listeners;
import org.bukkit.Material;
import org.bukkit.Sound;

View File

@ -1,4 +1,4 @@
package me.mrCookieSlime.Slimefun.listeners;
package io.github.thebusybiscuit.slimefun4.implementation.listeners;
import java.util.Optional;
@ -17,9 +17,9 @@ import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.EnhancedFurnace;
import me.mrCookieSlime.Slimefun.api.BlockStorage;
public class FurnaceListener implements Listener {
public class EnhancedFurnaceListener implements Listener {
public FurnaceListener(SlimefunPlugin plugin) {
public EnhancedFurnaceListener(SlimefunPlugin plugin) {
plugin.getServer().getPluginManager().registerEvents(this, plugin);
}

View File

@ -1,4 +1,4 @@
package me.mrCookieSlime.Slimefun.listeners;
package io.github.thebusybiscuit.slimefun4.implementation.listeners;
import me.mrCookieSlime.Slimefun.SlimefunPlugin;
import me.mrCookieSlime.Slimefun.Lists.SlimefunItems;
@ -27,9 +27,9 @@ public class GearListener implements Listener {
@EventHandler
public void onToggleSneak(PlayerToggleSneakEvent e) {
if (e.isSneaking()) {
final Player p = e.getPlayer();
final SlimefunItem chestplate = SlimefunItem.getByItem(p.getInventory().getChestplate());
final SlimefunItem boots = SlimefunItem.getByItem(p.getInventory().getBoots());
Player p = e.getPlayer();
SlimefunItem chestplate = SlimefunItem.getByItem(p.getInventory().getChestplate());
SlimefunItem boots = SlimefunItem.getByItem(p.getInventory().getBoots());
if (chestplate != null) {
if (chestplate instanceof Jetpack) {

View File

@ -1,4 +1,4 @@
package me.mrCookieSlime.Slimefun.listeners;
package io.github.thebusybiscuit.slimefun4.implementation.listeners;
import me.mrCookieSlime.Slimefun.SlimefunPlugin;

View File

@ -0,0 +1,97 @@
package io.github.thebusybiscuit.slimefun4.implementation.listeners;
import java.util.LinkedList;
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.Tag;
import org.bukkit.block.Block;
import org.bukkit.block.BlockFace;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.Action;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.inventory.EquipmentSlot;
import io.github.thebusybiscuit.slimefun4.api.events.MultiBlockInteractEvent;
import me.mrCookieSlime.Slimefun.SlimefunPlugin;
import me.mrCookieSlime.Slimefun.Objects.MultiBlock;
import me.mrCookieSlime.Slimefun.Objects.handlers.MultiBlockInteractionHandler;
public class MultiBlockListener implements Listener {
public MultiBlockListener(SlimefunPlugin plugin) {
plugin.getServer().getPluginManager().registerEvents(this, plugin);
}
@EventHandler
public void onRightClick(PlayerInteractEvent e) {
if (e.getAction() != Action.RIGHT_CLICK_BLOCK || e.getHand() != EquipmentSlot.HAND) return;
Player p = e.getPlayer();
Block b = e.getClickedBlock();
LinkedList<MultiBlock> multiblocks = new LinkedList<>();
for (MultiBlock mb : MultiBlock.list()) {
Block center = b.getRelative(mb.getTriggerBlock());
if (compareMaterials(center, mb.getBuild(), mb.isSymmetric())) {
multiblocks.add(mb);
}
}
if (!multiblocks.isEmpty()) {
e.setCancelled(true);
MultiBlock mb = multiblocks.getLast();
mb.getSlimefunItem().callItemHandler(MultiBlockInteractionHandler.class, handler -> handler.onInteract(p, mb, b));
Bukkit.getPluginManager().callEvent(new MultiBlockInteractEvent(p, mb, b));
}
}
protected boolean compareMaterials(Block b, Material[] blocks, boolean onlyTwoWay) {
if (!compareMaterialsVertical(b, blocks[1], blocks[4], blocks[7])) {
return false;
}
BlockFace[] directions = onlyTwoWay ? new BlockFace[] {BlockFace.NORTH, BlockFace.EAST} : new BlockFace[] {BlockFace.NORTH, BlockFace.EAST, BlockFace.SOUTH, BlockFace.WEST};
for (BlockFace direction : directions) {
if (compareMaterialsVertical(b.getRelative(direction), blocks[0], blocks[3], blocks[6])
&& compareMaterialsVertical(b.getRelative(direction.getOppositeFace()), blocks[2], blocks[5], blocks[8])) {
return true;
}
}
return false;
}
protected boolean compareMaterialsVertical(Block b, Material top, Material center, Material bottom) {
if (center != null && !equals(b.getType(), center)) {
return false;
}
if (top != null && !equals(b.getRelative(BlockFace.UP).getType(), top)) {
return false;
}
if (bottom != null && !equals(b.getRelative(BlockFace.DOWN).getType(), bottom)) {
return false;
}
return true;
}
private boolean equals(Material a, Material b) {
if (a == b) return true;
for (Tag<Material> tag : MultiBlock.SUPPORTED_TAGS) {
if (tag.isTagged(a) && tag.isTagged(b)) {
return true;
}
}
return false;
}
}

View File

@ -1,4 +1,4 @@
package me.mrCookieSlime.Slimefun.listeners;
package io.github.thebusybiscuit.slimefun4.implementation.listeners;
import me.mrCookieSlime.Slimefun.SlimefunPlugin;
import me.mrCookieSlime.Slimefun.api.network.Network;
@ -19,6 +19,7 @@ public class NetworkListener implements Listener {
public void onBlockBreak(BlockBreakEvent e) {
Network.handleAllNetworkLocationUpdate(e.getBlock().getLocation());
}
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
public void onPlaceBreak(BlockPlaceEvent e) {
Network.handleAllNetworkLocationUpdate(e.getBlock().getLocation());

View File

@ -1,4 +1,4 @@
package me.mrCookieSlime.Slimefun.listeners;
package io.github.thebusybiscuit.slimefun4.implementation.listeners;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
@ -7,9 +7,9 @@ import org.bukkit.event.player.PlayerQuitEvent;
import me.mrCookieSlime.Slimefun.SlimefunPlugin;
import me.mrCookieSlime.Slimefun.api.PlayerProfile;
public class PlayerQuitListener implements Listener {
public class PlayerProfileListener implements Listener {
public PlayerQuitListener(SlimefunPlugin plugin) {
public PlayerProfileListener(SlimefunPlugin plugin) {
plugin.getServer().getPluginManager().registerEvents(this, plugin);
}

View File

@ -1,4 +1,4 @@
package me.mrCookieSlime.Slimefun.listeners;
package io.github.thebusybiscuit.slimefun4.implementation.listeners;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
@ -9,9 +9,9 @@ import io.github.thebusybiscuit.slimefun4.core.guide.SlimefunGuideLayout;
import me.mrCookieSlime.Slimefun.SlimefunGuide;
import me.mrCookieSlime.Slimefun.SlimefunPlugin;
public class GuideOnJoinListener implements Listener {
public class SlimefunGuideListener implements Listener {
public GuideOnJoinListener(SlimefunPlugin plugin) {
public SlimefunGuideListener(SlimefunPlugin plugin) {
plugin.getServer().getPluginManager().registerEvents(this, plugin);
}

View File

@ -0,0 +1,48 @@
package io.github.thebusybiscuit.slimefun4.implementation.listeners;
import java.util.Iterator;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.EntityDeathEvent;
import org.bukkit.event.player.PlayerRespawnEvent;
import org.bukkit.inventory.ItemStack;
import me.mrCookieSlime.Slimefun.SlimefunPlugin;
import me.mrCookieSlime.Slimefun.Setup.SlimefunManager;
import me.mrCookieSlime.Slimefun.api.Soul;
public class SoulboundListener implements Listener {
public SoulboundListener(SlimefunPlugin plugin) {
plugin.getServer().getPluginManager().registerEvents(this, plugin);
}
@EventHandler
public void onDamage(EntityDeathEvent e) {
if (e.getEntity() instanceof Player) {
Player p = (Player) e.getEntity();
for (int slot = 0; slot < p.getInventory().getSize(); slot++) {
ItemStack item = p.getInventory().getItem(slot);
if (SlimefunManager.isItemSoulbound(item)) {
Soul.storeItem(p.getUniqueId(), slot, item);
}
}
Iterator<ItemStack> drops = e.getDrops().iterator();
while (drops.hasNext()) {
ItemStack item = drops.next();
if (SlimefunManager.isItemSoulbound(item)) drops.remove();
}
}
}
@EventHandler
public void onRespawn(PlayerRespawnEvent e) {
Soul.retrieveItems(e.getPlayer());
}
}

View File

@ -1,4 +1,4 @@
package me.mrCookieSlime.Slimefun.listeners;
package io.github.thebusybiscuit.slimefun4.implementation.listeners;
import java.util.ArrayList;
import java.util.Collection;

View File

@ -1,4 +1,4 @@
package me.mrCookieSlime.Slimefun.listeners;
package io.github.thebusybiscuit.slimefun4.implementation.listeners;
import me.mrCookieSlime.Slimefun.SlimefunPlugin;
import me.mrCookieSlime.Slimefun.GPS.Elevator;

View File

@ -1,4 +1,4 @@
package me.mrCookieSlime.Slimefun.listeners;
package io.github.thebusybiscuit.slimefun4.implementation.listeners;
import java.util.logging.Level;

View File

@ -2,6 +2,7 @@ package me.mrCookieSlime.Slimefun.Objects;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;
import org.bukkit.Material;
import org.bukkit.Tag;
@ -9,7 +10,6 @@ import org.bukkit.block.BlockFace;
import me.mrCookieSlime.Slimefun.SlimefunPlugin;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunMachine;
public class MultiBlock {
@ -20,20 +20,25 @@ public class MultiBlock {
Tag.WOODEN_SLABS
);
private final SlimefunItem item;
private final Material[] blocks;
private final BlockFace trigger;
private final boolean isSymmetric;
public MultiBlock(Material[] build, BlockFace trigger) {
public MultiBlock(SlimefunItem item, Material[] build, BlockFace trigger) {
this.item = item;
this.blocks = build;
this.trigger = trigger;
this.isSymmetric = isSymmetric(build);
}
public SlimefunItem getSlimefunItem() {
return item;
}
private static boolean isSymmetric(Material[] blocks) {
return blocks[0] == blocks[2]
&& blocks[3] == blocks[5]
&& blocks[6] == blocks[8];
return blocks[0] == blocks[2] && blocks[3] == blocks[5] && blocks[6] == blocks[8];
}
public Material[] getBuild() {
@ -52,16 +57,11 @@ public class MultiBlock {
return SlimefunPlugin.getUtilities().allMultiblocks;
}
public boolean isMultiBlock(SlimefunItem machine) {
if (machine instanceof SlimefunMachine) {
return isMultiBlock(((SlimefunMachine) machine).toMultiBlock());
}
else return false;
}
public boolean isMultiBlock(MultiBlock mb) {
if (mb == null) return false;
@Override
public boolean equals(Object obj) {
if (!(obj instanceof MultiBlock)) return false;
MultiBlock mb = (MultiBlock) obj;
if (trigger == mb.getTriggerBlock()) {
for (int i = 0; i < mb.getBuild().length; i++) {
if (!compareBlocks(blocks[i], mb.getBuild()[i])) return false;
@ -72,6 +72,11 @@ public class MultiBlock {
return false;
}
@Override
public int hashCode() {
return Objects.hash(item.getID(), blocks, trigger, isSymmetric);
}
private boolean compareBlocks(Material a, Material b) {
if (b != null) {
@ -93,4 +98,9 @@ public class MultiBlock {
public boolean isSymmetric() {
return this.isSymmetric;
}
@Override
public String toString() {
return "MultiBlock (" + item.getID() + ") {" + Arrays.toString(blocks) + "}";
}
}

View File

@ -13,19 +13,28 @@ import me.mrCookieSlime.Slimefun.Lists.RecipeType;
import me.mrCookieSlime.Slimefun.Objects.Category;
import me.mrCookieSlime.Slimefun.Objects.MultiBlock;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces.RecipeDisplayItem;
import me.mrCookieSlime.Slimefun.api.SlimefunItemStack;
public class SlimefunMachine extends SlimefunItem implements RecipeDisplayItem {
protected final List<ItemStack[]> recipes;
protected final List<ItemStack> shownRecipes;
protected final BlockFace trigger;
protected final MultiBlock multiblock;
public SlimefunMachine(Category category, ItemStack item, String id, ItemStack[] recipe, ItemStack[] machineRecipes, BlockFace trigger) {
super(category, item, id, RecipeType.MULTIBLOCK, recipe);
this.recipes = new ArrayList<>();
this.shownRecipes = new ArrayList<>();
this.shownRecipes.addAll(Arrays.asList(machineRecipes));
this.trigger = trigger;
this.multiblock = new MultiBlock(this, convertItemStacksToMaterial(recipe), trigger);
}
public SlimefunMachine(Category category, SlimefunItemStack item, ItemStack[] recipe, ItemStack[] machineRecipes, BlockFace trigger) {
super(category, item, RecipeType.MULTIBLOCK, recipe);
this.recipes = new ArrayList<>();
this.shownRecipes = new ArrayList<>();
this.shownRecipes.addAll(Arrays.asList(machineRecipes));
this.multiblock = new MultiBlock(this, convertItemStacksToMaterial(recipe), trigger);
}
public SlimefunMachine(Category category, ItemStack item, String id, ItemStack[] recipe, ItemStack[] machineRecipes, BlockFace trigger, boolean ghost) {
@ -33,7 +42,7 @@ public class SlimefunMachine extends SlimefunItem implements RecipeDisplayItem {
this.recipes = new ArrayList<>();
this.shownRecipes = new ArrayList<>();
this.shownRecipes.addAll(Arrays.asList(machineRecipes));
this.trigger = trigger;
this.multiblock = new MultiBlock(this, convertItemStacksToMaterial(recipe), trigger);
}
public SlimefunMachine(Category category, ItemStack item, String id, ItemStack[] recipe, ItemStack[] machineRecipes, BlockFace trigger, String[] keys, Object[] values) {
@ -41,7 +50,7 @@ public class SlimefunMachine extends SlimefunItem implements RecipeDisplayItem {
this.recipes = new ArrayList<>();
this.shownRecipes = new ArrayList<>();
this.shownRecipes.addAll(Arrays.asList(machineRecipes));
this.trigger = trigger;
this.multiblock = new MultiBlock(this, convertItemStacksToMaterial(recipe), trigger);
}
public List<ItemStack[]> getRecipes() {
@ -62,7 +71,7 @@ public class SlimefunMachine extends SlimefunItem implements RecipeDisplayItem {
@Override
public void postRegister() {
this.toMultiBlock().register();
multiblock.register();
}
@Override
@ -86,12 +95,17 @@ public class SlimefunMachine extends SlimefunItem implements RecipeDisplayItem {
return mats.toArray(new Material[0]);
}
public MultiBlock toMultiBlock() {
return new MultiBlock(convertItemStacksToMaterial(this.getRecipe()), this.trigger);
@Override
protected boolean areItemHandlersPrivate() {
return true;
}
public Iterator<ItemStack[]> recipeIterator() {
return this.recipes.iterator();
}
public MultiBlock getMultiBlock() {
return multiblock;
}
}

View File

@ -16,6 +16,7 @@ import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import io.github.thebusybiscuit.cscorelib2.inventory.ItemUtils;
import io.github.thebusybiscuit.slimefun4.implementation.listeners.BackpackListener;
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem;
import me.mrCookieSlime.Slimefun.SlimefunPlugin;
import me.mrCookieSlime.Slimefun.Lists.Categories;
@ -26,7 +27,6 @@ import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
import me.mrCookieSlime.Slimefun.Setup.SlimefunManager;
import me.mrCookieSlime.Slimefun.api.PlayerProfile;
import me.mrCookieSlime.Slimefun.api.Slimefun;
import me.mrCookieSlime.Slimefun.listeners.BackpackListener;
public class EnhancedCraftingTable extends MultiBlockMachine {

View File

@ -3,7 +3,6 @@ package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.multiblocks;
import java.util.List;
import java.util.UUID;
import me.mrCookieSlime.Slimefun.listeners.BackpackListener;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Effect;
@ -17,6 +16,7 @@ import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import io.github.thebusybiscuit.slimefun4.implementation.listeners.BackpackListener;
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem;
import me.mrCookieSlime.Slimefun.SlimefunPlugin;
import me.mrCookieSlime.Slimefun.Lists.Categories;

View File

@ -41,7 +41,7 @@ public abstract class MultiBlockMachine extends SlimefunMachine {
protected MultiBlockInteractionHandler getInteractionHandler() {
return (p, mb, b) -> {
if (mb.isMultiBlock(this)) {
if (mb == getMultiBlock()) {
if (!isDisabled() && SlimefunPlugin.getProtectionManager().hasPermission(p, b.getLocation(), ProtectableAction.ACCESS_INVENTORIES) && Slimefun.hasUnlocked(p, this, true)) {
onInteract(p, b);
}

View File

@ -1041,8 +1041,8 @@ public final class SlimefunSetup {
.register(true, new MultiBlockInteractionHandler() {
@Override
public boolean onInteract(final Player p, MultiBlock mb, final Block b) {
if (mb.isMultiBlock(SlimefunItem.getByID("DIGITAL_MINER"))) {
public boolean onInteract(Player p, MultiBlock mb, Block b) {
if (mb.equals(((SlimefunMachine) SlimefunItem.getByID("DIGITAL_MINER")).getMultiBlock())) {
p.sendMessage(ChatColor.DARK_RED + "THIS MACHINE WILL SOON BE REMOVED!");
if (CSCoreLib.getLib().getProtectionManager().canAccessChest(p.getUniqueId(), b, true) && Slimefun.hasUnlocked(p, SlimefunItems.DIGITAL_MINER, true)) {
Block chestBlock = b.getRelative(BlockFace.UP);
@ -1103,7 +1103,7 @@ public final class SlimefunSetup {
@Override
public boolean onInteract(final Player p, MultiBlock mb, final Block b) {
if (mb.isMultiBlock(SlimefunItem.getByID("ADVANCED_DIGITAL_MINER"))) {
if (mb.equals(((SlimefunMachine) SlimefunItem.getByID("ADVANCED_DIGITAL_MINER")).getMultiBlock())) {
p.sendMessage(ChatColor.DARK_RED + "THIS MACHINE WILL SOON BE REMOVED!");
if (CSCoreLib.getLib().getProtectionManager().canAccessChest(p.getUniqueId(), b, true) && Slimefun.hasUnlocked(p, SlimefunItems.ADVANCED_DIGITAL_MINER, true)) {
Block chestBlock = b.getRelative(BlockFace.UP);
@ -1399,47 +1399,47 @@ public final class SlimefunSetup {
});
new EnhancedFurnace(1, 1, 1, (SlimefunItemStack) SlimefunItems.ENHANCED_FURNACE,
new ItemStack[] {null, SlimefunItems.BASIC_CIRCUIT_BOARD, null, SlimefunItems.HEATING_COIL, new ItemStack(Material.FURNACE), SlimefunItems.HEATING_COIL, null, SlimefunItems.ELECTRIC_MOTOR, null})
new ItemStack[] {null, SlimefunItems.STEEL_INGOT, null, SlimefunItems.BASIC_CIRCUIT_BOARD, new ItemStack(Material.FURNACE), SlimefunItems.HEATING_COIL, null, SlimefunItems.ELECTRIC_MOTOR, null})
.register(true);
new EnhancedFurnace(2, 1, 1, (SlimefunItemStack) SlimefunItems.ENHANCED_FURNACE_2,
new ItemStack[] {null, SlimefunItems.BASIC_CIRCUIT_BOARD, null, SlimefunItems.HEATING_COIL, SlimefunItems.ENHANCED_FURNACE, SlimefunItems.HEATING_COIL, null, SlimefunItems.ELECTRIC_MOTOR, null})
new ItemStack[] {null, SlimefunItems.STEEL_INGOT, null, SlimefunItems.BASIC_CIRCUIT_BOARD, SlimefunItems.ENHANCED_FURNACE, SlimefunItems.HEATING_COIL, null, SlimefunItems.ELECTRIC_MOTOR, null})
.register(true);
new EnhancedFurnace(2, 2, 1, (SlimefunItemStack) SlimefunItems.ENHANCED_FURNACE_3,
new ItemStack[] {null, SlimefunItems.BASIC_CIRCUIT_BOARD, null, SlimefunItems.HEATING_COIL, SlimefunItems.ENHANCED_FURNACE_2, SlimefunItems.HEATING_COIL, null, SlimefunItems.ELECTRIC_MOTOR, null})
new ItemStack[] {null, SlimefunItems.STEEL_INGOT, null, SlimefunItems.BASIC_CIRCUIT_BOARD, SlimefunItems.ENHANCED_FURNACE_2, SlimefunItems.HEATING_COIL, null, SlimefunItems.ELECTRIC_MOTOR, null})
.register(true);
new EnhancedFurnace(3, 2, 1, (SlimefunItemStack) SlimefunItems.ENHANCED_FURNACE_4,
new ItemStack[] {null, SlimefunItems.BASIC_CIRCUIT_BOARD, null, SlimefunItems.HEATING_COIL, SlimefunItems.ENHANCED_FURNACE_3, SlimefunItems.HEATING_COIL, null, SlimefunItems.ELECTRIC_MOTOR, null})
new ItemStack[] {null, SlimefunItems.STEEL_INGOT, null, SlimefunItems.BASIC_CIRCUIT_BOARD, SlimefunItems.ENHANCED_FURNACE_3, SlimefunItems.HEATING_COIL, null, SlimefunItems.ELECTRIC_MOTOR, null})
.register(true);
new EnhancedFurnace(3, 2, 2, (SlimefunItemStack) SlimefunItems.ENHANCED_FURNACE_5,
new ItemStack[] {null, SlimefunItems.BASIC_CIRCUIT_BOARD, null, SlimefunItems.HEATING_COIL, SlimefunItems.ENHANCED_FURNACE_4, SlimefunItems.HEATING_COIL, null, SlimefunItems.ELECTRIC_MOTOR, null})
new ItemStack[] {null, SlimefunItems.STEEL_INGOT, null, SlimefunItems.BASIC_CIRCUIT_BOARD, SlimefunItems.ENHANCED_FURNACE_4, SlimefunItems.HEATING_COIL, null, SlimefunItems.ELECTRIC_MOTOR, null})
.register(true);
new EnhancedFurnace(3, 3, 2, (SlimefunItemStack) SlimefunItems.ENHANCED_FURNACE_6,
new ItemStack[] {null, SlimefunItems.BASIC_CIRCUIT_BOARD, null, SlimefunItems.HEATING_COIL, SlimefunItems.ENHANCED_FURNACE_5, SlimefunItems.HEATING_COIL, null, SlimefunItems.ELECTRIC_MOTOR, null})
new ItemStack[] {null, SlimefunItems.STEEL_INGOT, null, SlimefunItems.BASIC_CIRCUIT_BOARD, SlimefunItems.ENHANCED_FURNACE_5, SlimefunItems.HEATING_COIL, null, SlimefunItems.ELECTRIC_MOTOR, null})
.register(true);
new EnhancedFurnace(4, 3, 2, (SlimefunItemStack) SlimefunItems.ENHANCED_FURNACE_7,
new ItemStack[] {null, SlimefunItems.BASIC_CIRCUIT_BOARD, null, SlimefunItems.HEATING_COIL, SlimefunItems.ENHANCED_FURNACE_6, SlimefunItems.HEATING_COIL, null, SlimefunItems.ELECTRIC_MOTOR, null})
new ItemStack[] {null, SlimefunItems.STEEL_INGOT, null, SlimefunItems.BASIC_CIRCUIT_BOARD, SlimefunItems.ENHANCED_FURNACE_6, SlimefunItems.HEATING_COIL, null, SlimefunItems.ELECTRIC_MOTOR, null})
.register(true);
new EnhancedFurnace(4, 4, 2, (SlimefunItemStack) SlimefunItems.ENHANCED_FURNACE_8,
new ItemStack[] {null, SlimefunItems.BASIC_CIRCUIT_BOARD, null, SlimefunItems.HEATING_COIL, SlimefunItems.ENHANCED_FURNACE_7, SlimefunItems.HEATING_COIL, null, SlimefunItems.ELECTRIC_MOTOR, null})
new ItemStack[] {null, SlimefunItems.STEEL_INGOT, null, SlimefunItems.BASIC_CIRCUIT_BOARD, SlimefunItems.ENHANCED_FURNACE_7, SlimefunItems.HEATING_COIL, null, SlimefunItems.ELECTRIC_MOTOR, null})
.register(true);
new EnhancedFurnace(5, 4, 2, (SlimefunItemStack) SlimefunItems.ENHANCED_FURNACE_9,
new ItemStack[] {null, SlimefunItems.BASIC_CIRCUIT_BOARD, null, SlimefunItems.HEATING_COIL, SlimefunItems.ENHANCED_FURNACE_8, SlimefunItems.HEATING_COIL, null, SlimefunItems.ELECTRIC_MOTOR, null})
new ItemStack[] {null, SlimefunItems.STEEL_INGOT, null, SlimefunItems.BASIC_CIRCUIT_BOARD, SlimefunItems.ENHANCED_FURNACE_8, SlimefunItems.HEATING_COIL, null, SlimefunItems.ELECTRIC_MOTOR, null})
.register(true);
new EnhancedFurnace(5, 5, 2, (SlimefunItemStack) SlimefunItems.ENHANCED_FURNACE_10,
new ItemStack[] {null, SlimefunItems.BASIC_CIRCUIT_BOARD, null, SlimefunItems.HEATING_COIL, SlimefunItems.ENHANCED_FURNACE_9, SlimefunItems.HEATING_COIL, null, SlimefunItems.ELECTRIC_MOTOR, null})
new ItemStack[] {null, SlimefunItems.STEEL_INGOT, null, SlimefunItems.BASIC_CIRCUIT_BOARD, SlimefunItems.ENHANCED_FURNACE_9, SlimefunItems.HEATING_COIL, null, SlimefunItems.ELECTRIC_MOTOR, null})
.register(true);
new EnhancedFurnace(5, 5, 3, (SlimefunItemStack) SlimefunItems.ENHANCED_FURNACE_11,
new ItemStack[] {null, SlimefunItems.BASIC_CIRCUIT_BOARD, null, SlimefunItems.HEATING_COIL, SlimefunItems.ENHANCED_FURNACE_10, SlimefunItems.HEATING_COIL, null, SlimefunItems.ELECTRIC_MOTOR, null})
new ItemStack[] {null, SlimefunItems.STEEL_INGOT, null, SlimefunItems.BASIC_CIRCUIT_BOARD, SlimefunItems.ENHANCED_FURNACE_10, SlimefunItems.HEATING_COIL, null, SlimefunItems.ELECTRIC_MOTOR, null})
.register(true);
new EnhancedFurnace(10, 10, 3, (SlimefunItemStack) SlimefunItems.REINFORCED_FURNACE,

View File

@ -27,6 +27,22 @@ import io.github.thebusybiscuit.slimefun4.implementation.geo.resources.NetherIce
import io.github.thebusybiscuit.slimefun4.implementation.geo.resources.OilResource;
import io.github.thebusybiscuit.slimefun4.implementation.geo.resources.SaltResource;
import io.github.thebusybiscuit.slimefun4.implementation.geo.resources.UraniumResource;
import io.github.thebusybiscuit.slimefun4.implementation.listeners.AndroidKillingListener;
import io.github.thebusybiscuit.slimefun4.implementation.listeners.AutonomousToolsListener;
import io.github.thebusybiscuit.slimefun4.implementation.listeners.BackpackListener;
import io.github.thebusybiscuit.slimefun4.implementation.listeners.BlockListener;
import io.github.thebusybiscuit.slimefun4.implementation.listeners.CoolerListener;
import io.github.thebusybiscuit.slimefun4.implementation.listeners.EnhancedFurnaceListener;
import io.github.thebusybiscuit.slimefun4.implementation.listeners.GearListener;
import io.github.thebusybiscuit.slimefun4.implementation.listeners.ItemPickupListener;
import io.github.thebusybiscuit.slimefun4.implementation.listeners.MultiBlockListener;
import io.github.thebusybiscuit.slimefun4.implementation.listeners.NetworkListener;
import io.github.thebusybiscuit.slimefun4.implementation.listeners.PlayerProfileListener;
import io.github.thebusybiscuit.slimefun4.implementation.listeners.SlimefunGuideListener;
import io.github.thebusybiscuit.slimefun4.implementation.listeners.SoulboundListener;
import io.github.thebusybiscuit.slimefun4.implementation.listeners.TalismanListener;
import io.github.thebusybiscuit.slimefun4.implementation.listeners.TeleporterListener;
import io.github.thebusybiscuit.slimefun4.implementation.listeners.WorldListener;
import me.mrCookieSlime.CSCoreLibPlugin.CSCoreLib;
import me.mrCookieSlime.Slimefun.GEO.OreGenSystem;
import me.mrCookieSlime.Slimefun.GPS.GPSNetwork;
@ -48,25 +64,11 @@ import me.mrCookieSlime.Slimefun.api.SlimefunBackup;
import me.mrCookieSlime.Slimefun.api.TickerTask;
import me.mrCookieSlime.Slimefun.api.inventory.UniversalBlockMenu;
import me.mrCookieSlime.Slimefun.hooks.SlimefunHooks;
import me.mrCookieSlime.Slimefun.listeners.AndroidKillingListener;
import me.mrCookieSlime.Slimefun.listeners.ArmorListener;
import me.mrCookieSlime.Slimefun.listeners.AutonomousToolsListener;
import me.mrCookieSlime.Slimefun.listeners.BackpackListener;
import me.mrCookieSlime.Slimefun.listeners.BlockListener;
import me.mrCookieSlime.Slimefun.listeners.BowListener;
import me.mrCookieSlime.Slimefun.listeners.CoolerListener;
import me.mrCookieSlime.Slimefun.listeners.DamageListener;
import me.mrCookieSlime.Slimefun.listeners.FurnaceListener;
import me.mrCookieSlime.Slimefun.listeners.GearListener;
import me.mrCookieSlime.Slimefun.listeners.GuideOnJoinListener;
import me.mrCookieSlime.Slimefun.listeners.ItemListener;
import me.mrCookieSlime.Slimefun.listeners.ItemPickupListener;
import me.mrCookieSlime.Slimefun.listeners.NetworkListener;
import me.mrCookieSlime.Slimefun.listeners.PlayerQuitListener;
import me.mrCookieSlime.Slimefun.listeners.TalismanListener;
import me.mrCookieSlime.Slimefun.listeners.TeleporterListener;
import me.mrCookieSlime.Slimefun.listeners.ToolListener;
import me.mrCookieSlime.Slimefun.listeners.WorldListener;
import me.mrCookieSlime.Slimefun.utils.ConfigCache;
import me.mrCookieSlime.Slimefun.utils.Utilities;
@ -209,12 +211,13 @@ public final class SlimefunPlugin extends JavaPlugin {
new ArmorListener(this);
new ItemListener(this);
new BlockListener(this);
new MultiBlockListener(this);
new GearListener(this);
new AutonomousToolsListener(this);
new DamageListener(this);
new BowListener(this);
new ToolListener(this);
new FurnaceListener(this);
new EnhancedFurnaceListener(this);
new TeleporterListener(this);
new AndroidKillingListener(this);
new NetworkListener(this);
@ -224,15 +227,16 @@ public final class SlimefunPlugin extends JavaPlugin {
if (config.getBoolean("items.talismans")) new TalismanListener(this);
if (config.getBoolean("items.backpacks")) new BackpackListener(this);
if (config.getBoolean("items.coolers")) new CoolerListener(this);
if (config.getBoolean("items.soulbound")) new SoulboundListener(this);
// Handle Slimefun Guide being given on Join
if (config.getBoolean("options.give-guide-on-first-join")) new GuideOnJoinListener(this);
if (config.getBoolean("options.give-guide-on-first-join")) new SlimefunGuideListener(this);
// Load/Unload Worlds in Slimefun
new WorldListener(this);
// Clear the Slimefun Guide History upon Player Leaving
new PlayerQuitListener(this);
new PlayerProfileListener(this);
// Initiating various Stuff and all Items with a slightly delay (0ms after the Server finished loading)
Slimefun.runSync(() -> {

View File

@ -59,7 +59,7 @@ public class ArmorListener implements Listener {
e.setCancelled(true);
p.getWorld().playSound(p.getLocation(), Sound.ENTITY_ZOMBIE_BREAK_WOODEN_DOOR, 1F, 2F);
p.setVelocity(new Vector(0.0, 0.7, 0.0));
for (Entity n: p.getNearbyEntities(4, 4, 4)) {
for (Entity n : p.getNearbyEntities(4, 4, 4)) {
if (n instanceof LivingEntity && !n.getUniqueId().equals(p.getUniqueId())) {
n.setVelocity(n.getLocation().toVector().subtract(p.getLocation().toVector())
.normalize().multiply(1.4));
@ -75,7 +75,7 @@ public class ArmorListener implements Listener {
}
}
for (BlockFace face: BlockFace.values()) {
for (BlockFace face : BlockFace.values()) {
Block b = p.getLocation().getBlock().getRelative(BlockFace.DOWN).getRelative(face);
p.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, b.getType());
}

View File

@ -1,132 +0,0 @@
package me.mrCookieSlime.Slimefun.listeners;
import java.util.LinkedList;
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.block.BlockFace;
import org.bukkit.entity.FallingBlock;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.Action;
import org.bukkit.event.block.BlockPistonExtendEvent;
import org.bukkit.event.block.BlockPistonRetractEvent;
import org.bukkit.event.entity.EntityChangeBlockEvent;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.inventory.EquipmentSlot;
import org.bukkit.inventory.ItemStack;
import io.github.thebusybiscuit.slimefun4.api.events.MultiBlockInteractEvent;
import me.mrCookieSlime.Slimefun.SlimefunPlugin;
import me.mrCookieSlime.Slimefun.Objects.MultiBlock;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
import me.mrCookieSlime.Slimefun.Objects.handlers.ItemHandler;
import me.mrCookieSlime.Slimefun.Objects.handlers.MultiBlockInteractionHandler;
import me.mrCookieSlime.Slimefun.api.BlockStorage;
public class BlockListener implements Listener {
public BlockListener(SlimefunPlugin plugin) {
plugin.getServer().getPluginManager().registerEvents(this, plugin);
}
@EventHandler
public void onBlockFall(EntityChangeBlockEvent event) {
if (event.getEntity() instanceof FallingBlock && BlockStorage.hasBlockInfo(event.getBlock())) {
event.setCancelled(true);
FallingBlock fb = (FallingBlock) event.getEntity();
if (fb.getDropItem()) {
fb.getWorld().dropItemNaturally(fb.getLocation(), new ItemStack(fb.getBlockData().getMaterial(), 1));
}
}
}
@EventHandler
public void onPistonExtend(BlockPistonExtendEvent e) {
for (Block b: e.getBlocks()) {
if (BlockStorage.hasBlockInfo(b) || b.getRelative(e.getDirection()).getType() == Material.AIR && BlockStorage.hasBlockInfo(b.getRelative(e.getDirection()))) {
e.setCancelled(true);
return;
}
}
}
@EventHandler
public void onPistonRetract(BlockPistonRetractEvent e) {
if (e.isSticky()) {
for (Block b : e.getBlocks()) {
if (BlockStorage.hasBlockInfo(b) || b.getRelative(e.getDirection()).getType() == Material.AIR && BlockStorage.hasBlockInfo(b.getRelative(e.getDirection()))) {
e.setCancelled(true);
return;
}
}
}
}
@EventHandler
public void onRightClick(PlayerInteractEvent e) {
if (e.getHand() != EquipmentSlot.HAND) return;
if (e.getAction() == Action.RIGHT_CLICK_BLOCK) {
Player p = e.getPlayer();
Block b = e.getClickedBlock();
LinkedList<MultiBlock> multiblocks = new LinkedList<>();
for (MultiBlock mb : MultiBlock.list()) {
Block center = b.getRelative(mb.getTriggerBlock());
if (compareMaterials(center, mb.getBuild(), mb.isSymmetric())) {
multiblocks.add(mb);
}
}
if (!multiblocks.isEmpty()) {
e.setCancelled(true);
MultiBlock multiblock = multiblocks.getLast();
for (ItemHandler handler : SlimefunItem.getHandlers("MultiBlockInteractionHandler")) {
if (((MultiBlockInteractionHandler) handler).onInteract(p, multiblock, b)) break;
}
MultiBlockInteractEvent event = new MultiBlockInteractEvent(p, multiblock, b);
Bukkit.getPluginManager().callEvent(event);
}
}
}
protected boolean compareMaterials(Block b, Material[] blocks, boolean onlyTwoWay) {
if (!compareMaterialsVertical(b, blocks[1], blocks[4], blocks[7])) {
return false;
}
BlockFace[] directions = onlyTwoWay ? new BlockFace[] {BlockFace.NORTH, BlockFace.EAST} : new BlockFace[] {BlockFace.NORTH, BlockFace.EAST, BlockFace.SOUTH, BlockFace.WEST};
for (BlockFace direction : directions) {
if (compareMaterialsVertical(b.getRelative(direction), blocks[0], blocks[3], blocks[6])
&& compareMaterialsVertical(b.getRelative(direction.getOppositeFace()), blocks[2], blocks[5], blocks[8])) {
return true;
}
}
return false;
}
protected boolean compareMaterialsVertical(Block b, Material top, Material center, Material bottom) {
if (center != null && b.getType() != center) {
return false;
}
if (top != null && b.getRelative(BlockFace.UP).getType() != top) {
return false;
}
if (bottom != null && b.getRelative(BlockFace.DOWN).getType() != bottom) {
return false;
}
return true;
}
}

View File

@ -34,7 +34,7 @@ public class BowListener implements Listener {
}
@EventHandler
public void onArrowHit(final ProjectileHitEvent e) {
public void onArrowHit(ProjectileHitEvent e) {
Slimefun.runSync(() -> {
if (e.getEntity().isValid()) {
SlimefunPlugin.getUtilities().arrows.remove(e.getEntity().getUniqueId());

View File

@ -2,7 +2,6 @@ package me.mrCookieSlime.Slimefun.listeners;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Iterator;
import org.bukkit.Material;
import org.bukkit.entity.Player;
@ -11,7 +10,6 @@ import org.bukkit.event.Listener;
import org.bukkit.event.entity.EntityDamageEvent;
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
import org.bukkit.event.entity.EntityDeathEvent;
import org.bukkit.event.player.PlayerRespawnEvent;
import org.bukkit.inventory.ItemStack;
import me.mrCookieSlime.Slimefun.SlimefunPlugin;
@ -21,7 +19,6 @@ import me.mrCookieSlime.Slimefun.Objects.handlers.EntityKillHandler;
import me.mrCookieSlime.Slimefun.Objects.handlers.ItemHandler;
import me.mrCookieSlime.Slimefun.Setup.SlimefunManager;
import me.mrCookieSlime.Slimefun.api.Slimefun;
import me.mrCookieSlime.Slimefun.api.Soul;
public class DamageListener implements Listener {
@ -38,21 +35,6 @@ public class DamageListener implements Listener {
if (p.getInventory().containsAtLeast(SlimefunItems.GPS_EMERGENCY_TRANSMITTER, 1)) {
Slimefun.getGPSNetwork().addWaypoint(p, "&4Deathpoint &7" + format.format(new Date()), p.getLocation().getBlock().getLocation());
}
for (int slot = 0; slot < p.getInventory().getSize(); slot++) {
ItemStack item = p.getInventory().getItem(slot);
if (SlimefunManager.isItemSoulbound(item)) {
Soul.storeItem(p.getUniqueId(), slot, item);
}
}
Iterator<ItemStack> drops = e.getDrops().iterator();
while (drops.hasNext()) {
ItemStack item = drops.next();
if (SlimefunManager.isItemSoulbound(item)) drops.remove();
}
}
if (e.getEntity().getKiller() instanceof Player) {
@ -86,9 +68,4 @@ public class DamageListener implements Listener {
SlimefunPlugin.getUtilities().damage.remove(e.getEntity().getUniqueId());
}
}
@EventHandler
public void onRespawn(PlayerRespawnEvent e) {
Soul.retrieveItems(e.getPlayer());
}
}

View File

@ -39,6 +39,7 @@ import org.bukkit.potion.PotionEffectType;
import io.github.thebusybiscuit.slimefun4.core.guide.GuideSettings;
import io.github.thebusybiscuit.slimefun4.core.guide.SlimefunGuideLayout;
import io.github.thebusybiscuit.slimefun4.implementation.listeners.BackpackListener;
import me.mrCookieSlime.CSCoreLibPlugin.events.ItemUseEvent;
import me.mrCookieSlime.CSCoreLibPlugin.general.World.CustomSkull;
import me.mrCookieSlime.Slimefun.SlimefunGuide;
@ -283,10 +284,9 @@ public class ItemListener implements Listener {
String id = BlockStorage.checkID(e.getClickedBlock());
if (BlockMenuPreset.isInventory(id) && !canPlaceCargoNodes(p, item, e.getClickedBlock().getRelative(e.getParentEvent().getBlockFace())) && (!p.isSneaking() || item == null || item.getType() == Material.AIR)) {
e.setCancelled(true);
BlockStorage storage = BlockStorage.getStorage(e.getClickedBlock().getWorld());
if (storage.hasUniversalInventory(id)) {
UniversalBlockMenu menu = storage.getUniversalInventory(id);
if (BlockStorage.hasUniversalInventory(id)) {
UniversalBlockMenu menu = BlockStorage.getUniversalInventory(id);
if (menu.canOpen(e.getClickedBlock(), p)) {
menu.open(p);
}
@ -294,7 +294,7 @@ public class ItemListener implements Listener {
SlimefunPlugin.getLocal().sendMessage(p, "inventory.no-access", true);
}
}
else if (storage.hasInventory(e.getClickedBlock().getLocation())) {
else if (BlockStorage.getStorage(e.getClickedBlock().getWorld()).hasInventory(e.getClickedBlock().getLocation())) {
BlockMenu menu = BlockStorage.getInventory(e.getClickedBlock().getLocation());
if (menu.canOpen(e.getClickedBlock(), p)) {
menu.open(p);
@ -322,7 +322,7 @@ public class ItemListener implements Listener {
@EventHandler
public void onEat(PlayerItemConsumeEvent e) {
final Player p = e.getPlayer();
Player p = e.getPlayer();
ItemStack item = e.getItem();
SlimefunItem sfItem = SlimefunItem.getByItem(item);

View File

@ -100,7 +100,8 @@ public final class Utilities {
public final List<PostSlimefunLoadingHandler> postHandlers = new ArrayList<>();
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<>();
@ -115,7 +116,6 @@ public final class Utilities {
public final Map<UUID, Map<Integer, ItemStack>> soulbound = new HashMap<>();
public final List<UUID> blocks = new ArrayList<>();
public final List<UUID> cancelPlace = new ArrayList<>();
public final Map<UUID, ItemStack> arrows = new HashMap<>();
public final Set<UUID> elevatorUsers = new HashSet<>();
public final Set<UUID> teleporterUsers = new HashSet<>();

View File

@ -29,6 +29,7 @@ items:
talismans: true
coolers: true
backpacks: true
soulbound: true
research-ranks:
- Chicken
- Cow