mirror of
https://github.com/StarWishsama/Slimefun4.git
synced 2024-09-19 19:25:48 +00:00
Fixed #1557
This commit is contained in:
parent
18cf3b847b
commit
155a9572c4
@ -38,6 +38,8 @@
|
||||
|
||||
### Fixes
|
||||
* Fixed #1553
|
||||
* Fixed #1513
|
||||
* Fixed #1557
|
||||
|
||||
## Release Candidate 6 (16 Feb 2020)
|
||||
|
||||
|
@ -1,6 +1,5 @@
|
||||
package io.github.thebusybiscuit.slimefun4.implementation.listeners;
|
||||
|
||||
import me.mrCookieSlime.Slimefun.Lists.SlimefunItems;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.block.BlockFace;
|
||||
@ -11,35 +10,36 @@ import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.block.BlockDispenseEvent;
|
||||
|
||||
import me.mrCookieSlime.Slimefun.SlimefunPlugin;
|
||||
import me.mrCookieSlime.Slimefun.Lists.SlimefunItems;
|
||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
|
||||
import me.mrCookieSlime.Slimefun.Objects.handlers.AutonomousMachineHandler;
|
||||
import me.mrCookieSlime.Slimefun.Objects.handlers.BlockDispenseHandler;
|
||||
import me.mrCookieSlime.Slimefun.api.BlockStorage;
|
||||
|
||||
public class AutonomousToolsListener implements Listener {
|
||||
public class DispenserListener implements Listener {
|
||||
|
||||
public AutonomousToolsListener(SlimefunPlugin plugin) {
|
||||
public DispenserListener(SlimefunPlugin plugin) {
|
||||
plugin.getServer().getPluginManager().registerEvents(this, plugin);
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onBlockDispensing(BlockDispenseEvent e) {
|
||||
Block dispenser = e.getBlock();
|
||||
|
||||
if (dispenser.getType() == Material.DISPENSER) {
|
||||
Dispenser d = (Dispenser) dispenser.getState();
|
||||
|
||||
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) {
|
||||
if (machine.isItem(SlimefunItems.BLOCK_PLACER) && dispenser.getRelative(BlockFace.DOWN).getType() == Material.HOPPER){
|
||||
e.setCancelled(true);
|
||||
} else {
|
||||
machine.callItemHandler(AutonomousMachineHandler.class, handler -> handler.onBlockDispense(e, dispenser, d, block, chest, machine));
|
||||
}
|
||||
else {
|
||||
machine.callItemHandler(BlockDispenseHandler.class, handler -> handler.onBlockDispense(e, d, block, machine));
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
@ -16,12 +16,12 @@ import me.mrCookieSlime.Slimefun.Lists.RecipeType;
|
||||
import me.mrCookieSlime.Slimefun.Objects.Category;
|
||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem;
|
||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
|
||||
import me.mrCookieSlime.Slimefun.Objects.handlers.AutonomousMachineHandler;
|
||||
import me.mrCookieSlime.Slimefun.Objects.handlers.BlockDispenseHandler;
|
||||
import me.mrCookieSlime.Slimefun.api.BlockStorage;
|
||||
import me.mrCookieSlime.Slimefun.api.Slimefun;
|
||||
import me.mrCookieSlime.Slimefun.api.SlimefunItemStack;
|
||||
|
||||
public class BlockPlacer extends SimpleSlimefunItem<AutonomousMachineHandler> {
|
||||
public class BlockPlacer extends SimpleSlimefunItem<BlockDispenseHandler> {
|
||||
|
||||
private String[] blacklist;
|
||||
|
||||
@ -35,67 +35,65 @@ public class BlockPlacer extends SimpleSlimefunItem<AutonomousMachineHandler> {
|
||||
}
|
||||
|
||||
@Override
|
||||
public AutonomousMachineHandler getItemHandler() {
|
||||
return (e, dispenser, d, block, chest, machine) -> {
|
||||
if (machine.getID().equalsIgnoreCase(getID())) {
|
||||
e.setCancelled(true);
|
||||
public BlockDispenseHandler getItemHandler() {
|
||||
return (e, dispenser, facedBlock, machine) -> {
|
||||
e.setCancelled(true);
|
||||
|
||||
if ((facedBlock.getType() == null || facedBlock.getType() == Material.AIR) && e.getItem().getType().isBlock()) {
|
||||
for (String blockType : blacklist) {
|
||||
if (e.getItem().getType().toString().equals(blockType)) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if ((block.getType() == null || block.getType() == Material.AIR) && e.getItem().getType().isBlock()) {
|
||||
for (String blockType : blacklist) {
|
||||
if (e.getItem().getType().toString().equals(blockType)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
SlimefunItem sfItem = SlimefunItem.getByItem(e.getItem());
|
||||
if (sfItem != null) {
|
||||
if (!SlimefunPlugin.getRegistry().getBlockHandlers().containsKey(sfItem.getID())) {
|
||||
block.setType(e.getItem().getType());
|
||||
BlockStorage.store(block, sfItem.getID());
|
||||
block.getWorld().playEffect(block.getLocation(), Effect.STEP_SOUND, e.getItem().getType());
|
||||
|
||||
if (d.getInventory().containsAtLeast(e.getItem(), 2)) {
|
||||
d.getInventory().removeItem(new CustomItem(e.getItem(), 1));
|
||||
}
|
||||
else {
|
||||
Slimefun.runSync(() -> d.getInventory().removeItem(e.getItem()), 2L);
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
block.setType(e.getItem().getType());
|
||||
SlimefunItem sfItem = SlimefunItem.getByItem(e.getItem());
|
||||
|
||||
if (sfItem != null) {
|
||||
if (!SlimefunPlugin.getRegistry().getBlockHandlers().containsKey(sfItem.getID())) {
|
||||
facedBlock.setType(e.getItem().getType());
|
||||
BlockStorage.store(facedBlock, sfItem.getID());
|
||||
facedBlock.getWorld().playEffect(facedBlock.getLocation(), Effect.STEP_SOUND, e.getItem().getType());
|
||||
|
||||
if (e.getItem().hasItemMeta() && e.getItem().getItemMeta() instanceof BlockStateMeta) {
|
||||
BlockState itemBlockState = ((BlockStateMeta) e.getItem().getItemMeta()).getBlockState();
|
||||
BlockState blockState = block.getState();
|
||||
|
||||
if ((blockState instanceof Nameable) && e.getItem().getItemMeta().hasDisplayName()) {
|
||||
((Nameable) blockState).setCustomName(e.getItem().getItemMeta().getDisplayName());
|
||||
}
|
||||
|
||||
//Update block state after changing name
|
||||
blockState.update();
|
||||
|
||||
//Changing the inventory of the block based on the inventory of the block's itemstack (Currently only applies to shulker boxes)
|
||||
//Inventory has to be changed after blockState.update() as updating it will create a different Inventory for the object
|
||||
if (block.getState() instanceof BlockInventoryHolder) {
|
||||
((BlockInventoryHolder) block.getState()).getInventory().setContents(((BlockInventoryHolder) itemBlockState).getInventory().getContents());
|
||||
}
|
||||
|
||||
}
|
||||
block.getWorld().playEffect(block.getLocation(), Effect.STEP_SOUND, e.getItem().getType());
|
||||
|
||||
if (d.getInventory().containsAtLeast(e.getItem(), 2)) {
|
||||
d.getInventory().removeItem(new CustomItem(e.getItem(), 1));
|
||||
if (dispenser.getInventory().containsAtLeast(e.getItem(), 2)) {
|
||||
dispenser.getInventory().removeItem(new CustomItem(e.getItem(), 1));
|
||||
}
|
||||
else {
|
||||
Slimefun.runSync(() -> d.getInventory().removeItem(e.getItem()), 2L);
|
||||
Slimefun.runSync(() -> dispenser.getInventory().removeItem(e.getItem()), 2L);
|
||||
}
|
||||
}
|
||||
}
|
||||
return true;
|
||||
else {
|
||||
facedBlock.setType(e.getItem().getType());
|
||||
|
||||
if (e.getItem().hasItemMeta() && e.getItem().getItemMeta() instanceof BlockStateMeta) {
|
||||
BlockState itemBlockState = ((BlockStateMeta) e.getItem().getItemMeta()).getBlockState();
|
||||
BlockState blockState = facedBlock.getState();
|
||||
|
||||
if ((blockState instanceof Nameable) && e.getItem().getItemMeta().hasDisplayName()) {
|
||||
((Nameable) blockState).setCustomName(e.getItem().getItemMeta().getDisplayName());
|
||||
}
|
||||
|
||||
//Update block state after changing name
|
||||
blockState.update();
|
||||
|
||||
//Changing the inventory of the block based on the inventory of the block's itemstack (Currently only applies to shulker boxes)
|
||||
//Inventory has to be changed after blockState.update() as updating it will create a different Inventory for the object
|
||||
if (facedBlock.getState() instanceof BlockInventoryHolder) {
|
||||
((BlockInventoryHolder) facedBlock.getState()).getInventory().setContents(((BlockInventoryHolder) itemBlockState).getInventory().getContents());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
facedBlock.getWorld().playEffect(facedBlock.getLocation(), Effect.STEP_SOUND, e.getItem().getType());
|
||||
|
||||
if (dispenser.getInventory().containsAtLeast(e.getItem(), 2)) {
|
||||
dispenser.getInventory().removeItem(new CustomItem(e.getItem(), 1));
|
||||
}
|
||||
else {
|
||||
Slimefun.runSync(() -> dispenser.getInventory().removeItem(e.getItem()), 2L);
|
||||
}
|
||||
}
|
||||
}
|
||||
else return false;
|
||||
};
|
||||
}
|
||||
|
||||
|
@ -1,18 +1,18 @@
|
||||
package me.mrCookieSlime.Slimefun.Objects.handlers;
|
||||
|
||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
|
||||
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.block.Dispenser;
|
||||
import org.bukkit.event.block.BlockDispenseEvent;
|
||||
|
||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
|
||||
|
||||
@FunctionalInterface
|
||||
public interface AutonomousMachineHandler extends ItemHandler {
|
||||
public interface BlockDispenseHandler extends ItemHandler {
|
||||
|
||||
boolean onBlockDispense(BlockDispenseEvent e, Block dispenser, Dispenser d, Block block, Block chest, SlimefunItem machine);
|
||||
void onBlockDispense(BlockDispenseEvent e, Dispenser dispenser, Block facedBlock, SlimefunItem machine);
|
||||
|
||||
@Override
|
||||
default Class<? extends ItemHandler> getIdentifier() {
|
||||
return AutonomousMachineHandler.class;
|
||||
return BlockDispenseHandler.class;
|
||||
}
|
||||
}
|
@ -35,7 +35,7 @@ import io.github.thebusybiscuit.slimefun4.core.services.MetricsService;
|
||||
import io.github.thebusybiscuit.slimefun4.core.services.UpdaterService;
|
||||
import io.github.thebusybiscuit.slimefun4.implementation.listeners.AncientAltarListener;
|
||||
import io.github.thebusybiscuit.slimefun4.implementation.listeners.AndroidKillingListener;
|
||||
import io.github.thebusybiscuit.slimefun4.implementation.listeners.AutonomousToolsListener;
|
||||
import io.github.thebusybiscuit.slimefun4.implementation.listeners.DispenserListener;
|
||||
import io.github.thebusybiscuit.slimefun4.implementation.listeners.BackpackListener;
|
||||
import io.github.thebusybiscuit.slimefun4.implementation.listeners.BlockListener;
|
||||
import io.github.thebusybiscuit.slimefun4.implementation.listeners.BlockPhysicsListener;
|
||||
@ -203,7 +203,7 @@ public final class SlimefunPlugin extends JavaPlugin implements SlimefunAddon {
|
||||
new BlockPhysicsListener(this);
|
||||
new MultiBlockListener(this);
|
||||
new GearListener(this);
|
||||
new AutonomousToolsListener(this);
|
||||
new DispenserListener(this);
|
||||
new DamageListener(this);
|
||||
new BlockListener(this);
|
||||
new EnhancedFurnaceListener(this);
|
||||
|
@ -255,7 +255,7 @@ messages:
|
||||
whirlwind: "&a&oأبعدت تعويذتك القذيفة عنك"
|
||||
wizard: "&a&oحسنت تعويذتك حالة حظك لكن غالبا سوءت حالات أخرى"
|
||||
unknown-player: "&4لاعب غير معروف: &c%player%"
|
||||
unlocked: &bتم فتح &7"%research%"
|
||||
unlocked: '&bتم فتح &7"%research%"'
|
||||
usage: "&4طريقة الإستعمال: &c%usage%"
|
||||
miner:
|
||||
no-ores: "&eعفوا، لم أجد أي ركيزة بالجوار!"
|
||||
|
Loading…
Reference in New Issue
Block a user