50 lines
2.6 KiB
Java
50 lines
2.6 KiB
Java
package com.hypixel.hytale.builtin.adventure.objectives;
|
|
|
|
import com.hypixel.hytale.builtin.adventure.objectives.config.task.UseEntityObjectiveTaskAsset;
|
|
import com.hypixel.hytale.codec.builder.BuilderCodec;
|
|
import com.hypixel.hytale.component.Ref;
|
|
import com.hypixel.hytale.component.Store;
|
|
import com.hypixel.hytale.protocol.packets.interface_.CustomPageLifetime;
|
|
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.pages.InteractiveCustomUIPage;
|
|
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.storage.EntityStore;
|
|
import javax.annotation.Nonnull;
|
|
|
|
public class DialogPage extends InteractiveCustomUIPage<DialogPage.DialogPageEventData> {
|
|
public static final String LAYOUT = "Pages/DialogPage.ui";
|
|
private final UseEntityObjectiveTaskAsset.DialogOptions dialogOptions;
|
|
|
|
public DialogPage(@Nonnull PlayerRef playerRef, UseEntityObjectiveTaskAsset.DialogOptions dialogOptions) {
|
|
super(playerRef, CustomPageLifetime.CanDismissOrCloseThroughInteraction, DialogPage.DialogPageEventData.CODEC);
|
|
this.dialogOptions = dialogOptions;
|
|
}
|
|
|
|
@Override
|
|
public void build(
|
|
@Nonnull Ref<EntityStore> ref, @Nonnull UICommandBuilder commandBuilder, @Nonnull UIEventBuilder eventBuilder, @Nonnull Store<EntityStore> store
|
|
) {
|
|
commandBuilder.append("Pages/DialogPage.ui");
|
|
commandBuilder.set("#EntityName.Text", Message.translation(this.dialogOptions.getEntityNameKey()));
|
|
commandBuilder.set("#Dialog.Text", Message.translation(this.dialogOptions.getDialogKey()));
|
|
eventBuilder.addEventBinding(CustomUIEventBindingType.Activating, "#CloseButton");
|
|
}
|
|
|
|
public void handleDataEvent(@Nonnull Ref<EntityStore> ref, @Nonnull Store<EntityStore> store, @Nonnull DialogPage.DialogPageEventData data) {
|
|
Player playerComponent = store.getComponent(ref, Player.getComponentType());
|
|
playerComponent.getPageManager().setPage(ref, store, Page.None);
|
|
}
|
|
|
|
public static class DialogPageEventData {
|
|
public static final BuilderCodec<DialogPage.DialogPageEventData> CODEC = BuilderCodec.builder(
|
|
DialogPage.DialogPageEventData.class, DialogPage.DialogPageEventData::new
|
|
)
|
|
.build();
|
|
}
|
|
}
|