From 9d2347cb9f48e788493ca2df2d35fa1fac39d642 Mon Sep 17 00:00:00 2001 From: Ilany Date: Thu, 17 Sep 2020 19:10:36 +0200 Subject: [PATCH 1/9] Fixed wired trigger for one way gates --- .../items/interactions/InteractionOneWayGate.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionOneWayGate.java b/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionOneWayGate.java index 844b042e..b2caee6d 100644 --- a/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionOneWayGate.java +++ b/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionOneWayGate.java @@ -7,6 +7,8 @@ import com.eu.habbo.habbohotel.rooms.Room; import com.eu.habbo.habbohotel.rooms.RoomTile; import com.eu.habbo.habbohotel.rooms.RoomUnit; import com.eu.habbo.habbohotel.users.HabboItem; +import com.eu.habbo.habbohotel.wired.WiredHandler; +import com.eu.habbo.habbohotel.wired.WiredTriggerType; import com.eu.habbo.messages.ServerMessage; import com.eu.habbo.messages.outgoing.rooms.items.ItemIntStateComposer; import com.eu.habbo.threading.runnables.RoomUnitWalkToLocation; @@ -74,7 +76,6 @@ public class InteractionOneWayGate extends HabboItem { if (unit == null) return; - if (tileInfront.x == unit.getX() && tileInfront.y == unit.getY()) { if (!currentLocation.hasUnits()) { List onSuccess = new ArrayList(); @@ -102,7 +103,8 @@ public class InteractionOneWayGate extends HabboItem { unit.setGoalLocation(currentLocation); Emulator.getThreading().run(new RoomUnitWalkToLocation(unit, currentLocation, room, onSuccess, onFail)); room.sendComposer(new ItemIntStateComposer(this.getId(), 1).compose()); - + super.onWalkOn(unit, room, objects); + /* room.scheduledTasks.add(new Runnable() { From 35988378b7a6e3ec8525af2b958d528bb79ff366 Mon Sep 17 00:00:00 2001 From: Ilany Date: Thu, 17 Sep 2020 19:15:52 +0200 Subject: [PATCH 2/9] Cleanup imports --- .../habbohotel/items/interactions/InteractionOneWayGate.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionOneWayGate.java b/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionOneWayGate.java index b2caee6d..b1fe8b27 100644 --- a/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionOneWayGate.java +++ b/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionOneWayGate.java @@ -7,8 +7,6 @@ import com.eu.habbo.habbohotel.rooms.Room; import com.eu.habbo.habbohotel.rooms.RoomTile; import com.eu.habbo.habbohotel.rooms.RoomUnit; import com.eu.habbo.habbohotel.users.HabboItem; -import com.eu.habbo.habbohotel.wired.WiredHandler; -import com.eu.habbo.habbohotel.wired.WiredTriggerType; import com.eu.habbo.messages.ServerMessage; import com.eu.habbo.messages.outgoing.rooms.items.ItemIntStateComposer; import com.eu.habbo.threading.runnables.RoomUnitWalkToLocation; @@ -104,7 +102,7 @@ public class InteractionOneWayGate extends HabboItem { Emulator.getThreading().run(new RoomUnitWalkToLocation(unit, currentLocation, room, onSuccess, onFail)); room.sendComposer(new ItemIntStateComposer(this.getId(), 1).compose()); super.onWalkOn(unit, room, objects); - + /* room.scheduledTasks.add(new Runnable() { From e7a090d9fc4d0c269a7ce7d2510c5987ee0f54a5 Mon Sep 17 00:00:00 2001 From: Remco Date: Sat, 26 Sep 2020 17:52:53 +0200 Subject: [PATCH 3/9] Fix branch state --- .../habbohotel/items/interactions/InteractionOneWayGate.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionOneWayGate.java b/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionOneWayGate.java index 4977f95c..01257bea 100644 --- a/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionOneWayGate.java +++ b/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionOneWayGate.java @@ -81,6 +81,7 @@ public class InteractionOneWayGate extends HabboItem { if (unit == null) return; + if (tileInfront.x == unit.getX() && tileInfront.y == unit.getY()) { if (!currentLocation.hasUnits()) { List onSuccess = new ArrayList(); @@ -110,7 +111,6 @@ public class InteractionOneWayGate extends HabboItem { unit.setGoalLocation(currentLocation); Emulator.getThreading().run(new RoomUnitWalkToLocation(unit, currentLocation, room, onSuccess, onFail)); room.sendComposer(new ItemIntStateComposer(this.getId(), 1).compose()); - super.onWalkOn(unit, room, objects); /* room.scheduledTasks.add(new Runnable() From 3353b822e4b68779e7380cfe9fc040a92636dcfc Mon Sep 17 00:00:00 2001 From: Remco Date: Mon, 23 Nov 2020 11:53:12 +0100 Subject: [PATCH 4/9] Added costumegate interaction and refactored other conditional gates --- .../habbo/habbohotel/items/ItemManager.java | 1 + .../interactions/InteractionCostumeGate.java | 108 ++++++++++++++++++ .../interactions/InteractionGuildGate.java | 8 +- .../InteractionHabboClubGate.java | 21 ++-- .../interfaces/ConditionalGate.java | 8 ++ .../eu/habbo/habbohotel/rooms/RoomUnit.java | 13 +-- .../habbo/threading/runnables/CloseGate.java | 16 +-- 7 files changed, 149 insertions(+), 26 deletions(-) create mode 100644 src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionCostumeGate.java create mode 100644 src/main/java/com/eu/habbo/habbohotel/items/interactions/interfaces/ConditionalGate.java diff --git a/src/main/java/com/eu/habbo/habbohotel/items/ItemManager.java b/src/main/java/com/eu/habbo/habbohotel/items/ItemManager.java index 3da8125f..2f258100 100644 --- a/src/main/java/com/eu/habbo/habbohotel/items/ItemManager.java +++ b/src/main/java/com/eu/habbo/habbohotel/items/ItemManager.java @@ -141,6 +141,7 @@ public class ItemManager { this.interactionsList.add(new ItemInteraction("puzzle_box", InteractionPuzzleBox.class)); this.interactionsList.add(new ItemInteraction("hopper", InteractionHopper.class)); this.interactionsList.add(new ItemInteraction("costume_hopper", InteractionCostumeHopper.class)); + this.interactionsList.add(new ItemInteraction("costume_gate", InteractionCostumeGate.class)); this.interactionsList.add(new ItemInteraction("club_hopper", InteractionHabboClubHopper.class)); this.interactionsList.add(new ItemInteraction("club_gate", InteractionHabboClubGate.class)); this.interactionsList.add(new ItemInteraction("club_teleporttile", InteractionHabboClubTeleportTile.class)); diff --git a/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionCostumeGate.java b/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionCostumeGate.java new file mode 100644 index 00000000..8e6b775d --- /dev/null +++ b/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionCostumeGate.java @@ -0,0 +1,108 @@ +package com.eu.habbo.habbohotel.items.interactions; + +import com.eu.habbo.Emulator; +import com.eu.habbo.habbohotel.gameclients.GameClient; +import com.eu.habbo.habbohotel.items.Item; +import com.eu.habbo.habbohotel.items.interactions.interfaces.ConditionalGate; +import com.eu.habbo.habbohotel.rooms.Room; +import com.eu.habbo.habbohotel.rooms.RoomTile; +import com.eu.habbo.habbohotel.rooms.RoomUnit; +import com.eu.habbo.habbohotel.rooms.RoomUnitStatus; +import com.eu.habbo.habbohotel.users.Habbo; +import com.eu.habbo.habbohotel.users.HabboItem; +import com.eu.habbo.messages.ServerMessage; +import com.eu.habbo.messages.outgoing.generic.alerts.CustomNotificationComposer; +import com.eu.habbo.messages.outgoing.rooms.users.RoomUserStatusComposer; +import com.eu.habbo.threading.runnables.CloseGate; + +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.Arrays; +import java.util.List; + +public class InteractionCostumeGate extends InteractionDefault implements ConditionalGate { + public InteractionCostumeGate(ResultSet set, Item baseItem) throws SQLException { + super(set, baseItem); + this.setExtradata("0"); + } + + public InteractionCostumeGate(int id, int userId, Item item, String extradata, int limitedStack, int limitedSells) { + super(id, userId, item, extradata, limitedStack, limitedSells); + this.setExtradata("0"); + } + + @Override + public boolean isWalkable() { + return true; + } + + @Override + public boolean canWalkOn(RoomUnit roomUnit, Room room, Object[] objects) { + if (roomUnit == null || room == null) + return false; + + Habbo habbo = room.getHabbo(roomUnit); + + if (habbo != null && habbo.getHabboInfo() != null) { + /* + * Get all figureparts. Figureparts are seperated by dots and each figurepart has this format: + * figureType-partID-colorID1-colorID2...-colorIDn + */ + List figureParts = Arrays.asList(habbo.getHabboInfo().getLook().split("\\.")); + + List allowedPartIds = Arrays.asList(Emulator.getConfig() + .getValue("hotel.item.condition.costume.partids") + .split(";") + ); + + // Check if at least one of the figureparts is configured as a costume and thus allowed + return figureParts.stream().anyMatch(figurePart -> { + String[] partInfo = figurePart.split("-"); + if (partInfo.length >= 2) { + String partID = partInfo[1]; // index 0 is the part, index 1 is the ID + return allowedPartIds.contains(partID); + } + return false; + }); + } + return false; + } + + @Override + public void onWalkOn(RoomUnit roomUnit, Room room, Object[] objects) throws Exception { + super.onWalkOn(roomUnit, room, objects); + + if (this.canWalkOn(roomUnit, room, objects)) { + this.setExtradata("1"); + room.updateItemState(this); + } + } + + @Override + public void onClick(GameClient client, Room room, Object[] objects) throws Exception { + if (client != null) { + if (this.canWalkOn(client.getHabbo().getRoomUnit(), room, null)) { + super.onClick(client, room, objects); + } else { + client.sendResponse(new CustomNotificationComposer(CustomNotificationComposer.GATE_NO_HC)); + } + } + } + + @Override + public void onWalkOff(RoomUnit roomUnit, Room room, Object[] objects) throws Exception { + super.onWalkOff(roomUnit, room, objects); + + Emulator.getThreading().run(new CloseGate(this, room), 1000); + } + + @Override + public void onRejected(RoomUnit roomUnit, Room room, Object[] objects) { + if (roomUnit == null || room == null) + return; + + room.getHabbo(roomUnit).getClient().sendResponse( + new CustomNotificationComposer(CustomNotificationComposer.HOPPER_NO_COSTUME) + ); + } +} diff --git a/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionGuildGate.java b/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionGuildGate.java index 176ae78d..41290215 100644 --- a/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionGuildGate.java +++ b/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionGuildGate.java @@ -3,6 +3,7 @@ package com.eu.habbo.habbohotel.items.interactions; import com.eu.habbo.Emulator; import com.eu.habbo.habbohotel.gameclients.GameClient; import com.eu.habbo.habbohotel.items.Item; +import com.eu.habbo.habbohotel.items.interactions.interfaces.ConditionalGate; import com.eu.habbo.habbohotel.permissions.Permission; import com.eu.habbo.habbohotel.rooms.Room; import com.eu.habbo.habbohotel.rooms.RoomTile; @@ -13,7 +14,7 @@ import com.eu.habbo.threading.runnables.CloseGate; import java.sql.ResultSet; import java.sql.SQLException; -public class InteractionGuildGate extends InteractionGuildFurni { +public class InteractionGuildGate extends InteractionGuildFurni implements ConditionalGate { public InteractionGuildGate(ResultSet set, Item baseItem) throws SQLException { super(set, baseItem); this.setExtradata("0"); @@ -61,4 +62,9 @@ public class InteractionGuildGate extends InteractionGuildFurni { this.setExtradata("0"); room.updateItemState(this); } + + @Override + public void onRejected(RoomUnit roomUnit, Room room, Object[] objects) { + + } } diff --git a/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionHabboClubGate.java b/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionHabboClubGate.java index f9aa57dc..f356d4d3 100644 --- a/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionHabboClubGate.java +++ b/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionHabboClubGate.java @@ -3,6 +3,7 @@ package com.eu.habbo.habbohotel.items.interactions; import com.eu.habbo.Emulator; import com.eu.habbo.habbohotel.gameclients.GameClient; import com.eu.habbo.habbohotel.items.Item; +import com.eu.habbo.habbohotel.items.interactions.interfaces.ConditionalGate; import com.eu.habbo.habbohotel.rooms.Room; import com.eu.habbo.habbohotel.rooms.RoomUnit; import com.eu.habbo.habbohotel.users.Habbo; @@ -12,7 +13,7 @@ import com.eu.habbo.threading.runnables.CloseGate; import java.sql.ResultSet; import java.sql.SQLException; -public class InteractionHabboClubGate extends InteractionDefault { +public class InteractionHabboClubGate extends InteractionDefault implements ConditionalGate { public InteractionHabboClubGate(ResultSet set, Item baseItem) throws SQLException { super(set, baseItem); this.setExtradata("0"); @@ -42,14 +43,6 @@ public class InteractionHabboClubGate extends InteractionDefault { if (this.canWalkOn(roomUnit, room, objects)) { this.setExtradata("1"); room.updateItemState(this); - } else { - Habbo habbo = room.getHabbo(roomUnit); - - if (habbo != null) { - habbo.getClient().sendResponse(new CustomNotificationComposer(CustomNotificationComposer.GATE_NO_HC)); - } - - roomUnit.setGoalLocation(roomUnit.getCurrentLocation()); } } @@ -70,4 +63,14 @@ public class InteractionHabboClubGate extends InteractionDefault { Emulator.getThreading().run(new CloseGate(this, room), 1000); } + + @Override + public void onRejected(RoomUnit roomUnit, Room room, Object[] objects) { + if (roomUnit == null || room == null) + return; + + room.getHabbo(roomUnit).getClient().sendResponse( + new CustomNotificationComposer(CustomNotificationComposer.GATE_NO_HC) + ); + } } diff --git a/src/main/java/com/eu/habbo/habbohotel/items/interactions/interfaces/ConditionalGate.java b/src/main/java/com/eu/habbo/habbohotel/items/interactions/interfaces/ConditionalGate.java new file mode 100644 index 00000000..3f1b06cb --- /dev/null +++ b/src/main/java/com/eu/habbo/habbohotel/items/interactions/interfaces/ConditionalGate.java @@ -0,0 +1,8 @@ +package com.eu.habbo.habbohotel.items.interactions.interfaces; + +import com.eu.habbo.habbohotel.rooms.Room; +import com.eu.habbo.habbohotel.rooms.RoomUnit; + +public interface ConditionalGate { + public void onRejected(RoomUnit roomUnit, Room room, Object[] objects); +} diff --git a/src/main/java/com/eu/habbo/habbohotel/rooms/RoomUnit.java b/src/main/java/com/eu/habbo/habbohotel/rooms/RoomUnit.java index 91843d65..6d5fb068 100644 --- a/src/main/java/com/eu/habbo/habbohotel/rooms/RoomUnit.java +++ b/src/main/java/com/eu/habbo/habbohotel/rooms/RoomUnit.java @@ -3,10 +3,8 @@ package com.eu.habbo.habbohotel.rooms; import com.eu.habbo.Emulator; import com.eu.habbo.habbohotel.bots.Bot; import com.eu.habbo.habbohotel.items.Item; -import com.eu.habbo.habbohotel.items.interactions.InteractionGuildGate; -import com.eu.habbo.habbohotel.items.interactions.InteractionHabboClubGate; -import com.eu.habbo.habbohotel.items.interactions.InteractionWater; -import com.eu.habbo.habbohotel.items.interactions.InteractionWaterItem; +import com.eu.habbo.habbohotel.items.interactions.*; +import com.eu.habbo.habbohotel.items.interactions.interfaces.ConditionalGate; import com.eu.habbo.habbohotel.pets.Pet; import com.eu.habbo.habbohotel.pets.RideablePet; import com.eu.habbo.habbohotel.users.DanceType; @@ -301,17 +299,16 @@ public class RoomUnit { if (item != habboItem || !RoomLayout.pointInSquare(item.getX(), item.getY(), item.getX() + item.getBaseItem().getWidth() - 1, item.getY() + item.getBaseItem().getLength() - 1, this.getX(), this.getY())) { if (item.canWalkOn(this, room, null)) { item.onWalkOn(this, room, new Object[]{this.getCurrentLocation(), next}); - } else if (item instanceof InteractionGuildGate || item instanceof InteractionHabboClubGate) { + } else if (item instanceof ConditionalGate) { this.setRotation(oldRotation); this.tilesWalked--; this.setGoalLocation(this.currentLocation); this.status.remove(RoomUnitStatus.MOVE); room.sendComposer(new RoomUserStatusComposer(this).compose()); - if (item instanceof InteractionHabboClubGate && habbo != null) { - habbo.getClient().sendResponse(new CustomNotificationComposer(CustomNotificationComposer.GATE_NO_HC)); + if (habbo != null) { + ((ConditionalGate) item).onRejected(this, this.getRoom(), new Object[]{}); } - return false; } } else { diff --git a/src/main/java/com/eu/habbo/threading/runnables/CloseGate.java b/src/main/java/com/eu/habbo/threading/runnables/CloseGate.java index f63e6f47..1637bc7f 100644 --- a/src/main/java/com/eu/habbo/threading/runnables/CloseGate.java +++ b/src/main/java/com/eu/habbo/threading/runnables/CloseGate.java @@ -4,22 +4,22 @@ import com.eu.habbo.habbohotel.rooms.Room; import com.eu.habbo.habbohotel.users.HabboItem; public class CloseGate implements Runnable { - private final HabboItem guildGate; + private final HabboItem gate; private final Room room; - public CloseGate(HabboItem guildGate, Room room) { - this.guildGate = guildGate; + public CloseGate(HabboItem gate, Room room) { + this.gate = gate; this.room = room; } @Override public void run() { - if (this.guildGate.getRoomId() == this.room.getId()) { + if (this.gate.getRoomId() == this.room.getId()) { if (this.room.isLoaded()) { - if (this.room.getHabbosAt(this.guildGate.getX(), this.guildGate.getY()).isEmpty()) { - this.guildGate.setExtradata("0"); - this.room.updateItem(this.guildGate); - this.guildGate.needsUpdate(true); + if (this.room.getHabbosAt(this.gate.getX(), this.gate.getY()).isEmpty()) { + this.gate.setExtradata("0"); + this.room.updateItem(this.gate); + this.gate.needsUpdate(true); } } } From 097edff63840dca4f0704ff1d8c6b2783c9a5e4e Mon Sep 17 00:00:00 2001 From: Remco Date: Mon, 23 Nov 2020 11:57:13 +0100 Subject: [PATCH 5/9] Removed unnecessary usings --- .../items/interactions/InteractionCostumeGate.java | 5 ----- src/main/java/com/eu/habbo/habbohotel/rooms/RoomUnit.java | 1 - 2 files changed, 6 deletions(-) diff --git a/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionCostumeGate.java b/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionCostumeGate.java index 8e6b775d..c4b4460f 100644 --- a/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionCostumeGate.java +++ b/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionCostumeGate.java @@ -5,14 +5,9 @@ import com.eu.habbo.habbohotel.gameclients.GameClient; import com.eu.habbo.habbohotel.items.Item; import com.eu.habbo.habbohotel.items.interactions.interfaces.ConditionalGate; import com.eu.habbo.habbohotel.rooms.Room; -import com.eu.habbo.habbohotel.rooms.RoomTile; import com.eu.habbo.habbohotel.rooms.RoomUnit; -import com.eu.habbo.habbohotel.rooms.RoomUnitStatus; import com.eu.habbo.habbohotel.users.Habbo; -import com.eu.habbo.habbohotel.users.HabboItem; -import com.eu.habbo.messages.ServerMessage; import com.eu.habbo.messages.outgoing.generic.alerts.CustomNotificationComposer; -import com.eu.habbo.messages.outgoing.rooms.users.RoomUserStatusComposer; import com.eu.habbo.threading.runnables.CloseGate; import java.sql.ResultSet; diff --git a/src/main/java/com/eu/habbo/habbohotel/rooms/RoomUnit.java b/src/main/java/com/eu/habbo/habbohotel/rooms/RoomUnit.java index 6d5fb068..bb078268 100644 --- a/src/main/java/com/eu/habbo/habbohotel/rooms/RoomUnit.java +++ b/src/main/java/com/eu/habbo/habbohotel/rooms/RoomUnit.java @@ -10,7 +10,6 @@ import com.eu.habbo.habbohotel.pets.RideablePet; import com.eu.habbo.habbohotel.users.DanceType; import com.eu.habbo.habbohotel.users.Habbo; import com.eu.habbo.habbohotel.users.HabboItem; -import com.eu.habbo.messages.outgoing.generic.alerts.CustomNotificationComposer; import com.eu.habbo.messages.outgoing.rooms.users.RoomUserStatusComposer; import com.eu.habbo.plugin.Event; import com.eu.habbo.plugin.events.roomunit.RoomUnitLookAtPointEvent; From afb6e02800f9c6bf2dabb7df5add0ef890ef4d84 Mon Sep 17 00:00:00 2001 From: Remco Date: Mon, 23 Nov 2020 13:29:50 +0100 Subject: [PATCH 6/9] Made costumegate allow costumes (enables) --- .../interactions/InteractionCostumeGate.java | 30 ++----------------- 1 file changed, 2 insertions(+), 28 deletions(-) diff --git a/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionCostumeGate.java b/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionCostumeGate.java index c4b4460f..325f9392 100644 --- a/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionCostumeGate.java +++ b/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionCostumeGate.java @@ -6,16 +6,14 @@ import com.eu.habbo.habbohotel.items.Item; import com.eu.habbo.habbohotel.items.interactions.interfaces.ConditionalGate; import com.eu.habbo.habbohotel.rooms.Room; import com.eu.habbo.habbohotel.rooms.RoomUnit; -import com.eu.habbo.habbohotel.users.Habbo; import com.eu.habbo.messages.outgoing.generic.alerts.CustomNotificationComposer; import com.eu.habbo.threading.runnables.CloseGate; import java.sql.ResultSet; import java.sql.SQLException; -import java.util.Arrays; -import java.util.List; public class InteractionCostumeGate extends InteractionDefault implements ConditionalGate { + public InteractionCostumeGate(ResultSet set, Item baseItem) throws SQLException { super(set, baseItem); this.setExtradata("0"); @@ -36,31 +34,7 @@ public class InteractionCostumeGate extends InteractionDefault implements Condit if (roomUnit == null || room == null) return false; - Habbo habbo = room.getHabbo(roomUnit); - - if (habbo != null && habbo.getHabboInfo() != null) { - /* - * Get all figureparts. Figureparts are seperated by dots and each figurepart has this format: - * figureType-partID-colorID1-colorID2...-colorIDn - */ - List figureParts = Arrays.asList(habbo.getHabboInfo().getLook().split("\\.")); - - List allowedPartIds = Arrays.asList(Emulator.getConfig() - .getValue("hotel.item.condition.costume.partids") - .split(";") - ); - - // Check if at least one of the figureparts is configured as a costume and thus allowed - return figureParts.stream().anyMatch(figurePart -> { - String[] partInfo = figurePart.split("-"); - if (partInfo.length >= 2) { - String partID = partInfo[1]; // index 0 is the part, index 1 is the ID - return allowedPartIds.contains(partID); - } - return false; - }); - } - return false; + return roomUnit.getEffectId() > 0; } @Override From f4719ee042689650a7bbe2668f508ff778beb424 Mon Sep 17 00:00:00 2001 From: Remco Date: Mon, 23 Nov 2020 13:42:50 +0100 Subject: [PATCH 7/9] Costume gates doesnt send a custom message when not allowed to get through --- .../items/interactions/InteractionCostumeGate.java | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionCostumeGate.java b/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionCostumeGate.java index 325f9392..ca0081fd 100644 --- a/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionCostumeGate.java +++ b/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionCostumeGate.java @@ -67,11 +67,6 @@ public class InteractionCostumeGate extends InteractionDefault implements Condit @Override public void onRejected(RoomUnit roomUnit, Room room, Object[] objects) { - if (roomUnit == null || room == null) - return; - - room.getHabbo(roomUnit).getClient().sendResponse( - new CustomNotificationComposer(CustomNotificationComposer.HOPPER_NO_COSTUME) - ); + } } From 771f386b563c124fe81afd626f7d52e10a3c21a0 Mon Sep 17 00:00:00 2001 From: Remco Date: Mon, 23 Nov 2020 14:00:43 +0100 Subject: [PATCH 8/9] Fixed onclick method --- .../items/interactions/InteractionCostumeGate.java | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionCostumeGate.java b/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionCostumeGate.java index ca0081fd..20034266 100644 --- a/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionCostumeGate.java +++ b/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionCostumeGate.java @@ -6,7 +6,6 @@ import com.eu.habbo.habbohotel.items.Item; import com.eu.habbo.habbohotel.items.interactions.interfaces.ConditionalGate; import com.eu.habbo.habbohotel.rooms.Room; import com.eu.habbo.habbohotel.rooms.RoomUnit; -import com.eu.habbo.messages.outgoing.generic.alerts.CustomNotificationComposer; import com.eu.habbo.threading.runnables.CloseGate; import java.sql.ResultSet; @@ -49,13 +48,7 @@ public class InteractionCostumeGate extends InteractionDefault implements Condit @Override public void onClick(GameClient client, Room room, Object[] objects) throws Exception { - if (client != null) { - if (this.canWalkOn(client.getHabbo().getRoomUnit(), room, null)) { - super.onClick(client, room, objects); - } else { - client.sendResponse(new CustomNotificationComposer(CustomNotificationComposer.GATE_NO_HC)); - } - } + super.onClick(client, room, objects); } @Override @@ -67,6 +60,6 @@ public class InteractionCostumeGate extends InteractionDefault implements Condit @Override public void onRejected(RoomUnit roomUnit, Room room, Object[] objects) { - + } } From f952ac15d286edec7e06d5f06d36e9748ae2b5aa Mon Sep 17 00:00:00 2001 From: Remco Date: Mon, 23 Nov 2020 15:10:27 +0100 Subject: [PATCH 9/9] Changed CostumeHopper to EffectHopper and made effect configurable with customparams --- .../habbo/habbohotel/items/ItemManager.java | 2 +- ...meGate.java => InteractionEffectGate.java} | 28 ++++++++++++++++--- 2 files changed, 25 insertions(+), 5 deletions(-) rename src/main/java/com/eu/habbo/habbohotel/items/interactions/{InteractionCostumeGate.java => InteractionEffectGate.java} (60%) diff --git a/src/main/java/com/eu/habbo/habbohotel/items/ItemManager.java b/src/main/java/com/eu/habbo/habbohotel/items/ItemManager.java index 2f258100..f702d68c 100644 --- a/src/main/java/com/eu/habbo/habbohotel/items/ItemManager.java +++ b/src/main/java/com/eu/habbo/habbohotel/items/ItemManager.java @@ -141,7 +141,7 @@ public class ItemManager { this.interactionsList.add(new ItemInteraction("puzzle_box", InteractionPuzzleBox.class)); this.interactionsList.add(new ItemInteraction("hopper", InteractionHopper.class)); this.interactionsList.add(new ItemInteraction("costume_hopper", InteractionCostumeHopper.class)); - this.interactionsList.add(new ItemInteraction("costume_gate", InteractionCostumeGate.class)); + this.interactionsList.add(new ItemInteraction("effect_gate", InteractionEffectGate.class)); this.interactionsList.add(new ItemInteraction("club_hopper", InteractionHabboClubHopper.class)); this.interactionsList.add(new ItemInteraction("club_gate", InteractionHabboClubGate.class)); this.interactionsList.add(new ItemInteraction("club_teleporttile", InteractionHabboClubTeleportTile.class)); diff --git a/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionCostumeGate.java b/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionEffectGate.java similarity index 60% rename from src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionCostumeGate.java rename to src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionEffectGate.java index 20034266..0e6ad5d7 100644 --- a/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionCostumeGate.java +++ b/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionEffectGate.java @@ -10,15 +10,28 @@ import com.eu.habbo.threading.runnables.CloseGate; import java.sql.ResultSet; import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; -public class InteractionCostumeGate extends InteractionDefault implements ConditionalGate { +public class InteractionEffectGate extends InteractionDefault implements ConditionalGate { - public InteractionCostumeGate(ResultSet set, Item baseItem) throws SQLException { + // List of Habboween costumes according to http://www.habboxwiki.com/Costumes + private static final List defaultAllowedEnables = new ArrayList<>(Arrays.asList( + 114, // Strong Arms + 115, // Ringmaster Costume + 116, // Fly Head + 117, // Executioner Hood + 118, // Evil Clown Paint + 135 // Marionette + )); + + public InteractionEffectGate(ResultSet set, Item baseItem) throws SQLException { super(set, baseItem); this.setExtradata("0"); } - public InteractionCostumeGate(int id, int userId, Item item, String extradata, int limitedStack, int limitedSells) { + public InteractionEffectGate(int id, int userId, Item item, String extradata, int limitedStack, int limitedSells) { super(id, userId, item, extradata, limitedStack, limitedSells); this.setExtradata("0"); } @@ -33,7 +46,14 @@ public class InteractionCostumeGate extends InteractionDefault implements Condit if (roomUnit == null || room == null) return false; - return roomUnit.getEffectId() > 0; + String customparams = this.getBaseItem().getCustomParams().trim(); + + if (!customparams.isEmpty()) { + return Arrays.asList(customparams.split(";")) + .contains(Integer.valueOf(roomUnit.getEffectId()).toString()); + } + + return defaultAllowedEnables.contains(roomUnit.getEffectId()); } @Override