|
1 | 1 | package net.william278.husktowns.hook;
|
2 | 2 |
|
3 | 3 | import net.william278.huskhomes.api.HuskHomesAPI;
|
4 |
| -import net.william278.huskhomes.event.HomeSaveEvent; |
5 |
| -import net.william278.huskhomes.position.Server; |
6 |
| -import net.william278.huskhomes.position.World.Environment; |
7 |
| -import net.william278.huskhomes.teleport.TimedTeleport; |
| 4 | +import net.william278.huskhomes.event.HomeCreateEvent; |
| 5 | +import net.william278.huskhomes.event.HomeEditEvent; |
| 6 | +import net.william278.huskhomes.teleport.TeleportationException; |
| 7 | +import net.william278.huskhomes.user.CommandUser; |
8 | 8 | import net.william278.husktowns.BukkitHuskTowns;
|
9 | 9 | import net.william278.husktowns.HuskTowns;
|
10 | 10 | import net.william278.husktowns.claim.Position;
|
@@ -38,37 +38,55 @@ public void onEnable() {
|
38 | 38 |
|
39 | 39 | @Override
|
40 | 40 | public void teleport(@NotNull OnlineUser user, @NotNull Position position, @NotNull String server) {
|
41 |
| - getHuskHomes().ifPresent(api -> api.teleportBuilder(api.adaptUser(((BukkitUser) user).getPlayer())) |
42 |
| - .setTarget(new net.william278.huskhomes.position.Position( |
43 |
| - position.getX(), |
44 |
| - position.getY(), |
45 |
| - position.getZ(), |
46 |
| - position.getYaw(), |
47 |
| - position.getPitch(), |
48 |
| - new net.william278.huskhomes.position.World(position.getWorld().getName(), position.getWorld().getUuid()), |
49 |
| - new Server(server) |
50 |
| - )) |
51 |
| - .toTimedTeleport() |
52 |
| - .thenAccept(TimedTeleport::execute)); |
| 41 | + try { |
| 42 | + getHuskHomes().ifPresent(api -> api.teleportBuilder(api.adaptUser(((BukkitUser) user).getPlayer())) |
| 43 | + .target(net.william278.huskhomes.position.Position.at( |
| 44 | + position.getX(), |
| 45 | + position.getY(), |
| 46 | + position.getZ(), |
| 47 | + position.getYaw(), |
| 48 | + position.getPitch(), |
| 49 | + net.william278.huskhomes.position.World.from(position.getWorld().getName(), position.getWorld().getUuid()), |
| 50 | + server |
| 51 | + )) |
| 52 | + .toTimedTeleport().execute()); |
| 53 | + } catch (TeleportationException e) { |
| 54 | + plugin.getLocales().getLocale("error_town_spawn_not_set") |
| 55 | + .ifPresent(user::sendMessage); |
| 56 | + } |
53 | 57 | }
|
54 | 58 |
|
55 | 59 | @EventHandler(ignoreCancelled = true)
|
56 |
| - public void onPlayerSetHome(@NotNull HomeSaveEvent event) { |
57 |
| - final Optional<? extends OnlineUser> user = plugin.getOnlineUsers().stream() |
58 |
| - .filter(online -> online.getUuid().equals(event.getHome().owner.uuid)).findFirst(); |
59 |
| - if (user.isEmpty()) { |
60 |
| - return; |
| 60 | + public void onPlayerSetHome(@NotNull HomeCreateEvent event) { |
| 61 | + if (this.cancelEvent(event.getCreator(), event.getPosition())) { |
| 62 | + event.setCancelled(true); |
61 | 63 | }
|
62 |
| - final Environment environment = event.getHome().world.environment == null ? Environment.CUSTOM : event.getHome().world.environment; |
63 |
| - final Position position = Position.at(event.getHome().x, event.getHome().y, event.getHome().z, |
64 |
| - World.of(event.getHome().world.uuid, event.getHome().world.name, |
65 |
| - environment.name().toLowerCase())); |
66 |
| - if (plugin.getOperationHandler().cancelOperation(Operation |
67 |
| - .of(user.get(), Operation.Type.BLOCK_INTERACT, position))) { |
| 64 | + } |
| 65 | + |
| 66 | + @EventHandler(ignoreCancelled = true) |
| 67 | + public void onPlayerRelocateHome(@NotNull HomeEditEvent event) { |
| 68 | + if (this.cancelEvent(event.getEditor(), event.getHome())) { |
68 | 69 | event.setCancelled(true);
|
69 | 70 | }
|
70 | 71 | }
|
71 | 72 |
|
| 73 | + private boolean cancelEvent(@NotNull CommandUser creator, @NotNull net.william278.huskhomes.position.Position home) { |
| 74 | + final Optional<? extends OnlineUser> user = creator instanceof net.william278.huskhomes.user.OnlineUser online ? |
| 75 | + plugin.getOnlineUsers().stream().filter(u -> u.getUuid().equals(online.getUuid())).findFirst() : |
| 76 | + Optional.empty(); |
| 77 | + if (user.isEmpty()) { |
| 78 | + return false; |
| 79 | + } |
| 80 | + |
| 81 | + final net.william278.huskhomes.position.World world = home.getWorld(); |
| 82 | + final Position position = Position.at(home.getX(), home.getY(), home.getZ(), |
| 83 | + World.of(world.getUuid(), world.getName(), world.getEnvironment().name()), |
| 84 | + home.getYaw(), home.getPitch()); |
| 85 | + |
| 86 | + return plugin.getOperationHandler().cancelOperation(Operation |
| 87 | + .of(user.get(), Operation.Type.BLOCK_INTERACT, position)); |
| 88 | + } |
| 89 | + |
72 | 90 | private Optional<HuskHomesAPI> getHuskHomes() {
|
73 | 91 | return Optional.ofNullable(api);
|
74 | 92 | }
|
|
0 commit comments