better cosmetics structure
This commit is contained in:
@@ -5,9 +5,10 @@ import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientLifecycleEvents;
|
||||
import net.minecraft.client.font.TextRenderer;
|
||||
import net.minecraft.util.math.ColorHelper;
|
||||
import org.saturnclient.saturnclient.auth.SaturnSocket;
|
||||
import org.saturnclient.saturnclient.cloaks.Cloaks;
|
||||
import org.saturnclient.saturnclient.config.ConfigManager;
|
||||
import org.saturnclient.saturnclient.config.Property;
|
||||
import org.saturnclient.saturnclient.cosmetics.Hats;
|
||||
import org.saturnclient.saturnclient.cosmetics.cloaks.Cloaks;
|
||||
import org.saturnclient.saturnclient.event.KeyInputHandler;
|
||||
import org.saturnclient.saturnmods.ModManager;
|
||||
import org.saturnclient.ui.SaturnAnimation;
|
||||
@@ -61,6 +62,7 @@ public class SaturnClient implements ModInitializer {
|
||||
KeyInputHandler.register();
|
||||
if (SaturnSocket.authenticate()) {
|
||||
Cloaks.initialize();
|
||||
Hats.initialize();
|
||||
LOGGER.info(MOD_ID + " initialization complete");
|
||||
} else {
|
||||
LOGGER.error("Failed to authenticate with the server");
|
||||
|
||||
@@ -2,8 +2,10 @@ package org.saturnclient.saturnclient.auth;
|
||||
|
||||
public class SaturnPlayer {
|
||||
public String cloak = "";
|
||||
public String hat = "";
|
||||
|
||||
public SaturnPlayer(String cloak) {
|
||||
public SaturnPlayer(String cloak, String hat) {
|
||||
this.cloak = cloak;
|
||||
this.hat = hat;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,7 +7,7 @@ import java.util.Map;
|
||||
import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientLifecycleEvents;
|
||||
import net.minecraft.client.MinecraftClient;
|
||||
import org.saturnclient.saturnclient.SaturnClient;
|
||||
import org.saturnclient.saturnclient.cloaks.Cloaks;
|
||||
import org.saturnclient.saturnclient.cosmetics.cloaks.Cloaks;
|
||||
|
||||
public class SaturnSocket {
|
||||
|
||||
@@ -42,8 +42,7 @@ public class SaturnSocket {
|
||||
// Establish a persistent connection
|
||||
socket = new Socket(server, port);
|
||||
reader = new BufferedReader(
|
||||
new InputStreamReader(socket.getInputStream())
|
||||
);
|
||||
new InputStreamReader(socket.getInputStream()));
|
||||
writer = new PrintWriter(socket.getOutputStream(), true);
|
||||
|
||||
// Send authentication request
|
||||
@@ -56,21 +55,14 @@ public class SaturnSocket {
|
||||
|
||||
uuid = parser.getString("uuid");
|
||||
String cloak = parser.getString("cloak");
|
||||
String hat = parser.getString("hat");
|
||||
|
||||
for (String availableCloak : parser.getArray("cloaks")) {
|
||||
SaturnClient.LOGGER.info("Available cloak: " + availableCloak);
|
||||
Cloaks.availableCloaks.add(availableCloak);
|
||||
}
|
||||
|
||||
players.put(uuid, new SaturnPlayer(cloak));
|
||||
|
||||
if (cloak != null) {
|
||||
SaturnClient.LOGGER.info(
|
||||
"Setting cloak to " + cloak + " for " + uuid
|
||||
);
|
||||
MinecraftClient.getInstance()
|
||||
.execute(() -> Cloaks.setCloak(uuid, cloak));
|
||||
}
|
||||
players.put(uuid, new SaturnPlayer(cloak, hat));
|
||||
|
||||
playerNames.put(client.getSession().getUsername(), uuid);
|
||||
|
||||
|
||||
+22
-20
@@ -1,5 +1,7 @@
|
||||
package org.saturnclient.saturnclient.cosmetics;
|
||||
|
||||
import org.saturnclient.saturnclient.auth.SaturnSocket;
|
||||
|
||||
import net.minecraft.client.MinecraftClient;
|
||||
import net.minecraft.client.render.OverlayTexture;
|
||||
import net.minecraft.client.render.VertexConsumerProvider;
|
||||
@@ -10,13 +12,15 @@ import net.minecraft.client.render.entity.state.PlayerEntityRenderState;
|
||||
import net.minecraft.client.render.item.ItemRenderer;
|
||||
import net.minecraft.client.util.math.MatrixStack;
|
||||
import net.minecraft.component.DataComponentTypes;
|
||||
import net.minecraft.component.type.EquippableComponent;
|
||||
import net.minecraft.entity.EquipmentSlot;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.item.Items;
|
||||
import net.minecraft.item.ModelTransformationMode;
|
||||
import net.minecraft.util.Identifier;
|
||||
|
||||
public class CustomHeadFeatureRenderer extends FeatureRenderer<PlayerEntityRenderState, PlayerEntityModel> {
|
||||
public CustomHeadFeatureRenderer(FeatureRendererContext<PlayerEntityRenderState, PlayerEntityModel> context) {
|
||||
public class HatFeatureRenderer extends FeatureRenderer<PlayerEntityRenderState, PlayerEntityModel> {
|
||||
public HatFeatureRenderer(FeatureRendererContext<PlayerEntityRenderState, PlayerEntityModel> context) {
|
||||
super(context);
|
||||
}
|
||||
|
||||
@@ -24,29 +28,29 @@ public class CustomHeadFeatureRenderer extends FeatureRenderer<PlayerEntityRende
|
||||
public void render(MatrixStack matrices, VertexConsumerProvider vertexConsumers, int light,
|
||||
PlayerEntityRenderState state, float limbAngle, float limbDistance) {
|
||||
ItemStack headItem = state.equippedHeadStack;
|
||||
if (headItem.isEmpty()) {
|
||||
String uuid = SaturnSocket.playerNames.get(state.name);
|
||||
if (headItem.isEmpty() && uuid != null) {
|
||||
String hat = SaturnSocket.players.get(uuid).hat;
|
||||
if (hat.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
|
||||
matrices.push();
|
||||
|
||||
// Apply the head's rotations to align with the player's head orientation
|
||||
this.getContextModel().head.rotate(matrices);
|
||||
|
||||
// Scale the item to fit properly
|
||||
matrices.scale(0.5f, .5f, 0.5f);
|
||||
|
||||
// Position the item properly
|
||||
matrices.translate(0.0f, -0.8f, 0.0f);
|
||||
|
||||
// Rotate the item 180 degrees around the X-axis to fix the upside-down issue
|
||||
matrices.multiply(net.minecraft.util.math.RotationAxis.POSITIVE_X.rotationDegrees(180.0f));
|
||||
matrices.multiply(net.minecraft.util.math.RotationAxis.POSITIVE_Y.rotationDegrees(180.0f));
|
||||
|
||||
matrices.translate(0.0f, 0.5f, 0.0f);
|
||||
|
||||
// Create an ItemStack for the custom head item
|
||||
ItemStack customHat = new ItemStack(Items.STICK);
|
||||
customHat.set(DataComponentTypes.ITEM_MODEL, Identifier.of("saturnclient:hat"));
|
||||
customHat.set(DataComponentTypes.ITEM_MODEL,
|
||||
Identifier.of("saturnclient:hat_" + hat));
|
||||
customHat.set(DataComponentTypes.EQUIPPABLE,
|
||||
EquippableComponent.builder(EquipmentSlot.HEAD).build());
|
||||
|
||||
// Get the ItemRenderer instance
|
||||
ItemRenderer itemRenderer = MinecraftClient.getInstance().getItemRenderer();
|
||||
|
||||
// Render the item as headwear
|
||||
itemRenderer.renderItem(
|
||||
customHat,
|
||||
ModelTransformationMode.HEAD,
|
||||
@@ -54,11 +58,9 @@ public class CustomHeadFeatureRenderer extends FeatureRenderer<PlayerEntityRende
|
||||
OverlayTexture.DEFAULT_UV,
|
||||
matrices,
|
||||
vertexConsumers,
|
||||
null, // World can be null for entity rendering
|
||||
0 // Seed for randomness, not needed here
|
||||
);
|
||||
null,
|
||||
0);
|
||||
|
||||
// Pop the matrix stack to restore previous transformations
|
||||
matrices.pop();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
package org.saturnclient.saturnclient.cosmetics;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class Hats {
|
||||
public static List<String> availableHats = new ArrayList<>();
|
||||
|
||||
public static void initialize() {
|
||||
availableHats.add(0, "");
|
||||
}
|
||||
}
|
||||
+4
-4
@@ -1,11 +1,11 @@
|
||||
package org.saturnclient.saturnclient.cloaks;
|
||||
package org.saturnclient.saturnclient.cosmetics.cloaks;
|
||||
|
||||
import net.minecraft.util.Identifier;
|
||||
import org.saturnclient.saturnclient.SaturnClient;
|
||||
import org.saturnclient.saturnclient.auth.SaturnSocket;
|
||||
import org.saturnclient.saturnclient.cosmetics.cloaks.utils.AnimatedCloakData;
|
||||
import org.saturnclient.saturnclient.cosmetics.cloaks.utils.IdentifierUtils;
|
||||
import org.saturnclient.saturnclient.auth.SaturnPlayer;
|
||||
import org.saturnclient.saturnclient.cloaks.utils.AnimatedCloakData;
|
||||
import org.saturnclient.saturnclient.cloaks.utils.IdentifierUtils;
|
||||
|
||||
import javax.imageio.ImageIO;
|
||||
import java.awt.image.BufferedImage;
|
||||
@@ -55,7 +55,7 @@ public class Cloaks {
|
||||
public static void setCloakSilent(String uuid, String cloakName) {
|
||||
SaturnPlayer player = SaturnSocket.players.get(uuid);
|
||||
if (player == null) {
|
||||
SaturnSocket.players.put(uuid, new SaturnPlayer(cloakName));
|
||||
SaturnSocket.players.put(uuid, new SaturnPlayer(cloakName, null));
|
||||
} else {
|
||||
player.cloak = cloakName;
|
||||
}
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package org.saturnclient.saturnclient.cloaks;
|
||||
package org.saturnclient.saturnclient.cosmetics.cloaks;
|
||||
|
||||
import java.awt.*;
|
||||
import java.awt.image.BufferedImage;
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package org.saturnclient.saturnclient.cloaks.utils;
|
||||
package org.saturnclient.saturnclient.cosmetics.cloaks.utils;
|
||||
|
||||
import net.minecraft.util.Identifier;
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package org.saturnclient.saturnclient.cloaks.utils;
|
||||
package org.saturnclient.saturnclient.cosmetics.cloaks.utils;
|
||||
|
||||
import net.minecraft.client.MinecraftClient;
|
||||
import net.minecraft.client.texture.NativeImage;
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package org.saturnclient.saturnclient.cloaks.utils;
|
||||
package org.saturnclient.saturnclient.cosmetics.cloaks.utils;
|
||||
|
||||
import java.util.Random;
|
||||
|
||||
@@ -3,7 +3,7 @@ package org.saturnclient.saturnclient.menus;
|
||||
import net.minecraft.text.Text;
|
||||
import org.saturnclient.saturnclient.SaturnClient;
|
||||
import org.saturnclient.saturnclient.auth.SaturnSocket;
|
||||
import org.saturnclient.saturnclient.cloaks.Cloaks;
|
||||
import org.saturnclient.saturnclient.cosmetics.cloaks.Cloaks;
|
||||
import org.saturnclient.ui.SaturnUi;
|
||||
import org.saturnclient.ui.Textures;
|
||||
import org.saturnclient.ui.widgets.SaturnClickableSprite;
|
||||
|
||||
@@ -6,7 +6,7 @@ import net.minecraft.client.network.AbstractClientPlayerEntity;
|
||||
import net.minecraft.client.util.SkinTextures;
|
||||
import net.minecraft.util.Identifier;
|
||||
|
||||
import org.saturnclient.saturnclient.cloaks.Cloaks;
|
||||
import org.saturnclient.saturnclient.cosmetics.cloaks.Cloaks;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.injection.At;
|
||||
import org.spongepowered.asm.mixin.injection.Inject;
|
||||
|
||||
@@ -7,7 +7,7 @@ import net.minecraft.client.render.entity.model.PlayerEntityModel;
|
||||
import net.minecraft.client.render.entity.state.PlayerEntityRenderState;
|
||||
import net.minecraft.entity.player.PlayerEntity;
|
||||
|
||||
import org.saturnclient.saturnclient.cosmetics.CustomHeadFeatureRenderer;
|
||||
import org.saturnclient.saturnclient.cosmetics.HatFeatureRenderer;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.injection.At;
|
||||
import org.spongepowered.asm.mixin.injection.Inject;
|
||||
@@ -23,6 +23,6 @@ public abstract class PlayerEntityRendererMixin
|
||||
|
||||
@Inject(method = "<init>", at = @At("TAIL"))
|
||||
private void addCustomFeatureRenderer(EntityRendererFactory.Context context, boolean slim, CallbackInfo ci) {
|
||||
this.addFeature(new CustomHeadFeatureRenderer(this));
|
||||
this.addFeature(new HatFeatureRenderer(this));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user