3131import net .minecraft .common .block .container .Slot ;
3232import net .minecraft .common .entity .Entity ;
3333import net .minecraft .common .entity .player .EntityPlayer ;
34+ import net .minecraft .common .entity .player .InventoryPlayer ;
3435import net .minecraft .common .item .ItemStack ;
3536import net .minecraft .common .networking .Packet103SetSlot ;
3637import 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