Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@
import net.onelitefeather.cygnus.common.map.GameMap;
import net.onelitefeather.cygnus.common.map.GameMapBuilder;
import net.onelitefeather.cygnus.common.util.GsonHelper;
import net.onelitefeather.cygnus.setup.inventory.view.GeneralMapOverviewInventory;
import net.onelitefeather.cygnus.setup.inventory.view.SurvivorViewInventory;
import net.theevilreaper.aves.file.FileHandler;
import net.theevilreaper.aves.map.BaseMapBuilder;
import net.theevilreaper.aves.map.MapEntry;
Expand All @@ -19,8 +21,8 @@
public class GameData extends InstanceSetupData {

private final FileHandler fileHandler;
//TODO: Implement inventory
private Object inventory;
private final GeneralMapOverviewInventory inventory;
private final SurvivorViewInventory survivorInventory;
private GameMapBuilder gameMapBuilder;
private boolean areaMode;

Expand All @@ -39,6 +41,9 @@ public GameData(UUID uuid, MapEntry mapEntry, FileHandler fileHandler) {
if (player == null) {
throw new IllegalArgumentException("Player with UUID " + uuid + " is not online.");
}

this.inventory = new GeneralMapOverviewInventory(player, this.gameMapBuilder);
this.survivorInventory = new SurvivorViewInventory(player, this.gameMapBuilder);
}

/**
Expand All @@ -52,16 +57,28 @@ public void swapAreaMode() {
* {@inheritDoc}
*/
@Override
public void openInventory(Player player) {
//player.openInventory(this.inventory.getInventory());
public void openInventory(InventoryTarget target) {
switch (target) {
case GENERAL -> this.inventory.open();
case SURVIVOR -> this.survivorInventory.open();
case PAGE -> {

}
}
}

/**
* {@inheritDoc}
*/
@Override
public void triggerUpdate() {
// this.inventory.invalidateDataLayout();
public void triggerUpdate(InventoryTarget target) {
switch (target) {
case GENERAL -> this.inventory.invalidateDataLayout();
case SURVIVOR -> this.survivorInventory.invalidateDataLayout();
case PAGE -> {
// Nothing to do here
}
}
}

/**
Expand Down Expand Up @@ -90,6 +107,8 @@ public void teleport(Player player) {
@Override
public void reset() {
super.reset();
this.survivorInventory.unregister();
this.inventory.unregister();
// this.inventory.unregister();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -72,14 +72,13 @@ public void teleport(Player player) {
/**
* Opens the setup inventory for the given player.
*
* @param player target player
*/
public abstract void openInventory(Player player);
public abstract void openInventory(InventoryTarget target);

/**
* Triggers an update of the setup state and related visual feedback.
*/
public abstract void triggerUpdate();
public abstract void triggerUpdate(InventoryTarget target);

/**
* Checks whether a map file is available for this setup.
Expand Down Expand Up @@ -115,4 +114,12 @@ public UUID getId() {
* @return associated map builder
*/
public abstract BaseMapBuilder getMapBuilder();

public enum InventoryTarget {

GENERAL,
SURVIVOR,
PAGE

}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,20 +5,21 @@
import net.minestom.server.coordinate.Pos;
import net.minestom.server.entity.Player;
import net.minestom.server.instance.anvil.AnvilLoader;
import net.onelitefeather.cygnus.setup.inventory.view.GeneralMapOverviewInventory;
import net.theevilreaper.aves.file.FileHandler;
import net.theevilreaper.aves.inventory.PersonalInventoryBuilder;
import net.theevilreaper.aves.map.BaseMap;
import net.theevilreaper.aves.map.BaseMapBuilder;
import net.theevilreaper.aves.map.MapEntry;

import java.nio.file.Files;
import java.util.Objects;
import java.util.Optional;
import java.util.UUID;

public final class LobbyData extends InstanceSetupData {

private final FileHandler fileHandler;
private Objects viewInventory;
private final PersonalInventoryBuilder viewInventory;
private BaseMapBuilder mapBuilder;

public LobbyData(UUID uuid, MapEntry mapEntry, FileHandler fileHandler) {
Expand All @@ -30,16 +31,18 @@ public LobbyData(UUID uuid, MapEntry mapEntry, FileHandler fileHandler) {
if (player == null) {
throw new IllegalArgumentException("Player with UUID " + uuid + " is not online.");
}

this.viewInventory = new GeneralMapOverviewInventory(player, this.mapBuilder);
}

@Override
public void openInventory(Player player) {
//player.openInventory(this.viewInventory.getInventory());
public void openInventory(InventoryTarget target) {
this.viewInventory.open();
}

@Override
public void triggerUpdate() {
// this.viewInventory.invalidateDataLayout();
public void triggerUpdate(InventoryTarget target) {
this.viewInventory.invalidateDataLayout();
}

@Override
Expand All @@ -62,7 +65,7 @@ public void teleport(Player player) {
@Override
public void reset() {
super.reset();
//this.viewInventory.unregister();
this.viewInventory.unregister();
}

@Override
Expand All @@ -77,8 +80,6 @@ public void loadData() {
}, () -> this.mapBuilder = BaseMap.builder());
}

//this.viewInventory = new LobbyViewInventory(this.mapBuilder);

this.instance = MinecraftServer.getInstanceManager().createInstanceContainer();
AnvilLoader anvilLoader = new AnvilLoader(this.mapEntry.getDirectoryRoot());
this.instance.setChunkLoader(anvilLoader);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,9 @@
public enum DialogTarget {

CREATE_NAME,
CREATE_AUTHORS,
UPDATE_NAME,
DELETE_NAME,
CREATE_SPAWN,
DELETE_SPAWN,
DELETE_SLENDER,
DELETE_PAGE_FACE,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
package net.onelitefeather.cygnus.setup.inventory.slot;

import net.minestom.server.component.DataComponents;
import net.minestom.server.entity.Player;
import net.minestom.server.inventory.click.Click;
import net.minestom.server.item.ItemStack;
import net.onelitefeather.cygnus.setup.map.MapDataCategory;
import net.theevilreaper.aves.inventory.click.ClickHolder;
import net.theevilreaper.aves.inventory.slot.Slot;

import java.util.function.Consumer;

public abstract class AbstractDataSlot extends Slot {

protected final MapDataCategory type;

protected AbstractDataSlot(MapDataCategory type) {
this.type = type;
this.setClick(this::click);
}

protected abstract void click(
Player player,
int slot,
Click clickType,
ItemStack stack,
Consumer<ClickHolder> result
);

/**
* Converts the given ItemStack to a builder, allowing for modifications
* without altering the original stack.
*
* @param stack the ItemStack to convert
* @return a new ItemStack.Builder with the same material and custom name
*/
protected ItemStack.Builder asBuilder(ItemStack stack) {
ItemStack.Builder builder = ItemStack.builder(stack.material());
if (stack.has(DataComponents.CUSTOM_NAME)) {
builder.customName(stack.get(DataComponents.CUSTOM_NAME));
}
return builder;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
package net.onelitefeather.cygnus.setup.inventory.slot;

import net.kyori.adventure.text.Component;
import net.minestom.server.entity.Player;
import net.minestom.server.event.EventDispatcher;
import net.minestom.server.inventory.click.Click;
import net.minestom.server.item.ItemStack;
import net.onelitefeather.cygnus.setup.event.dialog.DialogRequestEvent;
import net.onelitefeather.cygnus.setup.event.dialog.DialogTarget;
import net.onelitefeather.cygnus.setup.map.MapDataCategory;
import net.theevilreaper.aves.inventory.click.ClickHolder;
import org.jetbrains.annotations.Nullable;

import java.util.List;
import java.util.function.Consumer;

import static net.onelitefeather.cygnus.setup.util.SetupMessages.DELETE_CLICK;
import static net.onelitefeather.cygnus.setup.util.SetupMessages.NO_SPACE_SEPARATOR;

public class MultiStringSlot extends AbstractDataSlot {

private final List<String> data;

public MultiStringSlot(MapDataCategory category, List<String> data) {
super(category);
this.data = data;
}

public MultiStringSlot(MapDataCategory category) {
super(category);
this.data = List.of();
}

@Override
public ItemStack getItem() {
ItemStack overviewItem = MapDataCategory.getDefaultItem(type);

if (data == null || data.isEmpty()) {
return overviewItem;
}
return asBuilder(overviewItem).lore(
Component.empty(),
NO_SPACE_SEPARATOR.append(Component.space()).append(Component.text(String.join(", ", data), type.getColor())),
Component.empty(),
DELETE_CLICK,
Component.empty()
)
.build();
}

@Override
protected void click(Player player, int slot, Click click, ItemStack stack, Consumer<ClickHolder> result) {
result.accept(ClickHolder.cancelClick());

if (data.isEmpty()) {
EventDispatcher.call(new DialogRequestEvent(player, DialogTarget.CREATE_AUTHORS));
return;
}

if (click instanceof Click.Right) {
// EventDispatcher.call(new PlayerDeletePromptEvent(player, type));
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
package net.onelitefeather.cygnus.setup.inventory.slot;

import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.minimessage.MiniMessage;
import net.minestom.server.coordinate.Pos;
import net.minestom.server.entity.Player;
import net.minestom.server.event.EventDispatcher;
import net.minestom.server.inventory.click.Click;
import net.minestom.server.item.ItemStack;
import net.onelitefeather.cygnus.setup.event.dialog.DialogContext;
import net.onelitefeather.cygnus.setup.event.dialog.DialogRequestEvent;
import net.onelitefeather.cygnus.setup.event.dialog.DialogTarget;
import net.onelitefeather.cygnus.setup.map.MapDataCategory;
import net.theevilreaper.aves.inventory.click.ClickHolder;
import net.theevilreaper.aves.util.Components;
import org.jetbrains.annotations.Nullable;

import java.math.RoundingMode;
import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
import java.util.function.Consumer;

import static net.onelitefeather.cygnus.setup.util.SetupMessages.DELETE_CLICK;
import static net.onelitefeather.cygnus.setup.util.SetupMessages.TELEPORT_CLICK;

public class PositionSlot extends AbstractDataSlot {

private static final DecimalFormat DECIMAL_FORMAT;

static {
DECIMAL_FORMAT = new DecimalFormat("#.##");
DECIMAL_FORMAT.setRoundingMode(RoundingMode.CEILING);
DECIMAL_FORMAT.setDecimalFormatSymbols(DecimalFormatSymbols.getInstance(Locale.ROOT));
}

private final @Nullable Pos position;

public PositionSlot(MapDataCategory category, @Nullable Pos position) {
super(category);
this.position = position;
}

@Override
public ItemStack getItem() {
ItemStack overviewItem = MapDataCategory.getDefaultItem(type);

if (position == null) {
return overviewItem;
}
List<Component> lore = new ArrayList<>();
lore.add(Component.empty());
lore.addAll(Components.pointToLore(MiniMessage.miniMessage(), position, DECIMAL_FORMAT));
lore.add(Component.empty());
lore.add(TELEPORT_CLICK);
lore.add(DELETE_CLICK);
lore.add(Component.empty());

return asBuilder(overviewItem).lore(lore).build();
}

@Override
protected void click(Player player, int slot, Click click, ItemStack stack, Consumer<ClickHolder> result) {
result.accept(ClickHolder.cancelClick());
if ((!(click instanceof Click.Left || click instanceof Click.Right)) || position == null) return;
if (click instanceof Click.Left) {
player.closeInventory();
player.teleport(position);
return;
}
EventDispatcher.call(new DialogRequestEvent(player, DialogTarget.DELETE_SPAWN, new DialogContext.PositionContent(position)));
}
}
Loading
Loading