Oops forgot to commit
@@ -1,5 +0,0 @@
|
|||||||
package org.saturnclient.common;
|
|
||||||
|
|
||||||
public class Common {
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
package org.saturnclient.common.minecraft;
|
||||||
|
|
||||||
|
public class MinecraftBinding {
|
||||||
|
public Object inner;
|
||||||
|
|
||||||
|
public MinecraftBinding(Object binding) {
|
||||||
|
this.inner = binding;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
package org.saturnclient.common.minecraft;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
|
||||||
|
public abstract class MinecraftProvider {
|
||||||
|
public static MinecraftProvider PROVIDER;
|
||||||
|
|
||||||
|
public abstract Object createIdentifier(String namespace, String path);
|
||||||
|
|
||||||
|
public abstract boolean isKeyPressed(int key);
|
||||||
|
|
||||||
|
public abstract File getRunDirectory();
|
||||||
|
}
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
package org.saturnclient.common.minecraft.bindings;
|
||||||
|
|
||||||
|
import org.saturnclient.common.minecraft.MinecraftBinding;
|
||||||
|
import org.saturnclient.common.minecraft.MinecraftProvider;
|
||||||
|
|
||||||
|
public class SaturnIdentifier extends MinecraftBinding {
|
||||||
|
public SaturnIdentifier(String namespace, String path) {
|
||||||
|
super(MinecraftProvider.PROVIDER.createIdentifier(namespace, path));
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
package org.saturnclient.common.minecraft.bindings;
|
||||||
|
|
||||||
|
import org.saturnclient.common.minecraft.MinecraftBinding;
|
||||||
|
|
||||||
|
public class SaturnItemStack extends MinecraftBinding {
|
||||||
|
SaturnItemStack(Object binding) {
|
||||||
|
super(binding);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
package org.saturnclient.common.minecraft.bindings;
|
||||||
|
|
||||||
|
import org.saturnclient.common.minecraft.MinecraftBinding;
|
||||||
|
|
||||||
|
public class SaturnSprite extends MinecraftBinding {
|
||||||
|
SaturnSprite(Object binding) {
|
||||||
|
super(binding);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,55 @@
|
|||||||
|
package org.saturnclient.config;
|
||||||
|
|
||||||
|
import org.saturnclient.config.manager.ConfigManager;
|
||||||
|
import org.saturnclient.config.manager.Property;
|
||||||
|
|
||||||
|
public class AnimationConfig {
|
||||||
|
public static ConfigManager config;
|
||||||
|
|
||||||
|
// Logo
|
||||||
|
public static final AnimationConfig logo = new AnimationConfig(true, 700, 0);
|
||||||
|
|
||||||
|
// Main menu
|
||||||
|
public static final AnimationConfig mainMenu = new AnimationConfig(true, 700, 120);
|
||||||
|
|
||||||
|
// Mod menu
|
||||||
|
public static final AnimationConfig modMenu = new AnimationConfig(true, 700, 20);
|
||||||
|
|
||||||
|
// Shift menu
|
||||||
|
public static final AnimationConfig shiftMenu = new AnimationConfig(true, 700, 100);
|
||||||
|
|
||||||
|
// Cosmetics menu
|
||||||
|
public static final AnimationConfig cosmeticsMenu = new AnimationConfig(true, 700, 40);
|
||||||
|
|
||||||
|
// Emote wheel
|
||||||
|
public static final AnimationConfig emoteWheel = new AnimationConfig(true, 700, 40);
|
||||||
|
|
||||||
|
public static void init(ConfigManager parent) {
|
||||||
|
config = new ConfigManager(parent, "Animations");
|
||||||
|
|
||||||
|
logo.init("Logo");
|
||||||
|
mainMenu.init("Main Menu");
|
||||||
|
modMenu.init("Mod Menu");
|
||||||
|
shiftMenu.init("Shift Menu");
|
||||||
|
cosmeticsMenu.init("Cosmetics Menu");
|
||||||
|
emoteWheel.init("Emote Wheel");
|
||||||
|
}
|
||||||
|
|
||||||
|
// Animation properties
|
||||||
|
public final Property<Integer> duration;
|
||||||
|
public final Property<Integer> stagger;
|
||||||
|
public final Property<Integer> curve;
|
||||||
|
|
||||||
|
public AnimationConfig(boolean enabled, int delay, int stagger) {
|
||||||
|
this.duration = Property.integer(delay);
|
||||||
|
this.stagger = Property.integer(stagger);
|
||||||
|
this.curve = Property.select(1, "Ease In Out Cubic", "Ease Out Cubic", "Ease In Out Back");
|
||||||
|
}
|
||||||
|
|
||||||
|
public void init(String name) {
|
||||||
|
// config.property("Enable " + name + " Animations", this.enabled);
|
||||||
|
config.property(name + " Duration", this.duration);
|
||||||
|
config.property(name + " Stagger", this.stagger);
|
||||||
|
config.property(name + " Curve", this.curve);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,41 @@
|
|||||||
|
package org.saturnclient.config;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
|
||||||
|
import org.saturnclient.common.minecraft.MinecraftProvider;
|
||||||
|
import org.saturnclient.common.minecraft.bindings.SaturnIdentifier;
|
||||||
|
import org.saturnclient.config.manager.ConfigManager;
|
||||||
|
import org.saturnclient.config.manager.Key;
|
||||||
|
import org.saturnclient.config.manager.Property;
|
||||||
|
import org.saturnclient.ui.resources.Textures;
|
||||||
|
|
||||||
|
public class Config {
|
||||||
|
public static ConfigManager config;
|
||||||
|
|
||||||
|
public static Property<Boolean> realisticLogo = Property.bool(false);
|
||||||
|
public static Property<Boolean> saturnTitleScreen = Property.bool(true);
|
||||||
|
public static Property<Boolean> cloakPhysics = Property.bool(true);
|
||||||
|
public static Property<Integer> openEmoteWheel = Property.keybinding(Key.GLFW_KEY_B);
|
||||||
|
public static Property<Boolean> stagger = Property.bool(true);
|
||||||
|
|
||||||
|
public static SaturnIdentifier getLogo() {
|
||||||
|
return realisticLogo.value ? Textures.REALISTIC_LOGO : Textures.LOGO;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void init() {
|
||||||
|
File configFile = new File(MinecraftProvider.PROVIDER.getRunDirectory(), "saturn.json");
|
||||||
|
config = new ConfigManager(configFile, "Saturn Client");
|
||||||
|
|
||||||
|
config.property("Realistic logo", realisticLogo);
|
||||||
|
config.property("Saturn client title screen", saturnTitleScreen);
|
||||||
|
config.property("Open Emote Wheel", openEmoteWheel);
|
||||||
|
config.property("Cloak Physics", cloakPhysics);
|
||||||
|
config.property("Stagger Animations", stagger);
|
||||||
|
|
||||||
|
// Initialize a sub namespace for theme
|
||||||
|
Theme.init(config);
|
||||||
|
|
||||||
|
// Initialize a sub namespace for animations
|
||||||
|
AnimationConfig.init(config);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,91 @@
|
|||||||
|
package org.saturnclient.config;
|
||||||
|
|
||||||
|
import org.saturnclient.config.manager.ConfigManager;
|
||||||
|
import org.saturnclient.config.manager.Property;
|
||||||
|
|
||||||
|
public class Theme {
|
||||||
|
// Main UI background (slightly warm dark to match Saturn tone)
|
||||||
|
public static final Property<Integer> BACKGROUND = Property.color(0xFF12100D);
|
||||||
|
|
||||||
|
// Default text color
|
||||||
|
public static final Property<Integer> FOREGROUND = Property.color(0xFFF2E6D2);
|
||||||
|
|
||||||
|
// Widget default background (normal state)
|
||||||
|
public static final Property<Integer> PRIMARY = Property.color(0xFF1C1915);
|
||||||
|
|
||||||
|
// Widget text color
|
||||||
|
public static final Property<Integer> PRIMARY_FG = Property.color(0xFFEAD9B8);
|
||||||
|
|
||||||
|
// Saturn brand color (hovered / enabled / selected)
|
||||||
|
public static final Property<Integer> ACCENT = Property.color(0xFFE2BF7D);
|
||||||
|
|
||||||
|
// Text/icons shown on accent background
|
||||||
|
public static final Property<Integer> ACCENT_FG = Property.color(0xFF1A140A);
|
||||||
|
|
||||||
|
// Misc colors
|
||||||
|
public static final Property<Integer> SCROLL = Property.color(0xFFE2BF7D);
|
||||||
|
|
||||||
|
// UI metrics
|
||||||
|
public static final Property<Integer> BG_RADIUS = Property.integer(12);
|
||||||
|
public static final Property<Integer> WIDGET_RADIUS = Property.integer(10);
|
||||||
|
|
||||||
|
// Font
|
||||||
|
public static final Property<Integer> FONT = Property.font(2);
|
||||||
|
|
||||||
|
public static void init(ConfigManager parent) {
|
||||||
|
ConfigManager config = new ConfigManager(parent, "UI Style");
|
||||||
|
config.property("Background", BACKGROUND);
|
||||||
|
config.property("Foreground", FOREGROUND);
|
||||||
|
config.property("Primary", PRIMARY);
|
||||||
|
config.property("Primary Foreground", PRIMARY_FG);
|
||||||
|
config.property("Accent", ACCENT);
|
||||||
|
config.property("Accent Foreground", ACCENT_FG);
|
||||||
|
config.property("Scrollbar Color", SCROLL);
|
||||||
|
|
||||||
|
config.property("Background Radius", BG_RADIUS);
|
||||||
|
config.property("Widget Radius", WIDGET_RADIUS);
|
||||||
|
|
||||||
|
config.property("Font", FONT);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* primary by default, accent if true
|
||||||
|
*/
|
||||||
|
public static int getBg(boolean hover) {
|
||||||
|
return hover ? ACCENT.value : PRIMARY.value;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* (Foreground) primary by default, accent if true
|
||||||
|
*/
|
||||||
|
public static int getFg(boolean hover) {
|
||||||
|
return hover ? ACCENT_FG.value : PRIMARY_FG.value;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Multiplies existing alpha with 0–255 alpha.
|
||||||
|
*/
|
||||||
|
public static int withAlpha(int alpha, int color) {
|
||||||
|
alpha = Math.max(0, Math.min(255, alpha));
|
||||||
|
|
||||||
|
int originalAlpha = (color >>> 24) & 0xFF;
|
||||||
|
|
||||||
|
// Merge (multiply) alphas
|
||||||
|
int merged = (originalAlpha * alpha) / 255;
|
||||||
|
|
||||||
|
return (color & 0x00FFFFFF) | (merged << 24);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Multiplies existing alpha with 0.0–1.0 alpha.
|
||||||
|
*/
|
||||||
|
public static int withAlpha(float alpha, int color) {
|
||||||
|
alpha = Math.max(0f, Math.min(1f, alpha));
|
||||||
|
|
||||||
|
int originalAlpha = (color >>> 24) & 0xFF;
|
||||||
|
|
||||||
|
int merged = (int) (originalAlpha * alpha);
|
||||||
|
|
||||||
|
return (color & 0x00FFFFFF) | (merged << 24);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,205 @@
|
|||||||
|
package org.saturnclient.config.manager;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.databind.JsonNode;
|
||||||
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
|
import com.fasterxml.jackson.databind.node.ObjectNode;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.nio.file.Files;
|
||||||
|
import java.util.LinkedHashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
public class ConfigManager {
|
||||||
|
|
||||||
|
private static final ObjectMapper MAPPER = new ObjectMapper();
|
||||||
|
private static File configFile;
|
||||||
|
|
||||||
|
// SINGLE ROOT TREE
|
||||||
|
private static final Map<String, Property<?>> ROOT = new LinkedHashMap<>();
|
||||||
|
|
||||||
|
private static JsonNode cachedJson = null;
|
||||||
|
|
||||||
|
private final Map<String, Property<?>> currentMap;
|
||||||
|
|
||||||
|
private final String[] path;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a root namespace
|
||||||
|
*/
|
||||||
|
public ConfigManager(File configFile, String namespace) {
|
||||||
|
ConfigManager.configFile = configFile;
|
||||||
|
this.currentMap = new LinkedHashMap<>();
|
||||||
|
this.path = new String[] { namespace };
|
||||||
|
|
||||||
|
ROOT.put(namespace, Property.namespace(currentMap));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a root namespace
|
||||||
|
*/
|
||||||
|
public ConfigManager(String namespace) {
|
||||||
|
this.currentMap = new LinkedHashMap<>();
|
||||||
|
this.path = new String[] { namespace };
|
||||||
|
|
||||||
|
ROOT.put(namespace, Property.namespace(currentMap));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a sub-namespace inside a parent
|
||||||
|
*/
|
||||||
|
public ConfigManager(ConfigManager parent, String namespace) {
|
||||||
|
this.currentMap = new LinkedHashMap<>();
|
||||||
|
|
||||||
|
this.path = new String[parent.path.length + 1];
|
||||||
|
System.arraycopy(parent.path, 0, this.path, 0, parent.path.length);
|
||||||
|
this.path[this.path.length - 1] = namespace;
|
||||||
|
|
||||||
|
parent.property(namespace, Property.namespace(currentMap));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add a property
|
||||||
|
*/
|
||||||
|
public <T> Property<T> property(String name, Property<T> value) {
|
||||||
|
currentMap.put(name, value);
|
||||||
|
loadSingleProperty(name, value);
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add empty namespace
|
||||||
|
*/
|
||||||
|
public ConfigManager sub(String name) {
|
||||||
|
return new ConfigManager(this, name);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Load entire config
|
||||||
|
*/
|
||||||
|
public void load() {
|
||||||
|
JsonNode json = loadAndCache();
|
||||||
|
if (json == null || !json.isObject())
|
||||||
|
return;
|
||||||
|
|
||||||
|
loadRecursive((ObjectNode) json, ROOT);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Save entire config
|
||||||
|
*/
|
||||||
|
public static void save() {
|
||||||
|
|
||||||
|
ObjectNode rootJson = MAPPER.createObjectNode();
|
||||||
|
saveRecursive(rootJson, ROOT);
|
||||||
|
|
||||||
|
try {
|
||||||
|
MAPPER.writerWithDefaultPrettyPrinter().writeValue(configFile, rootJson);
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Recursive save
|
||||||
|
*/
|
||||||
|
private static void saveRecursive(ObjectNode json, Map<String, Property<?>> map) {
|
||||||
|
map.forEach((name, prop) -> {
|
||||||
|
if (prop.isNamespace()) {
|
||||||
|
|
||||||
|
ObjectNode child = json.objectNode();
|
||||||
|
saveRecursive(child, prop.getNamespaceMap());
|
||||||
|
|
||||||
|
json.set(name, child);
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
json.set(name, prop.toJson());
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Recursive load
|
||||||
|
*/
|
||||||
|
private static void loadRecursive(ObjectNode json, Map<String, Property<?>> map) {
|
||||||
|
|
||||||
|
map.forEach((name, prop) -> {
|
||||||
|
|
||||||
|
JsonNode element = json.get(name);
|
||||||
|
if (element == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (prop.isNamespace() && element.isObject()) {
|
||||||
|
|
||||||
|
loadRecursive((ObjectNode) element, prop.getNamespaceMap());
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
prop.loadFromJson(element);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Load only a single property immediately after creation
|
||||||
|
*/
|
||||||
|
private void loadSingleProperty(String name, Property<?> prop) {
|
||||||
|
|
||||||
|
JsonNode source = cachedJson != null ? cachedJson : loadAndCache();
|
||||||
|
if (source == null || !source.isObject())
|
||||||
|
return;
|
||||||
|
|
||||||
|
JsonNode currentScope = source;
|
||||||
|
|
||||||
|
for (String segment : path) {
|
||||||
|
|
||||||
|
JsonNode next = currentScope.get(segment);
|
||||||
|
|
||||||
|
if (next != null && next.isObject()) {
|
||||||
|
currentScope = next;
|
||||||
|
} else {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
JsonNode element = currentScope.get(name);
|
||||||
|
|
||||||
|
if (element != null) {
|
||||||
|
prop.loadFromJson(element);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reads file and caches json
|
||||||
|
*/
|
||||||
|
private JsonNode loadAndCache() {
|
||||||
|
|
||||||
|
try {
|
||||||
|
|
||||||
|
if (!configFile.exists()) {
|
||||||
|
|
||||||
|
Files.writeString(configFile.toPath(), "{}");
|
||||||
|
cachedJson = MAPPER.createObjectNode();
|
||||||
|
return cachedJson;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
cachedJson = MAPPER.readTree(configFile);
|
||||||
|
return cachedJson;
|
||||||
|
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public Map<String, Property<?>> getProperties() {
|
||||||
|
return currentMap;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,55 @@
|
|||||||
|
package org.saturnclient.config.manager;
|
||||||
|
|
||||||
|
public class Key {
|
||||||
|
/** Printable keys. */
|
||||||
|
public static final int GLFW_KEY_SPACE = 32,
|
||||||
|
GLFW_KEY_APOSTROPHE = 39,
|
||||||
|
GLFW_KEY_COMMA = 44,
|
||||||
|
GLFW_KEY_MINUS = 45,
|
||||||
|
GLFW_KEY_PERIOD = 46,
|
||||||
|
GLFW_KEY_SLASH = 47,
|
||||||
|
GLFW_KEY_0 = 48,
|
||||||
|
GLFW_KEY_1 = 49,
|
||||||
|
GLFW_KEY_2 = 50,
|
||||||
|
GLFW_KEY_3 = 51,
|
||||||
|
GLFW_KEY_4 = 52,
|
||||||
|
GLFW_KEY_5 = 53,
|
||||||
|
GLFW_KEY_6 = 54,
|
||||||
|
GLFW_KEY_7 = 55,
|
||||||
|
GLFW_KEY_8 = 56,
|
||||||
|
GLFW_KEY_9 = 57,
|
||||||
|
GLFW_KEY_SEMICOLON = 59,
|
||||||
|
GLFW_KEY_EQUAL = 61,
|
||||||
|
GLFW_KEY_A = 65,
|
||||||
|
GLFW_KEY_B = 66,
|
||||||
|
GLFW_KEY_C = 67,
|
||||||
|
GLFW_KEY_D = 68,
|
||||||
|
GLFW_KEY_E = 69,
|
||||||
|
GLFW_KEY_F = 70,
|
||||||
|
GLFW_KEY_G = 71,
|
||||||
|
GLFW_KEY_H = 72,
|
||||||
|
GLFW_KEY_I = 73,
|
||||||
|
GLFW_KEY_J = 74,
|
||||||
|
GLFW_KEY_K = 75,
|
||||||
|
GLFW_KEY_L = 76,
|
||||||
|
GLFW_KEY_M = 77,
|
||||||
|
GLFW_KEY_N = 78,
|
||||||
|
GLFW_KEY_O = 79,
|
||||||
|
GLFW_KEY_P = 80,
|
||||||
|
GLFW_KEY_Q = 81,
|
||||||
|
GLFW_KEY_R = 82,
|
||||||
|
GLFW_KEY_S = 83,
|
||||||
|
GLFW_KEY_T = 84,
|
||||||
|
GLFW_KEY_U = 85,
|
||||||
|
GLFW_KEY_V = 86,
|
||||||
|
GLFW_KEY_W = 87,
|
||||||
|
GLFW_KEY_X = 88,
|
||||||
|
GLFW_KEY_Y = 89,
|
||||||
|
GLFW_KEY_Z = 90,
|
||||||
|
GLFW_KEY_LEFT_BRACKET = 91,
|
||||||
|
GLFW_KEY_BACKSLASH = 92,
|
||||||
|
GLFW_KEY_RIGHT_BRACKET = 93,
|
||||||
|
GLFW_KEY_GRAVE_ACCENT = 96,
|
||||||
|
GLFW_KEY_WORLD_1 = 161,
|
||||||
|
GLFW_KEY_WORLD_2 = 162;
|
||||||
|
}
|
||||||
@@ -0,0 +1,320 @@
|
|||||||
|
package org.saturnclient.config.manager;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.databind.JsonNode;
|
||||||
|
import com.fasterxml.jackson.databind.node.JsonNodeFactory;
|
||||||
|
import com.fasterxml.jackson.databind.node.ObjectNode;
|
||||||
|
import org.saturnclient.common.minecraft.MinecraftProvider;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
public class Property<T> {
|
||||||
|
|
||||||
|
public static class NamedProperty<T> {
|
||||||
|
public String name;
|
||||||
|
public Property<T> prop;
|
||||||
|
|
||||||
|
public NamedProperty(String name, Property<T> value) {
|
||||||
|
this.name = name;
|
||||||
|
this.prop = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public enum PropertyType {
|
||||||
|
BOOLEAN,
|
||||||
|
INTEGER,
|
||||||
|
FLOAT,
|
||||||
|
STRING,
|
||||||
|
HEX,
|
||||||
|
NAMESPACE,
|
||||||
|
SELECT,
|
||||||
|
KEYBINDING,
|
||||||
|
}
|
||||||
|
|
||||||
|
public T value;
|
||||||
|
public boolean isReset = false;
|
||||||
|
private T defaultValue;
|
||||||
|
private String[] availableValues;
|
||||||
|
private final PropertyType type;
|
||||||
|
private boolean wasPressedLastTick = false;
|
||||||
|
|
||||||
|
private Property(T value, PropertyType type) {
|
||||||
|
this.value = value;
|
||||||
|
this.defaultValue = value;
|
||||||
|
this.type = type;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ---------- Factory Methods ----------
|
||||||
|
|
||||||
|
public static <T> Property<T> from(T value) {
|
||||||
|
if (value instanceof Boolean)
|
||||||
|
return new Property<>(value, PropertyType.BOOLEAN);
|
||||||
|
if (value instanceof Integer)
|
||||||
|
return new Property<>(value, PropertyType.INTEGER);
|
||||||
|
if (value instanceof Float)
|
||||||
|
return new Property<>(value, PropertyType.FLOAT);
|
||||||
|
if (value instanceof String)
|
||||||
|
return new Property<>(value, PropertyType.STRING);
|
||||||
|
if (valueIsNamespace(value))
|
||||||
|
return new Property<>(value, PropertyType.NAMESPACE);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Property<Integer> font(int value) {
|
||||||
|
return select(value, "Default", "Inter", "Inter bold");
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Property<Integer> select(Integer value, String... availableValues) {
|
||||||
|
Property<Integer> property = new Property<>(value, PropertyType.SELECT);
|
||||||
|
property.availableValues = availableValues;
|
||||||
|
return property;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Property<Map<String, Property<?>>> namespace(Map<String, Property<?>> value) {
|
||||||
|
return new Property<>(value, PropertyType.NAMESPACE);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Property<Boolean> bool(boolean value) {
|
||||||
|
return new Property<>(value, PropertyType.BOOLEAN);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Property<Integer> integer(int value) {
|
||||||
|
return new Property<>(value, PropertyType.INTEGER);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Property<Float> floatProp(float value) {
|
||||||
|
return new Property<>(value, PropertyType.FLOAT);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Property<String> string(String value) {
|
||||||
|
return new Property<>(value, PropertyType.STRING);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Property<Integer> color(int value) {
|
||||||
|
return new Property<>(value, PropertyType.HEX);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Property<Integer> keybinding(int value) {
|
||||||
|
return new Property<>(value, PropertyType.KEYBINDING);
|
||||||
|
}
|
||||||
|
|
||||||
|
// ---------- Select Helpers ----------
|
||||||
|
|
||||||
|
public void next() {
|
||||||
|
if (type == PropertyType.SELECT) {
|
||||||
|
int i = (Integer) value;
|
||||||
|
setValue((i < availableValues.length - 1) ? i + 1 : 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void prev() {
|
||||||
|
if (type == PropertyType.SELECT) {
|
||||||
|
int i = (Integer) value;
|
||||||
|
setValue((i > 0) ? i - 1 : availableValues.length - 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSelection(int selection) {
|
||||||
|
if (type == PropertyType.SELECT && selection >= 0 && selection < availableValues.length) {
|
||||||
|
setValue(selection);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getSelection() {
|
||||||
|
return (type == PropertyType.SELECT) ? availableValues[(Integer) value] : null;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ---------- Lifecycle ----------
|
||||||
|
|
||||||
|
public void reset() {
|
||||||
|
value = defaultValue;
|
||||||
|
isReset = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public PropertyType getType() {
|
||||||
|
return type;
|
||||||
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
public Map<String, Property<?>> getNamespaceValue() {
|
||||||
|
if (type == PropertyType.NAMESPACE && value instanceof Map) {
|
||||||
|
return (Map<String, Property<?>>) value;
|
||||||
|
}
|
||||||
|
throw new IllegalStateException("Property is not a namespace");
|
||||||
|
}
|
||||||
|
|
||||||
|
// ---------- JSON Serialization ----------
|
||||||
|
|
||||||
|
public JsonNode toJson() {
|
||||||
|
|
||||||
|
switch (type) {
|
||||||
|
|
||||||
|
case BOOLEAN:
|
||||||
|
return JsonNodeFactory.instance.booleanNode((Boolean) value);
|
||||||
|
|
||||||
|
case INTEGER:
|
||||||
|
return JsonNodeFactory.instance.numberNode((Integer) value);
|
||||||
|
|
||||||
|
case FLOAT:
|
||||||
|
return JsonNodeFactory.instance.numberNode((Float) value);
|
||||||
|
|
||||||
|
case STRING:
|
||||||
|
return JsonNodeFactory.instance.textNode((String) value);
|
||||||
|
|
||||||
|
case HEX:
|
||||||
|
return JsonNodeFactory.instance.textNode(
|
||||||
|
String.format("#%08X", (Integer) value));
|
||||||
|
|
||||||
|
case KEYBINDING:
|
||||||
|
case SELECT:
|
||||||
|
return JsonNodeFactory.instance.numberNode((Integer) value);
|
||||||
|
|
||||||
|
case NAMESPACE:
|
||||||
|
|
||||||
|
ObjectNode nested = JsonNodeFactory.instance.objectNode();
|
||||||
|
|
||||||
|
getNamespaceValue().forEach((k, v) -> {
|
||||||
|
nested.set(k, v.toJson());
|
||||||
|
});
|
||||||
|
|
||||||
|
return nested;
|
||||||
|
|
||||||
|
default:
|
||||||
|
return JsonNodeFactory.instance.textNode(String.valueOf(value));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void loadFromJson(JsonNode element) {
|
||||||
|
|
||||||
|
if (element == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
switch (type) {
|
||||||
|
|
||||||
|
case BOOLEAN:
|
||||||
|
if (element.isBoolean())
|
||||||
|
setValue(element.booleanValue());
|
||||||
|
break;
|
||||||
|
|
||||||
|
case INTEGER:
|
||||||
|
if (element.isInt())
|
||||||
|
setValue(element.intValue());
|
||||||
|
else if (element.isTextual())
|
||||||
|
setValue(parseHexToInt(element.textValue()));
|
||||||
|
break;
|
||||||
|
|
||||||
|
case FLOAT:
|
||||||
|
if (element.isNumber())
|
||||||
|
setValue(element.floatValue());
|
||||||
|
break;
|
||||||
|
|
||||||
|
case STRING:
|
||||||
|
if (element.isTextual())
|
||||||
|
setValue(element.textValue());
|
||||||
|
break;
|
||||||
|
|
||||||
|
case HEX:
|
||||||
|
if (element.isTextual())
|
||||||
|
setValue(parseHexToInt(element.textValue()));
|
||||||
|
break;
|
||||||
|
|
||||||
|
case NAMESPACE:
|
||||||
|
|
||||||
|
if (element.isObject()) {
|
||||||
|
|
||||||
|
ObjectNode obj = (ObjectNode) element;
|
||||||
|
|
||||||
|
getNamespaceValue().forEach((k, v) -> {
|
||||||
|
v.loadFromJson(obj.get(k));
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case SELECT:
|
||||||
|
if (element.isInt())
|
||||||
|
setSelection(element.intValue());
|
||||||
|
break;
|
||||||
|
|
||||||
|
case KEYBINDING:
|
||||||
|
if (element.isInt())
|
||||||
|
setValue(element.intValue());
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ---------- Utility ----------
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return String.valueOf(value);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean valueIsNamespace(Object obj) {
|
||||||
|
return obj instanceof Map;
|
||||||
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
public void setValue(Object value) {
|
||||||
|
this.value = (T) value;
|
||||||
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
public void setValue(Object value, Object defaultValue) {
|
||||||
|
this.value = (T) value;
|
||||||
|
this.defaultValue = (T) defaultValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
public NamedProperty<T> named(String name) {
|
||||||
|
return new NamedProperty<>(name, this);
|
||||||
|
}
|
||||||
|
|
||||||
|
// ---------- Keybindings (no SaturnClient) ----------
|
||||||
|
|
||||||
|
public boolean isKeyPressed() {
|
||||||
|
|
||||||
|
return (Integer) value != -1 &&
|
||||||
|
MinecraftProvider.PROVIDER.isKeyPressed((Integer) value);
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean wasKeyPressed() {
|
||||||
|
boolean pressed = isKeyPressed();
|
||||||
|
|
||||||
|
boolean result = pressed && !wasPressedLastTick;
|
||||||
|
|
||||||
|
wasPressedLastTick = pressed;
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ---------- HEX ----------
|
||||||
|
|
||||||
|
public static int parseHexToInt(String hex) {
|
||||||
|
|
||||||
|
hex = hex.replace("#", "");
|
||||||
|
|
||||||
|
if (hex.length() == 6)
|
||||||
|
hex = "FF" + hex;
|
||||||
|
|
||||||
|
if (hex.length() != 8)
|
||||||
|
throw new IllegalArgumentException(
|
||||||
|
"Hex must be 6 or 8 chars long, got '" + hex + "'");
|
||||||
|
|
||||||
|
return (int) Long.parseLong(hex, 16);
|
||||||
|
}
|
||||||
|
|
||||||
|
// ---------- Misc ----------
|
||||||
|
|
||||||
|
public Property<T> copy() {
|
||||||
|
return new Property<>(this.value, this.type);
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isNamespace() {
|
||||||
|
return type == PropertyType.NAMESPACE;
|
||||||
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
public Map<String, Property<?>> getNamespaceMap() {
|
||||||
|
return isNamespace() ? (Map<String, Property<?>>) value : null;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,66 @@
|
|||||||
|
package org.saturnclient.ui;
|
||||||
|
|
||||||
|
import org.saturnclient.common.minecraft.bindings.SaturnIdentifier;
|
||||||
|
import org.saturnclient.common.minecraft.bindings.SaturnItemStack;
|
||||||
|
import org.saturnclient.common.minecraft.bindings.SaturnSprite;
|
||||||
|
|
||||||
|
public interface RenderScope {
|
||||||
|
public void setOpacity(float alpha);
|
||||||
|
|
||||||
|
public int getColor(int color);
|
||||||
|
|
||||||
|
public void drawRect(int x, int y, int width, int height, int color);
|
||||||
|
|
||||||
|
public void drawText(String text, int x, int y, int font, int color);
|
||||||
|
|
||||||
|
public void drawText(float scale, String text, int x, int y, int font, int color);
|
||||||
|
|
||||||
|
public void drawRoundedRectangle(int x, int y, int width, int height, int radius, int color);
|
||||||
|
|
||||||
|
public int getScaledWindowWidth();
|
||||||
|
|
||||||
|
public int getScaledWindowHeight();
|
||||||
|
|
||||||
|
/* Saturn common sprites */
|
||||||
|
public void drawTexture(SaturnIdentifier sprite, int x, int y, float u, float v, int width, int height, int color);
|
||||||
|
|
||||||
|
public void drawTexture(SaturnIdentifier sprite, int x, int y, float u, float v, int width, int height);
|
||||||
|
|
||||||
|
public void drawTexture(SaturnIdentifier sprite, int x, int y, float u, float v, int width, int height,
|
||||||
|
int regionWith,
|
||||||
|
int regionHeight, int textureWidth, int textureHeight);
|
||||||
|
|
||||||
|
public void drawTexture(SaturnIdentifier sprite, int x, int y, float u, float v, int width, int height,
|
||||||
|
int regionWidth,
|
||||||
|
int regionHeight, int textureWidth, int textureHeight, int color);
|
||||||
|
|
||||||
|
public void enableScissor(int x1, int y1, int x2, int y2);
|
||||||
|
|
||||||
|
public void disableScissor();
|
||||||
|
|
||||||
|
public boolean scissorContains(int x, int y);
|
||||||
|
|
||||||
|
public void draw();
|
||||||
|
|
||||||
|
public void drawItem(SaturnItemStack item, int x, int y);
|
||||||
|
|
||||||
|
public void drawItem(SaturnItemStack stack, int x, int y, int seed);
|
||||||
|
|
||||||
|
public void drawItem(SaturnItemStack stack, int x, int y, int seed, int z);
|
||||||
|
|
||||||
|
public void drawItemWithoutEntity(SaturnItemStack stack, int x, int y);
|
||||||
|
|
||||||
|
public void drawItemWithoutEntity(SaturnItemStack stack, int x, int y, int seed);
|
||||||
|
|
||||||
|
public void drawItem(SaturnItemStack entity, SaturnItemStack stack, int x, int y, int seed);
|
||||||
|
|
||||||
|
public void drawSpriteStretched(SaturnSprite sprite, int x, int y, int width, int height);
|
||||||
|
|
||||||
|
public void drawSpriteStretched(SaturnSprite sprite, int x, int y, int width, int height, int color);
|
||||||
|
|
||||||
|
public void fill(int x1, int y1, int x2, int y2, int color);
|
||||||
|
|
||||||
|
public void fill(int x1, int y1, int x2, int y2, int z, int color);
|
||||||
|
|
||||||
|
public void drawBorder(int x, int y, int width, int height, int color);
|
||||||
|
}
|
||||||
@@ -0,0 +1,80 @@
|
|||||||
|
package org.saturnclient.ui.resources;
|
||||||
|
|
||||||
|
import org.saturnclient.common.minecraft.bindings.SaturnIdentifier;
|
||||||
|
|
||||||
|
public class Textures {
|
||||||
|
public static final SaturnIdentifier CROSSHAIR_RANGE = new SaturnIdentifier("saturnclient",
|
||||||
|
"textures/gui/hud/crosshair_range.png");
|
||||||
|
public static final SaturnIdentifier COSMETICS = new SaturnIdentifier("saturnclient",
|
||||||
|
"textures/gui/components/cosmetics.png");
|
||||||
|
public static final SaturnIdentifier HUD_ICON = new SaturnIdentifier("saturnclient",
|
||||||
|
"textures/gui/components/hud.png");
|
||||||
|
public static final SaturnIdentifier SEARCH = new SaturnIdentifier("saturnclient",
|
||||||
|
"textures/gui/components/search.png");
|
||||||
|
public static final SaturnIdentifier CLOSE = new SaturnIdentifier("saturnclient",
|
||||||
|
"textures/gui/components/close.png");
|
||||||
|
public static final SaturnIdentifier MODS_TAB = new SaturnIdentifier("saturnclient",
|
||||||
|
"textures/gui/components/mods_tab.png");
|
||||||
|
public static final SaturnIdentifier SETTINGS = new SaturnIdentifier("saturnclient",
|
||||||
|
"textures/gui/components/settings.png");
|
||||||
|
public static final SaturnIdentifier CLOAK = new SaturnIdentifier("saturnclient",
|
||||||
|
"textures/gui/components/cloak.png");
|
||||||
|
public static final SaturnIdentifier HAT = new SaturnIdentifier("saturnclient", "textures/gui/components/hat.png");
|
||||||
|
public static final SaturnIdentifier RESET = new SaturnIdentifier("saturnclient",
|
||||||
|
"textures/gui/components/reset.png");
|
||||||
|
public static final SaturnIdentifier TOGGLE_INDICATOR = new SaturnIdentifier("saturnclient",
|
||||||
|
"textures/gui/components/toggle_indicator.png");
|
||||||
|
public static final SaturnIdentifier LEFT = new SaturnIdentifier("saturnclient",
|
||||||
|
"textures/gui/components/left.png");
|
||||||
|
public static final SaturnIdentifier RIGHT = new SaturnIdentifier("saturnclient",
|
||||||
|
"textures/gui/components/right.png");
|
||||||
|
public static final SaturnIdentifier STORE = new SaturnIdentifier("saturnclient",
|
||||||
|
"textures/gui/components/store.png");
|
||||||
|
public static final SaturnIdentifier COINS = new SaturnIdentifier("saturnclient",
|
||||||
|
"textures/gui/components/coins.png");
|
||||||
|
public static final SaturnIdentifier SHIRT = new SaturnIdentifier("saturnclient",
|
||||||
|
"textures/gui/components/shirt.png");
|
||||||
|
public static final SaturnIdentifier CIRCLE_X = new SaturnIdentifier("saturnclient",
|
||||||
|
"textures/gui/components/circle_x.png");
|
||||||
|
public static final SaturnIdentifier INFO = new SaturnIdentifier("saturnclient",
|
||||||
|
"textures/gui/components/info.png");
|
||||||
|
public static final SaturnIdentifier CHECK = new SaturnIdentifier("saturnclient",
|
||||||
|
"textures/gui/components/check.png");
|
||||||
|
|
||||||
|
public static final SaturnIdentifier LOGO = new SaturnIdentifier("saturnclient", "textures/logo/logo.png");
|
||||||
|
public static final SaturnIdentifier REALISTIC_LOGO = new SaturnIdentifier("saturnclient",
|
||||||
|
"textures/logo/realistic.png");
|
||||||
|
public static final SaturnIdentifier LOGO_TEXT = new SaturnIdentifier("saturnclient", "textures/logo/text.png");
|
||||||
|
public static final SaturnIdentifier LOGO_TEXT_BIG = new SaturnIdentifier("saturnclient",
|
||||||
|
"textures/logo/text_big.png");
|
||||||
|
public static final SaturnIdentifier SPLASH = new SaturnIdentifier("saturnclient", "textures/gui/splash.png");
|
||||||
|
|
||||||
|
// Widgets
|
||||||
|
public static final SaturnIdentifier BUTTON_BORDER = new SaturnIdentifier("saturnclient", "button_border");
|
||||||
|
public static final SaturnIdentifier BUTTON = new SaturnIdentifier("saturnclient", "button");
|
||||||
|
public static final SaturnIdentifier BUTTON_OP = new SaturnIdentifier("saturnclient", "button_op");
|
||||||
|
public static final SaturnIdentifier SETTINGS_BG = new SaturnIdentifier("saturnclient", "settings_bg");
|
||||||
|
public static final SaturnIdentifier RECT = new SaturnIdentifier("saturnclient", "rect");
|
||||||
|
public static final SaturnIdentifier RECT_BORDER = new SaturnIdentifier("saturnclient", "rect_border");
|
||||||
|
public static final SaturnIdentifier MOD = new SaturnIdentifier("saturnclient", "textures/gui/components/mod.png");
|
||||||
|
public static final SaturnIdentifier MOD_BG = new SaturnIdentifier("saturnclient",
|
||||||
|
"textures/gui/components/mod_bg.png");
|
||||||
|
|
||||||
|
public static SaturnIdentifier getCloakPreview(String cloak) {
|
||||||
|
return new SaturnIdentifier("saturnclient",
|
||||||
|
"textures/gui/cloak/" + (cloak.isEmpty() ? "none" : cloak) + ".png");
|
||||||
|
}
|
||||||
|
|
||||||
|
public static SaturnIdentifier getHatPreview(String hat) {
|
||||||
|
return new SaturnIdentifier("saturnclient", "textures/gui/hat/" + (hat.isEmpty() ? "none" : hat) + ".png");
|
||||||
|
}
|
||||||
|
|
||||||
|
public static SaturnIdentifier getEmotePreview(String emote) {
|
||||||
|
return new SaturnIdentifier("saturnclient", "textures/gui/emote/" + (emote == null ? "none" : emote) + ".png");
|
||||||
|
}
|
||||||
|
|
||||||
|
public static SaturnIdentifier getModIcon(String modId) {
|
||||||
|
return new SaturnIdentifier("saturnclient", "textures/gui/mod/" + modId + ".svg");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
{
|
||||||
|
"providers": [
|
||||||
|
{
|
||||||
|
"type": "reference",
|
||||||
|
"id": "saturnclient:inter"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "reference",
|
||||||
|
"id": "saturnclient:inter_bold"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
{
|
||||||
|
"providers": [
|
||||||
|
{
|
||||||
|
"type": "bitmap",
|
||||||
|
"file": "minecraft:font/custom/saturn.png",
|
||||||
|
"ascent": 7,
|
||||||
|
"height": 8,
|
||||||
|
"chars": ["\uE002"]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "bitmap",
|
||||||
|
"file": "minecraft:font/custom/saturn_realistic.png",
|
||||||
|
"ascent": 7,
|
||||||
|
"height": 8,
|
||||||
|
"chars": ["\uE003"]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
After Width: | Height: | Size: 4.6 KiB |
|
After Width: | Height: | Size: 21 KiB |
@@ -0,0 +1 @@
|
|||||||
|
Here is the font download: https://fonts.google.com/specimen/Inter
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
{
|
||||||
|
"providers": [
|
||||||
|
{
|
||||||
|
"type": "ttf",
|
||||||
|
"file": "saturnclient:inter.ttf",
|
||||||
|
"shift": [0, 0],
|
||||||
|
"size": 18,
|
||||||
|
"oversample": 12.0,
|
||||||
|
"skip_missing": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
{
|
||||||
|
"providers": [
|
||||||
|
{
|
||||||
|
"type": "ttf",
|
||||||
|
"file": "saturnclient:inter_bold.ttf",
|
||||||
|
"shift": [0, 0],
|
||||||
|
"size": 18,
|
||||||
|
"oversample": 8.0,
|
||||||
|
"skip_missing": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
After Width: | Height: | Size: 419 KiB |
@@ -0,0 +1,4 @@
|
|||||||
|
{
|
||||||
|
"translate": [0.0, 0.62, 0.0],
|
||||||
|
"scale": [0.2, 0.1, 0.2]
|
||||||
|
}
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
{
|
||||||
|
"translate": [0.0, 0.25, 0.0],
|
||||||
|
"scale": [0.25, 0.25, 0.25]
|
||||||
|
}
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
# Blender MTL File: 'None'
|
||||||
|
# Material Count: 1
|
||||||
|
|
||||||
|
newmtl tex
|
||||||
|
Ns 250.000000
|
||||||
|
Ka 1.000000 1.000000 1.000000
|
||||||
|
Kd 0.800000 0.800000 0.800000
|
||||||
|
Ks 0.500000 0.500000 0.500000
|
||||||
|
Ke 0.000000 0.000000 0.000000
|
||||||
|
Ni 1.450000
|
||||||
|
d 1.000000
|
||||||
|
illum 2
|
||||||
|
map_Kd saturnclient:textures/item/halo_black.png
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
# Blender MTL File: 'None'
|
||||||
|
# Material Count: 1
|
||||||
|
|
||||||
|
newmtl tex
|
||||||
|
Ns 250.000000
|
||||||
|
Ka 1.000000 1.000000 1.000000
|
||||||
|
Kd 0.800000 0.800000 0.800000
|
||||||
|
Ks 0.500000 0.500000 0.500000
|
||||||
|
Ke 0.000000 0.000000 0.000000
|
||||||
|
Ni 1.450000
|
||||||
|
d 1.000000
|
||||||
|
illum 2
|
||||||
|
map_Kd saturnclient:textures/item/halo.png
|
||||||
@@ -0,0 +1,305 @@
|
|||||||
|
{
|
||||||
|
"version": 1,
|
||||||
|
"valid": true,
|
||||||
|
"name": "cry",
|
||||||
|
"description": "T_T",
|
||||||
|
"author": "dsty",
|
||||||
|
"emote": {
|
||||||
|
"beginTick": 0,
|
||||||
|
"endTick": 60,
|
||||||
|
"stopTick": 61,
|
||||||
|
"isLoop": true,
|
||||||
|
"returnTick": 5,
|
||||||
|
"nsfw": false,
|
||||||
|
"degrees": false,
|
||||||
|
"moves": [
|
||||||
|
{
|
||||||
|
"tick": 5,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"head": {
|
||||||
|
"x": -0.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 60,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"head": {
|
||||||
|
"x": -0.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 5,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"head": {
|
||||||
|
"y": -0.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 60,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"head": {
|
||||||
|
"y": -0.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 5,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"head": {
|
||||||
|
"z": -0.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 60,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"head": {
|
||||||
|
"z": -0.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 5,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"head": {
|
||||||
|
"pitch": 0.34134695
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 15,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"head": {
|
||||||
|
"pitch": 0.22808763
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 25,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"head": {
|
||||||
|
"pitch": 0.21269174
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 35,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"head": {
|
||||||
|
"pitch": 0.32248768
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 45,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"head": {
|
||||||
|
"pitch": 0.0874397
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 55,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"head": {
|
||||||
|
"pitch": 0.17582592
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 60,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"head": {
|
||||||
|
"pitch": 0.21476103
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 5,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"head": {
|
||||||
|
"yaw": -0.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 15,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"head": {
|
||||||
|
"yaw": -6.320644E-4
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 25,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"head": {
|
||||||
|
"yaw": 0.029434478
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 35,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"head": {
|
||||||
|
"yaw": -0.039604172
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 45,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"head": {
|
||||||
|
"yaw": 0.037607383
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 55,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"head": {
|
||||||
|
"yaw": 0.050604735
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 60,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"head": {
|
||||||
|
"yaw": -0.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 5,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"head": {
|
||||||
|
"roll": 0.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 15,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"head": {
|
||||||
|
"roll": -0.00930274
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 25,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"head": {
|
||||||
|
"roll": 0.0010032838
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 35,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"head": {
|
||||||
|
"roll": -0.009209918
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 45,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"head": {
|
||||||
|
"roll": -0.012478679
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 55,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"head": {
|
||||||
|
"roll": 0.031160546
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 60,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"head": {
|
||||||
|
"roll": 0.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 5,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"rightArm": {
|
||||||
|
"x": -5.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 5,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"rightArm": {
|
||||||
|
"y": 2.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 5,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"rightArm": {
|
||||||
|
"z": -0.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 5,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"rightArm": {
|
||||||
|
"pitch": -1.8700758
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 5,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"rightArm": {
|
||||||
|
"yaw": -0.4349194
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 5,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"rightArm": {
|
||||||
|
"roll": 0.4970688
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 5,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"rightArm": {
|
||||||
|
"bend": -0.9622451
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 5,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"leftArm": {
|
||||||
|
"x": 5.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 5,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"leftArm": {
|
||||||
|
"y": 2.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 5,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"leftArm": {
|
||||||
|
"z": -0.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 5,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"leftArm": {
|
||||||
|
"pitch": -1.9203311
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 5,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"leftArm": {
|
||||||
|
"yaw": 0.6307226
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 5,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"leftArm": {
|
||||||
|
"roll": -0.2971223
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 5,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"leftArm": {
|
||||||
|
"bend": -0.8864816
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,389 @@
|
|||||||
|
{
|
||||||
|
"version": 1,
|
||||||
|
"valid": true,
|
||||||
|
"name": "facepalm",
|
||||||
|
"description": "just facepalm",
|
||||||
|
"author": "dsty",
|
||||||
|
"emote": {
|
||||||
|
"beginTick": 0,
|
||||||
|
"endTick": 60,
|
||||||
|
"stopTick": 61,
|
||||||
|
"isLoop": false,
|
||||||
|
"returnTick": 2,
|
||||||
|
"nsfw": false,
|
||||||
|
"degrees": false,
|
||||||
|
"moves": [
|
||||||
|
{
|
||||||
|
"tick": 10,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"head": {
|
||||||
|
"x": -0.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 60,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"head": {
|
||||||
|
"x": -0.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 10,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"head": {
|
||||||
|
"y": -0.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 60,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"head": {
|
||||||
|
"y": -0.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 10,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"head": {
|
||||||
|
"z": -0.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 60,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"head": {
|
||||||
|
"z": -0.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 10,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"head": {
|
||||||
|
"pitch": 0.067995355
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 20,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"head": {
|
||||||
|
"pitch": 0.14453278
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 30,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"head": {
|
||||||
|
"pitch": 0.11871816
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 40,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"head": {
|
||||||
|
"pitch": 0.19018666
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 50,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"head": {
|
||||||
|
"pitch": 0.20064461
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 60,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"head": {
|
||||||
|
"pitch": -0.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 10,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"head": {
|
||||||
|
"yaw": 0.060454715
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 20,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"head": {
|
||||||
|
"yaw": -0.086299464
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 30,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"head": {
|
||||||
|
"yaw": -0.087619215
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 40,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"head": {
|
||||||
|
"yaw": -0.083825104
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 50,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"head": {
|
||||||
|
"yaw": 0.036273066
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 60,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"head": {
|
||||||
|
"yaw": -0.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 10,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"head": {
|
||||||
|
"roll": 0.0041144555
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 20,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"head": {
|
||||||
|
"roll": 0.12942825
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 30,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"head": {
|
||||||
|
"roll": -0.050149817
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 40,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"head": {
|
||||||
|
"roll": 0.08701207
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 50,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"head": {
|
||||||
|
"roll": 0.08676299
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 60,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"head": {
|
||||||
|
"roll": 0.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 5,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"rightArm": {
|
||||||
|
"x": -3.8523226
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 50,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"rightArm": {
|
||||||
|
"x": -3.8523226
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 60,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"rightArm": {
|
||||||
|
"x": -5.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 5,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"rightArm": {
|
||||||
|
"y": 2.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 60,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"rightArm": {
|
||||||
|
"y": 2.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 5,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"rightArm": {
|
||||||
|
"z": -0.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 60,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"rightArm": {
|
||||||
|
"z": -0.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 5,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"rightArm": {
|
||||||
|
"pitch": -2.0664942
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 20,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"rightArm": {
|
||||||
|
"pitch": -2.074402
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 30,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"rightArm": {
|
||||||
|
"pitch": -2.074402
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 40,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"rightArm": {
|
||||||
|
"pitch": -2.02932
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 50,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"rightArm": {
|
||||||
|
"pitch": -2.02932
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 60,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"rightArm": {
|
||||||
|
"pitch": -0.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 5,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"rightArm": {
|
||||||
|
"yaw": -0.47555572
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 20,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"rightArm": {
|
||||||
|
"yaw": -0.5093512
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 30,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"rightArm": {
|
||||||
|
"yaw": -0.5093512
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 40,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"rightArm": {
|
||||||
|
"yaw": -0.38563538
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 50,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"rightArm": {
|
||||||
|
"yaw": -0.38563538
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 60,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"rightArm": {
|
||||||
|
"yaw": -0.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 5,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"rightArm": {
|
||||||
|
"roll": 0.20147677
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 20,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"rightArm": {
|
||||||
|
"roll": 0.20521602
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 30,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"rightArm": {
|
||||||
|
"roll": 0.3274244
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 40,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"rightArm": {
|
||||||
|
"roll": 0.30787703
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 50,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"rightArm": {
|
||||||
|
"roll": 0.40478125
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 60,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"rightArm": {
|
||||||
|
"roll": -0.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 5,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"rightArm": {
|
||||||
|
"bend": -0.49199954
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 20,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"rightArm": {
|
||||||
|
"bend": -0.54730254
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 40,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"rightArm": {
|
||||||
|
"bend": -0.52019864
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 60,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"rightArm": {
|
||||||
|
"bend": -0.0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,697 @@
|
|||||||
|
{
|
||||||
|
"version": 1,
|
||||||
|
"valid": true,
|
||||||
|
"name": "front_flip",
|
||||||
|
"description": "Parkour!!!!1",
|
||||||
|
"author": "DKinchik",
|
||||||
|
"emote": {
|
||||||
|
"beginTick": 0,
|
||||||
|
"endTick": 17,
|
||||||
|
"stopTick": 18,
|
||||||
|
"isLoop": false,
|
||||||
|
"returnTick": 1,
|
||||||
|
"nsfw": false,
|
||||||
|
"degrees": false,
|
||||||
|
"moves": [
|
||||||
|
{
|
||||||
|
"tick": 2,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"head": {
|
||||||
|
"x": -0.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 15,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"head": {
|
||||||
|
"x": -0.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 2,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"head": {
|
||||||
|
"y": -0.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 15,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"head": {
|
||||||
|
"y": -0.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 2,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"head": {
|
||||||
|
"z": -0.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 15,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"head": {
|
||||||
|
"z": -0.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 2,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"head": {
|
||||||
|
"pitch": -0.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 5,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"head": {
|
||||||
|
"pitch": 0.7020477
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 10,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"head": {
|
||||||
|
"pitch": 0.7020477
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 15,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"head": {
|
||||||
|
"pitch": -0.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 2,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"head": {
|
||||||
|
"yaw": -0.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 15,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"head": {
|
||||||
|
"yaw": -0.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 2,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"head": {
|
||||||
|
"roll": 0.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 15,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"head": {
|
||||||
|
"roll": 0.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 2,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"rightLeg": {
|
||||||
|
"x": -1.9
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 15,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"rightLeg": {
|
||||||
|
"x": -1.9
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 2,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"rightLeg": {
|
||||||
|
"y": 11.169379
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 3,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"rightLeg": {
|
||||||
|
"y": 12.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 15,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"rightLeg": {
|
||||||
|
"y": 12.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 2,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"rightLeg": {
|
||||||
|
"z": -0.39214998
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 3,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"rightLeg": {
|
||||||
|
"z": 0.1
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 15,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"rightLeg": {
|
||||||
|
"z": 0.1
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 2,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"rightLeg": {
|
||||||
|
"pitch": -0.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 3,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"rightLeg": {
|
||||||
|
"pitch": -0.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 5,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"rightLeg": {
|
||||||
|
"pitch": -1.9707682
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 10,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"rightLeg": {
|
||||||
|
"pitch": -1.9707682
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 15,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"rightLeg": {
|
||||||
|
"pitch": -0.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 2,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"rightLeg": {
|
||||||
|
"yaw": -0.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 15,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"rightLeg": {
|
||||||
|
"yaw": -0.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 2,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"rightLeg": {
|
||||||
|
"roll": -0.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 15,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"rightLeg": {
|
||||||
|
"roll": -0.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 2,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"rightLeg": {
|
||||||
|
"bend": -0.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 2,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"rightArm": {
|
||||||
|
"x": -5.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 15,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"rightArm": {
|
||||||
|
"x": -5.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 2,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"rightArm": {
|
||||||
|
"y": 2.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 15,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"rightArm": {
|
||||||
|
"y": 2.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 2,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"rightArm": {
|
||||||
|
"z": -0.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 15,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"rightArm": {
|
||||||
|
"z": -0.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 2,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"rightArm": {
|
||||||
|
"pitch": -0.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 5,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"rightArm": {
|
||||||
|
"pitch": -1.3665518
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 10,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"rightArm": {
|
||||||
|
"pitch": -1.3665518
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 15,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"rightArm": {
|
||||||
|
"pitch": -0.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 2,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"rightArm": {
|
||||||
|
"yaw": -0.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 15,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"rightArm": {
|
||||||
|
"yaw": -0.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 2,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"rightArm": {
|
||||||
|
"roll": -0.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 15,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"rightArm": {
|
||||||
|
"roll": -0.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 2,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"rightArm": {
|
||||||
|
"bend": -0.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 2,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"leftArm": {
|
||||||
|
"x": 5.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 15,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"leftArm": {
|
||||||
|
"x": 5.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 2,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"leftArm": {
|
||||||
|
"y": 2.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 15,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"leftArm": {
|
||||||
|
"y": 2.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 2,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"leftArm": {
|
||||||
|
"z": -0.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 15,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"leftArm": {
|
||||||
|
"z": -0.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 2,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"leftArm": {
|
||||||
|
"pitch": 0.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 5,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"leftArm": {
|
||||||
|
"pitch": -1.0793308
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 10,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"leftArm": {
|
||||||
|
"pitch": -1.0793308
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 15,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"leftArm": {
|
||||||
|
"pitch": 0.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 2,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"leftArm": {
|
||||||
|
"yaw": -0.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 15,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"leftArm": {
|
||||||
|
"yaw": -0.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 2,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"leftArm": {
|
||||||
|
"roll": 0.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 15,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"leftArm": {
|
||||||
|
"roll": 0.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 2,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"leftArm": {
|
||||||
|
"bend": -0.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 2,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"leftLeg": {
|
||||||
|
"x": 1.9
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 15,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"leftLeg": {
|
||||||
|
"x": 1.9
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 2,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"leftLeg": {
|
||||||
|
"y": 10.861001
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 3,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"leftLeg": {
|
||||||
|
"y": 12.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 15,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"leftLeg": {
|
||||||
|
"y": 12.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 2,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"leftLeg": {
|
||||||
|
"z": -0.5082285
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 3,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"leftLeg": {
|
||||||
|
"z": -0.1
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 15,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"leftLeg": {
|
||||||
|
"z": -0.1
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 2,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"leftLeg": {
|
||||||
|
"pitch": -0.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 3,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"leftLeg": {
|
||||||
|
"pitch": -0.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 5,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"leftLeg": {
|
||||||
|
"pitch": -1.9850811
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 10,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"leftLeg": {
|
||||||
|
"pitch": -1.9850811
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 15,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"leftLeg": {
|
||||||
|
"pitch": -0.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 2,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"leftLeg": {
|
||||||
|
"yaw": -0.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 15,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"leftLeg": {
|
||||||
|
"yaw": -0.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 2,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"leftLeg": {
|
||||||
|
"roll": -0.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 15,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"leftLeg": {
|
||||||
|
"roll": 0.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 2,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"leftLeg": {
|
||||||
|
"bend": -0.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 2,
|
||||||
|
"easing": "INQUAD",
|
||||||
|
"body": {
|
||||||
|
"x": 0.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 16,
|
||||||
|
"easing": "INQUAD",
|
||||||
|
"body": {
|
||||||
|
"x": 0.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 2,
|
||||||
|
"easing": "INQUAD",
|
||||||
|
"body": {
|
||||||
|
"y": -0.061333913
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 7,
|
||||||
|
"easing": "OUTQUAD",
|
||||||
|
"body": {
|
||||||
|
"y": 0.48852682
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 15,
|
||||||
|
"easing": "CONSTANT",
|
||||||
|
"body": {
|
||||||
|
"y": 0.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 16,
|
||||||
|
"easing": "INQUAD",
|
||||||
|
"body": {
|
||||||
|
"y": 0.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 2,
|
||||||
|
"easing": "INQUAD",
|
||||||
|
"body": {
|
||||||
|
"z": -0.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 16,
|
||||||
|
"easing": "INQUAD",
|
||||||
|
"body": {
|
||||||
|
"z": -0.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 2,
|
||||||
|
"easing": "INQUAD",
|
||||||
|
"body": {
|
||||||
|
"pitch": 0.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 7,
|
||||||
|
"easing": "OUTQUAD",
|
||||||
|
"body": {
|
||||||
|
"pitch": -2.8362873
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 15,
|
||||||
|
"easing": "CONSTANT",
|
||||||
|
"body": {
|
||||||
|
"pitch": -6.2831855
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 16,
|
||||||
|
"easing": "INQUAD",
|
||||||
|
"body": {
|
||||||
|
"pitch": 0.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 2,
|
||||||
|
"easing": "INQUAD",
|
||||||
|
"body": {
|
||||||
|
"yaw": 0.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 16,
|
||||||
|
"easing": "INQUAD",
|
||||||
|
"body": {
|
||||||
|
"yaw": 0.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 2,
|
||||||
|
"easing": "INQUAD",
|
||||||
|
"body": {
|
||||||
|
"roll": -0.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 16,
|
||||||
|
"easing": "INQUAD",
|
||||||
|
"body": {
|
||||||
|
"roll": 0.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 2,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"body": {
|
||||||
|
"bend": -0.0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,354 @@
|
|||||||
|
{
|
||||||
|
"version": 1,
|
||||||
|
"valid": true,
|
||||||
|
"name": "tpose",
|
||||||
|
"description": "MENACING",
|
||||||
|
"author": "stephanieisdumb",
|
||||||
|
"emote": {
|
||||||
|
"beginTick": 0,
|
||||||
|
"endTick": 80,
|
||||||
|
"stopTick": 81,
|
||||||
|
"isLoop": true,
|
||||||
|
"returnTick": 20,
|
||||||
|
"nsfw": false,
|
||||||
|
"degrees": false,
|
||||||
|
"moves": [
|
||||||
|
{
|
||||||
|
"tick": 10,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"rightArm": {
|
||||||
|
"x": -5.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 20,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"rightArm": {
|
||||||
|
"x": -6.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 80,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"rightArm": {
|
||||||
|
"x": -6.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 10,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"rightArm": {
|
||||||
|
"y": 2.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 20,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"rightArm": {
|
||||||
|
"y": 3.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 80,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"rightArm": {
|
||||||
|
"y": 3.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 10,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"rightArm": {
|
||||||
|
"z": -0.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 20,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"rightArm": {
|
||||||
|
"z": -0.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 80,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"rightArm": {
|
||||||
|
"z": -0.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 10,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"rightArm": {
|
||||||
|
"pitch": -1.0704756
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 20,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"rightArm": {
|
||||||
|
"pitch": -0.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 50,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"rightArm": {
|
||||||
|
"pitch": 0.059108086
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 80,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"rightArm": {
|
||||||
|
"pitch": -0.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 10,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"rightArm": {
|
||||||
|
"yaw": -0.61077195
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 20,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"rightArm": {
|
||||||
|
"yaw": -0.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 50,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"rightArm": {
|
||||||
|
"yaw": -0.008776078
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 80,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"rightArm": {
|
||||||
|
"yaw": -0.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 10,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"rightArm": {
|
||||||
|
"roll": 0.6060502
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 20,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"rightArm": {
|
||||||
|
"roll": 1.5707964
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 50,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"rightArm": {
|
||||||
|
"roll": 1.5765934
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 80,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"rightArm": {
|
||||||
|
"roll": 1.5707964
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 10,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"rightArm": {
|
||||||
|
"bend": -1.3806202
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 20,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"rightArm": {
|
||||||
|
"bend": -0.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 10,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"leftArm": {
|
||||||
|
"x": 5.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 20,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"leftArm": {
|
||||||
|
"x": 6.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 80,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"leftArm": {
|
||||||
|
"x": 6.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 10,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"leftArm": {
|
||||||
|
"y": 2.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 20,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"leftArm": {
|
||||||
|
"y": 3.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 80,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"leftArm": {
|
||||||
|
"y": 3.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 10,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"leftArm": {
|
||||||
|
"z": -0.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 20,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"leftArm": {
|
||||||
|
"z": -0.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 80,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"leftArm": {
|
||||||
|
"z": -0.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 10,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"leftArm": {
|
||||||
|
"pitch": -1.0045553
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 20,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"leftArm": {
|
||||||
|
"pitch": 0.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 50,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"leftArm": {
|
||||||
|
"pitch": 0.010133168
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 80,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"leftArm": {
|
||||||
|
"pitch": 0.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 10,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"leftArm": {
|
||||||
|
"yaw": 0.44322997
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 20,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"leftArm": {
|
||||||
|
"yaw": -0.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 50,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"leftArm": {
|
||||||
|
"yaw": 0.038214765
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 80,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"leftArm": {
|
||||||
|
"yaw": -0.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 10,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"leftArm": {
|
||||||
|
"roll": -0.5571526
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 20,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"leftArm": {
|
||||||
|
"roll": -1.5707964
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 50,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"leftArm": {
|
||||||
|
"roll": -1.5692185
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 80,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"leftArm": {
|
||||||
|
"roll": -1.5707964
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 10,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"leftArm": {
|
||||||
|
"bend": -1.3810014
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 20,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"leftArm": {
|
||||||
|
"bend": -0.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 80,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"leftLeg": {
|
||||||
|
"pitch": 0.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tick": 80,
|
||||||
|
"easing": "INOUTQUAD",
|
||||||
|
"rightLeg": {
|
||||||
|
"pitch": 0.0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
After Width: | Height: | Size: 151 KiB |
|
After Width: | Height: | Size: 167 KiB |
|
After Width: | Height: | Size: 1.6 MiB |
|
After Width: | Height: | Size: 33 KiB |
|
After Width: | Height: | Size: 1.6 MiB |
|
After Width: | Height: | Size: 31 KiB |
|
After Width: | Height: | Size: 1.6 MiB |
|
After Width: | Height: | Size: 31 KiB |
|
After Width: | Height: | Size: 120 KiB |
|
After Width: | Height: | Size: 8.3 KiB |
|
After Width: | Height: | Size: 140 KiB |
|
After Width: | Height: | Size: 105 KiB |
|
After Width: | Height: | Size: 2.3 KiB |
|
After Width: | Height: | Size: 8.9 KiB |
|
After Width: | Height: | Size: 18 KiB |
|
After Width: | Height: | Size: 100 KiB |
|
After Width: | Height: | Size: 106 KiB |
|
After Width: | Height: | Size: 69 KiB |
|
After Width: | Height: | Size: 60 KiB |
|
After Width: | Height: | Size: 64 KiB |
|
After Width: | Height: | Size: 84 KiB |
|
After Width: | Height: | Size: 20 KiB |
|
After Width: | Height: | Size: 228 KiB |
|
After Width: | Height: | Size: 22 KiB |
|
After Width: | Height: | Size: 50 KiB |
|
After Width: | Height: | Size: 82 KiB |
|
After Width: | Height: | Size: 38 KiB |
|
After Width: | Height: | Size: 1.5 KiB |
|
After Width: | Height: | Size: 1.6 KiB |
|
After Width: | Height: | Size: 3.1 KiB |
|
After Width: | Height: | Size: 322 B |
|
After Width: | Height: | Size: 1.6 KiB |
|
After Width: | Height: | Size: 3.5 KiB |
|
After Width: | Height: | Size: 2.7 KiB |
|
After Width: | Height: | Size: 645 B |
|
After Width: | Height: | Size: 1.5 KiB |
|
After Width: | Height: | Size: 374 B |
|
After Width: | Height: | Size: 2.5 KiB |
|
After Width: | Height: | Size: 771 B |
|
After Width: | Height: | Size: 357 B |
|
After Width: | Height: | Size: 523 B |
|
After Width: | Height: | Size: 2.1 KiB |
|
After Width: | Height: | Size: 884 B |
|
After Width: | Height: | Size: 958 B |
|
After Width: | Height: | Size: 39 KiB |
|
After Width: | Height: | Size: 44 KiB |
|
After Width: | Height: | Size: 44 KiB |
|
After Width: | Height: | Size: 59 KiB |
|
After Width: | Height: | Size: 129 B |
|
After Width: | Height: | Size: 43 KiB |
|
After Width: | Height: | Size: 3.1 KiB |
|
After Width: | Height: | Size: 4.4 KiB |
|
After Width: | Height: | Size: 4.7 KiB |
|
After Width: | Height: | Size: 6.8 KiB |
|
After Width: | Height: | Size: 3.3 KiB |
|
After Width: | Height: | Size: 2.5 KiB |
|
After Width: | Height: | Size: 3.2 KiB |
|
After Width: | Height: | Size: 3.7 KiB |
|
After Width: | Height: | Size: 11 KiB |
|
After Width: | Height: | Size: 14 KiB |
|
After Width: | Height: | Size: 105 B |
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="#ffffff" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-shield-icon lucide-shield"><path d="M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z"/></svg>
|
||||||
|
After Width: | Height: | Size: 404 B |
@@ -0,0 +1,7 @@
|
|||||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
|
␍<!-- Uploaded to: SVG Repo, www.svgrepo.com, Transformed by: SVG Repo Mixer Tools -->
|
||||||
|
<svg width="800px" height="800px" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
␍<g id="SVGRepo_bgCarrier" stroke-width="0"/>
|
||||||
|
␍<g id="SVGRepo_tracerCarrier" stroke-linecap="round" stroke-linejoin="round"/>
|
||||||
|
␍<g id="SVGRepo_iconCarrier"> <path d="M12 7V12L10.5 14.5M21 12C21 16.9706 16.9706 21 12 21C7.02944 21 3 16.9706 3 12C3 7.02944 7.02944 3 12 3C16.9706 3 21 7.02944 21 12Z" stroke="#ffffff" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> </g>
|
||||||
|
␍</svg>
|
||||||
|
After Width: | Height: | Size: 681 B |
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="#ffffff" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-move3d-icon lucide-move-3d"><path d="M5 3v16h16"/><path d="m5 19 6-6"/><path d="m2 6 3-3 3 3"/><path d="m18 16 3 3-3 3"/></svg>
|
||||||
|
After Width: | Height: | Size: 324 B |