76 lines
3.6 KiB
Java
76 lines
3.6 KiB
Java
package com.hypixel.hytale.builtin.beds.respawn;
|
|
|
|
import com.hypixel.hytale.component.Ref;
|
|
import com.hypixel.hytale.component.Store;
|
|
import com.hypixel.hytale.math.vector.Vector3i;
|
|
import com.hypixel.hytale.protocol.InteractionType;
|
|
import com.hypixel.hytale.protocol.packets.interface_.CustomUIEventBindingType;
|
|
import com.hypixel.hytale.protocol.packets.interface_.Page;
|
|
import com.hypixel.hytale.server.core.Message;
|
|
import com.hypixel.hytale.server.core.entity.entities.Player;
|
|
import com.hypixel.hytale.server.core.entity.entities.player.data.PlayerRespawnPointData;
|
|
import com.hypixel.hytale.server.core.ui.builder.EventData;
|
|
import com.hypixel.hytale.server.core.ui.builder.UICommandBuilder;
|
|
import com.hypixel.hytale.server.core.ui.builder.UIEventBuilder;
|
|
import com.hypixel.hytale.server.core.universe.PlayerRef;
|
|
import com.hypixel.hytale.server.core.universe.world.World;
|
|
import com.hypixel.hytale.server.core.universe.world.meta.state.RespawnBlock;
|
|
import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
|
|
import javax.annotation.Nonnull;
|
|
|
|
public class SetNameRespawnPointPage extends RespawnPointPage {
|
|
private final Vector3i respawnBlockPosition;
|
|
private final RespawnBlock respawnBlock;
|
|
|
|
public SetNameRespawnPointPage(@Nonnull PlayerRef playerRef, InteractionType interactionType, Vector3i respawnBlockPosition, RespawnBlock respawnBlock) {
|
|
super(playerRef, interactionType);
|
|
this.respawnBlockPosition = respawnBlockPosition;
|
|
this.respawnBlock = respawnBlock;
|
|
}
|
|
|
|
@Override
|
|
public void build(
|
|
@Nonnull Ref<EntityStore> ref, @Nonnull UICommandBuilder commandBuilder, @Nonnull UIEventBuilder eventBuilder, @Nonnull Store<EntityStore> store
|
|
) {
|
|
commandBuilder.append("Pages/NameRespawnPointPage.ui");
|
|
Player playerComponent = store.getComponent(ref, Player.getComponentType());
|
|
|
|
assert playerComponent != null;
|
|
|
|
PlayerRef playerRefComponent = store.getComponent(ref, PlayerRef.getComponentType());
|
|
|
|
assert playerRefComponent != null;
|
|
|
|
World world = store.getExternalData().getWorld();
|
|
PlayerRespawnPointData[] respawnPoints = playerComponent.getPlayerConfigData().getPerWorldData(world.getName()).getRespawnPoints();
|
|
String respawnPointName = null;
|
|
if (respawnPoints != null) {
|
|
for (PlayerRespawnPointData respawnPoint : respawnPoints) {
|
|
if (respawnPoint.getBlockPosition().equals(this.respawnBlockPosition)) {
|
|
respawnPointName = respawnPoint.getName();
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
if (respawnPointName == null) {
|
|
commandBuilder.set("#NameInput.Value", Message.translation("server.customUI.defaultRespawnPointName").param("name", playerRefComponent.getUsername()));
|
|
} else {
|
|
commandBuilder.set("#NameInput.Value", respawnPointName);
|
|
}
|
|
|
|
eventBuilder.addEventBinding(CustomUIEventBindingType.Activating, "#SetButton", EventData.of("@RespawnPointName", "#NameInput.Value"));
|
|
eventBuilder.addEventBinding(CustomUIEventBindingType.Activating, "#CancelButton", EventData.of("Action", "Cancel"));
|
|
}
|
|
|
|
public void handleDataEvent(@Nonnull Ref<EntityStore> ref, @Nonnull Store<EntityStore> store, @Nonnull RespawnPointPage.RespawnPointEventData data) {
|
|
String respawnPointName = data.getRespawnPointName();
|
|
if (respawnPointName != null) {
|
|
this.setRespawnPointForPlayer(ref, store, this.respawnBlockPosition, this.respawnBlock, respawnPointName);
|
|
} else if ("Cancel".equals(data.getAction())) {
|
|
Player playerComponent = store.getComponent(ref, Player.getComponentType());
|
|
playerComponent.getPageManager().setPage(ref, store, Page.None);
|
|
}
|
|
}
|
|
}
|