Fixed Picked Up floor items

This commit is contained in:
Stankman 2023-08-07 14:40:56 -05:00
parent 15061113f4
commit 59290bae8d
2 changed files with 100 additions and 87 deletions

View File

@ -137,83 +137,89 @@ public class RoomItemManager {
} }
} }
public void removeRoomItem(RoomItem item) { public void removeRoomItem(RoomItem roomItem) {
if (item != null) { if (roomItem != null) {
RoomItem i; RoomItem removedItem;
synchronized (this.currentItems) { synchronized (this.currentItems) {
i = this.currentItems.remove(item.getId()); removedItem = this.currentItems.remove(roomItem.getId());
} }
if (i != null) { if(removedItem.getBaseItem().getType().equals(FurnitureType.FLOOR)) {
if (item instanceof ICycleable) { this.floorItems.remove(removedItem.getId());
this.removeCycleTask((ICycleable) item); } else if (removedItem.getBaseItem().getType().equals(FurnitureType.WALL)) {
this.wallItems.remove(removedItem.getId());
} }
if (item instanceof InteractionWired wired) { if (removedItem != null) {
if (roomItem instanceof ICycleable) {
this.removeCycleTask((ICycleable) roomItem);
}
if (roomItem instanceof InteractionWired wired) {
this.wiredManager.removeWired(wired); this.wiredManager.removeWired(wired);
} else if (item instanceof InteractionBattleBanzaiTeleporter) { } else if (roomItem instanceof InteractionBattleBanzaiTeleporter) {
this.removeBanzaiTeleporter((InteractionBattleBanzaiTeleporter) item); this.removeBanzaiTeleporter((InteractionBattleBanzaiTeleporter) roomItem);
} else if (item instanceof InteractionRoller) { } else if (roomItem instanceof InteractionRoller) {
this.removeRoller((InteractionRoller) item); this.removeRoller((InteractionRoller) roomItem);
} else if (item instanceof InteractionGameScoreboard) { } else if (roomItem instanceof InteractionGameScoreboard) {
this.removeScoreboard((InteractionGameScoreboard) item); this.removeScoreboard((InteractionGameScoreboard) roomItem);
} else if (item instanceof InteractionGameGate) { } else if (roomItem instanceof InteractionGameGate) {
this.removeGameGate((InteractionGameGate) item); this.removeGameGate((InteractionGameGate) roomItem);
} else if (item instanceof InteractionGameTimer) { } else if (roomItem instanceof InteractionGameTimer) {
this.removeGameTimer((InteractionGameTimer) item); this.removeGameTimer((InteractionGameTimer) roomItem);
} else if (item instanceof InteractionFreezeExitTile) { } else if (roomItem instanceof InteractionFreezeExitTile) {
this.removeFreezeExitTile((InteractionFreezeExitTile) item); this.removeFreezeExitTile((InteractionFreezeExitTile) roomItem);
} else if (item instanceof InteractionNest) { } else if (roomItem instanceof InteractionNest) {
this.removeNest((InteractionNest) item); this.removeNest((InteractionNest) roomItem);
} else if (item instanceof InteractionPetDrink) { } else if (roomItem instanceof InteractionPetDrink) {
this.removePetDrink((InteractionPetDrink) item); this.removePetDrink((InteractionPetDrink) roomItem);
} else if (item instanceof InteractionPetFood) { } else if (roomItem instanceof InteractionPetFood) {
this.removePetFood((InteractionPetFood) item); this.removePetFood((InteractionPetFood) roomItem);
} else if (item instanceof InteractionPetToy) { } else if (roomItem instanceof InteractionPetToy) {
this.removePetToy((InteractionPetToy) item); this.removePetToy((InteractionPetToy) roomItem);
} else if (item instanceof InteractionPetTree) { } else if (roomItem instanceof InteractionPetTree) {
this.removeUndefined(item); this.removeUndefined(roomItem);
} else if (item instanceof InteractionPetTrampoline) { } else if (roomItem instanceof InteractionPetTrampoline) {
this.removeUndefined(item); this.removeUndefined(roomItem);
} else if (item instanceof InteractionMoodLight) { } else if (roomItem instanceof InteractionMoodLight) {
this.removeUndefined(item); this.removeUndefined(roomItem);
} else if (item instanceof InteractionPyramid) { } else if (roomItem instanceof InteractionPyramid) {
this.removeUndefined(item); this.removeUndefined(roomItem);
} else if (item instanceof InteractionMusicDisc) { } else if (roomItem instanceof InteractionMusicDisc) {
this.removeUndefined(item); this.removeUndefined(roomItem);
} else if (item instanceof InteractionBattleBanzaiSphere) { } else if (roomItem instanceof InteractionBattleBanzaiSphere) {
this.removeUndefined(item); this.removeUndefined(roomItem);
} else if (item instanceof InteractionTalkingFurniture) { } else if (roomItem instanceof InteractionTalkingFurniture) {
this.removeUndefined(item); this.removeUndefined(roomItem);
} else if (item instanceof InteractionWaterItem) { } else if (roomItem instanceof InteractionWaterItem) {
this.removeUndefined(item); this.removeUndefined(roomItem);
} else if (item instanceof InteractionWater) { } else if (roomItem instanceof InteractionWater) {
this.removeUndefined(item); this.removeUndefined(roomItem);
} else if (item instanceof InteractionMuteArea) { } else if (roomItem instanceof InteractionMuteArea) {
this.removeUndefined(item); this.removeUndefined(roomItem);
} else if (item instanceof InteractionTagPole) { } else if (roomItem instanceof InteractionTagPole) {
this.removeUndefined(item); this.removeUndefined(roomItem);
} else if (item instanceof InteractionTagField) { } else if (roomItem instanceof InteractionTagField) {
this.removeUndefined(item); this.removeUndefined(roomItem);
} else if (item instanceof InteractionJukeBox) { } else if (roomItem instanceof InteractionJukeBox) {
this.removeUndefined(item); this.removeUndefined(roomItem);
} else if (item instanceof InteractionPetBreedingNest) { } else if (roomItem instanceof InteractionPetBreedingNest) {
this.removeUndefined(item); this.removeUndefined(roomItem);
} else if (item instanceof InteractionBlackHole) { } else if (roomItem instanceof InteractionBlackHole) {
this.removeUndefined(item); this.removeUndefined(roomItem);
} else if (item instanceof InteractionWiredHighscore) { } else if (roomItem instanceof InteractionWiredHighscore) {
this.removeUndefined(item); this.removeUndefined(roomItem);
} else if (item instanceof InteractionStickyPole) { } else if (roomItem instanceof InteractionStickyPole) {
this.removeUndefined(item); this.removeUndefined(roomItem);
} else if (item instanceof WiredBlob) { } else if (roomItem instanceof WiredBlob) {
this.removeUndefined(item); this.removeUndefined(roomItem);
} else if (item instanceof InteractionTent) { } else if (roomItem instanceof InteractionTent) {
this.removeUndefined(item); this.removeUndefined(roomItem);
} else if (item instanceof InteractionSnowboardSlope) { } else if (roomItem instanceof InteractionSnowboardSlope) {
this.removeUndefined(item); this.removeUndefined(roomItem);
} else if (item instanceof InteractionBuildArea) { } else if (roomItem instanceof InteractionBuildArea) {
this.removeUndefined(item); this.removeUndefined(roomItem);
} }
} }
} }
@ -533,30 +539,31 @@ public class RoomItemManager {
return FurnitureMovementError.NONE; return FurnitureMovementError.NONE;
} }
public void pickUpItem(RoomItem item, Habbo picker) { public void pickUpItem(RoomItem roomItem, Habbo picker) {
if (item == null) if (roomItem == null) {
return; return;
}
if (Emulator.getPluginManager().isRegistered(FurniturePickedUpEvent.class, true)) { if (Emulator.getPluginManager().isRegistered(FurniturePickedUpEvent.class, true)) {
Event furniturePickedUpEvent = new FurniturePickedUpEvent(item, picker); Event furniturePickedUpEvent = new FurniturePickedUpEvent(roomItem, picker);
Emulator.getPluginManager().fireEvent(furniturePickedUpEvent); Emulator.getPluginManager().fireEvent(furniturePickedUpEvent);
if (furniturePickedUpEvent.isCancelled()) if (furniturePickedUpEvent.isCancelled())
return; return;
} }
this.removeRoomItem(item); this.removeRoomItem(roomItem);
item.onPickUp(this.room); roomItem.onPickUp(this.room);
//Deprecated //Deprecated
item.setRoomId(0); roomItem.setRoomId(0);
item.setRoom(null); roomItem.setRoom(null);
item.needsUpdate(true); roomItem.needsUpdate(true);
if (item.getBaseItem().getType() == FurnitureType.FLOOR) { if (roomItem.getBaseItem().getType() == FurnitureType.FLOOR) {
this.room.sendComposer(new RemoveFloorItemComposer(item).compose()); this.room.sendComposer(new RemoveFloorItemComposer(roomItem).compose());
THashSet<RoomTile> updatedTiles = new THashSet<>(); THashSet<RoomTile> updatedTiles = new THashSet<>();
Rectangle rectangle = RoomLayout.getRectangle(item.getCurrentPosition().getX(), item.getCurrentPosition().getY(), item.getBaseItem().getWidth(), item.getBaseItem().getLength(), item.getRotation()); Rectangle rectangle = RoomLayout.getRectangle(roomItem.getCurrentPosition().getX(), roomItem.getCurrentPosition().getY(), roomItem.getBaseItem().getWidth(), roomItem.getBaseItem().getLength(), roomItem.getRotation());
for (short x = (short) rectangle.x; x < rectangle.x + rectangle.getWidth(); x++) { for (short x = (short) rectangle.x; x < rectangle.x + rectangle.getWidth(); x++) {
for (short y = (short) rectangle.y; y < rectangle.y + rectangle.getHeight(); y++) { for (short y = (short) rectangle.y; y < rectangle.y + rectangle.getHeight(); y++) {
@ -569,24 +576,26 @@ public class RoomItemManager {
} }
} }
} }
this.room.sendComposer(new HeightMapUpdateMessageComposer(this.room, updatedTiles).compose()); this.room.sendComposer(new HeightMapUpdateMessageComposer(this.room, updatedTiles).compose());
this.room.updateTiles(updatedTiles); this.room.updateTiles(updatedTiles);
updatedTiles.forEach(tile -> { updatedTiles.forEach(tile -> {
this.room.getRoomUnitManager().updateHabbosAt(tile); this.room.getRoomUnitManager().updateHabbosAt(tile);
this.room.getRoomUnitManager().updateBotsAt(tile); this.room.getRoomUnitManager().updateBotsAt(tile);
}); });
} else if (item.getBaseItem().getType() == FurnitureType.WALL) { } else if (roomItem.getBaseItem().getType() == FurnitureType.WALL) {
this.room.sendComposer(new ItemRemoveMessageComposer(item).compose()); this.room.sendComposer(new ItemRemoveMessageComposer(roomItem).compose());
} }
Habbo habbo; Habbo habbo;
habbo = picker != null && picker.getHabboInfo().getId() == item.getId() ? (picker) : (Emulator.getGameServer().getGameClientManager().getHabbo(item.getOwnerInfo().getId())); habbo = picker != null && picker.getHabboInfo().getId() == roomItem.getId() ? (picker) : (Emulator.getGameServer().getGameClientManager().getHabbo(roomItem.getOwnerInfo().getId()));
if (habbo != null) { if (habbo != null) {
habbo.getInventory().getItemsComponent().addItem(item); habbo.getInventory().getItemsComponent().addItem(roomItem);
habbo.getClient().sendResponse(new UnseenItemsComposer(item)); habbo.getClient().sendResponse(new UnseenItemsComposer(roomItem));
habbo.getClient().sendResponse(new FurniListInvalidateComposer()); habbo.getClient().sendResponse(new FurniListInvalidateComposer());
} }
Emulator.getThreading().run(item); Emulator.getThreading().run(roomItem);
} }
public void ejectUserItem(RoomItem item) { public void ejectUserItem(RoomItem item) {
@ -1098,6 +1107,9 @@ public class RoomItemManager {
this.currentItems.remove(roomItem.getId()); this.currentItems.remove(roomItem.getId());
}); });
this.floorItems.clear();
this.wallItems.clear();
this.currentItems.clear(); this.currentItems.clear();
} }
} }

View File

@ -594,6 +594,7 @@ public class RoomManager {
habbo.getClient().sendResponse(new OpenConnectionMessageComposer()); habbo.getClient().sendResponse(new OpenConnectionMessageComposer());
//@Deprecated
roomHabbo.setInRoom(true); roomHabbo.setInRoom(true);
if (!habbo.getHabboStats().isBlockFollowing() && roomHabbo.getRoom() == null) { if (!habbo.getHabboStats().isBlockFollowing() && roomHabbo.getRoom() == null) {