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.client.font.TextRenderer;
|
||||||
import net.minecraft.util.math.ColorHelper;
|
import net.minecraft.util.math.ColorHelper;
|
||||||
import org.saturnclient.saturnclient.auth.SaturnSocket;
|
import org.saturnclient.saturnclient.auth.SaturnSocket;
|
||||||
import org.saturnclient.saturnclient.cloaks.Cloaks;
|
|
||||||
import org.saturnclient.saturnclient.config.ConfigManager;
|
import org.saturnclient.saturnclient.config.ConfigManager;
|
||||||
import org.saturnclient.saturnclient.config.Property;
|
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.saturnclient.event.KeyInputHandler;
|
||||||
import org.saturnclient.saturnmods.ModManager;
|
import org.saturnclient.saturnmods.ModManager;
|
||||||
import org.saturnclient.ui.SaturnAnimation;
|
import org.saturnclient.ui.SaturnAnimation;
|
||||||
@@ -61,6 +62,7 @@ public class SaturnClient implements ModInitializer {
|
|||||||
KeyInputHandler.register();
|
KeyInputHandler.register();
|
||||||
if (SaturnSocket.authenticate()) {
|
if (SaturnSocket.authenticate()) {
|
||||||
Cloaks.initialize();
|
Cloaks.initialize();
|
||||||
|
Hats.initialize();
|
||||||
LOGGER.info(MOD_ID + " initialization complete");
|
LOGGER.info(MOD_ID + " initialization complete");
|
||||||
} else {
|
} else {
|
||||||
LOGGER.error("Failed to authenticate with the server");
|
LOGGER.error("Failed to authenticate with the server");
|
||||||
|
|||||||
@@ -2,8 +2,10 @@ package org.saturnclient.saturnclient.auth;
|
|||||||
|
|
||||||
public class SaturnPlayer {
|
public class SaturnPlayer {
|
||||||
public String cloak = "";
|
public String cloak = "";
|
||||||
|
public String hat = "";
|
||||||
|
|
||||||
public SaturnPlayer(String cloak) {
|
public SaturnPlayer(String cloak, String hat) {
|
||||||
this.cloak = cloak;
|
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.fabricmc.fabric.api.client.event.lifecycle.v1.ClientLifecycleEvents;
|
||||||
import net.minecraft.client.MinecraftClient;
|
import net.minecraft.client.MinecraftClient;
|
||||||
import org.saturnclient.saturnclient.SaturnClient;
|
import org.saturnclient.saturnclient.SaturnClient;
|
||||||
import org.saturnclient.saturnclient.cloaks.Cloaks;
|
import org.saturnclient.saturnclient.cosmetics.cloaks.Cloaks;
|
||||||
|
|
||||||
public class SaturnSocket {
|
public class SaturnSocket {
|
||||||
|
|
||||||
@@ -42,8 +42,7 @@ public class SaturnSocket {
|
|||||||
// Establish a persistent connection
|
// Establish a persistent connection
|
||||||
socket = new Socket(server, port);
|
socket = new Socket(server, port);
|
||||||
reader = new BufferedReader(
|
reader = new BufferedReader(
|
||||||
new InputStreamReader(socket.getInputStream())
|
new InputStreamReader(socket.getInputStream()));
|
||||||
);
|
|
||||||
writer = new PrintWriter(socket.getOutputStream(), true);
|
writer = new PrintWriter(socket.getOutputStream(), true);
|
||||||
|
|
||||||
// Send authentication request
|
// Send authentication request
|
||||||
@@ -56,21 +55,14 @@ public class SaturnSocket {
|
|||||||
|
|
||||||
uuid = parser.getString("uuid");
|
uuid = parser.getString("uuid");
|
||||||
String cloak = parser.getString("cloak");
|
String cloak = parser.getString("cloak");
|
||||||
|
String hat = parser.getString("hat");
|
||||||
|
|
||||||
for (String availableCloak : parser.getArray("cloaks")) {
|
for (String availableCloak : parser.getArray("cloaks")) {
|
||||||
SaturnClient.LOGGER.info("Available cloak: " + availableCloak);
|
SaturnClient.LOGGER.info("Available cloak: " + availableCloak);
|
||||||
Cloaks.availableCloaks.add(availableCloak);
|
Cloaks.availableCloaks.add(availableCloak);
|
||||||
}
|
}
|
||||||
|
|
||||||
players.put(uuid, new SaturnPlayer(cloak));
|
players.put(uuid, new SaturnPlayer(cloak, hat));
|
||||||
|
|
||||||
if (cloak != null) {
|
|
||||||
SaturnClient.LOGGER.info(
|
|
||||||
"Setting cloak to " + cloak + " for " + uuid
|
|
||||||
);
|
|
||||||
MinecraftClient.getInstance()
|
|
||||||
.execute(() -> Cloaks.setCloak(uuid, cloak));
|
|
||||||
}
|
|
||||||
|
|
||||||
playerNames.put(client.getSession().getUsername(), uuid);
|
playerNames.put(client.getSession().getUsername(), uuid);
|
||||||
|
|
||||||
|
|||||||
+22
-20
@@ -1,5 +1,7 @@
|
|||||||
package org.saturnclient.saturnclient.cosmetics;
|
package org.saturnclient.saturnclient.cosmetics;
|
||||||
|
|
||||||
|
import org.saturnclient.saturnclient.auth.SaturnSocket;
|
||||||
|
|
||||||
import net.minecraft.client.MinecraftClient;
|
import net.minecraft.client.MinecraftClient;
|
||||||
import net.minecraft.client.render.OverlayTexture;
|
import net.minecraft.client.render.OverlayTexture;
|
||||||
import net.minecraft.client.render.VertexConsumerProvider;
|
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.render.item.ItemRenderer;
|
||||||
import net.minecraft.client.util.math.MatrixStack;
|
import net.minecraft.client.util.math.MatrixStack;
|
||||||
import net.minecraft.component.DataComponentTypes;
|
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.ItemStack;
|
||||||
import net.minecraft.item.Items;
|
import net.minecraft.item.Items;
|
||||||
import net.minecraft.item.ModelTransformationMode;
|
import net.minecraft.item.ModelTransformationMode;
|
||||||
import net.minecraft.util.Identifier;
|
import net.minecraft.util.Identifier;
|
||||||
|
|
||||||
public class CustomHeadFeatureRenderer extends FeatureRenderer<PlayerEntityRenderState, PlayerEntityModel> {
|
public class HatFeatureRenderer extends FeatureRenderer<PlayerEntityRenderState, PlayerEntityModel> {
|
||||||
public CustomHeadFeatureRenderer(FeatureRendererContext<PlayerEntityRenderState, PlayerEntityModel> context) {
|
public HatFeatureRenderer(FeatureRendererContext<PlayerEntityRenderState, PlayerEntityModel> context) {
|
||||||
super(context);
|
super(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -24,29 +28,29 @@ public class CustomHeadFeatureRenderer extends FeatureRenderer<PlayerEntityRende
|
|||||||
public void render(MatrixStack matrices, VertexConsumerProvider vertexConsumers, int light,
|
public void render(MatrixStack matrices, VertexConsumerProvider vertexConsumers, int light,
|
||||||
PlayerEntityRenderState state, float limbAngle, float limbDistance) {
|
PlayerEntityRenderState state, float limbAngle, float limbDistance) {
|
||||||
ItemStack headItem = state.equippedHeadStack;
|
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();
|
matrices.push();
|
||||||
|
|
||||||
// Apply the head's rotations to align with the player's head orientation
|
|
||||||
this.getContextModel().head.rotate(matrices);
|
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_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);
|
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();
|
ItemRenderer itemRenderer = MinecraftClient.getInstance().getItemRenderer();
|
||||||
|
|
||||||
// Render the item as headwear
|
|
||||||
itemRenderer.renderItem(
|
itemRenderer.renderItem(
|
||||||
customHat,
|
customHat,
|
||||||
ModelTransformationMode.HEAD,
|
ModelTransformationMode.HEAD,
|
||||||
@@ -54,11 +58,9 @@ public class CustomHeadFeatureRenderer extends FeatureRenderer<PlayerEntityRende
|
|||||||
OverlayTexture.DEFAULT_UV,
|
OverlayTexture.DEFAULT_UV,
|
||||||
matrices,
|
matrices,
|
||||||
vertexConsumers,
|
vertexConsumers,
|
||||||
null, // World can be null for entity rendering
|
null,
|
||||||
0 // Seed for randomness, not needed here
|
0);
|
||||||
);
|
|
||||||
|
|
||||||
// Pop the matrix stack to restore previous transformations
|
|
||||||
matrices.pop();
|
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 net.minecraft.util.Identifier;
|
||||||
import org.saturnclient.saturnclient.SaturnClient;
|
import org.saturnclient.saturnclient.SaturnClient;
|
||||||
import org.saturnclient.saturnclient.auth.SaturnSocket;
|
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.auth.SaturnPlayer;
|
||||||
import org.saturnclient.saturnclient.cloaks.utils.AnimatedCloakData;
|
|
||||||
import org.saturnclient.saturnclient.cloaks.utils.IdentifierUtils;
|
|
||||||
|
|
||||||
import javax.imageio.ImageIO;
|
import javax.imageio.ImageIO;
|
||||||
import java.awt.image.BufferedImage;
|
import java.awt.image.BufferedImage;
|
||||||
@@ -55,7 +55,7 @@ public class Cloaks {
|
|||||||
public static void setCloakSilent(String uuid, String cloakName) {
|
public static void setCloakSilent(String uuid, String cloakName) {
|
||||||
SaturnPlayer player = SaturnSocket.players.get(uuid);
|
SaturnPlayer player = SaturnSocket.players.get(uuid);
|
||||||
if (player == null) {
|
if (player == null) {
|
||||||
SaturnSocket.players.put(uuid, new SaturnPlayer(cloakName));
|
SaturnSocket.players.put(uuid, new SaturnPlayer(cloakName, null));
|
||||||
} else {
|
} else {
|
||||||
player.cloak = cloakName;
|
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.*;
|
||||||
import java.awt.image.BufferedImage;
|
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;
|
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.MinecraftClient;
|
||||||
import net.minecraft.client.texture.NativeImage;
|
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;
|
import java.util.Random;
|
||||||
|
|
||||||
@@ -3,7 +3,7 @@ package org.saturnclient.saturnclient.menus;
|
|||||||
import net.minecraft.text.Text;
|
import net.minecraft.text.Text;
|
||||||
import org.saturnclient.saturnclient.SaturnClient;
|
import org.saturnclient.saturnclient.SaturnClient;
|
||||||
import org.saturnclient.saturnclient.auth.SaturnSocket;
|
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.SaturnUi;
|
||||||
import org.saturnclient.ui.Textures;
|
import org.saturnclient.ui.Textures;
|
||||||
import org.saturnclient.ui.widgets.SaturnClickableSprite;
|
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.client.util.SkinTextures;
|
||||||
import net.minecraft.util.Identifier;
|
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.Mixin;
|
||||||
import org.spongepowered.asm.mixin.injection.At;
|
import org.spongepowered.asm.mixin.injection.At;
|
||||||
import org.spongepowered.asm.mixin.injection.Inject;
|
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.client.render.entity.state.PlayerEntityRenderState;
|
||||||
import net.minecraft.entity.player.PlayerEntity;
|
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.Mixin;
|
||||||
import org.spongepowered.asm.mixin.injection.At;
|
import org.spongepowered.asm.mixin.injection.At;
|
||||||
import org.spongepowered.asm.mixin.injection.Inject;
|
import org.spongepowered.asm.mixin.injection.Inject;
|
||||||
@@ -23,6 +23,6 @@ public abstract class PlayerEntityRendererMixin
|
|||||||
|
|
||||||
@Inject(method = "<init>", at = @At("TAIL"))
|
@Inject(method = "<init>", at = @At("TAIL"))
|
||||||
private void addCustomFeatureRenderer(EntityRendererFactory.Context context, boolean slim, CallbackInfo ci) {
|
private void addCustomFeatureRenderer(EntityRendererFactory.Context context, boolean slim, CallbackInfo ci) {
|
||||||
this.addFeature(new CustomHeadFeatureRenderer(this));
|
this.addFeature(new HatFeatureRenderer(this));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
{
|
|
||||||
"model": {
|
|
||||||
"type": "minecraft:model",
|
|
||||||
"model": "saturnclient:item/hat"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"model": {
|
||||||
|
"type": "minecraft:model",
|
||||||
|
"model": "saturnclient:item/halo"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"model": {
|
||||||
|
"type": "minecraft:model",
|
||||||
|
"model": "saturnclient:item/halo"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,240 @@
|
|||||||
|
{
|
||||||
|
"credit": "Made with Blockbench",
|
||||||
|
"textures": {
|
||||||
|
"1": "saturnclient:item/halo"
|
||||||
|
},
|
||||||
|
"elements": [
|
||||||
|
{
|
||||||
|
"name": "hexadecagon",
|
||||||
|
"from": [7.40326, 10, 5],
|
||||||
|
"to": [8.59674, 11, 6],
|
||||||
|
"rotation": { "angle": -45, "axis": "y", "origin": [8, 11, 8] },
|
||||||
|
"faces": {
|
||||||
|
"north": { "uv": [0, 0, 1, 1], "texture": "#1" },
|
||||||
|
"east": { "uv": [0, 0, 1, 1], "texture": "#1" },
|
||||||
|
"south": { "uv": [0, 0, 1, 1], "texture": "#1" },
|
||||||
|
"west": { "uv": [0, 0, 1, 1], "texture": "#1" },
|
||||||
|
"up": { "uv": [0, 0, 1, 1], "texture": "#1" },
|
||||||
|
"down": { "uv": [0, 0, 1, 1], "texture": "#1" }
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "hexadecagon",
|
||||||
|
"from": [7.40326, 10, 5],
|
||||||
|
"to": [8.59674, 11, 6],
|
||||||
|
"rotation": { "angle": -22.5, "axis": "y", "origin": [8, 11, 8] },
|
||||||
|
"faces": {
|
||||||
|
"north": { "uv": [0, 0, 1, 1], "texture": "#1" },
|
||||||
|
"east": { "uv": [0, 0, 1, 1], "texture": "#1" },
|
||||||
|
"south": { "uv": [0, 0, 1, 1], "texture": "#1" },
|
||||||
|
"west": { "uv": [0, 0, 1, 1], "texture": "#1" },
|
||||||
|
"up": { "uv": [0, 0, 1, 1], "texture": "#1" },
|
||||||
|
"down": { "uv": [0, 0, 1, 1], "texture": "#1" }
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "hexadecagon",
|
||||||
|
"from": [7.40326, 10, 5],
|
||||||
|
"to": [8.59674, 11, 6],
|
||||||
|
"rotation": { "angle": 0, "axis": "y", "origin": [8, 11, 8] },
|
||||||
|
"faces": {
|
||||||
|
"north": { "uv": [0, 0, 1, 1], "texture": "#1" },
|
||||||
|
"east": { "uv": [0, 0, 1, 1], "texture": "#1" },
|
||||||
|
"south": { "uv": [0, 0, 1, 1], "texture": "#1" },
|
||||||
|
"west": { "uv": [0, 0, 1, 1], "texture": "#1" },
|
||||||
|
"up": { "uv": [0, 0, 1, 1], "texture": "#1" },
|
||||||
|
"down": { "uv": [0, 0, 1, 1], "texture": "#1" }
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "hexadecagon",
|
||||||
|
"from": [7.40326, 10, 5],
|
||||||
|
"to": [8.59674, 11, 6],
|
||||||
|
"rotation": { "angle": 22.5, "axis": "y", "origin": [8, 11, 8] },
|
||||||
|
"faces": {
|
||||||
|
"north": { "uv": [0, 0, 1, 1], "texture": "#1" },
|
||||||
|
"east": { "uv": [0, 0, 1, 1], "texture": "#1" },
|
||||||
|
"south": { "uv": [0, 0, 1, 1], "texture": "#1" },
|
||||||
|
"west": { "uv": [0, 0, 1, 1], "texture": "#1" },
|
||||||
|
"up": { "uv": [0, 0, 1, 1], "texture": "#1" },
|
||||||
|
"down": { "uv": [0, 0, 1, 1], "texture": "#1" }
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "hexadecagon",
|
||||||
|
"from": [7.40326, 10, 5],
|
||||||
|
"to": [8.59674, 11, 6],
|
||||||
|
"rotation": { "angle": 45, "axis": "y", "origin": [8, 11, 8] },
|
||||||
|
"faces": {
|
||||||
|
"north": { "uv": [0, 0, 1, 1], "texture": "#1" },
|
||||||
|
"east": { "uv": [0, 0, 1, 1], "texture": "#1" },
|
||||||
|
"south": { "uv": [0, 0, 1, 1], "texture": "#1" },
|
||||||
|
"west": { "uv": [0, 0, 1, 1], "texture": "#1" },
|
||||||
|
"up": { "uv": [0, 0, 1, 1], "texture": "#1" },
|
||||||
|
"down": { "uv": [0, 0, 1, 1], "texture": "#1" }
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "hexadecagon",
|
||||||
|
"from": [7.40326, 10, 10],
|
||||||
|
"to": [8.59674, 11, 11],
|
||||||
|
"rotation": { "angle": -45, "axis": "y", "origin": [8, 11, 8] },
|
||||||
|
"faces": {
|
||||||
|
"north": { "uv": [0, 0, 1, 1], "texture": "#1" },
|
||||||
|
"east": { "uv": [0, 0, 1, 1], "texture": "#1" },
|
||||||
|
"south": { "uv": [0, 0, 1, 1], "texture": "#1" },
|
||||||
|
"west": { "uv": [0, 0, 1, 1], "texture": "#1" },
|
||||||
|
"up": { "uv": [0, 0, 1, 1], "texture": "#1" },
|
||||||
|
"down": { "uv": [0, 0, 1, 1], "texture": "#1" }
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "hexadecagon",
|
||||||
|
"from": [7.40326, 10, 10],
|
||||||
|
"to": [8.59674, 11, 11],
|
||||||
|
"rotation": { "angle": -22.5, "axis": "y", "origin": [8, 11, 8] },
|
||||||
|
"faces": {
|
||||||
|
"north": { "uv": [0, 0, 1, 1], "texture": "#1" },
|
||||||
|
"east": { "uv": [0, 0, 1, 1], "texture": "#1" },
|
||||||
|
"south": { "uv": [0, 0, 1, 1], "texture": "#1" },
|
||||||
|
"west": { "uv": [0, 0, 1, 1], "texture": "#1" },
|
||||||
|
"up": { "uv": [0, 0, 1, 1], "texture": "#1" },
|
||||||
|
"down": { "uv": [0, 0, 1, 1], "texture": "#1" }
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "hexadecagon",
|
||||||
|
"from": [7.40326, 10, 10],
|
||||||
|
"to": [8.59674, 11, 11],
|
||||||
|
"rotation": { "angle": 0, "axis": "y", "origin": [8, 11, 8] },
|
||||||
|
"faces": {
|
||||||
|
"north": { "uv": [0, 0, 1, 1], "texture": "#1" },
|
||||||
|
"east": { "uv": [0, 0, 1, 1], "texture": "#1" },
|
||||||
|
"south": { "uv": [0, 0, 1, 1], "texture": "#1" },
|
||||||
|
"west": { "uv": [0, 0, 1, 1], "texture": "#1" },
|
||||||
|
"up": { "uv": [0, 0, 1, 1], "texture": "#1" },
|
||||||
|
"down": { "uv": [0, 0, 1, 1], "texture": "#1" }
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "hexadecagon",
|
||||||
|
"from": [7.40326, 10, 10],
|
||||||
|
"to": [8.59674, 11, 11],
|
||||||
|
"rotation": { "angle": 22.5, "axis": "y", "origin": [8, 11, 8] },
|
||||||
|
"faces": {
|
||||||
|
"north": { "uv": [0, 0, 1, 1], "texture": "#1" },
|
||||||
|
"east": { "uv": [0, 0, 1, 1], "texture": "#1" },
|
||||||
|
"south": { "uv": [0, 0, 1, 1], "texture": "#1" },
|
||||||
|
"west": { "uv": [0, 0, 1, 1], "texture": "#1" },
|
||||||
|
"up": { "uv": [0, 0, 1, 1], "texture": "#1" },
|
||||||
|
"down": { "uv": [0, 0, 1, 1], "texture": "#1" }
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "hexadecagon",
|
||||||
|
"from": [7.40326, 10, 10],
|
||||||
|
"to": [8.59674, 11, 11],
|
||||||
|
"rotation": { "angle": 45, "axis": "y", "origin": [8, 11, 8] },
|
||||||
|
"faces": {
|
||||||
|
"north": { "uv": [0, 0, 1, 1], "texture": "#1" },
|
||||||
|
"east": { "uv": [0, 0, 1, 1], "texture": "#1" },
|
||||||
|
"south": { "uv": [0, 0, 1, 1], "texture": "#1" },
|
||||||
|
"west": { "uv": [0, 0, 1, 1], "texture": "#1" },
|
||||||
|
"up": { "uv": [0, 0, 1, 1], "texture": "#1" },
|
||||||
|
"down": { "uv": [0, 0, 1, 1], "texture": "#1" }
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "hexadecagon",
|
||||||
|
"from": [5, 10, 7.40326],
|
||||||
|
"to": [6, 11, 8.59674],
|
||||||
|
"rotation": { "angle": -22.5, "axis": "y", "origin": [8, 11, 8] },
|
||||||
|
"faces": {
|
||||||
|
"north": { "uv": [0, 0, 1, 1], "texture": "#1" },
|
||||||
|
"east": { "uv": [0, 0, 1, 1], "texture": "#1" },
|
||||||
|
"south": { "uv": [0, 0, 1, 1], "texture": "#1" },
|
||||||
|
"west": { "uv": [0, 0, 1, 1], "texture": "#1" },
|
||||||
|
"up": { "uv": [0, 0, 1, 1], "texture": "#1" },
|
||||||
|
"down": { "uv": [0, 0, 1, 1], "texture": "#1" }
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "hexadecagon",
|
||||||
|
"from": [5, 10, 7.40326],
|
||||||
|
"to": [6, 11, 8.59674],
|
||||||
|
"rotation": { "angle": 0, "axis": "y", "origin": [8, 11, 8] },
|
||||||
|
"faces": {
|
||||||
|
"north": { "uv": [0, 0, 1, 1], "texture": "#1" },
|
||||||
|
"east": { "uv": [0, 0, 1, 1], "texture": "#1" },
|
||||||
|
"south": { "uv": [0, 0, 1, 1], "texture": "#1" },
|
||||||
|
"west": { "uv": [0, 0, 1, 1], "texture": "#1" },
|
||||||
|
"up": { "uv": [0, 0, 1, 1], "texture": "#1" },
|
||||||
|
"down": { "uv": [0, 0, 1, 1], "texture": "#1" }
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "hexadecagon",
|
||||||
|
"from": [5, 10, 7.40326],
|
||||||
|
"to": [6, 11, 8.59674],
|
||||||
|
"rotation": { "angle": 22.5, "axis": "y", "origin": [8, 11, 8] },
|
||||||
|
"faces": {
|
||||||
|
"north": { "uv": [0, 0, 1, 1], "texture": "#1" },
|
||||||
|
"east": { "uv": [0, 0, 1, 1], "texture": "#1" },
|
||||||
|
"south": { "uv": [0, 0, 1, 1], "texture": "#1" },
|
||||||
|
"west": { "uv": [0, 0, 1, 1], "texture": "#1" },
|
||||||
|
"up": { "uv": [0, 0, 1, 1], "texture": "#1" },
|
||||||
|
"down": { "uv": [0, 0, 1, 1], "texture": "#1" }
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "hexadecagon",
|
||||||
|
"from": [10, 10, 7.40326],
|
||||||
|
"to": [11, 11, 8.59674],
|
||||||
|
"rotation": { "angle": -22.5, "axis": "y", "origin": [8, 11, 8] },
|
||||||
|
"faces": {
|
||||||
|
"north": { "uv": [0, 0, 1, 1], "texture": "#1" },
|
||||||
|
"east": { "uv": [0, 0, 1, 1], "texture": "#1" },
|
||||||
|
"south": { "uv": [0, 0, 1, 1], "texture": "#1" },
|
||||||
|
"west": { "uv": [0, 0, 1, 1], "texture": "#1" },
|
||||||
|
"up": { "uv": [0, 0, 1, 1], "texture": "#1" },
|
||||||
|
"down": { "uv": [0, 0, 1, 1], "texture": "#1" }
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "hexadecagon",
|
||||||
|
"from": [10, 10, 7.40326],
|
||||||
|
"to": [11, 11, 8.59674],
|
||||||
|
"rotation": { "angle": 0, "axis": "y", "origin": [8, 11, 8] },
|
||||||
|
"faces": {
|
||||||
|
"north": { "uv": [0, 0, 1, 1], "texture": "#1" },
|
||||||
|
"east": { "uv": [0, 0, 1, 1], "texture": "#1" },
|
||||||
|
"south": { "uv": [0, 0, 1, 1], "texture": "#1" },
|
||||||
|
"west": { "uv": [0, 0, 1, 1], "texture": "#1" },
|
||||||
|
"up": { "uv": [0, 0, 1, 1], "texture": "#1" },
|
||||||
|
"down": { "uv": [0, 0, 1, 1], "texture": "#1" }
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "hexadecagon",
|
||||||
|
"from": [10, 10, 7.40326],
|
||||||
|
"to": [11, 11, 8.59674],
|
||||||
|
"rotation": { "angle": 22.5, "axis": "y", "origin": [8, 11, 8] },
|
||||||
|
"faces": {
|
||||||
|
"north": { "uv": [0, 0, 1, 1], "texture": "#1" },
|
||||||
|
"east": { "uv": [0, 0, 1, 1], "texture": "#1" },
|
||||||
|
"south": { "uv": [0, 0, 1, 1], "texture": "#1" },
|
||||||
|
"west": { "uv": [0, 0, 1, 1], "texture": "#1" },
|
||||||
|
"up": { "uv": [0, 0, 1, 1], "texture": "#1" },
|
||||||
|
"down": { "uv": [0, 0, 1, 1], "texture": "#1" }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"groups": [
|
||||||
|
{
|
||||||
|
"name": "hexadecagon",
|
||||||
|
"origin": [8, 8, 8],
|
||||||
|
"color": 0,
|
||||||
|
"children": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -1,42 +0,0 @@
|
|||||||
{
|
|
||||||
"credit": "Made with Blockbench",
|
|
||||||
"texture_size": [32, 32],
|
|
||||||
"textures": {
|
|
||||||
"0": "saturnclient:item/hat",
|
|
||||||
"particle": "saturnclient:item/hat"
|
|
||||||
},
|
|
||||||
"elements": [
|
|
||||||
{
|
|
||||||
"from": [3, 0, 3],
|
|
||||||
"to": [13, 1, 13],
|
|
||||||
"rotation": {"angle": 0, "axis": "x", "origin": [4, 0, 4]},
|
|
||||||
"faces": {
|
|
||||||
"north": {"uv": [8, 0, 16, 1], "texture": "#0"},
|
|
||||||
"east": {"uv": [8, 1, 16, 2], "texture": "#0"},
|
|
||||||
"south": {"uv": [8, 2, 16, 3], "texture": "#0"},
|
|
||||||
"west": {"uv": [8, 3, 16, 4], "texture": "#0"},
|
|
||||||
"up": {"uv": [8, 8, 0, 0], "texture": "#0"},
|
|
||||||
"down": {"uv": [8, 8, 0, 16], "texture": "#0"}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"from": [4, 1, 4],
|
|
||||||
"to": [12, 8, 12],
|
|
||||||
"rotation": {"angle": 0, "axis": "x", "origin": [4, 1, 4]},
|
|
||||||
"faces": {
|
|
||||||
"north": {"uv": [8, 0, 16, 1], "texture": "#0"},
|
|
||||||
"east": {"uv": [8, 1, 16, 2], "texture": "#0"},
|
|
||||||
"south": {"uv": [8, 2, 16, 3], "texture": "#0"},
|
|
||||||
"west": {"uv": [8, 3, 16, 4], "texture": "#0"},
|
|
||||||
"up": {"uv": [8, 8, 0, 0], "texture": "#0"},
|
|
||||||
"down": {"uv": [8, 8, 0, 16], "texture": "#0"}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"display": {
|
|
||||||
"head": {
|
|
||||||
"translation": [0, 18.25, 0],
|
|
||||||
"scale": [1.5, 1.5, 1.5]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Binary file not shown.
|
After Width: | Height: | Size: 95 B |
Binary file not shown.
|
Before Width: | Height: | Size: 214 B |
Reference in New Issue
Block a user