Skip to content

Commit c5073a1

Browse files
committed
Update item properly on event cancellation.
1 parent 962a7e4 commit c5073a1

File tree

6 files changed

+60
-18
lines changed

6 files changed

+60
-18
lines changed

loader/src/main/java/com/fox2code/foxloader/event/interaction/PlayerUseItem.java renamed to loader/src/main/java/com/fox2code/foxloader/event/interaction/PlayerUseItemEvent.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,10 +31,10 @@
3131
import org.jetbrains.annotations.Nullable;
3232

3333
@Event.DelegateEvent
34-
public abstract class PlayerUseItem extends PlayerEvent implements Event.Cancellable {
34+
public abstract class PlayerUseItemEvent extends PlayerEvent implements Event.Cancellable {
3535
private final ItemStack heldItem;
3636

37-
public PlayerUseItem(@NotNull EntityPlayer entityPlayer, @Nullable ItemStack heldItem) {
37+
public PlayerUseItemEvent(@NotNull EntityPlayer entityPlayer, @Nullable ItemStack heldItem) {
3838
super(entityPlayer);
3939
this.heldItem = heldItem;
4040
}

loader/src/main/java/com/fox2code/foxloader/event/interaction/PlayerUseItemOnAirEvent.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
import org.jetbrains.annotations.Nullable;
3131

3232
@Event.DelegateEvent
33-
public final class PlayerUseItemOnAirEvent extends PlayerUseItem {
33+
public final class PlayerUseItemOnAirEvent extends PlayerUseItemEvent {
3434
public PlayerUseItemOnAirEvent(@NotNull EntityPlayer entityPlayer, @Nullable ItemStack heldItem) {
3535
super(entityPlayer, heldItem);
3636
}

loader/src/main/java/com/fox2code/foxloader/event/interaction/PlayerUseItemOnBlockEvent.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
import org.jetbrains.annotations.Nullable;
3131

3232
@Event.DelegateEvent
33-
public final class PlayerUseItemOnBlockEvent extends PlayerUseItem {
33+
public final class PlayerUseItemOnBlockEvent extends PlayerUseItemEvent {
3434
private final int x, y, z, facing;
3535
private final float xOffset, yOffset, zOffset;
3636

loader/src/main/java/com/fox2code/foxloader/event/interaction/PlayerUseItemOnEntityEvent.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131
import org.jetbrains.annotations.Nullable;
3232

3333
@Event.DelegateEvent
34-
public final class PlayerUseItemOnEntityEvent extends PlayerUseItem {
34+
public final class PlayerUseItemOnEntityEvent extends PlayerUseItemEvent {
3535
private final Entity target;
3636

3737
public PlayerUseItemOnEntityEvent(@NotNull EntityPlayer entityPlayer, @Nullable ItemStack heldItem,@NotNull Entity target) {

loader/src/main/java/com/fox2code/foxloader/event/inventory/PlayerDropItemEvent.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,15 +34,16 @@
3434
public final class PlayerDropItemEvent extends PlayerEvent implements Event.Cancellable {
3535
private final ItemStack itemToDrop;
3636
private final int slotId, maxAmountToDrop;
37-
private final boolean creative;
37+
private final boolean creative, hotbar;
3838

3939
public PlayerDropItemEvent(@NotNull EntityPlayer entityPlayer, @NotNull ItemStack itemToDrop,
40-
int slotId, int maxAmountToDrop, boolean creative) {
40+
int slotId, int maxAmountToDrop, boolean creative, boolean hotbar) {
4141
super(entityPlayer);
4242
this.itemToDrop = Objects.requireNonNull(itemToDrop);
4343
this.slotId = slotId;
4444
this.maxAmountToDrop = maxAmountToDrop;
4545
this.creative = creative;
46+
this.hotbar = hotbar;
4647
}
4748

4849
public @NotNull ItemStack getItemToDrop() {
@@ -64,4 +65,8 @@ public int getSlotId() {
6465
public boolean isCreative() {
6566
return this.creative;
6667
}
68+
69+
public boolean isHotbar() {
70+
return this.hotbar;
71+
}
6772
}

loader/src/main/java/com/fox2code/foxloader/internal/InternalInteractionHooks.java

Lines changed: 48 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
import net.minecraft.common.block.container.Slot;
3232
import net.minecraft.common.entity.Entity;
3333
import net.minecraft.common.entity.player.EntityPlayer;
34+
import net.minecraft.common.entity.player.InventoryPlayer;
3435
import net.minecraft.common.item.ItemStack;
3536
import net.minecraft.common.networking.Packet103SetSlot;
3637
import net.minecraft.common.util.math.Vec3D;
@@ -77,6 +78,7 @@ public static boolean sendPlayerBreakBlockEvent(
7778
PlayerBreakBlockEvent playerStartBreakBlockEvent = new PlayerBreakBlockEvent(
7879
entityPlayer, x, y, z, entityPlayer.inventory.getCurrentItem());
7980
PLAYER_BREAK_BLOCK_EVENT.callEvent(playerStartBreakBlockEvent);
81+
updateSlotItemIfCancelled(playerStartBreakBlockEvent);
8082
return playerStartBreakBlockEvent.isCancelled();
8183
}
8284

@@ -93,6 +95,7 @@ public static boolean sendPlayerUseItemOnAirEvent(
9395
PlayerUseItemOnAirEvent playerUseItemOnAirEvent =
9496
new PlayerUseItemOnAirEvent(player, itemStack);
9597
PLAYER_USE_ITEM_ON_AIR_EVENT.callEvent(playerUseItemOnAirEvent);
98+
updateSlotItemIfCancelled(playerUseItemOnAirEvent);
9699
return playerUseItemOnAirEvent.isCancelled();
97100
}
98101

@@ -103,6 +106,7 @@ public static boolean sendPlayerUseItemOnBlockEvent(
103106
PlayerUseItemOnBlockEvent playerUseItemOnBlockEvent = new PlayerUseItemOnBlockEvent(
104107
player, itemstack, x, y, z, facing, xVec, yVec, zVec);
105108
PLAYER_USE_ITEM_ON_BLOCK_EVENT.callEvent(playerUseItemOnBlockEvent);
109+
updateSlotItemIfCancelled(playerUseItemOnBlockEvent);
106110
return playerUseItemOnBlockEvent.isCancelled();
107111
}
108112

@@ -111,6 +115,7 @@ public static boolean sendPlayerUseItemOnEntityEvent(EntityPlayer player, Entity
111115
PlayerUseItemOnEntityEvent playerUseItemOnEntityEvent =
112116
new PlayerUseItemOnEntityEvent(player, player.inventory.getCurrentItem(), target);
113117
PLAYER_USE_ITEM_ON_ENTITY_EVENT.callEvent(playerUseItemOnEntityEvent);
118+
updateSlotItemIfCancelled(playerUseItemOnEntityEvent);
114119
return playerUseItemOnEntityEvent.isCancelled();
115120
}
116121

@@ -148,7 +153,7 @@ public static boolean onHandleClickSlot(Container container, int slotId, int mou
148153
slotId < container.slots.size() && (slot = container.getSlot(slotId)) != null &&
149154
(slotStack = slot.getStack()) != null) {
150155
PlayerDropItemEvent playerDropItemEvent = new PlayerDropItemEvent(
151-
player, slotStack, slotId, mouseButton == 0 ? 64 : 1, false);
156+
player, slotStack, slotId, mouseButton == 0 ? 64 : 1, false, false);
152157
PLAYER_DROP_ITEM_EVENT.callEvent(playerDropItemEvent);
153158
updateSlotItemIfCancelled(playerDropItemEvent);
154159
return playerDropItemEvent.isCancelled();
@@ -159,7 +164,7 @@ public static boolean onHandleClickSlot(Container container, int slotId, int mou
159164
public static boolean onDropCurrentItem(EntityPlayer player) {
160165
if (PLAYER_DROP_ITEM_EVENT.isEmpty()) return false;
161166
PlayerDropItemEvent playerDropItemEvent = new PlayerDropItemEvent(
162-
player, player.inventory.getCurrentItem(), player.inventory.currentItem, 1, false);
167+
player, player.inventory.getCurrentItem(), player.inventory.currentItem, 1, false, true);
163168
PLAYER_DROP_ITEM_EVENT.callEvent(playerDropItemEvent);
164169
updateSlotItemIfCancelled(playerDropItemEvent);
165170
return playerDropItemEvent.isCancelled();
@@ -168,7 +173,7 @@ public static boolean onDropCurrentItem(EntityPlayer player) {
168173
public static boolean onDropCurrentItemStack(EntityPlayer player) {
169174
if (PLAYER_DROP_ITEM_EVENT.isEmpty()) return false;
170175
PlayerDropItemEvent playerDropItemEvent = new PlayerDropItemEvent(
171-
player, player.inventory.getCurrentItem(), player.inventory.currentItem, 64, false);
176+
player, player.inventory.getCurrentItem(), player.inventory.currentItem, 64, false, true);
172177
PLAYER_DROP_ITEM_EVENT.callEvent(playerDropItemEvent);
173178
updateSlotItemIfCancelled(playerDropItemEvent);
174179
return playerDropItemEvent.isCancelled();
@@ -177,7 +182,7 @@ public static boolean onDropCurrentItemStack(EntityPlayer player) {
177182
public static boolean onDropCursorItem(EntityPlayer player) {
178183
if (PLAYER_DROP_ITEM_EVENT.isEmpty()) return false;
179184
PlayerDropItemEvent playerDropItemEvent = new PlayerDropItemEvent(
180-
player, player.inventory.getCursorStack(), -999, 1, false);
185+
player, player.inventory.getCursorStack(), -999, 1, false, false);
181186
PLAYER_DROP_ITEM_EVENT.callEvent(playerDropItemEvent);
182187
updateSlotItemIfCancelled(playerDropItemEvent);
183188
return playerDropItemEvent.isCancelled();
@@ -186,7 +191,7 @@ public static boolean onDropCursorItem(EntityPlayer player) {
186191
public static boolean onDropCursorItemStack(EntityPlayer player) {
187192
if (PLAYER_DROP_ITEM_EVENT.isEmpty()) return false;
188193
PlayerDropItemEvent playerDropItemEvent = new PlayerDropItemEvent(
189-
player, player.inventory.getCursorStack(), -999, 64, false);
194+
player, player.inventory.getCursorStack(), -999, 64, false, false);
190195
PLAYER_DROP_ITEM_EVENT.callEvent(playerDropItemEvent);
191196
updateSlotItemIfCancelled(playerDropItemEvent);
192197
return playerDropItemEvent.isCancelled();
@@ -195,19 +200,51 @@ public static boolean onDropCursorItemStack(EntityPlayer player) {
195200
public static boolean onDropCreativeItemStack(EntityPlayer player, ItemStack itemStack) {
196201
if (PLAYER_DROP_ITEM_EVENT.isEmpty()) return false;
197202
PlayerDropItemEvent playerDropItemEvent = new PlayerDropItemEvent(
198-
player, itemStack, -999, 64, true);
203+
player, itemStack, -999, 64, true, false);
199204
PLAYER_DROP_ITEM_EVENT.callEvent(playerDropItemEvent);
200205
return playerDropItemEvent.isCancelled();
201206
}
202207

208+
private static void updateSlotItemIfCancelled(PlayerUseItemEvent playerUseItemEvent) {
209+
if (playerUseItemEvent.isCancelled() && playerUseItemEvent.getHeldItem() != null) {
210+
updateHotbarSlotItem(playerUseItemEvent.getEntityPlayer(), playerUseItemEvent.getHeldItem(),
211+
playerUseItemEvent.getEntityPlayer().inventory.currentItem);
212+
}
213+
}
214+
215+
private static void updateSlotItemIfCancelled(PlayerBreakBlockEvent playerBreakBlockEvent) {
216+
if (playerBreakBlockEvent.isCancelled()) {
217+
InventoryPlayer inventoryPlayer = playerBreakBlockEvent.getEntitySource().inventory;
218+
updateHotbarSlotItem(playerBreakBlockEvent.getEntitySource(),
219+
inventoryPlayer.getCurrentItem(), inventoryPlayer.currentItem);
220+
}
221+
}
222+
203223
private static void updateSlotItemIfCancelled(PlayerDropItemEvent playerDropItemEvent) {
204-
int slotId = playerDropItemEvent.getSlotId();
205-
EntityPlayer entityPlayer = playerDropItemEvent.getEntityPlayer();
206-
if (playerDropItemEvent.isCancelled() && entityPlayer instanceof EntityPlayerMP) {
224+
if (playerDropItemEvent.isCancelled()) {
225+
if (playerDropItemEvent.isHotbar()) {
226+
updateHotbarSlotItem(playerDropItemEvent.getEntityPlayer(),
227+
playerDropItemEvent.getItemToDrop(), playerDropItemEvent.getSlotId());
228+
} else {
229+
updateSlotItem(playerDropItemEvent.getEntityPlayer(),
230+
playerDropItemEvent.getItemToDrop(), playerDropItemEvent.getSlotId());
231+
}
232+
}
233+
}
234+
235+
private static void updateSlotItem(EntityPlayer entityPlayer, ItemStack itemStack, int slotId) {
236+
if (entityPlayer instanceof EntityPlayerMP) {
237+
((EntityPlayerMP) entityPlayer).playerNetServerHandler.sendPacket(slotId == -999 ?
238+
new Packet103SetSlot(-1, -1, entityPlayer.inventory.getCursorStack()) :
239+
new Packet103SetSlot(((EntityPlayerMP) entityPlayer).currentWindowId, slotId, itemStack));
240+
}
241+
}
242+
243+
private static void updateHotbarSlotItem(EntityPlayer entityPlayer, ItemStack itemStack, int slotId) {
244+
if (entityPlayer instanceof EntityPlayerMP) {
207245
((EntityPlayerMP) entityPlayer).playerNetServerHandler.sendPacket(slotId == -999 ?
208246
new Packet103SetSlot(-1, -1, entityPlayer.inventory.getCursorStack()) :
209-
new Packet103SetSlot(((EntityPlayerMP) entityPlayer).currentWindowId,
210-
slotId, playerDropItemEvent.getItemToDrop()));
247+
new Packet103SetSlot(0, slotId < 36 ? 36 + slotId : slotId, itemStack));
211248
}
212249
}
213250
}

0 commit comments

Comments
 (0)