Initial commit
This commit is contained in:
@@ -0,0 +1,46 @@
|
||||
package eu.mhsl.minenet.minigames.instance.hub;
|
||||
|
||||
import eu.mhsl.minenet.minigames.Resource;
|
||||
import eu.mhsl.minenet.minigames.instance.hub.entity.RoomSelector;
|
||||
import eu.mhsl.minenet.minigames.util.CommonEventHandles;
|
||||
import eu.mhsl.minenet.minigames.instance.Spawnable;
|
||||
import eu.mhsl.minenet.minigames.instance.Dimension;
|
||||
import net.minestom.server.MinecraftServer;
|
||||
import net.minestom.server.coordinate.Pos;
|
||||
import net.minestom.server.event.player.*;
|
||||
import net.minestom.server.instance.AnvilLoader;
|
||||
import net.minestom.server.instance.InstanceContainer;
|
||||
|
||||
import java.nio.file.Path;
|
||||
import java.util.UUID;
|
||||
|
||||
public class HubInstance extends InstanceContainer implements Spawnable {
|
||||
public static final HubInstance INSTANCE = new HubInstance();
|
||||
|
||||
static {
|
||||
MinecraftServer.getInstanceManager().registerInstance(INSTANCE);
|
||||
|
||||
INSTANCE.setChunkLoader(new AnvilLoader(Resource.HUB_MAP.getPath()));
|
||||
|
||||
INSTANCE.eventNode()
|
||||
.addListener(PlayerBlockBreakEvent.class, CommonEventHandles::cancel)
|
||||
.addListener(PlayerBlockPlaceEvent.class, CommonEventHandles::cancel)
|
||||
.addListener(PlayerBlockInteractEvent.class, CommonEventHandles::cancel);
|
||||
|
||||
new RoomSelector().setInstance(INSTANCE, new Pos(0.5, 11, 4.5));
|
||||
}
|
||||
|
||||
private HubInstance() {
|
||||
super(UUID.randomUUID(), Dimension.THE_END.DIMENSION);
|
||||
setChunkLoader(new AnvilLoader(Path.of("maps/hub")));
|
||||
|
||||
setTime(18000);
|
||||
setTimeRate(0);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Pos getSpawn() {
|
||||
return new Pos(0.5, 11, 0.5);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
package eu.mhsl.minenet.minigames.instance.hub.entity;
|
||||
|
||||
import eu.mhsl.minenet.minigames.instance.hub.inventory.HubInventory;
|
||||
import eu.mhsl.minenet.minigames.shared.entity.InteractableEntity;
|
||||
import net.minestom.server.entity.EntityType;
|
||||
import net.minestom.server.entity.metadata.villager.AbstractVillagerMeta;
|
||||
import net.minestom.server.event.entity.EntityAttackEvent;
|
||||
import net.minestom.server.event.instance.AddEntityToInstanceEvent;
|
||||
import net.minestom.server.event.player.PlayerEntityInteractEvent;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public class RoomSelector extends InteractableEntity {
|
||||
final AbstractVillagerMeta abstractVillagerMeta;
|
||||
public RoomSelector() {
|
||||
super(EntityType.VILLAGER);
|
||||
|
||||
abstractVillagerMeta = (AbstractVillagerMeta) this.getEntityMeta();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSpawn(@NotNull AddEntityToInstanceEvent addEntityToInstanceEvent) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onAttack(@NotNull EntityAttackEvent entityAttackEvent) {
|
||||
super.onAttack(entityAttackEvent);
|
||||
abstractVillagerMeta.setHeadShakeTimer(20);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onInteract(@NotNull PlayerEntityInteractEvent playerEntityInteractEvent) {
|
||||
playerEntityInteractEvent.getPlayer().openInventory(new HubInventory());
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
package eu.mhsl.minenet.minigames.instance.hub.inventory;
|
||||
|
||||
import eu.mhsl.minenet.minigames.instance.room.Room;
|
||||
import eu.mhsl.minenet.minigames.shared.inventory.InteractableInventory;
|
||||
import net.kyori.adventure.text.Component;
|
||||
import net.minestom.server.inventory.InventoryType;
|
||||
import net.minestom.server.item.ItemHideFlag;
|
||||
import net.minestom.server.item.ItemStack;
|
||||
import net.minestom.server.item.Material;
|
||||
|
||||
public class HubInventory extends InteractableInventory {
|
||||
public HubInventory() {
|
||||
super(InventoryType.CHEST_3_ROW, Component.text("MineNet Servernetzwerk"));
|
||||
|
||||
setClickableItem(
|
||||
ItemStack
|
||||
.builder(Material.WRITABLE_BOOK)
|
||||
.displayName(Component.text("Create own room"))
|
||||
.lore(Component.text("Create new empty room"))
|
||||
.meta(metaBuilder -> metaBuilder.hideFlag(ItemHideFlag.HIDE_ATTRIBUTES))
|
||||
.build(),
|
||||
12,
|
||||
itemClick -> Room.createRoom(itemClick.getPlayer()),
|
||||
true
|
||||
);
|
||||
|
||||
setClickableItem(
|
||||
ItemStack
|
||||
.builder(Material.KNOWLEDGE_BOOK)
|
||||
.displayName(Component.text("Browse room"))
|
||||
.lore(Component.text("Browse existing rooms"))
|
||||
.build(),
|
||||
14,
|
||||
itemClick -> itemClick.getPlayer().openInventory(new JoinInventory())
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,70 @@
|
||||
package eu.mhsl.minenet.minigames.instance.hub.inventory;
|
||||
|
||||
import eu.mhsl.minenet.minigames.instance.room.Room;
|
||||
import eu.mhsl.minenet.minigames.message.Icon;
|
||||
import eu.mhsl.minenet.minigames.message.type.ChatMessage;
|
||||
import eu.mhsl.minenet.minigames.shared.inventory.InteractableInventory;
|
||||
import eu.mhsl.minenet.minigames.instance.hub.HubInstance;
|
||||
import net.kyori.adventure.text.Component;
|
||||
import net.minestom.server.MinecraftServer;
|
||||
import net.minestom.server.entity.Player;
|
||||
import net.minestom.server.event.player.PlayerPacketEvent;
|
||||
import net.minestom.server.inventory.InventoryType;
|
||||
import net.minestom.server.inventory.click.ClickType;
|
||||
import net.minestom.server.inventory.condition.InventoryConditionResult;
|
||||
import net.minestom.server.item.ItemStack;
|
||||
import net.minestom.server.item.Material;
|
||||
import net.minestom.server.item.metadata.PlayerHeadMeta;
|
||||
import net.minestom.server.network.packet.client.play.ClientNameItemPacket;
|
||||
|
||||
import java.util.Locale;
|
||||
|
||||
public class JoinInventory extends InteractableInventory {
|
||||
private String typedText = "";
|
||||
private final String prefix = "name:";
|
||||
|
||||
public JoinInventory() {
|
||||
super(InventoryType.ANVIL, Component.text("Enter username"));
|
||||
|
||||
setClickableItem(
|
||||
ItemStack.builder(Material.PLAYER_HEAD)
|
||||
.displayName(Component.text(prefix))
|
||||
.meta(PlayerHeadMeta.class, builder -> {
|
||||
|
||||
})
|
||||
.build(),
|
||||
0,
|
||||
itemClick -> {}
|
||||
);
|
||||
|
||||
HubInstance.INSTANCE.eventNode().addListener(PlayerPacketEvent.class, event -> {
|
||||
if (event.getPacket() instanceof ClientNameItemPacket packet) {
|
||||
typedText = packet.itemName();
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onClick(Player player, int slot, ClickType clickType, InventoryConditionResult inventoryConditionResult) {
|
||||
if(slot != 2) return;
|
||||
inventoryConditionResult.setCancel(true);
|
||||
player.closeInventory();
|
||||
|
||||
typedText = formatInput(typedText);
|
||||
|
||||
Room target = Room.getRoom(MinecraftServer.getConnectionManager().findPlayer(typedText));
|
||||
if(target != null)
|
||||
Room.setRoom(player, target);
|
||||
else
|
||||
new ChatMessage(Icon.ERROR).appendStatic("The room").quote(typedText).appendStatic("could not be found!").send(player);
|
||||
}
|
||||
|
||||
private String formatInput(String raw) {
|
||||
if(raw.startsWith(prefix)) {
|
||||
raw = raw.split(prefix)[1];
|
||||
}
|
||||
|
||||
return raw.toLowerCase(Locale.ROOT).trim();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user