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-01-12 10:27:56 +01:00
parent 626a2ebdaf
commit b94121e55b
3 changed files with 29 additions and 22 deletions

View File

@ -36,6 +36,7 @@
### Fixes
* Fixed #1355
* Fixed Localization mistakes
* Fixed #1366
## Release Candidate 4 (06 Jan 2020)
https://thebusybiscuit.github.io/builds/TheBusyBiscuit/Slimefun4/stable/#4

View File

@ -11,6 +11,7 @@ import org.bukkit.event.Listener;
import org.bukkit.event.inventory.ClickType;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.event.inventory.InventoryCloseEvent;
import org.bukkit.event.inventory.InventoryType;
import org.bukkit.event.player.PlayerDropItemEvent;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
@ -60,10 +61,12 @@ public class BackpackListener implements Listener {
if (item != null) {
if (e.getClick() == ClickType.NUMBER_KEY) {
ItemStack hotbarItem = e.getWhoClicked().getInventory().getItem(e.getHotbarButton());
if ((hotbarItem != null && hotbarItem.getType().toString().contains("SHULKER_BOX")) || SlimefunItem.getByItem(hotbarItem) instanceof SlimefunBackpack) {
e.setCancelled(true);
if (e.getClickedInventory().getType() != InventoryType.PLAYER) {
ItemStack hotbarItem = e.getWhoClicked().getInventory().getItem(e.getHotbarButton());
if (hotbarItem != null && (hotbarItem.getType().toString().contains("SHULKER_BOX") || SlimefunItem.getByItem(hotbarItem) instanceof SlimefunBackpack)) {
e.setCancelled(true);
}
}
}
else if (e.getCurrentItem() != null && e.getCurrentItem().getType() != Material.AIR) {

View File

@ -4,7 +4,7 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;
import java.util.Random;
import java.util.concurrent.ThreadLocalRandom;
import org.bukkit.Effect;
import org.bukkit.Material;
@ -69,25 +69,13 @@ public class Smeltery extends MultiBlockMachine {
List<ItemStack[]> inputs = RecipeType.getRecipeInputList(this);
for (int i = 0; i < inputs.size(); i++) {
boolean craft = true;
for (ItemStack converting: inputs.get(i)) {
if (converting != null) {
for (int j = 0; j < inv.getContents().length; j++) {
if (j == (inv.getContents().length - 1) && !SlimefunManager.isItemSimilar(converting, inv.getContents()[j], true)) {
craft = false;
break;
}
else if (SlimefunManager.isItemSimilar(inv.getContents()[j], converting, true)) break;
}
}
}
if (craft) {
if (canCraft(inv, inputs, i)) {
ItemStack adding = RecipeType.getRecipeOutputList(this, inputs.get(i)).clone();
if (Slimefun.hasUnlocked(p, adding, true)) {
Inventory outputInv = findOutputInventory(adding, dispBlock, inv);
if (outputInv != null) {
for (ItemStack removing: inputs.get(i)) {
for (ItemStack removing : inputs.get(i)) {
if (removing != null) {
InvUtils.removeItem(inv, removing.getAmount(), true, stack -> SlimefunManager.isItemSimilar(stack, removing, true));
}
@ -99,7 +87,7 @@ public class Smeltery extends MultiBlockMachine {
Hopper chamber = findHopper(dispBlock, BlockFace.NORTH, BlockFace.EAST, BlockFace.SOUTH, BlockFace.WEST);
if (new Random().nextInt(100) < SlimefunPlugin.getSettings().smelteryFireBreakChance) {
if (ThreadLocalRandom.current().nextInt(100) < SlimefunPlugin.getSettings().smelteryFireBreakChance) {
if (chamber != null) {
if (chamber.getInventory().contains(Material.FLINT_AND_STEEL)) {
ItemStack item = chamber.getInventory().getItem(chamber.getInventory().first(Material.FLINT_AND_STEEL));
@ -138,8 +126,23 @@ public class Smeltery extends MultiBlockMachine {
SlimefunPlugin.getLocal().sendMessage(p, "machines.pattern-not-found", true);
}
private boolean canCraft(Inventory inv, List<ItemStack[]> inputs, int i) {
for (ItemStack converting : inputs.get(i)) {
if (converting != null) {
for (int j = 0; j < inv.getContents().length; j++) {
if (j == (inv.getContents().length - 1) && !SlimefunManager.isItemSimilar(converting, inv.getContents()[j], true)) {
return false;
}
else if (SlimefunManager.isItemSimilar(inv.getContents()[j], converting, true)) break;
}
}
}
return true;
}
private Hopper findHopper(Block b, BlockFace... faces) {
for (BlockFace face: faces) {
for (BlockFace face : faces) {
if (b.getRelative(face).getType() == Material.HOPPER && BlockStorage.check(b.getRelative(face), "IGNITION_CHAMBER")) {
return (Hopper) b.getRelative(face).getState();
}