Skip to content

Commit

Permalink
Adds shulker backpacks
Browse files Browse the repository at this point in the history
  • Loading branch information
alikindsys committed Aug 4, 2020
1 parent 3da955a commit 0b258a0
Showing 1 changed file with 40 additions and 9 deletions.
49 changes: 40 additions & 9 deletions src/main/kotlin/me/roridev/safemine/handlers/DropHandler.kt
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
package me.roridev.safemine.handlers

import com.destroystokyo.paper.Title
import me.roridev.safemine.Safemine
import me.roridev.safemine.helpers.getInventoryIfShulker
import me.roridev.safemine.helpers.toShulkerItemStack
import net.md_5.bungee.api.ChatColor
import net.md_5.bungee.api.chat.TextComponent
import org.bukkit.GameMode
Expand All @@ -11,6 +12,7 @@ import org.bukkit.event.Listener
import org.bukkit.event.block.BlockDropItemEvent
import org.bukkit.inventory.ItemStack
import org.bukkit.inventory.PlayerInventory
import org.bukkit.inventory.meta.BlockStateMeta

class DropHandler : Listener {
@EventHandler
Expand All @@ -37,28 +39,57 @@ class DropHandler : Listener {

private fun transferItems(event : BlockDropItemEvent, item: ItemStack){
val inventory = event.player.inventory
val boxes = inventory.contents.filterNotNull()
.filter{it.itemMeta is BlockStateMeta}
val stack = inventory.contents.filterNotNull().firstOrNull {it.type == item.type}
if(stack == null){
if(!inventory.hasSpace(event.items.map{x -> x.itemStack}.toMutableList())) {
dropItem(event)
if(!transferToShulkerBox(inventory, boxes, item)) {
if(!inventory.hasSpace(event.items.map{x -> x.itemStack}.toMutableList())) {
dropItem(event)
return
}
if(!newItemStack(inventory,item)) dropItem(event)
return
}
if(!newItemStack(inventory,item)) dropItem(event)
return
}
val index = inventory.contents.indexOfFirst { it?.type == item.type }
if(stack.amount + item.amount <= stack.maxStackSize) {
stack.amount += item.amount
inventory.contents[index] = stack
} else {
val reminder = stack.amount + item.amount - stack.maxStackSize
stack.amount = stack.maxStackSize
item.amount = reminder
inventory.contents[index] = stack
if(!newItemStack(inventory,item)) dropItem(event)
if(!transferToShulkerBox(inventory, boxes, item)) {
val reminder = stack.amount + item.amount - stack.maxStackSize
stack.amount = stack.maxStackSize
item.amount = reminder
inventory.contents[index] = stack
if(!newItemStack(inventory,item)) dropItem(event)
}
}
}

private fun transferToShulkerBox(inventory: PlayerInventory,
boxes : List<ItemStack>,
item : ItemStack) : Boolean {

if(!Safemine.config.getBoolean("backpacks")) return false
if (boxes.isNotEmpty()){
val shulkers = boxes.map { Pair(it, it.getInventoryIfShulker())}.toMap()
for (entry in shulkers){
val stack = entry.value?.contents?.firstOrNull { it?.type == item.type && it.amount != item.maxStackSize }
if(stack != null) {
if(stack.amount + item.amount > item.maxStackSize) return false
val i = inventory.contents.indexOfFirst { it == entry.key }
entry.value?.addItem(item)
inventory.contents[i] = entry.value?.toShulkerItemStack(entry.key)
return true
}
}
return false

}
return false
}
private fun newItemStack(inv: PlayerInventory, stack: ItemStack) : Boolean{
if(!inv.hasSpace(mutableListOf(stack))) return false
inv.addItem(stack)
Expand Down

0 comments on commit 0b258a0

Please sign in to comment.