Update to 1.16

This commit is contained in:
Reno 2020-07-22 05:32:50 +00:00
parent 5e2a724cda
commit d8a1b8e0de
3376 changed files with 184975 additions and 145316 deletions

85916
client.txt

File diff suppressed because it is too large Load Diff

View File

@ -88,8 +88,8 @@ public class Channel {
return this.getState() == 4116;
}
public void setSelfPosition(final Vec3 cvl) {
AL10.alSourcefv(this.source, 4100, new float[] { (float)cvl.x, (float)cvl.y, (float)cvl.z });
public void setSelfPosition(final Vec3 dem) {
AL10.alSourcefv(this.source, 4100, new float[] { (float)dem.x, (float)dem.y, (float)dem.z });
}
public void setPitch(final float float1) {
@ -119,13 +119,13 @@ public class Channel {
AL10.alSourcei(this.source, 514, (int)(boolean1 ? 1 : 0));
}
public void attachStaticBuffer(final SoundBuffer cwx) {
cwx.getAlBuffer().ifPresent(integer -> AL10.alSourcei(this.source, 4105, integer));
public void attachStaticBuffer(final SoundBuffer dfy) {
dfy.getAlBuffer().ifPresent(integer -> AL10.alSourcei(this.source, 4105, integer));
}
public void attachBufferStream(final AudioStream eds) {
this.stream = eds;
final AudioFormat audioFormat3 = eds.getFormat();
public void attachBufferStream(final AudioStream epf) {
this.stream = epf;
final AudioFormat audioFormat3 = epf.getFormat();
this.streamingBufferSize = calculateBufferSize(audioFormat3, 1);
this.pumpBuffers(4);
}

View File

@ -113,8 +113,8 @@ public class Library {
return ((c == Pool.STREAMING) ? this.streamingChannels : this.staticChannels).acquire();
}
public void releaseChannel(final Channel cws) {
if (!this.staticChannels.release(cws) && !this.streamingChannels.release(cws)) {
public void releaseChannel(final Channel dft) {
if (!this.staticChannels.release(dft) && !this.streamingChannels.release(dft)) {
throw new IllegalStateException("Tried to release unknown channel");
}
}
@ -133,7 +133,7 @@ public class Library {
}
@Override
public boolean release(final Channel cws) {
public boolean release(final Channel dft) {
return false;
}
@ -171,21 +171,22 @@ public class Library {
@Override
public Channel acquire() {
if (this.activeChannels.size() >= this.limit) {
Library.LOGGER.warn("Maximum sound pool size {} reached", this.limit);
return null;
}
final Channel cws2 = Channel.create();
if (cws2 != null) {
this.activeChannels.add(cws2);
final Channel dft2 = Channel.create();
if (dft2 != null) {
this.activeChannels.add(dft2);
}
return cws2;
return dft2;
}
@Override
public boolean release(final Channel cws) {
if (!this.activeChannels.remove(cws)) {
public boolean release(final Channel dft) {
if (!this.activeChannels.remove(dft)) {
return false;
}
cws.destroy();
dft.destroy();
return true;
}
@ -210,7 +211,7 @@ public class Library {
@Nullable
Channel acquire();
boolean release(final Channel cws);
boolean release(final Channel dft);
void cleanup();

View File

@ -6,17 +6,24 @@ import net.minecraft.world.phys.Vec3;
public class Listener {
private float gain;
private Vec3 position;
public Listener() {
this.gain = 1.0f;
this.position = Vec3.ZERO;
}
public void setListenerPosition(final Vec3 cvl) {
AL10.alListener3f(4100, (float)cvl.x, (float)cvl.y, (float)cvl.z);
public void setListenerPosition(final Vec3 dem) {
this.position = dem;
AL10.alListener3f(4100, (float)dem.x, (float)dem.y, (float)dem.z);
}
public void setListenerOrientation(final Vector3f e1, final Vector3f e2) {
AL10.alListenerfv(4111, new float[] { e1.x(), e1.y(), e1.z(), e2.x(), e2.y(), e2.z() });
public Vec3 getListenerPosition() {
return this.position;
}
public void setListenerOrientation(final Vector3f g1, final Vector3f g2) {
AL10.alListenerfv(4111, new float[] { g1.x(), g1.y(), g1.z(), g2.x(), g2.y(), g2.z() });
}
public void setGain(final float float1) {

View File

@ -5,7 +5,6 @@ import net.minecraft.util.Mth;
import org.lwjgl.BufferUtils;
import com.google.common.collect.Lists;
import java.util.List;
import javax.annotation.Nullable;
import java.nio.FloatBuffer;
import org.lwjgl.PointerBuffer;
import java.nio.Buffer;
@ -166,7 +165,6 @@ public class OggAudioStream implements AudioStream {
return this.audioFormat;
}
@Nullable
@Override
public ByteBuffer read(final int integer) throws IOException {
final OutputConcat a3 = new OutputConcat(integer + 8192);
@ -174,7 +172,6 @@ public class OggAudioStream implements AudioStream {
return a3.get();
}
@Override
public ByteBuffer readAll() throws IOException {
final OutputConcat a2 = new OutputConcat(16384);
while (this.readFrame(a2)) {}

View File

@ -1,5 +1,6 @@
package com.mojang.blaze3d.font;
import it.unimi.dsi.fastutil.ints.IntSet;
import javax.annotation.Nullable;
import java.io.Closeable;
@ -8,7 +9,9 @@ public interface GlyphProvider extends Closeable {
}
@Nullable
default RawGlyph getGlyph(final char character) {
default RawGlyph getGlyph(final int integer) {
return null;
}
IntSet getSupportedGlyphs();
}

View File

@ -1,14 +1,18 @@
package com.mojang.blaze3d.font;
import com.mojang.blaze3d.platform.NativeImage;
import java.util.function.Supplier;
import it.unimi.dsi.fastutil.ints.IntCollection;
import it.unimi.dsi.fastutil.ints.IntOpenHashSet;
import java.util.stream.IntStream;
import java.nio.Buffer;
import org.lwjgl.system.MemoryUtil;
import javax.annotation.Nullable;
import java.nio.IntBuffer;
import org.lwjgl.system.MemoryStack;
import org.lwjgl.stb.STBTruetype;
import it.unimi.dsi.fastutil.chars.CharArraySet;
import it.unimi.dsi.fastutil.chars.CharSet;
import it.unimi.dsi.fastutil.ints.IntArraySet;
import it.unimi.dsi.fastutil.ints.IntSet;
import org.lwjgl.stb.STBTTFontinfo;
import java.nio.ByteBuffer;
@ -16,18 +20,18 @@ public class TrueTypeGlyphProvider implements GlyphProvider {
private final ByteBuffer fontMemory;
private final STBTTFontinfo font;
private final float oversample;
private final CharSet skip;
private final IntSet skip;
private final float shiftX;
private final float shiftY;
private final float pointScale;
private final float ascent;
public TrueTypeGlyphProvider(final ByteBuffer byteBuffer, final STBTTFontinfo sTBTTFontinfo, final float float3, final float float4, final float float5, final float float6, final String string) {
this.skip = (CharSet)new CharArraySet();
this.skip = (IntSet)new IntArraySet();
this.fontMemory = byteBuffer;
this.font = sTBTTFontinfo;
this.oversample = float4;
string.chars().forEach(integer -> this.skip.add((char)(integer & 0xFFFF)));
string.codePoints().forEach(this.skip::add);
this.shiftX = float5 * float4;
this.shiftY = float6 * float4;
this.pointScale = STBTruetype.stbtt_ScaleForPixelHeight(sTBTTFontinfo, float3 * float4);
@ -42,8 +46,8 @@ public class TrueTypeGlyphProvider implements GlyphProvider {
@Nullable
@Override
public Glyph getGlyph(final char character) {
if (this.skip.contains(character)) {
public Glyph getGlyph(final int integer) {
if (this.skip.contains(integer)) {
return null;
}
try (final MemoryStack memoryStack3 = MemoryStack.stackPush()) {
@ -51,20 +55,20 @@ public class TrueTypeGlyphProvider implements GlyphProvider {
final IntBuffer intBuffer6 = memoryStack3.mallocInt(1);
final IntBuffer intBuffer7 = memoryStack3.mallocInt(1);
final IntBuffer intBuffer8 = memoryStack3.mallocInt(1);
final int integer9 = STBTruetype.stbtt_FindGlyphIndex(this.font, (int)character);
if (integer9 == 0) {
final int integer2 = STBTruetype.stbtt_FindGlyphIndex(this.font, integer);
if (integer2 == 0) {
return null;
}
STBTruetype.stbtt_GetGlyphBitmapBoxSubpixel(this.font, integer9, this.pointScale, this.pointScale, this.shiftX, this.shiftY, intBuffer5, intBuffer6, intBuffer7, intBuffer8);
final int integer10 = intBuffer7.get(0) - intBuffer5.get(0);
final int integer11 = intBuffer8.get(0) - intBuffer6.get(0);
if (integer10 == 0 || integer11 == 0) {
STBTruetype.stbtt_GetGlyphBitmapBoxSubpixel(this.font, integer2, this.pointScale, this.pointScale, this.shiftX, this.shiftY, intBuffer5, intBuffer6, intBuffer7, intBuffer8);
final int integer3 = intBuffer7.get(0) - intBuffer5.get(0);
final int integer4 = intBuffer8.get(0) - intBuffer6.get(0);
if (integer3 == 0 || integer4 == 0) {
return null;
}
final IntBuffer intBuffer9 = memoryStack3.mallocInt(1);
final IntBuffer intBuffer10 = memoryStack3.mallocInt(1);
STBTruetype.stbtt_GetGlyphHMetrics(this.font, integer9, intBuffer9, intBuffer10);
return new Glyph(intBuffer5.get(0), intBuffer7.get(0), -intBuffer6.get(0), -intBuffer8.get(0), intBuffer9.get(0) * this.pointScale, intBuffer10.get(0) * this.pointScale, integer9);
STBTruetype.stbtt_GetGlyphHMetrics(this.font, integer2, intBuffer9, intBuffer10);
return new Glyph(intBuffer5.get(0), intBuffer7.get(0), -intBuffer6.get(0), -intBuffer8.get(0), intBuffer9.get(0) * this.pointScale, intBuffer10.get(0) * this.pointScale, integer2);
}
}
@ -74,6 +78,11 @@ public class TrueTypeGlyphProvider implements GlyphProvider {
MemoryUtil.memFree((Buffer)this.fontMemory);
}
@Override
public IntSet getSupportedGlyphs() {
return IntStream.range(0, 65535).filter(integer -> !this.skip.contains(integer)).<IntSet>collect((Supplier<IntSet>)IntOpenHashSet::new, IntCollection::add, IntCollection::addAll);
}
class Glyph implements RawGlyph {
private final int width;
private final int height;
@ -123,9 +132,9 @@ public class TrueTypeGlyphProvider implements GlyphProvider {
@Override
public void upload(final int integer1, final int integer2) {
final NativeImage cxr4 = new NativeImage(NativeImage.Format.LUMINANCE, this.width, this.height, false);
cxr4.copyFromFont(TrueTypeGlyphProvider.this.font, this.index, this.width, this.height, TrueTypeGlyphProvider.this.pointScale, TrueTypeGlyphProvider.this.pointScale, TrueTypeGlyphProvider.this.shiftX, TrueTypeGlyphProvider.this.shiftY, 0, 0);
cxr4.upload(0, integer1, integer2, 0, 0, this.width, this.height, false, true);
final NativeImage dgs4 = new NativeImage(NativeImage.Format.LUMINANCE, this.width, this.height, false);
dgs4.copyFromFont(TrueTypeGlyphProvider.this.font, this.index, this.width, this.height, TrueTypeGlyphProvider.this.pointScale, TrueTypeGlyphProvider.this.pointScale, TrueTypeGlyphProvider.this.shiftX, TrueTypeGlyphProvider.this.shiftY, 0, 0);
dgs4.upload(0, integer1, integer2, 0, 0, this.width, this.height, false, true);
}
@Override

View File

@ -58,7 +58,7 @@ public class RenderTarget {
this.unbindRead();
this.unbindWrite();
if (this.depthBufferId > -1) {
GlStateManager._glDeleteRenderbuffers(this.depthBufferId);
TextureUtil.releaseTextureId(this.depthBufferId);
this.depthBufferId = -1;
}
if (this.colorTextureId > -1) {
@ -72,6 +72,27 @@ public class RenderTarget {
}
}
public void copyDepthFrom(final RenderTarget dgf) {
RenderSystem.assertThread(RenderSystem::isOnRenderThreadOrInit);
if (GlStateManager.supportsFramebufferBlit()) {
GlStateManager._glBindFramebuffer(36008, dgf.frameBufferId);
GlStateManager._glBindFramebuffer(36009, this.frameBufferId);
GlStateManager._glBlitFrameBuffer(0, 0, dgf.width, dgf.height, 0, 0, this.width, this.height, 256, 9728);
}
else {
GlStateManager._glBindFramebuffer(GlConst.GL_FRAMEBUFFER, this.frameBufferId);
final int integer3 = GlStateManager.getFramebufferDepthTexture();
if (integer3 != 0) {
final int integer4 = GlStateManager.getActiveTextureName();
GlStateManager._bindTexture(integer3);
GlStateManager._glBindFramebuffer(GlConst.GL_FRAMEBUFFER, dgf.frameBufferId);
GlStateManager._glCopyTexSubImage2D(3553, 0, 0, 0, 0, 0, Math.min(this.width, dgf.width), Math.min(this.height, dgf.height));
GlStateManager._bindTexture(integer4);
}
}
GlStateManager._glBindFramebuffer(GlConst.GL_FRAMEBUFFER, 0);
}
public void createBuffers(final int integer1, final int integer2, final boolean boolean3) {
RenderSystem.assertThread(RenderSystem::isOnRenderThreadOrInit);
this.viewWidth = integer1;
@ -81,7 +102,13 @@ public class RenderTarget {
this.frameBufferId = GlStateManager.glGenFramebuffers();
this.colorTextureId = TextureUtil.generateTextureId();
if (this.useDepth) {
this.depthBufferId = GlStateManager.glGenRenderbuffers();
GlStateManager._bindTexture(this.depthBufferId = TextureUtil.generateTextureId());
GlStateManager._texParameter(3553, 10241, 9728);
GlStateManager._texParameter(3553, 10240, 9728);
GlStateManager._texParameter(3553, 10242, 10496);
GlStateManager._texParameter(3553, 10243, 10496);
GlStateManager._texParameter(3553, 34892, 0);
GlStateManager._texImage2D(3553, 0, 6402, this.width, this.height, 0, 6402, 5126, null);
}
this.setFilterMode(9728);
GlStateManager._bindTexture(this.colorTextureId);
@ -89,9 +116,7 @@ public class RenderTarget {
GlStateManager._glBindFramebuffer(GlConst.GL_FRAMEBUFFER, this.frameBufferId);
GlStateManager._glFramebufferTexture2D(GlConst.GL_FRAMEBUFFER, GlConst.GL_COLOR_ATTACHMENT0, 3553, this.colorTextureId, 0);
if (this.useDepth) {
GlStateManager._glBindRenderbuffer(GlConst.GL_RENDERBUFFER, this.depthBufferId);
GlStateManager._glRenderbufferStorage(GlConst.GL_RENDERBUFFER, 33190, this.width, this.height);
GlStateManager._glFramebufferRenderbuffer(GlConst.GL_FRAMEBUFFER, GlConst.GL_DEPTH_ATTACHMENT, GlConst.GL_RENDERBUFFER, this.depthBufferId);
GlStateManager._glFramebufferTexture2D(GlConst.GL_FRAMEBUFFER, GlConst.GL_DEPTH_ATTACHMENT, 3553, this.depthBufferId, 0);
}
this.checkStatus();
this.clear(boolean3);
@ -212,14 +237,14 @@ public class RenderTarget {
final float float6 = (float)integer2;
final float float7 = this.viewWidth / (float)this.width;
final float float8 = this.viewHeight / (float)this.height;
final Tesselator cym9 = RenderSystem.renderThreadTesselator();
final BufferBuilder cyg10 = cym9.getBuilder();
cyg10.begin(7, DefaultVertexFormat.POSITION_TEX_COLOR);
cyg10.vertex(0.0, float6, 0.0).uv(0.0f, 0.0f).color(255, 255, 255, 255).endVertex();
cyg10.vertex(float5, float6, 0.0).uv(float7, 0.0f).color(255, 255, 255, 255).endVertex();
cyg10.vertex(float5, 0.0, 0.0).uv(float7, float8).color(255, 255, 255, 255).endVertex();
cyg10.vertex(0.0, 0.0, 0.0).uv(0.0f, float8).color(255, 255, 255, 255).endVertex();
cym9.end();
final Tesselator dhn9 = RenderSystem.renderThreadTesselator();
final BufferBuilder dhg10 = dhn9.getBuilder();
dhg10.begin(7, DefaultVertexFormat.POSITION_TEX_COLOR);
dhg10.vertex(0.0, float6, 0.0).uv(0.0f, 0.0f).color(255, 255, 255, 255).endVertex();
dhg10.vertex(float5, float6, 0.0).uv(float7, 0.0f).color(255, 255, 255, 255).endVertex();
dhg10.vertex(float5, 0.0, 0.0).uv(float7, float8).color(255, 255, 255, 255).endVertex();
dhg10.vertex(0.0, 0.0, 0.0).uv(0.0f, float8).color(255, 255, 255, 255).endVertex();
dhn9.end();
this.unbindRead();
GlStateManager._depthMask(true);
GlStateManager._colorMask(true, true, true, true);

View File

@ -4,7 +4,7 @@ import java.nio.Buffer;
import org.lwjgl.system.MemoryUtil;
import com.google.common.base.Charsets;
import org.lwjgl.glfw.GLFWErrorCallback;
import net.minecraft.SharedConstants;
import net.minecraft.client.StringDecomposer;
import org.lwjgl.glfw.GLFW;
import org.lwjgl.glfw.GLFWErrorCallbackI;
import org.lwjgl.BufferUtils;
@ -20,7 +20,7 @@ public class ClipboardManager {
public String getClipboard(final long long1, final GLFWErrorCallbackI gLFWErrorCallbackI) {
final GLFWErrorCallback gLFWErrorCallback5 = GLFW.glfwSetErrorCallback(gLFWErrorCallbackI);
String string6 = GLFW.glfwGetClipboardString(long1);
string6 = ((string6 != null) ? SharedConstants.filterUnicodeSupplementary(string6) : "");
string6 = ((string6 != null) ? StringDecomposer.filterBrokenSurrogates(string6) : "");
final GLFWErrorCallback gLFWErrorCallback6 = GLFW.glfwSetErrorCallback((GLFWErrorCallbackI)gLFWErrorCallback5);
if (gLFWErrorCallback6 != null) {
gLFWErrorCallback6.free();

View File

@ -41,9 +41,9 @@ public class GLX {
return GlStateManager._getString(7937) + " GL version " + GlStateManager._getString(7938) + ", " + GlStateManager._getString(7936);
}
public static int _getRefreshRate(final Window cxx) {
public static int _getRefreshRate(final Window dgy) {
RenderSystem.assertThread(RenderSystem::isOnRenderThread);
long long2 = GLFW.glfwGetWindowMonitor(cxx.getWindow());
long long2 = GLFW.glfwGetWindowMonitor(dgy.getWindow());
if (long2 == 0L) {
long2 = GLFW.glfwGetPrimaryMonitor();
}
@ -84,8 +84,8 @@ public class GLX {
}
}
public static boolean _shouldClose(final Window cxx) {
return GLFW.glfwWindowShouldClose(cxx.getWindow());
public static boolean _shouldClose(final Window dgy) {
return GLFW.glfwWindowShouldClose(dgy.getWindow());
}
public static void _setupNvFogDistance() {
@ -119,38 +119,38 @@ public class GLX {
RenderSystem.assertThread(RenderSystem::isOnRenderThread);
GlStateManager._disableTexture();
GlStateManager._depthMask(false);
final Tesselator cym5 = RenderSystem.renderThreadTesselator();
final BufferBuilder cyg6 = cym5.getBuilder();
final Tesselator dhn5 = RenderSystem.renderThreadTesselator();
final BufferBuilder dhg6 = dhn5.getBuilder();
GL11.glLineWidth(4.0f);
cyg6.begin(1, DefaultVertexFormat.POSITION_COLOR);
dhg6.begin(1, DefaultVertexFormat.POSITION_COLOR);
if (boolean2) {
cyg6.vertex(0.0, 0.0, 0.0).color(0, 0, 0, 255).endVertex();
cyg6.vertex(integer, 0.0, 0.0).color(0, 0, 0, 255).endVertex();
dhg6.vertex(0.0, 0.0, 0.0).color(0, 0, 0, 255).endVertex();
dhg6.vertex(integer, 0.0, 0.0).color(0, 0, 0, 255).endVertex();
}
if (boolean3) {
cyg6.vertex(0.0, 0.0, 0.0).color(0, 0, 0, 255).endVertex();
cyg6.vertex(0.0, integer, 0.0).color(0, 0, 0, 255).endVertex();
dhg6.vertex(0.0, 0.0, 0.0).color(0, 0, 0, 255).endVertex();
dhg6.vertex(0.0, integer, 0.0).color(0, 0, 0, 255).endVertex();
}
if (boolean4) {
cyg6.vertex(0.0, 0.0, 0.0).color(0, 0, 0, 255).endVertex();
cyg6.vertex(0.0, 0.0, integer).color(0, 0, 0, 255).endVertex();
dhg6.vertex(0.0, 0.0, 0.0).color(0, 0, 0, 255).endVertex();
dhg6.vertex(0.0, 0.0, integer).color(0, 0, 0, 255).endVertex();
}
cym5.end();
dhn5.end();
GL11.glLineWidth(2.0f);
cyg6.begin(1, DefaultVertexFormat.POSITION_COLOR);
dhg6.begin(1, DefaultVertexFormat.POSITION_COLOR);
if (boolean2) {
cyg6.vertex(0.0, 0.0, 0.0).color(255, 0, 0, 255).endVertex();
cyg6.vertex(integer, 0.0, 0.0).color(255, 0, 0, 255).endVertex();
dhg6.vertex(0.0, 0.0, 0.0).color(255, 0, 0, 255).endVertex();
dhg6.vertex(integer, 0.0, 0.0).color(255, 0, 0, 255).endVertex();
}
if (boolean3) {
cyg6.vertex(0.0, 0.0, 0.0).color(0, 255, 0, 255).endVertex();
cyg6.vertex(0.0, integer, 0.0).color(0, 255, 0, 255).endVertex();
dhg6.vertex(0.0, 0.0, 0.0).color(0, 255, 0, 255).endVertex();
dhg6.vertex(0.0, integer, 0.0).color(0, 255, 0, 255).endVertex();
}
if (boolean4) {
cyg6.vertex(0.0, 0.0, 0.0).color(127, 127, 255, 255).endVertex();
cyg6.vertex(0.0, 0.0, integer).color(127, 127, 255, 255).endVertex();
dhg6.vertex(0.0, 0.0, 0.0).color(127, 127, 255, 255).endVertex();
dhg6.vertex(0.0, 0.0, integer).color(127, 127, 255, 255).endVertex();
}
cym5.end();
dhn5.end();
GL11.glLineWidth(1.0f);
GlStateManager._depthMask(true);
GlStateManager._enableTexture();

View File

@ -1,12 +1,13 @@
package com.mojang.blaze3d.platform;
import net.minecraft.Util;
import java.util.stream.IntStream;
import org.lwjgl.system.MemoryUtil;
import javax.annotation.Nullable;
import com.mojang.math.Vector4f;
import com.mojang.math.Matrix4f;
import com.mojang.math.Vector3f;
import org.lwjgl.opengl.GL13;
import org.lwjgl.opengl.EXTFramebufferBlit;
import org.lwjgl.opengl.EXTFramebufferObject;
import org.lwjgl.opengl.ARBFramebufferObject;
import org.lwjgl.opengl.GL30;
@ -18,7 +19,6 @@ import org.lwjgl.opengl.GLCapabilities;
import org.lwjgl.opengl.GL14;
import org.lwjgl.opengl.GL11;
import com.mojang.blaze3d.systems.RenderSystem;
import com.mojang.math.Vector3f;
import java.nio.FloatBuffer;
public class GlStateManager {
@ -34,11 +34,8 @@ public class GlStateManager {
private static final PolygonOffsetState POLY_OFFSET;
private static final ColorLogicState COLOR_LOGIC;
private static final TexGenState TEX_GEN;
private static final ClearState CLEAR;
private static final StencilState STENCIL;
private static final FloatBuffer FLOAT_ARG_BUFFER;
private static final Vector3f DIFFUSE_LIGHT_0;
private static final Vector3f DIFFUSE_LIGHT_1;
private static int activeTexture;
private static final TextureState[] TEXTURES;
private static int shadeModel;
@ -46,6 +43,7 @@ public class GlStateManager {
private static final ColorMask COLOR_MASK;
private static final Color COLOR;
private static FboMode fboMode;
private static FboBlitMode fboBlitMode;
@Deprecated
public static void _pushLightingAttributes() {
@ -200,6 +198,15 @@ public class GlStateManager {
public static String _init_fbo(final GLCapabilities gLCapabilities) {
RenderSystem.assertThread(RenderSystem::isInInitPhase);
if (gLCapabilities.OpenGL30) {
GlStateManager.fboBlitMode = FboBlitMode.BASE;
}
else if (gLCapabilities.GL_EXT_framebuffer_blit) {
GlStateManager.fboBlitMode = FboBlitMode.EXT;
}
else {
GlStateManager.fboBlitMode = FboBlitMode.NONE;
}
if (gLCapabilities.OpenGL30) {
GlStateManager.fboMode = FboMode.BASE;
GlConst.GL_FRAMEBUFFER = 36160;
@ -387,6 +394,11 @@ public class GlStateManager {
GL15.glDeleteBuffers(integer);
}
public static void _glCopyTexSubImage2D(final int integer1, final int integer2, final int integer3, final int integer4, final int integer5, final int integer6, final int integer7, final int integer8) {
RenderSystem.assertThread(RenderSystem::isOnRenderThreadOrInit);
GL20.glCopyTexSubImage2D(integer1, integer2, integer3, integer4, integer5, integer6, integer7, integer8);
}
public static void _glBindFramebuffer(final int integer1, final int integer2) {
RenderSystem.assertThread(RenderSystem::isOnRenderThreadOrInit);
switch (GlStateManager.fboMode) {
@ -405,37 +417,40 @@ public class GlStateManager {
}
}
public static void _glBindRenderbuffer(final int integer1, final int integer2) {
public static int getFramebufferDepthTexture() {
RenderSystem.assertThread(RenderSystem::isOnRenderThreadOrInit);
switch (GlStateManager.fboMode) {
case BASE: {
GL30.glBindRenderbuffer(integer1, integer2);
if (GL30.glGetFramebufferAttachmentParameteri(36160, 36096, 36048) == 5890) {
return GL30.glGetFramebufferAttachmentParameteri(36160, 36096, 36049);
}
break;
}
case ARB: {
ARBFramebufferObject.glBindRenderbuffer(integer1, integer2);
if (ARBFramebufferObject.glGetFramebufferAttachmentParameteri(36160, 36096, 36048) == 5890) {
return ARBFramebufferObject.glGetFramebufferAttachmentParameteri(36160, 36096, 36049);
}
break;
}
case EXT: {
EXTFramebufferObject.glBindRenderbufferEXT(integer1, integer2);
if (EXTFramebufferObject.glGetFramebufferAttachmentParameteriEXT(36160, 36096, 36048) == 5890) {
return EXTFramebufferObject.glGetFramebufferAttachmentParameteriEXT(36160, 36096, 36049);
}
break;
}
}
return 0;
}
public static void _glDeleteRenderbuffers(final int integer) {
public static void _glBlitFrameBuffer(final int integer1, final int integer2, final int integer3, final int integer4, final int integer5, final int integer6, final int integer7, final int integer8, final int integer9, final int integer10) {
RenderSystem.assertThread(RenderSystem::isOnRenderThreadOrInit);
switch (GlStateManager.fboMode) {
switch (GlStateManager.fboBlitMode) {
case BASE: {
GL30.glDeleteRenderbuffers(integer);
break;
}
case ARB: {
ARBFramebufferObject.glDeleteRenderbuffers(integer);
GL30.glBlitFramebuffer(integer1, integer2, integer3, integer4, integer5, integer6, integer7, integer8, integer9, integer10);
break;
}
case EXT: {
EXTFramebufferObject.glDeleteRenderbuffersEXT(integer);
EXTFramebufferBlit.glBlitFramebufferEXT(integer1, integer2, integer3, integer4, integer5, integer6, integer7, integer8, integer9, integer10);
break;
}
}
@ -477,60 +492,6 @@ public class GlStateManager {
}
}
public static int glGenRenderbuffers() {
RenderSystem.assertThread(RenderSystem::isOnRenderThreadOrInit);
switch (GlStateManager.fboMode) {
case BASE: {
return GL30.glGenRenderbuffers();
}
case ARB: {
return ARBFramebufferObject.glGenRenderbuffers();
}
case EXT: {
return EXTFramebufferObject.glGenRenderbuffersEXT();
}
default: {
return -1;
}
}
}
public static void _glRenderbufferStorage(final int integer1, final int integer2, final int integer3, final int integer4) {
RenderSystem.assertThread(RenderSystem::isOnRenderThreadOrInit);
switch (GlStateManager.fboMode) {
case BASE: {
GL30.glRenderbufferStorage(integer1, integer2, integer3, integer4);
break;
}
case ARB: {
ARBFramebufferObject.glRenderbufferStorage(integer1, integer2, integer3, integer4);
break;
}
case EXT: {
EXTFramebufferObject.glRenderbufferStorageEXT(integer1, integer2, integer3, integer4);
break;
}
}
}
public static void _glFramebufferRenderbuffer(final int integer1, final int integer2, final int integer3, final int integer4) {
RenderSystem.assertThread(RenderSystem::isOnRenderThreadOrInit);
switch (GlStateManager.fboMode) {
case BASE: {
GL30.glFramebufferRenderbuffer(integer1, integer2, integer3, integer4);
break;
}
case ARB: {
ARBFramebufferObject.glFramebufferRenderbuffer(integer1, integer2, integer3, integer4);
break;
}
case EXT: {
EXTFramebufferObject.glFramebufferRenderbufferEXT(integer1, integer2, integer3, integer4);
break;
}
}
}
public static int glCheckFramebufferStatus(final int integer) {
RenderSystem.assertThread(RenderSystem::isOnRenderThreadOrInit);
switch (GlStateManager.fboMode) {
@ -567,6 +528,11 @@ public class GlStateManager {
}
}
@Deprecated
public static int getActiveTextureName() {
return GlStateManager.TEXTURES[GlStateManager.activeTexture].binding;
}
public static void glActiveTexture(final int integer) {
RenderSystem.assertThread(RenderSystem::isOnRenderThread);
GL13.glActiveTexture(integer);
@ -660,51 +626,51 @@ public class GlStateManager {
_texEnv(8960, 34200, 770);
}
public static void setupLevelDiffuseLighting(final Matrix4f b) {
public static void setupLevelDiffuseLighting(final Vector3f g1, final Vector3f g2, final Matrix4f b) {
RenderSystem.assertThread(RenderSystem::isOnRenderThread);
_pushMatrix();
_loadIdentity();
_enableLight(0);
_enableLight(1);
final Vector4f f2 = new Vector4f(GlStateManager.DIFFUSE_LIGHT_0);
f2.transform(b);
_light(16384, 4611, getBuffer(f2.x(), f2.y(), f2.z(), 0.0f));
final float float3 = 0.6f;
final Vector4f h4 = new Vector4f(g1);
h4.transform(b);
_light(16384, 4611, getBuffer(h4.x(), h4.y(), h4.z(), 0.0f));
final float float5 = 0.6f;
_light(16384, 4609, getBuffer(0.6f, 0.6f, 0.6f, 1.0f));
_light(16384, 4608, getBuffer(0.0f, 0.0f, 0.0f, 1.0f));
_light(16384, 4610, getBuffer(0.0f, 0.0f, 0.0f, 1.0f));
final Vector4f f3 = new Vector4f(GlStateManager.DIFFUSE_LIGHT_1);
f3.transform(b);
_light(16385, 4611, getBuffer(f3.x(), f3.y(), f3.z(), 0.0f));
final Vector4f h5 = new Vector4f(g2);
h5.transform(b);
_light(16385, 4611, getBuffer(h5.x(), h5.y(), h5.z(), 0.0f));
_light(16385, 4609, getBuffer(0.6f, 0.6f, 0.6f, 1.0f));
_light(16385, 4608, getBuffer(0.0f, 0.0f, 0.0f, 1.0f));
_light(16385, 4610, getBuffer(0.0f, 0.0f, 0.0f, 1.0f));
_shadeModel(7424);
final float float4 = 0.4f;
final float float6 = 0.4f;
_lightModel(2899, getBuffer(0.4f, 0.4f, 0.4f, 1.0f));
_popMatrix();
}
public static void setupGuiFlatDiffuseLighting() {
public static void setupGuiFlatDiffuseLighting(final Vector3f g1, final Vector3f g2) {
RenderSystem.assertThread(RenderSystem::isOnRenderThread);
final Matrix4f b1 = new Matrix4f();
b1.setIdentity();
b1.multiply(Matrix4f.createScaleMatrix(1.0f, -1.0f, 1.0f));
b1.multiply(Vector3f.YP.rotationDegrees(-22.5f));
b1.multiply(Vector3f.XP.rotationDegrees(135.0f));
setupLevelDiffuseLighting(b1);
final Matrix4f b3 = new Matrix4f();
b3.setIdentity();
b3.multiply(Matrix4f.createScaleMatrix(1.0f, -1.0f, 1.0f));
b3.multiply(Vector3f.YP.rotationDegrees(-22.5f));
b3.multiply(Vector3f.XP.rotationDegrees(135.0f));
setupLevelDiffuseLighting(g1, g2, b3);
}
public static void setupGui3DDiffuseLighting() {
public static void setupGui3DDiffuseLighting(final Vector3f g1, final Vector3f g2) {
RenderSystem.assertThread(RenderSystem::isOnRenderThread);
final Matrix4f b1 = new Matrix4f();
b1.setIdentity();
b1.multiply(Vector3f.YP.rotationDegrees(62.0f));
b1.multiply(Vector3f.XP.rotationDegrees(185.5f));
b1.multiply(Matrix4f.createScaleMatrix(1.0f, -1.0f, 1.0f));
b1.multiply(Vector3f.YP.rotationDegrees(-22.5f));
b1.multiply(Vector3f.XP.rotationDegrees(135.0f));
setupLevelDiffuseLighting(b1);
final Matrix4f b3 = new Matrix4f();
b3.setIdentity();
b3.multiply(Vector3f.YP.rotationDegrees(62.0f));
b3.multiply(Vector3f.XP.rotationDegrees(185.5f));
b3.multiply(Matrix4f.createScaleMatrix(1.0f, -1.0f, 1.0f));
b3.multiply(Vector3f.YP.rotationDegrees(-22.5f));
b3.multiply(Vector3f.XP.rotationDegrees(135.0f));
setupLevelDiffuseLighting(g1, g2, b3);
}
private static FloatBuffer getBuffer(final float float1, final float float2, final float float3, final float float4) {
@ -1035,23 +1001,17 @@ public class GlStateManager {
public static void _clearDepth(final double double1) {
RenderSystem.assertThread(RenderSystem::isOnRenderThreadOrInit);
if (double1 != GlStateManager.CLEAR.depth) {
GL11.glClearDepth(GlStateManager.CLEAR.depth = double1);
}
GL11.glClearDepth(double1);
}
public static void _clearColor(final float float1, final float float2, final float float3, final float float4) {
RenderSystem.assertThread(RenderSystem::isOnRenderThreadOrInit);
if (float1 != GlStateManager.CLEAR.color.r || float2 != GlStateManager.CLEAR.color.g || float3 != GlStateManager.CLEAR.color.b || float4 != GlStateManager.CLEAR.color.a) {
GL11.glClearColor(GlStateManager.CLEAR.color.r = float1, GlStateManager.CLEAR.color.g = float2, GlStateManager.CLEAR.color.b = float3, GlStateManager.CLEAR.color.a = float4);
}
GL11.glClearColor(float1, float2, float3, float4);
}
public static void _clearStencil(final int integer) {
RenderSystem.assertThread(RenderSystem::isOnRenderThread);
if (integer != GlStateManager.CLEAR.stencil) {
GL11.glClearStencil(GlStateManager.CLEAR.stencil = integer);
}
GL11.glClearStencil(integer);
}
public static void _clear(final int integer, final boolean boolean2) {
@ -1250,6 +1210,10 @@ public class GlStateManager {
return GL11.glGetInteger(integer);
}
public static boolean supportsFramebufferBlit() {
return GlStateManager.fboBlitMode != FboBlitMode.NONE;
}
static {
MATRIX_BUFFER = GLX.<FloatBuffer>make(MemoryUtil.memAllocFloat(16), floatBuffer -> DebugMemoryUntracker.untrack(MemoryUtil.memAddress(floatBuffer)));
ALPHA_TEST = new AlphaState();
@ -1263,12 +1227,9 @@ public class GlStateManager {
POLY_OFFSET = new PolygonOffsetState();
COLOR_LOGIC = new ColorLogicState();
TEX_GEN = new TexGenState();
CLEAR = new ClearState();
STENCIL = new StencilState();
FLOAT_ARG_BUFFER = MemoryTracker.createFloatBuffer(4);
DIFFUSE_LIGHT_0 = Util.<Vector3f>make(new Vector3f(0.2f, 1.0f, -0.7f), Vector3f::normalize);
DIFFUSE_LIGHT_1 = Util.<Vector3f>make(new Vector3f(-0.2f, 1.0f, 0.7f), Vector3f::normalize);
TEXTURES = IntStream.range(0, 8).mapToObj(integer -> new TextureState()).<TextureState>toArray(TextureState[]::new);
TEXTURES = IntStream.range(0, 12).mapToObj(integer -> new TextureState()).<TextureState>toArray(TextureState[]::new);
GlStateManager.shadeModel = 7425;
RESCALE_NORMAL = new BooleanState(32826);
COLOR_MASK = new ColorMask();
@ -1328,6 +1289,12 @@ public class GlStateManager {
EXT;
}
public enum FboBlitMode {
BASE,
EXT,
NONE;
}
static class TextureState {
public final BooleanState enable;
public int binding;
@ -1439,17 +1406,6 @@ public class GlStateManager {
}
}
static class ClearState {
public double depth;
public final Color color;
public int stencil;
private ClearState() {
this.depth = 1.0;
this.color = new Color(0.0f, 0.0f, 0.0f, 0.0f);
}
}
static class StencilFunc {
public int func;
public int ref;

View File

@ -2,11 +2,19 @@ package com.mojang.blaze3d.platform;
import com.google.common.collect.Maps;
import java.util.Objects;
import java.util.OptionalInt;
import java.util.Map;
import net.minecraft.util.LazyLoadedValue;
import net.minecraft.network.chat.TextComponent;
import net.minecraft.network.chat.TranslatableComponent;
import net.minecraft.locale.Language;
import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
import net.minecraft.network.chat.Component;
import java.util.function.BiFunction;
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
import java.lang.invoke.MethodType;
import java.lang.invoke.MethodHandles;
import org.lwjgl.glfw.GLFWDropCallbackI;
import org.lwjgl.glfw.GLFWScrollCallbackI;
import org.lwjgl.glfw.GLFWMouseButtonCallbackI;
import org.lwjgl.glfw.GLFWCursorPosCallbackI;
@ -51,10 +59,11 @@ public class InputConstants {
GLFW.glfwSetCharModsCallback(long1, gLFWCharModsCallbackI);
}
public static void setupMouseCallbacks(final long long1, final GLFWCursorPosCallbackI gLFWCursorPosCallbackI, final GLFWMouseButtonCallbackI gLFWMouseButtonCallbackI, final GLFWScrollCallbackI gLFWScrollCallbackI) {
public static void setupMouseCallbacks(final long long1, final GLFWCursorPosCallbackI gLFWCursorPosCallbackI, final GLFWMouseButtonCallbackI gLFWMouseButtonCallbackI, final GLFWScrollCallbackI gLFWScrollCallbackI, final GLFWDropCallbackI gLFWDropCallbackI) {
GLFW.glfwSetCursorPosCallback(long1, gLFWCursorPosCallbackI);
GLFW.glfwSetMouseButtonCallback(long1, gLFWMouseButtonCallbackI);
GLFW.glfwSetScrollCallback(long1, gLFWScrollCallbackI);
GLFW.glfwSetDropCallback(long1, gLFWDropCallbackI);
}
public static void grabOrReleaseMouse(final long long1, final int integer, final double double3, final double double4) {
@ -77,16 +86,6 @@ public class InputConstants {
}
}
@Nullable
public static String translateKeyCode(final int integer) {
return GLFW.glfwGetKeyName(integer, -1);
}
@Nullable
public static String translateScanCode(final int integer) {
return GLFW.glfwGetKeyName(-1, integer);
}
static {
final MethodHandles.Lookup lookup1 = MethodHandles.lookup();
final MethodType methodType2 = MethodType.methodType(Boolean.TYPE);
@ -107,47 +106,68 @@ public class InputConstants {
}
public enum Type {
KEYSYM("key.keyboard"),
SCANCODE("scancode"),
MOUSE("key.mouse");
KEYSYM("key.keyboard", (integer, string) -> {
string2 = GLFW.glfwGetKeyName((int)integer, -1);
if (string2 != null) {
// new(net.minecraft.network.chat.TextComponent.class)
new TextComponent(string2);
}
else {
// new(net.minecraft.network.chat.TranslatableComponent.class)
new TranslatableComponent(string);
}
return o3;
}),
SCANCODE("scancode", (integer, string) -> {
string3 = GLFW.glfwGetKeyName(-1, (int)integer);
if (string3 != null) {
// new(net.minecraft.network.chat.TextComponent.class)
new TextComponent(string3);
}
else {
// new(net.minecraft.network.chat.TranslatableComponent.class)
new TranslatableComponent(string);
}
return o6;
}),
MOUSE("key.mouse", (integer, string) -> {
if (Language.getInstance().has(string)) {
// new(net.minecraft.network.chat.TranslatableComponent.class)
new TranslatableComponent(string);
}
else {
// new(net.minecraft.network.chat.TranslatableComponent.class)
new TranslatableComponent("key.mouse", new Object[] { integer + 1 });
}
return o9;
});
private static final String[] MOUSE_BUTTON_NAMES;
private final Int2ObjectMap<Key> map;
private final String defaultPrefix;
private final BiFunction<Integer, String, Component> displayTextSupplier;
private static void addKey(final Type b, final String string, final int integer) {
final Key a4 = new Key(string, b, integer);
b.map.put(integer, a4);
}
private Type(final String string3) {
private Type(final String string3, final BiFunction<Integer, String, Component> biFunction) {
this.map = (Int2ObjectMap<Key>)new Int2ObjectOpenHashMap();
this.defaultPrefix = string3;
this.displayTextSupplier = biFunction;
}
public Key getOrCreate(final int integer) {
if (this.map.containsKey(integer)) {
return (Key)this.map.get(integer);
}
String string3;
if (this == Type.MOUSE) {
if (integer <= 2) {
string3 = "." + Type.MOUSE_BUTTON_NAMES[integer];
int integer2;
final String string4;
return (Key)this.map.computeIfAbsent(integer, integer -> {
integer2 = integer;
if (this == Type.MOUSE) {
++integer2;
}
else {
string3 = "." + (integer + 1);
}
}
else {
string3 = "." + integer;
}
final Key a4 = new Key(this.defaultPrefix + string3, this, integer);
this.map.put(integer, a4);
return a4;
}
public String getDefaultPrefix() {
return this.defaultPrefix;
string4 = this.defaultPrefix + "." + integer2;
return new Key(string4, this, integer);
});
}
static {
@ -280,7 +300,6 @@ public class InputConstants {
addKey(Type.KEYSYM, "key.keyboard.print.screen", 283);
addKey(Type.KEYSYM, "key.keyboard.world.1", 161);
addKey(Type.KEYSYM, "key.keyboard.world.2", 162);
MOUSE_BUTTON_NAMES = new String[] { "left", "middle", "right" };
}
}
@ -288,12 +307,14 @@ public class InputConstants {
private final String name;
private final Type type;
private final int value;
private final LazyLoadedValue<Component> displayName;
private static final Map<String, Key> NAME_MAP;
private Key(final String string, final Type b, final int integer) {
this.name = string;
this.type = b;
this.value = integer;
this.displayName = new LazyLoadedValue<Component>(() -> b.displayTextSupplier.apply(integer, string));
Key.NAME_MAP.put(string, this);
}
@ -309,6 +330,20 @@ public class InputConstants {
return this.name;
}
public Component getDisplayName() {
return this.displayName.get();
}
public OptionalInt getNumericKeyValue() {
if (this.value >= 48 && this.value <= 57) {
return OptionalInt.of(this.value - 48);
}
if (this.value >= 320 && this.value <= 329) {
return OptionalInt.of(this.value - 320);
}
return OptionalInt.empty();
}
@Override
public boolean equals(final Object object) {
if (this == object) {

View File

@ -1,9 +1,16 @@
package com.mojang.blaze3d.platform;
import net.minecraft.Util;
import com.mojang.math.Matrix4f;
import com.mojang.blaze3d.systems.RenderSystem;
import com.mojang.math.Vector3f;
public class Lighting {
private static final Vector3f DIFFUSE_LIGHT_0;
private static final Vector3f DIFFUSE_LIGHT_1;
private static final Vector3f NETHER_DIFFUSE_LIGHT_0;
private static final Vector3f NETHER_DIFFUSE_LIGHT_1;
public static void turnBackOn() {
RenderSystem.enableLighting();
RenderSystem.enableColorMaterial();
@ -15,15 +22,26 @@ public class Lighting {
RenderSystem.disableColorMaterial();
}
public static void setupNetherLevel(final Matrix4f b) {
RenderSystem.setupLevelDiffuseLighting(Lighting.NETHER_DIFFUSE_LIGHT_0, Lighting.NETHER_DIFFUSE_LIGHT_1, b);
}
public static void setupLevel(final Matrix4f b) {
RenderSystem.setupLevelDiffuseLighting(b);
RenderSystem.setupLevelDiffuseLighting(Lighting.DIFFUSE_LIGHT_0, Lighting.DIFFUSE_LIGHT_1, b);
}
public static void setupForFlatItems() {
RenderSystem.setupGuiFlatDiffuseLighting();
RenderSystem.setupGuiFlatDiffuseLighting(Lighting.DIFFUSE_LIGHT_0, Lighting.DIFFUSE_LIGHT_1);
}
public static void setupFor3DItems() {
RenderSystem.setupGui3DDiffuseLighting();
RenderSystem.setupGui3DDiffuseLighting(Lighting.DIFFUSE_LIGHT_0, Lighting.DIFFUSE_LIGHT_1);
}
static {
DIFFUSE_LIGHT_0 = Util.<Vector3f>make(new Vector3f(0.2f, 1.0f, -0.7f), Vector3f::normalize);
DIFFUSE_LIGHT_1 = Util.<Vector3f>make(new Vector3f(-0.2f, 1.0f, 0.7f), Vector3f::normalize);
NETHER_DIFFUSE_LIGHT_0 = Util.<Vector3f>make(new Vector3f(0.2f, 1.0f, -0.7f), Vector3f::normalize);
NETHER_DIFFUSE_LIGHT_1 = Util.<Vector3f>make(new Vector3f(-0.2f, -1.0f, 0.7f), Vector3f::normalize);
}
}

View File

@ -27,9 +27,9 @@ public final class Monitor {
final GLFWVidMode.Buffer buffer2 = GLFW.glfwGetVideoModes(this.monitor);
for (int integer3 = buffer2.limit() - 1; integer3 >= 0; --integer3) {
buffer2.position(integer3);
final VideoMode cxw4 = new VideoMode(buffer2);
if (cxw4.getRedBits() >= 8 && cxw4.getGreenBits() >= 8 && cxw4.getBlueBits() >= 8) {
this.videoModes.add(cxw4);
final VideoMode dgx4 = new VideoMode(buffer2);
if (dgx4.getRedBits() >= 8 && dgx4.getGreenBits() >= 8 && dgx4.getBlueBits() >= 8) {
this.videoModes.add(dgx4);
}
}
final int[] arr3 = { 0 };
@ -44,19 +44,19 @@ public final class Monitor {
public VideoMode getPreferredVidMode(final Optional<VideoMode> optional) {
RenderSystem.assertThread(RenderSystem::isInInitPhase);
if (optional.isPresent()) {
final VideoMode cxw3 = optional.get();
for (final VideoMode cxw4 : this.videoModes) {
if (cxw4.equals(cxw3)) {
return cxw4;
final VideoMode dgx3 = optional.get();
for (final VideoMode dgx4 : this.videoModes) {
if (dgx4.equals(dgx3)) {
return dgx4;
}
}
}
return this.getCurrentMode();
}
public int getVideoModeIndex(final VideoMode cxw) {
public int getVideoModeIndex(final VideoMode dgx) {
RenderSystem.assertThread(RenderSystem::isInInitPhase);
return this.videoModes.indexOf(cxw);
return this.videoModes.indexOf(dgx);
}
public VideoMode getCurrentMode() {

View File

@ -205,44 +205,6 @@ public final class NativeImage implements AutoCloseable {
return MemoryUtil.memGetByte(this.pixels + integer3);
}
public void blendPixel(final int integer1, final int integer2, final int integer3) {
if (this.format != Format.RGBA) {
throw new UnsupportedOperationException("Can only call blendPixel with RGBA format");
}
final int integer4 = this.getPixelRGBA(integer1, integer2);
final float float6 = getA(integer3) / 255.0f;
final float float7 = getB(integer3) / 255.0f;
final float float8 = getG(integer3) / 255.0f;
final float float9 = getR(integer3) / 255.0f;
final float float10 = getA(integer4) / 255.0f;
final float float11 = getB(integer4) / 255.0f;
final float float12 = getG(integer4) / 255.0f;
final float float13 = getR(integer4) / 255.0f;
final float float14 = float6;
final float float15 = 1.0f - float6;
float float16 = float6 * float14 + float10 * float15;
float float17 = float7 * float14 + float11 * float15;
float float18 = float8 * float14 + float12 * float15;
float float19 = float9 * float14 + float13 * float15;
if (float16 > 1.0f) {
float16 = 1.0f;
}
if (float17 > 1.0f) {
float17 = 1.0f;
}
if (float18 > 1.0f) {
float18 = 1.0f;
}
if (float19 > 1.0f) {
float19 = 1.0f;
}
final int integer5 = (int)(float16 * 255.0f);
final int integer6 = (int)(float17 * 255.0f);
final int integer7 = (int)(float18 * 255.0f);
final int integer8 = (int)(float19 * 255.0f);
this.setPixelRGBA(integer1, integer2, combine(integer5, integer6, integer7, integer8));
}
@Deprecated
public int[] makePixelArray() {
if (this.format != Format.RGBA) {
@ -369,22 +331,22 @@ public final class NativeImage implements AutoCloseable {
}
}
public void copyFrom(final NativeImage cxr) {
if (cxr.format() != this.format) {
public void copyFrom(final NativeImage dgs) {
if (dgs.format() != this.format) {
throw new UnsupportedOperationException("Image formats don't match.");
}
final int integer3 = this.format.components();
this.checkAllocated();
cxr.checkAllocated();
if (this.width == cxr.width) {
MemoryUtil.memCopy(cxr.pixels, this.pixels, Math.min(this.size, cxr.size));
dgs.checkAllocated();
if (this.width == dgs.width) {
MemoryUtil.memCopy(dgs.pixels, this.pixels, Math.min(this.size, dgs.size));
}
else {
final int integer4 = Math.min(this.getWidth(), cxr.getWidth());
for (int integer5 = Math.min(this.getHeight(), cxr.getHeight()), integer6 = 0; integer6 < integer5; ++integer6) {
final int integer7 = integer6 * cxr.getWidth() * integer3;
final int integer4 = Math.min(this.getWidth(), dgs.getWidth());
for (int integer5 = Math.min(this.getHeight(), dgs.getHeight()), integer6 = 0; integer6 < integer5; ++integer6) {
final int integer7 = integer6 * dgs.getWidth() * integer3;
final int integer8 = integer6 * this.getWidth() * integer3;
MemoryUtil.memCopy(cxr.pixels + integer7, this.pixels + integer8, (long)integer4);
MemoryUtil.memCopy(dgs.pixels + integer7, this.pixels + integer8, (long)integer4);
}
}
}
@ -424,13 +386,13 @@ public final class NativeImage implements AutoCloseable {
}
}
public void resizeSubRectTo(final int integer1, final int integer2, final int integer3, final int integer4, final NativeImage cxr) {
public void resizeSubRectTo(final int integer1, final int integer2, final int integer3, final int integer4, final NativeImage dgs) {
this.checkAllocated();
if (cxr.format() != this.format) {
if (dgs.format() != this.format) {
throw new UnsupportedOperationException("resizeSubRectTo only works for images of the same format.");
}
final int integer5 = this.format.components();
STBImageResize.nstbir_resize_uint8(this.pixels + (integer1 + integer2 * this.getWidth()) * integer5, integer3, integer4, this.getWidth() * integer5, cxr.pixels, cxr.getWidth(), cxr.getHeight(), 0, integer5);
STBImageResize.nstbir_resize_uint8(this.pixels + (integer1 + integer2 * this.getWidth()) * integer5, integer3, integer4, this.getWidth() * integer5, dgs.pixels, dgs.getWidth(), dgs.getHeight(), 0, integer5);
}
public void untrack() {

View File

@ -14,16 +14,16 @@ public class ScreenManager {
private final Long2ObjectMap<Monitor> monitors;
private final MonitorCreator monitorCreator;
public ScreenManager(final MonitorCreator cxq) {
public ScreenManager(final MonitorCreator dgr) {
this.monitors = (Long2ObjectMap<Monitor>)new Long2ObjectOpenHashMap();
RenderSystem.assertThread(RenderSystem::isInInitPhase);
this.monitorCreator = cxq;
this.monitorCreator = dgr;
GLFW.glfwSetMonitorCallback(this::onMonitorChange);
final PointerBuffer pointerBuffer3 = GLFW.glfwGetMonitors();
if (pointerBuffer3 != null) {
for (int integer4 = 0; integer4 < pointerBuffer3.limit(); ++integer4) {
final long long5 = pointerBuffer3.get(integer4);
this.monitors.put(long5, cxq.createMonitor(long5));
this.monitors.put(long5, dgr.createMonitor(long5));
}
}
}
@ -45,22 +45,22 @@ public class ScreenManager {
}
@Nullable
public Monitor findBestMonitor(final Window cxx) {
final long long3 = GLFW.glfwGetWindowMonitor(cxx.getWindow());
public Monitor findBestMonitor(final Window dgy) {
final long long3 = GLFW.glfwGetWindowMonitor(dgy.getWindow());
if (long3 != 0L) {
return this.getMonitor(long3);
}
final int integer5 = cxx.getX();
final int integer6 = integer5 + cxx.getScreenWidth();
final int integer7 = cxx.getY();
final int integer8 = integer7 + cxx.getScreenHeight();
final int integer5 = dgy.getX();
final int integer6 = integer5 + dgy.getScreenWidth();
final int integer7 = dgy.getY();
final int integer8 = integer7 + dgy.getScreenHeight();
int integer9 = -1;
Monitor cxp10 = null;
for (final Monitor cxp11 : this.monitors.values()) {
final int integer10 = cxp11.getX();
final int integer11 = integer10 + cxp11.getCurrentMode().getWidth();
final int integer12 = cxp11.getY();
final int integer13 = integer12 + cxp11.getCurrentMode().getHeight();
Monitor dgq10 = null;
for (final Monitor dgq11 : this.monitors.values()) {
final int integer10 = dgq11.getX();
final int integer11 = integer10 + dgq11.getCurrentMode().getWidth();
final int integer12 = dgq11.getY();
final int integer13 = integer12 + dgq11.getCurrentMode().getHeight();
final int integer14 = clamp(integer5, integer10, integer11);
final int integer15 = clamp(integer6, integer10, integer11);
final int integer16 = clamp(integer7, integer12, integer13);
@ -69,11 +69,11 @@ public class ScreenManager {
final int integer19 = Math.max(0, integer17 - integer16);
final int integer20 = integer18 * integer19;
if (integer20 > integer9) {
cxp10 = cxp11;
dgq10 = dgq11;
integer9 = integer20;
}
}
return cxp10;
return dgq10;
}
public static int clamp(final int integer1, final int integer2, final int integer3) {

View File

@ -75,8 +75,8 @@ public final class VideoMode {
if (object == null || this.getClass() != object.getClass()) {
return false;
}
final VideoMode cxw3 = (VideoMode)object;
return this.width == cxw3.width && this.height == cxw3.height && this.redBits == cxw3.redBits && this.greenBits == cxw3.greenBits && this.blueBits == cxw3.blueBits && this.refreshRate == cxw3.refreshRate;
final VideoMode dgx3 = (VideoMode)object;
return this.width == dgx3.width && this.height == dgx3.height && this.redBits == dgx3.redBits && this.greenBits == dgx3.greenBits && this.blueBits == dgx3.blueBits && this.refreshRate == dgx3.refreshRate;
}
@Override

View File

@ -52,32 +52,32 @@ public final class Window implements AutoCloseable {
private int framerateLimit;
private boolean vsync;
public Window(final WindowEventHandler cxy, final ScreenManager cxt, final DisplayData cxh, @Nullable final String string4, final String string5) {
public Window(final WindowEventHandler dgz, final ScreenManager dgu, final DisplayData dgi, @Nullable final String string4, final String string5) {
this.defaultErrorCallback = GLFWErrorCallback.create(this::defaultErrorCallback);
this.errorSection = "";
RenderSystem.assertThread(RenderSystem::isInInitPhase);
this.screenManager = cxt;
this.screenManager = dgu;
this.setBootErrorCallback();
this.setErrorSection("Pre startup");
this.eventHandler = cxy;
this.eventHandler = dgz;
final Optional<VideoMode> optional7 = VideoMode.read(string4);
if (optional7.isPresent()) {
this.preferredFullscreenVideoMode = optional7;
}
else if (cxh.fullscreenWidth.isPresent() && cxh.fullscreenHeight.isPresent()) {
this.preferredFullscreenVideoMode = Optional.<VideoMode>of(new VideoMode(cxh.fullscreenWidth.getAsInt(), cxh.fullscreenHeight.getAsInt(), 8, 8, 8, 60));
else if (dgi.fullscreenWidth.isPresent() && dgi.fullscreenHeight.isPresent()) {
this.preferredFullscreenVideoMode = Optional.<VideoMode>of(new VideoMode(dgi.fullscreenWidth.getAsInt(), dgi.fullscreenHeight.getAsInt(), 8, 8, 8, 60));
}
else {
this.preferredFullscreenVideoMode = Optional.<VideoMode>empty();
}
final boolean isFullscreen = cxh.isFullscreen;
final boolean isFullscreen = dgi.isFullscreen;
this.fullscreen = isFullscreen;
this.actuallyFullscreen = isFullscreen;
final Monitor cxp8 = cxt.getMonitor(GLFW.glfwGetPrimaryMonitor());
final int n = (cxh.width > 0) ? cxh.width : 1;
final Monitor dgq8 = dgu.getMonitor(GLFW.glfwGetPrimaryMonitor());
final int n = (dgi.width > 0) ? dgi.width : 1;
this.width = n;
this.windowedWidth = n;
final int n2 = (cxh.height > 0) ? cxh.height : 1;
final int n2 = (dgi.height > 0) ? dgi.height : 1;
this.height = n2;
this.windowedHeight = n2;
GLFW.glfwDefaultWindowHints();
@ -86,13 +86,13 @@ public final class Window implements AutoCloseable {
GLFW.glfwWindowHint(139266, 2);
GLFW.glfwWindowHint(139267, 0);
GLFW.glfwWindowHint(139272, 0);
this.window = GLFW.glfwCreateWindow(this.width, this.height, (CharSequence)string5, (this.fullscreen && cxp8 != null) ? cxp8.getMonitor() : 0L, 0L);
if (cxp8 != null) {
final VideoMode cxw9 = cxp8.getPreferredVidMode(this.fullscreen ? this.preferredFullscreenVideoMode : Optional.<VideoMode>empty());
final int n3 = cxp8.getX() + cxw9.getWidth() / 2 - this.width / 2;
this.window = GLFW.glfwCreateWindow(this.width, this.height, (CharSequence)string5, (this.fullscreen && dgq8 != null) ? dgq8.getMonitor() : 0L, 0L);
if (dgq8 != null) {
final VideoMode dgx9 = dgq8.getPreferredVidMode(this.fullscreen ? this.preferredFullscreenVideoMode : Optional.<VideoMode>empty());
final int n3 = dgq8.getX() + dgx9.getWidth() / 2 - this.width / 2;
this.x = n3;
this.windowedX = n3;
final int n4 = cxp8.getY() + cxw9.getHeight() / 2 - this.height / 2;
final int n4 = dgq8.getY() + dgx9.getHeight() / 2 - this.height / 2;
this.y = n4;
this.windowedY = n4;
}
@ -115,6 +115,7 @@ public final class Window implements AutoCloseable {
GLFW.glfwSetWindowPosCallback(this.window, this::onMove);
GLFW.glfwSetWindowSizeCallback(this.window, this::onResize);
GLFW.glfwSetWindowFocusCallback(this.window, this::onFocus);
GLFW.glfwSetCursorEnterCallback(this.window, this::onEnter);
}
public int getRefreshRate() {
@ -280,6 +281,12 @@ public final class Window implements AutoCloseable {
}
}
private void onEnter(final long long1, final boolean boolean2) {
if (boolean2) {
this.eventHandler.cursorEntered();
}
}
public void setFramerateLimit(final int integer) {
this.framerateLimit = integer;
}
@ -320,13 +327,13 @@ public final class Window implements AutoCloseable {
RenderSystem.assertThread(RenderSystem::isInInitPhase);
final boolean boolean2 = GLFW.glfwGetWindowMonitor(this.window) != 0L;
if (this.fullscreen) {
final Monitor cxp3 = this.screenManager.findBestMonitor(this);
if (cxp3 == null) {
final Monitor dgq3 = this.screenManager.findBestMonitor(this);
if (dgq3 == null) {
Window.LOGGER.warn("Failed to find suitable monitor for fullscreen mode");
this.fullscreen = false;
}
else {
final VideoMode cxw4 = cxp3.getPreferredVidMode(this.preferredFullscreenVideoMode);
final VideoMode dgx4 = dgq3.getPreferredVidMode(this.preferredFullscreenVideoMode);
if (!boolean2) {
this.windowedX = this.x;
this.windowedY = this.y;
@ -335,9 +342,9 @@ public final class Window implements AutoCloseable {
}
this.x = 0;
this.y = 0;
this.width = cxw4.getWidth();
this.height = cxw4.getHeight();
GLFW.glfwSetWindowMonitor(this.window, cxp3.getMonitor(), this.x, this.y, this.width, this.height, cxw4.getRefreshRate());
this.width = dgx4.getWidth();
this.height = dgx4.getHeight();
GLFW.glfwSetWindowMonitor(this.window, dgq3.getMonitor(), this.x, this.y, this.width, this.height, dgx4.getRefreshRate());
}
}
else {

View File

@ -4,4 +4,6 @@ public interface WindowEventHandler {
void setWindowActive(final boolean boolean1);
void resizeDisplay();
void cursorEntered();
}

View File

@ -64,8 +64,8 @@ public class BlendMode {
if (!(object instanceof BlendMode)) {
return false;
}
final BlendMode cya3 = (BlendMode)object;
return this.blendFunc == cya3.blendFunc && this.dstAlphaFactor == cya3.dstAlphaFactor && this.dstColorFactor == cya3.dstColorFactor && this.opaque == cya3.opaque && this.separateBlend == cya3.separateBlend && this.srcAlphaFactor == cya3.srcAlphaFactor && this.srcColorFactor == cya3.srcColorFactor;
final BlendMode dhb3 = (BlendMode)object;
return this.blendFunc == dhb3.blendFunc && this.dstAlphaFactor == dhb3.dstAlphaFactor && this.dstColorFactor == dhb3.dstColorFactor && this.opaque == dhb3.opaque && this.separateBlend == dhb3.separateBlend && this.srcAlphaFactor == dhb3.srcAlphaFactor && this.srcColorFactor == dhb3.srcColorFactor;
}
@Override

View File

@ -21,10 +21,10 @@ public class Program {
this.name = string;
}
public void attachToEffect(final Effect cyb) {
public void attachToEffect(final Effect dhc) {
RenderSystem.assertThread(RenderSystem::isOnRenderThread);
++this.references;
GlStateManager.glAttachShader(cyb.getId(), this.id);
GlStateManager.glAttachShader(dhc.getId(), this.id);
}
public void close() {
@ -53,9 +53,9 @@ public class Program {
final String string3 = StringUtils.trim(GlStateManager.glGetShaderInfoLog(integer5, 32768));
throw new IOException("Couldn't compile " + a.getName() + " program: " + string3);
}
final Program cyc6 = new Program(a, integer5, string);
a.getPrograms().put(string, cyc6);
return cyc6;
final Program dhd6 = new Program(a, integer5, string);
a.getPrograms().put(string, dhd6);
return dhd6;
}
public enum Type {

View File

@ -14,11 +14,11 @@ public class ProgramManager {
GlStateManager._glUseProgram(integer);
}
public static void releaseProgram(final Effect cyb) {
public static void releaseProgram(final Effect dhc) {
RenderSystem.assertThread(RenderSystem::isOnRenderThread);
cyb.getFragmentProgram().close();
cyb.getVertexProgram().close();
GlStateManager.glDeleteProgram(cyb.getId());
dhc.getFragmentProgram().close();
dhc.getVertexProgram().close();
GlStateManager.glDeleteProgram(dhc.getId());
}
public static int createProgram() throws IOException {
@ -30,15 +30,15 @@ public class ProgramManager {
return integer1;
}
public static void linkProgram(final Effect cyb) throws IOException {
public static void linkProgram(final Effect dhc) throws IOException {
RenderSystem.assertThread(RenderSystem::isOnRenderThread);
cyb.getFragmentProgram().attachToEffect(cyb);
cyb.getVertexProgram().attachToEffect(cyb);
GlStateManager.glLinkProgram(cyb.getId());
final int integer2 = GlStateManager.glGetProgrami(cyb.getId(), 35714);
dhc.getFragmentProgram().attachToEffect(dhc);
dhc.getVertexProgram().attachToEffect(dhc);
GlStateManager.glLinkProgram(dhc.getId());
final int integer2 = GlStateManager.glGetProgrami(dhc.getId(), 35714);
if (integer2 == 0) {
ProgramManager.LOGGER.warn("Error encountered when linking program containing VS {} and FS {}. Log output:", cyb.getVertexProgram().getName(), cyb.getFragmentProgram().getName());
ProgramManager.LOGGER.warn(GlStateManager.glGetProgramInfoLog(cyb.getId(), 32768));
ProgramManager.LOGGER.warn("Error encountered when linking program containing VS {} and FS {}. Log output:", dhc.getVertexProgram().getName(), dhc.getFragmentProgram().getName());
ProgramManager.LOGGER.warn(GlStateManager.glGetProgramInfoLog(dhc.getId(), 32768));
}
}

View File

@ -21,11 +21,11 @@ public class Uniform extends AbstractUniform implements AutoCloseable {
private boolean dirty;
private final Effect parent;
public Uniform(final String string, final int integer2, final int integer3, final Effect cyb) {
public Uniform(final String string, final int integer2, final int integer3, final Effect dhc) {
this.name = string;
this.count = integer3;
this.type = integer2;
this.parent = cyb;
this.parent = dhc;
if (integer2 <= 3) {
this.intValues = MemoryUtil.memAllocInt(integer3);
this.floatValues = null;

View File

@ -2,6 +2,10 @@ package com.mojang.blaze3d.systems;
import com.google.common.collect.Queues;
import org.apache.logging.log4j.LogManager;
import net.minecraft.client.Options;
import net.minecraft.client.GraphicsStatus;
import net.minecraft.client.Minecraft;
import com.mojang.math.Vector3f;
import java.util.function.IntSupplier;
import java.nio.FloatBuffer;
import java.nio.IntBuffer;
@ -73,8 +77,8 @@ public class RenderSystem {
return true;
}
public static void recordRenderCall(final RenderCall cxc) {
RenderSystem.recordingQueue.add(cxc);
public static void recordRenderCall(final RenderCall dgd) {
RenderSystem.recordingQueue.add(dgd);
}
public static void flipFrame(final long long1) {
@ -88,8 +92,8 @@ public class RenderSystem {
public static void replayQueue() {
RenderSystem.isReplayingQueue = true;
while (!RenderSystem.recordingQueue.isEmpty()) {
final RenderCall cxc1 = RenderSystem.recordingQueue.poll();
cxc1.execute();
final RenderCall dgd1 = RenderSystem.recordingQueue.poll();
dgd1.execute();
}
RenderSystem.isReplayingQueue = false;
}
@ -103,61 +107,73 @@ public class RenderSystem {
RenderSystem.lastDrawTime = double3;
}
@Deprecated
public static void pushLightingAttributes() {
assertThread(RenderSystem::isOnGameThread);
GlStateManager._pushLightingAttributes();
}
@Deprecated
public static void pushTextureAttributes() {
assertThread(RenderSystem::isOnGameThread);
GlStateManager._pushTextureAttributes();
}
@Deprecated
public static void popAttributes() {
assertThread(RenderSystem::isOnGameThread);
GlStateManager._popAttributes();
}
@Deprecated
public static void disableAlphaTest() {
assertThread(RenderSystem::isOnGameThread);
GlStateManager._disableAlphaTest();
}
@Deprecated
public static void enableAlphaTest() {
assertThread(RenderSystem::isOnGameThread);
GlStateManager._enableAlphaTest();
}
@Deprecated
public static void alphaFunc(final int integer, final float float2) {
assertThread(RenderSystem::isOnGameThread);
GlStateManager._alphaFunc(integer, float2);
}
@Deprecated
public static void enableLighting() {
assertThread(RenderSystem::isOnGameThread);
GlStateManager._enableLighting();
}
@Deprecated
public static void disableLighting() {
assertThread(RenderSystem::isOnGameThread);
GlStateManager._disableLighting();
}
@Deprecated
public static void enableColorMaterial() {
assertThread(RenderSystem::isOnGameThread);
GlStateManager._enableColorMaterial();
}
@Deprecated
public static void disableColorMaterial() {
assertThread(RenderSystem::isOnGameThread);
GlStateManager._disableColorMaterial();
}
@Deprecated
public static void colorMaterial(final int integer1, final int integer2) {
assertThread(RenderSystem::isOnGameThread);
GlStateManager._colorMaterial(integer1, integer2);
}
@Deprecated
public static void normal3f(final float float1, final float float2, final float float3) {
assertThread(RenderSystem::isOnGameThread);
GlStateManager._normal3f(float1, float2, float3);
@ -193,9 +209,9 @@ public class RenderSystem {
GlStateManager._disableBlend();
}
public static void blendFunc(final GlStateManager.SourceFactor q, final GlStateManager.DestFactor k) {
public static void blendFunc(final GlStateManager.SourceFactor q, final GlStateManager.DestFactor j) {
assertThread(RenderSystem::isOnGameThread);
GlStateManager._blendFunc(q.value, k.value);
GlStateManager._blendFunc(q.value, j.value);
}
public static void blendFunc(final int integer1, final int integer2) {
@ -203,9 +219,9 @@ public class RenderSystem {
GlStateManager._blendFunc(integer1, integer2);
}
public static void blendFuncSeparate(final GlStateManager.SourceFactor q1, final GlStateManager.DestFactor k2, final GlStateManager.SourceFactor q3, final GlStateManager.DestFactor k4) {
public static void blendFuncSeparate(final GlStateManager.SourceFactor q1, final GlStateManager.DestFactor j2, final GlStateManager.SourceFactor q3, final GlStateManager.DestFactor j4) {
assertThread(RenderSystem::isOnGameThread);
GlStateManager._blendFuncSeparate(q1.value, k2.value, q3.value, k4.value);
GlStateManager._blendFuncSeparate(q1.value, j2.value, q3.value, j4.value);
}
public static void blendFuncSeparate(final int integer1, final int integer2, final int integer3, final int integer4) {
@ -223,46 +239,55 @@ public class RenderSystem {
GlStateManager._blendColor(float1, float2, float3, float4);
}
@Deprecated
public static void enableFog() {
assertThread(RenderSystem::isOnGameThread);
GlStateManager._enableFog();
}
@Deprecated
public static void disableFog() {
assertThread(RenderSystem::isOnGameThread);
GlStateManager._disableFog();
}
@Deprecated
public static void fogMode(final GlStateManager.FogMode m) {
assertThread(RenderSystem::isOnGameThread);
GlStateManager._fogMode(m.value);
}
@Deprecated
public static void fogMode(final int integer) {
assertThread(RenderSystem::isOnGameThread);
GlStateManager._fogMode(integer);
}
@Deprecated
public static void fogDensity(final float float1) {
assertThread(RenderSystem::isOnGameThread);
GlStateManager._fogDensity(float1);
}
@Deprecated
public static void fogStart(final float float1) {
assertThread(RenderSystem::isOnGameThread);
GlStateManager._fogStart(float1);
}
@Deprecated
public static void fogEnd(final float float1) {
assertThread(RenderSystem::isOnGameThread);
GlStateManager._fogEnd(float1);
}
@Deprecated
public static void fog(final int integer, final float float2, final float float3, final float float4, final float float5) {
assertThread(RenderSystem::isOnGameThread);
GlStateManager._fog(integer, new float[] { float2, float3, float4, float5 });
}
@Deprecated
public static void fogi(final int integer1, final int integer2) {
assertThread(RenderSystem::isOnGameThread);
GlStateManager._fogi(integer1, integer2);
@ -351,16 +376,19 @@ public class RenderSystem {
GlStateManager._bindTexture(integer);
}
@Deprecated
public static void shadeModel(final int integer) {
assertThread(RenderSystem::isOnGameThread);
GlStateManager._shadeModel(integer);
}
@Deprecated
public static void enableRescaleNormal() {
assertThread(RenderSystem::isOnGameThread);
GlStateManager._enableRescaleNormal();
}
@Deprecated
public static void disableRescaleNormal() {
assertThread(RenderSystem::isOnGameThread);
GlStateManager._disableRescaleNormal();
@ -411,71 +439,85 @@ public class RenderSystem {
GlStateManager._clear(integer, boolean2);
}
@Deprecated
public static void matrixMode(final int integer) {
assertThread(RenderSystem::isOnGameThread);
GlStateManager._matrixMode(integer);
}
@Deprecated
public static void loadIdentity() {
assertThread(RenderSystem::isOnGameThread);
GlStateManager._loadIdentity();
}
@Deprecated
public static void pushMatrix() {
assertThread(RenderSystem::isOnGameThread);
GlStateManager._pushMatrix();
}
@Deprecated
public static void popMatrix() {
assertThread(RenderSystem::isOnGameThread);
GlStateManager._popMatrix();
}
@Deprecated
public static void ortho(final double double1, final double double2, final double double3, final double double4, final double double5, final double double6) {
assertThread(RenderSystem::isOnGameThread);
GlStateManager._ortho(double1, double2, double3, double4, double5, double6);
}
@Deprecated
public static void rotatef(final float float1, final float float2, final float float3, final float float4) {
assertThread(RenderSystem::isOnGameThread);
GlStateManager._rotatef(float1, float2, float3, float4);
}
@Deprecated
public static void scalef(final float float1, final float float2, final float float3) {
assertThread(RenderSystem::isOnGameThread);
GlStateManager._scalef(float1, float2, float3);
}
@Deprecated
public static void scaled(final double double1, final double double2, final double double3) {
assertThread(RenderSystem::isOnGameThread);
GlStateManager._scaled(double1, double2, double3);
}
@Deprecated
public static void translatef(final float float1, final float float2, final float float3) {
assertThread(RenderSystem::isOnGameThread);
GlStateManager._translatef(float1, float2, float3);
}
@Deprecated
public static void translated(final double double1, final double double2, final double double3) {
assertThread(RenderSystem::isOnGameThread);
GlStateManager._translated(double1, double2, double3);
}
@Deprecated
public static void multMatrix(final Matrix4f b) {
assertThread(RenderSystem::isOnGameThread);
GlStateManager._multMatrix(b);
}
@Deprecated
public static void color4f(final float float1, final float float2, final float float3, final float float4) {
assertThread(RenderSystem::isOnGameThread);
GlStateManager._color4f(float1, float2, float3, float4);
}
@Deprecated
public static void color3f(final float float1, final float float2, final float float3) {
assertThread(RenderSystem::isOnGameThread);
GlStateManager._color4f(float1, float2, float3, 1.0f);
}
@Deprecated
public static void clearCurrentColor() {
assertThread(RenderSystem::isOnGameThread);
GlStateManager._clearCurrentColor();
@ -545,6 +587,7 @@ public class RenderSystem {
GLX._setupNvFogDistance();
}
@Deprecated
public static void glMultiTexCoord2f(final int integer, final float float2, final float float3) {
assertThread(RenderSystem::isOnGameThread);
GlStateManager._glMultiTexCoord2f(integer, float2, float3);
@ -681,19 +724,19 @@ public class RenderSystem {
GlStateManager.teardownOverlayColor();
}
public static void setupLevelDiffuseLighting(final Matrix4f b) {
public static void setupLevelDiffuseLighting(final Vector3f g1, final Vector3f g2, final Matrix4f b) {
assertThread(RenderSystem::isOnGameThread);
GlStateManager.setupLevelDiffuseLighting(b);
GlStateManager.setupLevelDiffuseLighting(g1, g2, b);
}
public static void setupGuiFlatDiffuseLighting() {
public static void setupGuiFlatDiffuseLighting(final Vector3f g1, final Vector3f g2) {
assertThread(RenderSystem::isOnGameThread);
GlStateManager.setupGuiFlatDiffuseLighting();
GlStateManager.setupGuiFlatDiffuseLighting(g1, g2);
}
public static void setupGui3DDiffuseLighting() {
public static void setupGui3DDiffuseLighting(final Vector3f g1, final Vector3f g2) {
assertThread(RenderSystem::isOnGameThread);
GlStateManager.setupGui3DDiffuseLighting();
GlStateManager.setupGui3DDiffuseLighting(g1, g2);
}
public static void mulTextureByProjModelView() {
@ -747,6 +790,20 @@ public class RenderSystem {
alphaFunc(516, 0.1f);
}
@Deprecated
public static void runAsFancy(final Runnable runnable) {
final boolean boolean2 = Minecraft.useShaderTransparency();
if (!boolean2) {
runnable.run();
return;
}
final Options dmb3 = Minecraft.getInstance().options;
final GraphicsStatus dlr4 = dmb3.graphicsMode;
dmb3.graphicsMode = GraphicsStatus.FANCY;
runnable.run();
dmb3.graphicsMode = dlr4;
}
static {
LOGGER = LogManager.getLogger();
recordingQueue = Queues.<RenderCall>newConcurrentLinkedQueue();

View File

@ -152,31 +152,31 @@ public class BufferBuilder extends DefaultedVertexConsumer implements BufferVert
this.buffer.position(this.totalRenderedBytes);
this.buffer.put(b.data);
this.buffer.clear();
final VertexFormat cyp4 = b.format;
this.switchFormat(cyp4);
this.vertices = integer3 / cyp4.getVertexSize();
this.nextElementByte = this.totalRenderedBytes + this.vertices * cyp4.getVertexSize();
final VertexFormat dhq4 = b.format;
this.switchFormat(dhq4);
this.vertices = integer3 / dhq4.getVertexSize();
this.nextElementByte = this.totalRenderedBytes + this.vertices * dhq4.getVertexSize();
}
public void begin(final int integer, final VertexFormat cyp) {
public void begin(final int integer, final VertexFormat dhq) {
if (this.building) {
throw new IllegalStateException("Already building!");
}
this.building = true;
this.mode = integer;
this.switchFormat(cyp);
this.currentElement = cyp.getElements().get(0);
this.switchFormat(dhq);
this.currentElement = dhq.getElements().get(0);
this.elementIndex = 0;
this.buffer.clear();
}
private void switchFormat(final VertexFormat cyp) {
if (this.format == cyp) {
private void switchFormat(final VertexFormat dhq) {
if (this.format == dhq) {
return;
}
this.format = cyp;
final boolean boolean3 = cyp == DefaultVertexFormat.NEW_ENTITY;
final boolean boolean4 = cyp == DefaultVertexFormat.BLOCK;
this.format = dhq;
final boolean boolean3 = dhq == DefaultVertexFormat.NEW_ENTITY;
final boolean boolean4 = dhq == DefaultVertexFormat.BLOCK;
this.fastFormat = (boolean3 || boolean4);
this.fullFormat = boolean3;
}
@ -222,9 +222,9 @@ public class BufferBuilder extends DefaultedVertexConsumer implements BufferVert
final ImmutableList<VertexFormatElement> immutableList2 = this.format.getElements();
this.elementIndex = (this.elementIndex + 1) % immutableList2.size();
this.nextElementByte += this.currentElement.getByteSize();
final VertexFormatElement cyq3 = immutableList2.get(this.elementIndex);
this.currentElement = cyq3;
if (cyq3.getUsage() == VertexFormatElement.Usage.PADDING) {
final VertexFormatElement dhr3 = immutableList2.get(this.elementIndex);
this.currentElement = dhr3;
if (dhr3.getUsage() == VertexFormatElement.Usage.PADDING) {
this.nextElement();
}
if (this.defaultColorSet && this.currentElement.getUsage() == VertexFormatElement.Usage.COLOR) {
@ -324,9 +324,9 @@ public class BufferBuilder extends DefaultedVertexConsumer implements BufferVert
private final ByteBuffer data;
private final VertexFormat format;
private State(final ByteBuffer byteBuffer, final VertexFormat cyp) {
private State(final ByteBuffer byteBuffer, final VertexFormat dhq) {
this.data = byteBuffer;
this.format = cyp;
this.format = dhq;
}
}
@ -335,8 +335,8 @@ public class BufferBuilder extends DefaultedVertexConsumer implements BufferVert
private final int vertexCount;
private final int mode;
private DrawState(final VertexFormat cyp, final int integer2, final int integer3) {
this.format = cyp;
private DrawState(final VertexFormat dhq, final int integer2, final int integer3) {
this.format = dhq;
this.vertexCount = integer2;
this.mode = integer3;
}

View File

@ -7,31 +7,31 @@ import java.nio.ByteBuffer;
import com.mojang.blaze3d.systems.RenderSystem;
public class BufferUploader {
public static void end(final BufferBuilder cyg) {
public static void end(final BufferBuilder dhg) {
if (!RenderSystem.isOnRenderThread()) {
final Pair<BufferBuilder.DrawState, ByteBuffer> pair2;
final BufferBuilder.DrawState a3;
RenderSystem.recordRenderCall(() -> {
pair2 = cyg.popNextBuffer();
pair2 = dhg.popNextBuffer();
a3 = (BufferBuilder.DrawState)pair2.getFirst();
_end((ByteBuffer)pair2.getSecond(), a3.mode(), a3.format(), a3.vertexCount());
});
}
else {
final Pair<BufferBuilder.DrawState, ByteBuffer> pair3 = cyg.popNextBuffer();
final Pair<BufferBuilder.DrawState, ByteBuffer> pair3 = dhg.popNextBuffer();
final BufferBuilder.DrawState a4 = (BufferBuilder.DrawState)pair3.getFirst();
_end((ByteBuffer)pair3.getSecond(), a4.mode(), a4.format(), a4.vertexCount());
}
}
private static void _end(final ByteBuffer byteBuffer, final int integer2, final VertexFormat cyp, final int integer4) {
private static void _end(final ByteBuffer byteBuffer, final int integer2, final VertexFormat dhq, final int integer4) {
RenderSystem.assertThread(RenderSystem::isOnRenderThread);
byteBuffer.clear();
if (integer4 <= 0) {
return;
}
cyp.setupBufferState(MemoryUtil.memAddress(byteBuffer));
dhq.setupBufferState(MemoryUtil.memAddress(byteBuffer));
GlStateManager._drawArrays(integer2, 0, integer4);
cyp.clearBufferState();
dhq.clearBufferState();
}
}

View File

@ -25,11 +25,11 @@ public interface BufferVertexConsumer extends VertexConsumer {
}
default VertexConsumer color(final int integer1, final int integer2, final int integer3, final int integer4) {
final VertexFormatElement cyq6 = this.currentElement();
if (cyq6.getUsage() != VertexFormatElement.Usage.COLOR) {
final VertexFormatElement dhr6 = this.currentElement();
if (dhr6.getUsage() != VertexFormatElement.Usage.COLOR) {
return this;
}
if (cyq6.getType() != VertexFormatElement.Type.UBYTE) {
if (dhr6.getType() != VertexFormatElement.Type.UBYTE) {
throw new IllegalStateException();
}
this.putByte(0, (byte)integer1);
@ -41,11 +41,11 @@ public interface BufferVertexConsumer extends VertexConsumer {
}
default VertexConsumer uv(final float float1, final float float2) {
final VertexFormatElement cyq4 = this.currentElement();
if (cyq4.getUsage() != VertexFormatElement.Usage.UV || cyq4.getIndex() != 0) {
final VertexFormatElement dhr4 = this.currentElement();
if (dhr4.getUsage() != VertexFormatElement.Usage.UV || dhr4.getIndex() != 0) {
return this;
}
if (cyq4.getType() != VertexFormatElement.Type.FLOAT) {
if (dhr4.getType() != VertexFormatElement.Type.FLOAT) {
throw new IllegalStateException();
}
this.putFloat(0, float1);
@ -63,11 +63,11 @@ public interface BufferVertexConsumer extends VertexConsumer {
}
default VertexConsumer uvShort(final short short1, final short short2, final int integer) {
final VertexFormatElement cyq5 = this.currentElement();
if (cyq5.getUsage() != VertexFormatElement.Usage.UV || cyq5.getIndex() != integer) {
final VertexFormatElement dhr5 = this.currentElement();
if (dhr5.getUsage() != VertexFormatElement.Usage.UV || dhr5.getIndex() != integer) {
return this;
}
if (cyq5.getType() != VertexFormatElement.Type.SHORT) {
if (dhr5.getType() != VertexFormatElement.Type.SHORT) {
throw new IllegalStateException();
}
this.putShort(0, short1);
@ -77,11 +77,11 @@ public interface BufferVertexConsumer extends VertexConsumer {
}
default VertexConsumer normal(final float float1, final float float2, final float float3) {
final VertexFormatElement cyq5 = this.currentElement();
if (cyq5.getUsage() != VertexFormatElement.Usage.NORMAL) {
final VertexFormatElement dhr5 = this.currentElement();
if (dhr5.getUsage() != VertexFormatElement.Usage.NORMAL) {
return this;
}
if (cyq5.getType() != VertexFormatElement.Type.BYTE) {
if (dhr5.getType() != VertexFormatElement.Type.BYTE) {
throw new IllegalStateException();
}
this.putByte(0, normalIntValue(float1));

View File

@ -45,10 +45,10 @@ public class PoseStack {
a5.normal.mul(Matrix3f.createScaleMatrix(float7 * float4, float7 * float5, float7 * float6));
}
public void mulPose(final Quaternion c) {
public void mulPose(final Quaternion d) {
final Pose a3 = this.poseStack.getLast();
a3.pose.multiply(c);
a3.normal.mul(c);
a3.pose.multiply(d);
a3.normal.mul(d);
}
public void pushPose() {

View File

@ -6,10 +6,10 @@ import com.mojang.math.Vector3f;
import com.mojang.math.Matrix3f;
import com.mojang.math.Matrix4f;
public class BreakingTextureGenerator extends DefaultedVertexConsumer {
public class SheetedDecalTextureGenerator extends DefaultedVertexConsumer {
private final VertexConsumer delegate;
private final Matrix4f cameraInversePose;
private final Matrix3f normalPose;
private final Matrix3f normalInversePose;
private float x;
private float y;
private float z;
@ -20,10 +20,10 @@ public class BreakingTextureGenerator extends DefaultedVertexConsumer {
private float ny;
private float nz;
public BreakingTextureGenerator(final VertexConsumer cyo, final PoseStack.Pose a) {
this.delegate = cyo;
(this.cameraInversePose = a.pose().copy()).invert();
(this.normalPose = a.normal().copy()).invert();
public SheetedDecalTextureGenerator(final VertexConsumer dhp, final Matrix4f b, final Matrix3f a) {
this.delegate = dhp;
(this.cameraInversePose = b.copy()).invert();
(this.normalInversePose = a.copy()).invert();
this.resetState();
}
@ -41,16 +41,16 @@ public class BreakingTextureGenerator extends DefaultedVertexConsumer {
@Override
public void endVertex() {
final Vector3f e2 = new Vector3f(this.nx, this.ny, this.nz);
e2.transform(this.normalPose);
final Direction fp3 = Direction.getNearest(e2.x(), e2.y(), e2.z());
final Vector4f f4 = new Vector4f(this.x, this.y, this.z, 1.0f);
f4.transform(this.cameraInversePose);
f4.transform(Vector3f.YP.rotationDegrees(180.0f));
f4.transform(Vector3f.XP.rotationDegrees(-90.0f));
f4.transform(fp3.getRotation());
final float float5 = -f4.x();
final float float6 = -f4.y();
final Vector3f g2 = new Vector3f(this.nx, this.ny, this.nz);
g2.transform(this.normalInversePose);
final Direction fz3 = Direction.getNearest(g2.x(), g2.y(), g2.z());
final Vector4f h4 = new Vector4f(this.x, this.y, this.z, 1.0f);
h4.transform(this.cameraInversePose);
h4.transform(Vector3f.YP.rotationDegrees(180.0f));
h4.transform(Vector3f.XP.rotationDegrees(-90.0f));
h4.transform(fz3.getRotation());
final float float5 = -h4.x();
final float float6 = -h4.y();
this.delegate.vertex(this.x, this.y, this.z).color(1.0f, 1.0f, 1.0f, 1.0f).uv(float5, float6).overlayCoords(this.overlayU, this.overlayV).uv2(this.lightCoords).normal(this.nx, this.ny, this.nz).endVertex();
this.resetState();
}

View File

@ -11,8 +11,8 @@ public class VertexBuffer implements AutoCloseable {
private final VertexFormat format;
private int vertexCount;
public VertexBuffer(final VertexFormat cyp) {
this.format = cyp;
public VertexBuffer(final VertexFormat dhq) {
this.format = dhq;
RenderSystem.glGenBuffers(integer -> this.id = integer);
}
@ -20,25 +20,25 @@ public class VertexBuffer implements AutoCloseable {
RenderSystem.glBindBuffer(34962, () -> this.id);
}
public void upload(final BufferBuilder cyg) {
public void upload(final BufferBuilder dhg) {
if (!RenderSystem.isOnRenderThread()) {
RenderSystem.recordRenderCall(() -> this.upload_(cyg));
RenderSystem.recordRenderCall(() -> this.upload_(dhg));
}
else {
this.upload_(cyg);
this.upload_(dhg);
}
}
public CompletableFuture<Void> uploadLater(final BufferBuilder cyg) {
public CompletableFuture<Void> uploadLater(final BufferBuilder dhg) {
if (!RenderSystem.isOnRenderThread()) {
return CompletableFuture.runAsync(() -> this.upload_(cyg), runnable -> RenderSystem.recordRenderCall(runnable::run));
return CompletableFuture.runAsync(() -> this.upload_(dhg), runnable -> RenderSystem.recordRenderCall(runnable::run));
}
this.upload_(cyg);
this.upload_(dhg);
return CompletableFuture.<Void>completedFuture((Void)null);
}
private void upload_(final BufferBuilder cyg) {
final Pair<BufferBuilder.DrawState, ByteBuffer> pair3 = cyg.popNextBuffer();
private void upload_(final BufferBuilder dhg) {
final Pair<BufferBuilder.DrawState, ByteBuffer> pair3 = dhg.popNextBuffer();
if (this.id == -1) {
return;
}

View File

@ -51,16 +51,16 @@ public interface VertexConsumer {
return this.overlayCoords(integer & 0xFFFF, integer >> 16 & 0xFFFF);
}
default void putBulkData(final PoseStack.Pose a, final BakedQuad drn, final float float3, final float float4, final float float5, final int integer6, final int integer7) {
this.putBulkData(a, drn, new float[] { 1.0f, 1.0f, 1.0f, 1.0f }, float3, float4, float5, new int[] { integer6, integer6, integer6, integer6 }, integer7, false);
default void putBulkData(final PoseStack.Pose a, final BakedQuad ect, final float float3, final float float4, final float float5, final int integer6, final int integer7) {
this.putBulkData(a, ect, new float[] { 1.0f, 1.0f, 1.0f, 1.0f }, float3, float4, float5, new int[] { integer6, integer6, integer6, integer6 }, integer7, false);
}
default void putBulkData(final PoseStack.Pose a, final BakedQuad drn, final float[] arr, final float float4, final float float5, final float float6, final int[] arr, final int integer, final boolean boolean9) {
final int[] arr2 = drn.getVertices();
final Vec3i gg12 = drn.getDirection().getNormal();
final Vector3f e13 = new Vector3f((float)gg12.getX(), (float)gg12.getY(), (float)gg12.getZ());
default void putBulkData(final PoseStack.Pose a, final BakedQuad ect, final float[] arr, final float float4, final float float5, final float float6, final int[] arr, final int integer, final boolean boolean9) {
final int[] arr2 = ect.getVertices();
final Vec3i gr12 = ect.getDirection().getNormal();
final Vector3f g13 = new Vector3f((float)gr12.getX(), (float)gr12.getY(), (float)gr12.getZ());
final Matrix4f b14 = a.pose();
e13.transform(a.normal());
g13.transform(a.normal());
final int integer2 = 8;
final int integer3 = arr2.length / 8;
try (final MemoryStack memoryStack17 = MemoryStack.stackPush()) {
@ -91,22 +91,22 @@ public interface VertexConsumer {
final int integer5 = arr[integer4];
final float float11 = byteBuffer19.getFloat(16);
final float float12 = byteBuffer19.getFloat(20);
final Vector4f f31 = new Vector4f(float7, float8, float9, 1.0f);
f31.transform(b14);
this.vertex(f31.x(), f31.y(), f31.z(), float13, float14, float15, 1.0f, float11, float12, integer, integer5, e13.x(), e13.y(), e13.z());
final Vector4f h31 = new Vector4f(float7, float8, float9, 1.0f);
h31.transform(b14);
this.vertex(h31.x(), h31.y(), h31.z(), float13, float14, float15, 1.0f, float11, float12, integer, integer5, g13.x(), g13.y(), g13.z());
}
}
}
default VertexConsumer vertex(final Matrix4f b, final float float2, final float float3, final float float4) {
final Vector4f f6 = new Vector4f(float2, float3, float4, 1.0f);
f6.transform(b);
return this.vertex(f6.x(), f6.y(), f6.z());
final Vector4f h6 = new Vector4f(float2, float3, float4, 1.0f);
h6.transform(b);
return this.vertex(h6.x(), h6.y(), h6.z());
}
default VertexConsumer normal(final Matrix3f a, final float float2, final float float3, final float float4) {
final Vector3f e6 = new Vector3f(float2, float3, float4);
e6.transform(a);
return this.normal(e6.x(), e6.y(), e6.z());
final Vector3f g6 = new Vector3f(float2, float3, float4);
g6.transform(a);
return this.normal(g6.x(), g6.y(), g6.z());
}
}

View File

@ -19,9 +19,9 @@ public class VertexFormat {
this.offsets = (IntList)new IntArrayList();
this.elements = immutableList;
int integer3 = 0;
for (final VertexFormatElement cyq5 : immutableList) {
for (final VertexFormatElement dhr5 : immutableList) {
this.offsets.add(integer3);
integer3 += cyq5.getByteSize();
integer3 += dhr5.getByteSize();
}
this.vertexSize = integer3;
}
@ -51,8 +51,8 @@ public class VertexFormat {
if (object == null || this.getClass() != object.getClass()) {
return false;
}
final VertexFormat cyp3 = (VertexFormat)object;
return this.vertexSize == cyp3.vertexSize && this.elements.equals(cyp3.elements);
final VertexFormat dhq3 = (VertexFormat)object;
return this.vertexSize == dhq3.vertexSize && this.elements.equals(dhq3.elements);
}
@Override
@ -77,8 +77,8 @@ public class VertexFormat {
RenderSystem.recordRenderCall(this::clearBufferState);
return;
}
for (final VertexFormatElement cyq3 : this.getElements()) {
cyq3.clearBufferState();
for (final VertexFormatElement dhr3 : this.getElements()) {
dhr3.clearBufferState();
}
}
}

View File

@ -39,10 +39,6 @@ public class VertexFormatElement {
return this.usage;
}
public final int getCount() {
return this.count;
}
public final int getIndex() {
return this.index;
}
@ -56,10 +52,6 @@ public class VertexFormatElement {
return this.byteSize;
}
public final boolean isPosition() {
return this.usage == Usage.POSITION;
}
@Override
public boolean equals(final Object object) {
if (this == object) {
@ -68,8 +60,8 @@ public class VertexFormatElement {
if (object == null || this.getClass() != object.getClass()) {
return false;
}
final VertexFormatElement cyq3 = (VertexFormatElement)object;
return this.count == cyq3.count && this.index == cyq3.index && this.type == cyq3.type && this.usage == cyq3.usage;
final VertexFormatElement dhr3 = (VertexFormatElement)object;
return this.count == dhr3.count && this.index == dhr3.index && this.type == dhr3.type && this.usage == dhr3.usage;
}
@Override

View File

@ -1,20 +1,20 @@
package com.mojang.blaze3d.vertex;
public class VertexMultiConsumer {
public static VertexConsumer create(final VertexConsumer cyo1, final VertexConsumer cyo2) {
return new Double(cyo1, cyo2);
public static VertexConsumer create(final VertexConsumer dhp1, final VertexConsumer dhp2) {
return new Double(dhp1, dhp2);
}
static class Double implements VertexConsumer {
private final VertexConsumer first;
private final VertexConsumer second;
public Double(final VertexConsumer cyo1, final VertexConsumer cyo2) {
if (cyo1 == cyo2) {
public Double(final VertexConsumer dhp1, final VertexConsumer dhp2) {
if (dhp1 == dhp2) {
throw new IllegalArgumentException("Duplicate delegates");
}
this.first = cyo1;
this.second = cyo2;
this.first = dhp1;
this.second = dhp2;
}
@Override

View File

@ -22,11 +22,11 @@ public final class Matrix3f {
public Matrix3f() {
}
public Matrix3f(final Quaternion c) {
final float float3 = c.i();
final float float4 = c.j();
final float float5 = c.k();
final float float6 = c.r();
public Matrix3f(final Quaternion d) {
final float float3 = d.i();
final float float4 = d.j();
final float float5 = d.k();
final float float6 = d.r();
final float float7 = 2.0f * float3 * float3;
final float float8 = 2.0f * float4 * float4;
final float float9 = 2.0f * float5 * float5;
@ -106,16 +106,16 @@ public final class Matrix3f {
private static Quaternion stepJacobi(final Matrix3f a) {
final Matrix3f a2 = new Matrix3f();
final Quaternion c3 = Quaternion.ONE.copy();
final Quaternion d3 = Quaternion.ONE.copy();
if (a.m01 * a.m01 + a.m10 * a.m10 > 1.0E-6f) {
final Pair<Float, Float> pair4 = approxGivensQuat(a.m00, 0.5f * (a.m01 + a.m10), a.m11);
final Float float5 = (Float)pair4.getFirst();
final Float float6 = (Float)pair4.getSecond();
final Quaternion c4 = new Quaternion(0.0f, 0.0f, float5, float6);
final Quaternion d4 = new Quaternion(0.0f, 0.0f, float5, float6);
final float float7 = float6 * float6 - float5 * float5;
final float float8 = -2.0f * float5 * float6;
final float float9 = float6 * float6 + float5 * float5;
c3.mul(c4);
d3.mul(d4);
a2.setIdentity();
a2.m00 = float7;
a2.m11 = float7;
@ -131,11 +131,11 @@ public final class Matrix3f {
final Pair<Float, Float> pair4 = approxGivensQuat(a.m00, 0.5f * (a.m02 + a.m20), a.m22);
final float float10 = -(float)pair4.getFirst();
final Float float6 = (Float)pair4.getSecond();
final Quaternion c4 = new Quaternion(0.0f, float10, 0.0f, float6);
final Quaternion d4 = new Quaternion(0.0f, float10, 0.0f, float6);
final float float7 = float6 * float6 - float10 * float10;
final float float8 = -2.0f * float10 * float6;
final float float9 = float6 * float6 + float10 * float10;
c3.mul(c4);
d3.mul(d4);
a2.setIdentity();
a2.m00 = float7;
a2.m22 = float7;
@ -151,11 +151,11 @@ public final class Matrix3f {
final Pair<Float, Float> pair4 = approxGivensQuat(a.m11, 0.5f * (a.m12 + a.m21), a.m22);
final Float float5 = (Float)pair4.getFirst();
final Float float6 = (Float)pair4.getSecond();
final Quaternion c4 = new Quaternion(float5, 0.0f, 0.0f, float6);
final Quaternion d4 = new Quaternion(float5, 0.0f, 0.0f, float6);
final float float7 = float6 * float6 - float5 * float5;
final float float8 = -2.0f * float5 * float6;
final float float9 = float6 * float6 + float5 * float5;
c3.mul(c4);
d3.mul(d4);
a2.setIdentity();
a2.m11 = float7;
a2.m22 = float7;
@ -167,7 +167,7 @@ public final class Matrix3f {
a2.mul(a);
a.load(a2);
}
return c3;
return d3;
}
public void transpose() {
@ -183,17 +183,17 @@ public final class Matrix3f {
}
public Triple<Quaternion, Vector3f, Quaternion> svdDecompose() {
final Quaternion c2 = Quaternion.ONE.copy();
final Quaternion c3 = Quaternion.ONE.copy();
final Quaternion d2 = Quaternion.ONE.copy();
final Quaternion d3 = Quaternion.ONE.copy();
final Matrix3f a4 = this.copy();
a4.transpose();
a4.mul(this);
for (int integer5 = 0; integer5 < 5; ++integer5) {
c3.mul(stepJacobi(a4));
d3.mul(stepJacobi(a4));
}
c3.normalize();
d3.normalize();
final Matrix3f a5 = new Matrix3f(this);
a5.mul(new Matrix3f(c3));
a5.mul(new Matrix3f(d3));
float float7 = 1.0f;
Pair<Float, Float> pair6 = qrGivensQuat(a5.m00, a5.m10);
final Float float8 = (Float)pair6.getFirst();
@ -201,8 +201,8 @@ public final class Matrix3f {
final float float10 = float9 * float9 - float8 * float8;
final float float11 = -2.0f * float8 * float9;
final float float12 = float9 * float9 + float8 * float8;
final Quaternion c4 = new Quaternion(0.0f, 0.0f, float8, float9);
c2.mul(c4);
final Quaternion d4 = new Quaternion(0.0f, 0.0f, float8, float9);
d2.mul(d4);
final Matrix3f a6 = new Matrix3f();
a6.setIdentity();
a6.m00 = float10;
@ -218,8 +218,8 @@ public final class Matrix3f {
final float float15 = float14 * float14 - float13 * float13;
final float float16 = -2.0f * float13 * float14;
final float float17 = float14 * float14 + float13 * float13;
final Quaternion c5 = new Quaternion(0.0f, float13, 0.0f, float14);
c2.mul(c5);
final Quaternion d5 = new Quaternion(0.0f, float13, 0.0f, float14);
d2.mul(d5);
final Matrix3f a7 = new Matrix3f();
a7.setIdentity();
a7.m00 = float15;
@ -235,8 +235,8 @@ public final class Matrix3f {
final float float20 = float19 * float19 - float18 * float18;
final float float21 = -2.0f * float18 * float19;
final float float22 = float19 * float19 + float18 * float18;
final Quaternion c6 = new Quaternion(float18, 0.0f, 0.0f, float19);
c2.mul(c6);
final Quaternion d6 = new Quaternion(float18, 0.0f, 0.0f, float19);
d2.mul(d6);
final Matrix3f a8 = new Matrix3f();
a8.setIdentity();
a8.m11 = float20;
@ -247,9 +247,9 @@ public final class Matrix3f {
float7 *= float22;
a8.mul(a7);
float7 = 1.0f / float7;
c2.mul((float)Math.sqrt(float7));
final Vector3f e29 = new Vector3f(a8.m00 * float7, a8.m11 * float7, a8.m22 * float7);
return (Triple<Quaternion, Vector3f, Quaternion>)Triple.of(c2, e29, c3);
d2.mul((float)Math.sqrt(float7));
final Vector3f g29 = new Vector3f(a8.m00 * float7, a8.m11 * float7, a8.m22 * float7);
return (Triple<Quaternion, Vector3f, Quaternion>)Triple.of(d2, g29, d3);
}
@Override
@ -359,6 +359,40 @@ public final class Matrix3f {
return false;
}
public void set(final int integer1, final int integer2, final float float3) {
if (integer1 == 0) {
if (integer2 == 0) {
this.m00 = float3;
}
else if (integer2 == 1) {
this.m01 = float3;
}
else {
this.m02 = float3;
}
}
else if (integer1 == 1) {
if (integer2 == 0) {
this.m10 = float3;
}
else if (integer2 == 1) {
this.m11 = float3;
}
else {
this.m12 = float3;
}
}
else if (integer2 == 0) {
this.m20 = float3;
}
else if (integer2 == 1) {
this.m21 = float3;
}
else {
this.m22 = float3;
}
}
public void mul(final Matrix3f a) {
final float float3 = this.m00 * a.m00 + this.m01 * a.m10 + this.m02 * a.m20;
final float float4 = this.m00 * a.m01 + this.m01 * a.m11 + this.m02 * a.m21;
@ -380,8 +414,8 @@ public final class Matrix3f {
this.m22 = float11;
}
public void mul(final Quaternion c) {
this.mul(new Matrix3f(c));
public void mul(final Quaternion d) {
this.mul(new Matrix3f(d));
}
public void mul(final float float1) {

View File

@ -42,11 +42,11 @@ public final class Matrix4f {
this.m33 = b.m33;
}
public Matrix4f(final Quaternion c) {
final float float3 = c.i();
final float float4 = c.j();
final float float5 = c.k();
final float float6 = c.r();
public Matrix4f(final Quaternion d) {
final float float3 = d.i();
final float float4 = d.j();
final float float5 = d.k();
final float float6 = d.r();
final float float7 = 2.0f * float3 * float3;
final float float8 = 2.0f * float4 * float4;
final float float9 = 2.0f * float5 * float5;
@ -295,8 +295,8 @@ public final class Matrix4f {
this.m33 = float18;
}
public void multiply(final Quaternion c) {
this.multiply(new Matrix4f(c));
public void multiply(final Quaternion d) {
this.multiply(new Matrix4f(d));
}
public void multiply(final float float1) {
@ -342,10 +342,10 @@ public final class Matrix4f {
return b5;
}
public void translate(final Vector3f e) {
this.m03 += e.x();
this.m13 += e.y();
this.m23 += e.z();
public void translate(final Vector3f g) {
this.m03 += g.x();
this.m13 += g.y();
this.m23 += g.z();
}
public Matrix4f copy() {

View File

@ -0,0 +1,178 @@
package com.mojang.math;
import net.minecraft.Util;
import java.util.stream.Collectors;
import com.mojang.datafixers.util.Pair;
import java.util.Arrays;
import net.minecraft.core.FrontAndTop;
import com.google.common.collect.Maps;
import it.unimi.dsi.fastutil.booleans.BooleanArrayList;
import it.unimi.dsi.fastutil.booleans.BooleanList;
import javax.annotation.Nullable;
import net.minecraft.core.Direction;
import java.util.Map;
import net.minecraft.util.StringRepresentable;
public enum OctahedralGroup implements StringRepresentable {
IDENTITY("identity", SymmetricGroup3.P123, false, false, false),
ROT_180_FACE_XY("rot_180_face_xy", SymmetricGroup3.P123, true, true, false),
ROT_180_FACE_XZ("rot_180_face_xz", SymmetricGroup3.P123, true, false, true),
ROT_180_FACE_YZ("rot_180_face_yz", SymmetricGroup3.P123, false, true, true),
ROT_120_NNN("rot_120_nnn", SymmetricGroup3.P231, false, false, false),
ROT_120_NNP("rot_120_nnp", SymmetricGroup3.P312, true, false, true),
ROT_120_NPN("rot_120_npn", SymmetricGroup3.P312, false, true, true),
ROT_120_NPP("rot_120_npp", SymmetricGroup3.P231, true, false, true),
ROT_120_PNN("rot_120_pnn", SymmetricGroup3.P312, true, true, false),
ROT_120_PNP("rot_120_pnp", SymmetricGroup3.P231, true, true, false),
ROT_120_PPN("rot_120_ppn", SymmetricGroup3.P231, false, true, true),
ROT_120_PPP("rot_120_ppp", SymmetricGroup3.P312, false, false, false),
ROT_180_EDGE_XY_NEG("rot_180_edge_xy_neg", SymmetricGroup3.P213, true, true, true),
ROT_180_EDGE_XY_POS("rot_180_edge_xy_pos", SymmetricGroup3.P213, false, false, true),
ROT_180_EDGE_XZ_NEG("rot_180_edge_xz_neg", SymmetricGroup3.P321, true, true, true),
ROT_180_EDGE_XZ_POS("rot_180_edge_xz_pos", SymmetricGroup3.P321, false, true, false),
ROT_180_EDGE_YZ_NEG("rot_180_edge_yz_neg", SymmetricGroup3.P132, true, true, true),
ROT_180_EDGE_YZ_POS("rot_180_edge_yz_pos", SymmetricGroup3.P132, true, false, false),
ROT_90_X_NEG("rot_90_x_neg", SymmetricGroup3.P132, false, false, true),
ROT_90_X_POS("rot_90_x_pos", SymmetricGroup3.P132, false, true, false),
ROT_90_Y_NEG("rot_90_y_neg", SymmetricGroup3.P321, true, false, false),
ROT_90_Y_POS("rot_90_y_pos", SymmetricGroup3.P321, false, false, true),
ROT_90_Z_NEG("rot_90_z_neg", SymmetricGroup3.P213, false, true, false),
ROT_90_Z_POS("rot_90_z_pos", SymmetricGroup3.P213, true, false, false),
INVERSION("inversion", SymmetricGroup3.P123, true, true, true),
INVERT_X("invert_x", SymmetricGroup3.P123, true, false, false),
INVERT_Y("invert_y", SymmetricGroup3.P123, false, true, false),
INVERT_Z("invert_z", SymmetricGroup3.P123, false, false, true),
ROT_60_REF_NNN("rot_60_ref_nnn", SymmetricGroup3.P312, true, true, true),
ROT_60_REF_NNP("rot_60_ref_nnp", SymmetricGroup3.P231, true, false, false),
ROT_60_REF_NPN("rot_60_ref_npn", SymmetricGroup3.P231, false, false, true),
ROT_60_REF_NPP("rot_60_ref_npp", SymmetricGroup3.P312, false, false, true),
ROT_60_REF_PNN("rot_60_ref_pnn", SymmetricGroup3.P231, false, true, false),
ROT_60_REF_PNP("rot_60_ref_pnp", SymmetricGroup3.P312, true, false, false),
ROT_60_REF_PPN("rot_60_ref_ppn", SymmetricGroup3.P312, false, true, false),
ROT_60_REF_PPP("rot_60_ref_ppp", SymmetricGroup3.P231, true, true, true),
SWAP_XY("swap_xy", SymmetricGroup3.P213, false, false, false),
SWAP_YZ("swap_yz", SymmetricGroup3.P132, false, false, false),
SWAP_XZ("swap_xz", SymmetricGroup3.P321, false, false, false),
SWAP_NEG_XY("swap_neg_xy", SymmetricGroup3.P213, true, true, false),
SWAP_NEG_YZ("swap_neg_yz", SymmetricGroup3.P132, false, true, true),
SWAP_NEG_XZ("swap_neg_xz", SymmetricGroup3.P321, true, false, true),
ROT_90_REF_X_NEG("rot_90_ref_x_neg", SymmetricGroup3.P132, true, false, true),
ROT_90_REF_X_POS("rot_90_ref_x_pos", SymmetricGroup3.P132, true, true, false),
ROT_90_REF_Y_NEG("rot_90_ref_y_neg", SymmetricGroup3.P321, true, true, false),
ROT_90_REF_Y_POS("rot_90_ref_y_pos", SymmetricGroup3.P321, false, true, true),
ROT_90_REF_Z_NEG("rot_90_ref_z_neg", SymmetricGroup3.P213, false, true, true),
ROT_90_REF_Z_POS("rot_90_ref_z_pos", SymmetricGroup3.P213, true, false, true);
private final Matrix3f transformation;
private final String name;
@Nullable
private Map<Direction, Direction> rotatedDirections;
private final boolean invertX;
private final boolean invertY;
private final boolean invertZ;
private final SymmetricGroup3 permutation;
private static final OctahedralGroup[][] cayleyTable;
private static final OctahedralGroup[] inverseTable;
private OctahedralGroup(final String string3, final SymmetricGroup3 e, final boolean boolean5, final boolean boolean6, final boolean boolean7) {
this.name = string3;
this.invertX = boolean5;
this.invertY = boolean6;
this.invertZ = boolean7;
this.permutation = e;
this.transformation = new Matrix3f();
this.transformation.m00 = (boolean5 ? -1.0f : 1.0f);
this.transformation.m11 = (boolean6 ? -1.0f : 1.0f);
this.transformation.m22 = (boolean7 ? -1.0f : 1.0f);
this.transformation.mul(e.transformation());
}
private BooleanList packInversions() {
return (BooleanList)new BooleanArrayList(new boolean[] { this.invertX, this.invertY, this.invertZ });
}
public OctahedralGroup compose(final OctahedralGroup c) {
return OctahedralGroup.cayleyTable[this.ordinal()][c.ordinal()];
}
@Override
public String toString() {
return this.name;
}
@Override
public String getSerializedName() {
return this.name;
}
public Direction rotate(final Direction fz) {
if (this.rotatedDirections == null) {
this.rotatedDirections = Maps.newEnumMap(Direction.class);
for (final Direction fz2 : Direction.values()) {
final Direction.Axis a7 = fz2.getAxis();
final Direction.AxisDirection b8 = fz2.getAxisDirection();
final Direction.Axis a8 = Direction.Axis.values()[this.permutation.permutation(a7.ordinal())];
final Direction.AxisDirection b9 = this.inverts(a8) ? b8.opposite() : b8;
final Direction fz3 = Direction.fromAxisAndDirection(a8, b9);
this.rotatedDirections.put(fz2, fz3);
}
}
return this.rotatedDirections.get(fz);
}
public boolean inverts(final Direction.Axis a) {
switch (a) {
case X: {
return this.invertX;
}
case Y: {
return this.invertY;
}
default: {
return this.invertZ;
}
}
}
public FrontAndTop rotate(final FrontAndTop gb) {
return FrontAndTop.fromFrontAndTop(this.rotate(gb.front()), this.rotate(gb.top()));
}
static {
final Map<Pair<SymmetricGroup3, BooleanList>, OctahedralGroup> map2;
final OctahedralGroup[] array;
int length;
int i = 0;
OctahedralGroup c3;
final OctahedralGroup[] array2;
int length2;
int j = 0;
OctahedralGroup c4;
BooleanList booleanList11;
BooleanList booleanList12;
SymmetricGroup3 e13;
BooleanArrayList booleanArrayList14;
int integer2;
cayleyTable = Util.<OctahedralGroup[][]>make(new OctahedralGroup[values().length][values().length], arr -> {
map2 = Arrays.<OctahedralGroup>stream(values()).collect(Collectors.toMap(c -> Pair.of(c.permutation, c.packInversions()), c -> c));
values();
for (length = array.length; i < length; ++i) {
c3 = array[i];
values();
for (length2 = array2.length; j < length2; ++j) {
c4 = array2[j];
booleanList11 = c3.packInversions();
booleanList12 = c4.packInversions();
e13 = c4.permutation.compose(c3.permutation);
booleanArrayList14 = new BooleanArrayList(3);
for (integer2 = 0; integer2 < 3; ++integer2) {
booleanArrayList14.add(booleanList11.getBoolean(integer2) ^ booleanList12.getBoolean(c3.permutation.permutation(integer2)));
}
arr[c3.ordinal()][c4.ordinal()] = map2.get(Pair.of(e13, booleanArrayList14));
}
}
return;
});
inverseTable = Arrays.<OctahedralGroup>stream(values()).map(c -> Arrays.<OctahedralGroup>stream(values()).filter(c2 -> c.compose(c2) == OctahedralGroup.IDENTITY).findAny().get()).<OctahedralGroup>toArray(OctahedralGroup[]::new);
}
}

View File

@ -16,14 +16,14 @@ public final class Quaternion {
this.r = float4;
}
public Quaternion(final Vector3f e, float float2, final boolean boolean3) {
public Quaternion(final Vector3f g, float float2, final boolean boolean3) {
if (boolean3) {
float2 *= 0.017453292f;
}
final float float3 = sin(float2 / 2.0f);
this.i = e.x() * float3;
this.j = e.y() * float3;
this.k = e.z() * float3;
this.i = g.x() * float3;
this.j = g.y() * float3;
this.k = g.z() * float3;
this.r = cos(float2 / 2.0f);
}
@ -45,11 +45,11 @@ public final class Quaternion {
this.r = float5 * float7 * float9 - float4 * float6 * float8;
}
public Quaternion(final Quaternion c) {
this.i = c.i;
this.j = c.j;
this.k = c.k;
this.r = c.r;
public Quaternion(final Quaternion d) {
this.i = d.i;
this.j = d.j;
this.k = d.k;
this.r = d.r;
}
@Override
@ -60,8 +60,8 @@ public final class Quaternion {
if (object == null || this.getClass() != object.getClass()) {
return false;
}
final Quaternion c3 = (Quaternion)object;
return Float.compare(c3.i, this.i) == 0 && Float.compare(c3.j, this.j) == 0 && Float.compare(c3.k, this.k) == 0 && Float.compare(c3.r, this.r) == 0;
final Quaternion d3 = (Quaternion)object;
return Float.compare(d3.i, this.i) == 0 && Float.compare(d3.j, this.j) == 0 && Float.compare(d3.k, this.k) == 0 && Float.compare(d3.r, this.r) == 0;
}
@Override
@ -99,15 +99,15 @@ public final class Quaternion {
return this.r;
}
public void mul(final Quaternion c) {
public void mul(final Quaternion d) {
final float float3 = this.i();
final float float4 = this.j();
final float float5 = this.k();
final float float6 = this.r();
final float float7 = c.i();
final float float8 = c.j();
final float float9 = c.k();
final float float10 = c.r();
final float float7 = d.i();
final float float8 = d.j();
final float float9 = d.k();
final float float10 = d.r();
this.i = float6 * float7 + float3 * float10 + float4 * float9 - float5 * float8;
this.j = float6 * float8 - float3 * float9 + float4 * float10 + float5 * float7;
this.k = float6 * float9 + float3 * float8 - float4 * float7 + float5 * float10;

View File

@ -0,0 +1,66 @@
package com.mojang.math;
import net.minecraft.Util;
import java.util.Arrays;
public enum SymmetricGroup3 {
P123(0, 1, 2),
P213(1, 0, 2),
P132(0, 2, 1),
P231(1, 2, 0),
P312(2, 0, 1),
P321(2, 1, 0);
private final int[] permutation;
private final Matrix3f transformation;
private static final SymmetricGroup3[][] cayleyTable;
private SymmetricGroup3(final int integer3, final int integer4, final int integer5) {
this.permutation = new int[] { integer3, integer4, integer5 };
(this.transformation = new Matrix3f()).set(0, this.permutation(0), 1.0f);
this.transformation.set(1, this.permutation(1), 1.0f);
this.transformation.set(2, this.permutation(2), 1.0f);
}
public SymmetricGroup3 compose(final SymmetricGroup3 e) {
return SymmetricGroup3.cayleyTable[this.ordinal()][e.ordinal()];
}
public int permutation(final int integer) {
return this.permutation[integer];
}
public Matrix3f transformation() {
return this.transformation;
}
static {
final SymmetricGroup3[] array;
int length;
int i = 0;
SymmetricGroup3 e2;
final SymmetricGroup3[] array2;
int length2;
int j = 0;
SymmetricGroup3 e3;
int[] arr2;
int integer11;
SymmetricGroup3 e4;
cayleyTable = Util.<SymmetricGroup3[][]>make(new SymmetricGroup3[values().length][values().length], arr -> {
values();
for (length = array.length; i < length; ++i) {
e2 = array[i];
values();
for (length2 = array2.length; j < length2; ++j) {
e3 = array2[j];
arr2 = new int[3];
for (integer11 = 0; integer11 < 3; ++integer11) {
arr2[integer11] = e2.permutation[e3.permutation[integer11]];
}
e4 = Arrays.<SymmetricGroup3>stream(values()).filter(e -> Arrays.equals(e.permutation, arr2)).findFirst().get();
arr[e2.ordinal()][e3.ordinal()] = e4;
}
}
});
}
}

View File

@ -28,12 +28,12 @@ public final class Transformation {
}
}
public Transformation(@Nullable final Vector3f e1, @Nullable final Quaternion c2, @Nullable final Vector3f e3, @Nullable final Quaternion c4) {
this.matrix = compose(e1, c2, e3, c4);
this.translation = ((e1 != null) ? e1 : new Vector3f());
this.leftRotation = ((c2 != null) ? c2 : Quaternion.ONE.copy());
this.scale = ((e3 != null) ? e3 : new Vector3f(1.0f, 1.0f, 1.0f));
this.rightRotation = ((c4 != null) ? c4 : Quaternion.ONE.copy());
public Transformation(@Nullable final Vector3f g1, @Nullable final Quaternion d2, @Nullable final Vector3f g3, @Nullable final Quaternion d4) {
this.matrix = compose(g1, d2, g3, d4);
this.translation = ((g1 != null) ? g1 : new Vector3f());
this.leftRotation = ((d2 != null) ? d2 : Quaternion.ONE.copy());
this.scale = ((g3 != null) ? g3 : new Vector3f(1.0f, 1.0f, 1.0f));
this.rightRotation = ((d4 != null) ? d4 : Quaternion.ONE.copy());
this.decomposed = true;
}
@ -41,9 +41,9 @@ public final class Transformation {
return Transformation.IDENTITY;
}
public Transformation compose(final Transformation d) {
public Transformation compose(final Transformation f) {
final Matrix4f b3 = this.getMatrix();
b3.multiply(d.getMatrix());
b3.multiply(f.getMatrix());
return new Transformation(b3);
}
@ -71,31 +71,31 @@ public final class Transformation {
}
}
private static Matrix4f compose(@Nullable final Vector3f e1, @Nullable final Quaternion c2, @Nullable final Vector3f e3, @Nullable final Quaternion c4) {
private static Matrix4f compose(@Nullable final Vector3f g1, @Nullable final Quaternion d2, @Nullable final Vector3f g3, @Nullable final Quaternion d4) {
final Matrix4f b5 = new Matrix4f();
b5.setIdentity();
if (c2 != null) {
b5.multiply(new Matrix4f(c2));
if (d2 != null) {
b5.multiply(new Matrix4f(d2));
}
if (e3 != null) {
b5.multiply(Matrix4f.createScaleMatrix(e3.x(), e3.y(), e3.z()));
if (g3 != null) {
b5.multiply(Matrix4f.createScaleMatrix(g3.x(), g3.y(), g3.z()));
}
if (c4 != null) {
b5.multiply(new Matrix4f(c4));
if (d4 != null) {
b5.multiply(new Matrix4f(d4));
}
if (e1 != null) {
b5.m03 = e1.x();
b5.m13 = e1.y();
b5.m23 = e1.z();
if (g1 != null) {
b5.m03 = g1.x();
b5.m13 = g1.y();
b5.m23 = g1.z();
}
return b5;
}
public static Pair<Matrix3f, Vector3f> toAffine(final Matrix4f b) {
b.multiply(1.0f / b.m33);
final Vector3f e2 = new Vector3f(b.m03, b.m13, b.m23);
final Vector3f g2 = new Vector3f(b.m03, b.m13, b.m23);
final Matrix3f a3 = new Matrix3f(b);
return (Pair<Matrix3f, Vector3f>)Pair.of(a3, e2);
return (Pair<Matrix3f, Vector3f>)Pair.of(a3, g2);
}
public Matrix4f getMatrix() {
@ -115,8 +115,8 @@ public final class Transformation {
if (object == null || this.getClass() != object.getClass()) {
return false;
}
final Transformation d3 = (Transformation)object;
return Objects.equals(this.matrix, d3.matrix);
final Transformation f3 = (Transformation)object;
return Objects.equals(this.matrix, f3.matrix);
}
@Override
@ -126,13 +126,13 @@ public final class Transformation {
static {
final Matrix4f b1;
final Transformation d2;
final Transformation f2;
IDENTITY = Util.<Transformation>make(() -> {
b1 = new Matrix4f();
b1.setIdentity();
d2 = new Transformation(b1);
d2.getLeftRotation();
return d2;
f2 = new Transformation(b1);
f2.getLeftRotation();
return f2;
});
}
}

View File

@ -24,8 +24,8 @@ public final class Vector3f {
this.z = float3;
}
public Vector3f(final Vec3 cvl) {
this((float)cvl.x, (float)cvl.y, (float)cvl.z);
public Vector3f(final Vec3 dem) {
this((float)dem.x, (float)dem.y, (float)dem.z);
}
@Override
@ -36,8 +36,8 @@ public final class Vector3f {
if (object == null || this.getClass() != object.getClass()) {
return false;
}
final Vector3f e3 = (Vector3f)object;
return Float.compare(e3.x, this.x) == 0 && Float.compare(e3.y, this.y) == 0 && Float.compare(e3.z, this.z) == 0;
final Vector3f g3 = (Vector3f)object;
return Float.compare(g3.x, this.x) == 0 && Float.compare(g3.y, this.y) == 0 && Float.compare(g3.z, this.z) == 0;
}
@Override
@ -90,20 +90,20 @@ public final class Vector3f {
this.z += float3;
}
public void add(final Vector3f e) {
this.x += e.x;
this.y += e.y;
this.z += e.z;
public void add(final Vector3f g) {
this.x += g.x;
this.y += g.y;
this.z += g.z;
}
public void sub(final Vector3f e) {
this.x -= e.x;
this.y -= e.y;
this.z -= e.z;
public void sub(final Vector3f g) {
this.x -= g.x;
this.y -= g.y;
this.z -= g.z;
}
public float dot(final Vector3f e) {
return this.x * e.x + this.y * e.y + this.z * e.z;
public float dot(final Vector3f g) {
return this.x * g.x + this.y * g.y + this.z * g.z;
}
public boolean normalize() {
@ -118,13 +118,13 @@ public final class Vector3f {
return true;
}
public void cross(final Vector3f e) {
public void cross(final Vector3f g) {
final float float3 = this.x;
final float float4 = this.y;
final float float5 = this.z;
final float float6 = e.x();
final float float7 = e.y();
final float float8 = e.z();
final float float6 = g.x();
final float float7 = g.y();
final float float8 = g.z();
this.x = float4 * float8 - float5 * float7;
this.y = float5 * float6 - float3 * float8;
this.z = float3 * float7 - float4 * float6;
@ -139,20 +139,20 @@ public final class Vector3f {
this.z = a.m20 * float3 + a.m21 * float4 + a.m22 * float5;
}
public void transform(final Quaternion c) {
final Quaternion c2 = new Quaternion(c);
c2.mul(new Quaternion(this.x(), this.y(), this.z(), 0.0f));
final Quaternion c3 = new Quaternion(c);
c3.conj();
c2.mul(c3);
this.set(c2.i(), c2.j(), c2.k());
public void transform(final Quaternion d) {
final Quaternion d2 = new Quaternion(d);
d2.mul(new Quaternion(this.x(), this.y(), this.z(), 0.0f));
final Quaternion d3 = new Quaternion(d);
d3.conj();
d2.mul(d3);
this.set(d2.i(), d2.j(), d2.k());
}
public void lerp(final Vector3f e, final float float2) {
public void lerp(final Vector3f g, final float float2) {
final float float3 = 1.0f - float2;
this.x = this.x * float3 + e.x * float2;
this.y = this.y * float3 + e.y * float2;
this.z = this.z * float3 + e.z * float2;
this.x = this.x * float3 + g.x * float2;
this.y = this.y * float3 + g.y * float2;
this.z = this.z * float3 + g.z * float2;
}
public Quaternion rotation(final float float1) {

View File

@ -18,8 +18,8 @@ public class Vector4f {
this.w = float4;
}
public Vector4f(final Vector3f e) {
this(e.x(), e.y(), e.z(), 1.0f);
public Vector4f(final Vector3f g) {
this(g.x(), g.y(), g.z(), 1.0f);
}
@Override
@ -30,8 +30,8 @@ public class Vector4f {
if (object == null || this.getClass() != object.getClass()) {
return false;
}
final Vector4f f3 = (Vector4f)object;
return Float.compare(f3.x, this.x) == 0 && Float.compare(f3.y, this.y) == 0 && Float.compare(f3.z, this.z) == 0 && Float.compare(f3.w, this.w) == 0;
final Vector4f h3 = (Vector4f)object;
return Float.compare(h3.x, this.x) == 0 && Float.compare(h3.y, this.y) == 0 && Float.compare(h3.z, this.z) == 0 && Float.compare(h3.w, this.w) == 0;
}
@Override
@ -59,10 +59,10 @@ public class Vector4f {
return this.w;
}
public void mul(final Vector3f e) {
this.x *= e.x();
this.y *= e.y();
this.z *= e.z();
public void mul(final Vector3f g) {
this.x *= g.x();
this.y *= g.y();
this.z *= g.z();
}
public void set(final float float1, final float float2, final float float3, final float float4) {
@ -72,8 +72,8 @@ public class Vector4f {
this.w = float4;
}
public float dot(final Vector4f f) {
return this.x * f.x + this.y * f.y + this.z * f.z + this.w * f.w;
public float dot(final Vector4f h) {
return this.x * h.x + this.y * h.y + this.z * h.z + this.w * h.w;
}
public boolean normalize() {
@ -100,13 +100,13 @@ public class Vector4f {
this.w = b.m30 * float3 + b.m31 * float4 + b.m32 * float5 + b.m33 * float6;
}
public void transform(final Quaternion c) {
final Quaternion c2 = new Quaternion(c);
c2.mul(new Quaternion(this.x(), this.y(), this.z(), 0.0f));
final Quaternion c3 = new Quaternion(c);
c3.conj();
c2.mul(c3);
this.set(c2.i(), c2.j(), c2.k(), this.w());
public void transform(final Quaternion d) {
final Quaternion d2 = new Quaternion(d);
d2.mul(new Quaternion(this.x(), this.y(), this.z(), 0.0f));
final Quaternion d3 = new Quaternion(d);
d3.conj();
d2.mul(d3);
this.set(d2.i(), d2.j(), d2.k(), this.w());
}
public void perspectiveDivide() {

View File

@ -13,19 +13,18 @@ public class KeyCombo {
throw new IllegalArgumentException("Must have at least one char");
}
this.chars = arr;
this.matchIndex = 0;
}
public boolean keyPressed(final char character) {
if (character != this.chars[this.matchIndex]) {
this.reset();
return false;
if (character == this.chars[this.matchIndex++]) {
if (this.matchIndex == this.chars.length) {
this.reset();
this.onCompletion.run();
return true;
}
}
++this.matchIndex;
if (this.matchIndex == this.chars.length) {
else {
this.reset();
this.onCompletion.run();
return true;
}
return false;
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,45 @@
package com.mojang.realmsclient;
import java.util.Locale;
public enum Unit {
B,
KB,
MB,
GB;
public static Unit getLargest(final long long1) {
if (long1 < 1024L) {
return Unit.B;
}
try {
final int integer3 = (int)(Math.log((double)long1) / Math.log(1024.0));
final String string4 = String.valueOf("KMGTPE".charAt(integer3 - 1));
return valueOf(string4 + "B");
}
catch (Exception exception3) {
return Unit.GB;
}
}
public static double convertTo(final long long1, final Unit dhw) {
if (dhw == Unit.B) {
return (double)long1;
}
return long1 / Math.pow(1024.0, dhw.ordinal());
}
public static String humanReadable(final long long1) {
final int integer3 = 1024;
if (long1 < 1024L) {
return long1 + " B";
}
final int integer4 = (int)(Math.log((double)long1) / Math.log(1024.0));
final String string5 = "KMGTPE".charAt(integer4 - 1) + "";
return String.format(Locale.ROOT, "%.1f %sB", long1 / Math.pow(1024.0, integer4), string5);
}
public static String humanReadable(final long long1, final Unit dhw) {
return String.format("%." + ((dhw == Unit.GB) ? "1" : "0") + "f %s", convertTo(long1, dhw), dhw.name());
}
}

View File

@ -6,20 +6,23 @@ import com.google.common.io.Files;
import com.google.common.hash.Hashing;
import java.awt.event.ActionEvent;
import org.apache.logging.log4j.LogManager;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.nbt.NbtIo;
import java.nio.file.Path;
import org.apache.commons.compress.archivers.tar.TarArchiveEntry;
import java.util.regex.Matcher;
import java.util.Iterator;
import java.io.BufferedOutputStream;
import net.minecraft.world.level.storage.LevelResource;
import org.apache.commons.compress.archivers.tar.TarArchiveInputStream;
import org.apache.commons.compress.compressors.gzip.GzipCompressorInputStream;
import java.io.InputStream;
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import net.minecraft.realms.Realms;
import net.minecraft.client.Minecraft;
import java.util.Locale;
import net.minecraft.realms.RealmsLevelSummary;
import net.minecraft.world.level.storage.LevelSummary;
import org.apache.commons.lang3.StringUtils;
import net.minecraft.realms.RealmsSharedConstants;
import net.minecraft.SharedConstants;
import java.util.regex.Pattern;
import org.apache.http.HttpResponse;
import com.mojang.realmsclient.exception.RealmsDefaultUncaughtExceptionHandler;
@ -27,7 +30,7 @@ import java.io.OutputStream;
import org.apache.commons.io.IOUtils;
import java.awt.event.ActionListener;
import java.io.FileOutputStream;
import net.minecraft.realms.RealmsAnvilLevelStorageSource;
import net.minecraft.world.level.storage.LevelStorageSource;
import com.mojang.realmsclient.gui.screens.RealmsDownloadLatestWorldScreen;
import com.mojang.realmsclient.dto.WorldDownload;
import org.apache.http.client.methods.CloseableHttpResponse;
@ -85,7 +88,7 @@ public class FileDownload {
}
}
public void download(final WorldDownload worldDownload, final String string, final RealmsDownloadLatestWorldScreen.DownloadStatus a, final RealmsAnvilLevelStorageSource realmsAnvilLevelStorageSource) {
public void download(final WorldDownload djc, final String string, final RealmsDownloadLatestWorldScreen.DownloadStatus a, final LevelStorageSource dae) {
if (this.currentThread != null) {
return;
}
@ -106,7 +109,7 @@ public class FileDownload {
closeableHttpClient6 = null;
try {
this.tempFile = File.createTempFile("backup", ".tar.gz");
this.request = new HttpGet(worldDownload.downloadLink);
this.request = new HttpGet(djc.downloadLink);
closeableHttpClient6 = HttpClientBuilder.create().setDefaultRequestConfig(this.requestConfig).build();
httpResponse7 = (HttpResponse)closeableHttpClient6.execute((HttpUriRequest)this.request);
a.totalBytes = Long.parseLong(httpResponse7.getFirstHeader("Content-Length").getValue());
@ -116,7 +119,7 @@ public class FileDownload {
}
else {
outputStream8 = new FileOutputStream(this.tempFile);
b9 = new ProgressListener(string.trim(), this.tempFile, realmsAnvilLevelStorageSource, a, worldDownload);
b9 = new ProgressListener(string.trim(), this.tempFile, dae, a);
a2 = new DownloadCountingOutputStream(outputStream8);
a2.setListener(b9);
IOUtils.copy(httpResponse7.getEntity().getContent(), (OutputStream)a2);
@ -130,10 +133,10 @@ public class FileDownload {
this.tempFile.delete();
}
if (!this.error) {
if (!worldDownload.resourcePackUrl.isEmpty() && !worldDownload.resourcePackHash.isEmpty()) {
if (!djc.resourcePackUrl.isEmpty() && !djc.resourcePackHash.isEmpty()) {
try {
this.tempFile = File.createTempFile("resources", ".tar.gz");
this.request = new HttpGet(worldDownload.resourcePackUrl);
this.request = new HttpGet(djc.resourcePackUrl);
httpResponse8 = (HttpResponse)closeableHttpClient6.execute((HttpUriRequest)this.request);
a.totalBytes = Long.parseLong(httpResponse8.getFirstHeader("Content-Length").getValue());
if (httpResponse8.getStatusLine().getStatusCode() != 200) {
@ -143,7 +146,7 @@ public class FileDownload {
}
else {
outputStream9 = new FileOutputStream(this.tempFile);
c9 = new ResourcePackProgressListener(this.tempFile, a, worldDownload);
c9 = new ResourcePackProgressListener(this.tempFile, a, djc);
a3 = new DownloadCountingOutputStream(outputStream9);
a3.setListener(c9);
IOUtils.copy(httpResponse8.getEntity().getContent(), (OutputStream)a3);
@ -179,10 +182,10 @@ public class FileDownload {
this.tempFile.delete();
}
if (!this.error) {
if (!worldDownload.resourcePackUrl.isEmpty() && !worldDownload.resourcePackHash.isEmpty()) {
if (!djc.resourcePackUrl.isEmpty() && !djc.resourcePackHash.isEmpty()) {
try {
this.tempFile = File.createTempFile("resources", ".tar.gz");
this.request = new HttpGet(worldDownload.resourcePackUrl);
this.request = new HttpGet(djc.resourcePackUrl);
httpResponse9 = (HttpResponse)closeableHttpClient6.execute((HttpUriRequest)this.request);
a.totalBytes = Long.parseLong(httpResponse9.getFirstHeader("Content-Length").getValue());
if (httpResponse9.getStatusLine().getStatusCode() != 200) {
@ -192,7 +195,7 @@ public class FileDownload {
}
else {
outputStream10 = new FileOutputStream(this.tempFile);
c10 = new ResourcePackProgressListener(this.tempFile, a, worldDownload);
c10 = new ResourcePackProgressListener(this.tempFile, a, djc);
a4 = new DownloadCountingOutputStream(outputStream10);
a4.setListener(c10);
IOUtils.copy(httpResponse9.getEntity().getContent(), (OutputStream)a4);
@ -263,10 +266,10 @@ public class FileDownload {
return string;
}
private void untarGzipArchive(String string, final File file, final RealmsAnvilLevelStorageSource realmsAnvilLevelStorageSource) throws IOException {
private void untarGzipArchive(String string, final File file, final LevelStorageSource dae) throws IOException {
final Pattern pattern5 = Pattern.compile(".*-([0-9]+)$");
int integer7 = 1;
for (final char character11 : RealmsSharedConstants.ILLEGAL_FILE_CHARACTERS) {
for (final char character11 : SharedConstants.ILLEGAL_FILE_CHARACTERS) {
string = string.replace(character11, '_');
}
if (StringUtils.isEmpty((CharSequence)string)) {
@ -274,9 +277,9 @@ public class FileDownload {
}
string = findAvailableFolderName(string);
try {
for (final RealmsLevelSummary realmsLevelSummary9 : realmsAnvilLevelStorageSource.getLevelList()) {
if (realmsLevelSummary9.getLevelId().toLowerCase(Locale.ROOT).startsWith(string.toLowerCase(Locale.ROOT))) {
final Matcher matcher10 = pattern5.matcher(realmsLevelSummary9.getLevelId());
for (final LevelSummary daf9 : dae.getLevelList()) {
if (daf9.getLevelId().toLowerCase(Locale.ROOT).startsWith(string.toLowerCase(Locale.ROOT))) {
final Matcher matcher10 = pattern5.matcher(daf9.getLevelId());
if (matcher10.matches()) {
if (Integer.valueOf(matcher10.group(1)) <= integer7) {
continue;
@ -295,13 +298,13 @@ public class FileDownload {
return;
}
String string2;
if (!realmsAnvilLevelStorageSource.isNewLevelIdAcceptable(string) || integer7 > 1) {
if (!dae.isNewLevelIdAcceptable(string) || integer7 > 1) {
string2 = string + ((integer7 == 1) ? "" : ("-" + integer7));
if (!realmsAnvilLevelStorageSource.isNewLevelIdAcceptable(string2)) {
if (!dae.isNewLevelIdAcceptable(string2)) {
for (boolean boolean8 = false; !boolean8; boolean8 = true) {
++integer7;
string2 = string + ((integer7 == 1) ? "" : ("-" + integer7));
if (realmsAnvilLevelStorageSource.isNewLevelIdAcceptable(string2)) {}
if (dae.isNewLevelIdAcceptable(string2)) {}
}
}
}
@ -309,7 +312,7 @@ public class FileDownload {
string2 = string;
}
TarArchiveInputStream tarArchiveInputStream8 = null;
final File file2 = new File(Realms.getGameDirectoryPath(), "saves");
final File file2 = new File(Minecraft.getInstance().gameDirectory.getAbsolutePath(), "saves");
try {
file2.mkdir();
tarArchiveInputStream8 = new TarArchiveInputStream((InputStream)new GzipCompressorInputStream((InputStream)new BufferedInputStream(new FileInputStream(file))));
@ -320,14 +323,9 @@ public class FileDownload {
}
else {
file3.createNewFile();
byte[] arr12 = new byte[1024];
final BufferedOutputStream bufferedOutputStream13 = new BufferedOutputStream(new FileOutputStream(file3));
int integer8 = 0;
while ((integer8 = tarArchiveInputStream8.read(arr12)) != -1) {
bufferedOutputStream13.write(arr12, 0, integer8);
try (final FileOutputStream fileOutputStream12 = new FileOutputStream(file3)) {
IOUtils.copy((InputStream)tarArchiveInputStream8, (OutputStream)fileOutputStream12);
}
bufferedOutputStream13.close();
arr12 = null;
}
}
}
@ -342,14 +340,32 @@ public class FileDownload {
if (file != null) {
file.delete();
}
final RealmsAnvilLevelStorageSource realmsAnvilLevelStorageSource2 = realmsAnvilLevelStorageSource;
realmsAnvilLevelStorageSource2.renameLevel(string2, string2.trim());
final File file4 = new File(file2, string2 + File.separator + "level.dat");
Realms.deletePlayerTag(file4);
try (final LevelStorageSource.LevelStorageAccess a22 = dae.createAccess(string2)) {
a22.renameLevel(string2.trim());
final Path path24 = a22.getLevelPath(LevelResource.LEVEL_DATA_FILE);
deletePlayerTag(path24.toFile());
}
catch (IOException iOException22) {
FileDownload.LOGGER.error("Failed to rename unpacked realms level {}", string2, iOException22);
}
this.resourcePackPath = new File(file2, string2 + File.separator + "resources.zip");
}
}
private static void deletePlayerTag(final File file) {
if (file.exists()) {
try {
final CompoundTag le2 = NbtIo.readCompressed(new FileInputStream(file));
final CompoundTag le3 = le2.getCompound("Data");
le3.remove("Player");
NbtIo.writeCompressed(le2, new FileOutputStream(file));
}
catch (Exception exception2) {
exception2.printStackTrace();
}
}
}
static {
LOGGER = LogManager.getLogger();
INVALID_FILE_NAMES = new String[] { "CON", "COM", "PRN", "AUX", "CLOCK$", "NUL", "COM1", "COM2", "COM3", "COM4", "COM5", "COM6", "COM7", "COM8", "COM9", "LPT1", "LPT2", "LPT3", "LPT4", "LPT5", "LPT6", "LPT7", "LPT8", "LPT9" };
@ -358,16 +374,14 @@ public class FileDownload {
class ProgressListener implements ActionListener {
private final String worldName;
private final File tempFile;
private final RealmsAnvilLevelStorageSource levelStorageSource;
private final LevelStorageSource levelStorageSource;
private final RealmsDownloadLatestWorldScreen.DownloadStatus downloadStatus;
private final WorldDownload worldDownload;
private ProgressListener(final String string, final File file, final RealmsAnvilLevelStorageSource realmsAnvilLevelStorageSource, final RealmsDownloadLatestWorldScreen.DownloadStatus a, final WorldDownload worldDownload) {
private ProgressListener(final String string, final File file, final LevelStorageSource dae, final RealmsDownloadLatestWorldScreen.DownloadStatus a) {
this.worldName = string;
this.tempFile = file;
this.levelStorageSource = realmsAnvilLevelStorageSource;
this.levelStorageSource = dae;
this.downloadStatus = a;
this.worldDownload = worldDownload;
}
@Override
@ -391,10 +405,10 @@ public class FileDownload {
private final RealmsDownloadLatestWorldScreen.DownloadStatus downloadStatus;
private final WorldDownload worldDownload;
private ResourcePackProgressListener(final File file, final RealmsDownloadLatestWorldScreen.DownloadStatus a, final WorldDownload worldDownload) {
private ResourcePackProgressListener(final File file, final RealmsDownloadLatestWorldScreen.DownloadStatus a, final WorldDownload djc) {
this.tempFile = file;
this.downloadStatus = a;
this.worldDownload = worldDownload;
this.worldDownload = djc;
}
@Override

View File

@ -23,6 +23,7 @@ import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.client.methods.HttpPost;
import java.util.function.Consumer;
import java.util.concurrent.TimeUnit;
import net.minecraft.client.User;
import org.apache.http.client.config.RequestConfig;
import com.mojang.realmsclient.gui.screens.UploadResult;
import java.util.concurrent.CompletableFuture;
@ -45,17 +46,17 @@ public class FileUpload {
private CompletableFuture<UploadResult> uploadTask;
private final RequestConfig requestConfig;
public FileUpload(final File file, final long long2, final int integer, final UploadInfo uploadInfo, final String string5, final String string6, final String string7, final UploadStatus czc) {
public FileUpload(final File file, final long long2, final int integer, final UploadInfo dja, final User dml, final String string, final UploadStatus die) {
this.cancelled = new AtomicBoolean(false);
this.requestConfig = RequestConfig.custom().setSocketTimeout((int)TimeUnit.MINUTES.toMillis(10L)).setConnectTimeout((int)TimeUnit.SECONDS.toMillis(15L)).build();
this.file = file;
this.worldId = long2;
this.slotId = integer;
this.uploadInfo = uploadInfo;
this.sessionId = string5;
this.username = string6;
this.clientVersion = string7;
this.uploadStatus = czc;
this.uploadInfo = dja;
this.sessionId = dml.getSessionId();
this.username = dml.getName();
this.clientVersion = string;
this.uploadStatus = die;
}
public void upload(final Consumer<UploadResult> consumer) {
@ -166,11 +167,11 @@ public class FileUpload {
private final InputStream content;
private final UploadStatus uploadStatus;
public CustomInputStreamEntity(final InputStream inputStream, final long long2, final UploadStatus czc) {
public CustomInputStreamEntity(final InputStream inputStream, final long long2, final UploadStatus die) {
super(inputStream);
this.content = inputStream;
this.length = long2;
this.uploadStatus = czc;
this.uploadStatus = die;
}
public void writeTo(final OutputStream outputStream) throws IOException {

View File

@ -1,5 +1,6 @@
package com.mojang.realmsclient.client;
import net.minecraft.Util;
import java.net.SocketAddress;
import java.net.Socket;
import java.net.InetSocketAddress;
@ -53,7 +54,7 @@ public class Ping {
}
private static long now() {
return System.currentTimeMillis();
return Util.getMillis();
}
public static List<RegionPingResult> pingAllRegions() {

View File

@ -3,10 +3,13 @@ package com.mojang.realmsclient.client;
import org.apache.logging.log4j.LogManager;
import com.mojang.realmsclient.exception.RealmsHttpException;
import com.mojang.realmsclient.exception.RetryCallException;
import net.minecraft.SharedConstants;
import java.net.URISyntaxException;
import java.net.URI;
import javax.annotation.Nullable;
import com.mojang.realmsclient.dto.PingResult;
import com.mojang.realmsclient.dto.RealmsNews;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.mojang.realmsclient.dto.UploadInfo;
import com.mojang.realmsclient.dto.WorldDownload;
@ -16,19 +19,18 @@ import com.mojang.realmsclient.dto.RealmsWorldResetDto;
import com.mojang.realmsclient.dto.Ops;
import com.mojang.realmsclient.dto.WorldTemplatePaginatedList;
import com.mojang.realmsclient.dto.RealmsWorldOptions;
import java.io.UnsupportedEncodingException;
import com.mojang.realmsclient.dto.BackupList;
import com.mojang.realmsclient.dto.PlayerInfo;
import com.mojang.realmsclient.dto.ReflectionBasedSerialization;
import com.mojang.realmsclient.dto.RealmsDescriptionDto;
import com.mojang.realmsclient.dto.RealmsServerAddress;
import com.mojang.realmsclient.dto.RealmsServerPlayerLists;
import com.mojang.realmsclient.dto.RealmsServer;
import java.io.IOException;
import com.mojang.realmsclient.exception.RealmsServiceException;
import com.mojang.realmsclient.dto.RealmsServerList;
import java.net.Proxy;
import net.minecraft.realms.Realms;
import com.google.gson.Gson;
import net.minecraft.client.Minecraft;
import com.mojang.realmsclient.dto.GuardedSerializer;
import org.apache.logging.log4j.Logger;
public class RealmsClient {
@ -37,30 +39,28 @@ public class RealmsClient {
private static final Logger LOGGER;
private final String sessionId;
private final String username;
private static final Gson gson;
private static final GuardedSerializer GSON;
public static RealmsClient createRealmsClient() {
final String string1 = Realms.userName();
final String string2 = Realms.sessionId();
if (string1 == null || string2 == null) {
return null;
}
public static RealmsClient create() {
final Minecraft dlx1 = Minecraft.getInstance();
final String string2 = dlx1.getUser().getName();
final String string3 = dlx1.getUser().getSessionId();
if (!RealmsClient.initialized) {
RealmsClient.initialized = true;
String string3 = System.getenv("realms.environment");
if (string3 == null) {
string3 = System.getProperty("realms.environment");
String string4 = System.getenv("realms.environment");
if (string4 == null) {
string4 = System.getProperty("realms.environment");
}
if (string3 != null) {
if ("LOCAL".equals(string3)) {
if (string4 != null) {
if ("LOCAL".equals(string4)) {
switchToLocal();
}
else if ("STAGE".equals(string3)) {
else if ("STAGE".equals(string4)) {
switchToStage();
}
}
}
return new RealmsClient(string2, string1, Realms.getProxy());
return new RealmsClient(string3, string2, dlx1.getProxy());
}
public static void switchToStage() {
@ -81,13 +81,13 @@ public class RealmsClient {
RealmsClientConfig.setProxy(proxy);
}
public RealmsServerList listWorlds() throws RealmsServiceException, IOException {
public RealmsServerList listWorlds() throws RealmsServiceException {
final String string2 = this.url("worlds");
final String string3 = this.execute(Request.get(string2));
return RealmsServerList.parse(string3);
}
public RealmsServer getOwnWorld(final long long1) throws RealmsServiceException, IOException {
public RealmsServer getOwnWorld(final long long1) throws RealmsServiceException {
final String string4 = this.url("worlds" + "/$ID".replace("$ID", String.valueOf(long1)));
final String string5 = this.execute(Request.get(string4));
return RealmsServer.parse(string5);
@ -99,32 +99,32 @@ public class RealmsClient {
return RealmsServerPlayerLists.parse(string3);
}
public RealmsServerAddress join(final long long1) throws RealmsServiceException, IOException {
public RealmsServerAddress join(final long long1) throws RealmsServiceException {
final String string4 = this.url("worlds" + "/v1/$ID/join/pc".replace("$ID", "" + long1));
final String string5 = this.execute(Request.get(string4, 5000, 30000));
return RealmsServerAddress.parse(string5);
}
public void initializeWorld(final long long1, final String string2, final String string3) throws RealmsServiceException, IOException {
final RealmsDescriptionDto realmsDescriptionDto6 = new RealmsDescriptionDto(string2, string3);
public void initializeWorld(final long long1, final String string2, final String string3) throws RealmsServiceException {
final RealmsDescriptionDto din6 = new RealmsDescriptionDto(string2, string3);
final String string4 = this.url("worlds" + "/$WORLD_ID/initialize".replace("$WORLD_ID", String.valueOf(long1)));
final String string5 = RealmsClient.gson.toJson(realmsDescriptionDto6);
final String string5 = RealmsClient.GSON.toJson(din6);
this.execute(Request.post(string4, string5, 5000, 10000));
}
public Boolean mcoEnabled() throws RealmsServiceException, IOException {
public Boolean mcoEnabled() throws RealmsServiceException {
final String string2 = this.url("mco/available");
final String string3 = this.execute(Request.get(string2));
return Boolean.valueOf(string3);
}
public Boolean stageAvailable() throws RealmsServiceException, IOException {
public Boolean stageAvailable() throws RealmsServiceException {
final String string2 = this.url("mco/stageAvailable");
final String string3 = this.execute(Request.get(string2));
return Boolean.valueOf(string3);
}
public CompatibleVersionResponse clientCompatible() throws RealmsServiceException, IOException {
public CompatibleVersionResponse clientCompatible() throws RealmsServiceException {
final String string2 = this.url("mco/client/compatible");
final String string3 = this.execute(Request.get(string2));
CompatibleVersionResponse a4;
@ -147,11 +147,11 @@ public class RealmsClient {
this.execute(Request.delete(string4));
}
public RealmsServer invite(final long long1, final String string) throws RealmsServiceException, IOException {
final PlayerInfo playerInfo5 = new PlayerInfo();
playerInfo5.setName(string);
public RealmsServer invite(final long long1, final String string) throws RealmsServiceException {
final PlayerInfo dim5 = new PlayerInfo();
dim5.setName(string);
final String string2 = this.url("invites" + "/$WORLD_ID".replace("$WORLD_ID", String.valueOf(long1)));
final String string3 = this.execute(Request.post(string2, RealmsClient.gson.toJson(playerInfo5)));
final String string3 = this.execute(Request.post(string2, RealmsClient.GSON.toJson(dim5)));
return RealmsServer.parse(string3);
}
@ -161,15 +161,15 @@ public class RealmsClient {
return BackupList.parse(string5);
}
public void update(final long long1, final String string2, final String string3) throws RealmsServiceException, UnsupportedEncodingException {
final RealmsDescriptionDto realmsDescriptionDto6 = new RealmsDescriptionDto(string2, string3);
public void update(final long long1, final String string2, final String string3) throws RealmsServiceException {
final RealmsDescriptionDto din6 = new RealmsDescriptionDto(string2, string3);
final String string4 = this.url("worlds" + "/$WORLD_ID".replace("$WORLD_ID", String.valueOf(long1)));
this.execute(Request.post(string4, RealmsClient.gson.toJson(realmsDescriptionDto6)));
this.execute(Request.post(string4, RealmsClient.GSON.toJson(din6)));
}
public void updateSlot(final long long1, final int integer, final RealmsWorldOptions realmsWorldOptions) throws RealmsServiceException, UnsupportedEncodingException {
public void updateSlot(final long long1, final int integer, final RealmsWorldOptions div) throws RealmsServiceException {
final String string6 = this.url("worlds" + "/$WORLD_ID/slot/$SLOT_ID".replace("$WORLD_ID", String.valueOf(long1)).replace("$SLOT_ID", String.valueOf(integer)));
final String string7 = realmsWorldOptions.toJson();
final String string7 = div.toJson();
this.execute(Request.post(string6, string7));
}
@ -208,33 +208,33 @@ public class RealmsClient {
return Ops.parse(this.execute(Request.delete(string3)));
}
public Boolean open(final long long1) throws RealmsServiceException, IOException {
public Boolean open(final long long1) throws RealmsServiceException {
final String string4 = this.url("worlds" + "/$WORLD_ID/open".replace("$WORLD_ID", String.valueOf(long1)));
final String string5 = this.execute(Request.put(string4, ""));
return Boolean.valueOf(string5);
}
public Boolean close(final long long1) throws RealmsServiceException, IOException {
public Boolean close(final long long1) throws RealmsServiceException {
final String string4 = this.url("worlds" + "/$WORLD_ID/close".replace("$WORLD_ID", String.valueOf(long1)));
final String string5 = this.execute(Request.put(string4, ""));
return Boolean.valueOf(string5);
}
public Boolean resetWorldWithSeed(final long long1, final String string, final Integer integer, final boolean boolean4) throws RealmsServiceException, IOException {
final RealmsWorldResetDto realmsWorldResetDto7 = new RealmsWorldResetDto(string, -1L, integer, boolean4);
public Boolean resetWorldWithSeed(final long long1, final String string, final Integer integer, final boolean boolean4) throws RealmsServiceException {
final RealmsWorldResetDto diw7 = new RealmsWorldResetDto(string, -1L, integer, boolean4);
final String string2 = this.url("worlds" + "/$WORLD_ID/reset".replace("$WORLD_ID", String.valueOf(long1)));
final String string3 = this.execute(Request.post(string2, RealmsClient.gson.toJson(realmsWorldResetDto7), 30000, 80000));
final String string3 = this.execute(Request.post(string2, RealmsClient.GSON.toJson(diw7), 30000, 80000));
return Boolean.valueOf(string3);
}
public Boolean resetWorldWithTemplate(final long long1, final String string) throws RealmsServiceException, IOException {
final RealmsWorldResetDto realmsWorldResetDto5 = new RealmsWorldResetDto(null, Long.valueOf(string), -1, false);
public Boolean resetWorldWithTemplate(final long long1, final String string) throws RealmsServiceException {
final RealmsWorldResetDto diw5 = new RealmsWorldResetDto(null, Long.valueOf(string), -1, false);
final String string2 = this.url("worlds" + "/$WORLD_ID/reset".replace("$WORLD_ID", String.valueOf(long1)));
final String string3 = this.execute(Request.post(string2, RealmsClient.gson.toJson(realmsWorldResetDto5), 30000, 80000));
final String string3 = this.execute(Request.post(string2, RealmsClient.GSON.toJson(diw5), 30000, 80000));
return Boolean.valueOf(string3);
}
public Subscription subscriptionFor(final long long1) throws RealmsServiceException, IOException {
public Subscription subscriptionFor(final long long1) throws RealmsServiceException {
final String string4 = this.url("subscriptions" + "/$WORLD_ID".replace("$WORLD_ID", String.valueOf(long1)));
final String string5 = this.execute(Request.get(string4));
return Subscription.parse(string5);
@ -265,14 +265,14 @@ public class RealmsClient {
public UploadInfo upload(final long long1, final String string) throws RealmsServiceException {
final String string2 = this.url("worlds" + "/$WORLD_ID/backups/upload".replace("$WORLD_ID", String.valueOf(long1)));
final UploadInfo uploadInfo6 = new UploadInfo();
final UploadInfo dja6 = new UploadInfo();
if (string != null) {
uploadInfo6.setToken(string);
dja6.setToken(string);
}
final GsonBuilder gsonBuilder7 = new GsonBuilder();
gsonBuilder7.excludeFieldsWithoutExposeAnnotation();
final Gson gson8 = gsonBuilder7.create();
final String string3 = gson8.toJson(uploadInfo6);
final String string3 = gson8.toJson(dja6);
return UploadInfo.parse(this.execute(Request.put(string2, string3)));
}
@ -286,36 +286,37 @@ public class RealmsClient {
this.execute(Request.post(string2, ""));
}
public RealmsNews getNews() throws RealmsServiceException, IOException {
public RealmsNews getNews() throws RealmsServiceException {
final String string2 = this.url("mco/v1/news");
final String string3 = this.execute(Request.get(string2, 5000, 10000));
return RealmsNews.parse(string3);
}
public void sendPingResults(final PingResult pingResult) throws RealmsServiceException {
public void sendPingResults(final PingResult dil) throws RealmsServiceException {
final String string3 = this.url("regions/ping/stat");
this.execute(Request.post(string3, RealmsClient.gson.toJson(pingResult)));
this.execute(Request.post(string3, RealmsClient.GSON.toJson(dil)));
}
public Boolean trialAvailable() throws RealmsServiceException, IOException {
public Boolean trialAvailable() throws RealmsServiceException {
final String string2 = this.url("trial");
final String string3 = this.execute(Request.get(string2));
return Boolean.valueOf(string3);
}
public void deleteWorld(final long long1) throws RealmsServiceException, IOException {
public void deleteWorld(final long long1) throws RealmsServiceException {
final String string4 = this.url("worlds" + "/$WORLD_ID".replace("$WORLD_ID", String.valueOf(long1)));
this.execute(Request.delete(string4));
}
@Nullable
private String url(final String string) {
return this.url(string, null);
}
private String url(final String string1, final String string2) {
@Nullable
private String url(final String string1, @Nullable final String string2) {
try {
final URI uRI4 = new URI(RealmsClient.currentEnvironment.protocol, RealmsClient.currentEnvironment.baseUrl, "/" + string1, string2, null);
return uRI4.toASCIIString();
return new URI(RealmsClient.currentEnvironment.protocol, RealmsClient.currentEnvironment.baseUrl, "/" + string1, string2, null).toASCIIString();
}
catch (URISyntaxException uRISyntaxException4) {
uRISyntaxException4.printStackTrace();
@ -323,22 +324,22 @@ public class RealmsClient {
}
}
private String execute(final Request<?> czb) throws RealmsServiceException {
czb.cookie("sid", this.sessionId);
czb.cookie("user", this.username);
czb.cookie("version", Realms.getMinecraftVersionString());
private String execute(final Request<?> did) throws RealmsServiceException {
did.cookie("sid", this.sessionId);
did.cookie("user", this.username);
did.cookie("version", SharedConstants.getCurrentVersion().getName());
try {
final int integer3 = czb.responseCode();
final int integer3 = did.responseCode();
if (integer3 == 503) {
final int integer4 = czb.getRetryAfterHeader();
final int integer4 = did.getRetryAfterHeader();
throw new RetryCallException(integer4);
}
final String string4 = czb.text();
final String string4 = did.text();
if (integer3 >= 200 && integer3 < 300) {
return string4;
}
if (integer3 == 401) {
final String string5 = czb.getHeader("WWW-Authenticate");
final String string5 = did.getHeader("WWW-Authenticate");
RealmsClient.LOGGER.info("Could not authorize you against Realms server: " + string5);
throw new RealmsServiceException(integer3, string5, -1, string5);
}
@ -346,19 +347,19 @@ public class RealmsClient {
RealmsClient.LOGGER.error("Realms error code: " + integer3 + " message: " + string4);
throw new RealmsServiceException(integer3, string4, integer3, "");
}
final RealmsError cza5 = new RealmsError(string4);
RealmsClient.LOGGER.error("Realms http code: " + integer3 + " - error code: " + cza5.getErrorCode() + " - message: " + cza5.getErrorMessage() + " - raw body: " + string4);
throw new RealmsServiceException(integer3, string4, cza5);
final RealmsError dic5 = RealmsError.create(string4);
RealmsClient.LOGGER.error("Realms http code: " + integer3 + " - error code: " + dic5.getErrorCode() + " - message: " + dic5.getErrorMessage() + " - raw body: " + string4);
throw new RealmsServiceException(integer3, string4, dic5);
}
catch (RealmsHttpException czf3) {
throw new RealmsServiceException(500, "Could not connect to Realms: " + czf3.getMessage(), -1, "");
catch (RealmsHttpException djg3) {
throw new RealmsServiceException(500, "Could not connect to Realms: " + djg3.getMessage(), -1, "");
}
}
static {
RealmsClient.currentEnvironment = Environment.PRODUCTION;
LOGGER = LogManager.getLogger();
gson = new Gson();
GSON = new GuardedSerializer();
}
public enum Environment {

View File

@ -8,19 +8,26 @@ import org.apache.logging.log4j.Logger;
public class RealmsError {
private static final Logger LOGGER;
private String errorMessage;
private int errorCode;
private final String errorMessage;
private final int errorCode;
public RealmsError(final String string) {
private RealmsError(final String string, final int integer) {
this.errorMessage = string;
this.errorCode = integer;
}
public static RealmsError create(final String string) {
try {
final JsonParser jsonParser3 = new JsonParser();
final JsonObject jsonObject4 = jsonParser3.parse(string).getAsJsonObject();
this.errorMessage = JsonUtils.getStringOr("errorMsg", jsonObject4, "");
this.errorCode = JsonUtils.getIntOr("errorCode", jsonObject4, -1);
final JsonParser jsonParser2 = new JsonParser();
final JsonObject jsonObject3 = jsonParser2.parse(string).getAsJsonObject();
final String string2 = JsonUtils.getStringOr("errorMsg", jsonObject3, "");
final int integer5 = JsonUtils.getIntOr("errorCode", jsonObject3, -1);
return new RealmsError(string2, integer5);
}
catch (Exception exception3) {
RealmsError.LOGGER.error("Could not parse RealmsError: " + exception3.getMessage());
catch (Exception exception2) {
RealmsError.LOGGER.error("Could not parse RealmsError: " + exception2.getMessage());
RealmsError.LOGGER.error("The error was: " + string);
return new RealmsError("Failed to parse response from server", -1);
}
}

View File

@ -108,19 +108,17 @@ public abstract class Request<T extends Request<T>> {
private void dispose() {
final byte[] arr2 = new byte[1024];
try {
int integer3 = 0;
final InputStream inputStream4 = this.connection.getInputStream();
while ((integer3 = inputStream4.read(arr2)) > 0) {}
inputStream4.close();
final InputStream inputStream3 = this.connection.getInputStream();
while (inputStream3.read(arr2) > 0) {}
inputStream3.close();
}
catch (Exception exception3) {
try {
final InputStream inputStream4 = this.connection.getErrorStream();
int integer4 = 0;
if (inputStream4 == null) {
return;
}
while ((integer4 = inputStream4.read(arr2)) > 0) {}
while (inputStream4.read(arr2) > 0) {}
inputStream4.close();
}
catch (IOException ex) {}
@ -136,9 +134,9 @@ public abstract class Request<T extends Request<T>> {
if (this.connected) {
return (T)this;
}
final T czb2 = this.doConnect();
final T did2 = this.doConnect();
this.connected = true;
return czb2;
return did2;
}
protected abstract T doConnect();

View File

@ -27,17 +27,17 @@ public class Backup extends ValueObject {
public static Backup parse(final JsonElement jsonElement) {
final JsonObject jsonObject2 = jsonElement.getAsJsonObject();
final Backup backup3 = new Backup();
final Backup dif3 = new Backup();
try {
backup3.backupId = JsonUtils.getStringOr("backupId", jsonObject2, "");
backup3.lastModifiedDate = JsonUtils.getDateOr("lastModifiedDate", jsonObject2);
backup3.size = JsonUtils.getLongOr("size", jsonObject2, 0L);
dif3.backupId = JsonUtils.getStringOr("backupId", jsonObject2, "");
dif3.lastModifiedDate = JsonUtils.getDateOr("lastModifiedDate", jsonObject2);
dif3.size = JsonUtils.getLongOr("size", jsonObject2, 0L);
if (jsonObject2.has("metadata")) {
final JsonObject jsonObject3 = jsonObject2.getAsJsonObject("metadata");
final Set<Map.Entry<String, JsonElement>> set5 = jsonObject3.entrySet();
for (final Map.Entry<String, JsonElement> entry7 : set5) {
if (!entry7.getValue().isJsonNull()) {
backup3.metadata.put(format(entry7.getKey()), entry7.getValue().getAsString());
dif3.metadata.put(format(entry7.getKey()), entry7.getValue().getAsString());
}
}
}
@ -45,7 +45,7 @@ public class Backup extends ValueObject {
catch (Exception exception4) {
Backup.LOGGER.error("Could not parse Backup: " + exception4.getMessage());
}
return backup3;
return dif3;
}
private static String format(final String string) {
@ -58,7 +58,7 @@ public class Backup extends ValueObject {
}
else {
final char character8 = Character.toUpperCase(string2.charAt(0));
stringBuilder3.append(character8).append(string2.substring(1, string2.length())).append(" ");
stringBuilder3.append(character8).append(string2.substring(1)).append(" ");
}
}
}

View File

@ -14,21 +14,21 @@ public class BackupList extends ValueObject {
public static BackupList parse(final String string) {
final JsonParser jsonParser2 = new JsonParser();
final BackupList backupList3 = new BackupList();
backupList3.backups = Lists.newArrayList();
final BackupList dig3 = new BackupList();
dig3.backups = Lists.newArrayList();
try {
final JsonElement jsonElement4 = jsonParser2.parse(string).getAsJsonObject().get("backups");
if (jsonElement4.isJsonArray()) {
final Iterator<JsonElement> iterator5 = jsonElement4.getAsJsonArray().iterator();
while (iterator5.hasNext()) {
backupList3.backups.add(Backup.parse(iterator5.next()));
dig3.backups.add(Backup.parse(iterator5.next()));
}
}
}
catch (Exception exception4) {
BackupList.LOGGER.error("Could not parse BackupList: " + exception4.getMessage());
}
return backupList3;
return dig3;
}
static {

View File

@ -0,0 +1,19 @@
package com.mojang.realmsclient.dto;
import com.google.gson.Gson;
public class GuardedSerializer {
private final Gson gson;
public GuardedSerializer() {
this.gson = new Gson();
}
public String toJson(final ReflectionBasedSerialization dix) {
return this.gson.toJson(dix);
}
public <T extends ReflectionBasedSerialization> T fromJson(final String string, final Class<T> class2) {
return this.gson.<T>fromJson(string, class2);
}
}

View File

@ -15,7 +15,7 @@ public class Ops extends ValueObject {
}
public static Ops parse(final String string) {
final Ops ops2 = new Ops();
final Ops dii2 = new Ops();
final JsonParser jsonParser3 = new JsonParser();
try {
final JsonElement jsonElement4 = jsonParser3.parse(string);
@ -23,11 +23,11 @@ public class Ops extends ValueObject {
final JsonElement jsonElement5 = jsonObject5.get("ops");
if (jsonElement5.isJsonArray()) {
for (final JsonElement jsonElement6 : jsonElement5.getAsJsonArray()) {
ops2.ops.add(jsonElement6.getAsString());
dii2.ops.add(jsonElement6.getAsString());
}
}
}
catch (Exception ex) {}
return ops2;
return dii2;
}
}

View File

@ -15,18 +15,18 @@ public class PendingInvite extends ValueObject {
public Date date;
public static PendingInvite parse(final JsonObject jsonObject) {
final PendingInvite pendingInvite2 = new PendingInvite();
final PendingInvite dij2 = new PendingInvite();
try {
pendingInvite2.invitationId = JsonUtils.getStringOr("invitationId", jsonObject, "");
pendingInvite2.worldName = JsonUtils.getStringOr("worldName", jsonObject, "");
pendingInvite2.worldOwnerName = JsonUtils.getStringOr("worldOwnerName", jsonObject, "");
pendingInvite2.worldOwnerUuid = JsonUtils.getStringOr("worldOwnerUuid", jsonObject, "");
pendingInvite2.date = JsonUtils.getDateOr("date", jsonObject);
dij2.invitationId = JsonUtils.getStringOr("invitationId", jsonObject, "");
dij2.worldName = JsonUtils.getStringOr("worldName", jsonObject, "");
dij2.worldOwnerName = JsonUtils.getStringOr("worldOwnerName", jsonObject, "");
dij2.worldOwnerUuid = JsonUtils.getStringOr("worldOwnerUuid", jsonObject, "");
dij2.date = JsonUtils.getDateOr("date", jsonObject);
}
catch (Exception exception3) {
PendingInvite.LOGGER.error("Could not parse PendingInvite: " + exception3.getMessage());
}
return pendingInvite2;
return dij2;
}
static {

View File

@ -18,21 +18,21 @@ public class PendingInvitesList extends ValueObject {
}
public static PendingInvitesList parse(final String string) {
final PendingInvitesList pendingInvitesList2 = new PendingInvitesList();
final PendingInvitesList dik2 = new PendingInvitesList();
try {
final JsonParser jsonParser3 = new JsonParser();
final JsonObject jsonObject4 = jsonParser3.parse(string).getAsJsonObject();
if (jsonObject4.get("invites").isJsonArray()) {
final Iterator<JsonElement> iterator5 = jsonObject4.get("invites").getAsJsonArray().iterator();
while (iterator5.hasNext()) {
pendingInvitesList2.pendingInvites.add(PendingInvite.parse(iterator5.next().getAsJsonObject()));
dik2.pendingInvites.add(PendingInvite.parse(iterator5.next().getAsJsonObject()));
}
}
}
catch (Exception exception3) {
PendingInvitesList.LOGGER.error("Could not parse PendingInvitesList: " + exception3.getMessage());
}
return pendingInvitesList2;
return dik2;
}
static {

View File

@ -1,10 +1,13 @@
package com.mojang.realmsclient.dto;
import com.google.common.collect.Lists;
import com.google.gson.annotations.SerializedName;
import java.util.List;
public class PingResult extends ValueObject {
public class PingResult extends ValueObject implements ReflectionBasedSerialization {
@SerializedName("pingResults")
public List<RegionPingResult> pingResults;
@SerializedName("worldIds")
public List<Long> worldIds;
public PingResult() {

View File

@ -1,10 +1,17 @@
package com.mojang.realmsclient.dto;
public class PlayerInfo extends ValueObject {
import com.google.gson.annotations.SerializedName;
public class PlayerInfo extends ValueObject implements ReflectionBasedSerialization {
@SerializedName("name")
private String name;
@SerializedName("uuid")
private String uuid;
@SerializedName("operator")
private boolean operator;
@SerializedName("accepted")
private boolean accepted;
@SerializedName("online")
private boolean online;
public String getName() {

View File

@ -1,7 +1,11 @@
package com.mojang.realmsclient.dto;
public class RealmsDescriptionDto extends ValueObject {
import com.google.gson.annotations.SerializedName;
public class RealmsDescriptionDto extends ValueObject implements ReflectionBasedSerialization {
@SerializedName("name")
public String name;
@SerializedName("description")
public String description;
public RealmsDescriptionDto(final String string1, final String string2) {

View File

@ -11,16 +11,16 @@ public class RealmsNews extends ValueObject {
public String newsLink;
public static RealmsNews parse(final String string) {
final RealmsNews realmsNews2 = new RealmsNews();
final RealmsNews dio2 = new RealmsNews();
try {
final JsonParser jsonParser3 = new JsonParser();
final JsonObject jsonObject4 = jsonParser3.parse(string).getAsJsonObject();
realmsNews2.newsLink = JsonUtils.getStringOr("newsLink", jsonObject4, null);
dio2.newsLink = JsonUtils.getStringOr("newsLink", jsonObject4, null);
}
catch (Exception exception3) {
RealmsNews.LOGGER.error("Could not parse RealmsNews: " + exception3.getMessage());
}
return realmsNews2;
return dio2;
}
static {

View File

@ -3,19 +3,20 @@ package com.mojang.realmsclient.dto;
import java.util.Comparator;
import org.apache.logging.log4j.LogManager;
import org.apache.commons.lang3.builder.EqualsBuilder;
import org.apache.commons.lang3.builder.HashCodeBuilder;
import java.util.Objects;
import com.google.gson.JsonParser;
import com.google.common.collect.Maps;
import com.google.gson.JsonElement;
import com.google.gson.JsonArray;
import java.util.Locale;
import com.google.common.collect.ComparisonChain;
import com.google.common.collect.Lists;
import com.mojang.realmsclient.util.JsonUtils;
import com.google.gson.JsonObject;
import java.util.Iterator;
import com.google.common.base.Joiner;
import com.mojang.realmsclient.util.RealmsUtil;
import net.minecraft.realms.Realms;
import net.minecraft.client.Minecraft;
import com.google.common.collect.Lists;
import java.util.Map;
import java.util.List;
import org.apache.logging.log4j.Logger;
@ -65,11 +66,11 @@ public class RealmsServer extends ValueObject {
this.motd = string;
}
public void updateServerPing(final RealmsServerPlayerList realmsServerPlayerList) {
final StringBuilder stringBuilder3 = new StringBuilder();
public void updateServerPing(final RealmsServerPlayerList dit) {
final List<String> list3 = Lists.newArrayList();
int integer4 = 0;
for (final String string6 : realmsServerPlayerList.players) {
if (string6.equals(Realms.getUUID())) {
for (final String string6 : dit.players) {
if (string6.equals(Minecraft.getInstance().getUser().getUuid())) {
continue;
}
String string7 = "";
@ -80,56 +81,53 @@ public class RealmsServer extends ValueObject {
RealmsServer.LOGGER.error("Could not get name for " + string6, (Throwable)exception8);
continue;
}
if (stringBuilder3.length() > 0) {
stringBuilder3.append("\n");
}
stringBuilder3.append(string7);
list3.add(string7);
++integer4;
}
this.serverPing.nrOfPlayers = String.valueOf(integer4);
this.serverPing.playerList = stringBuilder3.toString();
this.serverPing.playerList = Joiner.on('\n').join(list3);
}
public static RealmsServer parse(final JsonObject jsonObject) {
final RealmsServer realmsServer2 = new RealmsServer();
final RealmsServer dip2 = new RealmsServer();
try {
realmsServer2.id = JsonUtils.getLongOr("id", jsonObject, -1L);
realmsServer2.remoteSubscriptionId = JsonUtils.getStringOr("remoteSubscriptionId", jsonObject, null);
realmsServer2.name = JsonUtils.getStringOr("name", jsonObject, null);
realmsServer2.motd = JsonUtils.getStringOr("motd", jsonObject, null);
realmsServer2.state = getState(JsonUtils.getStringOr("state", jsonObject, State.CLOSED.name()));
realmsServer2.owner = JsonUtils.getStringOr("owner", jsonObject, null);
dip2.id = JsonUtils.getLongOr("id", jsonObject, -1L);
dip2.remoteSubscriptionId = JsonUtils.getStringOr("remoteSubscriptionId", jsonObject, null);
dip2.name = JsonUtils.getStringOr("name", jsonObject, null);
dip2.motd = JsonUtils.getStringOr("motd", jsonObject, null);
dip2.state = getState(JsonUtils.getStringOr("state", jsonObject, State.CLOSED.name()));
dip2.owner = JsonUtils.getStringOr("owner", jsonObject, null);
if (jsonObject.get("players") != null && jsonObject.get("players").isJsonArray()) {
realmsServer2.players = parseInvited(jsonObject.get("players").getAsJsonArray());
sortInvited(realmsServer2);
dip2.players = parseInvited(jsonObject.get("players").getAsJsonArray());
sortInvited(dip2);
}
else {
realmsServer2.players = Lists.newArrayList();
dip2.players = Lists.newArrayList();
}
realmsServer2.daysLeft = JsonUtils.getIntOr("daysLeft", jsonObject, 0);
realmsServer2.expired = JsonUtils.getBooleanOr("expired", jsonObject, false);
realmsServer2.expiredTrial = JsonUtils.getBooleanOr("expiredTrial", jsonObject, false);
realmsServer2.worldType = getWorldType(JsonUtils.getStringOr("worldType", jsonObject, WorldType.NORMAL.name()));
realmsServer2.ownerUUID = JsonUtils.getStringOr("ownerUUID", jsonObject, "");
dip2.daysLeft = JsonUtils.getIntOr("daysLeft", jsonObject, 0);
dip2.expired = JsonUtils.getBooleanOr("expired", jsonObject, false);
dip2.expiredTrial = JsonUtils.getBooleanOr("expiredTrial", jsonObject, false);
dip2.worldType = getWorldType(JsonUtils.getStringOr("worldType", jsonObject, WorldType.NORMAL.name()));
dip2.ownerUUID = JsonUtils.getStringOr("ownerUUID", jsonObject, "");
if (jsonObject.get("slots") != null && jsonObject.get("slots").isJsonArray()) {
realmsServer2.slots = parseSlots(jsonObject.get("slots").getAsJsonArray());
dip2.slots = parseSlots(jsonObject.get("slots").getAsJsonArray());
}
else {
realmsServer2.slots = getEmptySlots();
dip2.slots = createEmptySlots();
}
realmsServer2.minigameName = JsonUtils.getStringOr("minigameName", jsonObject, null);
realmsServer2.activeSlot = JsonUtils.getIntOr("activeSlot", jsonObject, -1);
realmsServer2.minigameId = JsonUtils.getIntOr("minigameId", jsonObject, -1);
realmsServer2.minigameImage = JsonUtils.getStringOr("minigameImage", jsonObject, null);
dip2.minigameName = JsonUtils.getStringOr("minigameName", jsonObject, null);
dip2.activeSlot = JsonUtils.getIntOr("activeSlot", jsonObject, -1);
dip2.minigameId = JsonUtils.getIntOr("minigameId", jsonObject, -1);
dip2.minigameImage = JsonUtils.getStringOr("minigameImage", jsonObject, null);
}
catch (Exception exception3) {
RealmsServer.LOGGER.error("Could not parse McoServer: " + exception3.getMessage());
}
return realmsServer2;
return dip2;
}
private static void sortInvited(final RealmsServer realmsServer) {
realmsServer.players.sort((playerInfo1, playerInfo2) -> ComparisonChain.start().compareFalseFirst(playerInfo2.getAccepted(), playerInfo1.getAccepted()).compare(playerInfo1.getName().toLowerCase(Locale.ROOT), playerInfo2.getName().toLowerCase(Locale.ROOT)).result());
private static void sortInvited(final RealmsServer dip) {
dip.players.sort((dim1, dim2) -> ComparisonChain.start().compareFalseFirst(dim2.getAccepted(), dim1.getAccepted()).compare(dim1.getName().toLowerCase(Locale.ROOT), dim2.getName().toLowerCase(Locale.ROOT)).result());
}
private static List<PlayerInfo> parseInvited(final JsonArray jsonArray) {
@ -137,13 +135,13 @@ public class RealmsServer extends ValueObject {
for (final JsonElement jsonElement4 : jsonArray) {
try {
final JsonObject jsonObject5 = jsonElement4.getAsJsonObject();
final PlayerInfo playerInfo6 = new PlayerInfo();
playerInfo6.setName(JsonUtils.getStringOr("name", jsonObject5, null));
playerInfo6.setUuid(JsonUtils.getStringOr("uuid", jsonObject5, null));
playerInfo6.setOperator(JsonUtils.getBooleanOr("operator", jsonObject5, false));
playerInfo6.setAccepted(JsonUtils.getBooleanOr("accepted", jsonObject5, false));
playerInfo6.setOnline(JsonUtils.getBooleanOr("online", jsonObject5, false));
list2.add(playerInfo6);
final PlayerInfo dim6 = new PlayerInfo();
dim6.setName(JsonUtils.getStringOr("name", jsonObject5, null));
dim6.setUuid(JsonUtils.getStringOr("uuid", jsonObject5, null));
dim6.setOperator(JsonUtils.getBooleanOr("operator", jsonObject5, false));
dim6.setAccepted(JsonUtils.getBooleanOr("accepted", jsonObject5, false));
dim6.setOnline(JsonUtils.getBooleanOr("online", jsonObject5, false));
list2.add(dim6);
}
catch (Exception ex) {}
}
@ -157,45 +155,42 @@ public class RealmsServer extends ValueObject {
final JsonObject jsonObject6 = jsonElement4.getAsJsonObject();
final JsonParser jsonParser7 = new JsonParser();
final JsonElement jsonElement5 = jsonParser7.parse(jsonObject6.get("options").getAsString());
RealmsWorldOptions realmsWorldOptions5;
RealmsWorldOptions div5;
if (jsonElement5 == null) {
realmsWorldOptions5 = RealmsWorldOptions.getDefaults();
div5 = RealmsWorldOptions.createDefaults();
}
else {
realmsWorldOptions5 = RealmsWorldOptions.parse(jsonElement5.getAsJsonObject());
div5 = RealmsWorldOptions.parse(jsonElement5.getAsJsonObject());
}
final int integer9 = JsonUtils.getIntOr("slotId", jsonObject6, -1);
map2.put(integer9, realmsWorldOptions5);
map2.put(integer9, div5);
}
catch (Exception ex) {}
}
for (int integer10 = 1; integer10 <= 3; ++integer10) {
if (!map2.containsKey(integer10)) {
map2.put(integer10, RealmsWorldOptions.getEmptyDefaults());
map2.put(integer10, RealmsWorldOptions.createEmptyDefaults());
}
}
return map2;
}
private static Map<Integer, RealmsWorldOptions> getEmptySlots() {
private static Map<Integer, RealmsWorldOptions> createEmptySlots() {
final Map<Integer, RealmsWorldOptions> map1 = Maps.newHashMap();
map1.put(1, RealmsWorldOptions.getEmptyDefaults());
map1.put(2, RealmsWorldOptions.getEmptyDefaults());
map1.put(3, RealmsWorldOptions.getEmptyDefaults());
map1.put(1, RealmsWorldOptions.createEmptyDefaults());
map1.put(2, RealmsWorldOptions.createEmptyDefaults());
map1.put(3, RealmsWorldOptions.createEmptyDefaults());
return map1;
}
public static RealmsServer parse(final String string) {
RealmsServer realmsServer2 = new RealmsServer();
try {
final JsonParser jsonParser3 = new JsonParser();
final JsonObject jsonObject4 = jsonParser3.parse(string).getAsJsonObject();
realmsServer2 = parse(jsonObject4);
return parse(new JsonParser().parse(string).getAsJsonObject());
}
catch (Exception exception3) {
RealmsServer.LOGGER.error("Could not parse McoServer: " + exception3.getMessage());
catch (Exception exception2) {
RealmsServer.LOGGER.error("Could not parse McoServer: " + exception2.getMessage());
return new RealmsServer();
}
return realmsServer2;
}
private static State getState(final String string) {
@ -218,7 +213,7 @@ public class RealmsServer extends ValueObject {
@Override
public int hashCode() {
return new HashCodeBuilder(17, 37).append(this.id).append(this.name).append(this.motd).append(this.state).append(this.owner).append(this.expired).toHashCode();
return Objects.hash(this.id, this.name, this.motd, this.state, this.owner, this.expired);
}
@Override
@ -232,33 +227,33 @@ public class RealmsServer extends ValueObject {
if (object.getClass() != this.getClass()) {
return false;
}
final RealmsServer realmsServer3 = (RealmsServer)object;
return new EqualsBuilder().append(this.id, realmsServer3.id).append(this.name, realmsServer3.name).append(this.motd, realmsServer3.motd).append(this.state, realmsServer3.state).append(this.owner, realmsServer3.owner).append(this.expired, realmsServer3.expired).append(this.worldType, this.worldType).isEquals();
final RealmsServer dip3 = (RealmsServer)object;
return new EqualsBuilder().append(this.id, dip3.id).append(this.name, dip3.name).append(this.motd, dip3.motd).append(this.state, dip3.state).append(this.owner, dip3.owner).append(this.expired, dip3.expired).append(this.worldType, this.worldType).isEquals();
}
public RealmsServer clone() {
final RealmsServer realmsServer2 = new RealmsServer();
realmsServer2.id = this.id;
realmsServer2.remoteSubscriptionId = this.remoteSubscriptionId;
realmsServer2.name = this.name;
realmsServer2.motd = this.motd;
realmsServer2.state = this.state;
realmsServer2.owner = this.owner;
realmsServer2.players = this.players;
realmsServer2.slots = this.cloneSlots(this.slots);
realmsServer2.expired = this.expired;
realmsServer2.expiredTrial = this.expiredTrial;
realmsServer2.daysLeft = this.daysLeft;
realmsServer2.serverPing = new RealmsServerPing();
realmsServer2.serverPing.nrOfPlayers = this.serverPing.nrOfPlayers;
realmsServer2.serverPing.playerList = this.serverPing.playerList;
realmsServer2.worldType = this.worldType;
realmsServer2.ownerUUID = this.ownerUUID;
realmsServer2.minigameName = this.minigameName;
realmsServer2.activeSlot = this.activeSlot;
realmsServer2.minigameId = this.minigameId;
realmsServer2.minigameImage = this.minigameImage;
return realmsServer2;
final RealmsServer dip2 = new RealmsServer();
dip2.id = this.id;
dip2.remoteSubscriptionId = this.remoteSubscriptionId;
dip2.name = this.name;
dip2.motd = this.motd;
dip2.state = this.state;
dip2.owner = this.owner;
dip2.players = this.players;
dip2.slots = this.cloneSlots(this.slots);
dip2.expired = this.expired;
dip2.expiredTrial = this.expiredTrial;
dip2.daysLeft = this.daysLeft;
dip2.serverPing = new RealmsServerPing();
dip2.serverPing.nrOfPlayers = this.serverPing.nrOfPlayers;
dip2.serverPing.playerList = this.serverPing.playerList;
dip2.worldType = this.worldType;
dip2.ownerUUID = this.ownerUUID;
dip2.minigameName = this.minigameName;
dip2.activeSlot = this.activeSlot;
dip2.minigameId = this.minigameId;
dip2.minigameImage = this.minigameImage;
return dip2;
}
public Map<Integer, RealmsWorldOptions> cloneSlots(final Map<Integer, RealmsWorldOptions> map) {
@ -269,6 +264,10 @@ public class RealmsServer extends ValueObject {
return map2;
}
public String getWorldName(final int integer) {
return this.name + " (" + this.slots.get(integer).getSlotName(integer) + ")";
}
static {
LOGGER = LogManager.getLogger();
}
@ -281,8 +280,8 @@ public class RealmsServer extends ValueObject {
}
@Override
public int compare(final RealmsServer realmsServer1, final RealmsServer realmsServer2) {
return ComparisonChain.start().compareTrueFirst(realmsServer1.state.equals(State.UNINITIALIZED), realmsServer2.state.equals(State.UNINITIALIZED)).compareTrueFirst(realmsServer1.expiredTrial, realmsServer2.expiredTrial).compareTrueFirst(realmsServer1.owner.equals(this.refOwner), realmsServer2.owner.equals(this.refOwner)).compareFalseFirst(realmsServer1.expired, realmsServer2.expired).compareTrueFirst(realmsServer1.state.equals(State.OPEN), realmsServer2.state.equals(State.OPEN)).compare(realmsServer1.id, realmsServer2.id).result();
public int compare(final RealmsServer dip1, final RealmsServer dip2) {
return ComparisonChain.start().compareTrueFirst(dip1.state == State.UNINITIALIZED, dip2.state == State.UNINITIALIZED).compareTrueFirst(dip1.expiredTrial, dip2.expiredTrial).compareTrueFirst(dip1.owner.equals(this.refOwner), dip2.owner.equals(this.refOwner)).compareFalseFirst(dip1.expired, dip2.expired).compareTrueFirst(dip1.state == State.OPEN, dip2.state == State.OPEN).compare(dip1.id, dip2.id).result();
}
}

View File

@ -14,17 +14,17 @@ public class RealmsServerAddress extends ValueObject {
public static RealmsServerAddress parse(final String string) {
final JsonParser jsonParser2 = new JsonParser();
final RealmsServerAddress realmsServerAddress3 = new RealmsServerAddress();
final RealmsServerAddress diq3 = new RealmsServerAddress();
try {
final JsonObject jsonObject4 = jsonParser2.parse(string).getAsJsonObject();
realmsServerAddress3.address = JsonUtils.getStringOr("address", jsonObject4, null);
realmsServerAddress3.resourcePackUrl = JsonUtils.getStringOr("resourcePackUrl", jsonObject4, null);
realmsServerAddress3.resourcePackHash = JsonUtils.getStringOr("resourcePackHash", jsonObject4, null);
diq3.address = JsonUtils.getStringOr("address", jsonObject4, null);
diq3.resourcePackUrl = JsonUtils.getStringOr("resourcePackUrl", jsonObject4, null);
diq3.resourcePackHash = JsonUtils.getStringOr("resourcePackHash", jsonObject4, null);
}
catch (Exception exception4) {
RealmsServerAddress.LOGGER.error("Could not parse RealmsServerAddress: " + exception4.getMessage());
}
return realmsServerAddress3;
return diq3;
}
static {

View File

@ -15,8 +15,8 @@ public class RealmsServerList extends ValueObject {
public List<RealmsServer> servers;
public static RealmsServerList parse(final String string) {
final RealmsServerList realmsServerList2 = new RealmsServerList();
realmsServerList2.servers = Lists.newArrayList();
final RealmsServerList dir2 = new RealmsServerList();
dir2.servers = Lists.newArrayList();
try {
final JsonParser jsonParser3 = new JsonParser();
final JsonObject jsonObject4 = jsonParser3.parse(string).getAsJsonObject();
@ -24,14 +24,14 @@ public class RealmsServerList extends ValueObject {
final JsonArray jsonArray5 = jsonObject4.get("servers").getAsJsonArray();
final Iterator<JsonElement> iterator6 = jsonArray5.iterator();
while (iterator6.hasNext()) {
realmsServerList2.servers.add(RealmsServer.parse(iterator6.next().getAsJsonObject()));
dir2.servers.add(RealmsServer.parse(iterator6.next().getAsJsonObject()));
}
}
}
catch (Exception exception3) {
RealmsServerList.LOGGER.error("Could not parse McoServerList: " + exception3.getMessage());
}
return realmsServerList2;
return dir2;
}
static {

View File

@ -13,32 +13,32 @@ import org.apache.logging.log4j.Logger;
public class RealmsServerPlayerList extends ValueObject {
private static final Logger LOGGER;
private static final JsonParser jsonParser;
private static final JsonParser JSON_PARSER;
public long serverId;
public List<String> players;
public static RealmsServerPlayerList parse(final JsonObject jsonObject) {
final RealmsServerPlayerList realmsServerPlayerList2 = new RealmsServerPlayerList();
final RealmsServerPlayerList dit2 = new RealmsServerPlayerList();
try {
realmsServerPlayerList2.serverId = JsonUtils.getLongOr("serverId", jsonObject, -1L);
dit2.serverId = JsonUtils.getLongOr("serverId", jsonObject, -1L);
final String string3 = JsonUtils.getStringOr("playerList", jsonObject, null);
if (string3 != null) {
final JsonElement jsonElement4 = RealmsServerPlayerList.jsonParser.parse(string3);
final JsonElement jsonElement4 = RealmsServerPlayerList.JSON_PARSER.parse(string3);
if (jsonElement4.isJsonArray()) {
realmsServerPlayerList2.players = parsePlayers(jsonElement4.getAsJsonArray());
dit2.players = parsePlayers(jsonElement4.getAsJsonArray());
}
else {
realmsServerPlayerList2.players = Lists.newArrayList();
dit2.players = Lists.newArrayList();
}
}
else {
realmsServerPlayerList2.players = Lists.newArrayList();
dit2.players = Lists.newArrayList();
}
}
catch (Exception exception3) {
RealmsServerPlayerList.LOGGER.error("Could not parse RealmsServerPlayerList: " + exception3.getMessage());
}
return realmsServerPlayerList2;
return dit2;
}
private static List<String> parsePlayers(final JsonArray jsonArray) {
@ -54,6 +54,6 @@ public class RealmsServerPlayerList extends ValueObject {
static {
LOGGER = LogManager.getLogger();
jsonParser = new JsonParser();
JSON_PARSER = new JsonParser();
}
}

View File

@ -15,8 +15,8 @@ public class RealmsServerPlayerLists extends ValueObject {
public List<RealmsServerPlayerList> servers;
public static RealmsServerPlayerLists parse(final String string) {
final RealmsServerPlayerLists realmsServerPlayerLists2 = new RealmsServerPlayerLists();
realmsServerPlayerLists2.servers = Lists.newArrayList();
final RealmsServerPlayerLists diu2 = new RealmsServerPlayerLists();
diu2.servers = Lists.newArrayList();
try {
final JsonParser jsonParser3 = new JsonParser();
final JsonObject jsonObject4 = jsonParser3.parse(string).getAsJsonObject();
@ -24,14 +24,14 @@ public class RealmsServerPlayerLists extends ValueObject {
final JsonArray jsonArray5 = jsonObject4.get("lists").getAsJsonArray();
final Iterator<JsonElement> iterator6 = jsonArray5.iterator();
while (iterator6.hasNext()) {
realmsServerPlayerLists2.servers.add(RealmsServerPlayerList.parse(iterator6.next().getAsJsonObject()));
diu2.servers.add(RealmsServerPlayerList.parse(iterator6.next().getAsJsonObject()));
}
}
}
catch (Exception exception3) {
RealmsServerPlayerLists.LOGGER.error("Could not parse RealmsServerPlayerLists: " + exception3.getMessage());
}
return realmsServerPlayerLists2;
return diu2;
}
static {

View File

@ -1,6 +1,7 @@
package com.mojang.realmsclient.dto;
import net.minecraft.realms.RealmsScreen;
import java.util.Objects;
import net.minecraft.client.resources.language.I18n;
import com.mojang.realmsclient.util.JsonUtils;
import com.google.gson.JsonObject;
@ -19,19 +20,7 @@ public class RealmsWorldOptions extends ValueObject {
public String templateImage;
public boolean adventureMap;
public boolean empty;
private static final boolean forceGameModeDefault = false;
private static final boolean pvpDefault = true;
private static final boolean spawnAnimalsDefault = true;
private static final boolean spawnMonstersDefault = true;
private static final boolean spawnNPCsDefault = true;
private static final int spawnProtectionDefault = 0;
private static final boolean commandBlocksDefault = false;
private static final int difficultyDefault = 2;
private static final int gameModeDefault = 0;
private static final String slotNameDefault = "";
private static final long templateIdDefault = -1L;
private static final String templateImageDefault;
private static final boolean adventureMapDefault = false;
private static final String DEFAULT_TEMPLATE_IMAGE;
public RealmsWorldOptions(final Boolean boolean1, final Boolean boolean2, final Boolean boolean3, final Boolean boolean4, final Integer integer5, final Boolean boolean6, final Integer integer7, final Integer integer8, final Boolean boolean9, final String string) {
this.pvp = boolean1;
@ -46,14 +35,14 @@ public class RealmsWorldOptions extends ValueObject {
this.slotName = string;
}
public static RealmsWorldOptions getDefaults() {
public static RealmsWorldOptions createDefaults() {
return new RealmsWorldOptions(true, true, true, true, 0, false, 2, 0, false, "");
}
public static RealmsWorldOptions getEmptyDefaults() {
final RealmsWorldOptions realmsWorldOptions1 = new RealmsWorldOptions(true, true, true, true, 0, false, 2, 0, false, "");
realmsWorldOptions1.setEmpty(true);
return realmsWorldOptions1;
public static RealmsWorldOptions createEmptyDefaults() {
final RealmsWorldOptions div1 = createDefaults();
div1.setEmpty(true);
return div1;
}
public void setEmpty(final boolean boolean1) {
@ -61,11 +50,11 @@ public class RealmsWorldOptions extends ValueObject {
}
public static RealmsWorldOptions parse(final JsonObject jsonObject) {
final RealmsWorldOptions realmsWorldOptions2 = new RealmsWorldOptions(JsonUtils.getBooleanOr("pvp", jsonObject, true), JsonUtils.getBooleanOr("spawnAnimals", jsonObject, true), JsonUtils.getBooleanOr("spawnMonsters", jsonObject, true), JsonUtils.getBooleanOr("spawnNPCs", jsonObject, true), JsonUtils.getIntOr("spawnProtection", jsonObject, 0), JsonUtils.getBooleanOr("commandBlocks", jsonObject, false), JsonUtils.getIntOr("difficulty", jsonObject, 2), JsonUtils.getIntOr("gameMode", jsonObject, 0), JsonUtils.getBooleanOr("forceGameMode", jsonObject, false), JsonUtils.getStringOr("slotName", jsonObject, ""));
realmsWorldOptions2.templateId = JsonUtils.getLongOr("worldTemplateId", jsonObject, -1L);
realmsWorldOptions2.templateImage = JsonUtils.getStringOr("worldTemplateImage", jsonObject, RealmsWorldOptions.templateImageDefault);
realmsWorldOptions2.adventureMap = JsonUtils.getBooleanOr("adventureMap", jsonObject, false);
return realmsWorldOptions2;
final RealmsWorldOptions div2 = new RealmsWorldOptions(JsonUtils.getBooleanOr("pvp", jsonObject, true), JsonUtils.getBooleanOr("spawnAnimals", jsonObject, true), JsonUtils.getBooleanOr("spawnMonsters", jsonObject, true), JsonUtils.getBooleanOr("spawnNPCs", jsonObject, true), JsonUtils.getIntOr("spawnProtection", jsonObject, 0), JsonUtils.getBooleanOr("commandBlocks", jsonObject, false), JsonUtils.getIntOr("difficulty", jsonObject, 2), JsonUtils.getIntOr("gameMode", jsonObject, 0), JsonUtils.getBooleanOr("forceGameMode", jsonObject, false), JsonUtils.getStringOr("slotName", jsonObject, ""));
div2.templateId = JsonUtils.getLongOr("worldTemplateId", jsonObject, -1L);
div2.templateImage = JsonUtils.getStringOr("worldTemplateImage", jsonObject, RealmsWorldOptions.DEFAULT_TEMPLATE_IMAGE);
div2.adventureMap = JsonUtils.getBooleanOr("adventureMap", jsonObject, false);
return div2;
}
public String getSlotName(final int integer) {
@ -73,13 +62,13 @@ public class RealmsWorldOptions extends ValueObject {
return this.slotName;
}
if (this.empty) {
return RealmsScreen.getLocalizedString("mco.configure.world.slot.empty");
return I18n.get("mco.configure.world.slot.empty");
}
return this.getDefaultSlotName(integer);
}
public String getDefaultSlotName(final int integer) {
return RealmsScreen.getLocalizedString("mco.configure.world.slot", integer);
return I18n.get("mco.configure.world.slot", integer);
}
public String toJson() {
@ -111,7 +100,7 @@ public class RealmsWorldOptions extends ValueObject {
if (this.forceGameMode) {
jsonObject2.addProperty("forceGameMode", this.forceGameMode);
}
if (this.slotName != null && !this.slotName.equals("")) {
if (!Objects.equals(this.slotName, "")) {
jsonObject2.addProperty("slotName", this.slotName);
}
return jsonObject2.toString();
@ -122,6 +111,6 @@ public class RealmsWorldOptions extends ValueObject {
}
static {
templateImageDefault = null;
DEFAULT_TEMPLATE_IMAGE = null;
}
}

View File

@ -1,9 +1,15 @@
package com.mojang.realmsclient.dto;
public class RealmsWorldResetDto extends ValueObject {
import com.google.gson.annotations.SerializedName;
public class RealmsWorldResetDto extends ValueObject implements ReflectionBasedSerialization {
@SerializedName("seed")
private final String seed;
@SerializedName("worldTemplateId")
private final long worldTemplateId;
@SerializedName("levelType")
private final int levelType;
@SerializedName("generateStructures")
private final boolean generateStructures;
public RealmsWorldResetDto(final String string, final long long2, final int integer, final boolean boolean4) {

View File

@ -0,0 +1,4 @@
package com.mojang.realmsclient.dto;
public interface ReflectionBasedSerialization {
}

View File

@ -1,9 +1,12 @@
package com.mojang.realmsclient.dto;
import java.util.Locale;
import com.google.gson.annotations.SerializedName;
public class RegionPingResult extends ValueObject {
public class RegionPingResult extends ValueObject implements ReflectionBasedSerialization {
@SerializedName("regionName")
private final String regionName;
@SerializedName("ping")
private final int ping;
public RegionPingResult(final String string, final int integer) {

View File

@ -1,21 +0,0 @@
package com.mojang.realmsclient.dto;
import com.mojang.realmsclient.util.JsonUtils;
import com.google.gson.JsonObject;
public class ServerActivity extends ValueObject {
public String profileUuid;
public long joinTime;
public long leaveTime;
public static ServerActivity parse(final JsonObject jsonObject) {
final ServerActivity serverActivity2 = new ServerActivity();
try {
serverActivity2.profileUuid = JsonUtils.getStringOr("profileUuid", jsonObject, null);
serverActivity2.joinTime = JsonUtils.getLongOr("joinTime", jsonObject, Long.MIN_VALUE);
serverActivity2.leaveTime = JsonUtils.getLongOr("leaveTime", jsonObject, Long.MIN_VALUE);
}
catch (Exception ex) {}
return serverActivity2;
}
}

View File

@ -1,39 +0,0 @@
package com.mojang.realmsclient.dto;
import java.util.Iterator;
import com.google.gson.JsonArray;
import com.google.gson.JsonObject;
import com.google.gson.JsonElement;
import com.mojang.realmsclient.util.JsonUtils;
import com.google.gson.JsonParser;
import com.google.common.collect.Lists;
import java.util.List;
public class ServerActivityList extends ValueObject {
public long periodInMillis;
public List<ServerActivity> serverActivities;
public ServerActivityList() {
this.serverActivities = Lists.newArrayList();
}
public static ServerActivityList parse(final String string) {
final ServerActivityList serverActivityList2 = new ServerActivityList();
final JsonParser jsonParser3 = new JsonParser();
try {
final JsonElement jsonElement4 = jsonParser3.parse(string);
final JsonObject jsonObject5 = jsonElement4.getAsJsonObject();
serverActivityList2.periodInMillis = JsonUtils.getLongOr("periodInMillis", jsonObject5, -1L);
final JsonElement jsonElement5 = jsonObject5.get("playerActivityDto");
if (jsonElement5 != null && jsonElement5.isJsonArray()) {
final JsonArray jsonArray7 = jsonElement5.getAsJsonArray();
for (final JsonElement jsonElement6 : jsonArray7) {
final ServerActivity serverActivity10 = ServerActivity.parse(jsonElement6.getAsJsonObject());
serverActivityList2.serverActivities.add(serverActivity10);
}
}
}
catch (Exception ex) {}
return serverActivityList2;
}
}

View File

@ -17,18 +17,18 @@ public class Subscription extends ValueObject {
}
public static Subscription parse(final String string) {
final Subscription subscription2 = new Subscription();
final Subscription diz2 = new Subscription();
try {
final JsonParser jsonParser3 = new JsonParser();
final JsonObject jsonObject4 = jsonParser3.parse(string).getAsJsonObject();
subscription2.startDate = JsonUtils.getLongOr("startDate", jsonObject4, 0L);
subscription2.daysLeft = JsonUtils.getIntOr("daysLeft", jsonObject4, 0);
subscription2.type = typeFrom(JsonUtils.getStringOr("subscriptionType", jsonObject4, SubscriptionType.NORMAL.name()));
diz2.startDate = JsonUtils.getLongOr("startDate", jsonObject4, 0L);
diz2.daysLeft = JsonUtils.getIntOr("daysLeft", jsonObject4, 0);
diz2.type = typeFrom(JsonUtils.getStringOr("subscriptionType", jsonObject4, SubscriptionType.NORMAL.name()));
}
catch (Exception exception3) {
Subscription.LOGGER.error("Could not parse Subscription: " + exception3.getMessage());
}
return subscription2;
return diz2;
}
private static SubscriptionType typeFrom(final String string) {

View File

@ -4,16 +4,12 @@ import org.apache.logging.log4j.LogManager;
import com.google.gson.JsonObject;
import com.mojang.realmsclient.util.JsonUtils;
import com.google.gson.JsonParser;
import com.google.gson.annotations.Expose;
import org.apache.logging.log4j.Logger;
public class UploadInfo extends ValueObject {
private static final Logger LOGGER;
@Expose
private boolean worldClosed;
@Expose
private String token;
@Expose
private String uploadEndpoint;
private int port;
@ -23,19 +19,19 @@ public class UploadInfo extends ValueObject {
}
public static UploadInfo parse(final String string) {
final UploadInfo uploadInfo2 = new UploadInfo();
final UploadInfo dja2 = new UploadInfo();
try {
final JsonParser jsonParser3 = new JsonParser();
final JsonObject jsonObject4 = jsonParser3.parse(string).getAsJsonObject();
uploadInfo2.worldClosed = JsonUtils.getBooleanOr("worldClosed", jsonObject4, false);
uploadInfo2.token = JsonUtils.getStringOr("token", jsonObject4, null);
uploadInfo2.uploadEndpoint = JsonUtils.getStringOr("uploadEndpoint", jsonObject4, null);
uploadInfo2.port = JsonUtils.getIntOr("port", jsonObject4, 8080);
dja2.worldClosed = JsonUtils.getBooleanOr("worldClosed", jsonObject4, false);
dja2.token = JsonUtils.getStringOr("token", jsonObject4, null);
dja2.uploadEndpoint = JsonUtils.getStringOr("uploadEndpoint", jsonObject4, null);
dja2.port = JsonUtils.getIntOr("port", jsonObject4, 8080);
}
catch (Exception exception3) {
UploadInfo.LOGGER.error("Could not parse UploadInfo: " + exception3.getMessage());
}
return uploadInfo2;
return dja2;
}
public String getToken() {

View File

@ -1,6 +1,7 @@
package com.mojang.realmsclient.dto;
import java.lang.reflect.Modifier;
import com.google.gson.annotations.SerializedName;
import java.lang.reflect.Field;
public abstract class ValueObject {
@ -10,9 +11,9 @@ public abstract class ValueObject {
for (final Field field6 : this.getClass().getFields()) {
if (!isStatic(field6)) {
try {
stringBuilder2.append(field6.getName()).append("=").append(field6.get(this)).append(" ");
stringBuilder2.append(getName(field6)).append("=").append(field6.get(this)).append(" ");
}
catch (IllegalAccessException illegalAccessException7) {}
catch (IllegalAccessException ex) {}
}
}
stringBuilder2.deleteCharAt(stringBuilder2.length() - 1);
@ -20,6 +21,11 @@ public abstract class ValueObject {
return stringBuilder2.toString();
}
private static String getName(final Field field) {
final SerializedName serializedName2 = field.<SerializedName>getAnnotation(SerializedName.class);
return (serializedName2 != null) ? serializedName2.value() : field.getName();
}
private static boolean isStatic(final Field field) {
return Modifier.isStatic(field.getModifiers());
}

View File

@ -15,16 +15,16 @@ public class WorldDownload extends ValueObject {
public static WorldDownload parse(final String string) {
final JsonParser jsonParser2 = new JsonParser();
final JsonObject jsonObject3 = jsonParser2.parse(string).getAsJsonObject();
final WorldDownload worldDownload4 = new WorldDownload();
final WorldDownload djc4 = new WorldDownload();
try {
worldDownload4.downloadLink = JsonUtils.getStringOr("downloadLink", jsonObject3, "");
worldDownload4.resourcePackUrl = JsonUtils.getStringOr("resourcePackUrl", jsonObject3, "");
worldDownload4.resourcePackHash = JsonUtils.getStringOr("resourcePackHash", jsonObject3, "");
djc4.downloadLink = JsonUtils.getStringOr("downloadLink", jsonObject3, "");
djc4.resourcePackUrl = JsonUtils.getStringOr("resourcePackUrl", jsonObject3, "");
djc4.resourcePackHash = JsonUtils.getStringOr("resourcePackHash", jsonObject3, "");
}
catch (Exception exception5) {
WorldDownload.LOGGER.error("Could not parse WorldDownload: " + exception5.getMessage());
}
return worldDownload4;
return djc4;
}
static {

View File

@ -3,6 +3,7 @@ package com.mojang.realmsclient.dto;
import org.apache.logging.log4j.LogManager;
import com.mojang.realmsclient.util.JsonUtils;
import com.google.gson.JsonObject;
import javax.annotation.Nullable;
import org.apache.logging.log4j.Logger;
public class WorldTemplate extends ValueObject {
@ -12,28 +13,40 @@ public class WorldTemplate extends ValueObject {
public String version;
public String author;
public String link;
@Nullable
public String image;
public String trailer;
public String recommendedPlayers;
public WorldTemplateType type;
public WorldTemplate() {
this.id = "";
this.name = "";
this.version = "";
this.author = "";
this.link = "";
this.trailer = "";
this.recommendedPlayers = "";
this.type = WorldTemplateType.WORLD_TEMPLATE;
}
public static WorldTemplate parse(final JsonObject jsonObject) {
final WorldTemplate worldTemplate2 = new WorldTemplate();
final WorldTemplate djd2 = new WorldTemplate();
try {
worldTemplate2.id = JsonUtils.getStringOr("id", jsonObject, "");
worldTemplate2.name = JsonUtils.getStringOr("name", jsonObject, "");
worldTemplate2.version = JsonUtils.getStringOr("version", jsonObject, "");
worldTemplate2.author = JsonUtils.getStringOr("author", jsonObject, "");
worldTemplate2.link = JsonUtils.getStringOr("link", jsonObject, "");
worldTemplate2.image = JsonUtils.getStringOr("image", jsonObject, null);
worldTemplate2.trailer = JsonUtils.getStringOr("trailer", jsonObject, "");
worldTemplate2.recommendedPlayers = JsonUtils.getStringOr("recommendedPlayers", jsonObject, "");
worldTemplate2.type = WorldTemplateType.valueOf(JsonUtils.getStringOr("type", jsonObject, WorldTemplateType.WORLD_TEMPLATE.name()));
djd2.id = JsonUtils.getStringOr("id", jsonObject, "");
djd2.name = JsonUtils.getStringOr("name", jsonObject, "");
djd2.version = JsonUtils.getStringOr("version", jsonObject, "");
djd2.author = JsonUtils.getStringOr("author", jsonObject, "");
djd2.link = JsonUtils.getStringOr("link", jsonObject, "");
djd2.image = JsonUtils.getStringOr("image", jsonObject, null);
djd2.trailer = JsonUtils.getStringOr("trailer", jsonObject, "");
djd2.recommendedPlayers = JsonUtils.getStringOr("recommendedPlayers", jsonObject, "");
djd2.type = WorldTemplateType.valueOf(JsonUtils.getStringOr("type", jsonObject, WorldTemplateType.WORLD_TEMPLATE.name()));
}
catch (Exception exception3) {
WorldTemplate.LOGGER.error("Could not parse WorldTemplate: " + exception3.getMessage());
}
return worldTemplate2;
return djd2;
}
static {

View File

@ -28,30 +28,26 @@ public class WorldTemplatePaginatedList extends ValueObject {
this.total = -1;
}
public boolean isLastPage() {
return this.page * this.size >= this.total && this.page > 0 && this.total > 0 && this.size > 0;
}
public static WorldTemplatePaginatedList parse(final String string) {
final WorldTemplatePaginatedList worldTemplatePaginatedList2 = new WorldTemplatePaginatedList();
worldTemplatePaginatedList2.templates = Lists.newArrayList();
final WorldTemplatePaginatedList dje2 = new WorldTemplatePaginatedList();
dje2.templates = Lists.newArrayList();
try {
final JsonParser jsonParser3 = new JsonParser();
final JsonObject jsonObject4 = jsonParser3.parse(string).getAsJsonObject();
if (jsonObject4.get("templates").isJsonArray()) {
final Iterator<JsonElement> iterator5 = jsonObject4.get("templates").getAsJsonArray().iterator();
while (iterator5.hasNext()) {
worldTemplatePaginatedList2.templates.add(WorldTemplate.parse(iterator5.next().getAsJsonObject()));
dje2.templates.add(WorldTemplate.parse(iterator5.next().getAsJsonObject()));
}
}
worldTemplatePaginatedList2.page = JsonUtils.getIntOr("page", jsonObject4, 0);
worldTemplatePaginatedList2.size = JsonUtils.getIntOr("size", jsonObject4, 0);
worldTemplatePaginatedList2.total = JsonUtils.getIntOr("total", jsonObject4, 0);
dje2.page = JsonUtils.getIntOr("page", jsonObject4, 0);
dje2.size = JsonUtils.getIntOr("size", jsonObject4, 0);
dje2.total = JsonUtils.getIntOr("total", jsonObject4, 0);
}
catch (Exception exception3) {
WorldTemplatePaginatedList.LOGGER.error("Could not parse WorldTemplatePaginatedList: " + exception3.getMessage());
}
return worldTemplatePaginatedList2;
return dje2;
}
static {

View File

@ -1,6 +1,6 @@
package com.mojang.realmsclient.exception;
import net.minecraft.realms.RealmsScreen;
import net.minecraft.client.resources.language.I18n;
import com.mojang.realmsclient.client.RealmsError;
public class RealmsServiceException extends Exception {
@ -9,12 +9,12 @@ public class RealmsServiceException extends Exception {
public final int errorCode;
public final String errorMsg;
public RealmsServiceException(final int integer, final String string, final RealmsError cza) {
public RealmsServiceException(final int integer, final String string, final RealmsError dic) {
super(string);
this.httpResultCode = integer;
this.httpResponseContent = string;
this.errorCode = cza.getErrorCode();
this.errorMsg = cza.getErrorMessage();
this.errorCode = dic.getErrorCode();
this.errorMsg = dic.getErrorMessage();
}
public RealmsServiceException(final int integer1, final String string2, final int integer3, final String string4) {
@ -31,7 +31,7 @@ public class RealmsServiceException extends Exception {
return "Realms (" + this.httpResultCode + ") " + this.httpResponseContent;
}
final String string2 = "mco.errorMessage." + this.errorCode;
final String string3 = RealmsScreen.getLocalizedString(string2);
final String string3 = I18n.get(string2);
return (string3.equals(string2) ? this.errorMsg : string3) + " - " + this.errorCode;
}
}

View File

@ -1,69 +0,0 @@
package com.mojang.realmsclient.gui;
import java.util.function.Function;
import java.util.stream.Collectors;
import java.util.Arrays;
import java.util.Locale;
import java.util.regex.Pattern;
import java.util.Map;
public enum ChatFormatting {
BLACK('0'),
DARK_BLUE('1'),
DARK_GREEN('2'),
DARK_AQUA('3'),
DARK_RED('4'),
DARK_PURPLE('5'),
GOLD('6'),
GRAY('7'),
DARK_GRAY('8'),
BLUE('9'),
GREEN('a'),
AQUA('b'),
RED('c'),
LIGHT_PURPLE('d'),
YELLOW('e'),
WHITE('f'),
OBFUSCATED('k', true),
BOLD('l', true),
STRIKETHROUGH('m', true),
UNDERLINE('n', true),
ITALIC('o', true),
RESET('r');
private static final Map<Character, ChatFormatting> FORMATTING_BY_CHAR;
private static final Map<String, ChatFormatting> FORMATTING_BY_NAME;
private static final Pattern STRIP_FORMATTING_PATTERN;
private final char code;
private final boolean isFormat;
private final String toString;
private ChatFormatting(final char character) {
this(character, false);
}
private ChatFormatting(final char character, final boolean boolean4) {
this.code = character;
this.isFormat = boolean4;
this.toString = "§" + character;
}
public char getChar() {
return this.code;
}
public String getName() {
return this.name().toLowerCase(Locale.ROOT);
}
@Override
public String toString() {
return this.toString;
}
static {
FORMATTING_BY_CHAR = Arrays.<ChatFormatting>stream(values()).collect(Collectors.toMap(ChatFormatting::getChar, czi -> czi));
FORMATTING_BY_NAME = Arrays.<ChatFormatting>stream(values()).collect(Collectors.toMap(ChatFormatting::getName, czi -> czi));
STRIP_FORMATTING_PATTERN = Pattern.compile("(?i)§[0-9A-FK-OR]");
}
}

View File

@ -0,0 +1,12 @@
package com.mojang.realmsclient.gui;
import net.minecraft.network.chat.TextComponent;
import net.minecraft.network.chat.Component;
public interface ErrorCallback {
void error(final Component mr);
default void error(final String string) {
this.error(new TextComponent(string));
}
}

View File

@ -1,32 +0,0 @@
package com.mojang.realmsclient.gui;
import com.mojang.realmsclient.gui.screens.RealmsLongRunningMcoTaskScreen;
public abstract class LongRunningTask implements Runnable {
protected RealmsLongRunningMcoTaskScreen longRunningMcoTaskScreen;
public void setScreen(final RealmsLongRunningMcoTaskScreen czz) {
this.longRunningMcoTaskScreen = czz;
}
public void error(final String string) {
this.longRunningMcoTaskScreen.error(string);
}
public void setTitle(final String string) {
this.longRunningMcoTaskScreen.setTitle(string);
}
public boolean aborted() {
return this.longRunningMcoTaskScreen.aborted();
}
public void tick() {
}
public void init() {
}
public void abortTask() {
}
}

View File

@ -1,7 +0,0 @@
package com.mojang.realmsclient.gui;
public class RealmsConstants {
public static int row(final int integer) {
return 40 + integer * 13;
}
}

View File

@ -2,10 +2,10 @@ package com.mojang.realmsclient.gui;
import com.mojang.realmsclient.dto.RealmsNews;
import com.mojang.realmsclient.util.RealmsPersistence;
import java.util.Comparator;
import net.minecraft.client.Minecraft;
import com.mojang.realmsclient.client.RealmsClient;
import org.apache.logging.log4j.LogManager;
import java.util.Comparator;
import net.minecraft.realms.Realms;
import java.util.Iterator;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.ConcurrentHashMap;
@ -25,11 +25,11 @@ public class RealmsDataFetcher {
private static final Logger LOGGER;
private final ScheduledExecutorService scheduler;
private volatile boolean stopped;
private final ServerListUpdateTask serverListUpdateTask;
private final PendingInviteUpdateTask pendingInviteUpdateTask;
private final TrialAvailabilityTask trialAvailabilityTask;
private final LiveStatsTask liveStatsTask;
private final UnreadNewsTask unreadNewsTask;
private final Runnable serverListUpdateTask;
private final Runnable pendingInviteUpdateTask;
private final Runnable trialAvailabilityTask;
private final Runnable liveStatsTask;
private final Runnable unreadNewsTask;
private final Set<RealmsServer> removedServers;
private List<RealmsServer> servers;
private RealmsServerPlayerLists livestats;
@ -69,35 +69,16 @@ public class RealmsDataFetcher {
}
}
public synchronized void initWithSpecificTaskList(final List<Task> list) {
public synchronized void initWithSpecificTaskList() {
if (this.stopped) {
this.stopped = false;
this.cancelTasks();
for (final Task d4 : list) {
this.fetchStatus.put(d4, false);
switch (d4) {
case SERVER_LIST: {
this.serverListScheduledFuture = this.scheduler.scheduleAtFixedRate(this.serverListUpdateTask, 0L, 60L, TimeUnit.SECONDS);
continue;
}
case PENDING_INVITE: {
this.pendingInviteScheduledFuture = this.scheduler.scheduleAtFixedRate(this.pendingInviteUpdateTask, 0L, 10L, TimeUnit.SECONDS);
continue;
}
case TRIAL_AVAILABLE: {
this.trialAvailableScheduledFuture = this.scheduler.scheduleAtFixedRate(this.trialAvailabilityTask, 0L, 60L, TimeUnit.SECONDS);
continue;
}
case LIVE_STATS: {
this.liveStatsScheduledFuture = this.scheduler.scheduleAtFixedRate(this.liveStatsTask, 0L, 10L, TimeUnit.SECONDS);
continue;
}
case UNREAD_NEWS: {
this.unreadNewsScheduledFuture = this.scheduler.scheduleAtFixedRate(this.unreadNewsTask, 0L, 300L, TimeUnit.SECONDS);
continue;
}
}
}
this.fetchStatus.put(Task.PENDING_INVITE, false);
this.pendingInviteScheduledFuture = this.scheduler.scheduleAtFixedRate(this.pendingInviteUpdateTask, 0L, 10L, TimeUnit.SECONDS);
this.fetchStatus.put(Task.TRIAL_AVAILABLE, false);
this.trialAvailableScheduledFuture = this.scheduler.scheduleAtFixedRate(this.trialAvailabilityTask, 0L, 60L, TimeUnit.SECONDS);
this.fetchStatus.put(Task.UNREAD_NEWS, false);
this.unreadNewsScheduledFuture = this.scheduler.scheduleAtFixedRate(this.unreadNewsTask, 0L, 300L, TimeUnit.SECONDS);
}
}
@ -182,8 +163,8 @@ public class RealmsDataFetcher {
private synchronized void setServers(final List<RealmsServer> list) {
int integer3 = 0;
for (final RealmsServer realmsServer5 : this.removedServers) {
if (list.remove(realmsServer5)) {
for (final RealmsServer dip5 : this.removedServers) {
if (list.remove(dip5)) {
++integer3;
}
}
@ -193,13 +174,9 @@ public class RealmsDataFetcher {
this.servers = list;
}
public synchronized void removeItem(final RealmsServer realmsServer) {
this.servers.remove(realmsServer);
this.removedServers.add(realmsServer);
}
private void sort(final List<RealmsServer> list) {
list.sort(new RealmsServer.McoServerComparator(Realms.getName()));
public synchronized void removeItem(final RealmsServer dip) {
this.servers.remove(dip);
this.removedServers.add(dip);
}
private boolean isActive() {
@ -223,17 +200,15 @@ public class RealmsDataFetcher {
private void updateServersList() {
try {
final RealmsClient cyy2 = RealmsClient.createRealmsClient();
if (cyy2 != null) {
final List<RealmsServer> list3 = cyy2.listWorlds().servers;
if (list3 != null) {
RealmsDataFetcher.this.sort(list3);
RealmsDataFetcher.this.setServers(list3);
RealmsDataFetcher.this.fetchStatus.put(Task.SERVER_LIST, true);
}
else {
RealmsDataFetcher.LOGGER.warn("Realms server list was null or empty");
}
final RealmsClient dia2 = RealmsClient.create();
final List<RealmsServer> list3 = dia2.listWorlds().servers;
if (list3 != null) {
list3.sort(new RealmsServer.McoServerComparator(Minecraft.getInstance().getUser().getName()));
RealmsDataFetcher.this.setServers(list3);
RealmsDataFetcher.this.fetchStatus.put(Task.SERVER_LIST, true);
}
else {
RealmsDataFetcher.LOGGER.warn("Realms server list was null or empty");
}
}
catch (Exception exception2) {
@ -256,11 +231,9 @@ public class RealmsDataFetcher {
private void updatePendingInvites() {
try {
final RealmsClient cyy2 = RealmsClient.createRealmsClient();
if (cyy2 != null) {
RealmsDataFetcher.this.pendingInvitesCount = cyy2.pendingInvitesCount();
RealmsDataFetcher.this.fetchStatus.put(Task.PENDING_INVITE, true);
}
final RealmsClient dia2 = RealmsClient.create();
RealmsDataFetcher.this.pendingInvitesCount = dia2.pendingInvitesCount();
RealmsDataFetcher.this.fetchStatus.put(Task.PENDING_INVITE, true);
}
catch (Exception exception2) {
RealmsDataFetcher.LOGGER.error("Couldn't get pending invite count", (Throwable)exception2);
@ -281,11 +254,9 @@ public class RealmsDataFetcher {
private void getTrialAvailable() {
try {
final RealmsClient cyy2 = RealmsClient.createRealmsClient();
if (cyy2 != null) {
RealmsDataFetcher.this.trialAvailable = cyy2.trialAvailable();
RealmsDataFetcher.this.fetchStatus.put(Task.TRIAL_AVAILABLE, true);
}
final RealmsClient dia2 = RealmsClient.create();
RealmsDataFetcher.this.trialAvailable = dia2.trialAvailable();
RealmsDataFetcher.this.fetchStatus.put(Task.TRIAL_AVAILABLE, true);
}
catch (Exception exception2) {
RealmsDataFetcher.LOGGER.error("Couldn't get trial availability", (Throwable)exception2);
@ -306,11 +277,9 @@ public class RealmsDataFetcher {
private void getLiveStats() {
try {
final RealmsClient cyy2 = RealmsClient.createRealmsClient();
if (cyy2 != null) {
RealmsDataFetcher.this.livestats = cyy2.getLiveStats();
RealmsDataFetcher.this.fetchStatus.put(Task.LIVE_STATS, true);
}
final RealmsClient dia2 = RealmsClient.create();
RealmsDataFetcher.this.livestats = dia2.getLiveStats();
RealmsDataFetcher.this.fetchStatus.put(Task.LIVE_STATS, true);
}
catch (Exception exception2) {
RealmsDataFetcher.LOGGER.error("Couldn't get live stats", (Throwable)exception2);
@ -331,26 +300,24 @@ public class RealmsDataFetcher {
private void getUnreadNews() {
try {
final RealmsClient cyy2 = RealmsClient.createRealmsClient();
if (cyy2 != null) {
RealmsNews realmsNews3 = null;
try {
realmsNews3 = cyy2.getNews();
}
catch (Exception ex) {}
final RealmsPersistence.RealmsPersistenceData a4 = RealmsPersistence.readFile();
if (realmsNews3 != null) {
final String string5 = realmsNews3.newsLink;
if (string5 != null && !string5.equals(a4.newsLink)) {
a4.hasUnreadNews = true;
a4.newsLink = string5;
RealmsPersistence.writeFile(a4);
}
}
RealmsDataFetcher.this.hasUnreadNews = a4.hasUnreadNews;
RealmsDataFetcher.this.newsLink = a4.newsLink;
RealmsDataFetcher.this.fetchStatus.put(Task.UNREAD_NEWS, true);
final RealmsClient dia2 = RealmsClient.create();
RealmsNews dio3 = null;
try {
dio3 = dia2.getNews();
}
catch (Exception ex) {}
final RealmsPersistence.RealmsPersistenceData a4 = RealmsPersistence.readFile();
if (dio3 != null) {
final String string5 = dio3.newsLink;
if (string5 != null && !string5.equals(a4.newsLink)) {
a4.hasUnreadNews = true;
a4.newsLink = string5;
RealmsPersistence.writeFile(a4);
}
}
RealmsDataFetcher.this.hasUnreadNews = a4.hasUnreadNews;
RealmsDataFetcher.this.newsLink = a4.newsLink;
RealmsDataFetcher.this.fetchStatus.put(Task.UNREAD_NEWS, true);
}
catch (Exception exception2) {
RealmsDataFetcher.LOGGER.error("Couldn't get unread news", (Throwable)exception2);

View File

@ -1,48 +1,58 @@
package com.mojang.realmsclient.gui;
import net.minecraft.realms.RealmsScreen;
import net.minecraft.client.renderer.texture.TextureManager;
import net.minecraft.client.gui.GuiComponent;
import com.mojang.blaze3d.systems.RenderSystem;
import net.minecraft.realms.RealmsMth;
import net.minecraft.util.Mth;
import com.mojang.realmsclient.util.RealmsTextureManager;
import net.minecraft.realms.RealmsButtonProxy;
import net.minecraft.realms.Realms;
import net.minecraft.client.Minecraft;
import com.mojang.blaze3d.vertex.PoseStack;
import net.minecraft.network.chat.TranslatableComponent;
import com.mojang.datafixers.util.Pair;
import com.mojang.realmsclient.dto.RealmsWorldOptions;
import net.minecraft.network.chat.TextComponent;
import javax.annotation.Nullable;
import net.minecraft.network.chat.Component;
import java.util.function.Consumer;
import com.mojang.realmsclient.dto.RealmsServer;
import java.util.function.Supplier;
import net.minecraft.realms.RealmsButton;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.client.gui.components.TickableWidget;
import net.minecraft.client.gui.components.Button;
public class RealmsWorldSlotButton extends RealmsButton {
public class RealmsWorldSlotButton extends Button implements TickableWidget {
public static final ResourceLocation SLOT_FRAME_LOCATION;
public static final ResourceLocation EMPTY_SLOT_LOCATION;
public static final ResourceLocation DEFAULT_WORLD_SLOT_1;
public static final ResourceLocation DEFAULT_WORLD_SLOT_2;
public static final ResourceLocation DEFAULT_WORLD_SLOT_3;
private final Supplier<RealmsServer> serverDataProvider;
private final Consumer<String> toolTipSetter;
private final Listener listener;
private final Consumer<Component> toolTipSetter;
private final int slotIndex;
private int animTick;
@Nullable
private State state;
public RealmsWorldSlotButton(final int integer1, final int integer2, final int integer3, final int integer4, final Supplier<RealmsServer> supplier, final Consumer<String> consumer, final int integer7, final int integer8, final Listener b) {
super(integer7, integer1, integer2, integer3, integer4, "");
public RealmsWorldSlotButton(final int integer1, final int integer2, final int integer3, final int integer4, final Supplier<RealmsServer> supplier, final Consumer<Component> consumer, final int integer7, final OnPress a) {
super(integer1, integer2, integer3, integer4, TextComponent.EMPTY, a);
this.serverDataProvider = supplier;
this.slotIndex = integer8;
this.slotIndex = integer7;
this.toolTipSetter = consumer;
this.listener = b;
}
@Override
public void render(final int integer1, final int integer2, final float float3) {
super.render(integer1, integer2, float3);
@Nullable
public State getState() {
return this.state;
}
@Override
public void tick() {
++this.animTick;
final RealmsServer realmsServer2 = this.serverDataProvider.get();
if (realmsServer2 == null) {
final RealmsServer dip2 = this.serverDataProvider.get();
if (dip2 == null) {
return;
}
final RealmsWorldOptions realmsWorldOptions5 = realmsServer2.slots.get(this.slotIndex);
final RealmsWorldOptions div5 = dip2.slots.get(this.slotIndex);
final boolean boolean10 = this.slotIndex == 4;
boolean boolean11;
String string4;
@ -50,123 +60,131 @@ public class RealmsWorldSlotButton extends RealmsButton {
String string5;
boolean boolean12;
if (boolean10) {
boolean11 = realmsServer2.worldType.equals(RealmsServer.WorldType.MINIGAME);
boolean11 = (dip2.worldType == RealmsServer.WorldType.MINIGAME);
string4 = "Minigame";
long6 = realmsServer2.minigameId;
string5 = realmsServer2.minigameImage;
boolean12 = (realmsServer2.minigameId == -1);
long6 = dip2.minigameId;
string5 = dip2.minigameImage;
boolean12 = (dip2.minigameId == -1);
}
else {
boolean11 = (realmsServer2.activeSlot == this.slotIndex && !realmsServer2.worldType.equals(RealmsServer.WorldType.MINIGAME));
string4 = realmsWorldOptions5.getSlotName(this.slotIndex);
long6 = realmsWorldOptions5.templateId;
string5 = realmsWorldOptions5.templateImage;
boolean12 = realmsWorldOptions5.empty;
boolean11 = (dip2.activeSlot == this.slotIndex && dip2.worldType != RealmsServer.WorldType.MINIGAME);
string4 = div5.getSlotName(this.slotIndex);
long6 = div5.templateId;
string5 = div5.templateImage;
boolean12 = div5.empty;
}
String string6 = null;
Action a11;
if (boolean11) {
final boolean boolean13 = realmsServer2.state == RealmsServer.State.OPEN || realmsServer2.state == RealmsServer.State.CLOSED;
if (realmsServer2.expired || !boolean13) {
a11 = Action.NOTHING;
}
else {
a11 = Action.JOIN;
string6 = Realms.getLocalizedString("mco.configure.world.slot.tooltip.active");
}
}
else if (boolean10) {
if (realmsServer2.expired) {
a11 = Action.NOTHING;
}
else {
a11 = Action.SWITCH_SLOT;
string6 = Realms.getLocalizedString("mco.configure.world.slot.tooltip.minigame");
final Action a11 = getAction(dip2, boolean11, boolean10);
final Pair<Component, Component> pair12 = this.getTooltipAndNarration(dip2, string4, boolean12, boolean10, a11);
this.state = new State(boolean11, string4, long6, string5, boolean12, boolean10, a11, (Component)pair12.getFirst());
this.setMessage((Component)pair12.getSecond());
}
private static Action getAction(final RealmsServer dip, final boolean boolean2, final boolean boolean3) {
if (boolean2) {
if (!dip.expired && dip.state != RealmsServer.State.UNINITIALIZED) {
return Action.JOIN;
}
}
else {
a11 = Action.SWITCH_SLOT;
string6 = Realms.getLocalizedString("mco.configure.world.slot.tooltip");
if (!boolean3) {
return Action.SWITCH_SLOT;
}
if (!dip.expired) {
return Action.SWITCH_SLOT;
}
}
this.state = new State(boolean11, string4, long6, string5, boolean12, boolean10, a11, string6);
String string7;
if (a11 == Action.NOTHING) {
string7 = string4;
return Action.NOTHING;
}
private Pair<Component, Component> getTooltipAndNarration(final RealmsServer dip, final String string, final boolean boolean3, final boolean boolean4, final Action a) {
if (a == Action.NOTHING) {
return (Pair<Component, Component>)Pair.of(null, new TextComponent(string));
}
else if (boolean10) {
if (boolean12) {
string7 = string6;
Component mr7;
if (boolean4) {
if (boolean3) {
mr7 = TextComponent.EMPTY;
}
else {
string7 = string6 + " " + string4 + " " + realmsServer2.minigameName;
mr7 = new TextComponent(" ").append(string).append(" ").append(dip.minigameName);
}
}
else {
string7 = string6 + " " + string4;
mr7 = new TextComponent(" ").append(string);
}
this.setMessage(string7);
Component mr8;
if (a == Action.JOIN) {
mr8 = new TranslatableComponent("mco.configure.world.slot.tooltip.active");
}
else {
mr8 = (boolean4 ? new TranslatableComponent("mco.configure.world.slot.tooltip.minigame") : new TranslatableComponent("mco.configure.world.slot.tooltip"));
}
final Component mr9 = mr8.copy().append(mr7);
return (Pair<Component, Component>)Pair.of(mr8, mr9);
}
@Override
public void renderButton(final int integer1, final int integer2, final float float3) {
public void renderButton(final PoseStack dhl, final int integer2, final int integer3, final float float4) {
if (this.state == null) {
return;
}
final RealmsButtonProxy realmsButtonProxy5 = this.getProxy();
this.drawSlotFrame(realmsButtonProxy5.x, realmsButtonProxy5.y, integer1, integer2, this.state.isCurrentlyActiveSlot, this.state.slotName, this.slotIndex, this.state.imageId, this.state.image, this.state.empty, this.state.minigame, this.state.action, this.state.actionPrompt);
this.drawSlotFrame(dhl, this.x, this.y, integer2, integer3, this.state.isCurrentlyActiveSlot, this.state.slotName, this.slotIndex, this.state.imageId, this.state.image, this.state.empty, this.state.minigame, this.state.action, this.state.actionPrompt);
}
private void drawSlotFrame(final int integer1, final int integer2, final int integer3, final int integer4, final boolean boolean5, final String string6, final int integer7, final long long8, @Nullable final String string9, final boolean boolean10, final boolean boolean11, final Action a, @Nullable final String string13) {
final boolean boolean12 = this.getProxy().isHovered();
if (this.getProxy().isMouseOver(integer3, integer4) && string13 != null) {
this.toolTipSetter.accept(string13);
private void drawSlotFrame(final PoseStack dhl, final int integer2, final int integer3, final int integer4, final int integer5, final boolean boolean6, final String string7, final int integer8, final long long9, @Nullable final String string10, final boolean boolean11, final boolean boolean12, final Action a, @Nullable final Component mr) {
final boolean boolean13 = this.isHovered();
if (this.isMouseOver(integer4, integer5) && mr != null) {
this.toolTipSetter.accept(mr);
}
if (boolean11) {
RealmsTextureManager.bindWorldTemplate(String.valueOf(long8), string9);
final Minecraft dlx18 = Minecraft.getInstance();
final TextureManager elw19 = dlx18.getTextureManager();
if (boolean12) {
RealmsTextureManager.bindWorldTemplate(String.valueOf(long9), string10);
}
else if (boolean10) {
Realms.bind("realms:textures/gui/realms/empty_frame.png");
else if (boolean11) {
elw19.bind(RealmsWorldSlotButton.EMPTY_SLOT_LOCATION);
}
else if (string9 != null && long8 != -1L) {
RealmsTextureManager.bindWorldTemplate(String.valueOf(long8), string9);
else if (string10 != null && long9 != -1L) {
RealmsTextureManager.bindWorldTemplate(String.valueOf(long9), string10);
}
else if (integer7 == 1) {
Realms.bind("textures/gui/title/background/panorama_0.png");
else if (integer8 == 1) {
elw19.bind(RealmsWorldSlotButton.DEFAULT_WORLD_SLOT_1);
}
else if (integer7 == 2) {
Realms.bind("textures/gui/title/background/panorama_2.png");
else if (integer8 == 2) {
elw19.bind(RealmsWorldSlotButton.DEFAULT_WORLD_SLOT_2);
}
else if (integer7 == 3) {
Realms.bind("textures/gui/title/background/panorama_3.png");
else if (integer8 == 3) {
elw19.bind(RealmsWorldSlotButton.DEFAULT_WORLD_SLOT_3);
}
if (boolean5) {
final float float17 = 0.85f + 0.15f * RealmsMth.cos(this.animTick * 0.2f);
RenderSystem.color4f(float17, float17, float17, 1.0f);
if (boolean6) {
final float float20 = 0.85f + 0.15f * Mth.cos(this.animTick * 0.2f);
RenderSystem.color4f(float20, float20, float20, 1.0f);
}
else {
RenderSystem.color4f(0.56f, 0.56f, 0.56f, 1.0f);
}
RealmsScreen.blit(integer1 + 3, integer2 + 3, 0.0f, 0.0f, 74, 74, 74, 74);
Realms.bind("realms:textures/gui/realms/slot_frame.png");
final boolean boolean13 = boolean12 && a != Action.NOTHING;
if (boolean13) {
GuiComponent.blit(dhl, integer2 + 3, integer3 + 3, 0.0f, 0.0f, 74, 74, 74, 74);
elw19.bind(RealmsWorldSlotButton.SLOT_FRAME_LOCATION);
final boolean boolean14 = boolean13 && a != Action.NOTHING;
if (boolean14) {
RenderSystem.color4f(1.0f, 1.0f, 1.0f, 1.0f);
}
else if (boolean5) {
else if (boolean6) {
RenderSystem.color4f(0.8f, 0.8f, 0.8f, 1.0f);
}
else {
RenderSystem.color4f(0.56f, 0.56f, 0.56f, 1.0f);
}
RealmsScreen.blit(integer1, integer2, 0.0f, 0.0f, 80, 80, 80, 80);
this.drawCenteredString(string6, integer1 + 40, integer2 + 66, 16777215);
GuiComponent.blit(dhl, integer2, integer3, 0.0f, 0.0f, 80, 80, 80, 80);
this.drawCenteredString(dhl, dlx18.font, string7, integer2 + 40, integer3 + 66, 16777215);
}
@Override
public void onPress() {
if (this.state != null) {
this.listener.onSlotClick(this.slotIndex, this.state.action, this.state.minigame, this.state.empty);
}
static {
SLOT_FRAME_LOCATION = new ResourceLocation("realms", "textures/gui/realms/slot_frame.png");
EMPTY_SLOT_LOCATION = new ResourceLocation("realms", "textures/gui/realms/empty_frame.png");
DEFAULT_WORLD_SLOT_1 = new ResourceLocation("minecraft", "textures/gui/title/background/panorama_0.png");
DEFAULT_WORLD_SLOT_2 = new ResourceLocation("minecraft", "textures/gui/title/background/panorama_2.png");
DEFAULT_WORLD_SLOT_3 = new ResourceLocation("minecraft", "textures/gui/title/background/panorama_3.png");
}
public enum Action {
@ -176,16 +194,17 @@ public class RealmsWorldSlotButton extends RealmsButton {
}
public static class State {
final boolean isCurrentlyActiveSlot;
final String slotName;
final long imageId;
public final String image;
private final boolean isCurrentlyActiveSlot;
private final String slotName;
private final long imageId;
private final String image;
public final boolean empty;
final boolean minigame;
public final boolean minigame;
public final Action action;
final String actionPrompt;
@Nullable
private final Component actionPrompt;
State(final boolean boolean1, final String string2, final long long3, @Nullable final String string4, final boolean boolean5, final boolean boolean6, final Action a, @Nullable final String string8) {
State(final boolean boolean1, final String string2, final long long3, @Nullable final String string4, final boolean boolean5, final boolean boolean6, final Action a, @Nullable final Component mr) {
this.isCurrentlyActiveSlot = boolean1;
this.slotName = string2;
this.imageId = long3;
@ -193,11 +212,7 @@ public class RealmsWorldSlotButton extends RealmsButton {
this.empty = boolean5;
this.minigame = boolean6;
this.action = a;
this.actionPrompt = string8;
this.actionPrompt = mr;
}
}
public interface Listener {
void onSlotClick(final int integer, final Action a, final boolean boolean3, final boolean boolean4);
}
}

View File

@ -1,9 +1,10 @@
package com.mojang.realmsclient.gui;
import net.minecraft.realms.RealmListEntry;
import net.minecraft.client.gui.components.ObjectSelectionList;
import java.util.Iterator;
import net.minecraft.realms.RealmsObjectSelectionList;
import java.util.List;
import com.mojang.blaze3d.vertex.PoseStack;
public abstract class RowButton {
public final int width;
@ -18,17 +19,17 @@ public abstract class RowButton {
this.yOffset = integer4;
}
public void drawForRowAt(final int integer1, final int integer2, final int integer3, final int integer4) {
final int integer5 = integer1 + this.xOffset;
final int integer6 = integer2 + this.yOffset;
boolean boolean8 = false;
if (integer3 >= integer5 && integer3 <= integer5 + this.width && integer4 >= integer6 && integer4 <= integer6 + this.height) {
boolean8 = true;
public void drawForRowAt(final PoseStack dhl, final int integer2, final int integer3, final int integer4, final int integer5) {
final int integer6 = integer2 + this.xOffset;
final int integer7 = integer3 + this.yOffset;
boolean boolean9 = false;
if (integer4 >= integer6 && integer4 <= integer6 + this.width && integer5 >= integer7 && integer5 <= integer7 + this.height) {
boolean9 = true;
}
this.draw(integer5, integer6, boolean8);
this.draw(dhl, integer6, integer7, boolean9);
}
protected abstract void draw(final int integer1, final int integer2, final boolean boolean3);
protected abstract void draw(final PoseStack dhl, final int integer2, final int integer3, final boolean boolean4);
public int getRight() {
return this.xOffset + this.width;
@ -40,26 +41,26 @@ public abstract class RowButton {
public abstract void onClick(final int integer);
public static void drawButtonsInRow(final List<RowButton> list, final RealmsObjectSelectionList realmsObjectSelectionList, final int integer3, final int integer4, final int integer5, final int integer6) {
for (final RowButton czn8 : list) {
if (realmsObjectSelectionList.getRowWidth() > czn8.getRight()) {
czn8.drawForRowAt(integer3, integer4, integer5, integer6);
public static void drawButtonsInRow(final PoseStack dhl, final List<RowButton> list, final RealmsObjectSelectionList<?> eqg, final int integer4, final int integer5, final int integer6, final int integer7) {
for (final RowButton djm9 : list) {
if (eqg.getRowWidth() > djm9.getRight()) {
djm9.drawForRowAt(dhl, integer4, integer5, integer6, integer7);
}
}
}
public static void rowButtonMouseClicked(final RealmsObjectSelectionList realmsObjectSelectionList, final RealmListEntry realmListEntry, final List<RowButton> list, final int integer, final double double5, final double double6) {
public static void rowButtonMouseClicked(final RealmsObjectSelectionList<?> eqg, final ObjectSelectionList.Entry<?> a, final List<RowButton> list, final int integer, final double double5, final double double6) {
if (integer == 0) {
final int integer2 = realmsObjectSelectionList.children().indexOf(realmListEntry);
final int integer2 = eqg.children().indexOf(a);
if (integer2 > -1) {
realmsObjectSelectionList.selectItem(integer2);
final int integer3 = realmsObjectSelectionList.getRowLeft();
final int integer4 = realmsObjectSelectionList.getRowTop(integer2);
eqg.selectItem(integer2);
final int integer3 = eqg.getRowLeft();
final int integer4 = eqg.getRowTop(integer2);
final int integer5 = (int)(double5 - integer3);
final int integer6 = (int)(double6 - integer4);
for (final RowButton czn15 : list) {
if (integer5 >= czn15.xOffset && integer5 <= czn15.getRight() && integer6 >= czn15.yOffset && integer6 <= czn15.getBottom()) {
czn15.onClick(integer2);
for (final RowButton djm15 : list) {
if (integer5 >= djm15.xOffset && integer5 <= djm15.getRight() && integer6 >= djm15.yOffset && integer6 <= djm15.getBottom()) {
djm15.onClick(integer2);
}
}
}

View File

@ -1,81 +1,64 @@
package com.mojang.realmsclient.gui.screens;
import net.minecraft.realms.Tezzelator;
import net.minecraft.realms.RealmsSimpleScrolledSelectionList;
import net.minecraft.client.gui.Font;
import net.minecraft.network.chat.FormattedText;
import net.minecraft.client.gui.components.ObjectSelectionList;
import net.minecraft.client.Minecraft;
import net.minecraft.network.chat.TextComponent;
import java.util.Locale;
import net.minecraft.realms.RealmsGuiEventListener;
import net.minecraft.realms.AbstractRealmsButton;
import net.minecraft.realms.Realms;
import net.minecraft.realms.RealmsButton;
import java.util.Iterator;
import java.util.Map;
import com.google.common.collect.Lists;
import java.util.List;
import net.minecraft.network.chat.Component;
import com.mojang.blaze3d.vertex.PoseStack;
import net.minecraft.client.gui.components.events.GuiEventListener;
import net.minecraft.client.gui.components.Button;
import net.minecraft.network.chat.CommonComponents;
import com.mojang.realmsclient.dto.Backup;
import net.minecraft.client.gui.screens.Screen;
import net.minecraft.realms.RealmsScreen;
public class RealmsBackupInfoScreen extends RealmsScreen {
private final RealmsScreen lastScreen;
private final int BUTTON_BACK_ID = 0;
private final Screen lastScreen;
private final Backup backup;
private final List<String> keys;
private BackupInfoList backupInfoList;
String[] difficulties;
String[] gameModes;
public RealmsBackupInfoScreen(final RealmsScreen realmsScreen, final Backup backup) {
this.keys = Lists.newArrayList();
this.difficulties = new String[] { RealmsScreen.getLocalizedString("options.difficulty.peaceful"), RealmsScreen.getLocalizedString("options.difficulty.easy"), RealmsScreen.getLocalizedString("options.difficulty.normal"), RealmsScreen.getLocalizedString("options.difficulty.hard") };
this.gameModes = new String[] { RealmsScreen.getLocalizedString("selectWorld.gameMode.survival"), RealmsScreen.getLocalizedString("selectWorld.gameMode.creative"), RealmsScreen.getLocalizedString("selectWorld.gameMode.adventure") };
this.lastScreen = realmsScreen;
this.backup = backup;
if (backup.changeList != null) {
for (final Map.Entry<String, String> entry5 : backup.changeList.entrySet()) {
this.keys.add(entry5.getKey());
}
}
public RealmsBackupInfoScreen(final Screen dqs, final Backup dif) {
this.lastScreen = dqs;
this.backup = dif;
}
@Override
public void tick() {
}
@Override
public void init() {
this.setKeyboardHandlerSendRepeatsToGui(true);
this.buttonsAdd(new RealmsButton(0, this.width() / 2 - 100, this.height() / 4 + 120 + 24, RealmsScreen.getLocalizedString("gui.back")) {
@Override
public void onPress() {
Realms.setScreen(RealmsBackupInfoScreen.this.lastScreen);
}
});
this.addWidget(this.backupInfoList = new BackupInfoList());
this.focusOn(this.backupInfoList);
this.minecraft.keyboardHandler.setSendRepeatsToGui(true);
this.<Button>addButton(new Button(this.width / 2 - 100, this.height / 4 + 120 + 24, 200, 20, CommonComponents.GUI_BACK, dni -> this.minecraft.setScreen(this.lastScreen)));
this.<BackupInfoList>addWidget(this.backupInfoList = new BackupInfoList(this.minecraft));
this.magicalSpecialHackyFocus(this.backupInfoList);
}
@Override
public void removed() {
this.setKeyboardHandlerSendRepeatsToGui(false);
this.minecraft.keyboardHandler.setSendRepeatsToGui(false);
}
@Override
public boolean keyPressed(final int integer1, final int integer2, final int integer3) {
if (integer1 == 256) {
Realms.setScreen(this.lastScreen);
this.minecraft.setScreen(this.lastScreen);
return true;
}
return super.keyPressed(integer1, integer2, integer3);
}
@Override
public void render(final int integer1, final int integer2, final float float3) {
this.renderBackground();
this.drawCenteredString("Changes from last backup", this.width() / 2, 10, 16777215);
this.backupInfoList.render(integer1, integer2, float3);
super.render(integer1, integer2, float3);
public void render(final PoseStack dhl, final int integer2, final int integer3, final float float4) {
this.renderBackground(dhl);
this.drawCenteredString(dhl, this.font, "Changes from last backup", this.width / 2, 10, 16777215);
this.backupInfoList.render(dhl, integer2, integer3, float4);
super.render(dhl, integer2, integer3, float4);
}
private String checkForSpecificMetadata(final String string1, final String string2) {
private Component checkForSpecificMetadata(final String string1, final String string2) {
final String string3 = string1.toLowerCase(Locale.ROOT);
if (string3.contains("game") && string3.contains("mode")) {
return this.gameModeMetadata(string2);
@ -83,56 +66,51 @@ public class RealmsBackupInfoScreen extends RealmsScreen {
if (string3.contains("game") && string3.contains("difficulty")) {
return this.gameDifficultyMetadata(string2);
}
return string2;
return new TextComponent(string2);
}
private String gameDifficultyMetadata(final String string) {
private Component gameDifficultyMetadata(final String string) {
try {
return this.difficulties[Integer.parseInt(string)];
return RealmsSlotOptionsScreen.DIFFICULTIES[Integer.parseInt(string)];
}
catch (Exception exception3) {
return "UNKNOWN";
return new TextComponent("UNKNOWN");
}
}
private String gameModeMetadata(final String string) {
private Component gameModeMetadata(final String string) {
try {
return this.gameModes[Integer.parseInt(string)];
return RealmsSlotOptionsScreen.GAME_MODES[Integer.parseInt(string)];
}
catch (Exception exception3) {
return "UNKNOWN";
return new TextComponent("UNKNOWN");
}
}
class BackupInfoList extends RealmsSimpleScrolledSelectionList {
public BackupInfoList() {
super(RealmsBackupInfoScreen.this.width(), RealmsBackupInfoScreen.this.height(), 32, RealmsBackupInfoScreen.this.height() - 64, 36);
class BackupInfoListEntry extends ObjectSelectionList.Entry<BackupInfoListEntry> {
private final String key;
private final String value;
public BackupInfoListEntry(final String string2, final String string3) {
this.key = string2;
this.value = string3;
}
@Override
public int getItemCount() {
return RealmsBackupInfoScreen.this.backup.changeList.size();
public void render(final PoseStack dhl, final int integer2, final int integer3, final int integer4, final int integer5, final int integer6, final int integer7, final int integer8, final boolean boolean9, final float float10) {
final Font dmt12 = RealmsBackupInfoScreen.this.minecraft.font;
RealmsBackupInfoScreen.this.drawString(dhl, dmt12, this.key, integer4, integer3, 10526880);
RealmsBackupInfoScreen.this.drawString(dhl, dmt12, RealmsBackupInfoScreen.this.checkForSpecificMetadata(this.key, this.value), integer4, integer3 + 12, 16777215);
}
@Override
public boolean isSelectedItem(final int integer) {
return false;
}
@Override
public int getMaxPosition() {
return this.getItemCount() * 36;
}
@Override
public void renderBackground() {
}
public void renderItem(final int integer1, final int integer2, final int integer3, final int integer4, final Tezzelator tezzelator, final int integer6, final int integer7) {
final String string9 = RealmsBackupInfoScreen.this.keys.get(integer1);
RealmsBackupInfoScreen.this.drawString(string9, this.width() / 2 - 40, integer3, 10526880);
final String string10 = RealmsBackupInfoScreen.this.backup.changeList.get(string9);
RealmsBackupInfoScreen.this.drawString(RealmsBackupInfoScreen.this.checkForSpecificMetadata(string9, string10), this.width() / 2 - 40, integer3 + 12, 16777215);
}
class BackupInfoList extends ObjectSelectionList<BackupInfoListEntry> {
public BackupInfoList(final Minecraft dlx) {
super(dlx, RealmsBackupInfoScreen.this.width, RealmsBackupInfoScreen.this.height, 32, RealmsBackupInfoScreen.this.height - 64, 36);
this.setRenderSelection(false);
if (RealmsBackupInfoScreen.this.backup.changeList != null) {
RealmsBackupInfoScreen.this.backup.changeList.forEach((string1, string2) -> this.addEntry(new BackupInfoListEntry(string1, string2)));
}
}
}
}

View File

@ -1,34 +1,46 @@
package com.mojang.realmsclient.gui.screens;
import net.minecraft.client.gui.GuiComponent;
import com.mojang.blaze3d.systems.RenderSystem;
import net.minecraft.realms.RealmListEntry;
import net.minecraft.client.gui.components.ObjectSelectionList;
import net.minecraft.client.gui.components.AbstractSelectionList;
import javax.annotation.Nullable;
import net.minecraft.realms.NarrationHelper;
import net.minecraft.realms.RealmsObjectSelectionList;
import org.apache.logging.log4j.LogManager;
import com.mojang.realmsclient.gui.LongRunningTask;
import com.mojang.realmsclient.util.RealmsTasks;
import net.minecraft.client.gui.Font;
import net.minecraft.client.Minecraft;
import net.minecraft.client.resources.language.I18n;
import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.realmsclient.util.task.RestoreTask;
import com.mojang.realmsclient.util.task.LongRunningTask;
import com.mojang.realmsclient.util.task.DownloadTask;
import com.mojang.realmsclient.dto.RealmsWorldOptions;
import java.util.Date;
import net.minecraft.realms.RealmsConfirmResultListener;
import com.mojang.realmsclient.util.RealmsUtil;
import net.minecraft.realms.RealmsGuiEventListener;
import net.minecraft.realms.AbstractRealmsButton;
import com.mojang.realmsclient.gui.RealmsConstants;
import java.text.DateFormat;
import net.minecraft.client.gui.components.events.GuiEventListener;
import net.minecraft.network.chat.CommonComponents;
import net.minecraft.client.gui.screens.Screen;
import net.minecraft.network.chat.Component;
import net.minecraft.network.chat.TranslatableComponent;
import java.util.Iterator;
import com.mojang.realmsclient.exception.RealmsServiceException;
import net.minecraft.realms.Realms;
import com.mojang.realmsclient.client.RealmsClient;
import java.util.Collections;
import net.minecraft.realms.RealmsLabel;
import com.mojang.realmsclient.dto.RealmsServer;
import net.minecraft.realms.RealmsButton;
import net.minecraft.client.gui.components.Button;
import com.mojang.realmsclient.dto.Backup;
import java.util.List;
import net.minecraft.resources.ResourceLocation;
import org.apache.logging.log4j.Logger;
import net.minecraft.realms.RealmsScreen;
public class RealmsBackupScreen extends RealmsScreen {
private static final Logger LOGGER;
private static final ResourceLocation PLUS_ICON_LOCATION;
private static final ResourceLocation RESTORE_ICON_LOCATION;
private static int lastScrollPosition;
private final RealmsConfigureWorldScreen lastScreen;
private List<Backup> backups;
@ -36,55 +48,66 @@ public class RealmsBackupScreen extends RealmsScreen {
private BackupObjectSelectionList backupObjectSelectionList;
private int selectedBackup;
private final int slotId;
private RealmsButton downloadButton;
private RealmsButton restoreButton;
private RealmsButton changesButton;
private Button downloadButton;
private Button restoreButton;
private Button changesButton;
private Boolean noBackups;
private final RealmsServer serverData;
private RealmsLabel titleLabel;
public RealmsBackupScreen(final RealmsConfigureWorldScreen czs, final RealmsServer realmsServer, final int integer) {
public RealmsBackupScreen(final RealmsConfigureWorldScreen djr, final RealmsServer dip, final int integer) {
this.backups = Collections.<Backup>emptyList();
this.selectedBackup = -1;
this.noBackups = false;
this.lastScreen = czs;
this.serverData = realmsServer;
this.lastScreen = djr;
this.serverData = dip;
this.slotId = integer;
}
@Override
public void init() {
this.setKeyboardHandlerSendRepeatsToGui(true);
this.minecraft.keyboardHandler.setSendRepeatsToGui(true);
this.backupObjectSelectionList = new BackupObjectSelectionList();
if (RealmsBackupScreen.lastScrollPosition != -1) {
this.backupObjectSelectionList.scroll(RealmsBackupScreen.lastScrollPosition);
this.backupObjectSelectionList.setScrollAmount(RealmsBackupScreen.lastScrollPosition);
}
new Thread("Realms-fetch-backups") {
@Override
public void run() {
final RealmsClient cyy2 = RealmsClient.createRealmsClient();
final RealmsClient dia2 = RealmsClient.create();
try {
final List<Backup> list3 = cyy2.backupsFor(RealmsBackupScreen.this.serverData.id).backups;
final List<Backup> list3 = dia2.backupsFor(RealmsBackupScreen.this.serverData.id).backups;
final Iterator<Backup> iterator;
Backup backup4;
Realms.execute(() -> {
Backup dif4;
RealmsBackupScreen.this.minecraft.execute(() -> {
RealmsBackupScreen.this.backups = list3;
RealmsBackupScreen.this.noBackups = RealmsBackupScreen.this.backups.isEmpty();
RealmsBackupScreen.this.backupObjectSelectionList.clear();
RealmsBackupScreen.this.backups.iterator();
while (iterator.hasNext()) {
backup4 = iterator.next();
RealmsBackupScreen.this.backupObjectSelectionList.addEntry(backup4);
dif4 = iterator.next();
RealmsBackupScreen.this.backupObjectSelectionList.addEntry(dif4);
}
RealmsBackupScreen.this.generateChangeList();
});
}
catch (RealmsServiceException czg3) {
RealmsBackupScreen.LOGGER.error("Couldn't request backups", (Throwable)czg3);
catch (RealmsServiceException djh3) {
RealmsBackupScreen.LOGGER.error("Couldn't request backups", (Throwable)djh3);
}
}
}.start();
this.postInit();
this.downloadButton = this.<Button>addButton(new Button(this.width - 135, RealmsScreen.row(1), 120, 20, new TranslatableComponent("mco.backup.button.download"), dni -> this.downloadClicked()));
this.restoreButton = this.<Button>addButton(new Button(this.width - 135, RealmsScreen.row(3), 120, 20, new TranslatableComponent("mco.backup.button.restore"), dni -> this.restoreClicked(this.selectedBackup)));
this.changesButton = this.<Button>addButton(new Button(this.width - 135, RealmsScreen.row(5), 120, 20, new TranslatableComponent("mco.backup.changes.tooltip"), dni -> {
this.minecraft.setScreen(new RealmsBackupInfoScreen(this, this.backups.get(this.selectedBackup)));
this.selectedBackup = -1;
return;
}));
this.<Button>addButton(new Button(this.width - 100, this.height - 35, 85, 20, CommonComponents.GUI_BACK, dni -> this.minecraft.setScreen(this.lastScreen)));
this.<BackupObjectSelectionList>addWidget(this.backupObjectSelectionList);
this.titleLabel = this.<RealmsLabel>addWidget(new RealmsLabel(new TranslatableComponent("mco.configure.world.backup"), this.width / 2, 12, 16777215));
this.magicalSpecialHackyFocus(this.backupObjectSelectionList);
this.updateButtonStates();
this.narrateLabels();
}
private void generateChangeList() {
@ -92,19 +115,19 @@ public class RealmsBackupScreen extends RealmsScreen {
return;
}
for (int integer2 = 0; integer2 < this.backups.size() - 1; ++integer2) {
final Backup backup3 = this.backups.get(integer2);
final Backup backup4 = this.backups.get(integer2 + 1);
if (!backup3.metadata.isEmpty()) {
if (!backup4.metadata.isEmpty()) {
for (final String string6 : backup3.metadata.keySet()) {
if (!string6.contains("Uploaded") && backup4.metadata.containsKey(string6)) {
if (backup3.metadata.get(string6).equals(backup4.metadata.get(string6))) {
final Backup dif3 = this.backups.get(integer2);
final Backup dif4 = this.backups.get(integer2 + 1);
if (!dif3.metadata.isEmpty()) {
if (!dif4.metadata.isEmpty()) {
for (final String string6 : dif3.metadata.keySet()) {
if (!string6.contains("Uploaded") && dif4.metadata.containsKey(string6)) {
if (dif3.metadata.get(string6).equals(dif4.metadata.get(string6))) {
continue;
}
this.addToChangeList(backup3, string6);
this.addToChangeList(dif3, string6);
}
else {
this.addToChangeList(backup3, string6);
this.addToChangeList(dif3, string6);
}
}
}
@ -112,53 +135,20 @@ public class RealmsBackupScreen extends RealmsScreen {
}
}
private void addToChangeList(final Backup backup, final String string) {
private void addToChangeList(final Backup dif, final String string) {
if (string.contains("Uploaded")) {
final String string2 = DateFormat.getDateTimeInstance(3, 3).format(backup.lastModifiedDate);
backup.changeList.put(string, string2);
backup.setUploadedVersion(true);
final String string2 = DateFormat.getDateTimeInstance(3, 3).format(dif.lastModifiedDate);
dif.changeList.put(string, string2);
dif.setUploadedVersion(true);
}
else {
backup.changeList.put(string, backup.metadata.get(string));
dif.changeList.put(string, dif.metadata.get(string));
}
}
private void postInit() {
this.buttonsAdd(this.downloadButton = new RealmsButton(2, this.width() - 135, RealmsConstants.row(1), 120, 20, RealmsScreen.getLocalizedString("mco.backup.button.download")) {
@Override
public void onPress() {
RealmsBackupScreen.this.downloadClicked();
}
});
this.buttonsAdd(this.restoreButton = new RealmsButton(3, this.width() - 135, RealmsConstants.row(3), 120, 20, RealmsScreen.getLocalizedString("mco.backup.button.restore")) {
@Override
public void onPress() {
RealmsBackupScreen.this.restoreClicked(RealmsBackupScreen.this.selectedBackup);
}
});
this.buttonsAdd(this.changesButton = new RealmsButton(4, this.width() - 135, RealmsConstants.row(5), 120, 20, RealmsScreen.getLocalizedString("mco.backup.changes.tooltip")) {
@Override
public void onPress() {
Realms.setScreen(new RealmsBackupInfoScreen(RealmsBackupScreen.this, RealmsBackupScreen.this.backups.get(RealmsBackupScreen.this.selectedBackup)));
RealmsBackupScreen.this.selectedBackup = -1;
}
});
this.buttonsAdd(new RealmsButton(0, this.width() - 100, this.height() - 35, 85, 20, RealmsScreen.getLocalizedString("gui.back")) {
@Override
public void onPress() {
Realms.setScreen(RealmsBackupScreen.this.lastScreen);
}
});
this.addWidget(this.backupObjectSelectionList);
this.addWidget(this.titleLabel = new RealmsLabel(RealmsScreen.getLocalizedString("mco.configure.world.backup"), this.width() / 2, 12, 16777215));
this.focusOn(this.backupObjectSelectionList);
this.updateButtonStates();
this.narrateLabels();
}
private void updateButtonStates() {
this.restoreButton.setVisible(this.shouldRestoreButtonBeVisible());
this.changesButton.setVisible(this.shouldChangesButtonBeVisible());
this.restoreButton.visible = this.shouldRestoreButtonBeVisible();
this.changesButton.visible = this.shouldChangesButtonBeVisible();
}
private boolean shouldChangesButtonBeVisible() {
@ -169,15 +159,10 @@ public class RealmsBackupScreen extends RealmsScreen {
return this.selectedBackup != -1 && !this.serverData.expired;
}
@Override
public void tick() {
super.tick();
}
@Override
public boolean keyPressed(final int integer1, final int integer2, final int integer3) {
if (integer1 == 256) {
Realms.setScreen(this.lastScreen);
this.minecraft.setScreen(this.lastScreen);
return true;
}
return super.keyPressed(integer1, integer2, integer3);
@ -188,107 +173,95 @@ public class RealmsBackupScreen extends RealmsScreen {
this.selectedBackup = integer;
final Date date3 = this.backups.get(integer).lastModifiedDate;
final String string4 = DateFormat.getDateTimeInstance(3, 3).format(date3);
final String string5 = RealmsUtil.convertToAgePresentation(System.currentTimeMillis() - date3.getTime());
final String string6 = RealmsScreen.getLocalizedString("mco.configure.world.restore.question.line1", string4, string5);
final String string7 = RealmsScreen.getLocalizedString("mco.configure.world.restore.question.line2");
Realms.setScreen(new RealmsLongConfirmationScreen(this, RealmsLongConfirmationScreen.Type.Warning, string6, string7, true, 1));
final String string5 = RealmsUtil.convertToAgePresentationFromInstant(date3);
final Component mr6 = new TranslatableComponent("mco.configure.world.restore.question.line1", new Object[] { string4, string5 });
final Component mr7 = new TranslatableComponent("mco.configure.world.restore.question.line2");
this.minecraft.setScreen(new RealmsLongConfirmationScreen(boolean1 -> {
if (boolean1) {
this.restore();
}
else {
this.selectedBackup = -1;
this.minecraft.setScreen(this);
}
}, RealmsLongConfirmationScreen.Type.Warning, mr6, mr7, true));
}
}
private void downloadClicked() {
final String string2 = RealmsScreen.getLocalizedString("mco.configure.world.restore.download.question.line1");
final String string3 = RealmsScreen.getLocalizedString("mco.configure.world.restore.download.question.line2");
Realms.setScreen(new RealmsLongConfirmationScreen(this, RealmsLongConfirmationScreen.Type.Info, string2, string3, true, 2));
final Component mr2 = new TranslatableComponent("mco.configure.world.restore.download.question.line1");
final Component mr3 = new TranslatableComponent("mco.configure.world.restore.download.question.line2");
this.minecraft.setScreen(new RealmsLongConfirmationScreen(boolean1 -> {
if (boolean1) {
this.downloadWorldData();
}
else {
this.minecraft.setScreen(this);
}
}, RealmsLongConfirmationScreen.Type.Info, mr2, mr3, true));
}
private void downloadWorldData() {
final RealmsTasks.DownloadTask b2 = new RealmsTasks.DownloadTask(this.serverData.id, this.slotId, this.serverData.name + " (" + this.serverData.slots.get(this.serverData.activeSlot).getSlotName(this.serverData.activeSlot) + ")", this);
final RealmsLongRunningMcoTaskScreen czz3 = new RealmsLongRunningMcoTaskScreen(this.lastScreen.getNewScreen(), b2);
czz3.start();
Realms.setScreen(czz3);
}
@Override
public void confirmResult(final boolean boolean1, final int integer) {
if (boolean1 && integer == 1) {
this.restore();
}
else if (integer == 1) {
this.selectedBackup = -1;
Realms.setScreen(this);
}
else if (boolean1 && integer == 2) {
this.downloadWorldData();
}
else {
Realms.setScreen(this);
}
this.minecraft.setScreen(new RealmsLongRunningMcoTaskScreen(this.lastScreen.getNewScreen(), new DownloadTask(this.serverData.id, this.slotId, this.serverData.name + " (" + this.serverData.slots.get(this.serverData.activeSlot).getSlotName(this.serverData.activeSlot) + ")", this)));
}
private void restore() {
final Backup backup2 = this.backups.get(this.selectedBackup);
final Backup dif2 = this.backups.get(this.selectedBackup);
this.selectedBackup = -1;
final RealmsTasks.RestoreTask g3 = new RealmsTasks.RestoreTask(backup2, this.serverData.id, this.lastScreen);
final RealmsLongRunningMcoTaskScreen czz4 = new RealmsLongRunningMcoTaskScreen(this.lastScreen.getNewScreen(), g3);
czz4.start();
Realms.setScreen(czz4);
this.minecraft.setScreen(new RealmsLongRunningMcoTaskScreen(this.lastScreen.getNewScreen(), new RestoreTask(dif2, this.serverData.id, this.lastScreen)));
}
@Override
public void render(final int integer1, final int integer2, final float float3) {
public void render(final PoseStack dhl, final int integer2, final int integer3, final float float4) {
this.toolTip = null;
this.renderBackground();
this.backupObjectSelectionList.render(integer1, integer2, float3);
this.titleLabel.render(this);
this.drawString(RealmsScreen.getLocalizedString("mco.configure.world.backup"), (this.width() - 150) / 2 - 90, 20, 10526880);
this.renderBackground(dhl);
this.backupObjectSelectionList.render(dhl, integer2, integer3, float4);
this.titleLabel.render(this, dhl);
this.font.draw(dhl, I18n.get("mco.configure.world.backup"), (float)((this.width - 150) / 2 - 90), 20.0f, 10526880);
if (this.noBackups) {
this.drawString(RealmsScreen.getLocalizedString("mco.backup.nobackups"), 20, this.height() / 2 - 10, 16777215);
this.font.draw(dhl, I18n.get("mco.backup.nobackups"), 20.0f, (float)(this.height / 2 - 10), 16777215);
}
this.downloadButton.active(!this.noBackups);
super.render(integer1, integer2, float3);
this.downloadButton.active = !this.noBackups;
super.render(dhl, integer2, integer3, float4);
if (this.toolTip != null) {
this.renderMousehoverTooltip(this.toolTip, integer1, integer2);
this.renderMousehoverTooltip(dhl, this.toolTip, integer2, integer3);
}
}
protected void renderMousehoverTooltip(final String string, final int integer2, final int integer3) {
protected void renderMousehoverTooltip(final PoseStack dhl, final String string, final int integer3, final int integer4) {
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);
final int integer5 = integer3 + 12;
final int integer6 = integer4 - 12;
final int integer7 = this.font.width(string);
this.fillGradient(dhl, integer5 - 3, integer6 - 3, integer5 + integer7 + 3, integer6 + 8 + 3, -1073741824, -1073741824);
this.font.drawShadow(dhl, string, (float)integer5, (float)integer6, 16777215);
}
static {
LOGGER = LogManager.getLogger();
PLUS_ICON_LOCATION = new ResourceLocation("realms", "textures/gui/realms/plus_icon.png");
RESTORE_ICON_LOCATION = new ResourceLocation("realms", "textures/gui/realms/restore_icon.png");
RealmsBackupScreen.lastScrollPosition = -1;
}
class BackupObjectSelectionList extends RealmsObjectSelectionList {
class BackupObjectSelectionList extends RealmsObjectSelectionList<RealmsBackupScreen.Entry> {
public BackupObjectSelectionList() {
super(RealmsBackupScreen.this.width() - 150, RealmsBackupScreen.this.height(), 32, RealmsBackupScreen.this.height() - 15, 36);
super(RealmsBackupScreen.this.width - 150, RealmsBackupScreen.this.height, 32, RealmsBackupScreen.this.height - 15, 36);
}
public void addEntry(final Backup backup) {
this.addEntry(new BackupObjectSelectionListEntry(backup));
public void addEntry(final Backup dif) {
this.addEntry(new RealmsBackupScreen.Entry(dif));
}
@Override
public int getRowWidth() {
return (int)(this.width() * 0.93);
return (int)(this.width * 0.93);
}
@Override
public boolean isFocused() {
return RealmsBackupScreen.this.isFocused(this);
}
@Override
public int getItemCount() {
return RealmsBackupScreen.this.backups.size();
return RealmsBackupScreen.this.getFocused() == this;
}
@Override
@ -296,9 +269,8 @@ public class RealmsBackupScreen extends RealmsScreen {
return this.getItemCount() * 36;
}
@Override
public void renderBackground() {
RealmsBackupScreen.this.renderBackground();
public void renderBackground(final PoseStack dhl) {
RealmsBackupScreen.this.renderBackground(dhl);
}
@Override
@ -306,14 +278,14 @@ public class RealmsBackupScreen extends RealmsScreen {
if (integer != 0) {
return false;
}
if (double1 < this.getScrollbarPosition() && double2 >= this.y0() && double2 <= this.y1()) {
final int integer2 = this.width() / 2 - 92;
final int integer3 = this.width();
final int integer4 = (int)Math.floor(double2 - this.y0()) - this.headerHeight() + this.getScroll();
final int integer5 = integer4 / this.itemHeight();
if (double1 < this.getScrollbarPosition() && double2 >= this.y0 && double2 <= this.y1) {
final int integer2 = this.width / 2 - 92;
final int integer3 = this.width;
final int integer4 = (int)Math.floor(double2 - this.y0) - this.headerHeight + (int)this.getScrollAmount();
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());
this.itemClicked(integer4, integer5, double1, double2, this.width);
}
return true;
}
@ -322,33 +294,33 @@ public class RealmsBackupScreen extends RealmsScreen {
@Override
public int getScrollbarPosition() {
return this.width() - 5;
return this.width - 5;
}
@Override
public void itemClicked(final int integer1, final int integer2, final double double3, final double double4, final int integer5) {
final int integer6 = this.width() - 35;
final int integer7 = integer2 * this.itemHeight() + 36 - this.getScroll();
final int integer6 = this.width - 35;
final int integer7 = integer2 * this.itemHeight + 36 - (int)this.getScrollAmount();
final int integer8 = integer6 + 10;
final int integer9 = integer7 - 3;
if (double3 >= integer6 && double3 <= integer6 + 9 && double4 >= integer7 && double4 <= integer7 + 9) {
if (!RealmsBackupScreen.this.backups.get(integer2).changeList.isEmpty()) {
RealmsBackupScreen.this.selectedBackup = -1;
RealmsBackupScreen.lastScrollPosition = this.getScroll();
Realms.setScreen(new RealmsBackupInfoScreen(RealmsBackupScreen.this, RealmsBackupScreen.this.backups.get(integer2)));
RealmsBackupScreen.lastScrollPosition = (int)this.getScrollAmount();
this.minecraft.setScreen(new RealmsBackupInfoScreen(RealmsBackupScreen.this, RealmsBackupScreen.this.backups.get(integer2)));
}
}
else if (double3 >= integer8 && double3 < integer8 + 13 && double4 >= integer9 && double4 < integer9 + 15) {
RealmsBackupScreen.lastScrollPosition = this.getScroll();
RealmsBackupScreen.lastScrollPosition = (int)this.getScrollAmount();
RealmsBackupScreen.this.restoreClicked(integer2);
}
}
@Override
public void selectItem(final int integer) {
this.setSelected(integer);
this.setSelectedItem(integer);
if (integer != -1) {
Realms.narrateNow(RealmsScreen.getLocalizedString("narrator.select", RealmsBackupScreen.this.backups.get(integer).lastModifiedDate.toString()));
NarrationHelper.now(I18n.get("narrator.select", RealmsBackupScreen.this.backups.get(integer).lastModifiedDate.toString()));
}
this.selectInviteListItem(integer);
}
@ -357,33 +329,40 @@ public class RealmsBackupScreen extends RealmsScreen {
RealmsBackupScreen.this.selectedBackup = integer;
RealmsBackupScreen.this.updateButtonStates();
}
@Override
public void setSelected(@Nullable final RealmsBackupScreen.Entry b) {
super.setSelected(b);
RealmsBackupScreen.this.selectedBackup = this.children().indexOf(b);
RealmsBackupScreen.this.updateButtonStates();
}
}
class BackupObjectSelectionListEntry extends RealmListEntry {
final Backup mBackup;
class Entry extends ObjectSelectionList.Entry<Entry> {
private final Backup backup;
public BackupObjectSelectionListEntry(final Backup backup) {
this.mBackup = backup;
public Entry(final Backup dif) {
this.backup = dif;
}
@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.renderBackupItem(this.mBackup, integer3 - 40, integer2, integer6, integer7);
public void render(final PoseStack dhl, final int integer2, final int integer3, final int integer4, final int integer5, final int integer6, final int integer7, final int integer8, final boolean boolean9, final float float10) {
this.renderBackupItem(dhl, this.backup, integer4 - 40, integer3, integer7, integer8);
}
private void renderBackupItem(final Backup backup, final int integer2, final int integer3, final int integer4, final int integer5) {
final int integer6 = backup.isUploadedVersion() ? -8388737 : 16777215;
RealmsBackupScreen.this.drawString("Backup (" + RealmsUtil.convertToAgePresentation(System.currentTimeMillis() - backup.lastModifiedDate.getTime()) + ")", integer2 + 40, integer3 + 1, integer6);
RealmsBackupScreen.this.drawString(this.getMediumDatePresentation(backup.lastModifiedDate), integer2 + 40, integer3 + 12, 8421504);
final int integer7 = RealmsBackupScreen.this.width() - 175;
final int integer8 = -3;
final int integer9 = integer7 - 10;
final int integer10 = 0;
private void renderBackupItem(final PoseStack dhl, final Backup dif, final int integer3, final int integer4, final int integer5, final int integer6) {
final int integer7 = dif.isUploadedVersion() ? -8388737 : 16777215;
RealmsBackupScreen.this.font.draw(dhl, "Backup (" + RealmsUtil.convertToAgePresentationFromInstant(dif.lastModifiedDate) + ")", (float)(integer3 + 40), (float)(integer4 + 1), integer7);
RealmsBackupScreen.this.font.draw(dhl, this.getMediumDatePresentation(dif.lastModifiedDate), (float)(integer3 + 40), (float)(integer4 + 12), 5000268);
final int integer8 = RealmsBackupScreen.this.width - 175;
final int integer9 = -3;
final int integer10 = integer8 - 10;
final int integer11 = 0;
if (!RealmsBackupScreen.this.serverData.expired) {
this.drawRestore(integer7, integer3 - 3, integer4, integer5);
this.drawRestore(dhl, integer8, integer4 - 3, integer5, integer6);
}
if (!backup.changeList.isEmpty()) {
this.drawInfo(integer9, integer3 + 0, integer4, integer5);
if (!dif.changeList.isEmpty()) {
this.drawInfo(dhl, integer10, integer4 + 0, integer5, integer6);
}
}
@ -391,29 +370,31 @@ public class RealmsBackupScreen extends RealmsScreen {
return DateFormat.getDateTimeInstance(3, 3).format(date);
}
private void drawRestore(final int integer1, final int integer2, final int integer3, final int integer4) {
final boolean boolean6 = integer3 >= integer1 && integer3 <= integer1 + 12 && integer4 >= integer2 && integer4 <= integer2 + 14 && integer4 < RealmsBackupScreen.this.height() - 15 && integer4 > 32;
RealmsScreen.bind("realms:textures/gui/realms/restore_icon.png");
private void drawRestore(final PoseStack dhl, final int integer2, final int integer3, final int integer4, final int integer5) {
final boolean boolean7 = integer4 >= integer2 && integer4 <= integer2 + 12 && integer5 >= integer3 && integer5 <= integer3 + 14 && integer5 < RealmsBackupScreen.this.height - 15 && integer5 > 32;
RealmsBackupScreen.this.minecraft.getTextureManager().bind(RealmsBackupScreen.RESTORE_ICON_LOCATION);
RenderSystem.color4f(1.0f, 1.0f, 1.0f, 1.0f);
RenderSystem.pushMatrix();
RenderSystem.scalef(0.5f, 0.5f, 0.5f);
RealmsScreen.blit(integer1 * 2, integer2 * 2, 0.0f, boolean6 ? 28.0f : 0.0f, 23, 28, 23, 56);
final float float8 = boolean7 ? 28.0f : 0.0f;
GuiComponent.blit(dhl, integer2 * 2, integer3 * 2, 0.0f, float8, 23, 28, 23, 56);
RenderSystem.popMatrix();
if (boolean6) {
RealmsBackupScreen.this.toolTip = RealmsScreen.getLocalizedString("mco.backup.button.restore");
if (boolean7) {
RealmsBackupScreen.this.toolTip = I18n.get("mco.backup.button.restore");
}
}
private void drawInfo(final int integer1, final int integer2, final int integer3, final int integer4) {
final boolean boolean6 = integer3 >= integer1 && integer3 <= integer1 + 8 && integer4 >= integer2 && integer4 <= integer2 + 8 && integer4 < RealmsBackupScreen.this.height() - 15 && integer4 > 32;
RealmsScreen.bind("realms:textures/gui/realms/plus_icon.png");
private void drawInfo(final PoseStack dhl, final int integer2, final int integer3, final int integer4, final int integer5) {
final boolean boolean7 = integer4 >= integer2 && integer4 <= integer2 + 8 && integer5 >= integer3 && integer5 <= integer3 + 8 && integer5 < RealmsBackupScreen.this.height - 15 && integer5 > 32;
RealmsBackupScreen.this.minecraft.getTextureManager().bind(RealmsBackupScreen.PLUS_ICON_LOCATION);
RenderSystem.color4f(1.0f, 1.0f, 1.0f, 1.0f);
RenderSystem.pushMatrix();
RenderSystem.scalef(0.5f, 0.5f, 0.5f);
RealmsScreen.blit(integer1 * 2, integer2 * 2, 0.0f, boolean6 ? 15.0f : 0.0f, 15, 15, 15, 30);
final float float8 = boolean7 ? 15.0f : 0.0f;
GuiComponent.blit(dhl, integer2 * 2, integer3 * 2, 0.0f, float8, 15, 15, 15, 30);
RenderSystem.popMatrix();
if (boolean6) {
RealmsBackupScreen.this.toolTip = RealmsScreen.getLocalizedString("mco.backup.changes.tooltip");
if (boolean7) {
RealmsBackupScreen.this.toolTip = I18n.get("mco.backup.changes.tooltip");
}
}
}

View File

@ -1,110 +1,144 @@
package com.mojang.realmsclient.gui.screens;
import java.util.Arrays;
import org.apache.logging.log4j.LogManager;
import net.minecraft.realms.RealmsConfirmResultListener;
import net.minecraft.realms.RealmsMth;
import net.minecraft.client.gui.GuiComponent;
import net.minecraft.util.Mth;
import com.mojang.blaze3d.systems.RenderSystem;
import com.mojang.realmsclient.util.RealmsTextureManager;
import com.mojang.realmsclient.gui.RealmsWorldSlotButton;
import com.mojang.realmsclient.dto.WorldDownload;
import com.mojang.realmsclient.gui.LongRunningTask;
import com.mojang.realmsclient.util.RealmsTasks;
import java.io.IOException;
import com.mojang.realmsclient.util.task.OpenServerTask;
import com.mojang.realmsclient.exception.RealmsServiceException;
import com.mojang.realmsclient.client.RealmsClient;
import net.minecraft.network.chat.FormattedText;
import com.mojang.blaze3d.vertex.PoseStack;
import net.minecraft.client.Minecraft;
import java.util.Iterator;
import net.minecraft.realms.Realms;
import com.mojang.realmsclient.util.task.LongRunningTask;
import com.mojang.realmsclient.util.task.SwitchSlotTask;
import net.minecraft.client.resources.language.I18n;
import com.mojang.realmsclient.dto.RealmsWorldOptions;
import java.util.Map;
import net.minecraft.realms.AbstractRealmsButton;
import net.minecraft.realms.RealmsButton;
import com.mojang.realmsclient.gui.RealmsConstants;
import net.minecraft.realms.NarrationHelper;
import java.util.stream.Collector;
import java.util.stream.Collectors;
import java.util.function.Function;
import java.util.stream.Stream;
import net.minecraft.client.gui.components.Button;
import net.minecraft.network.chat.CommonComponents;
import com.google.common.collect.Lists;
import net.minecraft.network.chat.TranslatableComponent;
import java.util.List;
import net.minecraft.network.chat.Component;
import com.mojang.realmsclient.dto.RealmsServer;
import com.mojang.realmsclient.RealmsMainScreen;
import net.minecraft.client.gui.screens.Screen;
import org.apache.logging.log4j.Logger;
import net.minecraft.realms.RealmsScreen;
public class RealmsBrokenWorldScreen extends RealmsScreen {
private static final Logger LOGGER;
private final RealmsScreen lastScreen;
private final Screen lastScreen;
private final RealmsMainScreen mainScreen;
private RealmsServer serverData;
private final long serverId;
private String title;
private final String message;
private int left_x;
private int right_x;
private final int default_button_width = 80;
private final int default_button_offset = 5;
private static final List<Integer> playButtonIds;
private static final List<Integer> resetButtonIds;
private static final List<Integer> downloadButtonIds;
private static final List<Integer> downloadConfirmationIds;
private final Component header;
private final Component[] message;
private int leftX;
private int rightX;
private final List<Integer> slotsThatHasBeenDownloaded;
private int animTick;
public RealmsBrokenWorldScreen(final RealmsScreen realmsScreen, final RealmsMainScreen cyu, final long long3) {
this.title = RealmsScreen.getLocalizedString("mco.brokenworld.title");
this.message = RealmsScreen.getLocalizedString("mco.brokenworld.message.line1") + "\\n" + RealmsScreen.getLocalizedString("mco.brokenworld.message.line2");
public RealmsBrokenWorldScreen(final Screen dqs, final RealmsMainScreen dhv, final long long3, final boolean boolean4) {
this.message = new Component[] { new TranslatableComponent("mco.brokenworld.message.line1"), new TranslatableComponent("mco.brokenworld.message.line2") };
this.slotsThatHasBeenDownloaded = Lists.newArrayList();
this.lastScreen = realmsScreen;
this.mainScreen = cyu;
this.lastScreen = dqs;
this.mainScreen = dhv;
this.serverId = long3;
this.header = (boolean4 ? new TranslatableComponent("mco.brokenworld.minigame.title") : new TranslatableComponent("mco.brokenworld.title"));
}
public void setTitle(final String string) {
this.title = string;
}
@Override
public void init() {
this.left_x = this.width() / 2 - 150;
this.right_x = this.width() / 2 + 190;
this.buttonsAdd(new RealmsButton(0, this.right_x - 80 + 8, RealmsConstants.row(13) - 5, 70, 20, RealmsScreen.getLocalizedString("gui.back")) {
@Override
public void onPress() {
RealmsBrokenWorldScreen.this.backButtonClicked();
}
});
this.leftX = this.width / 2 - 150;
this.rightX = this.width / 2 + 190;
this.<Button>addButton(new Button(this.rightX - 80 + 8, RealmsScreen.row(13) - 5, 70, 20, CommonComponents.GUI_BACK, dni -> this.backButtonClicked()));
if (this.serverData == null) {
this.fetchServerData(this.serverId);
}
else {
this.addButtons();
}
this.setKeyboardHandlerSendRepeatsToGui(true);
this.minecraft.keyboardHandler.setSendRepeatsToGui(true);
NarrationHelper.now(Stream.concat(Stream.of((T)this.header), Stream.of((T[])this.message)).map(Component::getString).collect(Collectors.joining(" ")));
}
public void addButtons() {
private void addButtons() {
for (final Map.Entry<Integer, RealmsWorldOptions> entry3 : this.serverData.slots.entrySet()) {
final RealmsWorldOptions realmsWorldOptions4 = entry3.getValue();
final boolean boolean5 = entry3.getKey() != this.serverData.activeSlot || this.serverData.worldType.equals(RealmsServer.WorldType.MINIGAME);
RealmsButton realmsButton6;
final int integer4 = entry3.getKey();
final boolean boolean5 = integer4 != this.serverData.activeSlot || this.serverData.worldType == RealmsServer.WorldType.MINIGAME;
Button dni6;
if (boolean5) {
realmsButton6 = new PlayButton(RealmsBrokenWorldScreen.playButtonIds.get(entry3.getKey() - 1), this.getFramePositionX(entry3.getKey()), RealmsScreen.getLocalizedString("mco.brokenworld.play"));
final int integer5;
final RealmsResetWorldScreen realmsResetWorldScreen;
RealmsResetWorldScreen dke4;
Minecraft minecraft;
final Screen screen;
dni6 = new Button(this.getFramePositionX(integer4), RealmsScreen.row(8), 80, 20, new TranslatableComponent("mco.brokenworld.play"), dni -> {
if (this.serverData.slots.get(integer5).empty) {
new RealmsResetWorldScreen(this, this.serverData, new TranslatableComponent("mco.configure.world.switch.slot"), new TranslatableComponent("mco.configure.world.switch.slot.subtitle"), 10526880, CommonComponents.GUI_CANCEL, this::doSwitchOrReset, () -> {
this.minecraft.setScreen(this);
this.doSwitchOrReset();
return;
});
dke4 = realmsResetWorldScreen;
dke4.setSlot(integer5);
dke4.setResetTitle(I18n.get("mco.create.world.reset.title"));
this.minecraft.setScreen(dke4);
}
else {
minecraft = this.minecraft;
new RealmsLongRunningMcoTaskScreen(this.lastScreen, new SwitchSlotTask(this.serverData.id, integer5, this::doSwitchOrReset));
minecraft.setScreen(screen);
}
return;
});
}
else {
realmsButton6 = new DownloadButton(RealmsBrokenWorldScreen.downloadButtonIds.get(entry3.getKey() - 1), this.getFramePositionX(entry3.getKey()), RealmsScreen.getLocalizedString("mco.brokenworld.download"));
final Component mr4;
final Component mr5;
final Object o;
dni6 = new Button(this.getFramePositionX(integer4), RealmsScreen.row(8), 80, 20, new TranslatableComponent("mco.brokenworld.download"), dni -> {
mr4 = new TranslatableComponent("mco.configure.world.restore.download.question.line1");
mr5 = new TranslatableComponent("mco.configure.world.restore.download.question.line2");
this.minecraft.setScreen(new RealmsLongConfirmationScreen(boolean2 -> {
if (boolean2) {
this.downloadWorld(o);
}
else {
this.minecraft.setScreen(this);
}
}, RealmsLongConfirmationScreen.Type.Info, mr4, mr5, true));
return;
});
}
if (this.slotsThatHasBeenDownloaded.contains(entry3.getKey())) {
realmsButton6.active(false);
realmsButton6.setMessage(RealmsScreen.getLocalizedString("mco.brokenworld.downloaded"));
if (this.slotsThatHasBeenDownloaded.contains(integer4)) {
dni6.active = false;
dni6.setMessage(new TranslatableComponent("mco.brokenworld.downloaded"));
}
this.buttonsAdd(realmsButton6);
this.buttonsAdd(new RealmsButton((int)RealmsBrokenWorldScreen.resetButtonIds.get(entry3.getKey() - 1), this.getFramePositionX(entry3.getKey()), RealmsConstants.row(10), 80, 20, RealmsScreen.getLocalizedString("mco.brokenworld.reset")) {
@Override
public void onPress() {
final int integer2 = RealmsBrokenWorldScreen.resetButtonIds.indexOf(this.id()) + 1;
final RealmsResetWorldScreen daf3 = new RealmsResetWorldScreen(RealmsBrokenWorldScreen.this, RealmsBrokenWorldScreen.this.serverData, RealmsBrokenWorldScreen.this);
if (integer2 != RealmsBrokenWorldScreen.this.serverData.activeSlot || RealmsBrokenWorldScreen.this.serverData.worldType.equals(RealmsServer.WorldType.MINIGAME)) {
daf3.setSlot(integer2);
}
daf3.setConfirmationId(14);
Realms.setScreen(daf3);
this.<Button>addButton(dni6);
final RealmsResetWorldScreen dke5;
final int slot;
this.<Button>addButton(new Button(this.getFramePositionX(integer4), RealmsScreen.row(10), 80, 20, new TranslatableComponent("mco.brokenworld.reset"), dni -> {
dke5 = new RealmsResetWorldScreen(this, this.serverData, this::doSwitchOrReset, () -> {
this.minecraft.setScreen(this);
this.doSwitchOrReset();
return;
});
if (slot != this.serverData.activeSlot || this.serverData.worldType == RealmsServer.WorldType.MINIGAME) {
dke5.setSlot(slot);
}
});
this.minecraft.setScreen(dke5);
}));
}
}
@ -114,34 +148,33 @@ public class RealmsBrokenWorldScreen extends RealmsScreen {
}
@Override
public void render(final int integer1, final int integer2, final float float3) {
this.renderBackground();
super.render(integer1, integer2, float3);
this.drawCenteredString(this.title, this.width() / 2, 17, 16777215);
final String[] arr5 = this.message.split("\\\\n");
for (int integer3 = 0; integer3 < arr5.length; ++integer3) {
this.drawCenteredString(arr5[integer3], this.width() / 2, RealmsConstants.row(-1) + 3 + integer3 * 12, 10526880);
public void render(final PoseStack dhl, final int integer2, final int integer3, final float float4) {
this.renderBackground(dhl);
super.render(dhl, integer2, integer3, float4);
this.drawCenteredString(dhl, this.font, this.header, this.width / 2, 17, 16777215);
for (int integer4 = 0; integer4 < this.message.length; ++integer4) {
this.drawCenteredString(dhl, this.font, this.message[integer4], this.width / 2, RealmsScreen.row(-1) + 3 + integer4 * 12, 10526880);
}
if (this.serverData == null) {
return;
}
for (final Map.Entry<Integer, RealmsWorldOptions> entry7 : this.serverData.slots.entrySet()) {
if (entry7.getValue().templateImage != null && entry7.getValue().templateId != -1L) {
this.drawSlotFrame(this.getFramePositionX(entry7.getKey()), RealmsConstants.row(1) + 5, integer1, integer2, this.serverData.activeSlot == entry7.getKey() && !this.isMinigame(), entry7.getValue().getSlotName(entry7.getKey()), entry7.getKey(), entry7.getValue().templateId, entry7.getValue().templateImage, entry7.getValue().empty);
this.drawSlotFrame(dhl, this.getFramePositionX(entry7.getKey()), RealmsScreen.row(1) + 5, integer2, integer3, this.serverData.activeSlot == entry7.getKey() && !this.isMinigame(), entry7.getValue().getSlotName(entry7.getKey()), entry7.getKey(), entry7.getValue().templateId, entry7.getValue().templateImage, entry7.getValue().empty);
}
else {
this.drawSlotFrame(this.getFramePositionX(entry7.getKey()), RealmsConstants.row(1) + 5, integer1, integer2, this.serverData.activeSlot == entry7.getKey() && !this.isMinigame(), entry7.getValue().getSlotName(entry7.getKey()), entry7.getKey(), -1L, null, entry7.getValue().empty);
this.drawSlotFrame(dhl, this.getFramePositionX(entry7.getKey()), RealmsScreen.row(1) + 5, integer2, integer3, this.serverData.activeSlot == entry7.getKey() && !this.isMinigame(), entry7.getValue().getSlotName(entry7.getKey()), entry7.getKey(), -1L, null, entry7.getValue().empty);
}
}
}
private int getFramePositionX(final int integer) {
return this.left_x + (integer - 1) * 110;
return this.leftX + (integer - 1) * 110;
}
@Override
public void removed() {
this.setKeyboardHandlerSendRepeatsToGui(false);
this.minecraft.keyboardHandler.setSendRepeatsToGui(false);
}
@Override
@ -154,172 +187,114 @@ public class RealmsBrokenWorldScreen extends RealmsScreen {
}
private void backButtonClicked() {
Realms.setScreen(this.lastScreen);
this.minecraft.setScreen(this.lastScreen);
}
private void fetchServerData(final long long1) {
final RealmsClient cyy4;
final RealmsClient dia4;
new Thread(() -> {
cyy4 = RealmsClient.createRealmsClient();
dia4 = RealmsClient.create();
try {
this.serverData = cyy4.getOwnWorld(long1);
this.serverData = dia4.getOwnWorld(long1);
this.addButtons();
}
catch (RealmsServiceException czg5) {
catch (RealmsServiceException djh5) {
RealmsBrokenWorldScreen.LOGGER.error("Couldn't get own world");
Realms.setScreen(new RealmsGenericErrorScreen(czg5.getMessage(), this.lastScreen));
}
catch (IOException iOException5) {
RealmsBrokenWorldScreen.LOGGER.error("Couldn't parse response getting own world");
this.minecraft.setScreen(new RealmsGenericErrorScreen(Component.nullToEmpty(djh5.getMessage()), this.lastScreen));
}
}).start();
}
@Override
public void confirmResult(final boolean boolean1, final int integer) {
if (!boolean1) {
Realms.setScreen(this);
return;
}
if (integer == 13 || integer == 14) {
final RealmsClient cyy2;
RealmsTasks.OpenServerTask c3;
RealmsLongRunningMcoTaskScreen czz4;
new Thread(() -> {
cyy2 = RealmsClient.createRealmsClient();
if (this.serverData.state.equals(RealmsServer.State.CLOSED)) {
c3 = new RealmsTasks.OpenServerTask(this.serverData, this, this.lastScreen, true);
czz4 = new RealmsLongRunningMcoTaskScreen(this, c3);
czz4.start();
Realms.setScreen(czz4);
public void doSwitchOrReset() {
final RealmsClient dia2;
Minecraft minecraft;
final RealmsLongRunningMcoTaskScreen screen;
new Thread(() -> {
dia2 = RealmsClient.create();
if (this.serverData.state == RealmsServer.State.CLOSED) {
this.minecraft.execute(() -> {
minecraft = this.minecraft;
new RealmsLongRunningMcoTaskScreen(this, new OpenServerTask(this.serverData, this, this.mainScreen, true));
minecraft.setScreen(screen);
});
}
else {
try {
this.mainScreen.newScreen().play(dia2.getOwnWorld(this.serverId), this);
}
else {
try {
this.mainScreen.newScreen().play(cyy2.getOwnWorld(this.serverId), this);
}
catch (RealmsServiceException czg3) {
RealmsBrokenWorldScreen.LOGGER.error("Couldn't get own world");
Realms.setScreen(this.lastScreen);
}
catch (IOException iOException3) {
RealmsBrokenWorldScreen.LOGGER.error("Couldn't parse response getting own world");
Realms.setScreen(this.lastScreen);
}
catch (RealmsServiceException djh3) {
RealmsBrokenWorldScreen.LOGGER.error("Couldn't get own world");
this.minecraft.execute(() -> this.minecraft.setScreen(this.lastScreen));
}
}).start();
}
else if (RealmsBrokenWorldScreen.downloadButtonIds.contains(integer)) {
this.downloadWorld(RealmsBrokenWorldScreen.downloadButtonIds.indexOf(integer) + 1);
}
else if (RealmsBrokenWorldScreen.downloadConfirmationIds.contains(integer)) {
this.slotsThatHasBeenDownloaded.add(RealmsBrokenWorldScreen.downloadConfirmationIds.indexOf(integer) + 1);
this.childrenClear();
this.addButtons();
}
}
}).start();
}
private void downloadWorld(final int integer) {
final RealmsClient cyy3 = RealmsClient.createRealmsClient();
final RealmsClient dia3 = RealmsClient.create();
try {
final WorldDownload worldDownload4 = cyy3.download(this.serverData.id, integer);
final RealmsDownloadLatestWorldScreen czv5 = new RealmsDownloadLatestWorldScreen(this, worldDownload4, this.serverData.name + " (" + this.serverData.slots.get(integer).getSlotName(integer) + ")");
czv5.setConfirmationId(RealmsBrokenWorldScreen.downloadConfirmationIds.get(integer - 1));
Realms.setScreen(czv5);
final WorldDownload djc4 = dia3.download(this.serverData.id, integer);
final RealmsDownloadLatestWorldScreen dju5 = new RealmsDownloadLatestWorldScreen(this, djc4, this.serverData.getWorldName(integer), boolean2 -> {
if (boolean2) {
this.slotsThatHasBeenDownloaded.add(integer);
this.children.clear();
this.addButtons();
}
else {
this.minecraft.setScreen(this);
}
});
this.minecraft.setScreen(dju5);
}
catch (RealmsServiceException czg4) {
catch (RealmsServiceException djh4) {
RealmsBrokenWorldScreen.LOGGER.error("Couldn't download world data");
Realms.setScreen(new RealmsGenericErrorScreen(czg4, this));
this.minecraft.setScreen(new RealmsGenericErrorScreen(djh4, this));
}
}
private boolean isMinigame() {
return this.serverData != null && this.serverData.worldType.equals(RealmsServer.WorldType.MINIGAME);
return this.serverData != null && this.serverData.worldType == RealmsServer.WorldType.MINIGAME;
}
private void drawSlotFrame(final int integer1, final int integer2, final int integer3, final int integer4, final boolean boolean5, final String string6, final int integer7, final long long8, final String string9, final boolean boolean10) {
if (boolean10) {
RealmsScreen.bind("realms:textures/gui/realms/empty_frame.png");
private void drawSlotFrame(final PoseStack dhl, final int integer2, final int integer3, final int integer4, final int integer5, final boolean boolean6, final String string7, final int integer8, final long long9, final String string10, final boolean boolean11) {
if (boolean11) {
this.minecraft.getTextureManager().bind(RealmsWorldSlotButton.EMPTY_SLOT_LOCATION);
}
else if (string9 != null && long8 != -1L) {
RealmsTextureManager.bindWorldTemplate(String.valueOf(long8), string9);
else if (string10 != null && long9 != -1L) {
RealmsTextureManager.bindWorldTemplate(String.valueOf(long9), string10);
}
else if (integer7 == 1) {
RealmsScreen.bind("textures/gui/title/background/panorama_0.png");
else if (integer8 == 1) {
this.minecraft.getTextureManager().bind(RealmsWorldSlotButton.DEFAULT_WORLD_SLOT_1);
}
else if (integer7 == 2) {
RealmsScreen.bind("textures/gui/title/background/panorama_2.png");
else if (integer8 == 2) {
this.minecraft.getTextureManager().bind(RealmsWorldSlotButton.DEFAULT_WORLD_SLOT_2);
}
else if (integer7 == 3) {
RealmsScreen.bind("textures/gui/title/background/panorama_3.png");
else if (integer8 == 3) {
this.minecraft.getTextureManager().bind(RealmsWorldSlotButton.DEFAULT_WORLD_SLOT_3);
}
else {
RealmsTextureManager.bindWorldTemplate(String.valueOf(this.serverData.minigameId), this.serverData.minigameImage);
}
if (!boolean5) {
if (!boolean6) {
RenderSystem.color4f(0.56f, 0.56f, 0.56f, 1.0f);
}
else if (boolean5) {
final float float13 = 0.9f + 0.1f * RealmsMth.cos(this.animTick * 0.2f);
RenderSystem.color4f(float13, float13, float13, 1.0f);
else if (boolean6) {
final float float14 = 0.9f + 0.1f * Mth.cos(this.animTick * 0.2f);
RenderSystem.color4f(float14, float14, float14, 1.0f);
}
RealmsScreen.blit(integer1 + 3, integer2 + 3, 0.0f, 0.0f, 74, 74, 74, 74);
RealmsScreen.bind("realms:textures/gui/realms/slot_frame.png");
if (boolean5) {
GuiComponent.blit(dhl, integer2 + 3, integer3 + 3, 0.0f, 0.0f, 74, 74, 74, 74);
this.minecraft.getTextureManager().bind(RealmsWorldSlotButton.SLOT_FRAME_LOCATION);
if (boolean6) {
RenderSystem.color4f(1.0f, 1.0f, 1.0f, 1.0f);
}
else {
RenderSystem.color4f(0.56f, 0.56f, 0.56f, 1.0f);
}
RealmsScreen.blit(integer1, integer2, 0.0f, 0.0f, 80, 80, 80, 80);
this.drawCenteredString(string6, integer1 + 40, integer2 + 66, 16777215);
}
private void switchSlot(final int integer) {
final RealmsTasks.SwitchSlotTask i3 = new RealmsTasks.SwitchSlotTask(this.serverData.id, integer, this, 13);
final RealmsLongRunningMcoTaskScreen czz4 = new RealmsLongRunningMcoTaskScreen(this.lastScreen, i3);
czz4.start();
Realms.setScreen(czz4);
GuiComponent.blit(dhl, integer2, integer3, 0.0f, 0.0f, 80, 80, 80, 80);
this.drawCenteredString(dhl, this.font, string7, integer2 + 40, integer3 + 66, 16777215);
}
static {
LOGGER = LogManager.getLogger();
playButtonIds = Arrays.<Integer>asList(1, 2, 3);
resetButtonIds = Arrays.<Integer>asList(4, 5, 6);
downloadButtonIds = Arrays.<Integer>asList(7, 8, 9);
downloadConfirmationIds = Arrays.<Integer>asList(10, 11, 12);
}
class PlayButton extends RealmsButton {
public PlayButton(final int integer2, final int integer3, final String string) {
super(integer2, integer3, RealmsConstants.row(8), 80, 20, string);
}
@Override
public void onPress() {
final int integer2 = RealmsBrokenWorldScreen.playButtonIds.indexOf(this.id()) + 1;
if (RealmsBrokenWorldScreen.this.serverData.slots.get(integer2).empty) {
final RealmsResetWorldScreen daf3 = new RealmsResetWorldScreen(RealmsBrokenWorldScreen.this, RealmsBrokenWorldScreen.this.serverData, RealmsBrokenWorldScreen.this, RealmsScreen.getLocalizedString("mco.configure.world.switch.slot"), RealmsScreen.getLocalizedString("mco.configure.world.switch.slot.subtitle"), 10526880, RealmsScreen.getLocalizedString("gui.cancel"));
daf3.setSlot(integer2);
daf3.setResetTitle(RealmsScreen.getLocalizedString("mco.create.world.reset.title"));
daf3.setConfirmationId(14);
Realms.setScreen(daf3);
}
else {
RealmsBrokenWorldScreen.this.switchSlot(integer2);
}
}
}
class DownloadButton extends RealmsButton {
public DownloadButton(final int integer2, final int integer3, final String string) {
super(integer2, integer3, RealmsConstants.row(8), 80, 20, string);
}
@Override
public void onPress() {
final String string2 = RealmsScreen.getLocalizedString("mco.configure.world.restore.download.question.line1");
final String string3 = RealmsScreen.getLocalizedString("mco.configure.world.restore.download.question.line2");
Realms.setScreen(new RealmsLongConfirmationScreen(RealmsBrokenWorldScreen.this, RealmsLongConfirmationScreen.Type.Info, string2, string3, true, this.id()));
}
}
}

View File

@ -1,46 +1,43 @@
package com.mojang.realmsclient.gui.screens;
import net.minecraft.realms.AbstractRealmsButton;
import net.minecraft.realms.Realms;
import net.minecraft.realms.RealmsButton;
import com.mojang.realmsclient.gui.RealmsConstants;
import net.minecraft.network.chat.Component;
import net.minecraft.network.chat.FormattedText;
import net.minecraft.network.chat.TranslatableComponent;
import com.mojang.blaze3d.vertex.PoseStack;
import net.minecraft.client.gui.components.Button;
import net.minecraft.network.chat.CommonComponents;
import net.minecraft.client.gui.screens.Screen;
import net.minecraft.realms.RealmsScreen;
public class RealmsClientOutdatedScreen extends RealmsScreen {
private final RealmsScreen lastScreen;
private final Screen lastScreen;
private final boolean outdated;
public RealmsClientOutdatedScreen(final RealmsScreen realmsScreen, final boolean boolean2) {
this.lastScreen = realmsScreen;
public RealmsClientOutdatedScreen(final Screen dqs, final boolean boolean2) {
this.lastScreen = dqs;
this.outdated = boolean2;
}
@Override
public void init() {
this.buttonsAdd(new RealmsButton(0, this.width() / 2 - 100, RealmsConstants.row(12), RealmsScreen.getLocalizedString("gui.back")) {
@Override
public void onPress() {
Realms.setScreen(RealmsClientOutdatedScreen.this.lastScreen);
}
});
this.<Button>addButton(new Button(this.width / 2 - 100, RealmsScreen.row(12), 200, 20, CommonComponents.GUI_BACK, dni -> this.minecraft.setScreen(this.lastScreen)));
}
@Override
public void render(final int integer1, final int integer2, final float float3) {
this.renderBackground();
final String string5 = RealmsScreen.getLocalizedString(this.outdated ? "mco.client.outdated.title" : "mco.client.incompatible.title");
this.drawCenteredString(string5, this.width() / 2, RealmsConstants.row(3), 16711680);
for (int integer3 = this.outdated ? 2 : 3, integer4 = 0; integer4 < integer3; ++integer4) {
final String string6 = RealmsScreen.getLocalizedString((this.outdated ? "mco.client.outdated.msg.line" : "mco.client.incompatible.msg.line") + (integer4 + 1));
this.drawCenteredString(string6, this.width() / 2, RealmsConstants.row(5) + integer4 * 12, 16777215);
public void render(final PoseStack dhl, final int integer2, final int integer3, final float float4) {
this.renderBackground(dhl);
final Component mr6 = new TranslatableComponent(this.outdated ? "mco.client.outdated.title" : "mco.client.incompatible.title");
this.drawCenteredString(dhl, this.font, mr6, this.width / 2, RealmsScreen.row(3), 16711680);
for (int integer4 = this.outdated ? 2 : 3, integer5 = 0; integer5 < integer4; ++integer5) {
final String string9 = (this.outdated ? "mco.client.outdated.msg.line" : "mco.client.incompatible.msg.line") + (integer5 + 1);
this.drawCenteredString(dhl, this.font, new TranslatableComponent(string9), this.width / 2, RealmsScreen.row(5) + integer5 * 12, 16777215);
}
super.render(integer1, integer2, float3);
super.render(dhl, integer2, integer3, float4);
}
@Override
public boolean keyPressed(final int integer1, final int integer2, final int integer3) {
if (integer1 == 257 || integer1 == 335 || integer1 == 256) {
Realms.setScreen(this.lastScreen);
this.minecraft.setScreen(this.lastScreen);
return true;
}
return super.keyPressed(integer1, integer2, integer3);

View File

@ -1,121 +1,93 @@
package com.mojang.realmsclient.gui.screens;
import org.apache.logging.log4j.LogManager;
import com.mojang.realmsclient.gui.LongRunningTask;
import com.mojang.realmsclient.util.RealmsTasks;
import java.io.UnsupportedEncodingException;
import com.mojang.realmsclient.util.task.SwitchSlotTask;
import com.mojang.realmsclient.util.task.SwitchMinigameTask;
import com.mojang.realmsclient.dto.WorldTemplate;
import com.mojang.realmsclient.util.task.CloseServerTask;
import com.mojang.realmsclient.util.task.LongRunningTask;
import com.mojang.realmsclient.util.task.OpenServerTask;
import net.minecraft.client.gui.GuiComponent;
import com.mojang.blaze3d.systems.RenderSystem;
import java.io.IOException;
import net.minecraft.network.chat.FormattedText;
import com.mojang.realmsclient.exception.RealmsServiceException;
import com.mojang.realmsclient.client.RealmsClient;
import net.minecraft.client.resources.language.I18n;
import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.realmsclient.gui.RealmsWorldSlotButton;
import net.minecraft.network.chat.CommonComponents;
import com.mojang.realmsclient.dto.RealmsWorldOptions;
import net.minecraft.realms.AbstractRealmsButton;
import net.minecraft.realms.Realms;
import net.minecraft.client.gui.screens.Screen;
import net.minecraft.network.chat.TranslatableComponent;
import net.minecraft.realms.RealmsScreen;
import com.mojang.realmsclient.gui.RealmsConstants;
import net.minecraft.realms.RealmsButton;
import net.minecraft.client.gui.components.Button;
import javax.annotation.Nullable;
import com.mojang.realmsclient.dto.RealmsServer;
import com.mojang.realmsclient.RealmsMainScreen;
import net.minecraft.network.chat.Component;
import net.minecraft.resources.ResourceLocation;
import org.apache.logging.log4j.Logger;
import com.mojang.realmsclient.gui.RealmsWorldSlotButton;
import com.mojang.realmsclient.dto.WorldTemplate;
public class RealmsConfigureWorldScreen extends RealmsScreenWithCallback<WorldTemplate> implements RealmsWorldSlotButton.Listener {
public class RealmsConfigureWorldScreen extends RealmsScreenWithCallback {
private static final Logger LOGGER;
private String toolTip;
private static final ResourceLocation ON_ICON_LOCATION;
private static final ResourceLocation OFF_ICON_LOCATION;
private static final ResourceLocation EXPIRED_ICON_LOCATION;
private static final ResourceLocation EXPIRES_SOON_ICON_LOCATION;
private Component toolTip;
private final RealmsMainScreen lastScreen;
@Nullable
private RealmsServer serverData;
private final long serverId;
private int left_x;
private int right_x;
private final int default_button_width = 80;
private final int default_button_offset = 5;
private RealmsButton playersButton;
private RealmsButton settingsButton;
private RealmsButton subscriptionButton;
private RealmsButton optionsButton;
private RealmsButton backupButton;
private RealmsButton resetWorldButton;
private RealmsButton switchMinigameButton;
private int leftX;
private int rightX;
private Button playersButton;
private Button settingsButton;
private Button subscriptionButton;
private Button optionsButton;
private Button backupButton;
private Button resetWorldButton;
private Button switchMinigameButton;
private boolean stateChanged;
private int animTick;
private int clicks;
public RealmsConfigureWorldScreen(final RealmsMainScreen cyu, final long long2) {
this.lastScreen = cyu;
public RealmsConfigureWorldScreen(final RealmsMainScreen dhv, final long long2) {
this.lastScreen = dhv;
this.serverId = long2;
}
@Override
public void init() {
if (this.serverData == null) {
this.fetchServerData(this.serverId);
}
this.left_x = this.width() / 2 - 187;
this.right_x = this.width() / 2 + 190;
this.setKeyboardHandlerSendRepeatsToGui(true);
this.buttonsAdd(this.playersButton = new RealmsButton(2, this.centerButton(0, 3), RealmsConstants.row(0), 100, 20, RealmsScreen.getLocalizedString("mco.configure.world.buttons.players")) {
@Override
public void onPress() {
Realms.setScreen(new RealmsPlayerScreen(RealmsConfigureWorldScreen.this, RealmsConfigureWorldScreen.this.serverData));
}
});
this.buttonsAdd(this.settingsButton = new RealmsButton(3, this.centerButton(1, 3), RealmsConstants.row(0), 100, 20, RealmsScreen.getLocalizedString("mco.configure.world.buttons.settings")) {
@Override
public void onPress() {
Realms.setScreen(new RealmsSettingsScreen(RealmsConfigureWorldScreen.this, RealmsConfigureWorldScreen.this.serverData.clone()));
}
});
this.buttonsAdd(this.subscriptionButton = new RealmsButton(4, this.centerButton(2, 3), RealmsConstants.row(0), 100, 20, RealmsScreen.getLocalizedString("mco.configure.world.buttons.subscription")) {
@Override
public void onPress() {
Realms.setScreen(new RealmsSubscriptionInfoScreen(RealmsConfigureWorldScreen.this, RealmsConfigureWorldScreen.this.serverData.clone(), RealmsConfigureWorldScreen.this.lastScreen));
}
});
this.leftX = this.width / 2 - 187;
this.rightX = this.width / 2 + 190;
this.minecraft.keyboardHandler.setSendRepeatsToGui(true);
this.playersButton = this.<Button>addButton(new Button(this.centerButton(0, 3), RealmsScreen.row(0), 100, 20, new TranslatableComponent("mco.configure.world.buttons.players"), dni -> this.minecraft.setScreen(new RealmsPlayerScreen(this, this.serverData))));
this.settingsButton = this.<Button>addButton(new Button(this.centerButton(1, 3), RealmsScreen.row(0), 100, 20, new TranslatableComponent("mco.configure.world.buttons.settings"), dni -> this.minecraft.setScreen(new RealmsSettingsScreen(this, this.serverData.clone()))));
this.subscriptionButton = this.<Button>addButton(new Button(this.centerButton(2, 3), RealmsScreen.row(0), 100, 20, new TranslatableComponent("mco.configure.world.buttons.subscription"), dni -> this.minecraft.setScreen(new RealmsSubscriptionInfoScreen(this, this.serverData.clone(), this.lastScreen))));
for (int integer2 = 1; integer2 < 5; ++integer2) {
this.addSlotButton(integer2);
}
this.buttonsAdd(this.switchMinigameButton = new RealmsButton(8, this.leftButton(0), RealmsConstants.row(13) - 5, 100, 20, RealmsScreen.getLocalizedString("mco.configure.world.buttons.switchminigame")) {
@Override
public void onPress() {
final RealmsSelectWorldTemplateScreen daj2 = new RealmsSelectWorldTemplateScreen(RealmsConfigureWorldScreen.this, RealmsServer.WorldType.MINIGAME);
daj2.setTitle(RealmsScreen.getLocalizedString("mco.template.title.minigame"));
Realms.setScreen(daj2);
}
});
this.buttonsAdd(this.optionsButton = new RealmsButton(5, this.leftButton(0), RealmsConstants.row(13) - 5, 90, 20, RealmsScreen.getLocalizedString("mco.configure.world.buttons.options")) {
@Override
public void onPress() {
Realms.setScreen(new RealmsSlotOptionsScreen(RealmsConfigureWorldScreen.this, RealmsConfigureWorldScreen.this.serverData.slots.get(RealmsConfigureWorldScreen.this.serverData.activeSlot).clone(), RealmsConfigureWorldScreen.this.serverData.worldType, RealmsConfigureWorldScreen.this.serverData.activeSlot));
}
});
this.buttonsAdd(this.backupButton = new RealmsButton(6, this.leftButton(1), RealmsConstants.row(13) - 5, 90, 20, RealmsScreen.getLocalizedString("mco.configure.world.backup")) {
@Override
public void onPress() {
Realms.setScreen(new RealmsBackupScreen(RealmsConfigureWorldScreen.this, RealmsConfigureWorldScreen.this.serverData.clone(), RealmsConfigureWorldScreen.this.serverData.activeSlot));
}
});
this.buttonsAdd(this.resetWorldButton = new RealmsButton(7, this.leftButton(2), RealmsConstants.row(13) - 5, 90, 20, RealmsScreen.getLocalizedString("mco.configure.world.buttons.resetworld")) {
@Override
public void onPress() {
Realms.setScreen(new RealmsResetWorldScreen(RealmsConfigureWorldScreen.this, RealmsConfigureWorldScreen.this.serverData.clone(), RealmsConfigureWorldScreen.this.getNewScreen()));
}
});
this.buttonsAdd(new RealmsButton(0, this.right_x - 80 + 8, RealmsConstants.row(13) - 5, 70, 20, RealmsScreen.getLocalizedString("gui.back")) {
@Override
public void onPress() {
RealmsConfigureWorldScreen.this.backButtonClicked();
}
});
this.backupButton.active(true);
final RealmsSelectWorldTemplateScreen dkh3;
this.switchMinigameButton = this.<Button>addButton(new Button(this.leftButton(0), RealmsScreen.row(13) - 5, 100, 20, new TranslatableComponent("mco.configure.world.buttons.switchminigame"), dni -> {
dkh3 = new RealmsSelectWorldTemplateScreen(this, RealmsServer.WorldType.MINIGAME);
dkh3.setTitle(new TranslatableComponent("mco.template.title.minigame"));
this.minecraft.setScreen(dkh3);
return;
}));
this.optionsButton = this.<Button>addButton(new Button(this.leftButton(0), RealmsScreen.row(13) - 5, 90, 20, new TranslatableComponent("mco.configure.world.buttons.options"), dni -> this.minecraft.setScreen(new RealmsSlotOptionsScreen(this, this.serverData.slots.get(this.serverData.activeSlot).clone(), this.serverData.worldType, this.serverData.activeSlot))));
this.backupButton = this.<Button>addButton(new Button(this.leftButton(1), RealmsScreen.row(13) - 5, 90, 20, new TranslatableComponent("mco.configure.world.backup"), dni -> this.minecraft.setScreen(new RealmsBackupScreen(this, this.serverData.clone(), this.serverData.activeSlot))));
this.resetWorldButton = this.<Button>addButton(new Button(this.leftButton(2), RealmsScreen.row(13) - 5, 90, 20, new TranslatableComponent("mco.configure.world.buttons.resetworld"), dni -> this.minecraft.setScreen(new RealmsResetWorldScreen(this, this.serverData.clone(), () -> this.minecraft.setScreen(this.getNewScreen()), () -> this.minecraft.setScreen(this.getNewScreen())))));
this.<Button>addButton(new Button(this.rightX - 80 + 8, RealmsScreen.row(13) - 5, 70, 20, CommonComponents.GUI_BACK, dni -> this.backButtonClicked()));
this.backupButton.active = true;
if (this.serverData == null) {
this.hideMinigameButtons();
this.hideRegularButtons();
this.playersButton.active(false);
this.settingsButton.active(false);
this.subscriptionButton.active(false);
this.playersButton.active = false;
this.settingsButton.active = false;
this.subscriptionButton.active = false;
}
else {
this.disableButtons();
@ -130,23 +102,57 @@ public class RealmsConfigureWorldScreen extends RealmsScreenWithCallback<WorldTe
private void addSlotButton(final int integer) {
final int integer2 = this.frame(integer);
final int integer3 = RealmsConstants.row(5) + 5;
final int integer4 = 100 + integer;
final RealmsWorldSlotButton czm6 = new RealmsWorldSlotButton(integer2, integer3, 80, 80, () -> this.serverData, string -> this.toolTip = string, integer4, integer, this);
this.getProxy().buttonsAdd(czm6);
final int integer3 = RealmsScreen.row(5) + 5;
final RealmsWorldSlotButton.State b4;
final IllegalStateException ex;
final RealmsWorldSlotButton djl5 = new RealmsWorldSlotButton(integer2, integer3, 80, 80, () -> this.serverData, mr -> this.toolTip = mr, integer, dni -> {
b4 = dni.getState();
if (b4 != null) {
switch (b4.action) {
case NOTHING: {
break;
}
case JOIN: {
this.joinRealm(this.serverData);
break;
}
case SWITCH_SLOT: {
if (b4.minigame) {
this.switchToMinigame();
break;
}
else if (b4.empty) {
this.switchToEmptySlot(integer, this.serverData);
break;
}
else {
this.switchToFullSlot(integer, this.serverData);
break;
}
break;
}
default: {
new IllegalStateException("Unknown action " + b4.action);
throw ex;
}
}
}
return;
});
this.<RealmsWorldSlotButton>addButton(djl5);
}
private int leftButton(final int integer) {
return this.left_x + integer * 95;
return this.leftX + integer * 95;
}
private int centerButton(final int integer1, final int integer2) {
return this.width() / 2 - (integer2 * 105 - 5) / 2 + integer1 * 105;
return this.width / 2 - (integer2 * 105 - 5) / 2 + integer1 * 105;
}
@Override
public void tick() {
this.tickButtons();
super.tick();
++this.animTick;
--this.clicks;
if (this.clicks < 0) {
@ -155,38 +161,38 @@ public class RealmsConfigureWorldScreen extends RealmsScreenWithCallback<WorldTe
}
@Override
public void render(final int integer1, final int integer2, final float float3) {
public void render(final PoseStack dhl, final int integer2, final int integer3, final float float4) {
this.toolTip = null;
this.renderBackground();
this.drawCenteredString(RealmsScreen.getLocalizedString("mco.configure.worlds.title"), this.width() / 2, RealmsConstants.row(4), 16777215);
super.render(integer1, integer2, float3);
this.renderBackground(dhl);
this.drawCenteredString(dhl, this.font, I18n.get("mco.configure.worlds.title"), this.width / 2, RealmsScreen.row(4), 16777215);
super.render(dhl, integer2, integer3, float4);
if (this.serverData == null) {
this.drawCenteredString(RealmsScreen.getLocalizedString("mco.configure.world.title"), this.width() / 2, 17, 16777215);
this.drawCenteredString(dhl, this.font, I18n.get("mco.configure.world.title"), this.width / 2, 17, 16777215);
return;
}
final String string5 = this.serverData.getName();
final int integer3 = this.fontWidth(string5);
final int integer4 = (this.serverData.state == RealmsServer.State.CLOSED) ? 10526880 : 8388479;
final int integer5 = this.fontWidth(RealmsScreen.getLocalizedString("mco.configure.world.title"));
this.drawCenteredString(RealmsScreen.getLocalizedString("mco.configure.world.title"), this.width() / 2, 12, 16777215);
this.drawCenteredString(string5, this.width() / 2, 24, integer4);
final int integer6 = Math.min(this.centerButton(2, 3) + 80 - 11, this.width() / 2 + integer3 / 2 + integer5 / 2 + 10);
this.drawServerStatus(integer6, 7, integer1, integer2);
final String string6 = this.serverData.getName();
final int integer4 = this.font.width(string6);
final int integer5 = (this.serverData.state == RealmsServer.State.CLOSED) ? 10526880 : 8388479;
final int integer6 = this.font.width(I18n.get("mco.configure.world.title"));
this.drawCenteredString(dhl, this.font, I18n.get("mco.configure.world.title"), this.width / 2, 12, 16777215);
this.drawCenteredString(dhl, this.font, string6, this.width / 2, 24, integer5);
final int integer7 = Math.min(this.centerButton(2, 3) + 80 - 11, this.width / 2 + integer4 / 2 + integer6 / 2 + 10);
this.drawServerStatus(dhl, integer7, 7, integer2, integer3);
if (this.isMinigame()) {
this.drawString(RealmsScreen.getLocalizedString("mco.configure.current.minigame") + ": " + this.serverData.getMinigameName(), this.left_x + 80 + 20 + 10, RealmsConstants.row(13), 16777215);
this.font.draw(dhl, I18n.get("mco.configure.current.minigame") + ": " + this.serverData.getMinigameName(), (float)(this.leftX + 80 + 20 + 10), (float)RealmsScreen.row(13), 16777215);
}
if (this.toolTip != null) {
this.renderMousehoverTooltip(this.toolTip, integer1, integer2);
this.renderMousehoverTooltip(dhl, this.toolTip, integer2, integer3);
}
}
private int frame(final int integer) {
return this.left_x + (integer - 1) * 98;
return this.leftX + (integer - 1) * 98;
}
@Override
public void removed() {
this.setKeyboardHandlerSendRepeatsToGui(false);
this.minecraft.keyboardHandler.setSendRepeatsToGui(false);
}
@Override
@ -202,211 +208,165 @@ public class RealmsConfigureWorldScreen extends RealmsScreenWithCallback<WorldTe
if (this.stateChanged) {
this.lastScreen.removeSelection();
}
Realms.setScreen(this.lastScreen);
this.minecraft.setScreen(this.lastScreen);
}
private void fetchServerData(final long long1) {
final RealmsClient cyy4;
final RealmsClient dia4;
new Thread(() -> {
cyy4 = RealmsClient.createRealmsClient();
dia4 = RealmsClient.create();
try {
this.serverData = cyy4.getOwnWorld(long1);
this.serverData = dia4.getOwnWorld(long1);
this.disableButtons();
if (this.isMinigame()) {
this.showMinigameButtons();
this.show(this.switchMinigameButton);
}
else {
this.showRegularButtons();
this.show(this.optionsButton);
this.show(this.backupButton);
this.show(this.resetWorldButton);
}
}
catch (RealmsServiceException czg5) {
catch (RealmsServiceException djh5) {
RealmsConfigureWorldScreen.LOGGER.error("Couldn't get own world");
Realms.setScreen(new RealmsGenericErrorScreen(czg5.getMessage(), this.lastScreen));
}
catch (IOException iOException5) {
RealmsConfigureWorldScreen.LOGGER.error("Couldn't parse response getting own world");
this.minecraft.execute(() -> this.minecraft.setScreen(new RealmsGenericErrorScreen(Component.nullToEmpty(djh5.getMessage()), this.lastScreen)));
}
}).start();
}
private void disableButtons() {
this.playersButton.active(!this.serverData.expired);
this.settingsButton.active(!this.serverData.expired);
this.subscriptionButton.active(true);
this.switchMinigameButton.active(!this.serverData.expired);
this.optionsButton.active(!this.serverData.expired);
this.resetWorldButton.active(!this.serverData.expired);
this.playersButton.active = !this.serverData.expired;
this.settingsButton.active = !this.serverData.expired;
this.subscriptionButton.active = true;
this.switchMinigameButton.active = !this.serverData.expired;
this.optionsButton.active = !this.serverData.expired;
this.resetWorldButton.active = !this.serverData.expired;
}
@Override
public boolean mouseClicked(final double double1, final double double2, final int integer) {
return super.mouseClicked(double1, double2, integer);
}
private void joinRealm(final RealmsServer realmsServer) {
private void joinRealm(final RealmsServer dip) {
if (this.serverData.state == RealmsServer.State.OPEN) {
this.lastScreen.play(realmsServer, new RealmsConfigureWorldScreen(this.lastScreen.newScreen(), this.serverId));
this.lastScreen.play(dip, new RealmsConfigureWorldScreen(this.lastScreen.newScreen(), this.serverId));
}
else {
this.openTheWorld(true, new RealmsConfigureWorldScreen(this.lastScreen.newScreen(), this.serverId));
}
}
@Override
public void onSlotClick(final int integer, final RealmsWorldSlotButton.Action a, final boolean boolean3, final boolean boolean4) {
switch (a) {
case NOTHING: {
break;
}
case JOIN: {
this.joinRealm(this.serverData);
break;
}
case SWITCH_SLOT: {
if (boolean3) {
this.switchToMinigame();
break;
}
if (boolean4) {
this.switchToEmptySlot(integer, this.serverData);
break;
}
this.switchToFullSlot(integer, this.serverData);
break;
}
default: {
throw new IllegalStateException("Unknown action " + a);
}
}
}
private void switchToMinigame() {
final RealmsSelectWorldTemplateScreen daj2 = new RealmsSelectWorldTemplateScreen(this, RealmsServer.WorldType.MINIGAME);
daj2.setTitle(RealmsScreen.getLocalizedString("mco.template.title.minigame"));
daj2.setWarning(RealmsScreen.getLocalizedString("mco.minigame.world.info.line1") + "\\n" + RealmsScreen.getLocalizedString("mco.minigame.world.info.line2"));
Realms.setScreen(daj2);
final RealmsSelectWorldTemplateScreen dkh2 = new RealmsSelectWorldTemplateScreen(this, RealmsServer.WorldType.MINIGAME);
dkh2.setTitle(new TranslatableComponent("mco.template.title.minigame"));
dkh2.setWarning(new TranslatableComponent("mco.minigame.world.info.line1"), new TranslatableComponent("mco.minigame.world.info.line2"));
this.minecraft.setScreen(dkh2);
}
private void switchToFullSlot(final int integer, final RealmsServer realmsServer) {
final String string4 = RealmsScreen.getLocalizedString("mco.configure.world.slot.switch.question.line1");
final String string5 = RealmsScreen.getLocalizedString("mco.configure.world.slot.switch.question.line2");
Realms.setScreen(new RealmsLongConfirmationScreen((boolean3, integer4) -> {
private void switchToFullSlot(final int integer, final RealmsServer dip) {
final Component mr4 = new TranslatableComponent("mco.configure.world.slot.switch.question.line1");
final Component mr5 = new TranslatableComponent("mco.configure.world.slot.switch.question.line2");
this.minecraft.setScreen(new RealmsLongConfirmationScreen(boolean3 -> {
if (boolean3) {
this.switchSlot(realmsServer.id, integer);
this.minecraft.setScreen(new RealmsLongRunningMcoTaskScreen(this.lastScreen, new SwitchSlotTask(dip.id, integer, () -> this.minecraft.setScreen(this.getNewScreen()))));
}
else {
Realms.setScreen(this);
this.minecraft.setScreen(this);
}
}, RealmsLongConfirmationScreen.Type.Info, string4, string5, true, 9));
}, RealmsLongConfirmationScreen.Type.Info, mr4, mr5, true));
}
private void switchToEmptySlot(final int integer, final RealmsServer realmsServer) {
final String string4 = RealmsScreen.getLocalizedString("mco.configure.world.slot.switch.question.line1");
final String string5 = RealmsScreen.getLocalizedString("mco.configure.world.slot.switch.question.line2");
RealmsResetWorldScreen daf6;
Realms.setScreen(new RealmsLongConfirmationScreen((boolean3, integer4) -> {
private void switchToEmptySlot(final int integer, final RealmsServer dip) {
final Component mr4 = new TranslatableComponent("mco.configure.world.slot.switch.question.line1");
final Component mr5 = new TranslatableComponent("mco.configure.world.slot.switch.question.line2");
this.minecraft.setScreen(new RealmsLongConfirmationScreen(boolean3 -> {
if (boolean3) {
daf6 = new RealmsResetWorldScreen(this, realmsServer, this.getNewScreen(), RealmsScreen.getLocalizedString("mco.configure.world.switch.slot"), RealmsScreen.getLocalizedString("mco.configure.world.switch.slot.subtitle"), 10526880, RealmsScreen.getLocalizedString("gui.cancel"));
daf6.setSlot(integer);
daf6.setResetTitle(RealmsScreen.getLocalizedString("mco.create.world.reset.title"));
Realms.setScreen(daf6);
final RealmsResetWorldScreen dke5 = new RealmsResetWorldScreen(this, dip, new TranslatableComponent("mco.configure.world.switch.slot"), new TranslatableComponent("mco.configure.world.switch.slot.subtitle"), 10526880, CommonComponents.GUI_CANCEL, () -> this.minecraft.setScreen(this.getNewScreen()), () -> this.minecraft.setScreen(this.getNewScreen()));
dke5.setSlot(integer);
dke5.setResetTitle(I18n.get("mco.create.world.reset.title"));
this.minecraft.setScreen(dke5);
}
else {
Realms.setScreen(this);
this.minecraft.setScreen(this);
}
}, RealmsLongConfirmationScreen.Type.Info, string4, string5, true, 10));
}, RealmsLongConfirmationScreen.Type.Info, mr4, mr5, true));
}
protected void renderMousehoverTooltip(final String string, final int integer2, final int integer3) {
if (string == null) {
return;
protected void renderMousehoverTooltip(final PoseStack dhl, final Component mr, final int integer3, final int integer4) {
int integer5 = integer3 + 12;
final int integer6 = integer4 - 12;
final int integer7 = this.font.width(mr);
if (integer5 + integer7 + 3 > this.rightX) {
integer5 = integer5 - integer7 - 20;
}
int integer4 = integer2 + 12;
final int integer5 = integer3 - 12;
final int integer6 = this.fontWidth(string);
if (integer4 + integer6 + 3 > this.right_x) {
integer4 = integer4 - integer6 - 20;
}
this.fillGradient(integer4 - 3, integer5 - 3, integer4 + integer6 + 3, integer5 + 8 + 3, -1073741824, -1073741824);
this.fontDrawShadow(string, integer4, integer5, 16777215);
this.fillGradient(dhl, integer5 - 3, integer6 - 3, integer5 + integer7 + 3, integer6 + 8 + 3, -1073741824, -1073741824);
this.font.drawShadow(dhl, mr, (float)integer5, (float)integer6, 16777215);
}
private void drawServerStatus(final int integer1, final int integer2, final int integer3, final int integer4) {
private void drawServerStatus(final PoseStack dhl, final int integer2, final int integer3, final int integer4, final int integer5) {
if (this.serverData.expired) {
this.drawExpired(integer1, integer2, integer3, integer4);
this.drawExpired(dhl, integer2, integer3, integer4, integer5);
}
else if (this.serverData.state == RealmsServer.State.CLOSED) {
this.drawClose(integer1, integer2, integer3, integer4);
this.drawClose(dhl, integer2, integer3, integer4, integer5);
}
else if (this.serverData.state == RealmsServer.State.OPEN) {
if (this.serverData.daysLeft < 7) {
this.drawExpiring(integer1, integer2, integer3, integer4, this.serverData.daysLeft);
this.drawExpiring(dhl, integer2, integer3, integer4, integer5, this.serverData.daysLeft);
}
else {
this.drawOpen(integer1, integer2, integer3, integer4);
this.drawOpen(dhl, integer2, integer3, integer4, integer5);
}
}
}
private void drawExpired(final int integer1, final int integer2, final int integer3, final int integer4) {
RealmsScreen.bind("realms:textures/gui/realms/expired_icon.png");
private void drawExpired(final PoseStack dhl, final int integer2, final int integer3, final int integer4, final int integer5) {
this.minecraft.getTextureManager().bind(RealmsConfigureWorldScreen.EXPIRED_ICON_LOCATION);
RenderSystem.color4f(1.0f, 1.0f, 1.0f, 1.0f);
RenderSystem.pushMatrix();
RealmsScreen.blit(integer1, integer2, 0.0f, 0.0f, 10, 28, 10, 28);
RenderSystem.popMatrix();
if (integer3 >= integer1 && integer3 <= integer1 + 9 && integer4 >= integer2 && integer4 <= integer2 + 27) {
this.toolTip = RealmsScreen.getLocalizedString("mco.selectServer.expired");
GuiComponent.blit(dhl, integer2, integer3, 0.0f, 0.0f, 10, 28, 10, 28);
if (integer4 >= integer2 && integer4 <= integer2 + 9 && integer5 >= integer3 && integer5 <= integer3 + 27) {
this.toolTip = new TranslatableComponent("mco.selectServer.expired");
}
}
private void drawExpiring(final int integer1, final int integer2, final int integer3, final int integer4, final int integer5) {
RealmsScreen.bind("realms:textures/gui/realms/expires_soon_icon.png");
private void drawExpiring(final PoseStack dhl, final int integer2, final int integer3, final int integer4, final int integer5, final int integer6) {
this.minecraft.getTextureManager().bind(RealmsConfigureWorldScreen.EXPIRES_SOON_ICON_LOCATION);
RenderSystem.color4f(1.0f, 1.0f, 1.0f, 1.0f);
RenderSystem.pushMatrix();
if (this.animTick % 20 < 10) {
RealmsScreen.blit(integer1, integer2, 0.0f, 0.0f, 10, 28, 20, 28);
GuiComponent.blit(dhl, integer2, integer3, 0.0f, 0.0f, 10, 28, 20, 28);
}
else {
RealmsScreen.blit(integer1, integer2, 10.0f, 0.0f, 10, 28, 20, 28);
GuiComponent.blit(dhl, integer2, integer3, 10.0f, 0.0f, 10, 28, 20, 28);
}
RenderSystem.popMatrix();
if (integer3 >= integer1 && integer3 <= integer1 + 9 && integer4 >= integer2 && integer4 <= integer2 + 27) {
if (integer5 <= 0) {
this.toolTip = RealmsScreen.getLocalizedString("mco.selectServer.expires.soon");
if (integer4 >= integer2 && integer4 <= integer2 + 9 && integer5 >= integer3 && integer5 <= integer3 + 27) {
if (integer6 <= 0) {
this.toolTip = new TranslatableComponent("mco.selectServer.expires.soon");
}
else if (integer5 == 1) {
this.toolTip = RealmsScreen.getLocalizedString("mco.selectServer.expires.day");
else if (integer6 == 1) {
this.toolTip = new TranslatableComponent("mco.selectServer.expires.day");
}
else {
this.toolTip = RealmsScreen.getLocalizedString("mco.selectServer.expires.days", integer5);
this.toolTip = new TranslatableComponent("mco.selectServer.expires.days", new Object[] { integer6 });
}
}
}
private void drawOpen(final int integer1, final int integer2, final int integer3, final int integer4) {
RealmsScreen.bind("realms:textures/gui/realms/on_icon.png");
private void drawOpen(final PoseStack dhl, final int integer2, final int integer3, final int integer4, final int integer5) {
this.minecraft.getTextureManager().bind(RealmsConfigureWorldScreen.ON_ICON_LOCATION);
RenderSystem.color4f(1.0f, 1.0f, 1.0f, 1.0f);
RenderSystem.pushMatrix();
RealmsScreen.blit(integer1, integer2, 0.0f, 0.0f, 10, 28, 10, 28);
RenderSystem.popMatrix();
if (integer3 >= integer1 && integer3 <= integer1 + 9 && integer4 >= integer2 && integer4 <= integer2 + 27) {
this.toolTip = RealmsScreen.getLocalizedString("mco.selectServer.open");
GuiComponent.blit(dhl, integer2, integer3, 0.0f, 0.0f, 10, 28, 10, 28);
if (integer4 >= integer2 && integer4 <= integer2 + 9 && integer5 >= integer3 && integer5 <= integer3 + 27) {
this.toolTip = new TranslatableComponent("mco.selectServer.open");
}
}
private void drawClose(final int integer1, final int integer2, final int integer3, final int integer4) {
RealmsScreen.bind("realms:textures/gui/realms/off_icon.png");
private void drawClose(final PoseStack dhl, final int integer2, final int integer3, final int integer4, final int integer5) {
this.minecraft.getTextureManager().bind(RealmsConfigureWorldScreen.OFF_ICON_LOCATION);
RenderSystem.color4f(1.0f, 1.0f, 1.0f, 1.0f);
RenderSystem.pushMatrix();
RealmsScreen.blit(integer1, integer2, 0.0f, 0.0f, 10, 28, 10, 28);
RenderSystem.popMatrix();
if (integer3 >= integer1 && integer3 <= integer1 + 9 && integer4 >= integer2 && integer4 <= integer2 + 27) {
this.toolTip = RealmsScreen.getLocalizedString("mco.selectServer.closed");
GuiComponent.blit(dhl, integer2, integer3, 0.0f, 0.0f, 10, 28, 10, 28);
if (integer4 >= integer2 && integer4 <= integer2 + 9 && integer5 >= integer3 && integer5 <= integer3 + 27) {
this.toolTip = new TranslatableComponent("mco.selectServer.closed");
}
}
private boolean isMinigame() {
return this.serverData != null && this.serverData.worldType.equals(RealmsServer.WorldType.MINIGAME);
return this.serverData != null && this.serverData.worldType == RealmsServer.WorldType.MINIGAME;
}
private void hideRegularButtons() {
@ -415,81 +375,60 @@ public class RealmsConfigureWorldScreen extends RealmsScreenWithCallback<WorldTe
this.hide(this.resetWorldButton);
}
private void hide(final RealmsButton realmsButton) {
realmsButton.setVisible(false);
this.removeButton(realmsButton);
private void hide(final Button dni) {
dni.visible = false;
this.children.remove(dni);
this.buttons.remove(dni);
}
private void showRegularButtons() {
this.show(this.optionsButton);
this.show(this.backupButton);
this.show(this.resetWorldButton);
}
private void show(final RealmsButton realmsButton) {
realmsButton.setVisible(true);
this.buttonsAdd(realmsButton);
private void show(final Button dni) {
dni.visible = true;
this.<Button>addButton(dni);
}
private void hideMinigameButtons() {
this.hide(this.switchMinigameButton);
}
private void showMinigameButtons() {
this.show(this.switchMinigameButton);
}
public void saveSlotSettings(final RealmsWorldOptions realmsWorldOptions) {
final RealmsWorldOptions realmsWorldOptions2 = this.serverData.slots.get(this.serverData.activeSlot);
realmsWorldOptions.templateId = realmsWorldOptions2.templateId;
realmsWorldOptions.templateImage = realmsWorldOptions2.templateImage;
final RealmsClient cyy4 = RealmsClient.createRealmsClient();
public void saveSlotSettings(final RealmsWorldOptions div) {
final RealmsWorldOptions div2 = this.serverData.slots.get(this.serverData.activeSlot);
div.templateId = div2.templateId;
div.templateImage = div2.templateImage;
final RealmsClient dia4 = RealmsClient.create();
try {
cyy4.updateSlot(this.serverData.id, this.serverData.activeSlot, realmsWorldOptions);
this.serverData.slots.put(this.serverData.activeSlot, realmsWorldOptions);
dia4.updateSlot(this.serverData.id, this.serverData.activeSlot, div);
this.serverData.slots.put(this.serverData.activeSlot, div);
}
catch (RealmsServiceException czg5) {
catch (RealmsServiceException djh5) {
RealmsConfigureWorldScreen.LOGGER.error("Couldn't save slot settings");
Realms.setScreen(new RealmsGenericErrorScreen(czg5, this));
this.minecraft.setScreen(new RealmsGenericErrorScreen(djh5, this));
return;
}
catch (UnsupportedEncodingException unsupportedEncodingException5) {
RealmsConfigureWorldScreen.LOGGER.error("Couldn't save slot settings");
}
Realms.setScreen(this);
this.minecraft.setScreen(this);
}
public void saveSettings(final String string1, final String string2) {
final String string3 = (string2 == null || string2.trim().isEmpty()) ? null : string2;
final RealmsClient cyy5 = RealmsClient.createRealmsClient();
final String string3 = string2.trim().isEmpty() ? null : string2;
final RealmsClient dia5 = RealmsClient.create();
try {
cyy5.update(this.serverData.id, string1, string3);
dia5.update(this.serverData.id, string1, string3);
this.serverData.setName(string1);
this.serverData.setDescription(string3);
}
catch (RealmsServiceException czg6) {
catch (RealmsServiceException djh6) {
RealmsConfigureWorldScreen.LOGGER.error("Couldn't save settings");
Realms.setScreen(new RealmsGenericErrorScreen(czg6, this));
this.minecraft.setScreen(new RealmsGenericErrorScreen(djh6, this));
return;
}
catch (UnsupportedEncodingException unsupportedEncodingException6) {
RealmsConfigureWorldScreen.LOGGER.error("Couldn't save settings");
}
Realms.setScreen(this);
this.minecraft.setScreen(this);
}
public void openTheWorld(final boolean boolean1, final RealmsScreen realmsScreen) {
final RealmsTasks.OpenServerTask c4 = new RealmsTasks.OpenServerTask(this.serverData, this, this.lastScreen, boolean1);
final RealmsLongRunningMcoTaskScreen czz5 = new RealmsLongRunningMcoTaskScreen(realmsScreen, c4);
czz5.start();
Realms.setScreen(czz5);
public void openTheWorld(final boolean boolean1, final Screen dqs) {
this.minecraft.setScreen(new RealmsLongRunningMcoTaskScreen(dqs, new OpenServerTask(this.serverData, this, this.lastScreen, boolean1)));
}
public void closeTheWorld(final RealmsScreen realmsScreen) {
final RealmsTasks.CloseServerTask a3 = new RealmsTasks.CloseServerTask(this.serverData, this);
final RealmsLongRunningMcoTaskScreen czz4 = new RealmsLongRunningMcoTaskScreen(realmsScreen, a3);
czz4.start();
Realms.setScreen(czz4);
public void closeTheWorld(final Screen dqs) {
this.minecraft.setScreen(new RealmsLongRunningMcoTaskScreen(dqs, new CloseServerTask(this.serverData, this)));
}
public void stateChanged() {
@ -497,35 +436,24 @@ public class RealmsConfigureWorldScreen extends RealmsScreenWithCallback<WorldTe
}
@Override
void callback(final WorldTemplate worldTemplate) {
if (worldTemplate == null) {
protected void callback(@Nullable final WorldTemplate djd) {
if (djd == null) {
return;
}
if (WorldTemplate.WorldTemplateType.MINIGAME.equals(worldTemplate.type)) {
this.switchMinigame(worldTemplate);
if (WorldTemplate.WorldTemplateType.MINIGAME == djd.type) {
this.minecraft.setScreen(new RealmsLongRunningMcoTaskScreen(this.lastScreen, new SwitchMinigameTask(this.serverData.id, djd, this.getNewScreen())));
}
}
private void switchSlot(final long long1, final int integer) {
final RealmsConfigureWorldScreen czs5 = this.getNewScreen();
final RealmsTasks.SwitchSlotTask i6 = new RealmsTasks.SwitchSlotTask(long1, integer, (boolean2, integer) -> Realms.setScreen(czs5), 11);
final RealmsLongRunningMcoTaskScreen czz7 = new RealmsLongRunningMcoTaskScreen(this.lastScreen, i6);
czz7.start();
Realms.setScreen(czz7);
}
private void switchMinigame(final WorldTemplate worldTemplate) {
final RealmsTasks.SwitchMinigameTask h3 = new RealmsTasks.SwitchMinigameTask(this.serverData.id, worldTemplate, this.getNewScreen());
final RealmsLongRunningMcoTaskScreen czz4 = new RealmsLongRunningMcoTaskScreen(this.lastScreen, h3);
czz4.start();
Realms.setScreen(czz4);
}
public RealmsConfigureWorldScreen getNewScreen() {
return new RealmsConfigureWorldScreen(this.lastScreen, this.serverId);
}
static {
LOGGER = LogManager.getLogger();
ON_ICON_LOCATION = new ResourceLocation("realms", "textures/gui/realms/on_icon.png");
OFF_ICON_LOCATION = new ResourceLocation("realms", "textures/gui/realms/off_icon.png");
EXPIRED_ICON_LOCATION = new ResourceLocation("realms", "textures/gui/realms/expired_icon.png");
EXPIRES_SOON_ICON_LOCATION = new ResourceLocation("realms", "textures/gui/realms/expires_soon_icon.png");
}
}

View File

@ -1,51 +1,38 @@
package com.mojang.realmsclient.gui.screens;
import java.util.Iterator;
import net.minecraft.realms.AbstractRealmsButton;
import net.minecraft.realms.RealmsButton;
import com.mojang.realmsclient.gui.RealmsConstants;
import net.minecraft.client.gui.components.AbstractWidget;
import net.minecraft.network.chat.FormattedText;
import com.mojang.blaze3d.vertex.PoseStack;
import net.minecraft.client.gui.components.Button;
import net.minecraft.network.chat.CommonComponents;
import net.minecraft.network.chat.Component;
import it.unimi.dsi.fastutil.booleans.BooleanConsumer;
import net.minecraft.realms.RealmsScreen;
public class RealmsConfirmScreen extends RealmsScreen {
protected RealmsScreen parent;
protected String title1;
private final String title2;
protected String yesButton;
protected String noButton;
protected int id;
protected BooleanConsumer callback;
private final Component title1;
private final Component title2;
private int delayTicker;
public RealmsConfirmScreen(final RealmsScreen realmsScreen, final String string2, final String string3, final int integer) {
this.parent = realmsScreen;
this.title1 = string2;
this.title2 = string3;
this.id = integer;
this.yesButton = RealmsScreen.getLocalizedString("gui.yes");
this.noButton = RealmsScreen.getLocalizedString("gui.no");
public RealmsConfirmScreen(final BooleanConsumer booleanConsumer, final Component mr2, final Component mr3) {
this.callback = booleanConsumer;
this.title1 = mr2;
this.title2 = mr3;
}
@Override
public void init() {
this.buttonsAdd(new RealmsButton(0, this.width() / 2 - 105, RealmsConstants.row(9), 100, 20, this.yesButton) {
@Override
public void onPress() {
RealmsConfirmScreen.this.parent.confirmResult(true, RealmsConfirmScreen.this.id);
}
});
this.buttonsAdd(new RealmsButton(1, this.width() / 2 + 5, RealmsConstants.row(9), 100, 20, this.noButton) {
@Override
public void onPress() {
RealmsConfirmScreen.this.parent.confirmResult(false, RealmsConfirmScreen.this.id);
}
});
this.<Button>addButton(new Button(this.width / 2 - 105, RealmsScreen.row(9), 100, 20, CommonComponents.GUI_YES, dni -> this.callback.accept(true)));
this.<Button>addButton(new Button(this.width / 2 + 5, RealmsScreen.row(9), 100, 20, CommonComponents.GUI_NO, dni -> this.callback.accept(false)));
}
@Override
public void render(final int integer1, final int integer2, final float float3) {
this.renderBackground();
this.drawCenteredString(this.title1, this.width() / 2, RealmsConstants.row(3), 16777215);
this.drawCenteredString(this.title2, this.width() / 2, RealmsConstants.row(5), 16777215);
super.render(integer1, integer2, float3);
public void render(final PoseStack dhl, final int integer2, final int integer3, final float float4) {
this.renderBackground(dhl);
this.drawCenteredString(dhl, this.font, this.title1, this.width / 2, RealmsScreen.row(3), 16777215);
this.drawCenteredString(dhl, this.font, this.title2, this.width / 2, RealmsScreen.row(5), 16777215);
super.render(dhl, integer2, integer3, float4);
}
@Override
@ -54,8 +41,8 @@ public class RealmsConfirmScreen extends RealmsScreen {
final int delayTicker = this.delayTicker - 1;
this.delayTicker = delayTicker;
if (delayTicker == 0) {
for (final AbstractRealmsButton<?> abstractRealmsButton3 : this.buttons()) {
abstractRealmsButton3.active(true);
for (final AbstractWidget dng3 : this.buttons) {
dng3.active = true;
}
}
}

View File

@ -1,13 +1,17 @@
package com.mojang.realmsclient.gui.screens;
import com.mojang.realmsclient.gui.LongRunningTask;
import com.mojang.realmsclient.util.RealmsTasks;
import net.minecraft.realms.RealmsGuiEventListener;
import net.minecraft.realms.Realms;
import net.minecraft.realms.AbstractRealmsButton;
import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.realmsclient.util.task.LongRunningTask;
import com.mojang.realmsclient.util.task.WorldCreationTask;
import net.minecraft.client.resources.language.I18n;
import net.minecraft.client.gui.components.events.GuiEventListener;
import net.minecraft.client.gui.screens.Screen;
import net.minecraft.network.chat.CommonComponents;
import net.minecraft.network.chat.Component;
import net.minecraft.network.chat.TranslatableComponent;
import net.minecraft.realms.RealmsLabel;
import net.minecraft.realms.RealmsButton;
import net.minecraft.realms.RealmsEditBox;
import net.minecraft.client.gui.components.Button;
import net.minecraft.client.gui.components.EditBox;
import com.mojang.realmsclient.RealmsMainScreen;
import com.mojang.realmsclient.dto.RealmsServer;
import net.minecraft.realms.RealmsScreen;
@ -15,14 +19,14 @@ import net.minecraft.realms.RealmsScreen;
public class RealmsCreateRealmScreen extends RealmsScreen {
private final RealmsServer server;
private final RealmsMainScreen lastScreen;
private RealmsEditBox nameBox;
private RealmsEditBox descriptionBox;
private RealmsButton createButton;
private EditBox nameBox;
private EditBox descriptionBox;
private Button createButton;
private RealmsLabel createRealmLabel;
public RealmsCreateRealmScreen(final RealmsServer realmsServer, final RealmsMainScreen cyu) {
this.server = realmsServer;
this.lastScreen = cyu;
public RealmsCreateRealmScreen(final RealmsServer dip, final RealmsMainScreen dhv) {
this.server = dip;
this.lastScreen = dhv;
}
@Override
@ -35,81 +39,65 @@ public class RealmsCreateRealmScreen extends RealmsScreen {
}
}
@Override
public void init() {
this.setKeyboardHandlerSendRepeatsToGui(true);
this.buttonsAdd(this.createButton = new RealmsButton(0, this.width() / 2 - 100, this.height() / 4 + 120 + 17, 97, 20, RealmsScreen.getLocalizedString("mco.create.world")) {
@Override
public void onPress() {
RealmsCreateRealmScreen.this.createWorld();
}
});
this.buttonsAdd(new RealmsButton(1, this.width() / 2 + 5, this.height() / 4 + 120 + 17, 95, 20, RealmsScreen.getLocalizedString("gui.cancel")) {
@Override
public void onPress() {
Realms.setScreen(RealmsCreateRealmScreen.this.lastScreen);
}
});
this.createButton.active(false);
this.addWidget(this.nameBox = this.newEditBox(3, this.width() / 2 - 100, 65, 200, 20, RealmsScreen.getLocalizedString("mco.configure.world.name")));
this.focusOn(this.nameBox);
this.addWidget(this.descriptionBox = this.newEditBox(4, this.width() / 2 - 100, 115, 200, 20, RealmsScreen.getLocalizedString("mco.configure.world.description")));
this.addWidget(this.createRealmLabel = new RealmsLabel(RealmsScreen.getLocalizedString("mco.selectServer.create"), this.width() / 2, 11, 16777215));
this.minecraft.keyboardHandler.setSendRepeatsToGui(true);
this.createButton = this.<Button>addButton(new Button(this.width / 2 - 100, this.height / 4 + 120 + 17, 97, 20, new TranslatableComponent("mco.create.world"), dni -> this.createWorld()));
this.<Button>addButton(new Button(this.width / 2 + 5, this.height / 4 + 120 + 17, 95, 20, CommonComponents.GUI_CANCEL, dni -> this.minecraft.setScreen(this.lastScreen)));
this.createButton.active = false;
this.<EditBox>addWidget(this.nameBox = new EditBox(this.minecraft.font, this.width / 2 - 100, 65, 200, 20, null, new TranslatableComponent("mco.configure.world.name")));
this.setInitialFocus(this.nameBox);
this.<EditBox>addWidget(this.descriptionBox = new EditBox(this.minecraft.font, this.width / 2 - 100, 115, 200, 20, null, new TranslatableComponent("mco.configure.world.description")));
this.<RealmsLabel>addWidget(this.createRealmLabel = new RealmsLabel(new TranslatableComponent("mco.selectServer.create"), this.width / 2, 11, 16777215));
this.narrateLabels();
}
@Override
public void removed() {
this.setKeyboardHandlerSendRepeatsToGui(false);
this.minecraft.keyboardHandler.setSendRepeatsToGui(false);
}
@Override
public boolean charTyped(final char character, final int integer) {
this.createButton.active(this.valid());
return false;
final boolean boolean4 = super.charTyped(character, integer);
this.createButton.active = this.valid();
return boolean4;
}
@Override
public boolean keyPressed(final int integer1, final int integer2, final int integer3) {
switch (integer1) {
case 256: {
Realms.setScreen(this.lastScreen);
return true;
}
default: {
this.createButton.active(this.valid());
return false;
}
if (integer1 == 256) {
this.minecraft.setScreen(this.lastScreen);
return true;
}
final boolean boolean5 = super.keyPressed(integer1, integer2, integer3);
this.createButton.active = this.valid();
return boolean5;
}
private void createWorld() {
if (this.valid()) {
final RealmsResetWorldScreen daf2 = new RealmsResetWorldScreen(this.lastScreen, this.server, this.lastScreen.newScreen(), RealmsScreen.getLocalizedString("mco.selectServer.create"), RealmsScreen.getLocalizedString("mco.create.world.subtitle"), 10526880, RealmsScreen.getLocalizedString("mco.create.world.skip"));
daf2.setResetTitle(RealmsScreen.getLocalizedString("mco.create.world.reset.title"));
final RealmsTasks.WorldCreationTask j3 = new RealmsTasks.WorldCreationTask(this.server.id, this.nameBox.getValue(), this.descriptionBox.getValue(), daf2);
final RealmsLongRunningMcoTaskScreen czz4 = new RealmsLongRunningMcoTaskScreen(this.lastScreen, j3);
czz4.start();
Realms.setScreen(czz4);
final RealmsResetWorldScreen dke2 = new RealmsResetWorldScreen(this.lastScreen, this.server, new TranslatableComponent("mco.selectServer.create"), new TranslatableComponent("mco.create.world.subtitle"), 10526880, new TranslatableComponent("mco.create.world.skip"), () -> this.minecraft.setScreen(this.lastScreen.newScreen()), () -> this.minecraft.setScreen(this.lastScreen.newScreen()));
dke2.setResetTitle(I18n.get("mco.create.world.reset.title"));
this.minecraft.setScreen(new RealmsLongRunningMcoTaskScreen(this.lastScreen, new WorldCreationTask(this.server.id, this.nameBox.getValue(), this.descriptionBox.getValue(), dke2)));
}
}
private boolean valid() {
return this.nameBox.getValue() != null && !this.nameBox.getValue().trim().isEmpty();
return !this.nameBox.getValue().trim().isEmpty();
}
@Override
public void render(final int integer1, final int integer2, final float float3) {
this.renderBackground();
this.createRealmLabel.render(this);
this.drawString(RealmsScreen.getLocalizedString("mco.configure.world.name"), this.width() / 2 - 100, 52, 10526880);
this.drawString(RealmsScreen.getLocalizedString("mco.configure.world.description"), this.width() / 2 - 100, 102, 10526880);
public void render(final PoseStack dhl, final int integer2, final int integer3, final float float4) {
this.renderBackground(dhl);
this.createRealmLabel.render(this, dhl);
this.font.draw(dhl, I18n.get("mco.configure.world.name"), (float)(this.width / 2 - 100), 52.0f, 10526880);
this.font.draw(dhl, I18n.get("mco.configure.world.description"), (float)(this.width / 2 - 100), 102.0f, 10526880);
if (this.nameBox != null) {
this.nameBox.render(integer1, integer2, float3);
this.nameBox.render(dhl, integer2, integer3, float4);
}
if (this.descriptionBox != null) {
this.descriptionBox.render(integer1, integer2, float3);
this.descriptionBox.render(dhl, integer2, integer3, float4);
}
super.render(integer1, integer2, float3);
super.render(dhl, integer2, integer3, float4);
}
}

View File

@ -2,34 +2,47 @@ package com.mojang.realmsclient.gui.screens;
import org.apache.logging.log4j.LogManager;
import java.util.concurrent.TimeUnit;
import net.minecraft.realms.RealmsDefaultVertexFormat;
import net.minecraft.realms.Tezzelator;
import net.minecraft.Util;
import com.mojang.blaze3d.vertex.BufferBuilder;
import com.mojang.blaze3d.vertex.DefaultVertexFormat;
import com.mojang.blaze3d.vertex.Tesselator;
import com.mojang.blaze3d.systems.RenderSystem;
import java.util.Locale;
import net.minecraft.network.chat.FormattedText;
import com.mojang.blaze3d.vertex.PoseStack;
import java.util.List;
import net.minecraft.realms.NarrationHelper;
import java.util.stream.Collector;
import java.util.stream.Collectors;
import java.util.function.Function;
import net.minecraft.network.chat.TextComponent;
import com.google.common.collect.Lists;
import com.mojang.realmsclient.client.FileDownload;
import net.minecraft.realms.Realms;
import net.minecraft.realms.RealmsConfirmResultListener;
import net.minecraft.realms.AbstractRealmsButton;
import java.util.concurrent.locks.ReentrantLock;
import net.minecraft.realms.RealmsButton;
import com.mojang.realmsclient.Unit;
import net.minecraft.network.chat.CommonComponents;
import net.minecraft.network.chat.TranslatableComponent;
import it.unimi.dsi.fastutil.booleans.BooleanConsumer;
import net.minecraft.client.gui.components.Button;
import com.google.common.util.concurrent.RateLimiter;
import net.minecraft.network.chat.Component;
import com.mojang.realmsclient.dto.WorldDownload;
import net.minecraft.client.gui.screens.Screen;
import java.util.concurrent.locks.ReentrantLock;
import org.apache.logging.log4j.Logger;
import net.minecraft.realms.RealmsScreen;
public class RealmsDownloadLatestWorldScreen extends RealmsScreen {
private static final Logger LOGGER;
private final RealmsScreen lastScreen;
private static final ReentrantLock DOWNLOAD_LOCK;
private final Screen lastScreen;
private final WorldDownload worldDownload;
private final String downloadTitle;
private final Component downloadTitle;
private final RateLimiter narrationRateLimiter;
private RealmsButton cancelButton;
private Button cancelButton;
private final String worldName;
private final DownloadStatus downloadStatus;
private volatile String errorMessage;
private volatile String status;
private volatile Component errorMessage;
private volatile Component status;
private volatile String progress;
private volatile boolean cancelled;
private volatile boolean showDots;
@ -41,36 +54,28 @@ public class RealmsDownloadLatestWorldScreen extends RealmsScreen {
private int animTick;
private static final String[] DOTS;
private int dotIndex;
private final int WARNING_ID = 100;
private int confirmationId;
private boolean checked;
private static final ReentrantLock downloadLock;
private final BooleanConsumer callback;
public RealmsDownloadLatestWorldScreen(final RealmsScreen realmsScreen, final WorldDownload worldDownload, final String string) {
public RealmsDownloadLatestWorldScreen(final Screen dqs, final WorldDownload djc, final String string, final BooleanConsumer booleanConsumer) {
this.status = new TranslatableComponent("mco.download.preparing");
this.showDots = true;
this.confirmationId = -1;
this.lastScreen = realmsScreen;
this.callback = booleanConsumer;
this.lastScreen = dqs;
this.worldName = string;
this.worldDownload = worldDownload;
this.worldDownload = djc;
this.downloadStatus = new DownloadStatus();
this.downloadTitle = RealmsScreen.getLocalizedString("mco.download.title");
this.downloadTitle = new TranslatableComponent("mco.download.title");
this.narrationRateLimiter = RateLimiter.create(0.10000000149011612);
}
public void setConfirmationId(final int integer) {
this.confirmationId = integer;
}
@Override
public void init() {
this.setKeyboardHandlerSendRepeatsToGui(true);
this.buttonsAdd(this.cancelButton = new RealmsButton(0, this.width() / 2 - 100, this.height() - 42, 200, 20, RealmsScreen.getLocalizedString("gui.cancel")) {
@Override
public void onPress() {
RealmsDownloadLatestWorldScreen.this.cancelled = true;
RealmsDownloadLatestWorldScreen.this.backButtonClicked();
}
});
this.minecraft.keyboardHandler.setSendRepeatsToGui(true);
this.cancelButton = this.<Button>addButton(new Button(this.width / 2 - 100, this.height - 42, 200, 20, CommonComponents.GUI_CANCEL, dni -> {
this.cancelled = true;
this.backButtonClicked();
return;
}));
this.checkDownloadSize();
}
@ -79,25 +84,22 @@ public class RealmsDownloadLatestWorldScreen extends RealmsScreen {
return;
}
if (!this.checked && this.getContentLength(this.worldDownload.downloadLink) >= 5368709120L) {
final String string2 = RealmsScreen.getLocalizedString("mco.download.confirmation.line1", humanReadableSize(5368709120L));
final String string3 = RealmsScreen.getLocalizedString("mco.download.confirmation.line2");
Realms.setScreen(new RealmsLongConfirmationScreen(this, RealmsLongConfirmationScreen.Type.Warning, string2, string3, false, 100));
final Component mr2 = new TranslatableComponent("mco.download.confirmation.line1", new Object[] { Unit.humanReadable(5368709120L) });
final Component mr3 = new TranslatableComponent("mco.download.confirmation.line2");
this.minecraft.setScreen(new RealmsLongConfirmationScreen(boolean1 -> {
this.checked = true;
this.minecraft.setScreen(this);
this.downloadSave();
}, RealmsLongConfirmationScreen.Type.Warning, mr2, mr3, false));
}
else {
this.downloadSave();
}
}
@Override
public void confirmResult(final boolean boolean1, final int integer) {
this.checked = true;
Realms.setScreen(this);
this.downloadSave();
}
private long getContentLength(final String string) {
final FileDownload cyv3 = new FileDownload();
return cyv3.contentLength(string);
final FileDownload dhx3 = new FileDownload();
return dhx3.contentLength(string);
}
@Override
@ -105,18 +107,18 @@ public class RealmsDownloadLatestWorldScreen extends RealmsScreen {
super.tick();
++this.animTick;
if (this.status != null && this.narrationRateLimiter.tryAcquire(1)) {
final List<String> list2 = Lists.newArrayList();
final List<Component> list2 = Lists.newArrayList();
list2.add(this.downloadTitle);
list2.add(this.status);
if (this.progress != null) {
list2.add(this.progress + "%");
list2.add(humanReadableSpeed(this.bytesPersSecond));
list2.add(new TextComponent(this.progress + "%"));
list2.add(new TextComponent(Unit.humanReadable(this.bytesPersSecond) + "/s"));
}
if (this.errorMessage != null) {
list2.add(this.errorMessage);
}
final String string3 = String.join(System.lineSeparator(), list2);
Realms.narrateNow(string3);
final String string3 = list2.stream().map(Component::getString).collect(Collectors.joining("\n"));
NarrationHelper.now(string3);
}
}
@ -131,164 +133,147 @@ public class RealmsDownloadLatestWorldScreen extends RealmsScreen {
}
private void backButtonClicked() {
if (this.finished && this.confirmationId != -1 && this.errorMessage == null) {
this.lastScreen.confirmResult(true, this.confirmationId);
if (this.finished && this.callback != null && this.errorMessage == null) {
this.callback.accept(true);
}
Realms.setScreen(this.lastScreen);
this.minecraft.setScreen(this.lastScreen);
}
@Override
public void render(final int integer1, final int integer2, final float float3) {
this.renderBackground();
public void render(final PoseStack dhl, final int integer2, final int integer3, final float float4) {
this.renderBackground(dhl);
if (this.extracting && !this.finished) {
this.status = RealmsScreen.getLocalizedString("mco.download.extracting");
this.status = new TranslatableComponent("mco.download.extracting");
}
this.drawCenteredString(this.downloadTitle, this.width() / 2, 20, 16777215);
this.drawCenteredString(this.status, this.width() / 2, 50, 16777215);
this.drawCenteredString(dhl, this.font, this.downloadTitle, this.width / 2, 20, 16777215);
this.drawCenteredString(dhl, this.font, this.status, this.width / 2, 50, 16777215);
if (this.showDots) {
this.drawDots();
this.drawDots(dhl);
}
if (this.downloadStatus.bytesWritten != 0L && !this.cancelled) {
this.drawProgressBar();
this.drawDownloadSpeed();
this.drawProgressBar(dhl);
this.drawDownloadSpeed(dhl);
}
if (this.errorMessage != null) {
this.drawCenteredString(this.errorMessage, this.width() / 2, 110, 16711680);
this.drawCenteredString(dhl, this.font, this.errorMessage, this.width / 2, 110, 16711680);
}
super.render(integer1, integer2, float3);
super.render(dhl, integer2, integer3, float4);
}
private void drawDots() {
final int integer2 = this.fontWidth(this.status);
private void drawDots(final PoseStack dhl) {
final int integer3 = this.font.width(this.status);
if (this.animTick % 10 == 0) {
++this.dotIndex;
}
this.drawString(RealmsDownloadLatestWorldScreen.DOTS[this.dotIndex % RealmsDownloadLatestWorldScreen.DOTS.length], this.width() / 2 + integer2 / 2 + 5, 50, 16777215);
this.font.draw(dhl, RealmsDownloadLatestWorldScreen.DOTS[this.dotIndex % RealmsDownloadLatestWorldScreen.DOTS.length], (float)(this.width / 2 + integer3 / 2 + 5), 50.0f, 16777215);
}
private void drawProgressBar() {
final double double2 = this.downloadStatus.bytesWritten / (double)this.downloadStatus.totalBytes * 100.0;
this.progress = String.format(Locale.ROOT, "%.1f", double2);
private void drawProgressBar(final PoseStack dhl) {
final double double3 = this.downloadStatus.bytesWritten / (double)this.downloadStatus.totalBytes * 100.0;
this.progress = String.format(Locale.ROOT, "%.1f", double3);
RenderSystem.color4f(1.0f, 1.0f, 1.0f, 1.0f);
RenderSystem.disableTexture();
final Tezzelator tezzelator4 = Tezzelator.instance;
tezzelator4.begin(7, RealmsDefaultVertexFormat.POSITION_COLOR);
final double double3 = this.width() / 2 - 100;
final double double4 = 0.5;
tezzelator4.vertex(double3 - 0.5, 95.5, 0.0).color(217, 210, 210, 255).endVertex();
tezzelator4.vertex(double3 + 200.0 * double2 / 100.0 + 0.5, 95.5, 0.0).color(217, 210, 210, 255).endVertex();
tezzelator4.vertex(double3 + 200.0 * double2 / 100.0 + 0.5, 79.5, 0.0).color(217, 210, 210, 255).endVertex();
tezzelator4.vertex(double3 - 0.5, 79.5, 0.0).color(217, 210, 210, 255).endVertex();
tezzelator4.vertex(double3, 95.0, 0.0).color(128, 128, 128, 255).endVertex();
tezzelator4.vertex(double3 + 200.0 * double2 / 100.0, 95.0, 0.0).color(128, 128, 128, 255).endVertex();
tezzelator4.vertex(double3 + 200.0 * double2 / 100.0, 80.0, 0.0).color(128, 128, 128, 255).endVertex();
tezzelator4.vertex(double3, 80.0, 0.0).color(128, 128, 128, 255).endVertex();
tezzelator4.end();
final Tesselator dhn5 = Tesselator.getInstance();
final BufferBuilder dhg6 = dhn5.getBuilder();
dhg6.begin(7, DefaultVertexFormat.POSITION_COLOR);
final double double4 = this.width / 2 - 100;
final double double5 = 0.5;
dhg6.vertex(double4 - 0.5, 95.5, 0.0).color(217, 210, 210, 255).endVertex();
dhg6.vertex(double4 + 200.0 * double3 / 100.0 + 0.5, 95.5, 0.0).color(217, 210, 210, 255).endVertex();
dhg6.vertex(double4 + 200.0 * double3 / 100.0 + 0.5, 79.5, 0.0).color(217, 210, 210, 255).endVertex();
dhg6.vertex(double4 - 0.5, 79.5, 0.0).color(217, 210, 210, 255).endVertex();
dhg6.vertex(double4, 95.0, 0.0).color(128, 128, 128, 255).endVertex();
dhg6.vertex(double4 + 200.0 * double3 / 100.0, 95.0, 0.0).color(128, 128, 128, 255).endVertex();
dhg6.vertex(double4 + 200.0 * double3 / 100.0, 80.0, 0.0).color(128, 128, 128, 255).endVertex();
dhg6.vertex(double4, 80.0, 0.0).color(128, 128, 128, 255).endVertex();
dhn5.end();
RenderSystem.enableTexture();
this.drawCenteredString(this.progress + " %", this.width() / 2, 84, 16777215);
this.drawCenteredString(dhl, this.font, this.progress + " %", this.width / 2, 84, 16777215);
}
private void drawDownloadSpeed() {
private void drawDownloadSpeed(final PoseStack dhl) {
if (this.animTick % 20 == 0) {
if (this.previousWrittenBytes != null) {
long long2 = System.currentTimeMillis() - this.previousTimeSnapshot;
if (long2 == 0L) {
long2 = 1L;
long long3 = Util.getMillis() - this.previousTimeSnapshot;
if (long3 == 0L) {
long3 = 1L;
}
this.drawDownloadSpeed0(this.bytesPersSecond = 1000L * (this.downloadStatus.bytesWritten - this.previousWrittenBytes) / long2);
this.drawDownloadSpeed0(dhl, this.bytesPersSecond = 1000L * (this.downloadStatus.bytesWritten - this.previousWrittenBytes) / long3);
}
this.previousWrittenBytes = this.downloadStatus.bytesWritten;
this.previousTimeSnapshot = System.currentTimeMillis();
this.previousTimeSnapshot = Util.getMillis();
}
else {
this.drawDownloadSpeed0(this.bytesPersSecond);
this.drawDownloadSpeed0(dhl, this.bytesPersSecond);
}
}
private void drawDownloadSpeed0(final long long1) {
if (long1 > 0L) {
final int integer4 = this.fontWidth(this.progress);
final String string5 = "(" + humanReadableSpeed(long1) + ")";
this.drawString(string5, this.width() / 2 + integer4 / 2 + 15, 84, 16777215);
private void drawDownloadSpeed0(final PoseStack dhl, final long long2) {
if (long2 > 0L) {
final int integer5 = this.font.width(this.progress);
final String string6 = "(" + Unit.humanReadable(long2) + "/s)";
this.font.draw(dhl, string6, (float)(this.width / 2 + integer5 / 2 + 15), 84.0f, 16777215);
}
}
public static String humanReadableSpeed(final long long1) {
final int integer3 = 1024;
if (long1 < 1024L) {
return long1 + " B/s";
}
final int integer4 = (int)(Math.log((double)long1) / Math.log(1024.0));
final String string5 = "KMGTPE".charAt(integer4 - 1) + "";
return String.format(Locale.ROOT, "%.1f %sB/s", long1 / Math.pow(1024.0, integer4), string5);
}
public static String humanReadableSize(final long long1) {
final int integer3 = 1024;
if (long1 < 1024L) {
return long1 + " B";
}
final int integer4 = (int)(Math.log((double)long1) / Math.log(1024.0));
final String string5 = "KMGTPE".charAt(integer4 - 1) + "";
return String.format(Locale.ROOT, "%.0f %sB", long1 / Math.pow(1024.0, integer4), string5);
}
private void downloadSave() {
FileDownload cyv2;
final TranslatableComponent status;
FileDownload dhx2;
new Thread(() -> {
try {
if (!(!RealmsDownloadLatestWorldScreen.downloadLock.tryLock(1L, TimeUnit.SECONDS))) {
this.status = RealmsScreen.getLocalizedString("mco.download.preparing");
if (this.cancelled) {
this.downloadCancelled();
}
else {
this.status = RealmsScreen.getLocalizedString("mco.download.downloading", this.worldName);
cyv2 = new FileDownload();
cyv2.contentLength(this.worldDownload.downloadLink);
cyv2.download(this.worldDownload, this.worldName, this.downloadStatus, this.getLevelStorageSource());
while (!cyv2.isFinished()) {
if (cyv2.isError()) {
cyv2.cancel();
this.errorMessage = RealmsScreen.getLocalizedString("mco.download.failed");
this.cancelButton.setMessage(RealmsScreen.getLocalizedString("gui.done"));
if (!RealmsDownloadLatestWorldScreen.DOWNLOAD_LOCK.tryLock(1L, TimeUnit.SECONDS)) {
this.status = new TranslatableComponent("mco.download.failed");
}
else if (this.cancelled) {
this.downloadCancelled();
}
else {
new TranslatableComponent("mco.download.downloading", new Object[] { this.worldName });
this.status = status;
dhx2 = new FileDownload();
dhx2.contentLength(this.worldDownload.downloadLink);
dhx2.download(this.worldDownload, this.worldName, this.downloadStatus, this.minecraft.getLevelSource());
while (!dhx2.isFinished()) {
if (dhx2.isError()) {
dhx2.cancel();
this.errorMessage = new TranslatableComponent("mco.download.failed");
this.cancelButton.setMessage(CommonComponents.GUI_DONE);
return;
}
else {
if (dhx2.isExtracting()) {
this.extracting = true;
}
if (this.cancelled) {
dhx2.cancel();
this.downloadCancelled();
return;
}
else {
if (cyv2.isExtracting()) {
this.extracting = true;
try {
Thread.sleep(500L);
}
if (this.cancelled) {
cyv2.cancel();
this.downloadCancelled();
return;
}
else {
try {
Thread.sleep(500L);
}
catch (InterruptedException interruptedException3) {
RealmsDownloadLatestWorldScreen.LOGGER.error("Failed to check Realms backup download status");
}
catch (InterruptedException interruptedException3) {
RealmsDownloadLatestWorldScreen.LOGGER.error("Failed to check Realms backup download status");
}
}
}
this.finished = true;
this.status = RealmsScreen.getLocalizedString("mco.download.done");
this.cancelButton.setMessage(RealmsScreen.getLocalizedString("gui.done"));
}
this.finished = true;
this.status = new TranslatableComponent("mco.download.done");
this.cancelButton.setMessage(CommonComponents.GUI_DONE);
}
}
catch (InterruptedException interruptedException4) {
RealmsDownloadLatestWorldScreen.LOGGER.error("Could not acquire upload lock");
}
catch (Exception exception2) {
this.errorMessage = RealmsScreen.getLocalizedString("mco.download.failed");
this.errorMessage = new TranslatableComponent("mco.download.failed");
exception2.printStackTrace();
}
finally {
if (RealmsDownloadLatestWorldScreen.downloadLock.isHeldByCurrentThread()) {
RealmsDownloadLatestWorldScreen.downloadLock.unlock();
if (RealmsDownloadLatestWorldScreen.DOWNLOAD_LOCK.isHeldByCurrentThread()) {
RealmsDownloadLatestWorldScreen.DOWNLOAD_LOCK.unlock();
this.showDots = false;
this.finished = true;
}
@ -297,13 +282,13 @@ public class RealmsDownloadLatestWorldScreen extends RealmsScreen {
}
private void downloadCancelled() {
this.status = RealmsScreen.getLocalizedString("mco.download.cancelled");
this.status = new TranslatableComponent("mco.download.cancelled");
}
static {
LOGGER = LogManager.getLogger();
DOWNLOAD_LOCK = new ReentrantLock();
DOTS = new String[] { "", ".", ". .", ". . ." };
downloadLock = new ReentrantLock();
}
public class DownloadStatus {

View File

@ -1,75 +1,69 @@
package com.mojang.realmsclient.gui.screens;
import net.minecraft.realms.AbstractRealmsButton;
import net.minecraft.realms.RealmsButton;
import net.minecraft.realms.Realms;
import net.minecraft.network.chat.FormattedText;
import com.mojang.blaze3d.vertex.PoseStack;
import net.minecraft.client.gui.components.Button;
import net.minecraft.realms.NarrationHelper;
import net.minecraft.network.chat.TranslatableComponent;
import net.minecraft.client.resources.language.I18n;
import net.minecraft.network.chat.TextComponent;
import com.mojang.realmsclient.exception.RealmsServiceException;
import net.minecraft.network.chat.Component;
import net.minecraft.client.gui.screens.Screen;
import net.minecraft.realms.RealmsScreen;
public class RealmsGenericErrorScreen extends RealmsScreen {
private final RealmsScreen nextScreen;
private String line1;
private String line2;
private final Screen nextScreen;
private Component line1;
private Component line2;
public RealmsGenericErrorScreen(final RealmsServiceException czg, final RealmsScreen realmsScreen) {
this.nextScreen = realmsScreen;
this.errorMessage(czg);
public RealmsGenericErrorScreen(final RealmsServiceException djh, final Screen dqs) {
this.nextScreen = dqs;
this.errorMessage(djh);
}
public RealmsGenericErrorScreen(final String string, final RealmsScreen realmsScreen) {
this.nextScreen = realmsScreen;
this.errorMessage(string);
public RealmsGenericErrorScreen(final Component mr, final Screen dqs) {
this.nextScreen = dqs;
this.errorMessage(mr);
}
public RealmsGenericErrorScreen(final String string1, final String string2, final RealmsScreen realmsScreen) {
this.nextScreen = realmsScreen;
this.errorMessage(string1, string2);
public RealmsGenericErrorScreen(final Component mr1, final Component mr2, final Screen dqs) {
this.nextScreen = dqs;
this.errorMessage(mr1, mr2);
}
private void errorMessage(final RealmsServiceException czg) {
if (czg.errorCode == -1) {
this.line1 = "An error occurred (" + czg.httpResultCode + "):";
this.line2 = czg.httpResponseContent;
private void errorMessage(final RealmsServiceException djh) {
if (djh.errorCode == -1) {
this.line1 = new TextComponent("An error occurred (" + djh.httpResultCode + "):");
this.line2 = new TextComponent(djh.httpResponseContent);
}
else {
this.line1 = "Realms (" + czg.errorCode + "):";
final String string3 = "mco.errorMessage." + czg.errorCode;
final String string4 = RealmsScreen.getLocalizedString(string3);
this.line2 = (string4.equals(string3) ? czg.errorMsg : string4);
this.line1 = new TextComponent("Realms (" + djh.errorCode + "):");
final String string3 = "mco.errorMessage." + djh.errorCode;
this.line2 = (I18n.exists(string3) ? new TranslatableComponent(string3) : Component.nullToEmpty(djh.errorMsg));
}
}
private void errorMessage(final String string) {
this.line1 = "An error occurred: ";
this.line2 = string;
private void errorMessage(final Component mr) {
this.line1 = new TextComponent("An error occurred: ");
this.line2 = mr;
}
private void errorMessage(final String string1, final String string2) {
this.line1 = string1;
this.line2 = string2;
private void errorMessage(final Component mr1, final Component mr2) {
this.line1 = mr1;
this.line2 = mr2;
}
@Override
public void init() {
Realms.narrateNow(this.line1 + ": " + this.line2);
this.buttonsAdd(new RealmsButton(10, this.width() / 2 - 100, this.height() - 52, 200, 20, "Ok") {
@Override
public void onPress() {
Realms.setScreen(RealmsGenericErrorScreen.this.nextScreen);
}
});
NarrationHelper.now(this.line1.getString() + ": " + this.line2.getString());
this.<Button>addButton(new Button(this.width / 2 - 100, this.height - 52, 200, 20, new TextComponent("Ok"), dni -> this.minecraft.setScreen(this.nextScreen)));
}
@Override
public void tick() {
super.tick();
}
@Override
public void render(final int integer1, final int integer2, final float float3) {
this.renderBackground();
this.drawCenteredString(this.line1, this.width() / 2, 80, 16777215);
this.drawCenteredString(this.line2, this.width() / 2, 100, 16711680);
super.render(integer1, integer2, float3);
public void render(final PoseStack dhl, final int integer2, final int integer3, final float float4) {
this.renderBackground(dhl);
this.drawCenteredString(dhl, this.font, this.line1, this.width / 2, 80, 16777215);
this.drawCenteredString(dhl, this.font, this.line2, this.width / 2, 100, 16711680);
super.render(dhl, integer2, integer3, float4);
}
}

View File

@ -1,34 +1,34 @@
package com.mojang.realmsclient.gui.screens;
import org.apache.logging.log4j.LogManager;
import com.mojang.blaze3d.vertex.PoseStack;
import net.minecraft.realms.NarrationHelper;
import net.minecraft.client.resources.language.I18n;
import com.mojang.realmsclient.client.RealmsClient;
import net.minecraft.realms.RealmsGuiEventListener;
import net.minecraft.realms.Realms;
import net.minecraft.realms.AbstractRealmsButton;
import com.mojang.realmsclient.gui.RealmsConstants;
import net.minecraft.realms.RealmsButton;
import net.minecraft.network.chat.CommonComponents;
import net.minecraft.client.gui.components.Button;
import net.minecraft.client.gui.components.events.GuiEventListener;
import net.minecraft.network.chat.Component;
import net.minecraft.network.chat.TranslatableComponent;
import net.minecraft.client.gui.screens.Screen;
import com.mojang.realmsclient.dto.RealmsServer;
import net.minecraft.realms.RealmsEditBox;
import net.minecraft.client.gui.components.EditBox;
import org.apache.logging.log4j.Logger;
import net.minecraft.realms.RealmsScreen;
public class RealmsInviteScreen extends RealmsScreen {
private static final Logger LOGGER;
private RealmsEditBox profileName;
private EditBox profileName;
private final RealmsServer serverData;
private final RealmsConfigureWorldScreen configureScreen;
private final RealmsScreen lastScreen;
private final int BUTTON_INVITE_ID = 0;
private final int BUTTON_CANCEL_ID = 1;
private RealmsButton inviteButton;
private final int PROFILENAME_EDIT_BOX = 2;
private final Screen lastScreen;
private String errorMsg;
private boolean showError;
public RealmsInviteScreen(final RealmsConfigureWorldScreen czs, final RealmsScreen realmsScreen, final RealmsServer realmsServer) {
this.configureScreen = czs;
this.lastScreen = realmsScreen;
this.serverData = realmsServer;
public RealmsInviteScreen(final RealmsConfigureWorldScreen djr, final Screen dqs, final RealmsServer dip) {
this.configureScreen = djr;
this.lastScreen = dqs;
this.serverData = dip;
}
@Override
@ -36,75 +36,64 @@ public class RealmsInviteScreen extends RealmsScreen {
this.profileName.tick();
}
@Override
public void init() {
this.setKeyboardHandlerSendRepeatsToGui(true);
this.buttonsAdd(this.inviteButton = new RealmsButton(0, this.width() / 2 - 100, RealmsConstants.row(10), RealmsScreen.getLocalizedString("mco.configure.world.buttons.invite")) {
@Override
public void onPress() {
RealmsInviteScreen.this.onInvite();
}
});
this.buttonsAdd(new RealmsButton(1, this.width() / 2 - 100, RealmsConstants.row(12), RealmsScreen.getLocalizedString("gui.cancel")) {
@Override
public void onPress() {
Realms.setScreen(RealmsInviteScreen.this.lastScreen);
}
});
this.focusOn(this.profileName = this.newEditBox(2, this.width() / 2 - 100, RealmsConstants.row(2), 200, 20, RealmsScreen.getLocalizedString("mco.configure.world.invite.profile.name")));
this.addWidget(this.profileName);
this.minecraft.keyboardHandler.setSendRepeatsToGui(true);
this.<EditBox>addWidget(this.profileName = new EditBox(this.minecraft.font, this.width / 2 - 100, RealmsScreen.row(2), 200, 20, null, new TranslatableComponent("mco.configure.world.invite.profile.name")));
this.setInitialFocus(this.profileName);
this.<Button>addButton(new Button(this.width / 2 - 100, RealmsScreen.row(10), 200, 20, new TranslatableComponent("mco.configure.world.buttons.invite"), dni -> this.onInvite()));
this.<Button>addButton(new Button(this.width / 2 - 100, RealmsScreen.row(12), 200, 20, CommonComponents.GUI_CANCEL, dni -> this.minecraft.setScreen(this.lastScreen)));
}
@Override
public void removed() {
this.setKeyboardHandlerSendRepeatsToGui(false);
this.minecraft.keyboardHandler.setSendRepeatsToGui(false);
}
private void onInvite() {
final RealmsClient cyy2 = RealmsClient.createRealmsClient();
final RealmsClient dia2 = RealmsClient.create();
if (this.profileName.getValue() == null || this.profileName.getValue().isEmpty()) {
this.showError(RealmsScreen.getLocalizedString("mco.configure.world.players.error"));
this.showError(I18n.get("mco.configure.world.players.error"));
return;
}
try {
final RealmsServer realmsServer3 = cyy2.invite(this.serverData.id, this.profileName.getValue().trim());
if (realmsServer3 != null) {
this.serverData.players = realmsServer3.players;
Realms.setScreen(new RealmsPlayerScreen(this.configureScreen, this.serverData));
final RealmsServer dip3 = dia2.invite(this.serverData.id, this.profileName.getValue().trim());
if (dip3 != null) {
this.serverData.players = dip3.players;
this.minecraft.setScreen(new RealmsPlayerScreen(this.configureScreen, this.serverData));
}
else {
this.showError(RealmsScreen.getLocalizedString("mco.configure.world.players.error"));
this.showError(I18n.get("mco.configure.world.players.error"));
}
}
catch (Exception exception3) {
RealmsInviteScreen.LOGGER.error("Couldn't invite user");
this.showError(RealmsScreen.getLocalizedString("mco.configure.world.players.error"));
this.showError(I18n.get("mco.configure.world.players.error"));
}
}
private void showError(final String string) {
this.showError = true;
Realms.narrateNow(this.errorMsg = string);
NarrationHelper.now(this.errorMsg = string);
}
@Override
public boolean keyPressed(final int integer1, final int integer2, final int integer3) {
if (integer1 == 256) {
Realms.setScreen(this.lastScreen);
this.minecraft.setScreen(this.lastScreen);
return true;
}
return super.keyPressed(integer1, integer2, integer3);
}
@Override
public void render(final int integer1, final int integer2, final float float3) {
this.renderBackground();
this.drawString(RealmsScreen.getLocalizedString("mco.configure.world.invite.profile.name"), this.width() / 2 - 100, RealmsConstants.row(1), 10526880);
public void render(final PoseStack dhl, final int integer2, final int integer3, final float float4) {
this.renderBackground(dhl);
this.font.draw(dhl, I18n.get("mco.configure.world.invite.profile.name"), (float)(this.width / 2 - 100), (float)RealmsScreen.row(1), 10526880);
if (this.showError) {
this.drawCenteredString(this.errorMsg, this.width() / 2, RealmsConstants.row(5), 16711680);
this.drawCenteredString(dhl, this.font, this.errorMsg, this.width / 2, RealmsScreen.row(5), 16711680);
}
this.profileName.render(integer1, integer2, float3);
super.render(integer1, integer2, float3);
this.profileName.render(dhl, integer2, integer3, float4);
super.render(dhl, integer2, integer3, float4);
}
static {

View File

@ -1,78 +1,57 @@
package com.mojang.realmsclient.gui.screens;
import net.minecraft.realms.AbstractRealmsButton;
import net.minecraft.realms.RealmsButton;
import com.mojang.realmsclient.gui.RealmsConstants;
import net.minecraft.realms.Realms;
import net.minecraft.realms.RealmsConfirmResultListener;
import net.minecraft.network.chat.FormattedText;
import com.mojang.blaze3d.vertex.PoseStack;
import net.minecraft.network.chat.TranslatableComponent;
import net.minecraft.client.gui.components.Button;
import net.minecraft.network.chat.CommonComponents;
import net.minecraft.realms.NarrationHelper;
import it.unimi.dsi.fastutil.booleans.BooleanConsumer;
import net.minecraft.network.chat.Component;
import net.minecraft.realms.RealmsScreen;
public class RealmsLongConfirmationScreen extends RealmsScreen {
private final Type type;
private final String line2;
private final String line3;
protected final RealmsConfirmResultListener listener;
protected final String yesButton;
protected final String noButton;
private final String okButton;
protected final int id;
private final Component line2;
private final Component line3;
protected final BooleanConsumer callback;
private final boolean yesNoQuestion;
public RealmsLongConfirmationScreen(final RealmsConfirmResultListener realmsConfirmResultListener, final Type a, final String string3, final String string4, final boolean boolean5, final int integer) {
this.listener = realmsConfirmResultListener;
this.id = integer;
public RealmsLongConfirmationScreen(final BooleanConsumer booleanConsumer, final Type a, final Component mr3, final Component mr4, final boolean boolean5) {
this.callback = booleanConsumer;
this.type = a;
this.line2 = string3;
this.line3 = string4;
this.line2 = mr3;
this.line3 = mr4;
this.yesNoQuestion = boolean5;
this.yesButton = RealmsScreen.getLocalizedString("gui.yes");
this.noButton = RealmsScreen.getLocalizedString("gui.no");
this.okButton = RealmsScreen.getLocalizedString("mco.gui.ok");
}
@Override
public void init() {
Realms.narrateNow(this.type.text, this.line2, this.line3);
NarrationHelper.now(this.type.text, this.line2.getString(), this.line3.getString());
if (this.yesNoQuestion) {
this.buttonsAdd(new RealmsButton(0, this.width() / 2 - 105, RealmsConstants.row(8), 100, 20, this.yesButton) {
@Override
public void onPress() {
RealmsLongConfirmationScreen.this.listener.confirmResult(true, RealmsLongConfirmationScreen.this.id);
}
});
this.buttonsAdd(new RealmsButton(1, this.width() / 2 + 5, RealmsConstants.row(8), 100, 20, this.noButton) {
@Override
public void onPress() {
RealmsLongConfirmationScreen.this.listener.confirmResult(false, RealmsLongConfirmationScreen.this.id);
}
});
this.<Button>addButton(new Button(this.width / 2 - 105, RealmsScreen.row(8), 100, 20, CommonComponents.GUI_YES, dni -> this.callback.accept(true)));
this.<Button>addButton(new Button(this.width / 2 + 5, RealmsScreen.row(8), 100, 20, CommonComponents.GUI_NO, dni -> this.callback.accept(false)));
}
else {
this.buttonsAdd(new RealmsButton(0, this.width() / 2 - 50, RealmsConstants.row(8), 100, 20, this.okButton) {
@Override
public void onPress() {
RealmsLongConfirmationScreen.this.listener.confirmResult(true, RealmsLongConfirmationScreen.this.id);
}
});
this.<Button>addButton(new Button(this.width / 2 - 50, RealmsScreen.row(8), 100, 20, new TranslatableComponent("mco.gui.ok"), dni -> this.callback.accept(true)));
}
}
@Override
public boolean keyPressed(final int integer1, final int integer2, final int integer3) {
if (integer1 == 256) {
this.listener.confirmResult(false, this.id);
this.callback.accept(false);
return true;
}
return super.keyPressed(integer1, integer2, integer3);
}
@Override
public void render(final int integer1, final int integer2, final float float3) {
this.renderBackground();
this.drawCenteredString(this.type.text, this.width() / 2, RealmsConstants.row(2), this.type.colorCode);
this.drawCenteredString(this.line2, this.width() / 2, RealmsConstants.row(4), 16777215);
this.drawCenteredString(this.line3, this.width() / 2, RealmsConstants.row(6), 16777215);
super.render(integer1, integer2, float3);
public void render(final PoseStack dhl, final int integer2, final int integer3, final float float4) {
this.renderBackground(dhl);
this.drawCenteredString(dhl, this.font, this.type.text, this.width / 2, RealmsScreen.row(2), this.type.colorCode);
this.drawCenteredString(dhl, this.font, this.line2, this.width / 2, RealmsScreen.row(4), 16777215);
this.drawCenteredString(dhl, this.font, this.line3, this.width / 2, RealmsScreen.row(6), 16777215);
super.render(dhl, integer2, integer3, float4);
}
public enum Type {

View File

@ -1,47 +1,48 @@
package com.mojang.realmsclient.gui.screens;
import org.apache.logging.log4j.LogManager;
import net.minecraft.realms.AbstractRealmsButton;
import net.minecraft.realms.RealmsButton;
import com.mojang.realmsclient.gui.RealmsConstants;
import net.minecraft.realms.Realms;
import net.minecraft.client.gui.components.events.GuiEventListener;
import java.util.Set;
import java.util.function.Predicate;
import com.google.common.collect.Sets;
import net.minecraft.network.chat.FormattedText;
import com.mojang.blaze3d.vertex.PoseStack;
import net.minecraft.client.gui.components.Button;
import net.minecraft.network.chat.CommonComponents;
import net.minecraft.realms.NarrationHelper;
import com.mojang.realmsclient.exception.RealmsDefaultUncaughtExceptionHandler;
import com.mojang.realmsclient.gui.LongRunningTask;
import com.mojang.realmsclient.util.task.LongRunningTask;
import net.minecraft.network.chat.Component;
import net.minecraft.client.gui.screens.Screen;
import org.apache.logging.log4j.Logger;
import com.mojang.realmsclient.gui.ErrorCallback;
import net.minecraft.realms.RealmsScreen;
public class RealmsLongRunningMcoTaskScreen extends RealmsScreen {
public class RealmsLongRunningMcoTaskScreen extends RealmsScreen implements ErrorCallback {
private static final Logger LOGGER;
private final int BUTTON_CANCEL_ID = 666;
private final int BUTTON_BACK_ID = 667;
private final RealmsScreen lastScreen;
private final LongRunningTask taskThread;
private final Screen lastScreen;
private volatile String title;
private volatile boolean error;
private volatile String errorMessage;
private volatile Component errorMessage;
private volatile boolean aborted;
private int animTicks;
private final LongRunningTask task;
private final int buttonLength = 212;
public static final String[] symbols;
public static final String[] SYMBOLS;
public RealmsLongRunningMcoTaskScreen(final RealmsScreen realmsScreen, final LongRunningTask czj) {
public RealmsLongRunningMcoTaskScreen(final Screen dqs, final LongRunningTask dkz) {
this.title = "";
this.lastScreen = realmsScreen;
(this.task = czj).setScreen(this);
this.taskThread = czj;
}
public void start() {
final Thread thread2 = new Thread(this.taskThread, "Realms-long-running-task");
thread2.setUncaughtExceptionHandler(new RealmsDefaultUncaughtExceptionHandler(RealmsLongRunningMcoTaskScreen.LOGGER));
thread2.start();
this.lastScreen = dqs;
(this.task = dkz).setScreen(this);
final Thread thread4 = new Thread(dkz, "Realms-long-running-task");
thread4.setUncaughtExceptionHandler(new RealmsDefaultUncaughtExceptionHandler(RealmsLongRunningMcoTaskScreen.LOGGER));
thread4.start();
}
@Override
public void tick() {
super.tick();
Realms.narrateRepeatedly(this.title);
NarrationHelper.repeatedly(this.title);
++this.animTicks;
this.task.tick();
}
@ -55,46 +56,43 @@ public class RealmsLongRunningMcoTaskScreen extends RealmsScreen {
return super.keyPressed(integer1, integer2, integer3);
}
@Override
public void init() {
this.task.init();
this.buttonsAdd(new RealmsButton(666, this.width() / 2 - 106, RealmsConstants.row(12), 212, 20, RealmsScreen.getLocalizedString("gui.cancel")) {
@Override
public void onPress() {
RealmsLongRunningMcoTaskScreen.this.cancelOrBackButtonClicked();
}
});
this.<Button>addButton(new Button(this.width / 2 - 106, RealmsScreen.row(12), 212, 20, CommonComponents.GUI_CANCEL, dni -> this.cancelOrBackButtonClicked()));
}
private void cancelOrBackButtonClicked() {
this.aborted = true;
this.task.abortTask();
Realms.setScreen(this.lastScreen);
this.minecraft.setScreen(this.lastScreen);
}
@Override
public void render(final int integer1, final int integer2, final float float3) {
this.renderBackground();
this.drawCenteredString(this.title, this.width() / 2, RealmsConstants.row(3), 16777215);
public void render(final PoseStack dhl, final int integer2, final int integer3, final float float4) {
this.renderBackground(dhl);
this.drawCenteredString(dhl, this.font, this.title, this.width / 2, RealmsScreen.row(3), 16777215);
if (!this.error) {
this.drawCenteredString(RealmsLongRunningMcoTaskScreen.symbols[this.animTicks % RealmsLongRunningMcoTaskScreen.symbols.length], this.width() / 2, RealmsConstants.row(8), 8421504);
this.drawCenteredString(dhl, this.font, RealmsLongRunningMcoTaskScreen.SYMBOLS[this.animTicks % RealmsLongRunningMcoTaskScreen.SYMBOLS.length], this.width / 2, RealmsScreen.row(8), 8421504);
}
if (this.error) {
this.drawCenteredString(this.errorMessage, this.width() / 2, RealmsConstants.row(8), 16711680);
this.drawCenteredString(dhl, this.font, this.errorMessage, this.width / 2, RealmsScreen.row(8), 16711680);
}
super.render(integer1, integer2, float3);
super.render(dhl, integer2, integer3, float4);
}
public void error(final String string) {
@Override
public void error(final Component mr) {
this.error = true;
Realms.narrateNow(this.errorMessage = string);
this.errorMessage = mr;
NarrationHelper.now(mr.getString());
this.buttonsClear();
this.buttonsAdd(new RealmsButton(667, this.width() / 2 - 106, this.height() / 4 + 120 + 12, RealmsScreen.getLocalizedString("gui.back")) {
@Override
public void onPress() {
RealmsLongRunningMcoTaskScreen.this.cancelOrBackButtonClicked();
}
});
this.<Button>addButton(new Button(this.width / 2 - 106, this.height / 4 + 120 + 12, 200, 20, CommonComponents.GUI_BACK, dni -> this.cancelOrBackButtonClicked()));
}
public void buttonsClear() {
final Set<GuiEventListener> set2 = Sets.newHashSet(this.buttons);
this.children.removeIf(set2::contains);
this.buttons.clear();
}
public void setTitle(final String string) {
@ -107,6 +105,6 @@ public class RealmsLongRunningMcoTaskScreen extends RealmsScreen {
static {
LOGGER = LogManager.getLogger();
symbols = new String[] { "\u2583 \u2584 \u2585 \u2586 \u2587 \u2588 \u2587 \u2586 \u2585 \u2584 \u2583", "_ \u2583 \u2584 \u2585 \u2586 \u2587 \u2588 \u2587 \u2586 \u2585 \u2584", "_ _ \u2583 \u2584 \u2585 \u2586 \u2587 \u2588 \u2587 \u2586 \u2585", "_ _ _ \u2583 \u2584 \u2585 \u2586 \u2587 \u2588 \u2587 \u2586", "_ _ _ _ \u2583 \u2584 \u2585 \u2586 \u2587 \u2588 \u2587", "_ _ _ _ _ \u2583 \u2584 \u2585 \u2586 \u2587 \u2588", "_ _ _ _ \u2583 \u2584 \u2585 \u2586 \u2587 \u2588 \u2587", "_ _ _ \u2583 \u2584 \u2585 \u2586 \u2587 \u2588 \u2587 \u2586", "_ _ \u2583 \u2584 \u2585 \u2586 \u2587 \u2588 \u2587 \u2586 \u2585", "_ \u2583 \u2584 \u2585 \u2586 \u2587 \u2588 \u2587 \u2586 \u2585 \u2584", "\u2583 \u2584 \u2585 \u2586 \u2587 \u2588 \u2587 \u2586 \u2585 \u2584 \u2583", "\u2584 \u2585 \u2586 \u2587 \u2588 \u2587 \u2586 \u2585 \u2584 \u2583 _", "\u2585 \u2586 \u2587 \u2588 \u2587 \u2586 \u2585 \u2584 \u2583 _ _", "\u2586 \u2587 \u2588 \u2587 \u2586 \u2585 \u2584 \u2583 _ _ _", "\u2587 \u2588 \u2587 \u2586 \u2585 \u2584 \u2583 _ _ _ _", "\u2588 \u2587 \u2586 \u2585 \u2584 \u2583 _ _ _ _ _", "\u2587 \u2588 \u2587 \u2586 \u2585 \u2584 \u2583 _ _ _ _", "\u2586 \u2587 \u2588 \u2587 \u2586 \u2585 \u2584 \u2583 _ _ _", "\u2585 \u2586 \u2587 \u2588 \u2587 \u2586 \u2585 \u2584 \u2583 _ _", "\u2584 \u2585 \u2586 \u2587 \u2588 \u2587 \u2586 \u2585 \u2584 \u2583 _" };
SYMBOLS = new String[] { "\u2583 \u2584 \u2585 \u2586 \u2587 \u2588 \u2587 \u2586 \u2585 \u2584 \u2583", "_ \u2583 \u2584 \u2585 \u2586 \u2587 \u2588 \u2587 \u2586 \u2585 \u2584", "_ _ \u2583 \u2584 \u2585 \u2586 \u2587 \u2588 \u2587 \u2586 \u2585", "_ _ _ \u2583 \u2584 \u2585 \u2586 \u2587 \u2588 \u2587 \u2586", "_ _ _ _ \u2583 \u2584 \u2585 \u2586 \u2587 \u2588 \u2587", "_ _ _ _ _ \u2583 \u2584 \u2585 \u2586 \u2587 \u2588", "_ _ _ _ \u2583 \u2584 \u2585 \u2586 \u2587 \u2588 \u2587", "_ _ _ \u2583 \u2584 \u2585 \u2586 \u2587 \u2588 \u2587 \u2586", "_ _ \u2583 \u2584 \u2585 \u2586 \u2587 \u2588 \u2587 \u2586 \u2585", "_ \u2583 \u2584 \u2585 \u2586 \u2587 \u2588 \u2587 \u2586 \u2585 \u2584", "\u2583 \u2584 \u2585 \u2586 \u2587 \u2588 \u2587 \u2586 \u2585 \u2584 \u2583", "\u2584 \u2585 \u2586 \u2587 \u2588 \u2587 \u2586 \u2585 \u2584 \u2583 _", "\u2585 \u2586 \u2587 \u2588 \u2587 \u2586 \u2585 \u2584 \u2583 _ _", "\u2586 \u2587 \u2588 \u2587 \u2586 \u2585 \u2584 \u2583 _ _ _", "\u2587 \u2588 \u2587 \u2586 \u2585 \u2584 \u2583 _ _ _ _", "\u2588 \u2587 \u2586 \u2585 \u2584 \u2583 _ _ _ _ _", "\u2587 \u2588 \u2587 \u2586 \u2585 \u2584 \u2583 _ _ _ _", "\u2586 \u2587 \u2588 \u2587 \u2586 \u2585 \u2584 \u2583 _ _ _", "\u2585 \u2586 \u2587 \u2588 \u2587 \u2586 \u2585 \u2584 \u2583 _ _", "\u2584 \u2585 \u2586 \u2587 \u2588 \u2587 \u2586 \u2585 \u2584 \u2583 _" };
}
}

View File

@ -1,77 +1,80 @@
package com.mojang.realmsclient.gui.screens;
import java.util.Arrays;
import net.minecraft.Util;
import net.minecraft.client.gui.GuiComponent;
import com.mojang.blaze3d.systems.RenderSystem;
import java.io.IOException;
import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.realmsclient.exception.RealmsServiceException;
import com.mojang.realmsclient.client.RealmsClient;
import net.minecraft.realms.Realms;
import java.util.List;
import net.minecraft.client.gui.screens.TitleScreen;
import com.mojang.realmsclient.gui.RealmsDataFetcher;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.realms.RealmsScreen;
public class RealmsNotificationsScreen extends RealmsScreen {
private static final RealmsDataFetcher realmsDataFetcher;
private static final ResourceLocation INVITE_ICON_LOCATION;
private static final ResourceLocation TRIAL_ICON_LOCATION;
private static final ResourceLocation NEWS_ICON_LOCATION;
private static final RealmsDataFetcher REALMS_DATA_FETCHER;
private volatile int numberOfPendingInvites;
private static boolean checkedMcoAvailability;
private static boolean trialAvailable;
private static boolean validClient;
private static boolean hasUnreadNews;
private static final List<RealmsDataFetcher.Task> tasks;
public RealmsNotificationsScreen(final RealmsScreen realmsScreen) {
}
@Override
public void init() {
this.checkIfMcoEnabled();
this.setKeyboardHandlerSendRepeatsToGui(true);
this.minecraft.keyboardHandler.setSendRepeatsToGui(true);
}
@Override
public void tick() {
if ((!Realms.getRealmsNotificationsEnabled() || !Realms.inTitleScreen() || !RealmsNotificationsScreen.validClient) && !RealmsNotificationsScreen.realmsDataFetcher.isStopped()) {
RealmsNotificationsScreen.realmsDataFetcher.stop();
if ((!this.getRealmsNotificationsEnabled() || !this.inTitleScreen() || !RealmsNotificationsScreen.validClient) && !RealmsNotificationsScreen.REALMS_DATA_FETCHER.isStopped()) {
RealmsNotificationsScreen.REALMS_DATA_FETCHER.stop();
return;
}
if (RealmsNotificationsScreen.validClient && Realms.getRealmsNotificationsEnabled()) {
RealmsNotificationsScreen.realmsDataFetcher.initWithSpecificTaskList(RealmsNotificationsScreen.tasks);
if (RealmsNotificationsScreen.realmsDataFetcher.isFetchedSinceLastTry(RealmsDataFetcher.Task.PENDING_INVITE)) {
this.numberOfPendingInvites = RealmsNotificationsScreen.realmsDataFetcher.getPendingInvitesCount();
if (RealmsNotificationsScreen.validClient && this.getRealmsNotificationsEnabled()) {
RealmsNotificationsScreen.REALMS_DATA_FETCHER.initWithSpecificTaskList();
if (RealmsNotificationsScreen.REALMS_DATA_FETCHER.isFetchedSinceLastTry(RealmsDataFetcher.Task.PENDING_INVITE)) {
this.numberOfPendingInvites = RealmsNotificationsScreen.REALMS_DATA_FETCHER.getPendingInvitesCount();
}
if (RealmsNotificationsScreen.realmsDataFetcher.isFetchedSinceLastTry(RealmsDataFetcher.Task.TRIAL_AVAILABLE)) {
RealmsNotificationsScreen.trialAvailable = RealmsNotificationsScreen.realmsDataFetcher.isTrialAvailable();
if (RealmsNotificationsScreen.REALMS_DATA_FETCHER.isFetchedSinceLastTry(RealmsDataFetcher.Task.TRIAL_AVAILABLE)) {
RealmsNotificationsScreen.trialAvailable = RealmsNotificationsScreen.REALMS_DATA_FETCHER.isTrialAvailable();
}
if (RealmsNotificationsScreen.realmsDataFetcher.isFetchedSinceLastTry(RealmsDataFetcher.Task.UNREAD_NEWS)) {
RealmsNotificationsScreen.hasUnreadNews = RealmsNotificationsScreen.realmsDataFetcher.hasUnreadNews();
if (RealmsNotificationsScreen.REALMS_DATA_FETCHER.isFetchedSinceLastTry(RealmsDataFetcher.Task.UNREAD_NEWS)) {
RealmsNotificationsScreen.hasUnreadNews = RealmsNotificationsScreen.REALMS_DATA_FETCHER.hasUnreadNews();
}
RealmsNotificationsScreen.realmsDataFetcher.markClean();
RealmsNotificationsScreen.REALMS_DATA_FETCHER.markClean();
}
}
private boolean getRealmsNotificationsEnabled() {
return this.minecraft.options.realmsNotifications;
}
private boolean inTitleScreen() {
return this.minecraft.screen instanceof TitleScreen;
}
private void checkIfMcoEnabled() {
if (!RealmsNotificationsScreen.checkedMcoAvailability) {
RealmsNotificationsScreen.checkedMcoAvailability = true;
new Thread("Realms Notification Availability checker #1") {
@Override
public void run() {
final RealmsClient cyy2 = RealmsClient.createRealmsClient();
final RealmsClient dia2 = RealmsClient.create();
try {
final RealmsClient.CompatibleVersionResponse a3 = cyy2.clientCompatible();
if (!a3.equals(RealmsClient.CompatibleVersionResponse.COMPATIBLE)) {
final RealmsClient.CompatibleVersionResponse a3 = dia2.clientCompatible();
if (a3 != RealmsClient.CompatibleVersionResponse.COMPATIBLE) {
return;
}
}
catch (RealmsServiceException czg3) {
if (czg3.httpResultCode != 401) {
catch (RealmsServiceException djh3) {
if (djh3.httpResultCode != 401) {
RealmsNotificationsScreen.checkedMcoAvailability = false;
}
return;
}
catch (IOException iOException3) {
RealmsNotificationsScreen.checkedMcoAvailability = false;
return;
}
RealmsNotificationsScreen.validClient = true;
}
}.start();
@ -79,62 +82,55 @@ public class RealmsNotificationsScreen extends RealmsScreen {
}
@Override
public void render(final int integer1, final int integer2, final float float3) {
public void render(final PoseStack dhl, final int integer2, final int integer3, final float float4) {
if (RealmsNotificationsScreen.validClient) {
this.drawIcons(integer1, integer2);
this.drawIcons(dhl, integer2, integer3);
}
super.render(integer1, integer2, float3);
super.render(dhl, integer2, integer3, float4);
}
@Override
public boolean mouseClicked(final double double1, final double double2, final int integer) {
return super.mouseClicked(double1, double2, integer);
}
private void drawIcons(final int integer1, final int integer2) {
final int integer3 = this.numberOfPendingInvites;
final int integer4 = 24;
final int integer5 = this.height() / 4 + 48;
final int integer6 = this.width() / 2 + 80;
final int integer7 = integer5 + 48 + 2;
int integer8 = 0;
private void drawIcons(final PoseStack dhl, final int integer2, final int integer3) {
final int integer4 = this.numberOfPendingInvites;
final int integer5 = 24;
final int integer6 = this.height / 4 + 48;
final int integer7 = this.width / 2 + 80;
final int integer8 = integer6 + 48 + 2;
int integer9 = 0;
if (RealmsNotificationsScreen.hasUnreadNews) {
RealmsScreen.bind("realms:textures/gui/realms/news_notification_mainscreen.png");
this.minecraft.getTextureManager().bind(RealmsNotificationsScreen.NEWS_ICON_LOCATION);
RenderSystem.color4f(1.0f, 1.0f, 1.0f, 1.0f);
RenderSystem.pushMatrix();
RenderSystem.scalef(0.4f, 0.4f, 0.4f);
RealmsScreen.blit((int)((integer6 + 2 - integer8) * 2.5), (int)(integer7 * 2.5), 0.0f, 0.0f, 40, 40, 40, 40);
GuiComponent.blit(dhl, (int)((integer7 + 2 - integer9) * 2.5), (int)(integer8 * 2.5), 0.0f, 0.0f, 40, 40, 40, 40);
RenderSystem.popMatrix();
integer8 += 14;
integer9 += 14;
}
if (integer3 != 0) {
RealmsScreen.bind("realms:textures/gui/realms/invite_icon.png");
if (integer4 != 0) {
this.minecraft.getTextureManager().bind(RealmsNotificationsScreen.INVITE_ICON_LOCATION);
RenderSystem.color4f(1.0f, 1.0f, 1.0f, 1.0f);
RenderSystem.pushMatrix();
RealmsScreen.blit(integer6 - integer8, integer7 - 6, 0.0f, 0.0f, 15, 25, 31, 25);
RenderSystem.popMatrix();
integer8 += 16;
GuiComponent.blit(dhl, integer7 - integer9, integer8 - 6, 0.0f, 0.0f, 15, 25, 31, 25);
integer9 += 16;
}
if (RealmsNotificationsScreen.trialAvailable) {
RealmsScreen.bind("realms:textures/gui/realms/trial_icon.png");
this.minecraft.getTextureManager().bind(RealmsNotificationsScreen.TRIAL_ICON_LOCATION);
RenderSystem.color4f(1.0f, 1.0f, 1.0f, 1.0f);
RenderSystem.pushMatrix();
int integer9 = 0;
if ((System.currentTimeMillis() / 800L & 0x1L) == 0x1L) {
integer9 = 8;
int integer10 = 0;
if ((Util.getMillis() / 800L & 0x1L) == 0x1L) {
integer10 = 8;
}
RealmsScreen.blit(integer6 + 4 - integer8, integer7 + 4, 0.0f, (float)integer9, 8, 8, 8, 16);
RenderSystem.popMatrix();
GuiComponent.blit(dhl, integer7 + 4 - integer9, integer8 + 4, 0.0f, (float)integer10, 8, 8, 8, 16);
}
}
@Override
public void removed() {
RealmsNotificationsScreen.realmsDataFetcher.stop();
RealmsNotificationsScreen.REALMS_DATA_FETCHER.stop();
}
static {
realmsDataFetcher = new RealmsDataFetcher();
tasks = Arrays.<RealmsDataFetcher.Task>asList(RealmsDataFetcher.Task.PENDING_INVITE, RealmsDataFetcher.Task.TRIAL_AVAILABLE, RealmsDataFetcher.Task.UNREAD_NEWS);
INVITE_ICON_LOCATION = new ResourceLocation("realms", "textures/gui/realms/invite_icon.png");
TRIAL_ICON_LOCATION = new ResourceLocation("realms", "textures/gui/realms/trial_icon.png");
NEWS_ICON_LOCATION = new ResourceLocation("realms", "textures/gui/realms/news_notification_mainscreen.png");
REALMS_DATA_FETCHER = new RealmsDataFetcher();
}
}

View File

@ -2,67 +2,46 @@ package com.mojang.realmsclient.gui.screens;
import java.util.Iterator;
import java.util.List;
import net.minecraft.realms.AbstractRealmsButton;
import com.mojang.realmsclient.util.RealmsUtil;
import net.minecraft.realms.RealmsButton;
import com.mojang.realmsclient.gui.RealmsConstants;
import net.minecraft.realms.Realms;
import com.mojang.blaze3d.vertex.PoseStack;
import net.minecraft.network.chat.Component;
import net.minecraft.client.gui.components.Button;
import net.minecraft.Util;
import net.minecraft.network.chat.FormattedText;
import net.minecraft.network.chat.CommonComponents;
import net.minecraft.network.chat.TranslatableComponent;
import net.minecraft.realms.NarrationHelper;
import net.minecraft.client.resources.language.I18n;
import net.minecraft.client.gui.screens.Screen;
import net.minecraft.realms.RealmsScreen;
public class RealmsParentalConsentScreen extends RealmsScreen {
private final RealmsScreen nextScreen;
private final Screen nextScreen;
public RealmsParentalConsentScreen(final RealmsScreen realmsScreen) {
this.nextScreen = realmsScreen;
public RealmsParentalConsentScreen(final Screen dqs) {
this.nextScreen = dqs;
}
@Override
public void init() {
Realms.narrateNow(RealmsScreen.getLocalizedString("mco.account.privacyinfo"));
final String string2 = RealmsScreen.getLocalizedString("mco.account.update");
final String string3 = RealmsScreen.getLocalizedString("gui.back");
final int integer4 = Math.max(this.fontWidth(string2), this.fontWidth(string3)) + 30;
final String string4 = RealmsScreen.getLocalizedString("mco.account.privacy.info");
final int integer5 = (int)(this.fontWidth(string4) * 1.2);
this.buttonsAdd(new RealmsButton(1, this.width() / 2 - integer5 / 2, RealmsConstants.row(11), integer5, 20, string4) {
@Override
public void onPress() {
RealmsUtil.browseTo("https://minecraft.net/privacy/gdpr/");
}
});
this.buttonsAdd(new RealmsButton(1, this.width() / 2 - (integer4 + 5), RealmsConstants.row(13), integer4, 20, string2) {
@Override
public void onPress() {
RealmsUtil.browseTo("https://minecraft.net/update-account");
}
});
this.buttonsAdd(new RealmsButton(0, this.width() / 2 + 5, RealmsConstants.row(13), integer4, 20, string3) {
@Override
public void onPress() {
Realms.setScreen(RealmsParentalConsentScreen.this.nextScreen);
}
});
NarrationHelper.now(I18n.get("mco.account.privacyinfo"));
final Component mr2 = new TranslatableComponent("mco.account.update");
final Component mr3 = CommonComponents.GUI_BACK;
final int integer4 = Math.max(this.font.width(mr2), this.font.width(mr3)) + 30;
final Component mr4 = new TranslatableComponent("mco.account.privacy.info");
final int integer5 = (int)(this.font.width(mr4) * 1.2);
this.<Button>addButton(new Button(this.width / 2 - integer5 / 2, RealmsScreen.row(11), integer5, 20, mr4, dni -> Util.getPlatform().openUri("https://minecraft.net/privacy/gdpr/")));
this.<Button>addButton(new Button(this.width / 2 - (integer4 + 5), RealmsScreen.row(13), integer4, 20, mr2, dni -> Util.getPlatform().openUri("https://minecraft.net/update-account")));
this.<Button>addButton(new Button(this.width / 2 + 5, RealmsScreen.row(13), integer4, 20, mr3, dni -> this.minecraft.setScreen(this.nextScreen)));
}
@Override
public void tick() {
super.tick();
}
@Override
public boolean mouseClicked(final double double1, final double double2, final int integer) {
return super.mouseClicked(double1, double2, integer);
}
@Override
public void render(final int integer1, final int integer2, final float float3) {
this.renderBackground();
final List<String> list5 = this.getLocalizedStringWithLineWidth("mco.account.privacyinfo", (int)Math.round(this.width() * 0.9));
int integer3 = 15;
for (final String string8 : list5) {
this.drawCenteredString(string8, this.width() / 2, integer3, 16777215);
integer3 += 15;
public void render(final PoseStack dhl, final int integer2, final int integer3, final float float4) {
this.renderBackground(dhl);
final List<FormattedText> list6 = this.minecraft.font.split(new TranslatableComponent("mco.account.privacyinfo"), (int)Math.round(this.width * 0.9));
int integer4 = 15;
for (final FormattedText mu9 : list6) {
this.drawCenteredString(dhl, this.font, mu9, this.width / 2, integer4, 16777215);
integer4 += 15;
}
super.render(integer1, integer2, float3);
super.render(dhl, integer2, integer3, float4);
}
}

Some files were not shown because too many files have changed in this diff Show More