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:
parent
b8d420545c
commit
e2d58f7f50
@ -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
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
@ -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));
|
||||
}
|
||||
}
|
||||
}
|
@ -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);
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -1,4 +1,4 @@
|
||||
package me.mrCookieSlime.Slimefun.listeners;
|
||||
package io.github.thebusybiscuit.slimefun4.implementation.listeners;
|
||||
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.Sound;
|
@ -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);
|
||||
}
|
||||
|
@ -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) {
|
@ -1,4 +1,4 @@
|
||||
package me.mrCookieSlime.Slimefun.listeners;
|
||||
package io.github.thebusybiscuit.slimefun4.implementation.listeners;
|
||||
|
||||
import me.mrCookieSlime.Slimefun.SlimefunPlugin;
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
@ -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());
|
@ -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);
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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());
|
||||
}
|
||||
}
|
@ -1,4 +1,4 @@
|
||||
package me.mrCookieSlime.Slimefun.listeners;
|
||||
package io.github.thebusybiscuit.slimefun4.implementation.listeners;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
@ -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;
|
@ -1,4 +1,4 @@
|
||||
package me.mrCookieSlime.Slimefun.listeners;
|
||||
package io.github.thebusybiscuit.slimefun4.implementation.listeners;
|
||||
|
||||
import java.util.logging.Level;
|
||||
|
@ -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) + "}";
|
||||
}
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -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 {
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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,
|
||||
|
@ -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(() -> {
|
||||
|
@ -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());
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
@ -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());
|
||||
|
@ -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());
|
||||
}
|
||||
}
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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<>();
|
||||
|
@ -29,6 +29,7 @@ items:
|
||||
talismans: true
|
||||
coolers: true
|
||||
backpacks: true
|
||||
soulbound: true
|
||||
research-ranks:
|
||||
- Chicken
|
||||
- Cow
|
||||
|
Loading…
Reference in New Issue
Block a user