Multiplayer capes
After Width: | Height: | Size: 410 B |
After Width: | Height: | Size: 438 B |
After Width: | Height: | Size: 498 B |
After Width: | Height: | Size: 456 B |
After Width: | Height: | Size: 404 B |
After Width: | Height: | Size: 510 B |
BIN
desktopRuntime/resources/assets/minecraft/capes/c07.mapmaker.png
Normal file
After Width: | Height: | Size: 658 B |
After Width: | Height: | Size: 635 B |
After Width: | Height: | Size: 363 B |
BIN
desktopRuntime/resources/assets/minecraft/capes/c10.jira_mod.png
Normal file
After Width: | Height: | Size: 573 B |
After Width: | Height: | Size: 785 B |
BIN
desktopRuntime/resources/assets/minecraft/capes/c12.scrolls.png
Normal file
After Width: | Height: | Size: 838 B |
BIN
desktopRuntime/resources/assets/minecraft/capes/c13.cobalt.png
Normal file
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 895 B |
After Width: | Height: | Size: 923 B |
After Width: | Height: | Size: 1.5 KiB |
BIN
desktopRuntime/resources/assets/minecraft/capes/c17.snowman.png
Normal file
After Width: | Height: | Size: 692 B |
BIN
desktopRuntime/resources/assets/minecraft/capes/c18.spade.png
Normal file
After Width: | Height: | Size: 640 B |
BIN
desktopRuntime/resources/assets/minecraft/capes/c19.birthday.png
Normal file
After Width: | Height: | Size: 1.0 KiB |
BIN
desktopRuntime/resources/assets/minecraft/capes/c20.db.png
Normal file
After Width: | Height: | Size: 700 B |
73407
javascript/classes.js
|
@ -35,6 +35,9 @@ public class EaglerProfile {
|
|||
|
||||
public static int presetSkinId;
|
||||
public static int customSkinId;
|
||||
public static int presetCapeId;
|
||||
|
||||
public static final int[] CAPE_DATA_SIZE = new int[] { 32*32*4, -9, 1 };
|
||||
|
||||
public static final List<CustomSkin> customSkins = new ArrayList();
|
||||
|
||||
|
@ -59,6 +62,15 @@ public class EaglerProfile {
|
|||
}
|
||||
}
|
||||
|
||||
public static int getCapeSize(int len) {
|
||||
for(int i = 0; i < CAPE_DATA_SIZE.length; ++i) {
|
||||
if(len == CAPE_DATA_SIZE[i]) {
|
||||
return i;
|
||||
}
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
public static SkinModel getActiveSkinModel() {
|
||||
if(presetSkinId == -1) {
|
||||
if(customSkinId >= 0 && customSkinId < customSkins.size()) {
|
||||
|
@ -165,6 +177,7 @@ public class EaglerProfile {
|
|||
|
||||
presetSkinId = profile.getInteger("presetSkin");
|
||||
customSkinId = profile.getInteger("customSkin");
|
||||
presetCapeId = profile.getInteger("presetCape");
|
||||
|
||||
String loadUsername = profile.getString("username").trim();
|
||||
|
||||
|
@ -209,6 +222,7 @@ public class EaglerProfile {
|
|||
NBTTagCompound profile = new NBTTagCompound();
|
||||
profile.setInteger("presetSkin", presetSkinId);
|
||||
profile.setInteger("customSkin", customSkinId);
|
||||
profile.setInteger("presetCape", presetCapeId);
|
||||
profile.setString("username", username);
|
||||
NBTTagList skinsList = new NBTTagList();
|
||||
for(int i = 0, l = customSkins.size(); i < l; ++i) {
|
||||
|
|
|
@ -0,0 +1,252 @@
|
|||
package net.lax1dude.eaglercraft.v1_8.profile;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
import net.lax1dude.eaglercraft.v1_8.Keyboard;
|
||||
import net.lax1dude.eaglercraft.v1_8.Mouse;
|
||||
import net.lax1dude.eaglercraft.v1_8.opengl.GlStateManager;
|
||||
import net.minecraft.client.gui.GuiButton;
|
||||
import net.minecraft.client.gui.GuiScreen;
|
||||
import net.minecraft.client.resources.I18n;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
|
||||
public class GuiScreenEditCape extends GuiScreen {
|
||||
|
||||
GuiScreen parent;
|
||||
private int skinToShow;
|
||||
|
||||
private int mousex = 0;
|
||||
private int mousey = 0;
|
||||
private boolean dropDownOpen = false;
|
||||
private String[] dropDownOptions;
|
||||
private int slotsVisible = 0;
|
||||
private int selectedSlot = 0;
|
||||
private int scrollPos = -1;
|
||||
private int skinsHeight = 0;
|
||||
private boolean dragging = false;
|
||||
SkinModel model = null;
|
||||
|
||||
public static final String[] defaultVanillaCapeNames = new String[] {
|
||||
"No Cape",
|
||||
"Minecon 2011",
|
||||
"Minecon 2012",
|
||||
"Minecon 2013",
|
||||
"Minecon 2015",
|
||||
"Minecon 2016",
|
||||
"Microsoft Account",
|
||||
"Realms Mapmaker",
|
||||
"Mojang Old",
|
||||
"Mojang New",
|
||||
"Jira Moderator",
|
||||
"Mojang Very Old",
|
||||
"Scrolls",
|
||||
"Cobalt",
|
||||
"Lang Translator",
|
||||
"Millionth Player",
|
||||
"Prismarine",
|
||||
"Snowman",
|
||||
"Spade",
|
||||
"Birthday",
|
||||
"dB"
|
||||
};
|
||||
|
||||
public GuiScreenEditCape(GuiScreen parent, int skinToShow, SkinModel model) {
|
||||
this.parent = parent;
|
||||
this.skinToShow = skinToShow;
|
||||
this.selectedSlot = EaglerProfile.presetCapeId;
|
||||
this.model = model;
|
||||
}
|
||||
|
||||
public void initGui() {
|
||||
Keyboard.enableRepeatEvents(true);
|
||||
this.buttonList.add(new GuiButton(200, width / 2 - 100, height / 6 + 168, I18n.format("gui.done")));
|
||||
}
|
||||
|
||||
public void onGuiClosed() {
|
||||
Keyboard.enableRepeatEvents(false);
|
||||
}
|
||||
|
||||
private static final ResourceLocation eaglerGui = new ResourceLocation("eagler:gui/eagler_gui.png");
|
||||
|
||||
public void drawScreen(int mx, int my, float par3) {
|
||||
this.drawDefaultBackground();
|
||||
this.drawCenteredString(this.fontRendererObj, "Select Cape", this.width / 2, 15, 16777215);
|
||||
|
||||
mousex = mx;
|
||||
mousey = my;
|
||||
|
||||
int skinX = width / 2 - 120;
|
||||
int skinY = height / 6 + 8;
|
||||
int skinWidth = 80;
|
||||
int skinHeight = 130;
|
||||
|
||||
drawRect(skinX, skinY, skinX + skinWidth, skinY + skinHeight, -6250336);
|
||||
drawRect(skinX + 1, skinY + 1, skinX + skinWidth - 1, skinY + skinHeight - 1, 0xff000015);
|
||||
|
||||
if(dropDownOpen) {
|
||||
super.drawScreen(-1, -1, par3);
|
||||
} else {
|
||||
super.drawScreen(mx, my, par3);
|
||||
}
|
||||
|
||||
skinX = width / 2 - 20;
|
||||
skinY = height / 6 + 53;
|
||||
skinWidth = 140;
|
||||
skinHeight = 22;
|
||||
|
||||
drawRect(skinX, skinY, skinX + skinWidth, skinY + skinHeight, -6250336);
|
||||
drawRect(skinX + 1, skinY + 1, skinX + skinWidth - 21, skinY + skinHeight - 1, -16777216);
|
||||
drawRect(skinX + skinWidth - 20, skinY + 1, skinX + skinWidth - 1, skinY + skinHeight - 1, -16777216);
|
||||
|
||||
GlStateManager.color(1f, 1f, 1f, 1f);
|
||||
mc.getTextureManager().bindTexture(eaglerGui);
|
||||
drawTexturedModalRect(skinX + skinWidth - 18, skinY + 3, 0, 240, 16, 16);
|
||||
|
||||
this.fontRendererObj.drawStringWithShadow(dropDownOptions[selectedSlot], skinX + 5, skinY + 7, 14737632);
|
||||
|
||||
EaglerProfile.presetCapeId = selectedSlot;
|
||||
|
||||
skinX = width / 2 - 20;
|
||||
skinY = height / 6 + 74;
|
||||
skinWidth = 140;
|
||||
skinHeight = (height - skinY - 4);
|
||||
slotsVisible = (skinHeight / 10);
|
||||
if(slotsVisible > dropDownOptions.length) slotsVisible = dropDownOptions.length;
|
||||
skinHeight = slotsVisible * 10 + 7;
|
||||
skinsHeight = skinHeight;
|
||||
if(scrollPos == -1) {
|
||||
scrollPos = selectedSlot - 2;
|
||||
}
|
||||
if(scrollPos > (dropDownOptions.length - slotsVisible)) {
|
||||
scrollPos = (dropDownOptions.length - slotsVisible);
|
||||
}
|
||||
if(scrollPos < 0) {
|
||||
scrollPos = 0;
|
||||
}
|
||||
if(dropDownOpen) {
|
||||
drawRect(skinX, skinY, skinX + skinWidth, skinY + skinHeight, -6250336);
|
||||
drawRect(skinX + 1, skinY + 1, skinX + skinWidth - 1, skinY + skinHeight - 1, -16777216);
|
||||
for(int i = 0; i < slotsVisible; i++) {
|
||||
if(i + scrollPos < dropDownOptions.length) {
|
||||
int idx = i + scrollPos;
|
||||
if(selectedSlot == i + scrollPos) {
|
||||
drawRect(skinX + 1, skinY + i*10 + 4, skinX + skinWidth - 1, skinY + i*10 + 14, 0x77ffffff);
|
||||
}else if(mx >= skinX && mx < (skinX + skinWidth - 10) && my >= (skinY + i*10 + 5) && my < (skinY + i*10 + 15)) {
|
||||
drawRect(skinX + 1, skinY + i*10 + 4, skinX + skinWidth - 1, skinY + i*10 + 14, 0x55ffffff);
|
||||
}
|
||||
this.fontRendererObj.drawStringWithShadow(dropDownOptions[i + scrollPos], skinX + 5, skinY + 5 + i*10, 14737632);
|
||||
}
|
||||
}
|
||||
int scrollerSize = skinHeight * slotsVisible / dropDownOptions.length;
|
||||
int scrollerPos = skinHeight * scrollPos / dropDownOptions.length;
|
||||
drawRect(skinX + skinWidth - 4, skinY + scrollerPos + 1, skinX + skinWidth - 1, skinY + scrollerPos + scrollerSize, 0xff888888);
|
||||
}
|
||||
|
||||
int xx = width / 2 - 80;
|
||||
int yy = height / 6 + 130;
|
||||
|
||||
SkinPreviewRenderer.renderBiped(xx, yy, mx, my, model, true);
|
||||
}
|
||||
|
||||
protected void actionPerformed(GuiButton par1GuiButton) {
|
||||
if(par1GuiButton.id == 200) {
|
||||
mc.displayGuiScreen((GuiScreen) parent);
|
||||
}
|
||||
}
|
||||
|
||||
public void updateScreen() {
|
||||
if(dropDownOpen) {
|
||||
if(Mouse.isButtonDown(0)) {
|
||||
int skinX = this.width / 2 - 20;
|
||||
int skinY = this.height / 6 + 74;
|
||||
int skinWidth = 140;
|
||||
if(mousex >= (skinX + skinWidth - 10) && mousex < (skinX + skinWidth) && mousey >= skinY && mousey < (skinY + skinsHeight)) {
|
||||
dragging = true;
|
||||
}
|
||||
if(dragging) {
|
||||
int scrollerSize = skinsHeight * slotsVisible / dropDownOptions.length;
|
||||
scrollPos = (mousey - skinY - (scrollerSize / 2)) * dropDownOptions.length / skinsHeight;
|
||||
}
|
||||
} else {
|
||||
dragging = false;
|
||||
}
|
||||
} else {
|
||||
dragging = false;
|
||||
}
|
||||
}
|
||||
|
||||
private int[] grabPiece(int[] input, int w, int h, int sw) {
|
||||
int[] ret = new int[w * h];
|
||||
for(int i = 0; i < h; ++i) {
|
||||
System.arraycopy(input, i * sw, ret, i * w, w);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
public void handleMouseInput() throws IOException {
|
||||
super.handleMouseInput();
|
||||
if(dropDownOpen) {
|
||||
int var1 = Mouse.getEventDWheel();
|
||||
if(var1 < 0) {
|
||||
scrollPos += 3;
|
||||
}
|
||||
if(var1 > 0) {
|
||||
scrollPos -= 3;
|
||||
if(scrollPos < 0) {
|
||||
scrollPos = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected void keyTyped(char par1, int par2) {
|
||||
if(par2 == 200 && selectedSlot > 0) {
|
||||
--selectedSlot;
|
||||
scrollPos = selectedSlot - 2;
|
||||
}
|
||||
if(par2 == 208 && selectedSlot < (dropDownOptions.length - 1)) {
|
||||
++selectedSlot;
|
||||
scrollPos = selectedSlot - 2;
|
||||
}
|
||||
}
|
||||
|
||||
protected void mouseClicked(int par1, int par2, int par3) {
|
||||
super.mouseClicked(par1, par2, par3);
|
||||
|
||||
if (par3 == 0) {
|
||||
int skinX = this.width / 2 + 140 - 40;
|
||||
int skinY = this.height / 6 + 53;
|
||||
|
||||
if(par1 >= skinX && par1 < (skinX + 20) && par2 >= skinY && par2 < (skinY + 22)) {
|
||||
dropDownOpen = !dropDownOpen;
|
||||
}
|
||||
|
||||
skinX = this.width / 2 - 20;
|
||||
skinY = this.height / 6 + 53;
|
||||
int skinWidth = 140;
|
||||
int skinHeight = skinsHeight;
|
||||
|
||||
if(!(par1 >= skinX && par1 < (skinX + skinWidth) && par2 >= skinY && par2 < (skinY + skinHeight + 22))) {
|
||||
dropDownOpen = false;
|
||||
dragging = false;
|
||||
}
|
||||
|
||||
skinY += 21;
|
||||
|
||||
if(dropDownOpen && !dragging) {
|
||||
for(int i = 0; i < slotsVisible; i++) {
|
||||
if(i + scrollPos < dropDownOptions.length) {
|
||||
if(selectedSlot != i + scrollPos) {
|
||||
if(par1 >= skinX && par1 < (skinX + skinWidth - 10) && par2 >= (skinY + i*10 + 5) && par2 < (skinY + i*10 + 15) && selectedSlot != i + scrollPos) {
|
||||
selectedSlot = i + scrollPos;
|
||||
dropDownOpen = false;
|
||||
dragging = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -7,7 +7,9 @@ import net.lax1dude.eaglercraft.v1_8.Mouse;
|
|||
import net.lax1dude.eaglercraft.v1_8.internal.FileChooserResult;
|
||||
import net.lax1dude.eaglercraft.v1_8.opengl.GlStateManager;
|
||||
import net.lax1dude.eaglercraft.v1_8.opengl.ImageData;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.gui.GuiButton;
|
||||
import net.minecraft.client.gui.GuiDisconnected;
|
||||
import net.minecraft.client.gui.GuiScreen;
|
||||
import net.minecraft.client.gui.GuiTextField;
|
||||
import net.minecraft.client.resources.I18n;
|
||||
|
@ -16,6 +18,13 @@ import net.minecraft.util.ResourceLocation;
|
|||
import static net.lax1dude.eaglercraft.v1_8.opengl.RealOpenGLEnums.*;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.HashMap;
|
||||
|
||||
import org.teavm.jso.JSBody;
|
||||
import org.teavm.jso.dom.events.Event;
|
||||
import org.teavm.jso.dom.events.EventListener;
|
||||
import org.teavm.jso.dom.events.MessageEvent;
|
||||
import org.teavm.jso.websocket.WebSocket;
|
||||
|
||||
/**
|
||||
* Copyright (c) 2022-2023 LAX1DUDE. All Rights Reserved.
|
||||
|
@ -44,6 +53,8 @@ public class GuiScreenEditProfile extends GuiScreen {
|
|||
private boolean dragging = false;
|
||||
private int mousex = 0;
|
||||
private int mousey = 0;
|
||||
private String cape = "noCape";
|
||||
private SkinModel globalModel = null;
|
||||
|
||||
private boolean newSkinWaitSteveOrAlex = false;
|
||||
|
||||
|
@ -57,6 +68,7 @@ public class GuiScreenEditProfile extends GuiScreen {
|
|||
}
|
||||
|
||||
public void initGui() {
|
||||
startWebsocketConnection(configureServerIP());
|
||||
Keyboard.enableRepeatEvents(true);
|
||||
screenTitle = I18n.format("editProfile.title");
|
||||
usernameField = new GuiTextField(0, fontRendererObj, width / 2 - 20 + 1, height / 6 + 24 + 1, 138, 20);
|
||||
|
@ -66,6 +78,7 @@ public class GuiScreenEditProfile extends GuiScreen {
|
|||
buttonList.add(new GuiButton(0, width / 2 - 100, height / 6 + 168, I18n.format("gui.done")));
|
||||
buttonList.add(new GuiButton(1, width / 2 - 21, height / 6 + 110, 71, 20, I18n.format("editProfile.addSkin")));
|
||||
buttonList.add(new GuiButton(2, width / 2 - 21 + 71, height / 6 + 110, 72, 20, I18n.format("editProfile.clearSkin")));
|
||||
buttonList.add(new GuiButton(3, width / 2 - 100, height / 6 + 128, I18n.format("Capes")));
|
||||
}
|
||||
|
||||
private void updateOptions() {
|
||||
|
@ -197,7 +210,7 @@ public class GuiScreenEditProfile extends GuiScreen {
|
|||
}
|
||||
|
||||
mc.getTextureManager().bindTexture(newSkin.getResource());
|
||||
SkinPreviewRenderer.renderBiped(xx, yy, mx, my, SkinModel.STEVE);
|
||||
SkinPreviewRenderer.renderBiped(xx, yy, mx, my, SkinModel.STEVE, false);
|
||||
|
||||
skinX = width / 2 + 20;
|
||||
skinY = height / 4;
|
||||
|
@ -222,7 +235,7 @@ public class GuiScreenEditProfile extends GuiScreen {
|
|||
}
|
||||
|
||||
mc.getTextureManager().bindTexture(newSkin.getResource());
|
||||
SkinPreviewRenderer.renderBiped(xx, yy, mx, my, SkinModel.ALEX);
|
||||
SkinPreviewRenderer.renderBiped(xx, yy, mx, my, SkinModel.ALEX, false);
|
||||
}else {
|
||||
skinX = this.width / 2 - 120;
|
||||
skinY = this.height / 6 + 8;
|
||||
|
@ -242,7 +255,8 @@ public class GuiScreenEditProfile extends GuiScreen {
|
|||
}
|
||||
|
||||
mc.getTextureManager().bindTexture(texture);
|
||||
SkinPreviewRenderer.renderBiped(xx, yy, newSkinWaitSteveOrAlex ? width / 2 : mx, newSkinWaitSteveOrAlex ? height / 2 : my, model);
|
||||
globalModel = model;
|
||||
SkinPreviewRenderer.renderBiped(xx, yy, newSkinWaitSteveOrAlex ? width / 2 : mx, newSkinWaitSteveOrAlex ? height / 2 : my, model, false);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -266,7 +280,9 @@ public class GuiScreenEditProfile extends GuiScreen {
|
|||
if(!dropDownOpen) {
|
||||
if(par1GuiButton.id == 0) {
|
||||
safeProfile();
|
||||
CustomSky.update();
|
||||
if(cape != "noCape") {
|
||||
socket.send("login:" + EaglerProfile.getName() + ":" + cape);
|
||||
}
|
||||
this.mc.displayGuiScreen((GuiScreen) parent);
|
||||
}else if(par1GuiButton.id == 1) {
|
||||
EagRuntime.displayFileChooser("image/png", "png");
|
||||
|
@ -275,6 +291,9 @@ public class GuiScreenEditProfile extends GuiScreen {
|
|||
safeProfile();
|
||||
updateOptions();
|
||||
selectedSlot = 0;
|
||||
} else if(par1GuiButton.id == 3) {
|
||||
safeProfile();
|
||||
this.mc.displayGuiScreen(new GuiScreenEditCape(this, selectedSlot, globalModel));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -462,4 +481,86 @@ public class GuiScreenEditProfile extends GuiScreen {
|
|||
EaglerProfile.write();
|
||||
}
|
||||
|
||||
public static String configureServerIP() {
|
||||
String uri = "play.mrpolog.tk:25565";
|
||||
|
||||
String uria = null;
|
||||
if(!uri.contains("://")){
|
||||
uri = ( isSSLPage() ? "wss://" : "ws://") + uri;
|
||||
uria = uri;
|
||||
} else {
|
||||
System.err.println("Invalid URI WebSocket Protocol!");
|
||||
}
|
||||
|
||||
int i = uria.lastIndexOf(':');
|
||||
int port = -1;
|
||||
|
||||
if(i > 0 && uria.startsWith("[") && uria.charAt(i - 1) != ']') {
|
||||
i = -1;
|
||||
}
|
||||
|
||||
if(i == -1) port = uri.startsWith("wss") ? 443 : 80;
|
||||
if(uria.endsWith("/")) uria = uria.substring(0, uria.length() - 1);
|
||||
|
||||
if(port == -1) {
|
||||
try {
|
||||
int i2 = uria.indexOf('/');
|
||||
port = Integer.parseInt(uria.substring(i + 1, i2 == -1 ? uria.length() : i2 - 1));
|
||||
}catch(Throwable t) {
|
||||
System.err.println("Invalid Port!");
|
||||
}
|
||||
}
|
||||
|
||||
return uria;
|
||||
}
|
||||
|
||||
public static WebSocket socket;
|
||||
public static boolean isConnected = false;
|
||||
public static HashMap<String, String> capes = new HashMap<String, String>();
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public static final void startWebsocketConnection(String s) {
|
||||
socket = WebSocket.create(s);
|
||||
|
||||
socket.onOpen(new EventListener() {
|
||||
@Override
|
||||
public void handleEvent(Event event) {
|
||||
isConnected = true;
|
||||
}
|
||||
});
|
||||
|
||||
socket.onMessage(new EventListener() {
|
||||
@Override
|
||||
public void handleEvent(Event event) {
|
||||
MessageEvent messageEvent = (MessageEvent) event;
|
||||
String message = messageEvent.getData().toString();
|
||||
String[] message1 = message.split(":");
|
||||
capes.put(message1[0], message1[1]);
|
||||
}
|
||||
});
|
||||
|
||||
socket.onClose(new EventListener() {
|
||||
@Override
|
||||
public void handleEvent(Event event) {
|
||||
isConnected = false;
|
||||
}
|
||||
});
|
||||
|
||||
socket.onError(new EventListener() {
|
||||
@Override
|
||||
public void handleEvent(Event event) {
|
||||
socket.close();
|
||||
isConnected = false;
|
||||
System.err.println("WebSocket error occurred");
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@JSBody(params = { }, script = "return window.location.href;")
|
||||
private static native String getLocationString();
|
||||
|
||||
public static final boolean isSSLPage() {
|
||||
return getLocationString().startsWith("https");
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -1,10 +1,13 @@
|
|||
package net.lax1dude.eaglercraft.v1_8.profile;
|
||||
|
||||
import net.lax1dude.eaglercraft.v1_8.opengl.GlStateManager;
|
||||
import net.lax1dude.eaglercraft.v1_8.opengl.RealOpenGLEnums;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.model.ModelBiped;
|
||||
import net.minecraft.client.model.ModelPlayer;
|
||||
import net.minecraft.client.model.ModelZombie;
|
||||
import net.minecraft.client.renderer.RenderHelper;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
|
||||
/**
|
||||
* Copyright (c) 2022-2023 LAX1DUDE. All Rights Reserved.
|
||||
|
@ -25,6 +28,30 @@ public class SkinPreviewRenderer {
|
|||
private static ModelPlayer playerModelAlex = null;
|
||||
private static ModelZombie playerModelZombie = null;
|
||||
|
||||
public static final ResourceLocation[] defaultVanillaCapes = new ResourceLocation[] {
|
||||
null,
|
||||
new ResourceLocation("/capes/c01.minecon_2011.png"),
|
||||
new ResourceLocation("/capes/c02.minecon_2012.png"),
|
||||
new ResourceLocation("/capes/c03.minecon_2013.png"),
|
||||
new ResourceLocation("/capes/c04.minecon_2015.png"),
|
||||
new ResourceLocation("/capes/c05.minecon_2016.png"),
|
||||
new ResourceLocation("/capes/c06.microsoft_account.png"),
|
||||
new ResourceLocation("/capes/c07.mapmaker.png"),
|
||||
new ResourceLocation("/capes/c08.mojang_old.png"),
|
||||
new ResourceLocation("/capes/c09.mojang_new.png"),
|
||||
new ResourceLocation("/capes/c10.jira_mod.png"),
|
||||
new ResourceLocation("/capes/c11.mojang_very_old.png"),
|
||||
new ResourceLocation("/capes/c12.scrolls.png"),
|
||||
new ResourceLocation("/capes/c13.cobalt.png"),
|
||||
new ResourceLocation("/capes/c14.translator.png"),
|
||||
new ResourceLocation("/capes/c15.millionth_account.png"),
|
||||
new ResourceLocation("/capes/c16.prismarine.png"),
|
||||
new ResourceLocation("/capes/c17.snowman.png"),
|
||||
new ResourceLocation("/capes/c18.spade.png"),
|
||||
new ResourceLocation("/capes/c19.birthday.png"),
|
||||
new ResourceLocation("/capes/c20.db.png")
|
||||
};
|
||||
|
||||
public static void initialize() {
|
||||
playerModelSteve = new ModelPlayer(0.0f, false);
|
||||
playerModelSteve.isChild = false;
|
||||
|
@ -34,7 +61,7 @@ public class SkinPreviewRenderer {
|
|||
playerModelZombie.isChild = false;
|
||||
}
|
||||
|
||||
public static void renderBiped(int x, int y, int mx, int my, SkinModel skinModel) {
|
||||
public static void renderBiped(int x, int y, int mx, int my, SkinModel skinModel, boolean showCape) {
|
||||
ModelBiped model;
|
||||
switch(skinModel) {
|
||||
case STEVE:
|
||||
|
@ -63,12 +90,39 @@ public class SkinPreviewRenderer {
|
|||
RenderHelper.enableGUIStandardItemLighting();
|
||||
|
||||
GlStateManager.translate(0.0f, 1.0f, 0.0f);
|
||||
GlStateManager.rotate(((y - my) * -0.06f), 1.0f, 0.0f, 0.0f);
|
||||
if(showCape) {
|
||||
GlStateManager.rotate(140.0f, 0.0f, 1.0f, 0.0f);
|
||||
mx = x - (x - mx) - 20;
|
||||
GlStateManager.rotate(((y - my) * -0.02f), 1.0f, 0.0f, 0.0f);
|
||||
} else {
|
||||
GlStateManager.rotate(((y - my) * -0.06f), 1.0f, 0.0f, 0.0f);
|
||||
}
|
||||
GlStateManager.rotate(((x - mx) * 0.06f), 0.0f, 1.0f, 0.0f);
|
||||
GlStateManager.translate(0.0f, -1.0f, 0.0f);
|
||||
|
||||
model.render(null, 0.0f, 0.0f, (float)(System.currentTimeMillis() % 2000000) / 50f, ((x - mx) * 0.06f), ((y - my) * -0.1f), 0.0625f);
|
||||
|
||||
if(showCape && !(EaglerProfile.presetCapeId >= 0 && defaultVanillaCapes[EaglerProfile.presetCapeId] == null)) {
|
||||
GlStateManager.pushMatrix();
|
||||
GlStateManager.translate(0.0F, 0.0F, 0.150F);
|
||||
GlStateManager.rotate(180.0F, 0.0F, 1.0F, 0.0F);
|
||||
GlStateManager.rotate(-6.0F, 1.0F, 0.0F, 0.0F);
|
||||
|
||||
Minecraft.getMinecraft().getTextureManager().bindTexture(defaultVanillaCapes[EaglerProfile.presetCapeId]);
|
||||
|
||||
new ModelBiped(0.0F, 0.0F, 64, 32).bipedCloak.render(0.0625F);
|
||||
|
||||
if(EaglerProfile.presetCapeId < 0) {
|
||||
GlStateManager.matrixMode(RealOpenGLEnums.GL_TEXTURE);
|
||||
GlStateManager.popMatrix();
|
||||
GlStateManager.matrixMode(RealOpenGLEnums.GL_MODELVIEW);
|
||||
}
|
||||
|
||||
GlStateManager.popMatrix();
|
||||
}
|
||||
|
||||
GlStateManager.color(1.0f, 1.0f, 1.0f, 1.0f);
|
||||
|
||||
GlStateManager.popMatrix();
|
||||
GlStateManager.disableLighting();
|
||||
}
|
||||
|
|
|
@ -1238,11 +1238,21 @@ public class Minecraft implements IThreadListener {
|
|||
return this.mcMusicTicker;
|
||||
}
|
||||
|
||||
public int lastKeepAlive = 0;
|
||||
public int keepAlive = 0;
|
||||
GuiScreenEditProfile profile;
|
||||
|
||||
/**+
|
||||
* Runs the current tick.
|
||||
*/
|
||||
public void runTick() throws IOException {
|
||||
|
||||
lastKeepAlive++;
|
||||
if(lastKeepAlive > (keepAlive + 300) && profile.isConnected) {
|
||||
profile.socket.send("keepAlivePacket");
|
||||
keepAlive = lastKeepAlive;
|
||||
}
|
||||
|
||||
Controller.controllerTick();
|
||||
|
||||
if (this.rightClickDelayTimer > 0) {
|
||||
|
|
|
@ -34,6 +34,7 @@ public class ModelBiped extends ModelBase {
|
|||
public int heldItemRight;
|
||||
public boolean isSneak;
|
||||
public boolean aimedBow;
|
||||
public ModelRenderer bipedCloak;
|
||||
|
||||
public ModelBiped() {
|
||||
this(0.0F);
|
||||
|
@ -46,6 +47,8 @@ public class ModelBiped extends ModelBase {
|
|||
public ModelBiped(float modelSize, float parFloat1, int textureWidthIn, int textureHeightIn) {
|
||||
this.textureWidth = textureWidthIn;
|
||||
this.textureHeight = textureHeightIn;
|
||||
this.bipedCloak = new ModelRenderer(this, 0, 0);
|
||||
this.bipedCloak.addBox(-5.0F, 0.0F, -1.0F, 10, 16, 1, modelSize);
|
||||
this.bipedHead = new ModelRenderer(this, 0, 0);
|
||||
this.bipedHead.addBox(-4.0F, -8.0F, -4.0F, 8, 8, 8, modelSize);
|
||||
this.bipedHead.setRotationPoint(0.0F, 0.0F + parFloat1, 0.0F);
|
||||
|
@ -249,4 +252,11 @@ public class ModelBiped extends ModelBase {
|
|||
public void postRenderArm(float f) {
|
||||
this.bipedRightArm.postRender(f);
|
||||
}
|
||||
|
||||
/**
|
||||
* Renders the cloak of the current biped (in most cases, it's a player)
|
||||
*/
|
||||
public void renderCloak(float par1) {
|
||||
this.bipedCloak.render(par1);
|
||||
}
|
||||
}
|