Skip to content

Commit

Permalink
add buttons to toggle allowVisits and allowRequests
Browse files Browse the repository at this point in the history
  • Loading branch information
MelanX committed Apr 9, 2024
1 parent 963cdb6 commit b9d6526
Show file tree
Hide file tree
Showing 5 changed files with 146 additions and 5 deletions.
Expand Up @@ -14,13 +14,17 @@
import de.melanx.skyguis.util.ComponentBuilder;
import de.melanx.skyguis.util.LoadingResult;
import de.melanx.skyguis.util.TextHelper;
import de.melanx.skyguis.util.ToggleButtons;
import net.minecraft.ChatFormatting;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.GuiGraphics;
import net.minecraft.client.gui.components.Button;
import net.minecraft.client.gui.components.Tooltip;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.core.particles.ParticleTypes;
import net.minecraft.network.chat.Component;
import net.minecraft.network.chat.MutableComponent;
import net.minecraft.world.phys.Vec3;

import javax.annotation.Nonnull;
Expand All @@ -33,11 +37,19 @@ public class TeamEditScreen extends BaseScreen implements LoadingResultHandler {

private static final Component SPAWNS = ComponentBuilder.text("spawns");
private static final Component MEMBERS = ComponentBuilder.text("members");
private static final Component REQUESTS = ComponentBuilder.text("requests");
private static final Component INVALID = ComponentBuilder.text("invalid");
private static final Component ADD = ComponentBuilder.text("add");
private static final Component REMOVE = ComponentBuilder.text("remove");
private static final Component SHOW = ComponentBuilder.text("show");
private static final Component INVITE = ComponentBuilder.text("invite");
private static final Component ALLOW_VISITS = ComponentBuilder.text("allow_visits");
private static final Component ALLOW_REQUESTS = ComponentBuilder.text("allow_requests");
private static final MutableComponent VISIT_BASE = ComponentBuilder.button("allow_visits").append(Component.literal(" "));
private static final MutableComponent REQUEST_BASE = ComponentBuilder.button("allow_requests").append(Component.literal(" "));

private static final Component ALLOWED = ComponentBuilder.text("allowed").withStyle(ChatFormatting.GREEN);
private static final Component DISALLOWED = ComponentBuilder.text("disallowed").withStyle(ChatFormatting.RED);

private final Team team;
private final BaseScreen prev;
Expand All @@ -48,7 +60,7 @@ public class TeamEditScreen extends BaseScreen implements LoadingResultHandler {
private boolean posValid;

public TeamEditScreen(Team team, BaseScreen prev) {
super(Component.literal(team.getName()), 245, 185);
super(Component.literal(team.getName()), 245, 231);
this.team = team;
this.prev = prev;
this.random = new Random();
Expand Down Expand Up @@ -116,15 +128,25 @@ protected void init() {
.build());

this.addRenderableWidget(Button.builder(SHOW, button -> Minecraft.getInstance().setScreen(new TeamPlayersScreen(this.team, this)))
.bounds(this.x(10), this.y(115), 70, 20)
.bounds(this.x(10), this.y(115), 90, 20)
.build());

this.addRenderableWidget(Button.builder(INVITE, button -> Minecraft.getInstance().setScreen(new InvitablePlayersScreen(this.team, this)))
.bounds(this.x(85), this.y(115), 70, 20)
.bounds(this.x(105), this.y(115), 90, 20)
.build());

this.addRenderableWidget(Button.builder(ALLOW_VISITS, button -> ToggleButtons.toggleState(this.team, button, VISIT_BASE, ToggleButtons.Type.VISITS))
.tooltip(Tooltip.create(VISIT_BASE.copy().append(this.team.allowsVisits() ? ALLOWED : DISALLOWED)))
.bounds(this.x(10), this.y(161), 90, 20)
.build());

this.addRenderableWidget(Button.builder(ALLOW_REQUESTS, button -> ToggleButtons.toggleState(this.team, button, REQUEST_BASE, ToggleButtons.Type.JOIN_REQUEST))
.tooltip(Tooltip.create(REQUEST_BASE.copy().append(this.team.allowsJoinRequests() ? ALLOWED : DISALLOWED)))
.bounds(this.x(105), this.y(161), 90, 20)
.build());

this.addRenderableWidget(Button.builder(PREV_SCREEN_COMPONENT, button -> Minecraft.getInstance().setScreen(this.prev))
.bounds(this.x(10), this.y(155), 226, 20)
.bounds(this.x(10), this.y(201), 226, 20)
.build());

if (!PermissionsConfig.selfManage || !PermissionsConfig.Spawns.modifySpawns) {
Expand Down Expand Up @@ -154,6 +176,7 @@ public void render_(@Nonnull GuiGraphics guiGraphics, int mouseX, int mouseY, fl

guiGraphics.drawString(this.font, SPAWNS, this.x(10), this.y(30), Color.DARK_GRAY.getRGB(), false);
guiGraphics.drawString(this.font, MEMBERS, this.x(10), this.y(100), Color.DARK_GRAY.getRGB(), false);
guiGraphics.drawString(this.font, REQUESTS, this.x(10), this.y(146), Color.DARK_GRAY.getRGB(), false);

if (!this.posValid) {
guiGraphics.pose().pushPose();
Expand Down
13 changes: 12 additions & 1 deletion src/main/java/de/melanx/skyguis/network/EasyNetwork.java
@@ -1,8 +1,10 @@
package de.melanx.skyguis.network;

import de.melanx.skyblockbuilder.data.Team;
import de.melanx.skyblockbuilder.template.TemplateLoader;
import de.melanx.skyguis.network.handler.*;
import de.melanx.skyguis.util.LoadingResult;
import de.melanx.skyguis.util.ToggleButtons;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.network.chat.Component;
Expand All @@ -24,7 +26,7 @@ public EasyNetwork(ModX mod) {

@Override
protected Protocol getProtocol() {
return Protocol.of("4");
return Protocol.of("5");
}

@Override
Expand All @@ -36,6 +38,7 @@ protected void registerPackets() {
this.registerGame(NetworkDirection.PLAY_TO_SERVER, new AnswerInvitation.Serializer(), () -> AnswerInvitation.Handler::new);
this.registerGame(NetworkDirection.PLAY_TO_SERVER, new RequestTemplateFromServer.Serializer(), () -> RequestTemplateFromServer.Handler::new);
this.registerGame(NetworkDirection.PLAY_TO_SERVER, new VisitTeam.Serializer(), () -> VisitTeam.Handler::new);
this.registerGame(NetworkDirection.PLAY_TO_SERVER, new ToggleStateButtonClick.Serializer(), () -> ToggleStateButtonClick.Handler::new);

this.registerGame(NetworkDirection.PLAY_TO_CLIENT, new OpenGui.Serializer(), () -> OpenGui.Handler::new);
this.registerGame(NetworkDirection.PLAY_TO_CLIENT, new SendLoadingResult.Serializer(), () -> SendLoadingResult.Handler::new);
Expand Down Expand Up @@ -73,4 +76,12 @@ public void requestTemplateFromServer(String name) {
public void sendTemplateToClient(NetworkEvent.Context ctx, String name) {
this.channel.reply(new SendTemplateToClient(name, TemplateLoader.getConfiguredTemplate(name)), ctx);
}

public void toggleState(Team team, ToggleButtons.Type type) {
this.toggleState(team.getId(), type);
}

public void toggleState(UUID team, ToggleButtons.Type type) {
this.channel.sendToServer(new ToggleStateButtonClick(team, type));
}
}
@@ -0,0 +1,64 @@
package de.melanx.skyguis.network.handler;

import de.melanx.skyblockbuilder.data.SkyblockSavedData;
import de.melanx.skyblockbuilder.data.Team;
import de.melanx.skyguis.util.ToggleButtons;
import net.minecraft.network.FriendlyByteBuf;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.world.level.Level;
import net.minecraftforge.network.NetworkEvent;
import org.moddingx.libx.network.PacketHandler;
import org.moddingx.libx.network.PacketSerializer;

import java.util.UUID;
import java.util.function.Supplier;

public record ToggleStateButtonClick(UUID team, ToggleButtons.Type type) {

public static class Handler implements PacketHandler<ToggleStateButtonClick> {

@Override
public Target target() {
return Target.MAIN_THREAD;
}

@Override
public boolean handle(ToggleStateButtonClick msg, Supplier<NetworkEvent.Context> ctx) {
ServerPlayer player = ctx.get().getSender();
if (player == null) {
return true;
}

Level level = player.level();
SkyblockSavedData data = SkyblockSavedData.get(level);
Team team = data.getTeam(msg.team);
if (team != null) {
switch (msg.type) {
case VISITS -> team.setAllowVisit(!team.allowsVisits());
case JOIN_REQUEST -> team.setAllowJoinRequest(!team.allowsJoinRequests());
}
}

return true;
}
}

public static class Serializer implements PacketSerializer<ToggleStateButtonClick> {

@Override
public Class<ToggleStateButtonClick> messageClass() {
return ToggleStateButtonClick.class;
}

@Override
public void encode(ToggleStateButtonClick msg, FriendlyByteBuf buffer) {
buffer.writeUUID(msg.team);
buffer.writeEnum(msg.type);
}

@Override
public ToggleStateButtonClick decode(FriendlyByteBuf buffer) {
return new ToggleStateButtonClick(buffer.readUUID(), buffer.readEnum(ToggleButtons.Type.class));
}
}
}
36 changes: 36 additions & 0 deletions src/main/java/de/melanx/skyguis/util/ToggleButtons.java
@@ -0,0 +1,36 @@
package de.melanx.skyguis.util;

import de.melanx.skyblockbuilder.data.Team;
import de.melanx.skyguis.SkyGUIs;
import net.minecraft.ChatFormatting;
import net.minecraft.client.gui.components.Button;
import net.minecraft.client.gui.components.Tooltip;
import net.minecraft.network.chat.Component;
import net.minecraft.network.chat.MutableComponent;

public class ToggleButtons {

private static final Component ALLOWED = ComponentBuilder.text("allowed").withStyle(ChatFormatting.GREEN);
private static final Component DISALLOWED = ComponentBuilder.text("disallowed").withStyle(ChatFormatting.RED);

public static void toggleState(Team team, Button button, MutableComponent base, Type type) {
switch (type) {
case VISITS -> team.setAllowVisit(!team.allowsVisits());
case JOIN_REQUEST -> team.setAllowJoinRequest(!team.allowsJoinRequests());
}
button.setTooltip(Tooltip.create(base.copy().append(getStatus(team, type) ? ALLOWED : DISALLOWED)));
SkyGUIs.getNetwork().toggleState(team, type);
}

public static boolean getStatus(Team team, Type type) {
return switch (type) {
case VISITS -> team.allowsVisits();
case JOIN_REQUEST -> team.allowsJoinRequests();
};
}

public enum Type {
VISITS,
JOIN_REQUEST
}
}
7 changes: 7 additions & 0 deletions src/main/resources/assets/skyguis/lang/en_us.json
Expand Up @@ -7,6 +7,8 @@
"screen.skyguis.title.all_teams": "All Teams",
"screen.skyguis.title.invitations": "Your Invitations",

"screen.skyguis.text.allowed": "allowed",
"screen.skyguis.text.disallowed": "disallowed",
"screen.skyguis.text.name": "Name",
"screen.skyguis.text.team_id": "Team ID",
"screen.skyguis.text.members": "Members",
Expand Down Expand Up @@ -37,11 +39,16 @@
"screen.skyguis.text.you_sure_ignore": "Do you really want to ignore invitation by \"%s\"?",
"screen.skyguis.text.empty_templates": "No templates available",
"screen.skyguis.text.missing_permissions": "You do not have permissions to perform this action",
"screen.skyguis.text.requests": "Requests",
"screen.skyguis.text.allow_visits": "Visits",
"screen.skyguis.text.allow_requests": "Join requests",

"screen.skyguis.button.create": "Create",
"screen.skyguis.button.confirm": "Confirm",
"screen.skyguis.button.abort": "Abort",
"screen.skyguis.button.ok": "OK",
"screen.skyguis.button.allow_visits": "Visits are",
"screen.skyguis.button.allow_requests": "Join requests are",

"skyguis.key.all_teams_screen": "Open main screen"
}

0 comments on commit b9d6526

Please sign in to comment.