package com.mojang.realmsclient.gui.screens; import com.mojang.realmsclient.util.RealmsTextureManager; import net.minecraft.realms.RealmListEntry; import net.minecraft.realms.RealmsObjectSelectionList; import org.apache.logging.log4j.LogManager; import net.minecraft.realms.RealmsDefaultVertexFormat; import com.mojang.blaze3d.systems.RenderSystem; import net.minecraft.realms.Tezzelator; import com.mojang.realmsclient.dto.Ops; import com.mojang.realmsclient.exception.RealmsServiceException; import com.mojang.realmsclient.client.RealmsClient; import java.util.Iterator; import net.minecraft.realms.RealmsGuiEventListener; import com.mojang.realmsclient.dto.PlayerInfo; import net.minecraft.realms.AbstractRealmsButton; import net.minecraft.realms.Realms; import com.mojang.realmsclient.gui.RealmsConstants; import net.minecraft.realms.RealmsLabel; import net.minecraft.realms.RealmsButton; import com.mojang.realmsclient.dto.RealmsServer; import org.apache.logging.log4j.Logger; import net.minecraft.realms.RealmsScreen; public class RealmsPlayerScreen extends RealmsScreen { private static final Logger LOGGER; private String toolTip; private final RealmsConfigureWorldScreen lastScreen; private final RealmsServer serverData; private InvitedObjectSelectionList invitedObjectSelectionList; private int column1_x; private int column_width; private int column2_x; private RealmsButton removeButton; private RealmsButton opdeopButton; private int selectedInvitedIndex; private String selectedInvited; private int player; private boolean stateChanged; private RealmsLabel titleLabel; public RealmsPlayerScreen(final RealmsConfigureWorldScreen czs, final RealmsServer realmsServer) { this.selectedInvitedIndex = -1; this.player = -1; this.lastScreen = czs; this.serverData = realmsServer; } @Override public void tick() { super.tick(); } @Override public void init() { this.column1_x = this.width() / 2 - 160; this.column_width = 150; this.column2_x = this.width() / 2 + 12; this.setKeyboardHandlerSendRepeatsToGui(true); this.buttonsAdd(new RealmsButton(1, this.column2_x, RealmsConstants.row(1), this.column_width + 10, 20, RealmsScreen.getLocalizedString("mco.configure.world.buttons.invite")) { @Override public void onPress() { Realms.setScreen(new RealmsInviteScreen(RealmsPlayerScreen.this.lastScreen, RealmsPlayerScreen.this, RealmsPlayerScreen.this.serverData)); } }); this.buttonsAdd(this.removeButton = new RealmsButton(4, this.column2_x, RealmsConstants.row(7), this.column_width + 10, 20, RealmsScreen.getLocalizedString("mco.configure.world.invites.remove.tooltip")) { @Override public void onPress() { RealmsPlayerScreen.this.uninvite(RealmsPlayerScreen.this.player); } }); this.buttonsAdd(this.opdeopButton = new RealmsButton(5, this.column2_x, RealmsConstants.row(9), this.column_width + 10, 20, RealmsScreen.getLocalizedString("mco.configure.world.invites.ops.tooltip")) { @Override public void onPress() { if (RealmsPlayerScreen.this.serverData.players.get(RealmsPlayerScreen.this.player).isOperator()) { RealmsPlayerScreen.this.deop(RealmsPlayerScreen.this.player); } else { RealmsPlayerScreen.this.op(RealmsPlayerScreen.this.player); } } }); this.buttonsAdd(new RealmsButton(0, this.column2_x + this.column_width / 2 + 2, RealmsConstants.row(12), this.column_width / 2 + 10 - 2, 20, RealmsScreen.getLocalizedString("gui.back")) { @Override public void onPress() { RealmsPlayerScreen.this.backButtonClicked(); } }); (this.invitedObjectSelectionList = new InvitedObjectSelectionList()).setLeftPos(this.column1_x); this.addWidget(this.invitedObjectSelectionList); for (final PlayerInfo playerInfo3 : this.serverData.players) { this.invitedObjectSelectionList.addEntry(playerInfo3); } this.addWidget(this.titleLabel = new RealmsLabel(RealmsScreen.getLocalizedString("mco.configure.world.players.title"), this.width() / 2, 17, 16777215)); this.narrateLabels(); this.updateButtonStates(); } private void updateButtonStates() { this.removeButton.setVisible(this.shouldRemoveAndOpdeopButtonBeVisible(this.player)); this.opdeopButton.setVisible(this.shouldRemoveAndOpdeopButtonBeVisible(this.player)); } private boolean shouldRemoveAndOpdeopButtonBeVisible(final int integer) { return integer != -1; } @Override public void removed() { this.setKeyboardHandlerSendRepeatsToGui(false); } @Override public boolean keyPressed(final int integer1, final int integer2, final int integer3) { if (integer1 == 256) { this.backButtonClicked(); return true; } return super.keyPressed(integer1, integer2, integer3); } private void backButtonClicked() { if (this.stateChanged) { Realms.setScreen(this.lastScreen.getNewScreen()); } else { Realms.setScreen(this.lastScreen); } } private void op(final int integer) { this.updateButtonStates(); final RealmsClient cyy3 = RealmsClient.createRealmsClient(); final String string4 = this.serverData.players.get(integer).getUuid(); try { this.updateOps(cyy3.op(this.serverData.id, string4)); } catch (RealmsServiceException czg5) { RealmsPlayerScreen.LOGGER.error("Couldn't op the user"); } } private void deop(final int integer) { this.updateButtonStates(); final RealmsClient cyy3 = RealmsClient.createRealmsClient(); final String string4 = this.serverData.players.get(integer).getUuid(); try { this.updateOps(cyy3.deop(this.serverData.id, string4)); } catch (RealmsServiceException czg5) { RealmsPlayerScreen.LOGGER.error("Couldn't deop the user"); } } private void updateOps(final Ops ops) { for (final PlayerInfo playerInfo4 : this.serverData.players) { playerInfo4.setOperator(ops.ops.contains(playerInfo4.getName())); } } private void uninvite(final int integer) { this.updateButtonStates(); if (integer >= 0 && integer < this.serverData.players.size()) { final PlayerInfo playerInfo3 = this.serverData.players.get(integer); this.selectedInvited = playerInfo3.getUuid(); this.selectedInvitedIndex = integer; final RealmsConfirmScreen czt4 = new RealmsConfirmScreen(this, "Question", RealmsScreen.getLocalizedString("mco.configure.world.uninvite.question") + " '" + playerInfo3.getName() + "' ?", 2); Realms.setScreen(czt4); } } @Override public void confirmResult(final boolean boolean1, final int integer) { if (integer == 2) { if (boolean1) { final RealmsClient cyy4 = RealmsClient.createRealmsClient(); try { cyy4.uninvite(this.serverData.id, this.selectedInvited); } catch (RealmsServiceException czg5) { RealmsPlayerScreen.LOGGER.error("Couldn't uninvite user"); } this.deleteFromInvitedList(this.selectedInvitedIndex); this.player = -1; this.updateButtonStates(); } this.stateChanged = true; Realms.setScreen(this); } } private void deleteFromInvitedList(final int integer) { this.serverData.players.remove(integer); } @Override public void render(final int integer1, final int integer2, final float float3) { this.toolTip = null; this.renderBackground(); if (this.invitedObjectSelectionList != null) { this.invitedObjectSelectionList.render(integer1, integer2, float3); } final int integer3 = RealmsConstants.row(12) + 20; final Tezzelator tezzelator6 = Tezzelator.instance; RealmsScreen.bind("textures/gui/options_background.png"); RenderSystem.color4f(1.0f, 1.0f, 1.0f, 1.0f); final float float4 = 32.0f; tezzelator6.begin(7, RealmsDefaultVertexFormat.POSITION_TEX_COLOR); tezzelator6.vertex(0.0, this.height(), 0.0).tex(0.0f, (this.height() - integer3) / 32.0f + 0.0f).color(64, 64, 64, 255).endVertex(); tezzelator6.vertex(this.width(), this.height(), 0.0).tex(this.width() / 32.0f, (this.height() - integer3) / 32.0f + 0.0f).color(64, 64, 64, 255).endVertex(); tezzelator6.vertex(this.width(), integer3, 0.0).tex(this.width() / 32.0f, 0.0f).color(64, 64, 64, 255).endVertex(); tezzelator6.vertex(0.0, integer3, 0.0).tex(0.0f, 0.0f).color(64, 64, 64, 255).endVertex(); tezzelator6.end(); this.titleLabel.render(this); if (this.serverData != null && this.serverData.players != null) { this.drawString(RealmsScreen.getLocalizedString("mco.configure.world.invited") + " (" + this.serverData.players.size() + ")", this.column1_x, RealmsConstants.row(0), 10526880); } else { this.drawString(RealmsScreen.getLocalizedString("mco.configure.world.invited"), this.column1_x, RealmsConstants.row(0), 10526880); } super.render(integer1, integer2, float3); if (this.serverData == null) { return; } if (this.toolTip != null) { this.renderMousehoverTooltip(this.toolTip, integer1, integer2); } } protected void renderMousehoverTooltip(final String string, final int integer2, final int integer3) { if (string == null) { return; } final int integer4 = integer2 + 12; final int integer5 = integer3 - 12; final int integer6 = this.fontWidth(string); this.fillGradient(integer4 - 3, integer5 - 3, integer4 + integer6 + 3, integer5 + 8 + 3, -1073741824, -1073741824); this.fontDrawShadow(string, integer4, integer5, 16777215); } private void drawRemoveIcon(final int integer1, final int integer2, final int integer3, final int integer4) { final boolean boolean6 = integer3 >= integer1 && integer3 <= integer1 + 9 && integer4 >= integer2 && integer4 <= integer2 + 9 && integer4 < RealmsConstants.row(12) + 20 && integer4 > RealmsConstants.row(1); RealmsScreen.bind("realms:textures/gui/realms/cross_player_icon.png"); RenderSystem.color4f(1.0f, 1.0f, 1.0f, 1.0f); RenderSystem.pushMatrix(); RealmsScreen.blit(integer1, integer2, 0.0f, boolean6 ? 7.0f : 0.0f, 8, 7, 8, 14); RenderSystem.popMatrix(); if (boolean6) { this.toolTip = RealmsScreen.getLocalizedString("mco.configure.world.invites.remove.tooltip"); } } private void drawOpped(final int integer1, final int integer2, final int integer3, final int integer4) { final boolean boolean6 = integer3 >= integer1 && integer3 <= integer1 + 9 && integer4 >= integer2 && integer4 <= integer2 + 9 && integer4 < RealmsConstants.row(12) + 20 && integer4 > RealmsConstants.row(1); RealmsScreen.bind("realms:textures/gui/realms/op_icon.png"); RenderSystem.color4f(1.0f, 1.0f, 1.0f, 1.0f); RenderSystem.pushMatrix(); RealmsScreen.blit(integer1, integer2, 0.0f, boolean6 ? 8.0f : 0.0f, 8, 8, 8, 16); RenderSystem.popMatrix(); if (boolean6) { this.toolTip = RealmsScreen.getLocalizedString("mco.configure.world.invites.ops.tooltip"); } } private void drawNormal(final int integer1, final int integer2, final int integer3, final int integer4) { final boolean boolean6 = integer3 >= integer1 && integer3 <= integer1 + 9 && integer4 >= integer2 && integer4 <= integer2 + 9 && integer4 < RealmsConstants.row(12) + 20 && integer4 > RealmsConstants.row(1); RealmsScreen.bind("realms:textures/gui/realms/user_icon.png"); RenderSystem.color4f(1.0f, 1.0f, 1.0f, 1.0f); RenderSystem.pushMatrix(); RealmsScreen.blit(integer1, integer2, 0.0f, boolean6 ? 8.0f : 0.0f, 8, 8, 8, 16); RenderSystem.popMatrix(); if (boolean6) { this.toolTip = RealmsScreen.getLocalizedString("mco.configure.world.invites.normal.tooltip"); } } static { LOGGER = LogManager.getLogger(); } class InvitedObjectSelectionList extends RealmsObjectSelectionList { public InvitedObjectSelectionList() { super(RealmsPlayerScreen.this.column_width + 10, RealmsConstants.row(12) + 20, RealmsConstants.row(1), RealmsConstants.row(12) + 20, 13); } public void addEntry(final PlayerInfo playerInfo) { this.addEntry(new InvitedObjectSelectionListEntry(playerInfo)); } @Override public int getRowWidth() { return (int)(this.width() * 1.0); } @Override public boolean isFocused() { return RealmsPlayerScreen.this.isFocused(this); } @Override public boolean mouseClicked(final double double1, final double double2, final int integer) { if (integer == 0 && double1 < this.getScrollbarPosition() && double2 >= this.y0() && double2 <= this.y1()) { final int integer2 = RealmsPlayerScreen.this.column1_x; final int integer3 = RealmsPlayerScreen.this.column1_x + RealmsPlayerScreen.this.column_width; final int integer4 = (int)Math.floor(double2 - this.y0()) - this.headerHeight() + this.getScroll() - 4; final int integer5 = integer4 / this.itemHeight(); if (double1 >= integer2 && double1 <= integer3 && integer5 >= 0 && integer4 >= 0 && integer5 < this.getItemCount()) { this.selectItem(integer5); this.itemClicked(integer4, integer5, double1, double2, this.width()); } return true; } return super.mouseClicked(double1, double2, integer); } @Override public void itemClicked(final int integer1, final int integer2, final double double3, final double double4, final int integer5) { if (integer2 < 0 || integer2 > RealmsPlayerScreen.this.serverData.players.size() || RealmsPlayerScreen.this.toolTip == null) { return; } if (RealmsPlayerScreen.this.toolTip.equals(RealmsScreen.getLocalizedString("mco.configure.world.invites.ops.tooltip")) || RealmsPlayerScreen.this.toolTip.equals(RealmsScreen.getLocalizedString("mco.configure.world.invites.normal.tooltip"))) { if (RealmsPlayerScreen.this.serverData.players.get(integer2).isOperator()) { RealmsPlayerScreen.this.deop(integer2); } else { RealmsPlayerScreen.this.op(integer2); } } else if (RealmsPlayerScreen.this.toolTip.equals(RealmsScreen.getLocalizedString("mco.configure.world.invites.remove.tooltip"))) { RealmsPlayerScreen.this.uninvite(integer2); } } @Override public void selectItem(final int integer) { this.setSelected(integer); if (integer != -1) { Realms.narrateNow(RealmsScreen.getLocalizedString("narrator.select", RealmsPlayerScreen.this.serverData.players.get(integer).getName())); } this.selectInviteListItem(integer); } public void selectInviteListItem(final int integer) { RealmsPlayerScreen.this.player = integer; RealmsPlayerScreen.this.updateButtonStates(); } @Override public void renderBackground() { RealmsPlayerScreen.this.renderBackground(); } @Override public int getScrollbarPosition() { return RealmsPlayerScreen.this.column1_x + this.width() - 5; } @Override public int getItemCount() { return (RealmsPlayerScreen.this.serverData == null) ? 1 : RealmsPlayerScreen.this.serverData.players.size(); } @Override public int getMaxPosition() { return this.getItemCount() * 13; } } class InvitedObjectSelectionListEntry extends RealmListEntry { final PlayerInfo mPlayerInfo; public InvitedObjectSelectionListEntry(final PlayerInfo playerInfo) { this.mPlayerInfo = playerInfo; } @Override public void render(final int integer1, final int integer2, final int integer3, final int integer4, final int integer5, final int integer6, final int integer7, final boolean boolean8, final float float9) { this.renderInvitedItem(this.mPlayerInfo, integer3, integer2, integer6, integer7); } private void renderInvitedItem(final PlayerInfo playerInfo, final int integer2, final int integer3, final int integer4, final int integer5) { int integer6; if (!playerInfo.getAccepted()) { integer6 = 10526880; } else if (playerInfo.getOnline()) { integer6 = 8388479; } else { integer6 = 16777215; } RealmsPlayerScreen.this.drawString(playerInfo.getName(), RealmsPlayerScreen.this.column1_x + 3 + 12, integer3 + 1, integer6); if (playerInfo.isOperator()) { RealmsPlayerScreen.this.drawOpped(RealmsPlayerScreen.this.column1_x + RealmsPlayerScreen.this.column_width - 10, integer3 + 1, integer4, integer5); } else { RealmsPlayerScreen.this.drawNormal(RealmsPlayerScreen.this.column1_x + RealmsPlayerScreen.this.column_width - 10, integer3 + 1, integer4, integer5); } RealmsPlayerScreen.this.drawRemoveIcon(RealmsPlayerScreen.this.column1_x + RealmsPlayerScreen.this.column_width - 22, integer3 + 2, integer4, integer5); RealmsPlayerScreen.this.drawString(RealmsScreen.getLocalizedString("mco.configure.world.activityfeed.disabled"), RealmsPlayerScreen.this.column2_x, RealmsConstants.row(5), 10526880); RealmsTextureManager.withBoundFace(playerInfo.getUuid(), () -> { RenderSystem.color4f(1.0f, 1.0f, 1.0f, 1.0f); RealmsScreen.blit(RealmsPlayerScreen.this.column1_x + 2 + 2, integer3 + 1, 8.0f, 8.0f, 8, 8, 8, 8, 64, 64); RealmsScreen.blit(RealmsPlayerScreen.this.column1_x + 2 + 2, integer3 + 1, 40.0f, 8.0f, 8, 8, 8, 8, 64, 64); }); } } }