@@ -3,28 +3,21 @@ package io.github.pylonmc.rebar.item
33import com.destroystokyo.paper.event.player.PlayerReadyArrowEvent
44import io.github.pylonmc.rebar.Rebar
55import io.github.pylonmc.rebar.block.BlockStorage
6- import io.github.pylonmc.rebar.entity.EntityListener.logEventHandleErr
76import io.github.pylonmc.rebar.item.base.*
87import io.github.pylonmc.rebar.item.research.Research.Companion.canUse
98import io.github.pylonmc.rebar.util.findRebarItemInInventory
10- import io.papermc.paper.event.player.PlayerPickItemEvent
9+ import io.papermc.paper.event.player.PlayerPickBlockEvent
1110import org.bukkit.GameMode
12- import org.bukkit.attribute.Attribute
1311import org.bukkit.entity.Player
1412import org.bukkit.event.Event
1513import org.bukkit.event.EventHandler
1614import org.bukkit.event.EventPriority
1715import org.bukkit.event.Listener
1816import org.bukkit.event.block.BlockBreakEvent
1917import org.bukkit.event.block.BlockDamageEvent
20- import org.bukkit.event.block.BlockDispenseEvent
2118import org.bukkit.event.entity.EntityDamageByEntityEvent
2219import org.bukkit.event.entity.EntityDeathEvent
23- import org.bukkit.event.entity.EntityShootBowEvent
24- import org.bukkit.event.inventory.BrewingStandFuelEvent
25- import org.bukkit.event.inventory.FurnaceBurnEvent
2620import org.bukkit.event.player.*
27- import kotlin.math.ceil
2821
2922internal object RebarItemListener : Listener {
3023 @EventHandler(priority = EventPriority .LOWEST , ignoreCancelled = true )
@@ -167,20 +160,18 @@ internal object RebarItemListener : Listener {
167160 }
168161 }
169162
170- @EventHandler
171- private fun handle (event : PlayerPickItemEvent ) {
172- val reachDistance = event.player.getAttribute(Attribute .BLOCK_INTERACTION_RANGE )?.value ? : 4.5
173- val block = event.player.getTargetBlockExact(ceil(reachDistance).toInt()) ? : return
174- val rebarBlock = BlockStorage .get(block) ? : return
163+ @EventHandler(priority = EventPriority .LOWEST , ignoreCancelled = true )
164+ private fun handle (event : PlayerPickBlockEvent ) {
165+ val rebarBlock = BlockStorage .get(event.block) ? : return
175166 val blockItem = rebarBlock.getPickItem() ? : return
176- val blockRebarItem = RebarItem .fromStack(blockItem) ? : return
167+ val blockSchema = RebarItemSchema .fromStack(blockItem) ? : return
177168
178169 val sourceSlot = event.sourceSlot
179170 if (sourceSlot != - 1 ) {
180171 val sourceItem = event.player.inventory.getItem(event.sourceSlot)
181172 if (sourceItem != null ) {
182- val sourceRebarItem = RebarItem .fromStack(sourceItem)
183- if (sourceRebarItem != null ) {
173+ val sourceSchema = RebarItemSchema .fromStack(sourceItem)
174+ if (sourceSchema == blockSchema ) {
184175 // The source item is already of the correct Rebar type, so we shouldn't interfere with the event
185176 return
186177 }
@@ -189,7 +180,7 @@ internal object RebarItemListener : Listener {
189180
190181 // If we reach this point, the source item is not of the correct type
191182 // So we're going to search the inventory for a block of the correct type
192- val existingSlot = findRebarItemInInventory(event.player.inventory, blockRebarItem )
183+ val existingSlot = findRebarItemInInventory(event.player.inventory, blockSchema )
193184 if (existingSlot != null ) {
194185 // If we find one, we'll set the source to that slot
195186 event.sourceSlot = existingSlot
@@ -209,7 +200,7 @@ internal object RebarItemListener : Listener {
209200 }
210201 }
211202
212- val newSourceSlot = findRebarItemInInventory(event.player.inventory, blockRebarItem )
203+ val newSourceSlot = findRebarItemInInventory(event.player.inventory, blockSchema )
213204 if (newSourceSlot == null ) {
214205 // should never happen but you never know
215206 event.isCancelled = true
@@ -218,14 +209,6 @@ internal object RebarItemListener : Listener {
218209
219210 event.sourceSlot = newSourceSlot
220211 event.targetSlot = event.player.inventory.heldItemSlot
221-
222- // don't question this idk wtf is going on - seems we have to manually do the swap in the hotbar
223- if (sourceSlot <= 8 ) {
224- val source = event.player.inventory.getItem(event.sourceSlot)
225- val target = event.player.inventory.getItem(event.targetSlot)
226- event.player.inventory.setItem(event.sourceSlot, target)
227- event.player.inventory.setItem(event.targetSlot, source)
228- }
229212 }
230213
231214 @JvmSynthetic
0 commit comments