1
mirror of https://github.com/StarWishsama/Slimefun4.git synced 2024-09-19 19:25:48 +00:00
This commit is contained in:
TheBusyBiscuit 2020-02-21 11:00:41 +01:00
parent 18cf3b847b
commit 155a9572c4
6 changed files with 71 additions and 71 deletions

View File

@ -38,6 +38,8 @@
### Fixes
* Fixed #1553
* Fixed #1513
* Fixed #1557
## Release Candidate 6 (16 Feb 2020)

View File

@ -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));
}
}
}
}

View File

@ -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;
};
}

View File

@ -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;
}
}

View File

@ -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);

View File

@ -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عفوا، لم أجد أي ركيزة بالجوار!"